<?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/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>Google App Engine &#8211; Squix &#8211; TechBlog</title>
	<atom:link href="https://blog.squix.org/tag/google-app-engine/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.squix.org</link>
	<description></description>
	<lastBuildDate>Sun, 17 Apr 2016 07:56:50 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.8</generator>
<site xmlns="com-wordpress:feed-additions:1">121913304</site>	<item>
		<title>Continuous Deployment from Github to App Engine Java with CodeShip</title>
		<link>https://blog.squix.org/2014/03/continuous-deployment-from-github-to.html</link>
					<comments>https://blog.squix.org/2014/03/continuous-deployment-from-github-to.html#comments</comments>
		
		<dc:creator><![CDATA[Daniel Eichhorn]]></dc:creator>
		<pubDate>Sat, 01 Mar 2014 18:49:00 +0000</pubDate>
				<category><![CDATA[Common]]></category>
		<category><![CDATA[app engine]]></category>
		<category><![CDATA[codeship]]></category>
		<category><![CDATA[continuous deployment]]></category>
		<category><![CDATA[GAE]]></category>
		<category><![CDATA[Google App Engine]]></category>
		<guid isPermaLink="false">http://blog.squix.org/2014/03/01/continuous-deployment-from-github-to/</guid>

					<description><![CDATA[Motivation Continuous Deployment is nice: you roll out new versions of your software all the time and not only three, four times a year with your mayor release. And everything automatically. Of course this requires a good coverage of automated unit, integration and UI tests ... <p><a class="read-more btn btn-secondary" href="https://blog.squix.org/2014/03/continuous-deployment-from-github-to.html">Read More</a></p>]]></description>
										<content:encoded><![CDATA[<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
Motivation</h2>
<p>Continuous Deployment is nice: you roll out new versions of your software all the time and not only three, four times a year with your mayor release. And everything automatically. Of course this requires a good coverage of automated unit, integration and UI tests to make sure that your current version doesn&#8217;t break anything for the user.<br />
What tools can you use do achieve this for your open source project? If I&#8217;m not mistaken you get all this with an account at bit bucket from Atlassian. But since I currently host my open source projects on Github I had to find another solution. And it exists, even for free: <a href="http://codeship.io/">http://codeship.io</a><br />
Codeship already nows about many services and you only have to configure a few lines to get it up and running. For instance it supports Github as code repository and Google App Engine as deployment target. But the documentation about it is still a bit sparse. So this article describes how you can set it up</p>
<h2 style="text-align: left;">
SCM</h2>
<div>
The setup of github as a repository is fairly straight forward: you use your github account to authenticate yourself through OAuth with CodeShip. Then you create a new project and in the SCM section you pick Github as your provider. After allowing codeship to access your Github repositories you already can select the repo you want to build from.</div>
<h2 style="text-align: left;">
Tests</h2>
<div>
Currently I don&#8217;t have integration and UI tests yet for my open source project. Anyway, to make sure your build runs at least once I chose the JVM option in the &#8220;Select your technology to prepopulate basic commands&#8221; dropdown and added a</p>
</div>
<div>
<pre>mvn package
</pre>
<p></div>
<div>
in the &#8220;Modify your Setup Commands&#8221; section. I left the rest unchanged.</p>
<h2 style="text-align: left;">
Deployment</h2>
</div>
<div>
And now came the tricky part. I don&#8217;t want the build to deploy to the GAE application that is defined in the appengine-web.xml. Instead I want it to be installed to a test environment with a different name running on GAE as well. So I added a second appengine-web-testenv.xml beside the default one and changed the application id to the test environment. Then I selected the &#8220;$script&#8221; option in the CodeShip deployment tab and added a </div>
<pre>cp target/-/WEB-INF/appengine-web-testenv.xml target/-/WEB-INF/appengine-web.xml
</pre>
<p>Please replace maven.project and maven.version with the name of your maven artefact. In my case this is &#8220;extraleague-1.0-SNAPSHOT&#8221;. So this basically replaces the original appengine file with the one containing the test environment id. When appcfg.sh now tries to find the target for deployment it will find the one with the test environment.<br />
Now we add another deployment descriptor by selecting the app engine option. I think when you first do this you have to authorise CodeShip to deploy to GAE on your behalf. After that I added./target/extraleague-1.0-SNAPSHOT/ as Path and a rest service endpoint in the URL field. This URL will be checked to decide if the deployment was successful. In my first attempt I used the index.html of my angular application for this. The problem here is that static files like the index.html did get served while the Java server part had a 500 error. That&#8217;s why I think a rest point is a better choice here.</p>
<h2 style="text-align: left;">
Triggering a run and debugging</h2>
<div>
To have CodeShip do a first run you just have to commit a change to Github and there it goes. You can follow each step in the admin interface of your build and see read the log if something goes wrong. You can also change the deployment settings and rerun a previously failed build.</div>
<h2 style="text-align: left;">
Remarks</h2>
<div>
I&#8217;m really happy with this setup, but I think there should be a way to avoid setting the artefact name and version into the setting path. Probably some maven command would do the trick? As next steps I&#8217;d like to setup a UI test, maybe with PhantomJS or so&#8230; Let me know if you have improvements!</p>
<p><b>Update 2014/05/10</b><br />
Last week I had issues with app engine authentication and after that was solved it seemed that codeship used an old version of the app engine sdk to deploy which caused issues. So I started looking for an alternative to the above description and found it by adding the following script in the deployment section (no other build step required anymore, you can remove the app engine step):</p>
<pre>cp src/main/webapp/WEB-INF/appengine-web-testenv.xml  src/main/webapp/WEB-INF/appengine-web.xml
cat src/main/webapp/WEB-INF/appengine-web.xml
echo '{"credentials":{"rof":{"access_token":"XXXX","expiration_time_millis":1399667604244,"refresh_token":"XXX"}}}' &gt; ~/.appcfg_oauth2_tokens_java
mvn appengine:update
wget --retry-connrefused --no-check-certificate -T 60 http://your-test-url
</pre>
<p>
<b>Explanation</b><br />
The first line is the same as before: it copies my alternative deployment descriptor in the place of the default descriptor. The second line is used for debugging and to be sure that the task will really deploy to my test instance. The third line is the most interesting. For my own security I replaced the real tokens with XXX. How do you get this JSON object? Very simple: deploy your application locally and you can copy this JSON object from .appcfg_oauth2_tokens_java. <b>Replace your current system user with rof! </b>The next line simply deploys the application to my test environment and the last line checks if the application was deployed successfully</p>
</div>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.squix.org/2014/03/continuous-deployment-from-github-to.html/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">79</post-id>	</item>
		<item>
		<title>Live reload with appengine-maven-plugin</title>
		<link>https://blog.squix.org/2013/10/live-reload-with-appengine-maven-plugin.html</link>
					<comments>https://blog.squix.org/2013/10/live-reload-with-appengine-maven-plugin.html#respond</comments>
		
		<dc:creator><![CDATA[Daniel Eichhorn]]></dc:creator>
		<pubDate>Sat, 19 Oct 2013 17:45:00 +0000</pubDate>
				<category><![CDATA[Common]]></category>
		<category><![CDATA[appengine-maven-plugin]]></category>
		<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[hot refresh]]></category>
		<category><![CDATA[hot update]]></category>
		<category><![CDATA[livereload]]></category>
		<guid isPermaLink="false">http://blog.squix.org/2013/10/19/live-reload-with-appengine-maven-plugin/</guid>

					<description><![CDATA[Google&#8217;s appengine-maven-plugin is cool. Especially for deploying your app to the cloud. But for developing it can be cumbersome, since the hot deploy mechanism is not very stable and you often have to restart the devserver. Since I wanted to get more into the whole ... <p><a class="read-more btn btn-secondary" href="https://blog.squix.org/2013/10/live-reload-with-appengine-maven-plugin.html">Read More</a></p>]]></description>
										<content:encoded><![CDATA[<p>Google&#8217;s appengine-maven-plugin is cool. Especially for deploying your app to the cloud. But for developing it can be cumbersome, since the hot deploy mechanism is not very stable and you often have to restart the devserver. Since I wanted to get more into the whole JavaScript build chain I had a look at grunt but I just couldn&#8217;t get the configuration running with connect and livereload. And then I found this link: <a href="http://nitoyon.github.io/livereloadx/">http://nitoyon.github.io/livereloadx/</a><br />
First of all you have to install node.js as described <a href="http://gruntjs.com/getting-started">here</a>. To install the livereloadx run:</p>
<pre class="prettyprint">
npm install -g livereloadx
</pre>
<p>With this command</p>
<pre class="prettyprint">
livereloadx -l -p 35729 src/main/webapp/ --proxy http://localhost:8080/ 
</pre>
<p>you can start a proxy server that listens on port 35729 and checks first src/main/webapp/ for requests. If it doesn&#8217;t find the resource there it will check http://localhost:8080 for the resource. In my case the devserver run on http://localhost:8080 and the rest interface will respond to any calls that cannot be answered from src/main/webapp.<br />
<BR/><br />
If you install the chrome plugin from<br />
<a href="https://chrome.google.com/webstore/detail/livereload/jnihajbhpnppcggbcgedagnkighmdlei">the chrome store</a> your browser will refresh automatically<br />
<BR/><br />
<BR/><br />
<b>UPDATE: </b> It seems that the current version doesn&#8217;t handle HTTP POST requests if the &#8220;prefer-local&#8221; flag is set (the &#8220;-l&#8221; in the example above). I filed a bug and I hope that this will be fixed soon: https://github.com/nitoyon/livereloadx/issues/3<br />
<BR/><br />
<BR/><br />
<b>UPDATE2: </b> It has been fixed. Thank you very much nitoyon!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.squix.org/2013/10/live-reload-with-appengine-maven-plugin.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">85</post-id>	</item>
		<item>
		<title>Exporting your App Engine Data with a Sitemap of Sitemaps</title>
		<link>https://blog.squix.org/2011/03/exporting-your-app-engine-data-with.html</link>
					<comments>https://blog.squix.org/2011/03/exporting-your-app-engine-data-with.html#respond</comments>
		
		<dc:creator><![CDATA[Daniel Eichhorn]]></dc:creator>
		<pubDate>Sat, 19 Mar 2011 07:09:00 +0000</pubDate>
				<category><![CDATA[Common]]></category>
		<category><![CDATA[Bing]]></category>
		<category><![CDATA[deleting datastore indexes]]></category>
		<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[sitemap]]></category>
		<category><![CDATA[sitemapindex]]></category>
		<guid isPermaLink="false">http://blog.squix.org/2011/03/19/exporting-your-app-engine-data-wi/</guid>

					<description><![CDATA[Currently there are about 200&#8217;000 archived items available in the Feederator database. In the hope to attract more traffic I wanted to make this data available to search engines. But how to make this data available to search engines without putting too much burden on ... <p><a class="read-more btn btn-secondary" href="https://blog.squix.org/2011/03/exporting-your-app-engine-data-with.html">Read More</a></p>]]></description>
										<content:encoded><![CDATA[<div dir="ltr" style="text-align: left;" trbidi="on">Currently there are about 200&#8217;000 archived items available in the Feederator database. In the hope to attract more traffic I wanted to make this data available to search engines. But how to make this data available to search engines without putting too much burden on my App Engine Quota. Certainly one big Sitemap wouldn&#8217;t work, because the call from a search engine would reach the 30 seconds limit of a Servlet call long before all the links to the different items could be created.<br />
Ok, that means breaking it down into smaller chunks. But how to distribute the data more or less equally? That was an easy one: since Feederator adds more or less the same quantity of new feed items to the archive I would have to separate the chunks by day. Every item already has a publishedDate, which marks the date of entry to the datastore. But that would be another problem: how to add all the different sitemaps to search engines like Google or Bing?<br />
Turns out there&#8217;s a solution for exactly that: a sitemap of sitemaps. The super sitemap file has to look as described <a href="http://www.google.com/support/webmasters/bin/answer.py?answer=71453">here</a>. So this file would contain one entry per day and could be generated relatively easy by iterating over all days in the last three months (the duration items are stored in the archive). I wouldn&#8217;t even have to know how many items are available per day in this stage. Just assume there are some, that&#8217;s enough.<br />
This looks like this:</p>
<blockquote><p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;<br />
&lt;sitemapindex xmlns=&#8221;http://www.sitemaps.org/schemas/sitemap/0.9&#8243;&gt;<br />
&lt;sitemap&gt;<br />
&lt;loc&gt;http://www.feederator.org/sitemap/2010-12-19&lt;/loc&gt;<br />
&lt;/sitemap&gt;<br />
&lt;sitemap&gt;<br />
&lt;loc&gt;http://www.feederator.org/sitemap/2010-12-20&lt;/loc&gt;<br />
&lt;/sitemap&gt;<br />
&lt;sitemap&gt;<br />
&lt;loc&gt;http://www.feederator.org/sitemap/2010-12-21&lt;/loc&gt;<br />
&lt;/sitemap&gt;<br />
&#8230;<br />
&lt;/sitemapindex&gt;</p></blockquote>
<p>In my case, the same servlet that creates the sitemapindex file also creates different per-date index files. To avoid huge quantities of XML overhead you can export the per-date sitemaps also in line by line format. The sitemap file for 2010-12-19 looks like this:</p>
<blockquote>
<blockquote><p>http://www.feederator.org/item/agpmZWVkZXJhdG9ychYLEg1GZWVkSXRlbU1vZGVsGLfUvwIM</p></blockquote>
<blockquote><p>http://www.feederator.org/item/agpmZWVkZXJhdG9ychYLEg1GZWVkSXRlbU1vZGVsGLjUvwIM</p></blockquote>
<blockquote><p>http://www.feederator.org/item/agpmZWVkZXJhdG9ychYLEg1GZWVkSXRlbU1vZGVsGLvUvwIM</p></blockquote>
<blockquote><p>http://www.feederator.org/item/agpmZWVkZXJhdG9ychYLEg1GZWVkSXRlbU1vZGVsGMHUvwIM</p></blockquote>
<blockquote><p>http://www.feederator.org/item/agpmZWVkZXJhdG9ychYLEg1GZWVkSXRlbU1vZGVsGNbUvwIM</p></blockquote>
<blockquote><p>http://www.feederator.org/item/agpmZWVkZXJhdG9ychYLEg1GZWVkSXRlbU1vZGVsGOTUvwIM</p></blockquote>
<div>
</div>
</blockquote>
<p>With one link per line. To write a servlet like that is pretty easy.&nbsp;</p></div>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.squix.org/2011/03/exporting-your-app-engine-data-with.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">93</post-id>	</item>
		<item>
		<title>Speeding up data store queries with self-merge joins</title>
		<link>https://blog.squix.org/2011/02/speeding-up-data-store-queries-with.html</link>
					<comments>https://blog.squix.org/2011/02/speeding-up-data-store-queries-with.html#respond</comments>
		
		<dc:creator><![CDATA[Daniel Eichhorn]]></dc:creator>
		<pubDate>Sun, 27 Feb 2011 07:33:00 +0000</pubDate>
				<category><![CDATA[Common]]></category>
		<category><![CDATA[full text search]]></category>
		<category><![CDATA[GAE]]></category>
		<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[self merge joins]]></category>
		<guid isPermaLink="false">http://blog.squix.org/2011/02/27/speeding-up-data-store-queries-wi/</guid>

					<description><![CDATA[For a while now Feederator allows some kind of full text queries. When items are read for the first time into the datastore an index will be created. This index is currently a break down of the single words in the title, but can be ... <p><a class="read-more btn btn-secondary" href="https://blog.squix.org/2011/02/speeding-up-data-store-queries-with.html">Read More</a></p>]]></description>
										<content:encoded><![CDATA[<div dir="ltr" style="text-align: left;" trbidi="on">For a while now Feederator allows some kind of full text queries. When items are read for the first time into the datastore an index will be created. This index is currently a break down of the single words in the title, but can be extended to the description and other attributes of an item. My first attempt of implementing the full text search on the AppEngine resulted in a very costly algorithm.<br />
The fulltext search index is stored as a set of strings. The datastore allows you to query for items on a set as if it would be a singular attribute, like a single String for example. So you can create a query for a set of strings <i>index={&#8220;green&#8221;, &#8220;yellow&#8221;, &#8220;red&#8221;} </i>in this way <i>WHERE index == &#8220;red&#8221; </i>which would be a hit in this case. I tried to do a query like this <i>WHERE index == &#8220;red&#8221; AND index == &#8220;green&#8221; order by date </i>which returned with errors telling me that I need to create a datastore index for that query. I thought that the error came from the fact that I had to filters on the attribute index. But I was wrong. The problem was that I wanted to sort the results at the same time. So, by forgetting about the in-database-sorting the query works and it works darn fast. And even better: you don&#8217;t even need an index for AND connected filters like that! Which means you can save storage space (in my case almost 1GB!).</p>
<p>Here are some rules of thumb that I learned from this lesson. Due to the way the datastore is organized (don&#8217;t forget its BigTable nature!) you have to pay attention when designing your data model.</p>
<ol style="text-align: left;">
<li>You can query easily on sets</li>
<li>Try to avoid non-equal filters or filters that use OR. The best filters are ones that try to find an intersection between different domains on ONE entity</li>
<li>Sort your results in-memory to avoid the need for indexes</li>
<li>Sets are expensive to serialize/ deserialize. This costs occure when you write or read a set from datastore. To avoid serialization costs put your full text index on a separate child object. You query on the child object only for the key. With the key you get the parent object and then you can do in-memory sorting/ ranking</li>
</ol>
<div>These links helped me a lot to understand how to optimize my full text search:</div>
<div>
<ul style="text-align: left;">
<li><a href="http://googleappengine.blogspot.com/2010/04/making-your-app-searchable-using-self.html">Making your app searchable using self merge-joins</a></li>
<li><a href="http://code.google.com/events/io/2009/sessions/BuildingScalableComplexApps.html">Brett Slatkin&#8217;s presentation at Google I/O</a></li>
</ul>
</div>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.squix.org/2011/02/speeding-up-data-store-queries-with.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">95</post-id>	</item>
		<item>
		<title>Sending XMPP messages from Google App Engine with html</title>
		<link>https://blog.squix.org/2011/02/sending-xmpp-messages-from-google-app.html</link>
					<comments>https://blog.squix.org/2011/02/sending-xmpp-messages-from-google-app.html#comments</comments>
		
		<dc:creator><![CDATA[Daniel Eichhorn]]></dc:creator>
		<pubDate>Fri, 18 Feb 2011 17:13:00 +0000</pubDate>
				<category><![CDATA[Common]]></category>
		<category><![CDATA[GAE]]></category>
		<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[xhtml-im]]></category>
		<category><![CDATA[xmpp]]></category>
		<guid isPermaLink="false">http://blog.squix.org/2011/02/18/sending-xmpp-messages-from-google-app/</guid>

					<description><![CDATA[Since this took me a while to figure out I&#8217;d like to share with you. I wanted to extend Feederator to send incoming news items to the users XMPP client. What worked pretty fast was sending plain text messages: XMPPService xmpp = XMPPServiceFactory.getXMPPService(); JID jid ... <p><a class="read-more btn btn-secondary" href="https://blog.squix.org/2011/02/sending-xmpp-messages-from-google-app.html">Read More</a></p>]]></description>
										<content:encoded><![CDATA[<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">Since this took me a while to figure out I&#8217;d like to share with you. I wanted to extend Feederator to send incoming news items to the users XMPP client. What worked pretty fast was sending plain text messages:</p>
<p></p>
<div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">XMPPService xmpp = XMPPServiceFactory.getXMPPService();</div>
<div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">JID jid = new JID(xmppAddress);</div>
<div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">
</div>
<div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">Message msg = new MessageBuilder()</div>
<div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">&nbsp;&nbsp; &nbsp;.withRecipientJids(jid)</div>
<div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">&nbsp;&nbsp; &nbsp;.withMessageType(MessageType.CHAT)</div>
<div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">&nbsp;&nbsp; &nbsp;.withBody(&#8220;New post arrived&#8221;)</div>
<div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">&nbsp;&nbsp; &nbsp;.build();</div>
<div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">
</div>
<div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"></div>
<div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">if (xmpp.getPresence(jid).isAvailable()) {</div>
<div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">&nbsp;&nbsp; &nbsp;SendResponse status = xmpp.sendMessage(msg);</div>
<div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">&nbsp;&nbsp; &nbsp;messageSent = (status.getStatusMap().get(jid) == SendResponse.Status.SUCCESS);</div>
<div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">&nbsp;&nbsp; &nbsp;if (messageSent) {</div>
<div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Log.info(&#8220;message sent&#8221;);</div>
<div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">&nbsp;&nbsp; &nbsp;}</div>
<div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">}</div>
<p></p>
<div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">
</div>
<div dir="ltr" style="text-align: left;" trbidi="on">But to send parts of the message bold and maybe even displaying pictures was trickier. But I finally figured it out. Change the part with the message:</div>
<div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">
</div>
<div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"></div>
<div style="font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">String message = &#8220;&lt;body&gt;Plain text message&lt;/body&gt;&#8221;</div>
<div style="font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"></div>
<div style="color: #5000ff; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">&nbsp;&nbsp; + &#8220;&lt;html xmlns=&#8217;http://jabber.org/protocol/xhtml-im&#8217;&gt;&#8221;</div>
<div style="color: #5000ff; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">&nbsp;&nbsp; + &#8220;&lt;body xmlns=&#8217;http://www.w3.org/1999/xhtml&#8217;&gt;&#8221;</div>
<div style="color: #5000ff; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">&nbsp;&nbsp; + &#8220;&lt;B&gt;bold text&lt;/B&gt;&nbsp;and normal text&#8221;</div>
<div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">&nbsp;&nbsp; + &#8220;&lt;/body&gt;&#8221;</div>
<div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">&nbsp;&nbsp; + &#8220;&lt;/html&gt;&#8221;;</div>
<div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;">
</div>
<div style="font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">Message msg =&nbsp;new&nbsp;MessageBuilder()<br />
&nbsp;&nbsp; .withRecipientJids(jid)</div>
<div style="font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">&nbsp;&nbsp; .withMessageType(MessageType.CHAT)</div>
<div style="font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">&nbsp;&nbsp; .withBody(message)</div>
<div style="font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">&nbsp;&nbsp; .asXml(true);</div>
<div style="font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">&nbsp;&nbsp; .build();</div>
</div>
<div dir="ltr" style="text-align: left;" trbidi="on">By adding the .asXml(true) parameter you tell the XMPP service that you take care yourself of the content of the message. Pay attention to the fact that you always should send a normal  elment for the plain text. Not all XMPP/ Jabber clients unterstand the xhtml-im extension. The specification (http://xmpp.org/extensions/xep-0071.html) says that the plain text should always tell the same as the element with markup and that clients are free to ignore the xhtml-im tag. Also note that clients are free to display the text defined by the alt attribute of a &lt;img&gt; tag and not the picture.</div>
<p>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.squix.org/2011/02/sending-xmpp-messages-from-google-app.html/feed</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">96</post-id>	</item>
		<item>
		<title>How to delete index on App Engine for Java</title>
		<link>https://blog.squix.org/2010/12/how-to-delete-index-on-app-engine-for.html</link>
					<comments>https://blog.squix.org/2010/12/how-to-delete-index-on-app-engine-for.html#respond</comments>
		
		<dc:creator><![CDATA[Daniel Eichhorn]]></dc:creator>
		<pubDate>Wed, 22 Dec 2010 19:24:00 +0000</pubDate>
				<category><![CDATA[Common]]></category>
		<category><![CDATA[deleting datastore indexes]]></category>
		<category><![CDATA[GAE]]></category>
		<category><![CDATA[Google App Engine]]></category>
		<guid isPermaLink="false">http://blog.squix.org/2010/12/22/how-to-delete-index-on-app-engine-for/</guid>

					<description><![CDATA[At the time of this writing there is no function to delete (unused) your datastore indexes directly with the Java tool set. But there is a way around: the python SDK has a function called vacuum_indexes. This is how your can do it, step by ... <p><a class="read-more btn btn-secondary" href="https://blog.squix.org/2010/12/how-to-delete-index-on-app-engine-for.html">Read More</a></p>]]></description>
										<content:encoded><![CDATA[<p>At the time of this writing there is no function to delete (unused) your datastore indexes directly with the Java tool set. But there is a way around: the python SDK has a function called vacuum_indexes. This is how your can do it, step by step:</p>
<ol>
<li>Install the Google App Engine for Python SDK and follow the steps described for your operating system here:&nbsp;<a href="http://code.google.com/appengine/docs/python/gettingstarted/devenvironment.html">http://code.google.com/appengine/docs/python/gettingstarted/devenvironment.html</a></li>
<li>After you installed python, and the GAE for Python SDK, setup a project in a tmp folder, that has the same name as your Java project with the tools from the SDK. Pay attention on capital letters. Your project must have EXACT the same name as the Java version</li>
<li>[Optional] Deploy that to the app engine, but pay attention that you choose a version differently from all versions used by your java environment. You will be asked for your email and password</li>
<li>On the command line execute&nbsp;<i>appcfg.py vacuum_indexes pathToYourProject/</i></li>
<li>Then you have to decide which index you want to delete. Be careful. Deleting the wrong index can render your app temporarily unusable&#8230;</li>
</ol>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.squix.org/2010/12/how-to-delete-index-on-app-engine-for.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">99</post-id>	</item>
	</channel>
</rss>
