<?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>stealthcopter.com &#187; mat</title>
	<atom:link href="http://www.stealthcopter.com/blog/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.stealthcopter.com/blog</link>
	<description>Android, Linux, Python and stealthcopters</description>
	<lastBuildDate>Sat, 24 Jul 2010 00:01:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Google updates its Android Market Developer Distribution Agreement</title>
		<link>http://www.stealthcopter.com/blog/2010/07/google-updates-its-android-market-developer-distribution-agreement/</link>
		<comments>http://www.stealthcopter.com/blog/2010/07/google-updates-its-android-market-developer-distribution-agreement/#comments</comments>
		<pubDate>Sat, 24 Jul 2010 00:01:54 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=948</guid>
		<description><![CDATA[Google have just issued an update to the Android Market Developer Distribution Agreement, which if you do not accept within 30 days your applications will be removed from the market. The Highlights I will just emphasise the things that I believe will be of most interest (to me) and other developers (I imagine), might save [...]]]></description>
			<content:encoded><![CDATA[<p>Google have just issued an update to the <strong>Android Market Developer Distribution Agreement</strong>, which if you do not accept within 30 days your applications will be removed from the market. </p>
<div id="attachment_949" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/07/google-updates-its-android-market-developer-distribution-agreement/market/" rel="attachment wp-att-949"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/market-600x178.png" alt="Updated Android Market Developer Distribution Agreement" title="Updated Android Market Developer Distribution Agreement" width="600" height="178" class="size-medium wp-image-949" /></a><p class="wp-caption-text">Updated Android Market Developer Distribution Agreement</p></div>
<p><strong>The Highlights</strong><br />
I will just emphasise the things that I believe will be of most interest (to me) and other developers (I imagine), might save some of you the trouble of having to read it all:</p>
<p><strong>3.2 A Transaction Fee, as defined below, will be charged on the sales price and apportioned to the Payment Processor and, if one exists, the Authorized Carrier.</strong> Looks like some carriers are going to be getting a cut of developers profits, would be interested to see if this is an incentive for the networks by google or if the networks have been putting pressure on google for a cut of the profits. It isn&#8217;t clear if this will come out of the transaction free or our own cut, I would imagine it is the latter but will probably be clarified in the future dependant on service provider.</p>
<p>Annoyingly the link that google provid in 3.2 is broken (<a href="http://www.android.com/support/market/bin/answer.py?answer=112622">http://www.android.com/support/market/bin/answer.py?answer=112622</a>) with regards the pricing arrangement.</p>
<p><strong>4.5 Non-Compete. You may not use the Market to distribute or make available any Product whose primary purpose is to facilitate the distribution of Products outside of the Market.</strong></p>
<p>Looks like google are a little concerned about alternative markets (good if not slightly dated article on these market apps <a href="http://www.appnoodle.com/2009/08/alternatives-to-the-official-android-market/">here</a>). This could also be related to the recent developments in china with regards android&#8230; (<a href="http://www.androidpolice.com/2010/07/22/oh-snap-chinese-carriers-removing-google-from-android-equation/">androidpolice</a>)</p>
<p><strong>7. Product Takedowns</strong> Some regulations about providing support/refunds after taking down an app, and that google may take down your app if it is: &#8220;defective, malicious, infringes Intellectual Property Rights of another person, defames, infringes a third party&#8217;s right of publicity or privacy, or does not comply with applicable laws or rgeulations&#8221;</p>
<p><strong>Minor points</strong></p>
<ul>
<li>Your app may be used for publicity or as a demonstration, sounds like agreeing to free advertising&#8230; not a bad thing if they choose your app!</li>
<li>Several additions to help the buyers get refunds from shoddy or unsupported applications/developers.</li>
<li>Notification of google having the right to order the apps in searches how it wants</li>
<li><strong>12.1 a</strong> &#8211; google doesn&#8217;t plan on taking the blame if you cause a death with your app somehow&#8230;</li>
<li><strong>13.1 + 13.2</strong> &#8211; we don&#8217;t blame google for mistakes/crimes we commit and will cover their legal costs if required&#8230;</li>
</ul>
<p><strong>Feedback and full agreement</strong></p>
<p>Those are what I consider to be the most important things, please comment if you think I missed anything or interpreted something incorrectly. The full distribution agreement follows below:</p>
<blockquote><p>
Android market developer distribution agreement<br />
Definitions</p>
<p>Authorized Carrier: A mobile network operator who is authorized to receive a distribution fee for Products that are sold to users of Devices on its network.</p>
<p>Brand Features: the trade names, trade marks, service marks, logos, domain names, and other distinctive brand features of each party, respectively, as owned by (or licensed to) such party from time to time.</p>
<p>Developer or You: Any person or company who is registered and approved by the Market to distribute Products in accordance with the terms of this Agreement.</p>
<p>Developer Account: A publishing account issued to Developers that enables the distribution of Products via the Market.</p>
<p>Device: Any mobile device that can access the Market, as defined herein</p>
<p>Google: Google Inc., a Delaware corporation with principal place of business at 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States.</p>
<p>Intellectual Property Rights: means all copyright; moral rights; patent rights; trade or service marks; design right; semiconductor topography rights; rights in or relating to databases; rights in or relating to confidential information; rights in relation to domain names; privacy or publicity rights and any other intellectual property rights (registered or unregistered) throughout the world; including all rights of reversion and rights to any applications and pending registrations and the right to sue for and recover damages for past infringements.</p>
<p>Market: The Android Market site operated by Google, where Developers can distribute Products directly to users of Devices.</p>
<p>Payment Processor(s): Any party authorized by Google to provide payment processing services that enable Developers with optional Payment Accounts to charge Device users for Products distributed via the Market.</p>
<p>Payment Account: A financial account issued by a Payment Processor to a Developer that authorizes the Payment Processor to collect and remit payments on the Developer&#8217;s behalf for Products sold via the Market. Developers must be approved by a Payment Processor for a Payment Account and maintain their account in good standing to charge for Products distributed in the Market.</p>
<p>Products: Software, content and digital materials created for Devices in accordance with the Android SDK and distributed via the Market.</p>
<p>1. Introduction</p>
<p>1.1 The Market is a publicly available site on which Android Developers can distribute Products for Devices. In order to distribute Products on the Market, You must acquire and maintain a valid Developer Account.</p>
<p>1.2 If You want to charge a fee for Your Products, You must also acquire and maintain a valid Payment Account from an authorized Payment Processor.</p>
<p>2. Accepting this Agreement</p>
<p>2.1 This Android Market Developer Distribution Agreement (&#8220;Agreement&#8221;) forms a legally binding contract between You and Google in relation to Your use of the Market to distribute Products. In order to use the Market to distribute Products, You must first agree to this Agreement by clicking to accept where this option is made available to You. You may not distribute Products on the Market if You do not accept this Agreement.</p>
<p>2.2 You may not use the Market to distribute Products and may not accept the Agreement unless You are verified as a Developer in good standing. This Agreement will automatically terminate if You are (a) not a Developer in good standing, or (b) a person or entity barred from using Android software under the laws of the United States or other countries including the country in which You are resident or from which You use the Android software.</p>
<p>2.3 If You are agreeing to be bound by this Agreement on behalf of Your employer or other entity, You represent and warrant that You have full legal authority to bind Your employer or such entity to this Agreement. If You do not have the requisite authority, You may not accept the Agreement or use the Market on behalf of Your employer or other entity.</p>
<p>3. Pricing and Payments.</p>
<p>3.1 This Agreement covers both Products You choose to distribute for free and Products for which You charge a fee (once payment processing is enabled on the Market). In order to charge a fee for Your Products, You must have a valid Payment Account under a separate agreement with a Payment Processor. If You already have a Payment Account with a Payment Processor before signing up for the Market, then the terms of this Agreement shall supersede Your Payment Account terms and condition for Products sold via the Market.<br />
You may set the price for Your Products in the currencies permitted by the Payment Processor. The Market may display to users the price of Products in their native currency, but it is not responsible for the accuracy of currency rates or conversion</p>
<p>3.2 The price You set for Products will determine the amount of payment You will receive. A Transaction Fee, as defined below, will be charged on the sales price and apportioned to the Payment Processor and, if one exists, the Authorized Carrier. The remainder (sales price less Transaction Fee) will be remitted to You. The &#8220;Transaction Fee&#8221; is set forth at http://www.android.com/support/market/bin/answer.py?answer=112622 and may be revised by Google from time to time. Developer is responsible for determining if a Product is taxable and the applicable tax rate for the Payment Processor to collect for each taxing jurisdiction where Products are sold. Developer is responsible for remitting taxes to the appropriate taxing authority.</p>
<p>3.3 You may also choose to distribute Products for free. If the Product is free, You will not be charged a Transaction Fee. You may not collect future charges from users for copies of the Products that those users were initially allowed to download for free. This is not intended to prevent distribution of free trial versions of the Product with an &#8220;upsell&#8221; option to obtain the full version of the Product: Such free trials for Products are encouraged. However, if You want to collect fees after the free trial expires, You must collect all fees for the full version of the Product through the Payment Processor on the Market. In this Agreement, &#8220;free&#8221; means there are no charges or fees of any kind for use of the Product. All fees received by Developers for Products distributed via the Market must be processed by the Market&#8217;s Payment Processor.</p>
<p>3.4 Special Refund Requirements. The Payment Processor&#8217;s standard terms and conditions regarding refunds will apply except the following terms apply to Your distribution of Products on the Market.<br />
Products that can be previewed by the buyer (such as ringtones and wallpapers): No refund is required or allowed.<br />
Products that cannot be previewed by the buyer (such as applications): You authorize Google to give the buyer a full refund of the Product price if the buyer requests the refund within 48 hours after purchase.<br />
3.5 You Support Your Product. You will be solely responsible for support and maintenance of Your Products and any complaints about Your Products. Your contact information will be displayed in each application detail page and made available to users for customer support purposes. Failure to provide adequate support for Your Products may result in low Product ratings, less prominent product exposure, low sales and billing disputes. Except in cases when multiple disputes are initiated by a user with abnormal dispute history, billing disputes received by Payment Processor for Products sold for less than $10 may be automatically charged back to the Developer, in addition to any handling fees charged by the Payment Processor. Chargeback requests for Products $10 or more will be handled in accordance with the Payment Processor&#8217;s standard policy.</p>
<p>3.6 Reinstalls. Users are allowed unlimited reinstalls of each application distributed via the Market, provided however that if You remove a Product(s) from the Market pursuant to clauses (i), (ii), (iii) or (iv) of Section 7.1, such Product(s) shall be removed from all portions of the Market and users shall no longer have a right or ability to reinstall the affected Products.</p>
<p>4. Use of the Market by You</p>
<p>4.1 Except for the license rights granted by You in Section 5 below, Google agrees that it obtains no right, title or interest from You (or Your licensors) under this Agreement in or to any of Products, including any intellectual property rights which subsist in those applications.</p>
<p>4.2 You agree to use the Market only for purposes that are permitted by (a) this Agreement and (b) any applicable law, regulation or generally accepted practices or guidelines in the relevant jurisdictions (including any laws regarding the export of data or software to and from the United States or other relevant countries).</p>
<p>4.3 You agree that if You use the Market to distribute Products, You will protect the privacy and legal rights of users. If the users provide You with, or Your Product accesses or uses, user names, passwords, or other login information or personal information, You must make the users aware that the information will be available to Your Product, and You must provide legally adequate privacy notice and protection for those users. Further, Your Product may only use that information for the limited purposes for which the user has given You permission to do so. If Your Product stores personal or sensitive information provided by users, it must do so securely and only for as long as it is needed. But if the user has opted into a separate agreement with You that allows You or Your Product to store or use personal or sensitive information directly related to Your Product (not including other products or applications) then the terms of that separate agreement will govern Your use of such information. If the user provides Your Product with Google Account information, Your Product may only use that information to access the user&#8217;s Google Account when, and for the limited purposes for which, the user has given You permission to do so.</p>
<p>4.4 Prohibited Actions. You agree that You will not engage in any activity with the Market, including the development or distribution of Products, that interferes with, disrupts, damages, or accesses in an unauthorized manner the devices, servers, networks, or other properties or services of any third party including, but not limited to, Android Users, Google or any mobile network operator. You may not use customer information obtained from the Market to sell or distribute Products outside of the Market.</p>
<p>4.5 Non-Compete. You may not use the Market to distribute or make available any Product whose primary purpose is to facilitate the distribution of Products outside of the Market.</p>
<p>4.6 You agree that You are solely responsible for (and that Google has no responsibility to You or to any third party for) any Products You distribute through the Market and for the consequences of Your actions (including any loss or damage which Google may suffer) by doing so.</p>
<p>4.7 You agree that You are solely responsible for (and that Google has no responsibility to You or to any third party for) any breach of Your obligations under this Agreement, any applicable third party contract or terms of service, or any applicable law or regulation, and for the consequences (including any loss or damage which Google or any third party may suffer) of any such breach.</p>
<p>4.8 The Market will allow You to protect Your Products so that users may not share Products with other users or devices.</p>
<p>4.9 Product Ratings. The Market will allow users to rate Products. Only users who download the applicable Product will be able to rate it. Product ratings will be used to determine the placement of Products on the Market with higher rated Products generally given better placement, subject to Google&#8217;s ability to change placement at Google&#8217;s sole discretion. The Market may also assign You a composite score for any Product that has not received user ratings. This &#8220;Developer Composite Score&#8221; will be a representation of the quality of Your Product based on Your history and will be determined at Google&#8217;s sole discretion. For new Developers without Product history, Google may use or publish performance measurements such as uninstall and/or refund rates to identify or remove Products that are not meeting acceptable standards, as determined by Google. Google reserves the right to display Products to users in a manner that will be determined at Google&#8217;s sole discretion.</p>
<p>Your Products may be subject to user ratings with which You may not agree. You may contact Google if You have any questions or concerns regarding such ratings at http://market.android.com/support/publish.</p>
<p>4.10 Marketing Your Product. You will be responsible for uploading Your Products to the Market, providing required Product information to users, and accurately disclosing the security permissions necessary for the Product to function on user Devices. Products that are not properly uploaded will not be published in the Market.</p>
<p>4.11 Restricted Content. Any Product You distribute on the Market must adhere to the Market Content Policy for Developers located at http://www.android.com/market/terms/developer-content-policy.html.</p>
<p>5. License Grants</p>
<p>5.1 You grant to Google a nonexclusive, worldwide, and royalty-free license to: copy, perform, display, and use the Products for administrative and demonstration purposes in connection with the operation and marketing of the Market and to use the Products to make improvements to the Android platform.</p>
<p>5.2 You grant to Google a non-exclusive, and royalty-free license to make available, communicate to the public and distribute the Products according to the publishing options selected by You on the Product upload page of the Market.</p>
<p>5.3 Google may use consultants and other contractors in connection with the performance of obligations and exercise of rights under this agreement, and may sublicense its rights under this Agreement to them accordingly, provided that such consultants and contractors will be subject to the same obligations as Google. After termination of this Agreement, Google will not distribute Your Product, but may retain and use copies of the Product for support of the Market and the Android platform.</p>
<p>5.4 You grant to the user a non-exclusive, worldwide, and perpetual license to perform, display, and use the Product on the Device. If You choose, You may include a separate end user license agreement (EULA) in Your Product that will govern the user&#8217;s rights to the Product in lieu of the previous sentence.</p>
<p>5.5 You represent and warrant that You either own or have a valid licence of all Intellectual Property Rights in and to the Product. If You use third-party materials, or any Intellectual Property Rights in the Product are owned by third parties, You represent and warrant that You have the right to distribute the third-party material in the Product. You agree that You will not submit material to Market that is subject to third party Intellectual Property Rights unless You are the owner of such Intellectual Property Rights or have permission from their rightful owner to submit the material in the manner described in this Agreement.</p>
<p>6. Brand Features and Publicity.</p>
<p>6.1 Each party shall own all right, title and interest, including without limitation all Intellectual Property Rights, relating to its Brand Features. Except to the limited extent expressly provided in this Agreement, neither party grants, nor shall the other party acquire, any right, title or interest (including, without limitation, any implied license) in or to any Brand Features of the other party. Subject to the terms and conditions of this Agreement, Developer grants to Google and its affiliates a limited, non-exclusive, royalty-free, worldwide license during the term of this Agreement to display Developer Brand Features, submitted by Developer to Google, for use solely online or on mobile devices and in either case solely in connection with the distribution and sale of Developer&#8217;s Product through the Market or to otherwise fulfill its obligations under this Agreement. If Developer discontinues the distribution of specific Products on the Market, Google will cease use of the discontinued Products&#8217; Brand Features pursuant to this Section 6.1, except as necessary to allow Google to effectuate Section 3.6. Nothing in this Agreement gives Developer a right to use any of Google&#8217;s trade names, trademarks, service marks, logos, domain names, or other distinctive brand features.</p>
<p>6.2 Publicity. In addition to the license granted in 6.1 above, for purposes of marketing the presence, distribution and sale of the Developer&#8217;s Product in the Market, Google and its affiliates may include Developer Brand Features, submitted by Developer to Google: (i) within the Market and in any Google-owned online or mobile properties; (ii) in online or mobile communications outside the Market when mentioned along with other Market Products; (iii) when making announcements of the availability of the Product online or on mobile devices; (iv) in presentations; and (v) in customer lists which appear either online or on mobile devices (which includes, without limitation, customer lists posted on Google websites). If Developer discontinues the distribution of specific Products on the Market, Google will cease use of the discontinued Products&#8217; Brand Features for such marketing purposes. Google grants to Developer a limited, non-exclusive, worldwide, royalty-free license to use the Android Brand Features for the term of this Agreement solely for marketing purposes and only in accordance with the Android Brand Guidelines located at http://www.android.com/branding.html).</p>
<p>7. Product Takedowns.</p>
<p>7.1(a) Your Takedowns. You may remove Your Products from future distribution via the Market at any time, but You must comply with this Agreement and the Payment Processor&#8217;s Payment Account terms of service for any Products distributed through the Market, including but not limited to refund requirements. Removing Your Products from future distribution via the Market does not (a) affect the license rights of users who have previously purchased or downloaded Your Products, (b) remove Your Products from Devices or from any part of the Market where previously purchased or downloaded applications are stored on behalf of users, or (c) change Your obligation to deliver or support Products or services that have been previously purchased or downloaded by users. Notwithstanding the foregoing, in no event will Google maintain on any portion of the Market (including, without limitation, the part of the Market where previously purchased or downloaded applications are stored on behalf of users) any Product that You have removed from the Market and where You have provided written notice to Google that such removal was due to (i) an allegation of infringement, or actual infringement, of any Intellectual Property Right of any person, (ii) an allegation of defamation or actual defamation, (iii) an allegation of violation, or actual violation, of any third party&#8217;s right of publicity or privacy, or (iv) an allegation or determination that such Product does not comply with applicable law.<br />
(b) If You remove a Product from the Market pursuant to clauses (i), (ii), (iii) or (iv) of this Section 7.1, and an end user purchased such Product within a year before the date of takedown, at Google&#8217;s request, You must refund to the affected end user all amounts paid by such end user for such affected Product, less the portion of the Transaction Fee specifically allocated to the credit card/payment processing for the associated transaction.</p>
<p>7.2 (a) Google Takedowns. While Google does not intend, and does not undertake, to monitor the Products or their content, if Google is notified by You or otherwise becomes aware and determines in its sole discretion that a Product or any portion thereof or Your Brand Features; (a) infringes the Intellectual Property Rights or any other rights of any third party; (b) breaches any applicable law or is subject to an injunction; (c) is pornographic, obscene or otherwise violates Google&#8217;s hosting policies or other terms of service as may be updated by Google from time to time in its sole discretion; (d) is being distributed by You improperly; (e) may create liability for Google or Authorized Carriers; (f) is deemed by Google to have a virus or is deemed to be malware, spyware or have an adverse impact on Google&#8217;s or an Authorized Carrier&#8217;s network; (g) breaches the terms of this Agreement or the Market Content Policy for Developers; or (h) the display of the Product is impacting the integrity of Google servers (i.e., users are unable to access such content or otherwise experience difficulty), Google may remove the Product from the Market or reclassify the Product at its sole discretion. Google reserves the right to suspend and/or bar any Developer from the Market at its sole discretion.<br />
(b) Google enters into distribution agreements with device manufacturers and Authorized Carriers to place the Market software client application for the Market on Devices. These distribution agreements may require the involuntary removal of Products in breach of the Device manufacturer&#8217;s or Authorized Carrier&#8217;s terms of service.</p>
<p>(c) In the event that Your Product is involuntarily removed because it is defective, malicious, infringes Intellectual Property Rights of another person, defames, infringes a third party&#8217;s right of publicity or privacy, or does not comply with applicable laws or rgeulations, and an end user purchased such Product within a year before the date of takedown: (i) You must refund to Google, all amounts received, plus any associated fees (i.e. chargebacks and payment transaction fees), and (ii) Google may, at its sole discretion, withhold from Your future sales the aggregate of the amounts referred to in subsection (i) above.</p>
<p>8. Your Developer Credentials</p>
<p>8.1 You agree that You are responsible for maintaining the confidentiality of any developer credentials that may be issued to You by Google or which You may choose Yourself and that You will be solely responsible for all applications that are developed under Your developer credentials. Google may limit the number of Developer Accounts issued to You or to the company or organization You work for.</p>
<p>9. Privacy and Information</p>
<p>9.1 In order to continually innovate and improve the Market, Google may collect certain usage statistics from the Market and Devices, including but not limited to, information on how the Market and Devices are being used.</p>
<p>9.2 The data collected is examined in the aggregate to improve the Market for users and Developers and is maintained in accordance with Google&#8217;s Privacy Policy. To ensure the improvement of Products, limited aggregate data may be available to You upon written request.</p>
<p>10. Terminating this Agreement</p>
<p>10.1 This Agreement will continue to apply until terminated by either You or Google as set out below.</p>
<p>10.2 If You want to terminate this Agreement, You must provide Google with thirty (30) days prior written notice (unless this Agreement terminates under Section 14.1) and cease Your use of any relevant developer credentials.</p>
<p>10.3 Google may at any time, terminate this Agreement with You if:</p>
<p>(A) You have materially breached any provision of this Agreement; or</p>
<p>(B) Google is required to do so by law; or</p>
<p>(C) You cease being an authorized Developer; or</p>
<p>(D) Google decides to no longer provide the Market.</p>
<p>11. WARRANTIES</p>
<p>11.1 Each party warrants to the other that it will use reasonable care and skill in complying with its obligations under this Agreement.</p>
<p>11.2 Your use of the market and any material downloaded or otherwise obtained through the use of the Market is at Your own discretion and risk and You are solely responsible for any damage to your computer system or other device or loss of data that results from such use.</p>
<p>11.3 No conditions, warranties or other terms apply to the Market or to any other goods or services supplied by Google under this Agreement unless expressly set out in this Agreement. Subject to Section 12.1(b), no implied conditions, warranties or other terms apply (including any implied terms as to satisfactory quality, fitness for purpose or conformance with description).</p>
<p>12. LIMITATION OF LIABILITY</p>
<p>12.1 Nothing in this Agreement shall exclude or limit either party&#8217;s liability for:</p>
<p>(a) death or personal injury resulting from the negligence of either party or their servants, agents or employees;</p>
<p>(b) fraud or fraudulent misrepresentation; or</p>
<p>(c) misuse of confidential information.</p>
<p>Nothing in this Agreement shall exclude or limit liability under Section 13 (Indemnities).</p>
<p>Subject to clauses 12.1 and 12.2, neither party shall be liable under this Agreement (whether in contract, tort or otherwise) for any special, indirect or consequential losses (whether or not such losses were within the contemplation of the parties at the date of this Agreement) suffered or incurred by the other party.</p>
<p>13. Indemnification</p>
<p>13.1 You agree to defend, indemnify and hold harmless Google from and against any and all third party claims, actions, suits or proceedings, as well as any and all losses, liabilities, damages, costs and expenses (including reasonable legal fees) suffered or incurred by Google, any of its affiliates or their respective directors, officers, employees and agents, or by any Authorized Carrier, arising out of or accruing from (a) Your use of the Market in breach of this Agreement, and (b) any claim that Your Product that infringes any Intellectual Property Right of any person or defames any person or infringes their rights of publicity or privacy. Google shall provide You with reasonable information, assistance and cooperation in responding to and, where applicable, defending each such claim and You shall accept full control and sole authority over the defence and settlement of any such claim.</p>
<p>13.2 To the maximum extent permitted by law, you agree to indemnify Google from and against any and all third party losses, claims, actions, suits or proceedings, as well as any and all losses, liabilities, damages, costs and expenses (including reasonable attorneys fees) incurred by Google, the applicable Payment Processors (which may include Google and/or third parties) or the Payment Processors&#8217; affiliates, directors, officers, employees and agents arising out of or accruing from taxes related to Your distribution of Products distributed via the Market.</p>
<p>14. Changes to the Agreement</p>
<p>14.1 Google may make changes to this Agreement at any time by sending the Developer notice by email describing the modifications made. Google will also post a notification on the Market site describing the modifications made. The changes will become effective, and will be deemed accepted by Developer, (a) immediately for those who become Developers after the notification is posted, or (b) for pre-existing Developers, the modified Agreement will become effective upon Developer&#8217;s acceptance of the modified Agreement (except changes required by law which will be effective immediately). Pre-existing Developers will show their acceptance of the modified Agreement by going to the Market site and accepting the modified Agreement. In the event that Developer does not agree with the modifications to the Agreement within thirty (30) days after the date the email is sent, then Google will suspend the distribution of Developer&#8217;s Products until Developer agrees to the modified Agreement. In the event that You do not agree with the modifications within ninety (90) days after the date the email is sent, then You must terminate Your use of the Market, which will be Your sole and exclusive remedy.</p>
<p>15. General Legal Terms</p>
<p>15.1 All notices of termination or breach must be in English, in writing, addressed to the other party&#8217;s Legal Department and sent (in the case of Google) to legal-notices@google.com (as applicable) and in the acse of developer to the address notified to Google upon registration, or any other address as either party has notified the other in accordance with this clause. All notices shall be deemed to have been given on receipt as verified by written or automated receipt or electronic log (as applicable).</p>
<p>All other notices must be in English, in writing, addressed to the other party&#8217;s primary contact and sent to their then current postal address or email address.</p>
<p>Neither party may assign any of its rights or obligations under this Agreement without the prior written consent of the other.</p>
<p>You acknowledge and agree that each member of the group of companies of which Google is the parent shall be third party beneficiaries to this Agreement and that such other companies shall be entitled to directly enforce, and rely upon, any provision of this Agreement that confers a benefit on (or rights in favor of) them. Except as expressly stated otherwise, nothing in this Agreement shall create or confer any rights or other benefits in favour of any person other than the parties to this Agreement.</p>
<p>Except as expressly stated otherwise, nothing in this Agreement shall create an agency, partnership or joint venture of any kind between the parties.</p>
<p>Neither party shall be liable for failure to perform or delay in performing any obligation under this Agreement if the failure or delay is caused by any circumstances beyond its reasonable control.</p>
<p>15.7 Failure or delay in exercising any right or remedy under this Agreement shall not constitute a waiver of such (or any other) right or remedy.</p>
<p>15.8 The invalidity, illegality or unenforceability of any term (or part of a term) of this Agreement shall not affect the continuation in force of the remainder of the term (if any) and this Agreement.</p>
<p>15.9 Subject to Section 12.1(b), this Agreement sets out all terms agreed between the parties in relation to its subject matter and supersedes all previous agreements between the parties relating to the same. In entering into this Agreement neither party has relied on any statement, representation or warranty not expressly set out in this Agreement.</p>
<p>15.10 This Agreement is governed by English law and the parties submit to the exclusive jurisdiction of the English courts in relation to any dispute (contractual or non-contractual) concerning this Agreement save that either party may apply to any court for an injunction or other relief to protect its Intellectual Property Rights. If this Agreement is translated into any other language, if there is conflict the English text will take precedence.</p>
<p>15.11 Export Restrictions. Products on the Market may be subject to United States export laws and regulations. you must comply with all domestic and international export laws and regulations that apply to your distribution or use of Products. These laws include restrictions on destinations, users and end use.
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/07/google-updates-its-android-market-developer-distribution-agreement/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Polygon live wallpaper</title>
		<link>http://www.stealthcopter.com/blog/2010/07/polygon-live-wallpaper/</link>
		<comments>http://www.stealthcopter.com/blog/2010/07/polygon-live-wallpaper/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 21:10:49 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[art?]]></category>
		<category><![CDATA[Live Wallpaper]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=939</guid>
		<description><![CDATA[Following the success of my first live wallpaper (Nexus Revamped Pro) I have created another. The wallpaper bares similarity to the windows screensaver mystify but much more ascetically pleasing. Features Background color Polygon color or cycle through a range of colors Line thickness Number of apexes Number of trails Speed of movement Performance settings, anti-aliasing [...]]]></description>
			<content:encoded><![CDATA[<p>Following the success of my first live wallpaper (<a href="http://www.stealthcopter.com/blog/2010/06/nexus-revamped-pro-updated-google-android-live-wallpaper/">Nexus Revamped Pro</a>) I have created another. The wallpaper bares similarity to the windows screensaver mystify but much more ascetically pleasing.</p>
<p><strong>Features</strong></p>
<ul>
<li>Background color</li>
<li>Polygon color or cycle through a range of colors</li>
<li>Line thickness</li>
<li>Number of apexes</li>
<li>Number of trails</li>
<li>Speed of movement</li>
<li>Performance settings, anti-aliasing and Frames per second (FPS)</li>
<li>More to come soon, feel free to request something!</li>
</ul>
<p><strong>Images</strong></p>

<a href='http://www.stealthcopter.com/blog/2010/07/polygon-live-wallpaper/vlcsnap-2010-07-21-21h42m18s24/' title='polygon livewallpaper 1'><img width="150" height="150" src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/vlcsnap-2010-07-21-21h42m18s24-150x150.png" class="attachment-thumbnail" alt="polygon livewallpaper 1" title="polygon livewallpaper 1" /></a>
<a href='http://www.stealthcopter.com/blog/2010/07/polygon-live-wallpaper/vlcsnap-2010-07-21-21h42m26s104/' title='polygon livewallpaper 2'><img width="150" height="150" src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/vlcsnap-2010-07-21-21h42m26s104-150x150.png" class="attachment-thumbnail" alt="polygon livewallpaper 2" title="polygon livewallpaper 2" /></a>
<a href='http://www.stealthcopter.com/blog/2010/07/polygon-live-wallpaper/vlcsnap-2010-07-21-21h42m33s173/' title='polygon livewallpaper 3'><img width="150" height="150" src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/vlcsnap-2010-07-21-21h42m33s173-150x150.png" class="attachment-thumbnail" alt="polygon livewallpaper 3" title="polygon livewallpaper 3" /></a>
<a href='http://www.stealthcopter.com/blog/2010/07/polygon-live-wallpaper/vlcsnap-2010-07-21-21h43m03s225/' title='polygon livewallpaper 4'><img width="150" height="150" src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/vlcsnap-2010-07-21-21h43m03s225-150x150.png" class="attachment-thumbnail" alt="polygon livewallpaper 4" title="polygon livewallpaper 4" /></a>
<a href='http://www.stealthcopter.com/blog/2010/07/polygon-live-wallpaper/vlcsnap-2010-07-21-21h43m17s106/' title='polygon livewallpaper 5'><img width="150" height="150" src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/vlcsnap-2010-07-21-21h43m17s106-150x150.png" class="attachment-thumbnail" alt="polygon livewallpaper 5" title="polygon livewallpaper 5" /></a>
<a href='http://www.stealthcopter.com/blog/2010/07/polygon-live-wallpaper/vlcsnap-2010-07-21-21h42m45s43/' title='polygon livewallpaper 6'><img width="150" height="150" src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/vlcsnap-2010-07-21-21h42m45s43-150x150.png" class="attachment-thumbnail" alt="polygon livewallpaper 6" title="polygon livewallpaper 6" /></a>
<a href='http://www.stealthcopter.com/blog/2010/07/polygon-live-wallpaper/vlcsnap-2010-07-21-21h48m55s125/' title='polygon livewallpaper 7'><img width="150" height="150" src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/vlcsnap-2010-07-21-21h48m55s125-150x150.png" class="attachment-thumbnail" alt="polygon livewallpaper 7" title="polygon livewallpaper 7" /></a>
<a href='http://www.stealthcopter.com/blog/2010/07/polygon-live-wallpaper/p/' title='polygon livewallpaper 8'><img width="150" height="150" src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/p-150x150.png" class="attachment-thumbnail" alt="polygon livewallpaper 8" title="polygon livewallpaper 8" /></a>

<p><strong>Video</strong></p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/8zvZS8-sSFA&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/8zvZS8-sSFA&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p><strong>Market Links</strong></p>
<p><a href="market://details?id=com.stealthcopter.polygon">Polygon Live Wallpaper</a> (com.stealthcopter.polygon)</p>
<p><img src="http://www.stealthcopter.com/android/apps/polygon/qr_sml.png" alt="qr" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/07/polygon-live-wallpaper/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Best spam comment ever</title>
		<link>http://www.stealthcopter.com/blog/2010/07/best-spam-comment-ever/</link>
		<comments>http://www.stealthcopter.com/blog/2010/07/best-spam-comment-ever/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 12:36:53 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=938</guid>
		<description><![CDATA[Just noticed this little beauty sitting in my comment spam, found it hilerious so I thought I&#8217;d share it: HELP! I’m currently being held prisoner by the Russian mafia xyzrxyz penis enlargement xyzrxyz and being forced to post spam comments on blogs! If you don’t approve this they will kill me. xyzrxyz penis enlargement xyzrxyz [...]]]></description>
			<content:encoded><![CDATA[<p>Just noticed this little beauty sitting in my comment spam, found it hilerious so I thought I&#8217;d share it:</p>
<blockquote><p>
HELP! I’m currently being held prisoner by the Russian mafia xyzrxyz penis enlargement xyzrxyz and being forced to post spam comments on blogs! If you don’t approve this they will kill me. xyzrxyz penis enlargement xyzrxyz They’re coming back now. Please send help!
</p></blockquote>
<p>Needless to say I&#8217;ve purchased several penis enlargement kits to ensure this persons safety.</p>
<p><strong>Information</strong></p>
<blockquote><p>Author : penis enlargement (IP: 213.5.67.159 , hosted-by.altushost.com)<br />
E-mail : mattcut90@gmail.com<br />
URL    : http://www&#8230;&#8230;.. Censored&#8230;&#8230;&#8230;..com<br />
Whois  : http://ws.arin.net/cgi-bin/whois.pl?queryinput=213.5.67.159</p></blockquote>
<p>IP address <a href="http://ws.arin.net/whois/?queryinput=213.5.67.159">lookup</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/07/best-spam-comment-ever/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android Robot Keychains Received</title>
		<link>http://www.stealthcopter.com/blog/2010/07/android-robot-keychains-received/</link>
		<comments>http://www.stealthcopter.com/blog/2010/07/android-robot-keychains-received/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 11:39:53 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[art?]]></category>
		<category><![CDATA[memorabilia]]></category>
		<category><![CDATA[phone]]></category>
		<category><![CDATA[robot]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=932</guid>
		<description><![CDATA[I have received my android keychains (as mentioned previously) that I ordered from dealextreme, they are a little bigger than I was expecting and certain not suitable for strapping onto a phone, however they are the perfect size to be used with keyrings They cost $2.70 each (£1.80), or for 5+ $2.39 (£1.59), or for [...]]]></description>
			<content:encoded><![CDATA[<p>I have received my android keychains (<a href="http://www.stealthcopter.com/blog/2010/06/android-robot-…ain-for-phones/">as mentioned previously</a>) that I ordered from <a href="http://www.dealextreme.com/r.27613104">dealextreme</a>, they are a little bigger than I was expecting and certain not suitable for strapping onto a phone, however they are the perfect size to be used with keyrings <img src='http://www.stealthcopter.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>They cost $2.70 each (£1.80), or for 5+ $2.39 (£1.59), or for 10+ (£2.12). When ordering more than 5 remember to enable bulk rates, this adds a delivery charge but the prices calculated above include this, and you still save more.<br />
<a href="http://www.dealextreme.com/details.dx/sku.42022~r.27613104">Green android product link</a></p>
<p><strong>Photos:</strong></p>
<div id="attachment_936" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/07/android-robot-keychains-received/img_20100720_120037/" rel="attachment wp-att-936"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/IMG_20100720_120037-600x450.jpg" alt="Android keychain" title="Android keychain" width="600" height="450" class="size-medium wp-image-936" /></a><p class="wp-caption-text">Android keychain</p></div>
<div id="attachment_933" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/07/android-robot-keychains-received/img_20100720_115728/" rel="attachment wp-att-933"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/IMG_20100720_115728-600x800.jpg" alt="Android keychain" title="Android keychain" width="600" height="800" class="size-medium wp-image-933" /></a><p class="wp-caption-text">Android keychain</p></div>
<div id="attachment_934" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/07/android-robot-keychains-received/img_20100720_115742/" rel="attachment wp-att-934"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/IMG_20100720_115742-600x450.jpg" alt="Android keychain" title="Android keychain" width="600" height="450" class="size-medium wp-image-934" /></a><p class="wp-caption-text">Android keychain</p></div>
<div id="attachment_935" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/07/android-robot-keychains-received/img_20100720_115753/" rel="attachment wp-att-935"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/IMG_20100720_115753-600x450.jpg" alt="Android keychain" title="Android keychain" width="600" height="450" class="size-medium wp-image-935" /></a><p class="wp-caption-text">Android keychain</p></div>
<p>You can also get a pack of 4 (one of each colour) for $8.10 (£5.38) shown below:<br />
<a href="http://www.dealextreme.com/details.dx/sku.42022~r.27613104">4 Colour android pack product link</a></p>
<div class="wp-caption alignnone" style="width: 610px"><a href="http://www.dealextreme.com/details.dx/sku.42022~r.27613104"><img alt="4 Colour pack of Android Robot Keyrings (for phones)" src="http://www1.dealextreme.com/productimages/sku_42022_1.jpg" title="4 Colour pack of Android Robot Keyrings (for phones)" width="600" height="600" /></a><p class="wp-caption-text">4 Colour pack of Android Robot Keyrings (for phones)</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/07/android-robot-keychains-received/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bitcoins a cryptocurrency, free bitcoins and a rigged casino</title>
		<link>http://www.stealthcopter.com/blog/2010/07/bitcoins-a-cryptocurrency-free-bitcoins-and-a-rigged-casino/</link>
		<comments>http://www.stealthcopter.com/blog/2010/07/bitcoins-a-cryptocurrency-free-bitcoins-and-a-rigged-casino/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 20:31:26 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[cryptography]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[casino]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=928</guid>
		<description><![CDATA[If your already aware of the awesomeness of public key cryptography (e.g. PGP or OTR), then you will probably appreciate Bitcoins. You send coins by typing in someone&#8217;s address and how many coins to send and then your transaction will propagate around the p2p network. You receive coins in the same way by giving someone [...]]]></description>
			<content:encoded><![CDATA[<p>If your already aware of the awesomeness of public key cryptography (e.g. <a href="http://en.wikipedia.org/wiki/Pretty_Good_Privacy">PGP</a> or <a href="http://en.wikipedia.org/wiki/Off-the-Record_Messaging">OTR</a>), then you will probably appreciate <a href="http://www.bitcoin.org/">Bitcoins</a>. </p>
<p>You send coins by typing in someone&#8217;s address and how many coins to send and then your transaction will propagate around the p2p network. You receive coins in the same way by giving someone your address. In order to track transactions you can also make more addresses (and labels for them) which can also add to anonymity. Bitcoins are currently worth $0.0201 per bc (<a href="http://en.wikipedia.org/wiki/Bitcoin">source</a>)</p>
<div id="attachment_930" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/07/bitcoins-a-cryptocurrency-free-bitcoins-and-a-rigged-casino/bitcoin/" rel="attachment wp-att-930"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/bitcoin-600x393.png" alt="Bitcoin program running" title="Bitcoin program running" width="600" height="393" class="size-medium wp-image-930" /></a><p class="wp-caption-text">Bitcoin program running</p></div>
<p><strong>Generating Bitcoins</strong><br />
You can opt to generate solutions to a specific crypotgraphic problem in exchange for bitcoins, by doing so your computer&#8217;s idle CPU will be used to solve this problem and when a solution is found you will be rewarded with some bitcoins, yay. There is also talk of speeding up the generation by using CUDA or similar tools <a href="http://www.bitcoin.org/smf/index.php?topic=133.0">here</a></p>
<p><strong>5 Free Bitcoins</strong><br />
You can get 5 free bitcoins to start off your adventure into this new currency from<a href="https://freebitcoins.appspot.com/">here</a>. This is a donation from somebody who wants to ensure that this currency is sucessful and as such this is a token of good faith and should not be exploited. You can also donate bitcoins to the fund to help this project.</p>
<p><strong>Bitcoin casino (A Rigged Casino)</strong><br />
Now onto complain about a rigged casino that operates with bitcoins (<a href="http://www.sirarthur.net/bitcasino">Bitcasino</a>).</p>
<div id="attachment_929" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/07/bitcoins-a-cryptocurrency-free-bitcoins-and-a-rigged-casino/bitcoin_casino/" rel="attachment wp-att-929"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/bitcoin_casino-600x469.png" alt="Rigged and Broken roulette game on bitcoin casino" title="Rigged and Broken roulette game on bitcoin casino" width="600" height="469" class="size-medium wp-image-929" /></a><p class="wp-caption-text">Rigged and Broken roulette game on bitcoin casino</p></div>
<p>I continually placed a bet (free play mode) on red, and for over 40 rounds it came up black, this has a probability of  (20/7)^40 or 0.000000000708%. As unfair as this was then game then started getting worse constantly resulting in 0, however it would say &#8220;31 black odd&#8221; and in the side bar of past numbers &#8220;un&#8221; kept appearing which I guess means unknown.</p>
<p>I also tested a few of the slot machines to see if they were rigged too, and surely enough each rotation of the slots resulted in the exact same result every time, which was of course a losing one.</p>
<p>This bitcoin casino is rigged, buggy and not worth wasting your time with, it is much easier to lose money in other ways.</p>
<p><strong>Conclusion</strong><br />
Bitcoin is an awesome idea and hopefully it will catch on and become sucessful, however be sure to avoid bitcasino! Also if anyone would like to donate some bitcoins then please send them to:<br />
<img src="http://www.stealthcopter.com/images/bc.png" alt="" /> 12Qxwa4d8s7bYHWVvNLkQZAVkJZrz8ReKB</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/07/bitcoins-a-cryptocurrency-free-bitcoins-and-a-rigged-casino/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing PyCuda on ubuntu 10.04</title>
		<link>http://www.stealthcopter.com/blog/2010/07/installing-pycuda-on-ubuntu-10-04/</link>
		<comments>http://www.stealthcopter.com/blog/2010/07/installing-pycuda-on-ubuntu-10-04/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 10:30:43 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[CUDA]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=918</guid>
		<description><![CDATA[Using graphics cards to hand massively parallel tasks can now be realised in python, thanks to PyCuda a module for python which allows interaction with the CUDA libaries/binaries provided by Nvidia. To get this working in ubuntu 10.04 lucid lynx I followed this guide http://wiki.tiker.net/PyCuda/Installation/Linux/Ubuntu. Prep / Installation: First install CUDA, most places will tell [...]]]></description>
			<content:encoded><![CDATA[<p>Using graphics cards to hand massively parallel tasks can now be realised in python, thanks to PyCuda a module for python which allows interaction with the CUDA libaries/binaries provided by Nvidia. To get this working in ubuntu 10.04 lucid lynx I followed this guide <a href="http://wiki.tiker.net/PyCuda/Installation/Linux/Ubuntu">http://wiki.tiker.net/PyCuda/Installation/Linux/Ubuntu</a>.</p>
<p><strong>Prep / Installation:</strong></p>
<p>First install CUDA, most places will tell you that CUDA is incompatible with gcc-4.3 but this is not true if you make a few small changes to the configuration.mk file, please see <a href="http://www.stealthcopter.com/blog/2010/02/compiling-and-running-cuda-2-3-sdk-and-toolkit-on-ubuntu-9-10-x64-64-bit/">this post about installing CUDA in ubuntu</a></p>
<p>Install the required packages (or use package manager):</p>
<blockquote><p>
sudo apt-get install python-numpy -y<br />
sudo apt-get install build-essential python-dev python-setuptools libboost-python-dev -y
</p></blockquote>
<p>Download pycuda from: <a href="http://pypi.python.org/pypi/pycuda">http://pypi.python.org/pypi/pycuda</a></p>
<p>Untar the achive:</p>
<blockquote><p>tar xzvf pycuda-0.94rc.tar.gz</p></blockquote>
<p>Configure, make and install:</p>
<blockquote><p>cd pycuda-0.94rc<br />
./configure.py &#8211;cuda-root=/usr/local/cuda &#8211;cudadrv-lib-dir=/usr/lib &#8211;boost-inc-dir=/usr/include &#8211;boost-lib-dir=/usr/lib &#8211;boost-python-libname=boost_python-mt &#8211;boost-thread-libname=boost_thread-mt<br />
make -j 4<br />
sudo python setup.py install</p></blockquote>
<p><strong>Problems</strong></p>
<p>I had some problems with the compliation because it was complaining about pytools missing, this was resolved by removing and reinstalling python-setuptools:</p>
<blockquote><p>sudo apt-get remove python-setuptools<br />
sudo apt-get install python-setuptools</p></blockquote>
<p><strong>Running the example</strong></p>
<p>You should now be able to run the <em>hellogpu.py</em> demo in the examples folder and use the <em>download-examples-from-wiki.py</em> to download further demos from the pycuda wiki.</p>
<p><strong>Next</strong><br />
I plan to learn how to use PyCuda and aim to make a MD5 cracker as discussed previously (<a href="http://www.stealthcopter.com/blog/2010/06/cracking-md5-hashes-or-passwords-ultra-fast-with-gpu-acceleration/">here</a> and <a href="http://www.stealthcopter.com/blog/2010/06/cracking-real-world-salted-md5-passwords-in-python-with-several-dictionaries/">here</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/07/installing-pycuda-on-ubuntu-10-04/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Changing the battery percentage in an AVD (android virtual device) emulator</title>
		<link>http://www.stealthcopter.com/blog/2010/07/changing-the-battery-percentage-in-an-avd-android-virtual-device-emulator/</link>
		<comments>http://www.stealthcopter.com/blog/2010/07/changing-the-battery-percentage-in-an-avd-android-virtual-device-emulator/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 23:19:09 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[AVD]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=925</guid>
		<description><![CDATA[First I will briefly show how to react to the battery percentage change in your application, and then show how to change the battery level in the android emulator (AVD). Reacting to the battery level change in your program We need to register our application to receive the intent when the battery level information is [...]]]></description>
			<content:encoded><![CDATA[<p>First I will briefly show how to react to the battery percentage change in your application, and then show how to change the battery level in the android emulator (AVD).</p>
<p><strong>Reacting to the battery level change in your program</strong></p>
<p>We need to register our application to receive the intent when the battery level information is changed, we do this by adding the following line into our onCreate method of our activity (or some other instance):</p>
<pre name="code" class="python">
registerReceiver(this.mBatInfoReceiver,
		new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
</pre>
<p>This will run mBatInfoReceiver when the battery level is changed, so we now need to create this method in our activity (or some other instance). The function creates a broadcast receiver to handle the information when the intent is sent for the battery status changing.</p>
<pre name="code" class="python">
		private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){

		    @Override
			public void onReceive(Context arg0, Intent intent) {
			      int level = intent.getIntExtra("level", 0);
			      // TODO: Preform action based upon battery level
			}
		  };
</pre>
<p>(<a href="http://www.tutorialforandroid.com/2009/01/getting-battery-information-on-android.html">reference</a>)</p>
<p><strong>Changing the battery level in AVD</strong></p>
<p>First we need to find the port so that we can address the emulator, this will be shown in the titlebar of the AVD.</p>
<div id="attachment_926" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/07/changing-the-battery-percentage-in-an-avd-android-virtual-device-emulator/avd/" rel="attachment wp-att-926"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/avd-600x421.png" alt="Froyo running in an AVD (android emulator)" title="Froyo running in an AVD (android emulator)" width="600" height="421" class="size-medium wp-image-926" /></a><p class="wp-caption-text">Froyo running in an AVD (android emulator)</p></div>
<p>Zooming in:</p>
<a href="http://www.stealthcopter.com/blog/2010/07/changing-the-battery-percentage-in-an-avd-android-virtual-device-emulator/5554froyo/" rel="attachment wp-att-927"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/5554froyo.png" alt="AVD title shows the port &quot;5554:froyo&quot;" title="AVD title shows the port &quot;5554:froyo&quot;" width="174" height="81" class="size-full wp-image-927" /></a>
<p>Using the port from the AVD found above we can use telnet to control certain aspects of the avd see <a href="http://developer.android.com/guide/developing/tools/emulator.html#power">this android reference</a> for a full reference. </p>
<pre>
<strong>telnet localhost 5554</strong>
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Android Console: type 'help' for a list of commands
OK
help
Android console command help:

    help|h|?         print a list of commands
    event            simulate hardware events
    geo              Geo-location commands
    gsm              GSM related commands
    kill             kill the emulator instance
    network          manage network settings
    power            power related commands
    quit|exit        quit control session
    redir            manage port redirections
    sms              SMS related commands
    avd              manager virtual device state
    window           manage emulator window

try 'help <command>' for command-specific help
OK
</pre>
<p>Some more information on the power commands:</p>
<pre>
<strong>help power</strong>
allows to change battery and AC power status

available sub-commands:
    display          display battery and charger state
    ac               set AC charging state
    status           set battery status
    present          set battery present state
    health           set battery health state
    capacity         set battery capacity state
</pre>
<p>So now you can change the battery level in the avd using <em>power capacity percentage</em></p>
<pre>
<strong>power capacity 100</strong>
OK
<strong>power capacity 99</strong>
OK
<strong>power capacity 60</strong>
OK
<strong>power capacity 20</strong>
OK
<strong>power capacity 0</strong>
OK
</pre>
<p>As you change the battery capacity you should notice that your AVD is responding, just by looking at the battery indicator in the status bar, and your program will react if you have replaced the //TODO: code with something that reacts when the onReceive is called.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/07/changing-the-battery-percentage-in-an-avd-android-virtual-device-emulator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Borderlands hidden QR codes</title>
		<link>http://www.stealthcopter.com/blog/2010/07/borderlands-hidden-qr-codes/</link>
		<comments>http://www.stealthcopter.com/blog/2010/07/borderlands-hidden-qr-codes/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 18:30:08 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[games]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=922</guid>
		<description><![CDATA[I found an easter egg in borderlands: So I used a barcode reader on my Nexus One Plaintext: NICK WILSON HO OH However I am not the only person to have spotted this, unsurprisingly really as I&#8217;m almost half a year late on starting the game. There are several QR codes hidden as shown in [...]]]></description>
			<content:encoded><![CDATA[<p>I found an easter egg in borderlands:</p>
<div id="attachment_923" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/07/borderlands-hidden-qr-codes/borderlands/" rel="attachment wp-att-923"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/borderlands-600x375.png" alt="Borderlands hidden QR codes" title="Borderlands hidden QR codes" width="600" height="375" class="size-medium wp-image-923" /></a><p class="wp-caption-text">Borderlands hidden QR codes</p></div>
<div id="attachment_924" class="wp-caption aligncenter" style="width: 548px"><a href="http://www.stealthcopter.com/blog/2010/07/borderlands-hidden-qr-codes/pc/" rel="attachment wp-att-924"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/07/pc.png" alt="zoomed in on the qr code" title="zoomed in on the qr code" width="538" height="341" class="size-full wp-image-924" /></a><p class="wp-caption-text">zoomed in on the qr code</p></div>
<p>So I used a barcode reader on my <a href="http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/">Nexus One</a></p>
<p>Plaintext:</p>
<blockquote><p>
NICK WILSON</p>
<p>HO OH
</p></blockquote>
<p>However I am not the only person to have spotted this, unsurprisingly really as I&#8217;m almost half a year late on starting the game. There are several QR codes hidden as shown in <a href="http://borderlands.wikia.com/wiki/QR_Code">this wiki page</a> and someone else went to the pain-staking task of copying out this QR code pixel-by-pixel rather than using a QR scanner or image software, crazy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/07/borderlands-hidden-qr-codes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cracking real world salted MD5 passwords in python with several dictionaries</title>
		<link>http://www.stealthcopter.com/blog/2010/06/cracking-real-world-salted-md5-passwords-in-python-with-several-dictionaries/</link>
		<comments>http://www.stealthcopter.com/blog/2010/06/cracking-real-world-salted-md5-passwords-in-python-with-several-dictionaries/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 10:45:56 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[cryptography]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[cracking]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[website]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=917</guid>
		<description><![CDATA[Recently a friend (who will remain unnamed for obvious reasons) asked me to penetration test a website he created. I found a very simple exploit where I could upload an avatar but the file was not checked to ensure it was an image, so I uploaded a php script I wrote an began exploring the [...]]]></description>
			<content:encoded><![CDATA[<p>Recently a friend (who will remain unnamed for obvious reasons) asked me to penetration test a website he created. I found a very simple exploit where I could upload an avatar but the file was not checked to ensure it was an image, so I uploaded a php script I wrote an began exploring the server. I printed out all of the usernames, passwords and salts from the database to see how many of the 1,109 passwords could be easily cracked.</p>
<p>The passwords were stored as MD5 hashes with a random 6 character alphanumeric salt. To create the MD5 hash of the password the salt was prefixed to the password and then the combination was hashed. Thanks to this method we can employ a simple bruteforce/dictionary attack on the passwords. I will start with the wordlists creation, then results I obtained to keep your interest, and finally show my python code.</p>
<p><strong>Creating wordlists</strong><br />
I already has two reasnoble sized dictionaries that I use for different things like <a href="http://www.stealthcopter.com/wordcube">wordcube</a>. I used john the ripper on my double sized dictionary to create lots of common permutations on words, such as captial first letter, and a number affixed to the end. To do this you run john with the following parameters, where dic.txt is the input dictionary and dic_plus_rules.txt is the output from john with all of the additions it has made.</p>
<blockquote><p>
john &#8211;wordlist=dic.txt &#8211;rules &#8211;stdout > dic_plus_rules.txt
</p></blockquote>
<p>I also download two wordlists from <a href="http://download.openwall.net/pub/wordlists/">openwall</a>, one which is a list of ~3100 <a href="http://download.openwall.net/pub/wordlists/passwords/">common passwords</a>, and one labelled <a href="http://download.openwall.net/pub/wordlists/">ALL</a> that has a large amount of words (~4 million) in various languages. Because of the highly compressible nature of text the files are available in small gzip files. ALL is 11.5Mb which unzips to 41.4Mb and password 12kb which unzips to 21.8kb. There are also more <a href="http://download.openwall.net/pub/wordlists/languages/">wordlists avaliable for different languages</a>, but the ALL file includes these.</p>
<p>The size of all of the wordlists I used is shown below:</p>
<table>
<tr>
<th>Dictionary</th>
<th>Combinations</th>
</tr>
<tr>
<td>English</td>
<td>42,987</td>
</tr>
<tr>
<td>Double-English</td>
<td>80,368</td>
</tr>
<tr>
<td>Double+john-rules</td>
<td>3,986,706</td>
</tr>
<tr>
<td>Openwall Common Passwords</td>
<td>3,158</td>
</tr>
<tr>
<td>Openwall ALL</td>
<td>3,917,116</td>
</tr>
</table>
<p><strong>Results</strong></p>
<table>
<tr>
<th>Dictionary</th>
<th>Cracked</th>
<th>Percentage</th>
<th>Time</th>
</tr>
<tr>
<td>English</td>
<td>60</td>
<td>5.41%</td>
<td>80s</td>
</tr>
<tr>
<td>Double-English</td>
<td>65</td>
<td>5.86%</td>
<td>170s</td>
</tr>
<tr>
<td>Double+john-rules</td>
<td>116</td>
<td>10.46%</td>
<td>2.5hrs (8393s)</td>
</tr>
<tr>
<td>Openwall Common Passwords</td>
<td>112</td>
<td>10.10%</td>
<td>7s</td>
</tr>
<tr>
<td>Openwall All</td>
<td>210</td>
<td>18.94%</td>
<td>2.45hrs (8829s)</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</td>
<tr>
<td>Total Passwords Obtained</td>
<td>254</td>
<td>22.90%</td>
<td>~5hrs</td>
</tr>
</table>
<p><strong>Comical passwords</strong></p>
<p>Here are some of the more amusingly bad passwords, the number in brackets shows the frequency of the password.</p>
<p><em><strong>Crap passwords</strong></em>: 123456 (18), password (4), 1234567 (4), 123456789 (3) 12345678 (2),  12345 (2), abc123 (2), asdfgh (2), nintendo (2), 123123, abcd1234, abcdefg, qwerty<br />
<em><strong>Self-describing passwords</strong></em>: catholic, cowboy, creator, doger, ginger, killer, maggot, player, princess, skater, smallcock, smooth, super, superman, superstar, tester, veggie, winner, wolverine<br />
<em><strong>Some other passwords</strong></em>:bananas, cheese, cinnamon, hampster ,DRAGON, dribble1, poopie, poopoo</p>
<p><strong>Python Program</strong></p>
<pre name="code" class="python">
# -*- coding: utf-8 -*-
#pymd5cracker.py
import hashlib, sys
from time import time

# Change to commandline swtiches when you have the time!
hash = ""
hash_file = "hash2.csv"
wordlist = "mass_rules.txt"; 

# Read the hash file entered
try:
	hashdocument = open(hash_file,"r")
except IOError:
	print "Invalid file."
	raw_input()
	sys.exit()
else:
	# Read the csv values seperated by colons into an array
	hashes=[]
	for line in hashdocument:
		line=line.replace("\n","")
		inp = line.split(":")
		if (line.count(":")<2):
			inp.append("")
		hashes.append(inp)
	hashdocument.close();

# Read wordlist in
try:
	wordlistfile = open(wordlist,"r")
except IOError:
	print "Invalid file."
	raw_input()
	sys.exit()
else:
	pass

tested=0
cracked=0
tic = time()
for line in wordlistfile:

	line = line.replace("\n","")
	tested+=1
	for i in range(0,len(hashes)):

		m = hashlib.md5()
		m.update(hashes[i][2]+line)
		word_hash = m.hexdigest()
		if word_hash==hashes[i][1]:
			toc = time()
			cracked+=1
			hashes[i].append(line)
			print hashes[i][0]," : ", line, "\t(",time()-tic,"s)"

	# Show progress evey 1000 passwords tested
	if tested%1000==0:
		print "Cracked: ",cracked," (",tested,") ", line

# Save the output of this program so we can use again
# with another program/dictionary adding the password
# to each line we have solved.
crackout = open("pycrackout.txt","w")
for i in hashes:
	s=""
	for j in i:
		if s!="":
			s+=":"
		s+=j
	s+="\n"
	crackout.write(s)
crackout.close()

print "Passwords found: ",cracked,"/",len(hashes)
print "Wordlist Words :", test
print "Hashes computed: ",len(hashes)*tested
print "Total time taken: ",time()-tic,'s'
</pre>
<p><strong>Next</strong></p>
<ul>
<li>Play with more dictionaries</li>
<li>Speed up code:
<ul>
<li>Add multi-threading: My experience with multi-threading in python is that it doesn't work well for cpu intensive tasks, if you know otherwise please let me know.</li>
<li>Have a look at <a href="http://mathema.tician.de/software/pycuda">PyCUDA</a> to see if I can use my graphics card to speed up the code significantly (another type of mutli-threading really...) without having to change language like in my previous post of <a href="http://www.stealthcopter.com/blog/2010/06/cracking-md5-hashes-or-passwords-ultra-fast-with-gpu-acceleration/">CUDA MD5 cracking</a></li>
</ul>
</li>
<li>Remove hash once found to stop pointless checking</li>
<li>Add command line switches to all it to be used like a real program</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/06/cracking-real-world-salted-md5-passwords-in-python-with-several-dictionaries/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Android Robot Keychain (for phones)</title>
		<link>http://www.stealthcopter.com/blog/2010/06/android-robot-keychain-for-phones/</link>
		<comments>http://www.stealthcopter.com/blog/2010/06/android-robot-keychain-for-phones/#comments</comments>
		<pubDate>Sun, 27 Jun 2010 01:33:44 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[art?]]></category>
		<category><![CDATA[memorabilia]]></category>
		<category><![CDATA[phone]]></category>
		<category><![CDATA[robot]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=916</guid>
		<description><![CDATA[I just noticed that dealextreme are selling some android memorabilia, in the form of mobile phone strap android robots! They cost $2.70 each (£1.80), or for 5+ $2.39 (£1.59), or for 10+ (£2.12). When ordering more than 5 remember to enable bulk rates, this adds a delivery charge but the prices calculated above include this, [...]]]></description>
			<content:encoded><![CDATA[<p>I just noticed that <a href="http://www.dealextreme.com/r.27613104">dealextreme</a> are selling some android memorabilia, in the form of <a href="http://www.dealextreme.com/details.dx/sku.42021~r.27613104">mobile phone strap android robots!</a></p>
<div class="wp-caption alignnone" style="width: 610px"><a href="http://www.dealextreme.com/details.dx/sku.42021~r.27613104"><img alt="Green Android Robot Keyring (for phones)" src="http://www1.dealextreme.com/productimages/sku_42021_1.jpg" title="Green Android Robot Keyring (for phones)" width="600" height="600" /></a><p class="wp-caption-text">Green Android Robot Keyring (for phones)</p></div>
<p>They cost $2.70 each (£1.80), or for 5+ $2.39 (£1.59), or for 10+ (£2.12). When ordering more than 5 remember to enable bulk rates, this adds a delivery charge but the prices calculated above include this, and you still save more.<br />
<a href="http://www.dealextreme.com/details.dx/sku.42022~r.27613104">Green android product link</a></p>
<p>You can also get a pack of 4 (one of each colour) for $8.10 (£5.38) shown below:<br />
<a href="http://www.dealextreme.com/details.dx/sku.42022~r.27613104">4 Colour android pack product link</a></p>
<div class="wp-caption alignnone" style="width: 610px"><a href="http://www.dealextreme.com/details.dx/sku.42022~r.27613104"><img alt="4 Colour pack of Android Robot Keyrings (for phones)" src="http://www1.dealextreme.com/productimages/sku_42022_1.jpg" title="4 Colour pack of Android Robot Keyrings (for phones)" width="600" height="600" /></a><p class="wp-caption-text">4 Colour pack of Android Robot Keyrings (for phones)</p></div>
<p>I have ordered lots of the Green android cell phone straps, and I will post an update with images when they arrive!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/06/android-robot-keychain-for-phones/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cracking MD5 hashes (or passwords) ultra-fast with GPU acceleration</title>
		<link>http://www.stealthcopter.com/blog/2010/06/cracking-md5-hashes-or-passwords-ultra-fast-with-gpu-acceleration/</link>
		<comments>http://www.stealthcopter.com/blog/2010/06/cracking-md5-hashes-or-passwords-ultra-fast-with-gpu-acceleration/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 18:17:14 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[cryptography]]></category>
		<category><![CDATA[computational]]></category>
		<category><![CDATA[cracking]]></category>
		<category><![CDATA[CUDA]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[md5]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=914</guid>
		<description><![CDATA[Do you want to crack MD5 hashes in at a rate of ~300MHash/s without a massive rainbow table? Do you have a CUDA enabled GFX card? If you said yes or maybe to these questions then read on for a brief introduction on how to compile and run a CUDA accelerated MD5 cracker (coded by [...]]]></description>
			<content:encoded><![CDATA[<p>Do you want to crack MD5 hashes in at a rate of ~300MHash/s without a massive rainbow table? Do you have a CUDA enabled GFX card? If you said yes or maybe to these questions then read on for a brief introduction on how to compile and run a CUDA accelerated MD5 cracker (coded by Benjamin <em>&#8220;Titan&#8221;</em> Vernoux ).</p>
<p><strong>Pre-Requisites and Downloading</strong></p>
<ul>
<li>Own a <a href="http://www.nvidia.com/object/cuda_learn_products.html">CUDA enabled GFX card</a>, if you have a NVIDIA graphics card from the past year or so this is most likely the case.</li>
<li>Download and Install the <a href="http://www.nvidia.com/object/cuda_get.html">CUDA toolkit</a></li>
<li>Download MD5 GPU crack from <a href="http://bvernoux.free.fr/md5/index.php">http://bvernoux.free.fr</a> (windows and Linux)</li>
</ul>
<p><strong>Building in Ubuntu 10.04</strong></p>
<p>Extract the archive and do a make on the source code. When doing this I came across two problems that can be fixed by modifying the common.mk file.</p>
<p><em><strong>Problem 1: (cannot be declared weak)</strong></em></p>
<blockquote><p>
$ make<br />
/usr/include/string.h:43: error: inline function ‘void* memcpy(void*, const void*, size_t)’ cannot be declared weak<br />
/usr/include/string.h:64: error: inline function ‘void* memset(void*, int, size_t)’ cannot be declared weak<br />
/usr/include/bits/string3.h:49: error: inline function ‘void* memcpy(void*, const void*, size_t)’ cannot be declared weak<br />
/usr/include/bits/string3.h:78: error: inline function ‘void* memset(void*, int, size_t)’ cannot be declared weak<br />
/opt/cuda/bin/../include/common_functions.h:59: error: inline function ‘void* memset(void*, int, size_t)’ cannot be declared weak<br />
/opt/cuda/bin/../include/common_functions.h:62: error: inline function ‘void* memcpy(void*, const void*, size_t)’ cannot be declared weak<br />
/opt/cuda/bin/../include/math_functions.h:422: error: inline function ‘int __signbit(double)’ cannot be declared weak<br />
/opt/cuda/bin/../include/math_functions.h:427: error: inline function ‘int __signbitf(float)’ cannot be declared weak<br />
/opt/cuda/bin/../include/math_functions.h:440: error: inline function ‘int __signbitl(long double)’ cannot be declared weak<br />
/usr/include/bits/mathcalls.h:350: error: inline function ‘int __signbit(double)’ cannot be declared weak<br />
/usr/include/bits/mathcalls.h:350: error: inline function ‘int __signbitf(float)’ cannot be declared weak<br />
/usr/include/bits/mathcalls.h:350: error: inline function ‘int __signbitl(long double)’ cannot be declared weak<br />
/usr/include/bits/mathinline.h:36: error: inline function ‘int __signbitf(float)’ cannot be declared weak<br />
/usr/include/bits/mathinline.h:42: error: inline function ‘int __signbit(double)’ cannot be declared weak<br />
/usr/include/bits/mathinline.h:48: error: inline function ‘int __signbitl(long double)’ cannot be declared weak</p>
</blockquote>
<p><em><strong>Solution 1</strong></em></p>
<blockquote><p>
# Debug/release configuration<br />
ifeq ($(dbg),1)<br />
	COMMONFLAGS += -g<br />
	NVCCFLAGS   += -D_DEBUG<br />
	BINSUBDIR   := debug<br />
	LIBSUFFIX   := D<br />
else<br />
	##############Change the following line to have -O0 instead of -O2<br />
	COMMONFLAGS += -O0<br />
	BINSUBDIR   := release<br />
	LIBSUFFIX   :=<br />
	NVCCFLAGS   += &#8211;compiler-options -fno-strict-aliasing<br />
	CXXFLAGS    += -fno-strict-aliasing<br />
	CFLAGS      += -fno-strict-aliasing<br />
endif
</p></blockquote>
<p><em><strong>Problem 2: (lcudart)</strong></em></p>
<blockquote><p>
$ make<br />
/usr/bin/ld: skipping incompatible /opt/cuda/lib/libcudart.so when searching for -lcudart<br />
/usr/bin/ld: skipping incompatible /opt/cuda/lib/libcudart.so when searching for -lcudart<br />
/usr/bin/ld: cannot find -lcudart<br />
collect2: ld returned 1 exit status<br />
make: *** [bin/linux/release/gpu_md5_crack_0.2.3] Error 1
</p></blockquote>
<p><em><strong>Solution 2</strong></em></p>
<blockquote><p>
############## Change lib to lib64 if using a 64 bit operating system<br />
LIB       := -L$(CUDA_INSTALL_PATH)/lib64 -L$(LIBDIR) -L$(COMMONDIR)/lib64/$(OSLOWER) -L$(NVIDIA_SDK_PATH)/lib
</p></blockquote>
<p>Remember that you should &#8220;make clean&#8221; in-between each attempt to compile.</p>
<p><strong>Benchmarking</strong></p>
<p>Once it has compiled nicely you can give it a testdrive with its build in benchmark (with an NVIDIA 260 GFX card). Just run with the -b option:</p>
<blockquote><p>
./gpu_md5_crack_0.2.3 -b<br />
GPU_MD5_Crack v0.2.3 09 July 2009 LGPL for BackTrack 4.<br />
Copyright (C) 2009 TitanMKD (titanmkd@gmail.com).                                    </p>
<p>Benchmark Start<br />
Using default CUDA GPU device:0<br />
Cuda device ID:0, Device name:GeForce GTX 260, supporting CUDA:1.3,<br />
multiProcessorCount:27, clockRate:1466.00 MHz, TotalMem:895.31 MB<br />
******* Test 0 Start *******<br />
Expected Password: 1234567890<br />
MD5 Hash:e807f1fcf82d132f9bb018ca6738a19f, Start Password:1200000000, Total pwd to check:1000000000<br />
Charset used 0:0123456789<br />
MD5 brute force started                                                                            </p>
<p>MD5 Cracked pwd=1234567890 hash=e807f1fcf82d132f9bb018ca6738a19f<br />
Instant 200.02 Mhash/s(40.00 ms)<br />
Average 190.49 Mhash/s, Total Time:0.21s(210.00 ms)<br />
MD5 brute force finished<br />
******* Test 0 End *******                                      </p>
<p>******* Test 1 Start *******<br />
Expected Password: azerty<br />
MD5 Hash:ab4f63f9ac65152575886860dde480a1, Start Password:, Total pwd to check:1000000000<br />
Charset used 1:abcdefghijklmnopqrstuvwxyz<br />
MD5 brute force started                                                                  </p>
<p>MD5 Cracked pwd=azerty hash=ab4f63f9ac65152575886860dde480a1<br />
Instant 200.02 Mhash/s(40.00 ms)<br />
Average 240.02 Mhash/s, Total Time:0.10s(100.00 ms)<br />
MD5 brute force finished<br />
******* Test 1 End *******                                  </p>
<p>******* Test 2 Start *******<br />
Expected Password: azer09<br />
MD5 Hash:41b9cabe6033932eb3037fc933060adc, Start Password:, Total pwd to check:1000000000<br />
Charset used 2:abcdefghijklmnopqrstuvwxyz0123456789<br />
MD5 brute force started<br />
Progress 5%, Pwd:6lmea, Instant 280.02 Mhash/s(28.57 ms)<br />
MD5 Cracked pwd=azer09 hash=41b9cabe6033932eb3037fc933060adc<br />
Instant 266.69 Mhash/s(30.00 ms)<br />
Average 287.20 Mhash/s, Total Time:0.39s(390.00 ms)<br />
MD5 brute force finished<br />
******* Test 2 End *******                                                               </p>
<p>******* Test 3 Start *******<br />
Expected Password: AZBVSD<br />
MD5 Hash:fd049008572788d60140aaead79336cc, Start Password:, Total pwd to check:1000000000<br />
Charset used 3:ABCDEFGHIJKLMNOPQRSTUVWXYZ<br />
MD5 brute force started                                                                  </p>
<p>MD5 Cracked pwd=AZBVSD hash=fd049008572788d60140aaead79336cc<br />
Instant 266.69 Mhash/s(30.00 ms)<br />
Average 240.02 Mhash/s, Total Time:0.10s(100.00 ms)<br />
MD5 brute force finished<br />
******* Test 3 End *******</p>
<p>******* Test 4 Start *******<br />
Expected Password: AZ09AA<br />
MD5 Hash:7a552dd9cdd49acc5320bad9c29c9722, Start Password:, Total pwd to check:1000000000<br />
Charset used 4:ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789<br />
MD5 brute force started<br />
Progress 5%, Pwd:6LMEA, Instant 266.69 Mhash/s(30.00 ms)<br />
MD5 Cracked pwd=AZ09AA hash=7a552dd9cdd49acc5320bad9c29c9722<br />
Instant 266.69 Mhash/s(30.00 ms)<br />
Average 280.02 Mhash/s, Total Time:0.40s(400.00 ms)<br />
MD5 brute force finished<br />
******* Test 4 End *******</p>
<p>******* Test 5 Start *******<br />
Expected Password: zaZAab<br />
MD5 Hash:aef49f70bb7b923b8bc0a018f916ef64, Start Password:zCAAAA, Total pwd to check:1000000000<br />
Charset used 5:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz<br />
MD5 brute force started<br />
Progress 17%, Pwd:zaDpoA, Instant 280.02 Mhash/s(28.57 ms)<br />
MD5 Cracked pwd=zaZAab hash=aef49f70bb7b923b8bc0a018f916ef64<br />
Instant 266.69 Mhash/s(30.00 ms)<br />
Average 283.10 Mhash/s, Total Time:0.65s(650.00 ms)<br />
MD5 brute force finished<br />
******* Test 5 End *******</p>
<p>******* Test 6 Start *******<br />
Expected Password: za0ZA9<br />
MD5 Hash:062cc3b1302759722f48ac0b95b75803, Start Password:zaAAAA, Total pwd to check:1000000000<br />
Charset used 6:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789<br />
MD5 brute force started</p>
<p>MD5 Cracked pwd=za0ZA9 hash=062cc3b1302759722f48ac0b95b75803<br />
Instant 266.69 Mhash/s(30.00 ms)<br />
Average 266.69 Mhash/s, Total Time:0.06s(60.00 ms)<br />
MD5 brute force finished<br />
******* Test 6 End *******</p>
<p>******* Test 7 Start *******<br />
Expected Password: a^-*|<br />
MD5 Hash:cf7dcf4c3eeb6255668393242fcce273, Start Password:a0000, Total pwd to check:1000000000<br />
Charset used 7: !&#8221;#$%&#038;&#8217;()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<br />
MD5 brute force started</p>
<p>MD5 Cracked pwd=a^-*| hash=cf7dcf4c3eeb6255668393242fcce273<br />
Instant 266.69 Mhash/s(30.00 ms)<br />
Average 266.69 Mhash/s, Total Time:0.15s(150.00 ms)<br />
MD5 brute force finished<br />
******* Test 7 End *******</p>
<p>Benchmark End
</p></blockquote>
<p>So from the benchmark you can see that we are getting between 200 and 300 Mhash/s, that is about 250,000,000 hash attempts per second! AMAZING!!!</p>
<p><strong>Number of combinations for different alphabets</strong></p>
<table>
<tr>
<th>Length</th>
<th>0-9</th>
<th>a-z</th>
<th>a-z0-9</th>
<th>a-zA-Z</th>
<th>a-zA-Z0-9</th>
</tr>
<tr>
<td>1</td>
<td>10</td>
<td>26</td>
<td>36</td>
<td>52</td>
<td>62</td>
</tr>
<tr>
<td>2</td>
<td>100</td>
<td>676</td>
<td>1,296</td>
<td>2,704</td>
<td>3,844</td>
</tr>
<tr>
<td>3</td>
<td>1,000</td>
<td>17,576</td>
<td>46,656</td>
<td>140,608</td>
<td>238,328</td>
</tr>
<tr>
<td>4</td>
<td>10,000</td>
<td>456,976</td>
<td>1,679,616</td>
<td>7,311,616</td>
<td>14,776,336</td>
</tr>
<tr>
<td>5</td>
<td>100,000</td>
<td>11,881,376</td>
<td>60,466,176</td>
<td>380,204,032</td>
<td>916,132,832</td>
</tr>
<tr>
<td>6</td>
<td>1,000,000</td>
<td>308,915,776</td>
<td>2,176,782,336</td>
<td>19,770,609,664</td>
<td>56,800,235,584</td>
</tr>
<tr>
<td>7</td>
<td>10,000,000</td>
<td>8,031,810,176</td>
<td>78,364,164,096</td>
<td>1,028,071,702,528</td>
<td>3,521,614,606,208</td>
</tr>
<tr>
<td>8</td>
<td>100,000,000</td>
<td>208,827,064,576</td>
<td>2,821,109,907,456</td>
<td>53,459,728,531,456</td>
<td>218,340,105,584,896</td>
</tr>
<tr>
<td>9</td>
<td>1,000,000,000</td>
<td>5,429,503,678,976</td>
<td>101,559,956,668,416</td>
<td>2,779,905,883,635,710</td>
<td>13,537,086,546,263,600</td>
</tr>
<tr>
<td>10</td>
<td>10,000,000,000</td>
<td>141,167,095,653,376</td>
<td>3,656,158,440,062,980</td>
<td>144,555,105,949,057,000</td>
<td>839,299,365,868,340,000</td>
</tr>
</table>
<p><strong>Estimated time (in seconds) to crack (at 250MHash/s)</strong></p>
<table>
<tr>
<th>Length</th>
<th>0-9</th>
<th>a-z</th>
<th>a-z0-9</th>
<th>a-zA-Z</th>
<th>a-zA-Z0-9</th>
</tr>
<tr>
<td>1</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
</tr>
<tr>
<td>2</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
</tr>
<tr>
<td>3</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
</tr>
<tr>
<td>4</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.01</td>
<td>0.03</td>
</tr>
<tr>
<td>5</td>
<td>0.00</td>
<td>0.02</td>
<td>0.12</td>
<td>0.76</td>
<td>1.83</td>
</tr>
<tr>
<td>6</td>
<td>0.00</td>
<td>0.62</td>
<td>4.35</td>
<td>39.54</td>
<td>113.60</td>
</tr>
<tr>
<td>7</td>
<td>0.02</td>
<td>16.06</td>
<td>156.73</td>
<td>2,056.14</td>
<td>7,043.23</td>
</tr>
<tr>
<td>8</td>
<td>0.20</td>
<td>417.65</td>
<td>5,642.22</td>
<td>106,919.46</td>
<td>436,680.21</td>
</tr>
<tr>
<td>9</td>
<td>2.00</td>
<td>10,859.01</td>
<td>203,119.91</td>
<td>5,559,811.77</td>
<td>27,074,173.09</td>
</tr>
<tr>
<td>10</td>
<td>20.00</td>
<td>282,334.19</td>
<td>7,312,316.88</td>
<td>289,110,211.90</td>
<td>1,678,598,731.74</td>
</tr>
</table>
<p>Full calculations avaliable here: <a href='http://www.stealthcopter.com/blog/2010/06/cracking-md5-hashes-or-passwords-ultra-fast-with-gpu-acceleration/hashes/' rel='attachment wp-att-915'>MD5 hash cracking time using GPU accelerated brute forcing</a></p>
<p><strong>What now?</strong><br />
Well you can crack MD5&#8242;s at an extremely accelerated rate, so enjoy doing so responsibly (let your morals guide you <img src='http://www.stealthcopter.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ). You could also explore the source code and make additions as you see fit, I am planning on modifying it to allow an extra parameter so that prefixes can be added if you already know how the password starts. This can be the case when someone has prefixed the password with a known salt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/06/cracking-md5-hashes-or-passwords-ultra-fast-with-gpu-acceleration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nexus Revamped (free) updated (live wallpaper)</title>
		<link>http://www.stealthcopter.com/blog/2010/06/nexus-revamped-free-updated-live-wallpaper/</link>
		<comments>http://www.stealthcopter.com/blog/2010/06/nexus-revamped-free-updated-live-wallpaper/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 21:53:20 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[art?]]></category>
		<category><![CDATA[Live Wallpaper]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=895</guid>
		<description><![CDATA[Following the update of nexus revamped pro, I have upgraded the free edition! This upgrade brings many improvements over the last version and should have a considerable performance increase, therefore less lagging and better battery life. Below details what options the Nexus Revamped Live Wallpaper now has to offer: Theme options Background Themes Image &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>Following the update of <a href="http://www.stealthcopter.com/blog/2010/06/nexus-revamped-pro-updated-google-android-live-wallpaper/">nexus revamped pro</a>, I have upgraded the free edition! This upgrade brings many improvements over the last version and should have a considerable performance increase, therefore less lagging and better battery life.</p>
<div id="attachment_913" class="wp-caption aligncenter" style="width: 491px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-revamped-free-updated-live-wallpaper/nexus_ss/" rel="attachment wp-att-913"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/nexus_ss-481x800.png" alt="Nexus Revamped Live Wallpaper in action" title="Nexus Revamped Live Wallpaper in action" width="481" height="800" class="size-medium wp-image-913" /></a><p class="wp-caption-text">Nexus Revamped Live Wallpaper in action</p></div>
<p>Below details what options the Nexus Revamped Live Wallpaper now has to offer:</p>
<p><strong>Theme options</strong></p>
<div id="attachment_911" class="wp-caption aligncenter" style="width: 491px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-revamped-free-updated-live-wallpaper/nexus_revamped_themes/" rel="attachment wp-att-911"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/nexus_revamped_themes-481x800.png" alt="Nexus Revamped Live Wallpaper Theme Settings" title="Nexus Revamped Live Wallpaper Theme Settings" width="481" height="800" class="size-medium wp-image-911" /></a><p class="wp-caption-text">Nexus Revamped Live Wallpaper Theme Settings</p></div>
<p><strong>Background Themes</strong></p>
<ul>
<li><strong>Image</strong> &#8211; Choose a background image</li>
<li><strong>Single Color</strong> &#8211;  Choose a background color</li>
</ul>
<p><strong>Background Options</strong></p>
<ul>
<li><strong>Background Tint</strong> &#8211; Give the chosen background a colored tint</li>
</ul>
<p><strong>Particle Themes</strong></p>
<ul>
<li><strong>Multi-color</strong> &#8211; Choose a mutli-color theme for the particles</li>
<li><strong>Single Color</strong> &#8211;  Choose a single color theme for the particles</li>
</ul>
<p><strong>Physics Settings</strong></p>
<div id="attachment_912" class="wp-caption aligncenter" style="width: 490px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-revamped-free-updated-live-wallpaper/nexus_revamped_physics/" rel="attachment wp-att-912"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/nexus_revamped_physics-480x800.png" alt="Nexus Revamped Live Wallpaper Physics Settings" title="Nexus Revamped Live Wallpaper Physics Settings" width="480" height="800" class="size-medium wp-image-912" /></a><p class="wp-caption-text">Nexus Revamped Live Wallpaper Physics Settings</p></div>
<ul>
<li><strong>Touch interaction</strong> &#8211; Enables/disables finger pressing causing spawning of particles</li>
<li><strong>Hide spawning</strong> &#8211;  Enables/disables particles only spawning offscreen</li>
<li><strong>Speed</strong> &#8211; Choose the speed of the particles</li>
<li><strong>Spawn Density</strong> &#8211; Choose how often particles are created</li>
</ul>
<p>Enjoy!</p>
<p><a href="market://details?id=com.stealthcopter.nexusrevamped">Nexus Revamped Live Wallpaper</a> (com.stealthcopter.nexusrevamped)</p>
<p><a href="http://www.stealthcopter.com/android/apps/nexusrevamped/nexusrevamped.apk">Download link</a></p>
<p><img src="http://www.stealthcopter.com/android/apps/nexusrevamped/qr_sml.png" alt="qr" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/06/nexus-revamped-free-updated-live-wallpaper/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Portal 2 teaser trailer and soundboard updated</title>
		<link>http://www.stealthcopter.com/blog/2010/06/portal-2-teaser-trailer-and-soundboard-updated/</link>
		<comments>http://www.stealthcopter.com/blog/2010/06/portal-2-teaser-trailer-and-soundboard-updated/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 20:43:35 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[soundboard]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=908</guid>
		<description><![CDATA[Valve have released a teaser trailer for Portal 2 (which is now due for release in 2011) and I have updated the portal soundboard (for android) to feature two new sounds included in this trailer. Video Soundboard Portal 2 soundboard updated to include to new sounds from GLaDOS: &#8220;It&#8217;s been a loooooooong time&#8221; &#8220;I think [...]]]></description>
			<content:encoded><![CDATA[<p>Valve have released a teaser trailer for Portal 2 (which is now due for release in 2011) and I have updated the <a href="http://www.stealthcopter.com/blog/2010/06/portal-soundboard-for-android-released/">portal soundboard</a> (for android) to feature two new sounds included in this trailer.</p>
<p><strong>Video</strong></p>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/tax4e4hBBZc&#038;hl=en_GB&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/tax4e4hBBZc&#038;hl=en_GB&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>
<p><strong>Soundboard</strong></p>
<p><a href="http://www.stealthcopter.com/blog/2010/06/portal-soundboard-for-android-released/">Portal 2 soundboard</a> updated to include to new sounds from GLaDOS:<br />
&#8220;It&#8217;s been a loooooooong time&#8221;<br />
&#8220;I think we can put our differences behind us&#8230; for science&#8230; you monster&#8230;&#8221;</p>
<p><strong>Download</strong><br />
Portal SoundBoard can be downloaded from the market on your android phone either by searching or following the android link below. Alternativly you can download the apk file from this website using the download link</p>
<p>Android: <a href="market://details/?id=com.stealthcopter.portal">Portal Soundboard market link</a><br />
Download: <a href="http://www.stealthcopter.com/android/apps/portal/portal.apk">Portal Soundboard download link</a></p>
<p><img src="http://www.stealthcopter.com/android/apps/portal/qr_sml.png" alt="qrcode" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/06/portal-2-teaser-trailer-and-soundboard-updated/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Portal Soundboard for Android released</title>
		<link>http://www.stealthcopter.com/blog/2010/06/portal-soundboard-for-android-released/</link>
		<comments>http://www.stealthcopter.com/blog/2010/06/portal-soundboard-for-android-released/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 22:58:21 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[soundboard]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=906</guid>
		<description><![CDATA[Follow the success of my other soundboards (Unreal Tournament SoundBoard and Counter-Strike Soundboard ); I have released a Portal soundboard for Android: Download Portal SoundBoard can be downloaded from the market on your android phone either by searching or following the android link below. Alternativly you can download the apk file from this website using [...]]]></description>
			<content:encoded><![CDATA[<p>Follow the success of my other soundboards (<a href="http://www.stealthcopter.com/blog/2010/01/android-unreal-tournament-soundboard/">Unreal Tournament SoundBoard</a> and <a href="http://www.stealthcopter.com/blog/2010/01/android-counter-strike-1-6-soundboard-released/">Counter-Strike Soundboard </a>); I have released a Portal soundboard for Android:</p>
<p><strong>Download</strong><br />
Portal SoundBoard can be downloaded from the market on your android phone either by searching or following the android link below. Alternativly you can download the apk file from this website using the download link</p>
<p>Android: <a href="market://details/?id=com.stealthcopter.portal">Portal Soundboard market link</a><br />
Download: <a href="http://www.stealthcopter.com/android/apps/portal/portal.apk">Portal Soundboard download link</a></p>
<p><img src="http://www.stealthcopter.com/android/apps/portal/qr_sml.png" alt="qrcode" /></p>
<p><strong>Features</strong></p>
<ul>
<li><a href="http://half-life.wikia.com/wiki/GLaDOS">GLaDOS</a> sounds (Loads of)</li>
<li>Extra sounds from the overly friendly turret</li>
<li>Still alive song, and the cake reciepe</li>
<li>Save sounds as ringtones and notifications</li>
<li>Optional Adverts (Menu > toggle ads to hide)</li>
</ul>
<p><strong>Screenshots</strong></p>
<div class="wp-caption aligncenter" style="width: 330px"><a href="http://www.stealthcopter.com/android/apps/portal/ss1.png"><img alt="Portal Soundboard Screenshot 1" src="http://www.stealthcopter.com/android/apps/portal/ss1.png" title="Portal Soundboard Screenshot 1" width="320" height="480" /></a><p class="wp-caption-text">Portal Soundboard Screenshot 1</p></div>
<div class="wp-caption aligncenter" style="width: 330px"><a href="http://www.stealthcopter.com/android/apps/portal/ss2.png"><img alt="Portal Soundboard Screenshot 2" src="http://www.stealthcopter.com/android/apps/portal/ss2.png" title="Portal Soundboard Screenshot 2" width="320" height="480" /></a><p class="wp-caption-text">Portal Soundboard Screenshot 2</p></div>
<p>If you enjoyed this please leave feedback for me either here or on the market. Comments, suggestions and constructive criticism is also welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/06/portal-soundboard-for-android-released/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>TFT pixels in focus under high magnification microscope</title>
		<link>http://www.stealthcopter.com/blog/2010/06/tft-pixels-in-focus-under-high-magnification-microscope/</link>
		<comments>http://www.stealthcopter.com/blog/2010/06/tft-pixels-in-focus-under-high-magnification-microscope/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 23:02:31 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Electronics]]></category>
		<category><![CDATA[misc]]></category>
		<category><![CDATA[microscope]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=904</guid>
		<description><![CDATA[Whilst working on this post I managed to get some sexy shots of pixels in focus from my TFT screen under the microscope.]]></description>
			<content:encoded><![CDATA[<p>Whilst working on <a href="http://www.stealthcopter.com/blog/2010/06/nexus-ones-amoled-screen-under-the-microscope/">this post</a> I managed to get some sexy shots of pixels in focus from my TFT screen under the <a href="http://www.stealthcopter.com/blog/2010/03/digimicro-200x-zooming-usb-digital-microscope-in-ubuntu-linux/">microscope</a>.</p>
<div id="attachment_901" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-ones-amoled-screen-under-the-microscope/2010-06-10-234045/" rel="attachment wp-att-901"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/2010-06-10-234045-600x480.jpg" alt="Regular pixels from a TFT screen" title="Regular pixels from a TFT screen" width="600" height="480" class="size-medium wp-image-901" /></a><p class="wp-caption-text">Regular pixels from a TFT screen</p></div>
<div id="attachment_902" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/06/tft-pixels-in-focus-under-high-magnification-microscope/2010-06-10-234057/" rel="attachment wp-att-902"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/2010-06-10-234057-600x480.jpg" alt="Cool Focusing on pixels from a TFT High magnification" title="Cool Focusing on pixels from a TFT High magnification" width="600" height="480" class="size-medium wp-image-902" /></a><p class="wp-caption-text">Cool Focusing on pixels from a TFT High magnification</p></div>
<div id="attachment_903" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/06/tft-pixels-in-focus-under-high-magnification-microscope/2010-06-10-234108/" rel="attachment wp-att-903"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/2010-06-10-234108-600x480.jpg" alt="More Cool Focusing on pixels from a TFT High magnification" title="More Cool Focusing on pixels from a TFT High magnification" width="600" height="480" class="size-medium wp-image-903" /></a><p class="wp-caption-text">More Cool Focusing on pixels from a TFT High magnification</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/06/tft-pixels-in-focus-under-high-magnification-microscope/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nexus One&#8217;s AMOLED Screen under the microscope</title>
		<link>http://www.stealthcopter.com/blog/2010/06/nexus-ones-amoled-screen-under-the-microscope/</link>
		<comments>http://www.stealthcopter.com/blog/2010/06/nexus-ones-amoled-screen-under-the-microscope/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 22:49:44 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Electronics]]></category>
		<category><![CDATA[microscope]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=896</guid>
		<description><![CDATA[After casually browsing this wikipedia article on google&#8217;s Nexus One (or HTC&#8217;s) I became interested in the AMOLED (Active-matrix OLED (Organic Light Emitting Device) screen due to its interesting pixel structure. Quote from wikipedia: The Nexus One has a 3.7 inch AMOLED screen with PenTile matrix pixel arrangement. The raster resolution is 800&#215;480 pixels, however [...]]]></description>
			<content:encoded><![CDATA[<p>After casually browsing <a href="http://en.wikipedia.org/wiki/Nexus_one#Hardware">this wikipedia article</a> on google&#8217;s Nexus One (or HTC&#8217;s) I became interested in the <a href="http://en.wikipedia.org/wiki/Active-matrix_OLED">AMOLED</a> (Active-matrix <a href="http://en.wikipedia.org/wiki/OLED">OLED</a> (Organic Light Emitting Device) screen due to its interesting pixel structure. Quote from wikipedia:</p>
<blockquote><p>
The Nexus One has a 3.7 inch AMOLED screen with PenTile matrix pixel arrangement. The raster resolution is 800&#215;480 pixels, however each pixel in the PenTile RGBG display has only two subpixels (red and green, or blue and green alternately), rather than the three found in most displays. This gives it a total effective subpixel resolution of a 392&#215;653 RBG display.[40]
</p></blockquote>
<p>So I decided to have a look under the <a href="http://www.stealthcopter.com/blog/2010/03/digimicro-200x-zooming-usb-digital-microscope-in-ubuntu-linux/">microscope</a> to see what I could find with my <a href="http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/">nexus one</a>. Enjoy the following images:</p>
<p><strong>Low Zoom</strong></p>
<div id="attachment_898" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-ones-amoled-screen-under-the-microscope/2010-06-10-232506/" rel="attachment wp-att-898"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/2010-06-10-232506-600x480.jpg" alt="Nexus One&#039;s AMOLED screen under the microscope (Low magnification)" title="Nexus One&#039;s AMOLED screen under the microscope (Low magnification)" width="600" height="480" class="size-medium wp-image-898" /></a><p class="wp-caption-text">Nexus One's AMOLED screen under the microscope (Low magnification)</p></div>
<p><strong>High zoom</strong></p>
<div id="attachment_899" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-ones-amoled-screen-under-the-microscope/2010-06-10-232527/" rel="attachment wp-att-899"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/2010-06-10-232527-600x480.jpg" alt="Nexus One&#039;s AMOLED screen under the microscope (High magnification)" title="Nexus One&#039;s AMOLED screen under the microscope (High magnification)" width="600" height="480" class="size-medium wp-image-899" /></a><p class="wp-caption-text">Nexus One's AMOLED screen under the microscope (High magnification)</p></div>
<div id="attachment_900" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-ones-amoled-screen-under-the-microscope/2010-06-10-232537/" rel="attachment wp-att-900"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/2010-06-10-232537-600x480.jpg" alt="Nexus One&#039;s AMOLED screen under the microscope (High magnification)" title="Nexus One&#039;s AMOLED screen under the microscope (High magnification)" width="600" height="480" class="size-medium wp-image-900" /></a><p class="wp-caption-text">Nexus One's AMOLED screen under the microscope (High magnification)</p></div>
<p><strong>Regular Pixel</strong></p>
<div id="attachment_901" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-ones-amoled-screen-under-the-microscope/2010-06-10-234045/" rel="attachment wp-att-901"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/2010-06-10-234045-600x480.jpg" alt="Regular pixels from a TFT screen" title="Regular pixels from a TFT screen" width="600" height="480" class="size-medium wp-image-901" /></a><p class="wp-caption-text">Regular pixels from a TFT screen</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/06/nexus-ones-amoled-screen-under-the-microscope/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Nexus Revamped Pro updated (google android live wallpaper)</title>
		<link>http://www.stealthcopter.com/blog/2010/06/nexus-revamped-pro-updated-google-android-live-wallpaper/</link>
		<comments>http://www.stealthcopter.com/blog/2010/06/nexus-revamped-pro-updated-google-android-live-wallpaper/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 21:27:03 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Live Wallpaper]]></category>
		<category><![CDATA[nexus one]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=885</guid>
		<description><![CDATA[I thought it was about time for another post about Nexus Revamped Live Wallpaper Pro as a follow up to this post. Following the original release many updates have gone by and I have received numerous emails with feedback and suggestions which are very much appreciated. Several additional features have been added and there are [...]]]></description>
			<content:encoded><![CDATA[<p>I thought it was about time for another post about Nexus Revamped Live Wallpaper Pro as a follow up to this <a href="http://www.stealthcopter.com/blog/2010/05/nexus-revamped-live-wallpaper/">post</a>. </p>
<div id="attachment_893" class="wp-caption aligncenter" style="width: 459px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-revamped-pro-updated-google-android-live-wallpaper/nxr_ss/" rel="attachment wp-att-893"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/nxr_ss-449x800.png" alt="Nexus Revampe Pro Update Screenshot" title="Nexus Revampe Pro Update Screenshot" width="449" height="800" class="size-medium wp-image-893" /></a><p class="wp-caption-text">Nexus Revampe Pro Update Screenshot</p></div>
<p>Following the original release many updates have gone by and I have received numerous emails with feedback and suggestions which are very much appreciated. Several additional features have been added and there are many more on the way.</p>
<p><strong>Changes</strong></p>
<ul>
<li>more themes for background and particles</li>
<li>White nexus theme due to popular demand (thanks for the emails)</li>
<li>improved performance (still optimising, future upgrades will be even better)</li>
<li>Option to change tail length</li>
<li>Seperated single-color and multi-color backgrounds/particle colors (more to come soon!)</li>
<li>preliminary support for smaller screens</li>
</ul>
<div id="attachment_892" class="wp-caption aligncenter" style="width: 456px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-revamped-pro-updated-google-android-live-wallpaper/nxr_col/" rel="attachment wp-att-892"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/nxr_col.png" alt="Nexus Revampe Pro Update Screenshot - Colors" title="Nexus Revampe Pro Update Screenshot - Colors" width="446" height="771" class="size-full wp-image-892" /></a><p class="wp-caption-text">Nexus Revampe Pro Update Screenshot - Colors</p></div>
<div id="attachment_890" class="wp-caption aligncenter" style="width: 462px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-revamped-pro-updated-google-android-live-wallpaper/nxr_themes/" rel="attachment wp-att-890"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/nxr_themes-452x800.png" alt="Nexus Revampe Pro Update - Theme settings" title="Nexus Revampe Pro Update - Theme settings" width="452" height="800" class="size-medium wp-image-890" /></a><p class="wp-caption-text">Nexus Revampe Pro Update - Theme settings</p></div>
<div id="attachment_886" class="wp-caption aligncenter" style="width: 458px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-revamped-pro-updated-google-android-live-wallpaper/nrp_bw/" rel="attachment wp-att-886"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/nrp_bw-448x800.png" alt="Nexus Revampe Pro Update - Black and white theme" title="Nexus Revampe Pro Update - Black and white theme" width="448" height="800" class="size-medium wp-image-886" /></a><p class="wp-caption-text">Nexus Revampe Pro Update - Black and white theme</p></div>
<div id="attachment_888" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-revamped-pro-updated-google-android-live-wallpaper/nxr_tail/" rel="attachment wp-att-888"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/nxr_tail-600x475.png" alt="Nexus Revampe Pro Update - Tail length" title="Nexus Revampe Pro Update - Tail length" width="600" height="475" class="size-medium wp-image-888" /></a><p class="wp-caption-text">Nexus Revampe Pro Update - Tail length</p></div>
<div id="attachment_889" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/06/nexus-revamped-pro-updated-google-android-live-wallpaper/nxr_tails/" rel="attachment wp-att-889"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/06/nxr_tails-600x208.png" alt="Nexus Revampe Pro Update - No tails, long tails and short tails" title="Nexus Revampe Pro Update - No tails, long tails and short tails" width="600" height="208" class="size-medium wp-image-889" /></a><p class="wp-caption-text">Nexus Revampe Pro Update - No tails, long tails and short tails</p></div>
<p>I will also push updates down to the free version of this application soon, but some options will be left out to reward the paying customers <img src='http://www.stealthcopter.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Android Market Links</strong><br />
Either click the following android market links (in android phone) or search the market for nexus revamped.<br />
<em><strong>Pro Version</strong></em><br />
<a href="market://details?id=com.stealthcopter.nexusrevampedpro">Nexus Revamped Pro Live Wallpaper</a> (com.stealthcopter.nexusrevampedpro)</p>
<p><img src="http://www.stealthcopter.com/android/apps/nexusrevampedpro/qr_sml.png" alt="qr" /></p>
<p><em><strong>Free Version</strong></em></p>
<p><a href="market://details?id=com.stealthcopter.nexusrevamped">Nexus Revamped Live Wallpaper</a> (com.stealthcopter.nexusrevamped)</p>
<p><a href="http://www.stealthcopter.com/android/apps/nexusrevamped/nexusrevamped.apk">Download link</a></p>
<p><img src="http://www.stealthcopter.com/android/apps/nexusrevamped/qr_sml.png" alt="qr" /></p>
<p><strong>Future</strong><br />
I have plans and ideas for the future of this application, please complete the poll below to indicate what you&#8217;d like to see in this app or leave feedback (comment) if you have any.</p>
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/06/nexus-revamped-pro-updated-google-android-live-wallpaper/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
		<item>
		<title>Setting up google calendar with Kontact (or korganiser) using akonadi</title>
		<link>http://www.stealthcopter.com/blog/2010/05/setting-up-google-calendar-with-kontact-or-korganiser-using-akonadi/</link>
		<comments>http://www.stealthcopter.com/blog/2010/05/setting-up-google-calendar-with-kontact-or-korganiser-using-akonadi/#comments</comments>
		<pubDate>Sat, 29 May 2010 14:42:13 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[akonadi]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[kontact]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=867</guid>
		<description><![CDATA[It used to be a real pain to try and get google calendar working with kontact/korganiser, however now it is very simple. I have also provided a screenshot walk-through to aide the process. Just install akonadi-kde-resource-googledata using your package manager or in the terminal with: sudo apt-get install akonadi-kde-resource-googledata This will install support of google [...]]]></description>
			<content:encoded><![CDATA[<p>It used to be a real pain to try and get google calendar working with kontact/korganiser, however now it is very simple. I have also provided a screenshot walk-through to aide the process.</p>
<p>Just install akonadi-kde-resource-googledata using your package manager or in the terminal with:</p>
<pre name="code" class="bash">
sudo apt-get install akonadi-kde-resource-googledata
</pre>
<p>This will install support of google calendar and google contacts into akonadi. If you&#8217;ve not heard of akonadi before, it is a backend that manages communications and protocols. So rather than having developers of separate applications working on the same thing rewriting code that does the same thing they can simply plug into akonadi. Kontact/korganiser can load can load from an akonadi resource:</p>
<p><strong>Walkthrough</strong><br />
(see below for walkthough with screenshots)</p>
<ul>
<li>Right Click on calendars and click add resource</li>
<li>Select akonadi</li>
<li>Click Manage Calendar Sources</li>
<li>Click add</li>
<li>Select Akonadi Google Calendar Resource</li>
<li>Enter your email and password and select ok</li>
<li>Your calendar should now sync and appear in korganiser</li>
</ul>
<p><strong>Screenshot Walkthrough</strong></p>
<li>Right Click on calendars and click add resource</li>
<div id="attachment_878" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/05/setting-up-google-calendar-with-kontact-or-korganiser-using-akonadi/googlecal1/" rel="attachment wp-att-878"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/05/googlecal1-600x375.png" alt="Google Caldendar integration with Kontact Korganiser 1" title="Google Caldendar integration with Kontact Korganiser 1" width="600" height="375" class="size-medium wp-image-878" /></a><p class="wp-caption-text">Google Caldendar integration with Kontact Korganiser 1</p></div>
<li>Select akonadi</li>
<div id="attachment_879" class="wp-caption aligncenter" style="width: 337px"><a href="http://www.stealthcopter.com/blog/2010/05/setting-up-google-calendar-with-kontact-or-korganiser-using-akonadi/googlecal2/" rel="attachment wp-att-879"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/05/googlecal2.png" alt="Google Caldendar integration with Kontact Korganiser 2" title="Google Caldendar integration with Kontact Korganiser 2" width="327" height="304" class="size-full wp-image-879" /></a><p class="wp-caption-text">Google Caldendar integration with Kontact Korganiser 2</p></div>
<li>Click Manage Calendar Sources</li>
<div id="attachment_880" class="wp-caption aligncenter" style="width: 535px"><a href="http://www.stealthcopter.com/blog/2010/05/setting-up-google-calendar-with-kontact-or-korganiser-using-akonadi/googlecal3/" rel="attachment wp-att-880"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/05/googlecal3.png" alt="Google Caldendar integration with Kontact Korganiser 3" title="Google Caldendar integration with Kontact Korganiser 3" width="525" height="545" class="size-full wp-image-880" /></a><p class="wp-caption-text">Google Caldendar integration with Kontact Korganiser 3</p></div>
<li>Click add</li>
<div id="attachment_881" class="wp-caption aligncenter" style="width: 396px"><a href="http://www.stealthcopter.com/blog/2010/05/setting-up-google-calendar-with-kontact-or-korganiser-using-akonadi/googlecal4/" rel="attachment wp-att-881"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/05/googlecal4.png" alt="Google Caldendar integration with Kontact Korganiser 4" title="Google Caldendar integration with Kontact Korganiser 4" width="386" height="335" class="size-full wp-image-881" /></a><p class="wp-caption-text">Google Caldendar integration with Kontact Korganiser 4</p></div>
<li>Select Akonadi Google Calendar Resource</li>
<div id="attachment_882" class="wp-caption aligncenter" style="width: 478px"><a href="http://www.stealthcopter.com/blog/2010/05/setting-up-google-calendar-with-kontact-or-korganiser-using-akonadi/googlecal5/" rel="attachment wp-att-882"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/05/googlecal5.png" alt="Google Caldendar integration with Kontact Korganiser 5" title="Google Caldendar integration with Kontact Korganiser 5" width="468" height="352" class="size-full wp-image-882" /></a><p class="wp-caption-text">Google Caldendar integration with Kontact Korganiser 5</p></div>
<li>Enter your email and password and select ok</li>
<div id="attachment_883" class="wp-caption aligncenter" style="width: 418px"><a href="http://www.stealthcopter.com/blog/2010/05/setting-up-google-calendar-with-kontact-or-korganiser-using-akonadi/googlecal6/" rel="attachment wp-att-883"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/05/googlecal6.png" alt="Google Caldendar integration with Kontact Korganiser 6" title="Google Caldendar integration with Kontact Korganiser 6" width="408" height="192" class="size-full wp-image-883" /></a><p class="wp-caption-text">Google Caldendar integration with Kontact Korganiser 6</p></div>
<li>Your calendar should now sync and appear in korganiser</li>
<div id="attachment_884" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/05/setting-up-google-calendar-with-kontact-or-korganiser-using-akonadi/googlecal7/" rel="attachment wp-att-884"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/05/googlecal7.png" alt="Google Caldendar integration with Kontact Korganiser 7" title="Google Caldendar integration with Kontact Korganiser 7" width="600" height="361" class="size-full wp-image-884" /></a><p class="wp-caption-text">Google Caldendar integration with Kontact Korganiser 7</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/05/setting-up-google-calendar-with-kontact-or-korganiser-using-akonadi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Photos of the android statues outside building 44</title>
		<link>http://www.stealthcopter.com/blog/2010/05/photos-of-the-android-statues-outside-building-44/</link>
		<comments>http://www.stealthcopter.com/blog/2010/05/photos-of-the-android-statues-outside-building-44/#comments</comments>
		<pubDate>Thu, 27 May 2010 23:25:01 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=870</guid>
		<description><![CDATA[I decided to visit the android statues outside google&#8217;s building 44 in mountain view as I was in the area for a conference and holiday. Here are some photos that I took on my nexus one The Froyo android statue was still wrapped up as discussed on techcrunch Other photos]]></description>
			<content:encoded><![CDATA[<p>I decided to visit the android statues outside google&#8217;s building 44 in mountain view as I was in the area for a conference and holiday. Here are some photos that I took on my <a href="http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/">nexus one</a></p>
<div id="attachment_869" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/05/photos-of-the-android-statues-outside-building-44/2010-05-19-17-57-58/" rel="attachment wp-att-869"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/05/2010-05-19-17.57.58-600x450.jpg" alt="Me hugging the android outside building 44" title="Me hugging the android outside building 44" width="600" height="450" class="size-medium wp-image-869" /></a><p class="wp-caption-text">Me hugging the android outside building 44</p></div>
<div id="attachment_874" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/05/photos-of-the-android-statues-outside-building-44/attachment/190520101716/" rel="attachment wp-att-874"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/05/190520101716-600x450.jpg" alt="Nexus one against the nexus one statue" title="Nexus one against the nexus one statue" width="600" height="450" class="size-medium wp-image-874" /></a><p class="wp-caption-text">Nexus one against the nexus one statue</p></div>
<div id="attachment_875" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/05/photos-of-the-android-statues-outside-building-44/2010-05-19-17-57-22/" rel="attachment wp-att-875"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/05/2010-05-19-17.57.22-600x800.jpg" alt="Doughnut android statue" title="Doughnut android statue" width="600" height="800" class="size-medium wp-image-875" /></a><p class="wp-caption-text">Doughnut android statue</p></div>
<div id="attachment_876" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/05/photos-of-the-android-statues-outside-building-44/2010-05-19-17-57-04/" rel="attachment wp-att-876"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/05/2010-05-19-17.57.04-600x800.jpg" alt="Cupcake android statue" title="Cupcake android statue" width="600" height="800" class="size-medium wp-image-876" /></a><p class="wp-caption-text">Cupcake android statue</p></div>
<div id="attachment_877" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/05/photos-of-the-android-statues-outside-building-44/2010-05-19-17-56-57/" rel="attachment wp-att-877"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/05/2010-05-19-17.56.57-600x450.jpg" alt="Eclaire android statue" title="Eclaire android statue" width="600" height="450" class="size-medium wp-image-877" /></a><p class="wp-caption-text">Eclaire android statue</p></div>
<p>The Froyo android statue was still wrapped up as discussed on <a href="http://techcrunch.com/2010/05/13/android-froyo-sculpture-unveiled-almost-and-google-security-was-almost-called/">techcrunch</a></p>
<p><strong>Other photos</strong></p>
<div id="attachment_873" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/05/photos-of-the-android-statues-outside-building-44/2010-05-19-17-41-12/" rel="attachment wp-att-873"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/05/2010-05-19-17.41.12-600x450.jpg" alt="google" title="google" width="600" height="450" class="size-medium wp-image-873" /></a><p class="wp-caption-text">google</p></div>
<div id="attachment_868" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/05/photos-of-the-android-statues-outside-building-44/2010-05-19-17-32-41/" rel="attachment wp-att-868"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/05/2010-05-19-17.32.41-600x450.jpg" alt="Google Building" title="Google Building" width="600" height="450" class="size-medium wp-image-868" /></a><p class="wp-caption-text">Google Building</p></div>
<div id="attachment_872" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/05/photos-of-the-android-statues-outside-building-44/google44-2/" rel="attachment wp-att-872"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/05/google441-600x456.png" alt="Location of building 44" title="Location of building 44" width="600" height="456" class="size-medium wp-image-872" /></a><p class="wp-caption-text">Location of building 44</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/05/photos-of-the-android-statues-outside-building-44/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nexus Revamped Live wallpaper</title>
		<link>http://www.stealthcopter.com/blog/2010/05/nexus-revamped-live-wallpaper/</link>
		<comments>http://www.stealthcopter.com/blog/2010/05/nexus-revamped-live-wallpaper/#comments</comments>
		<pubDate>Sun, 02 May 2010 18:28:06 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[art?]]></category>
		<category><![CDATA[Live Wallpaper]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=866</guid>
		<description><![CDATA[Having recieved my Nexus one from google, I felt compelled to write a Live Wallpaper app because of how sexy they look. So I got playing around and ended up writing a wallpaper from scratch that is designed to be similar to the Nexus Live Wallpaper, but with improved efficiency and lots of customisability. I [...]]]></description>
			<content:encoded><![CDATA[<p>Having recieved my <a href="http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/">Nexus one</a> from google, I felt compelled to write a Live Wallpaper app because of how sexy they look. So I got playing around and ended up writing a wallpaper from scratch that is designed to be similar to the Nexus Live Wallpaper, but with improved efficiency and lots of customisability.</p>
<p>I have created a pro version of the application which features more options and extra backgrounds and themes, which is available for a small fee which will help support development. </p>
<p><strong>Video</strong></p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/lq0onEd1U2I&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/lq0onEd1U2I&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>Please note that this is a video taken in an emulator using screen recording software, so it is less responsive and more stuttery than when run on an actual phone.</p>
<p><strong>Android Market Links</strong><br />
<a href="market://details?id=com.stealthcopter.nexusrevampedpro">Nexus Revamped Pro Live Wallpaper</a> (com.stealthcopter.nexusrevampedpro)<br />
<a href="market://details?id=com.stealthcopter.nexusrevamped">Nexus Revamped Live Wallpaper</a> (com.stealthcopter.nexusrevamped)</p>
<p>As always I welcome feedback and bug reports!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/05/nexus-revamped-live-wallpaper/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Received my complimentary Nexus One from Google device seeding</title>
		<link>http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/</link>
		<comments>http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 17:47:51 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Electronics]]></category>
		<category><![CDATA[nexus one]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=784</guid>
		<description><![CDATA[Short story: I received a free Nexus One (HTC) from Google for having an application on the android market with over 5000 downloads and a rating above 3.5 (For Counter-Strike 1.6 soundboard) Back Story Got a questionable email from Google (02/03/2010 23:47): Subject: Device Seeding Program for Top Android Market Developers From: android-market-seeding@google.com Due to [...]]]></description>
			<content:encoded><![CDATA[<p>Short story: I received a free Nexus One (HTC) from Google for having an application on the android market with over 5000 downloads and a rating above 3.5 (For <a href="http://www.stealthcopter.com/blog/2010/01/android-counter-strike-1-6-soundboard-released/">Counter-Strike 1.6 soundboard</a>)</p>
<div id="attachment_863" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/nexus_one_unpackaged/" rel="attachment wp-att-863"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/nexus_one_unpackaged-600x450.png" alt="Nexus One unpacked" title="Nexus One unpacked" width="600" height="450" class="size-medium wp-image-863" /></a><p class="wp-caption-text">Nexus One unpacked, note the awesome android logo on the pouch</p></div>
<p><strong>Back Story</strong></p>
<p>Got a questionable email from Google (02/03/2010 23:47):</p>
<blockquote><p>
Subject: Device Seeding Program for Top Android Market Developers<br />
From: android-market-seeding@google.com </p>
<p> Due to your contribution to the success of Android Market, we would like to present you with a brand new Android device as part of our developer device seeding program. You are receiving this message because you&#8217;re one of the top developers in Android Market with one or more of your applications having a 3.5 star or higher rating and more than 5,000 unique downloads. </p>
<p> In order to receive this device, you must click through to this site, read the terms and conditions of the offer and fill out the registration form to give us your current mailing address so that we can ship your device. </p>
<p> You will receive either a Verizon Droid by Motorola or a Nexus One. Developers with mailing addresses in the US will receive either a Droid or Nexus one, based on random distribution. Developers from Canada, EU, and the EEA states (Norway, Lichtenstein), Switzerland, Hong Kong, Taiwan, and Singapore will receive a Nexus One. Developers with mailing addresses in countries not listed above will not receive a phone since these phones are not certified to be used in other countries. </p>
<p> We hope that you will enjoy your new device and continue to build more insanely popular apps for Android! </p>
<p> Thanks,<br />
 Eric Chu<br />
 Android Mobile Platform </p>
<p> Google, Inc.<br />
 1600 Amphitheater Parkway<br />
 Mountain View, CA 94043 </p>
<p> NOTE: You have received this mandatory email to notify you about an important update to the status of your Android account.
</p></blockquote>
<p>Initially I thought this was a scam, and searched the internet to check. Thankfully I came across a thread in Google forums of other people also sceptical about this email however it turned out to be legitimate (also confirmed by romainguy and others on twitter)</p>
<p>I then got a confirmation (06/03/2010):</p>
<blockquote><p>Subject:Android Market Device Seeding Program Confirmation<br />
From: Android Market Device Seeding Program <android-market-seeding@google.com></p>
<p>Dear Matthew,<br />
Weâ€™ve received your information for the Android Market Device Seeding Program and have successfully validated the Google Order Number from your developer account.<br />
Your information will now be sent to our shipping partner for order processing. Just to confirm, the information we received from you was:<br />
Matthew Rollings</p>
<address>
<phone number>
<p>If you need to make any changes to your information above, please contact us at android-market-seeding@google.com as soon as possible. Otherwise, you should receive your phone in 2-4 weeks!<br />
On behalf of the Android team,<br />
 Thanks, and happy coding!<br />
Google, Inc.<br />
 1600 Amphitheater Parkway<br />
 Mountain View, CA 94043</p></blockquote>
<p>I then received phone the phone on 29/04/2010 ~11:10. This is a lot later (3 weeks and 6 days) than the 2-4 weeks estimated for delivery, however this is believed to have been the fault of the shipping company Google were using.</p>
<p><strong>Photos</strong></p>
<div id="attachment_860" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/nexus_one_letter/" rel="attachment wp-att-860"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/nexus_one_letter-600x449.png" alt="Google device seeding nexus one letter" title="Google device seeding nexus one letter" width="600" height="449" class="size-medium wp-image-860" /></a><p class="wp-caption-text">Google device seeding nexus one letter</p></div>
<div id="attachment_861" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/nexus_one_box/" rel="attachment wp-att-861"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/nexus_one_box-600x800.png" alt="Nexus One box" title="Nexus One box" width="600" height="800" class="size-medium wp-image-861" /></a><p class="wp-caption-text">Nexus One box</p></div>
<div id="attachment_862" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/nexus_one_box2/" rel="attachment wp-att-862"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/nexus_one_box2-600x559.png" alt="Nexus One box with lid off" title="Nexus One box with lid off" width="600" height="559" class="size-medium wp-image-862" /></a><p class="wp-caption-text">Nexus One box with lid off</p></div>
<div id="attachment_864" class="wp-caption aligncenter" style="width: 428px"><a href="http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/nexus_one/" rel="attachment wp-att-864"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/nexus_one-418x800.png" alt="Nexus One" title="Nexus One" width="418" height="800" class="size-medium wp-image-864" /></a><p class="wp-caption-text">Nexus One, appologies for terrible photography skills</p></div>
<div id="attachment_865" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/nexus_one_androidears/" rel="attachment wp-att-865"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/nexus_one_androidears-600x565.png" alt="Nexus One handsfree earphones with logo" title="Nexus One handsfree earphones with logo" width="600" height="565" class="size-medium wp-image-865" /></a><p class="wp-caption-text">Nexus One handsfree earphones with logo</p></div>
<p>Note: I will probably update this post with better photos and photos of the phone in action, or possibly even give a review of how awesome the phone is (and also how to get the internet working on o2 UK).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/04/received-my-complimentary-nexus-one-from-google-device-seeding/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>How to create a cryptogram in python (random substitution cipher)</title>
		<link>http://www.stealthcopter.com/blog/2010/04/how-to-create-a-cryptogram-in-python-random-substitution-cipher/</link>
		<comments>http://www.stealthcopter.com/blog/2010/04/how-to-create-a-cryptogram-in-python-random-substitution-cipher/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 15:20:52 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[cryptography]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=859</guid>
		<description><![CDATA[Cryptograms are enjoyable puzzles created from a saying or phrase encrypted with a substitutional cipher. They can be fun to decipher by hand by looking for common letter combinations, doublets, guesswork, and other flaws in this encryption mechanism. I wrote a quick python script which will accept an input text and create a random substitutional [...]]]></description>
			<content:encoded><![CDATA[<p>Cryptograms are enjoyable puzzles created from a saying or phrase encrypted with a substitutional cipher. They can be fun to decipher by hand by looking for common letter combinations, doublets, guesswork, and other flaws in this encryption mechanism.</p>
<p>I wrote a quick python script which will accept an input text and create a random substitutional cipher and encrypt it. It then outputs the cipher alphabet and the encrypted text.</p>
<p><strong>Source code:</strong></p>
<pre name="code" class="python">
# -*- coding: utf-8 -*-
import sys
from random import randint
from string import maketrans

if (len(sys.argv)>1):
	# Normal alphabet
	alphabet="abcdefghijklmnopqrstuvwxyz"

	# Randomly create a new cipherbet
	cipherbet=""
	left=alphabet
	for i in range(0,len(alphabet)):
		x=randint(0,len(left)-1)
		cipherbet+=left[x]
		left=left[:x]+left[x+1:]

	# Get input text to translate
	text=sys.argv[1].lower()

	trantab = maketrans(alphabet,cipherbet)
	text=text.translate(trantab)

	# Replace unused letters in cipherbet with _'s
	for i in cipherbet:
		if i not in text:
			cipherbet=cipherbet.replace(i,"_")

	# Print cipherbet (solution) and the text (cryptogram)
	print cipherbet
	print text
</pre>
<p><strong>Example usage</strong></p>
<blockquote><p>
python create_cipher.py &#8220;The Science gets done. And you make a neat gun. For the people who are still alive.&#8221;<br />
b_lpievrm_acqxuj_fzdgwn_o_<br />
dri zlmixli vidz puxi. bxp oug qbai b xibd vgx. euf dri jiujci nru bfi zdmcc bcmwi.
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/04/how-to-create-a-cryptogram-in-python-random-substitution-cipher/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Android: Grouping onClickListeners together by implementation in an activity</title>
		<link>http://www.stealthcopter.com/blog/2010/04/android-grouping-onclicklisteners-together-by-implementation-in-an-activity/</link>
		<comments>http://www.stealthcopter.com/blog/2010/04/android-grouping-onclicklisteners-together-by-implementation-in-an-activity/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 00:06:16 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=857</guid>
		<description><![CDATA[Here is a quick tip for better organisation of your program by grouping all onClickListeners into a simple switch statement. The problem If you have lots of buttons or view that you are linking to OnClickListener events you can quickly end up with some cumbersome code. This can be changed very simply by implementing a [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a quick tip for better organisation of your program by grouping all onClickListeners into a simple switch statement.</p>
<p><strong>The problem</strong><br />
If you have lots of buttons or view that you are linking to OnClickListener events you can quickly end up with some cumbersome code. This can be changed very simply by implementing a method in your activity and switching between View ID&#8217;s. </p>
<p>Below is an example the typical method for creating an OnClickListener for a View.</p>
<pre name="code" class="java">

final ImageButton Ibutton = (ImageButton) findViewById(R.id.button_1);
Ibutton.setOnClickListener(new OnClickListener() {
	public void onClick(View v) {
		Toast.makeText(testActivity.this, "Button 1 pressed ", Toast.LENGTH_SHORT).show();
	}
});

final ImageButton Ibutton2 = (ImageButton) findViewById(R.id.button_2);
Ibutton2.setOnClickListener(new OnClickListener() {
	 public void onClick(View v) {
		Toast.makeText(testActivity.this, "Button 2 pressed", Toast.LENGTH_SHORT).show();
	}
});
</pre>
<p><strong>The Solution</strong><br />
We can get our activity to handle the OnClick events itself, we do this we implementing OnClickListener:</p>
<pre name="code" class="java">
public class testActivity extends Activity implements OnClickListener {
</pre>
<p>If your write this in eclipse you can hover over the error this produces and click Add unimplemented methods to automatically create a stub for the next part.</p>
<div id="attachment_858" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.stealthcopter.com/blog/2010/04/android-grouping-onclicklisteners-together-by-implementation-in-an-activity/onclicklistner/" rel="attachment wp-att-858"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/onclicklistner-600x115.png" alt="eclipse auto suggesting to implement the onclicklistener method" title="eclipse auto suggesting to implement the onclicklistener method" width="600" height="115" class="size-medium wp-image-858" /></a><p class="wp-caption-text">eclipse auto suggesting to implement the onclicklistener method</p></div>
<p>We now create our buttons similar to before, but for the setOnClickListener we pass this as an argument, so that our implemented method is called.</p>
<pre name="code" class="java">

ImageButton Ibutton = (ImageButton) findViewById(R.id.button_1);
Ibutton.setOnClickListener(this);      

ImageButton Ibutton2 = (ImageButton) findViewById(R.id.button_2);
Ibutton2.setOnClickListener(this);      
</pre>
<p>We now create the implemented method for our activity (onClick) and we use a switch statement to find which View fired the onclick event and preform an action accordingly.</p>
<pre name="code" class="java">

@Override
public void onClick(View v) {
	switch(v.getId()){
	case R.id.button_1:
		// action to preform on button 1
		Toast.makeText(testActivity.this, "Button 1 pressed ", Toast.LENGTH_SHORT).show();
		break;
	case R.id.button_2:
		// action to preform on button 1
		Toast.makeText(testActivity.this, "Button 2 pressed ", Toast.LENGTH_SHORT).show();
		break;
	}
}		
</pre>
<p>And it&#8217;s as simple as that!<br />
Feel free to post comments or questions</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/04/android-grouping-onclicklisteners-together-by-implementation-in-an-activity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android: Context menu example (on long press, gridview)</title>
		<link>http://www.stealthcopter.com/blog/2010/04/android-context-menu-example-on-long-press-gridview/</link>
		<comments>http://www.stealthcopter.com/blog/2010/04/android-context-menu-example-on-long-press-gridview/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 10:41:44 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=582</guid>
		<description><![CDATA[I received several requests regarding how I created a context menu (the menu activated on a long press) using a gridview and how to call functions such as saving a sound file from this. So I have created a quick example to explain this: Tutorial To implement a context menu (long press menu) you first [...]]]></description>
			<content:encoded><![CDATA[<p>I received several requests regarding how I created a context menu (the menu activated on a long press) using a gridview and how to call functions such as saving a sound file from this. So I have created a quick example to explain this:</p>
<p><strong>Tutorial</strong></p>
<p>To implement a context menu (long press menu) you first need to include the following imports:</p>
<pre name="code" class="java">
import android.view.ContextMenu;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
</pre>
<p>We start a very simple project, with the layout having a single button named button_example:</p>
<div id="attachment_854" class="wp-caption aligncenter" style="width: 330px"><a href="http://www.stealthcopter.com/blog/2010/04/android-context-menu-example-on-long-press-gridview/cm1/" rel="attachment wp-att-854"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/cm1.png" alt="Android context menu example" title="Android context menu example" width="320" height="484" class="size-full wp-image-854" /></a><p class="wp-caption-text">Android context menu example</p></div>
<p>We then use registerForContextMenu in the onCreate of the activity to tell android that we want this view to create a menu when it is long pressed. This is not limited to buttons, this will work for other views too. You must register each view that you want to have associated with the context menu.</p>
<pre name="code" class="java">
Button btn = (Button) findViewById(R.id.button_example);
registerForContextMenu(btn);
</pre>
<p>You then need to override the onCreateContextMenu method to create the menu:</p>
<pre name="code" class="java">
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
	super.onCreateContextMenu(menu, v, menuInfo);
		menu.setHeaderTitle("Context Menu");
		menu.add(0, v.getId(), 0, "Action 1");
		menu.add(0, v.getId(), 0, "Action 2");
	}
</pre>
<div id="attachment_852" class="wp-caption aligncenter" style="width: 330px"><a href="http://www.stealthcopter.com/blog/2010/04/android-context-menu-example-on-long-press-gridview/cm2/" rel="attachment wp-att-852"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/cm2.png" alt="android context menu example" title="android context menu example" width="320" height="484" class="size-full wp-image-852" /></a><p class="wp-caption-text">android context menu example</p></div>
<p>And override onContextItemSelected to preform the action when an option is selected from this menu:</p>
<pre name="code" class="java">
    @Override
	public boolean onContextItemSelected(MenuItem item) {
       	if(item.getTitle()=="Action 1"){function1(item.getItemId());}
    	else if(item.getTitle()=="Action 2"){function2(item.getItemId());}
    	else {return false;}
	return true;
	}
</pre>
<p>function1 and function2 are just place-holders at the moment that toast a message when they are used. In the above example we are choosing between Action 1 and Action 2 which define which function will be run when an item is selected. We have passed the ID of the view through the context menu and into this function so we can tell what the user was pressing when the context menu was created.</p>
<div id="attachment_853" class="wp-caption aligncenter" style="width: 330px"><a href="http://www.stealthcopter.com/blog/2010/04/android-context-menu-example-on-long-press-gridview/cm3/" rel="attachment wp-att-853"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/cm3.png" alt="calling a function after a context menu item was pressed" title="calling a function after a context menu item was pressed" width="320" height="484" class="size-full wp-image-853" /></a><p class="wp-caption-text">calling a function after a context menu item was pressed</p></div>
<p><strong>Examples</strong></p>
<p>If you create a gridview and give each item a unique ID then you can use this method to preform actions based on each item. This is the method I use for my soundboard applications to save the sounds to the SD card as a notification or ringtone:</p>
<div id="attachment_855" class="wp-caption aligncenter" style="width: 330px"><a href="http://www.stealthcopter.com/blog/2010/04/android-context-menu-example-on-long-press-gridview/cssb_cm/" rel="attachment wp-att-855"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/cssb_cm.png" alt="counterstrike 1.6 soundboard context menu" title="counterstrike 1.6 soundboard context menu" width="320" height="482" class="size-full wp-image-855" /></a><p class="wp-caption-text">counterstrike 1.6 soundboard context menu</p></div>
<div id="attachment_856" class="wp-caption aligncenter" style="width: 331px"><a href="http://www.stealthcopter.com/blog/2010/04/android-context-menu-example-on-long-press-gridview/utsb_cm/" rel="attachment wp-att-856"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/04/utsb_cm.png" alt="Unreal Tournament soundboard context menu" title="Unreal Tournament soundboard context menu" width="321" height="481" class="size-full wp-image-856" /></a><p class="wp-caption-text">Unreal Tournament soundboard context menu</p></div>
<p><strong>Source</strong></p>
<p>Below is the source code:</p>
<pre name="code" class="java">
package com.contextmenu.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.Button;
import android.widget.Toast;

public class test extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button btn = (Button) findViewById(R.id.button_example);
        registerForContextMenu(btn);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
	super.onCreateContextMenu(menu, v, menuInfo);
		menu.setHeaderTitle("Context Menu");
		menu.add(0, v.getId(), 0, "Action 1");
		menu.add(0, v.getId(), 0, "Action 2");
	}

    @Override
	public boolean onContextItemSelected(MenuItem item) {
       	if(item.getTitle()=="Action 1"){function1(item.getItemId());}
    	else if(item.getTitle()=="Action 2"){function2(item.getItemId());}
    	else {return false;}
	return true;
	}

    public void function1(int id){
    	Toast.makeText(this, "function 1 called", Toast.LENGTH_SHORT).show();
    }
    public void function2(int id){
    	Toast.makeText(this, "function 2 called", Toast.LENGTH_SHORT).show();
    }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/04/android-context-menu-example-on-long-press-gridview/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Bash script to toggle samba on and off (and a button KDE)</title>
		<link>http://www.stealthcopter.com/blog/2010/04/bash-script-to-toggle-samba-on-and-off-and-a-button-kde/</link>
		<comments>http://www.stealthcopter.com/blog/2010/04/bash-script-to-toggle-samba-on-and-off-and-a-button-kde/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 15:38:54 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[bash]]></category>
		<category><![CDATA[samba]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=823</guid>
		<description><![CDATA[I like using samba as a password-less method for people on a network to share and access files on my computer. This works well on a network you trust like a small home network or a small private network, however on different networks restricted access is preferred. For me this problem is solved by simply [...]]]></description>
			<content:encoded><![CDATA[<p>I like using samba as a password-less method for people on a network to share and access files on my computer. This works well on a network you trust like a small home network or a small private network, however on different networks restricted access is preferred. </p>
<p>For me this problem is solved by simply having a button to turn samba on and off. This will also have the side effect that you will not be able to access anyone else&#8217;s shares but is sufficient for my needs.</p>
<p><strong>Bash script</strong></p>
<pre name="code" class="bash">
#!/bin/bash
smb=`sudo /etc/init.d/samba status | grep running | wc -l`
if [ $smb -gt 0 ]
then
	# Stop samba
	sudo /etc/init.d/samba stop
else
	# Start samba
	sudo /etc/init.d/samba restart
fi
</pre>
<p>Where username is replaced with your username.</p>
<p>The script simply checks the status of samba to see if it is running, if it is then it is killed otherwise it is started. kdialog is used to display a notification of which toggle state we are in. </p>
<p><strong>Adding a notification (KDE)</strong></p>
<pre name="code" class="bash">
#!/bin/bash
smb=`sudo /etc/init.d/samba status | grep running | wc -l`
if [ $smb -gt 0 ]
then
	# Stop samba
	sudo /etc/init.d/samba stop
	sudo -u username kdialog --passivepopup 'Samba off' 3
else
	# Start samba
	sudo /etc/init.d/samba restart
	sudo -u username kdialog --passivepopup 'Samba on' 3
fi
</pre>
<p>We run kdialog through `sudo -u username` because when the script is run with sudo the current user will be root, and using this will cause kdialog to display an ugly notification.</p>
<p>For an example of this try running `sudo kdialog &#8220;ugly message&#8221; 3`</p>
<div id="attachment_825" class="wp-caption aligncenter" style="width: 410px"><a href="http://www.stealthcopter.com/blog/2010/04/bash-script-to-toggle-samba-on-and-off-and-a-button-kde/uglykdialog/" rel="attachment wp-att-825"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/03/uglykdialog.png" alt="kdialog run as root showing an ugly notification" title="kdialog run as root showing an ugly notification" width="400" height="254" class="size-full wp-image-825" /></a><p class="wp-caption-text">kdialog run as root showing an ugly notification</p></div>
<p>As opposed to `sudo -u username kdialog &#8211;passivepopup &#8216;lovly message&#8217; 3`<br />
<div id="attachment_826" class="wp-caption aligncenter" style="width: 460px"><a href="http://www.stealthcopter.com/blog/2010/04/bash-script-to-toggle-samba-on-and-off-and-a-button-kde/nicekdialog/" rel="attachment wp-att-826"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/03/nicekdialog.png" alt="kdialog run as user showing an pretty notification" title="kdialog run as user showing an pretty notification" width="450" height="147" class="size-full wp-image-826" /></a><p class="wp-caption-text">kdialog run as user showing an pretty notification</p></div></p>
<p><strong>Creating an icon/button (KDE)</strong><br />
You can then turn this into a button you can simply click my creating a desktop file. In KDE Right click > new > link to application. Then fill in the application tab with the information as in the following image:</p>
<div id="attachment_824" class="wp-caption aligncenter" style="width: 511px"><a href="http://www.stealthcopter.com/blog/2010/04/bash-script-to-toggle-samba-on-and-off-and-a-button-kde/desktopsamba/" rel="attachment wp-att-824"><img src="http://www.stealthcopter.com/blog/wp-content/uploads/2010/03/desktopsamba.png" alt="Samba toggle desktop button configuration" title="Samba toggle desktop button configuration" width="501" height="442" class="size-full wp-image-824" /></a><p class="wp-caption-text">Samba toggle desktop button configuration</p></div>
<p>In the General tab you can give the button a name and choose the icon of your choice, click OK, and now you can drag your button to where ever you want it (taskbar, desktop, panel etc.) Then you can simple push the button to toggle samba on and off.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/04/bash-script-to-toggle-samba-on-and-off-and-a-button-kde/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
