<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns:mv="http://macVmlSchemaUri" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Title" content="">
<meta name="Keywords" content="">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:Arial;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:"Courier New";
        panose-1:2 7 3 9 2 2 5 2 4 4;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Georgia;
        panose-1:2 4 5 2 5 4 5 2 3 3;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman";}
code
        {mso-style-priority:99;
        font-family:"Courier New";}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Courier;}
span.m-5438500972606914172hoenzb
        {mso-style-name:m_-5438500972606914172hoenzb;}
span.hoenzb
        {mso-style-name:hoenzb;}
span.EmailStyle24
        {mso-style-type:personal-reply;
        font-family:Georgia;
        color:black;}
span.msoIns
        {mso-style-type:export-only;
        mso-style-name:"";
        text-decoration:underline;
        color:teal;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:595.0pt 842.0pt;
        margin:3.0cm 2.0cm 3.0cm 2.0cm;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body bgcolor="white" lang="EN-GB" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Georgia;color:black;mso-fareast-language:EN-US">Such great news.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Georgia;color:black;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Georgia;color:black;mso-fareast-language:EN-US">It would be fantastic if failing APN connection or similar would fire off a webhook. So its possible for integrated systems can be notified.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Georgia;color:black;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Georgia;color:black;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Georgia;color:black;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Georgia;color:black;mso-fareast-language:EN-US">BEST REGARDS<o:p></o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:Georgia;color:black;mso-fareast-language:EN-US">__________________</span></b><span style="font-size:11.0pt;font-family:Georgia;color:black;mso-fareast-language:EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:Georgia;color:black;mso-fareast-language:EN-US">MADS MØLLER</span></b><span style="font-size:11.0pt;font-family:Georgia;color:black;mso-fareast-language:EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Georgia;color:black;mso-fareast-language:EN-US">CTO, PARTNER<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Georgia;color:black;mso-fareast-language:EN-US"> <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Georgia;color:black;mso-fareast-language:EN-US">Napp A/S <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Georgia;color:black;mso-fareast-language:EN-US">T: +45 42 42 80 60<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Georgia;color:black;mso-fareast-language:EN-US">M: +45 20 28 20 26<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Georgia;color:black;mso-fareast-language:EN-US">E:
<a href="mailto:mm@napp.dk"><span style="color:#0563C1">mm@napp.dk</span></a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Georgia;color:black;mso-fareast-language:EN-US">W: <a href="https://napp.dk/"><span style="color:#0563C1">https://napp.dk</span></a><o:p></o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:Georgia;color:black;mso-fareast-language:EN-US">__________________</span></b><span style="font-size:11.0pt;font-family:Georgia;color:black;mso-fareast-language:EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri;color:black;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri;color:black;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri;color:black;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
</div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Georgia;color:black;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Georgia;color:black;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span style="font-family:Calibri;color:black">From: </span>
</b><span style="font-family:Calibri;color:black"><aerogear-dev-bounces@lists.jboss.org> on behalf of Matthias Wessendorf <matzew@apache.org><br>
<b>Reply-To: </b>AeroGear Developer Mailing List <aerogear-dev@lists.jboss.org><br>
<b>Date: </b>Tuesday, 16 May 2017 at 16.50<br>
<b>To: </b>AeroGear Developer Mailing List <aerogear-dev@lists.jboss.org><br>
<b>Subject: </b>Re: [aerogear-dev] Notification Delivery metrics and processing with Kafka<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Oh, this is far from being done :-) <o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I just did a little POC, and since we also have two GSoC students, we have some time to define the behavior, including UI, here on the commiunity :) <o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">On Tue, May 16, 2017 at 3:37 PM, Jose Miguel Gallas Olmedo <<a href="mailto:jgallaso@redhat.com" target="_blank">jgallaso@redhat.com</a>> wrote:<o:p></o:p></p>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<p class="MsoNormal"><span style="font-family:Arial">Great news!!<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:Arial"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:Arial">Will this information be displayed in the UI? As a tooltip or when extending the row in "activity log"s table.<o:p></o:p></span></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<div>
<p class="MsoNormal">On 16 May 2017 at 13:58, Matthias Wessendorf <<a href="mailto:matzew@apache.org" target="_blank">matzew@apache.org</a>> wrote:<o:p></o:p></p>
</div>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<div>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;box-sizing:border-box">
<span style="font-family:Helvetica;color:#24292E">Hi,<o:p></o:p></span></p>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;box-sizing:border-box">
<span style="font-family:Helvetica;color:#24292E">with the new APNs HTTP/2 APIs, and our usage of Pushy, we are able to get a way more finegrain knowledge if Apple did accept (for further processing) or reject a messages, on a per device_token level!<o:p></o:p></span></p>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;box-sizing:border-box">
<span style="font-family:Helvetica;color:#24292E">For instance, if we have a push with 5000 targeted devices, we are now able to say that 5 tokens, for instances failed, but APNs was happy to accept push request for the other 4995 devices (Note: this does NOT
mean they actually arrive at the device, just that apple accepted them for further processing).<o:p></o:p></span></p>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;box-sizing:border-box">
<span style="font-family:Helvetica;color:#24292E">Now, this, for APNs, gives us much more flexiblity handling our metrics!<o:p></o:p></span></p>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;box-sizing:border-box">
<span style="font-family:Helvetica;color:#24292E">In our code, here, we do read <em><span style="font-family:Helvetica">each</span></em> token request from APNs in here: <a href="https://github.com/aerogear/aerogear-unifiedpush-server/blob/20831d96196663349c96da6b5fe11aef65cacf59/push/sender/src/main/java/org/jboss/aerogear/unifiedpush/message/sender/apns/PushyApnsSender.java#L130-L147" target="_blank"><span style="color:#0366D6">https://github.com/aerogear/aerogear-unifiedpush-server/blob/20831d96196663349c96da6b5fe11aef65cacf59/push/sender/src/main/java/org/jboss/aerogear/unifiedpush/message/sender/apns/PushyApnsSender.java#L130-L147</span></a><o:p></o:p></span></p>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;box-sizing:border-box">
<span style="font-family:Helvetica;color:#24292E">So here, we could simply send the result, on a per token base, to a (Kafka) topic, like:<o:p></o:p></span></p>
<pre style="background:#F6F8FA;box-sizing:border-box;font-stretch:normal;word-wrap:normal;border-radius:3px;overflow:auto"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm">...<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm">if (pushNotificationResponse.isAccepted()) {<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm"> logger.trace("Push notification for '{}' (payload={})", deviceToken, pushNotificationResponse.getPushNotification().getPayload());<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm"><o:p> </o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm"> producer.send(jobID, "Success"); // sends to "push_messages" topic<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm">} else {<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm"> final String rejectReason = pushNotificationResponse.getRejectionReason();<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm"> logger.trace("Push Message has been rejected with reason: {}", rejectReason);<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm"><o:p> </o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm"> producer.send(jobID, "Rejected"); // sends "push_messages" topic<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm">...<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm">}<o:p></o:p></span></code></pre>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;box-sizing:border-box">
<span style="font-family:Helvetica;color:#24292E">Now, this sends all to one topic, and we could be using, somewhere, Kafka Stream API, to perform some processing of the source, and calculate some stats on that, like:<o:p></o:p></span></p>
<pre style="background:#F6F8FA;box-sizing:border-box;font-stretch:normal;word-wrap:normal;border-radius:3px;overflow:auto"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm">KStreamBuilder builder = new KStreamBuilder();<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm"><o:p> </o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm">// read from the topic that contains all messages, for all jobs<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm">final KStream<String, String> source = builder.stream("push_messages");<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm"><o:p> </o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm"><o:p> </o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm">// some simple processing, and grouping by key, applying a predicate and send to three "analytic" topic:<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm"><o:p> </o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm">final KTable<String, Long> successCountsPerJob = source.filter((key, value) -> value.equals("Success"))<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm"> .groupByKey()<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm"> .count("successMessagesPerJob");<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm">successCountsPerJob.to(Serdes.String(), Serdes.Long(), "successMessagesPerJob");<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm"><o:p> </o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm">final KTable<String, Long> failCountsPerJob = source.filter((key, value) -> value.equals("Rejected"))<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm"> .groupByKey()<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm"> .count("failedMessagesPerJob");<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm">failCountsPerJob.to(Serdes.String(), Serdes.Long(), "failedMessagesPerJob");<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm"><o:p> </o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm">source.groupByKey()<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm"> count("totalMessagesPerJob")<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm"> .to(Serdes.String(), Serdes.Long(), "totalMessagesPerJob");<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm"><o:p> </o:p></span></code></pre>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;box-sizing:border-box">
<span style="font-family:Helvetica;color:#24292E">The above performs some functional processing of the single source of truth, based on different assumptions.<o:p></o:p></span></p>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;box-sizing:border-box">
<span style="font-family:Helvetica;color:#24292E">If one would have a simple consumer on each of these three "analytic" topics, a simple logging output would be:<o:p></o:p></span></p>
<pre style="background:#F6F8FA;box-sizing:border-box;font-stretch:normal;word-wrap:normal;border-radius:3px;overflow:auto"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm">2017-05-16 13:42:48,763 INFO successMessagesPerJob: 2 - jobID: XXX<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm">2017-05-16 13:42:48,764 INFO totalMessagesPerJob: 3 - jobID: XXX<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm">2017-05-16 13:42:48,764 INFO failedMessagesPerJob: 1 - jobID: XXX<o:p></o:p></span></code></pre>
<pre style="background:#F6F8FA"><code><span style="font-family:Courier;color:#24292E;border:none windowtext 1.0pt;padding:0cm"><o:p> </o:p></span></code></pre>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;box-sizing:border-box">
<span style="font-family:Helvetica;color:#24292E">since for the GSoC we do have two students, working on Kafka and HBase improvements for UPS, I wanted to share this quick prototype, as food for thoughts.<o:p></o:p></span></p>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;box-sizing:border-box">
<span style="font-family:Helvetica;color:#24292E">Of course, each of these 'filtered' consumers could than eventually store the result somewhere else.<o:p></o:p></span></p>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;box-sizing:border-box">
<span style="font-family:Helvetica;color:#24292E">With this approach, Kafka would be come the hub (or data pipeline) for our metrics, with stream processing and different consumers to deal with the results of interest<o:p></o:p></span></p>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;box-sizing:border-box">
<span style="font-family:Helvetica;color:#24292E">Any comments or other thoughts?<o:p></o:p></span></p>
<p style="margin:0cm;margin-bottom:.0001pt;box-sizing:border-box"><span style="font-family:Helvetica;color:#24292E">-Matthias<o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="color:#888888"><o:p> </o:p></span></p>
</div>
<p class="MsoNormal"><span class="m-5438500972606914172hoenzb"><span style="color:#888888">--
</span><o:p></o:p></span></p>
<div>
<div>
<div>
<p class="MsoNormal"><span style="color:#888888">Matthias Wessendorf <br>
<br>
blog: <a href="http://matthiaswessendorf.wordpress.com/" target="_blank">http://matthiaswessendorf.wordpress.com/</a><br>
twitter: <a href="http://twitter.com/mwessendorf" target="_blank">http://twitter.com/mwessendorf</a></span><o:p></o:p></p>
</div>
</div>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
<p class="MsoNormal">_______________________________________________<br>
aerogear-dev mailing list<br>
<a href="mailto:aerogear-dev@lists.jboss.org" target="_blank">aerogear-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/aerogear-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/aerogear-dev</a><o:p></o:p></p>
</blockquote>
</div>
<p class="MsoNormal"><span style="color:#888888"><br>
<br clear="all">
</span><span class="hoenzb"><span style="color:#888888"><o:p></o:p></span></span></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<p class="MsoNormal"><span class="hoenzb"><span style="color:#888888">-- </span><o:p></o:p></span></p>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<p style="margin:0cm;margin-bottom:.0001pt"><b><span style="font-size:10.5pt;font-family:Helvetica;color:black;text-transform:uppercase">JOSE MIGUEL GALLAS OLMEDO<o:p></o:p></span></b></p>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:3.0pt;margin-left:0cm">
<span style="font-size:7.5pt;font-family:Helvetica;color:black;text-transform:uppercase">ASSOCIATE QE, mobile<o:p></o:p></span></p>
<p style="margin:0cm;margin-bottom:.0001pt"><span style="font-size:7.5pt;font-family:Helvetica;color:#999999"><a href="https://www.redhat.com/" target="_blank"><span style="color:#0088CE">Red Hat <br>
<br>
</span></a><o:p></o:p></span></p>
<p style="margin:0cm;margin-bottom:.0001pt"><span style="font-size:7.5pt;font-family:Helvetica;color:#999999">M: <a href="http://redhatemailsignature-marketing.itos.redhat.com/" target="_blank"><span style="font-size:8.5pt;color:#0088CE">+34618488633</span></a>
<o:p></o:p></span></p>
<table class="MsoNormalTable" border="0" cellpadding="0">
<tbody>
<tr>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal"><span style="font-size:13.5pt;font-family:Helvetica;color:black"><a href="https://red.ht/sig" target="_blank"><span style="text-decoration:none"><img border="0" width="90" height="29" id="_x0000_i1025" src="https://www.redhat.com/profiles/rh/themes/redhatdotcom/img/logo-red-hat-black.png"></span></a><o:p></o:p></span></p>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p class="MsoNormal"><br>
_______________________________________________<br>
aerogear-dev mailing list<br>
<a href="mailto:aerogear-dev@lists.jboss.org">aerogear-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/aerogear-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/aerogear-dev</a><o:p></o:p></p>
</blockquote>
</div>
<p class="MsoNormal"><br>
<br clear="all">
<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<p class="MsoNormal">-- <o:p></o:p></p>
<div>
<div>
<div>
<p class="MsoNormal">Matthias Wessendorf <br>
<br>
blog: <a href="http://matthiaswessendorf.wordpress.com/" target="_blank">http://matthiaswessendorf.wordpress.com/</a><br>
twitter: <a href="http://twitter.com/mwessendorf" target="_blank">http://twitter.com/mwessendorf</a><o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>