tag:blogger.com,1999:blog-16999504463046667152024-03-13T16:01:22.259-04:00Gunnar Hillert's BlogGunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.comBlogger166125tag:blogger.com,1999:blog-1699950446304666715.post-84737053165766366752020-03-25T16:31:00.000-04:002020-03-25T16:32:02.632-04:00Ardusimple simpleRTK2B with Long Range Radio and BluetoothWhen you need high precision <i>Global Navigation Satellite System</i> (GNSS) support, one of the best economical choices is the <a href="https://www.ardusimple.com/simplertk2b/">Ardusimple simpleRTK2B</a>. I am using the Long Range Starter Kit that consists of a <i>base station</i> and a <i>rover</i>. By using 2 simpleRTK2B boards that communicate with each other, I am able to take advantage of <i>Real-Time Kinematic</i> (RTK) positioning which gives me centimeter accuracy. The simpleRTK2B has a convenient connector for <a href="https://www.digi.com/xbee">Xbee radio modules</a> which in my case is used for the long range radio. However, I would also love to use the <a href="https://www.ardusimple.com/product/bluetooth-module/">XBee Bluetooth Module</a> on the rover. That way I don't have to connect my Android-based smartphone via USB cable, but can also conveniently connect to the simpleRTK2B via Bluetooth. Unfortunately, for this use-case I have to wire up the XBee Bluetooth Module manually as there is only a single Xbee radio slot. The documentation on this was a bit sparse but the following pointers were useful:<br />
<br />
<ul>
<li><a href="https://www.ardusimple.com/simplertk2b-connection-via-bluetooth/">simpleRTK2B connection to smartphone via Bluetooth</a></li>
<li><a href="https://www.ardusimple.com/question/with-the-simplertk2b-can-you-simultaneously-have-a-base-rover-configuration-and-connect-to-you-android-device-via-bluetooth-at-the-same-time/">Support question</a>: With the simpleRTK2B – Can you simultaneously have a base + rover configuration AND connect to you Android device via Bluetooth at the same time?</li>
</ul>
<div>
I finally got everything working with the following wiring. The one thing that feels a bit odd is the need to also connect the <b>3.3V OUT</b> on the simpleRTK2B to its <b>IOREF</b> pin.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9hbh-3qPcJ_L2Cq-jIWo_ybfIFe7l25h3912SZvC3kBI12ocyVVBIjRUpfivXTjhqTvCcFRcnxi-bDUySN7Qd_020NR-88cjdfGXEGfzSjhVRHAe1QkGlMGTtd7w13_XTCgL_xnLDy-FbUu0/s1600/ardusimple-with-bluetooth.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="730" data-original-width="962" height="301" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9hbh-3qPcJ_L2Cq-jIWo_ybfIFe7l25h3912SZvC3kBI12ocyVVBIjRUpfivXTjhqTvCcFRcnxi-bDUySN7Qd_020NR-88cjdfGXEGfzSjhVRHAe1QkGlMGTtd7w13_XTCgL_xnLDy-FbUu0/s400/ardusimple-with-bluetooth.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com0tag:blogger.com,1999:blog-1699950446304666715.post-83072968124209120902017-12-25T02:26:00.000-05:002019-11-16T19:07:04.638-05:00Mapping Options with Angular 5Just did a quick search on Angular components for either <b>Google Maps</b> or <b>OpenStreetMap</b>. For Google Maps the choice du jour seems to be <a href="https://angular-maps.com/">Angular Google Maps</a> (<a href="https://github.com/SebastianM/angular-google-maps">Git repo</a>). A neat little blog post on how to get started is <a href="https://medium.com/@pablo_ezequiel/google-maps-and-angular2-aad18640b5ef">here</a>.<br />
<br />
When targeting OpenStreetMap, <a href="http://leafletjs.com/">Leaflet.js</a> is still the most popular library out there. While it is "just" a JavaScript library, you can use it <a href="https://stackoverflow.com/questions/42034923/leaflet-with-angular-cli">directly</a> in your Angular project or use dedicated components, of which the following 2 seem worthwhile to investigate further:<br />
<br />
<ul><li><a href="https://github.com/yagajs/leaflet-ng2">YAGA - leaflet-ng2</a></li>
<li><a href="https://github.com/Asymmetrik/ngx-leaflet">ngx-leaflet</a></li>
</ul>Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com0tag:blogger.com,1999:blog-1699950446304666715.post-21510242881070645942016-04-04T11:14:00.000-04:002016-04-04T11:14:21.214-04:00Spring Boot with JSPs using UndertowThis is a follow-up to my previous post <a href="http://hillert.blogspot.com/2016/03/spring-boot-with-jsp-in-executable-jar.html">Spring Boot with JSPs in Executable Jars</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjChjd7N3cYQ-5Llkva2txdKVyQ05E5bh1UflGTWCe4uOOVrwYHywuiIHfpnv7OUj_mzSSID68QNgRwAkf0UQORjXbz41BBEdNpsuXWfk76Z0RdoIobenx_L6A7bUPraIv4o1ovSgXd3urRjak/s1600/undertow_logo_200px.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjChjd7N3cYQ-5Llkva2txdKVyQ05E5bh1UflGTWCe4uOOVrwYHywuiIHfpnv7OUj_mzSSID68QNgRwAkf0UQORjXbz41BBEdNpsuXWfk76Z0RdoIobenx_L6A7bUPraIv4o1ovSgXd3urRjak/s1600/undertow_logo_200px.png" /></a></div>
<a href="http://undertow.io/" target="_blank">Undertow</a> is another alternative for using an embedded container with Spring Boot. You can find general information in the Spring Boot reference guide chapter <a href="https://docs.spring.io/spring-boot/docs/current/reference/html/howto-embedded-servlet-containers.html#howto-use-undertow-instead-of-tomcat" target="_blank">Use Undertow instead of Tomcat</a>. While I was working on updating the Spring Boot documentation regarding the JSP support for Tomcat, I noticed the following line in the reference guide for Spring Boot <code>1.3.3</code>:<br />
<br />
<blockquote>
"Undertow does not support JSPs."</blockquote>
<br />
Being a good citizen, I dug a little deeper and discovered the <a href="https://github.com/fourcube/undertow-jsp-sample" target="_blank">Undertow JSP sample</a> application by <a href="https://fourcube.github.io/" target="_blank">Chris Grieger</a>. It turns out that Undertow has indeed JSP support by using <a href="https://github.com/undertow-io/jastow" target="_blank">jastow</a>, which is a Jasper fork for Undertow. The key was to adapt the <a href="https://github.com/ghillert/spring-boot-jsp-demo/tree/master/jsp-demo-undertow" target="_blank">Undertow JSP sample application for Spring Boot</a>. Doing so was actually fairly straightforward. The actual Undertow configuration uses Spring Boot`s <code><a href="https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/context/embedded/EmbeddedServletContainerCustomizer.html" target="_blank">EmbeddedServletContainerCustomizer</a></code>:<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #008800; font-weight: bold;">final</span> UndertowDeploymentInfoCustomizer customizer <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> UndertowDeploymentInfoCustomizer<span style="color: #333333;">()</span> <span style="color: #333333;">{</span>
<span style="color: #555555; font-weight: bold;">@Override</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #333399; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">customize</span><span style="color: #333333;">(</span>DeploymentInfo deploymentInfo<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
deploymentInfo<span style="color: #333333;">.</span><span style="color: #0000cc;">setClassLoader</span><span style="color: #333333;">(</span>JspDemoApplication<span style="color: #333333;">.</span><span style="color: #0000cc;">class</span><span style="color: #333333;">.</span><span style="color: #0000cc;">getClassLoader</span><span style="color: #333333;">())</span>
<span style="color: #333333;">.</span><span style="color: #0000cc;">setContextPath</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"/"</span><span style="color: #333333;">)</span>
<span style="color: #333333;">.</span><span style="color: #0000cc;">setDeploymentName</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"servletContext.war"</span><span style="color: #333333;">)</span>
<span style="color: #333333;">.</span><span style="color: #0000cc;">setResourceManager</span><span style="color: #333333;">(</span><span style="color: #008800; font-weight: bold;">new</span> DefaultResourceLoader<span style="color: #333333;">(</span>JspDemoApplication<span style="color: #333333;">.</span><span style="color: #0000cc;">class</span><span style="color: #333333;">))</span>
<span style="color: #333333;">.</span><span style="color: #0000cc;">addServlet</span><span style="color: #333333;">(</span>JspServletBuilder<span style="color: #333333;">.</span><span style="color: #0000cc;">createServlet</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"Default Jsp Servlet"</span><span style="color: #333333;">,</span> <span style="background-color: #fff0f0;">"*.jsp"</span><span style="color: #333333;">));</span>
<span style="color: #008800; font-weight: bold;">final</span> HashMap<span style="color: #333333;"><</span>String<span style="color: #333333;">,</span> TagLibraryInfo<span style="color: #333333;">></span> tagLibraryInfo <span style="color: #333333;">=</span> TldLocator<span style="color: #333333;">.</span><span style="color: #0000cc;">createTldInfos</span><span style="color: #333333;">();</span>
JspServletBuilder<span style="color: #333333;">.</span><span style="color: #0000cc;">setupDeployment</span><span style="color: #333333;">(</span>deploymentInfo<span style="color: #333333;">,</span> <span style="color: #008800; font-weight: bold;">new</span> HashMap<span style="color: #333333;"><</span>String<span style="color: #333333;">,</span> JspPropertyGroup<span style="color: #333333;">>(),</span> tagLibraryInfo<span style="color: #333333;">,</span> <span style="color: #008800; font-weight: bold;">new</span> HackInstanceManager<span style="color: #333333;">());</span>
<span style="color: #333333;">}</span>
<span style="color: #333333;">};</span>
</pre>
</div>
<br />
The full source is available in the <code><a href="https://github.com/ghillert/spring-boot-jsp-demo/blob/master/jsp-demo-undertow/src/main/java/com/hillert/JspDemoApplication.java" target="_blank">JspDemoApplication</a></code> class. The main issue is more or less the retrieval and configuration of the used Taglibraries. The Undertow JSP sample provides the <a href="https://github.com/fourcube/undertow-jsp-sample/blob/master/src/main/java/com/grieger/sample/undertow/TldLocator.java" target="_blank">TldLocator</a> class, which does the heavy lifting. For our example, I am adapting that class so that it works in the context of Spring Boot. In Spring Boot we are dealing with <a href="http://stackoverflow.com/questions/11947037/what-is-an-uber-jar" target="_blank">über-Jars</a>, meaning the resulting executable jar file will contain other jar files representing its dependencies.<br />
<br />
Spring provides some nifty helpers to retrieve the needed Tag Library Descriptors (TLD) files. In <code>TldLocator#createTldInfos</code> I use a <code>ResourcePatternResolver</code>, specifically a <code>PathMatchingResourcePatternResolver</code> with a location pattern of <code><strong>classpath*:**/*.tld</strong></code>.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #008800; font-weight: bold;">final</span> URLClassLoader loader <span style="color: #333333;">=</span> <span style="color: #333333;">(</span>URLClassLoader<span style="color: #333333;">)</span> Thread<span style="color: #333333;">.</span><span style="color: #0000cc;">currentThread</span><span style="color: #333333;">().</span><span style="color: #0000cc;">getContextClassLoader</span><span style="color: #333333;">();</span>
<span style="color: #008800; font-weight: bold;">final</span> ResourcePatternResolver resolver <span style="color: #333333;">=</span> <span style="color: #008800; font-weight: bold;">new</span> PathMatchingResourcePatternResolver<span style="color: #333333;">(</span>loader<span style="color: #333333;">);</span>
<span style="color: #008800; font-weight: bold;">final</span> Resource<span style="color: #333333;">[]</span> resources<span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">final</span> String locationPattern <span style="color: #333333;">=</span> <span style="background-color: #fff0f0;">"classpath*:**/*.tld"</span><span style="color: #333333;">;</span>
<span style="color: #008800; font-weight: bold;">try</span> <span style="color: #333333;">{</span>
resources <span style="color: #333333;">=</span> resolver<span style="color: #333333;">.</span><span style="color: #0000cc;">getResources</span><span style="color: #333333;">(</span>locationPattern<span style="color: #333333;">);</span>
<span style="color: #333333;">}</span>
<span style="color: #008800; font-weight: bold;">catch</span> <span style="color: #333333;">(</span>IOException e<span style="color: #333333;">)</span> <span style="color: #333333;">{</span>
<span style="color: #008800; font-weight: bold;">throw</span> <span style="color: #008800; font-weight: bold;">new</span> <span style="color: #0066bb; font-weight: bold;">IllegalStateException</span><span style="color: #333333;">(</span>String<span style="color: #333333;">.</span><span style="color: #0000cc;">format</span><span style="color: #333333;">(</span><span style="background-color: #fff0f0;">"Error while retrieving resources"</span>
<span style="color: #333333;">+</span> <span style="background-color: #fff0f0;">"for location pattern '%s'."</span><span style="color: #333333;">,</span> locationPattern<span style="color: #333333;">,</span> e<span style="color: #333333;">));</span>
<span style="color: #333333;">}</span>
</pre>
</div>
<br />
<table cellpadding="4" frame="void"><tbody>
<tr valign="top"> <td><br />
<img alt="Important" src="data:image/png;base64,
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAALa0lEQVRogdWZa2wc1RXHfzM7O/te
P9e1vXHSmEdjx3YeDkkaF6REKRRCEDSEFNkRjdSWSsgC2iqoRWqLQKiqIBg1NOQDiMeHtkQIQkRR
S9S4aWwgCQoUgl232KkT28J21l6vd3d2dx79sDuTXdtre03Uqlc62tl53Pv/n3PuOffcKxiGwf9z
E//XAL5sk65WR0a6AaDrOjMtKwgCoigiCAKCIAhXa9wvTcAEHhoc5KMjR7jw3nucf+MN67k/GCS4
YQOr77yTpl27kGUZm81mXC0ywlLnQDbwEwcO0P2b3yz4jV5RwZq2Nm5/5BH8fj+SJGGz2b4UiSUR
MAzD0DSNEwcO8MdHHln8d0AcsAUCfOe551h7yy04HA7sdvuSrVEwAV3XjdDgIC/v2cOl06dznqWA
JCAAMvn9MwlEgF1PP8037rsPt9uN3W5fkjUKIqDrujF+4QLP3XQTU0NDOc8UIAa4y8sJtrQQqK/H
7XQSfv99Pn/nHQRRxNB16/0EEAUatm9n76uv4vP5cDgcBZNYNIF84I0MEK20lIZvf5sNe/dSWlqK
1+vFxBEZHubT3/+evqNHmR4dJRWP55BevW0bra+8gt/vx+l0IknSokksikA+8ElgClixYwc3799P
ZWUlTqczbz+x0VFOPvEEQ6dPE/niCwxdt0jUbd1K68svU1xcXBCJBQnMBz5eWkrL/v2s++Y3KSsr
QxQXlxc7f/5zBjo7CQ8NoadSKKQn943t7dyyf79FYjHuNC8BwzAMVVV56Z57+OzNN3PAJ8vK+FZH
B2s2b55X6/nahRMnOP7TnxLOKEXJyO2/+hVf37uXoqIinE6nmfzyksirMjNUvvGjH+WAVwG1vJxb
Dhxg1bp1uFwuMwQWJCu3bWPN3r24SkoAcGbA/OXXv2bws8+IRqOkUqlZGX1RBAzDMHRd51+nTvHe
wYNX7gPTQMO+faxav56SkpIlgTdlU3s7TXv2IGUs6AGioRDH2tuZmJggFouhqirGPCzyEUBVVX7X
1pZzPwI0fP/7bNmzh7KysrzADh8+zP3338++ffs4ePBg3vdEUWTDD3/IsuZmRLsdW4bEpd5eOp99
lnA4jKIoaJqWl8QsAqb2Txw4kDNp40BxXR0bWlspLy/PC+qZZ55hdHQUSZIYHByko6ODxx57bBZw
cy3kq6xk6y9/ib+qCgQBmbQ7nT50iIs9PUSjUZLJJIZhzEliLgKMDQzwp5/9zLqnkQ51W3/xCwKB
AE6nMy+B3t5exsfH6ezspLe3l3g8zuHDh2cBz5bKpibWtrXhLi0FwA3owNsPP8zExATxeBxVVecy
QC4Bc+L+taNjluvU33031dddN6/2BUGgpKSE/v5+JicncweaA3i2tDz8MIHrr0eU0gsQBzDW10ff
yZNEIhESicScrpRDQNd1xgYG+OC3v7XuJQBXIMDWn/yEioqKeUGMjY0hCAKKoszS1MjIyLzfAmx/
4gmKli0DQcBJOmicfOopJicnicfjJoG5LWBq/+Szz+a8oABNe/bgdrvndR1BEKiqqiIejxOLxWYR
CAaDC0alqjVrqGxowFNWhkDalUKff07f3/5mWSFTLFksLAK6rjN+4UKO9lXAUV7O2tbWeaNOthZl
WZ4FHlh0aN3y4IPIHk+6L8AGvNfRQTgctuZCthVEU/u6rnPutddyBk0A9bt3W4us+QY2fbyurg6v
15vTzw033LBoAsHmZoLNzdgcDgBcQKi/n391dTE9PU0ymcyxgkmAVCrF+4cO5WjfFgiwfoGwOTOy
lJWVUVtba1mkUAKCILClvR1veTkA9owVPnzllZy8YFnA1H5/dzfTw8PWgziwcutWfD4fsiwvCNyU
xsZG3G43lZWVVl933XVXQQSq161j+ebNlhXcwBdnzxIOh60lhmkFEUDTNP7++uvWgBrp6mrNHBk3
H/BsAtFoFEdm8GAwyMaNGwsiIAgCjbt346uosKwgAp8cPWolNj1THInmsqHn6FGLQApY1thIxcqV
+Hy+WX6+0ETesWMHLpcLWZZ54IEHCgYvCAKrbrsNyem0JrQEXMzkhKzlBaKu61z+97+ZHhnJmbwr
tm2zJu5CWp8pra2tNDU1sXPnTtrb25dEQBAEvrplC57MXJCB8XPniEQixONxa6Uq6brOQHd3jvvo
QP2ttxZUpMxsL7zwwpK+AyxLXrt9Oxe6uxFEEXvGZc4fO0bVD35AMplM1wuapjGYtbugAp5AgKLq
aquu/W/JTEs37dqFqihWzSADk8PD1jzQNC3tQtmrThUINDbm+H4h0tfXx6OPPsodd9xBW1sbPT09
BQPPluu2b7fWRxIQ6usjFotZBCRN06wZbbZAfT1FRUWWKQtpzz//PMPDw/T09DA1NcXo6CjHjx+f
11Xma95AwHJjEdB0HUVRrhCYuRGrAiXBoFUqFtq6u7sZHx9nJBMUurq65uxnsX0Hm5v56A9/ANIJ
LXrpEolEwgqlUqZQyPlo6OOPlzx5ly1bxnBWQmxpackBW6hSBEC02axrpqasNZGmaek8kN0kYPDj
j1FVdUlz4Mknn6Surs4Cb5aUhYZiUy59+GGOgm3V1WiadiUPCILAV9autV5wAaM9PXQeOWJprBBp
aGjgxIkTpFIpOjs7aWxsXBJwUwZOnUKZmgLS2zl4vUjSlV1XURRFqtavv3IDKAVe/O53efPxx69a
SCxUBs+c4dV77+Vyfz+xy5eBdG3iX7ECm81m9S2JokiwuZmiujrCPT1AuqgOAqcef5zzL77Imt27
uemhhyipqVnYZ5cw8bPbR0eOcOall7g8MEB4aIhEJAJk9qOAwKZNyLJsHpQgRKNRIxQK0XPmDH/+
3vdQQ6G8na/YtIk199zDypYWVmzceFWAT1y8yMWzZzn/9tv0vfsudqeTlKIQHRvL2QSOAqU7d/K1
W2/l2muvpba2Nl3iJhIJIxKJMDw8TO/Zs3zw4x+jTUzkHVCw2fCUleHw+QiuXYu/upqqhgb8VVUY
hkFNczPFweCs7z556y3r+vyxYwiiyD+PHwdBwNB1krEYhqYRC4UwdB2D9LJmmnRtXHz77VTfeCPL
ly+ntraWmpqa9MaaqqqGoiiEQiGGhoYYHBzk00OHiHR2LkqDNlnG7nJhd7nQswqN+ZogiuipFMlY
DDWRgBl5KEF6woqAUFFByc03U756NZWVlSxfvpyamhoCgQAejwdB13VDVVVisRihUIiRkRGGh4cZ
+sc/GO3qIt7VhZGJAle7mVpWuVKDCBng8jXX4N68Gc8111BUVER5eTnV1dVUV1cTCASuFFqGYaDr
upFKpYjH40xMTDA+Ps7Y2Bjj4+OEw2EmenqYPneO1OAgZCWpxTY9S9QMcLhyHGUDRI8HqbISZ309
zoYGnE4nHo8Hv99PaWkpgUCAiooK6/DE4XCkI1HW2a6hqiqKojA9Pc3k5KQl4XCY6elpotFoetuk
v59UKIR66RLToRBJTcMYHUWIRvMSMPO6rbY2/SsIOFatQpYk5NWrkSQJWZZxOBy43W68Xi9+v5+i
oiJKSkooLi7G5/PhdruRZdnads85HzD3hpLJJIqiEIvFiEajRCIRIpEI0WiUWCxGPB631iOKopBK
pazUbi4Oc7Y+snKCzWbDZrMhSRKSJGG3262w6HK5cLlceDwevF4vPp8Pr9eL2+3G5XLhcDjMkxuE
TNibdcBhnv9qmkYqlSKZTJJIJFAUhXg8jqIoKIpCIpGwSCSTSVRVtWSuk3qTiAnebrfngHc4HDid
TpxOJy6Xy7qWZdk6wZzrxCbvCY1JRNd1NE3LAWgSM69ngp+PgCiK1gF3NhFTzHvmO+Y3wCzw8xLI
JpL5tYCZpEyw2f/nWt1ag2UtM0x3Mq1iAp1j+bH0M7KFCGWDnfmbd8AMnuxfUzL/C0rp/wFnFd4n
EQn3XQAAAABJRU5ErkJggg==" style="border-image: none 0;" /></td> <td style="border-left: 1px solid silver;"><br />
Don’t forget the asterix right after <code>classpath</code>. The <code>classpath*:</code> allows you to retrieve multiple class path resources with the same name. It will also retrieve resources across multiple jar files. This is an extremely useful feature. For more information please see the relevant JavaDocs for <a href="http://docs.spring.io/autorepo/docs/spring-framework/current/javadoc-api/org/springframework/core/io/support/PathMatchingResourcePatternResolver.html" target="_blank">PathMatchingResourcePatternResolver</a>.</td></tr>
</tbody></table>
<br />
Once we have the TLD resources, they will be parsed and ultimately used to create a collection of <code>org.apache.jasper.deploy.TagLibraryInfo</code>. With those at hand, we create a JSP deployment for Undertow using the DeploymentInfo and the <code>TagLibraryInfo</code> collection.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #008800; font-weight: bold;">final</span> HashMap<span style="color: #333333;"><</span>String<span style="color: #333333;">,</span> TagLibraryInfo<span style="color: #333333;">></span> tagLibraryInfo <span style="color: #333333;">=</span> TldLocator<span style="color: #333333;">.</span><span style="color: #0000cc;">createTldInfos</span><span style="color: #333333;">();</span>
JspServletBuilder<span style="color: #333333;">.</span><span style="color: #0000cc;">setupDeployment</span><span style="color: #333333;">(</span>deploymentInfo<span style="color: #333333;">,</span> <span style="color: #008800; font-weight: bold;">new</span> HashMap<span style="color: #333333;"><</span>String<span style="color: #333333;">,</span> JspPropertyGroup<span style="color: #333333;">>(),</span> tagLibraryInfo<span style="color: #333333;">,</span> <span style="color: #008800; font-weight: bold;">new</span> HackInstanceManager<span style="color: #333333;">());</span>
</pre>
</div>
<br />
And that’s it. Simply build and run the application and you should have a working JSP-based application.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #996633;">$ </span>mvn clean package
<span style="color: #996633;">$ </span>java -jar jsp-demo-undertow/target/jsp-demo-undertow-1.0.0-BUILD-SNAPSHOT.jar
</pre>
</div>
<br />
In your console you should start seeing how the application starts up.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=1699950446304666715" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=1699950446304666715" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=1699950446304666715" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGgXbUyZXV0fn4K2E5QzhxkSD0FJyq6u7LtWaMmZrYpmTEIhyphenhyphenM0HbzCagjDJVOOujfSLyrkNXXuaigjF0vHKl-0xroShSI5CjSvkjJau9pMRvsssoonM85e0VhF36Q6bc-LZ29QaTKHTqliMU/s1600/starting-undertow-jsp-sample-with-boot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="173" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGgXbUyZXV0fn4K2E5QzhxkSD0FJyq6u7LtWaMmZrYpmTEIhyphenhyphenM0HbzCagjDJVOOujfSLyrkNXXuaigjF0vHKl-0xroShSI5CjSvkjJau9pMRvsssoonM85e0VhF36Q6bc-LZ29QaTKHTqliMU/s400/starting-undertow-jsp-sample-with-boot.png" width="400" /></a></div>
<br />
<br />
Once started, open your browser and go to the following Url <a href="http://localhost:8080/" target="_blank">http://localhost:8080/</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlcb-qCKCfEUClufBPKzE6qWzps0uSXs_jxRFXu_Ah5TpUp5gahZ14Jr6siVL4WO2elguvzRUCAx0PllqfM9X0sJ8vrZOM3HffqhcEKF4gfmrVlBDyJBWM8CPIwrZIiU5_8BNbm4MaQwgxTsk/s1600/browser-undertow-jsp-sample-with-boot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="261" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlcb-qCKCfEUClufBPKzE6qWzps0uSXs_jxRFXu_Ah5TpUp5gahZ14Jr6siVL4WO2elguvzRUCAx0PllqfM9X0sJ8vrZOM3HffqhcEKF4gfmrVlBDyJBWM8CPIwrZIiU5_8BNbm4MaQwgxTsk/s320/browser-undertow-jsp-sample-with-boot.png" width="320" /></a></div>
<br />
You can find the full source-code for this sample at <a href="https://github.com/ghillert/spring-boot-jsp-demo" target="_blank">https://github.com/ghillert/spring-boot-jsp-demo</a>Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com2tag:blogger.com,1999:blog-1699950446304666715.post-29958224081822004882016-02-12T00:21:00.001-05:002016-02-12T00:21:47.797-05:00Starter Project - Angular 2.0 + TypeScript + WebPack + BootstrapAs <a href="https://angular.io/">Angular 2.0</a> is finally in Beta (¡Yeah!), it is playtime now. In my opinion, the best starter project to use (Feb 2016 ;-) is <a href="https://github.com/AngularClass/angular2-webpack-starter">Angular2 Webpack Starter</a> by <a href="https://github.com/AngularClass">AngularClass</a>. Unfortunately, it does not come with <a href="http://getbootstrap.com/">Bootstrap</a> support out of the box. This is typically not a major issue but many front-end developers will be faced with 2 major changes:<br />
<br />
<ul>
<li>Grunt, Gulp and Bower are dead, long live NPM and <a href="https://webpack.github.io/">Webpack</a></li>
<li><a href="http://www.typescriptlang.org/">TypeScript</a> rules but how do I "require" my CSS dependencies?</li>
</ul>
<div>
Therefore, I created fork of the aforementioned starter project adding Bootstrap support. Also, in order to customize your Bootstrap theme, I believe it is advisable to use either <a href="http://lesscss.org/">Less</a> or <a href="http://sass-lang.com/">Sass</a>. As I am more familiar with Less, I added it to my setup as well.</div>
<div>
<br /></div>
<div>
You can grab the starter at: <a href="https://github.com/ghillert/angular2-webpack-starter-bootstrap">https://github.com/ghillert/angular2-webpack-starter-bootstrap</a></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJcU0JinJMBS16N65X5MJLuP0U8zSJdi38xVg5Yy9jqLoWs3Fl3pI2UEzlmFcE0atQKkf48bN9btLG69c3qzb1LDq-ImcneoS5n_tlVdGfAX2oDWPMqMQy6Up8s57lKu_bSnY-Vs0fcoPKPy8/s1600/angular2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="203" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJcU0JinJMBS16N65X5MJLuP0U8zSJdi38xVg5Yy9jqLoWs3Fl3pI2UEzlmFcE0atQKkf48bN9btLG69c3qzb1LDq-ImcneoS5n_tlVdGfAX2oDWPMqMQy6Up8s57lKu_bSnY-Vs0fcoPKPy8/s400/angular2.png" width="400" /></a></div>
<div>
<br /></div>
Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com0tag:blogger.com,1999:blog-1699950446304666715.post-22257649525940780562015-10-12T22:35:00.001-04:002015-10-12T22:35:25.709-04:00AngularJS + Karma - Loading JSON Files for Mocking HTTP ResponsesIn order to kick-off AngularJS projects, I have been looking at <a href="https://github.com/Swiip/generator-gulp-angular">generator-gulp-angular</a> lately, which you can find at:<br />
<br />
<a href="https://github.com/Swiip/generator-gulp-angular">https://github.com/Swiip/generator-gulp-angular</a><br />
<br />
When doing your unit tests, it is quite convenient to mock HTTP responses using JSON files. However, having your unit tests load additional (JSON) files may not be super obvious using the Karma test runner.<br />
<br />
<b>bower.json</b><br />
<br />
For the task at hand, I am using <a href="https://github.com/velesin/jasmine-jquery">jasmine-jquery</a> which provides “jQuery matchers and fixture loader for Jasmine framework”. Add that dependency to your <b>bower.json</b> file:<br />
<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code style="color: black; word-wrap: normal;">
<span style="font-family: Courier New, Courier, monospace;"><span style="color: #660e7a; font-weight: bold;">"devDependencies"</span>: {
<span style="color: #660e7a;"><b>…</b></span>
<span style="color: #660e7a; font-weight: bold;">"jasmine-jquery"</span>: <span style="color: green; font-weight: bold;">"2.1.1"
</span>}
</span>
</code></pre>
<br />
<b>karma.conf.js</b><br />
<br />
Now we need to do some additional configuration for <a href="http://karma-runner.github.io/0.13/index.html">Karma</a>. By default, <a href="https://github.com/Swiip/generator-gulp-angular">generator-gulp-angular</a> wires the needed files up with:<br />
<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code style="color: black; word-wrap: normal;">
<span style="color: navy; font-weight: bold;">return </span><span style="color: #660e7a; font-style: italic; font-weight: bold;">wiredep</span>(<span style="color: #458383;">wiredepOptions</span>).js
.<span style="color: #7a7a43;">concat</span>([
<span style="color: #660e7a; font-style: italic; font-weight: bold;">path</span>.<span style="color: #7a7a43;">join</span>(<span style="color: #660e7a; font-style: italic; font-weight: bold;">conf</span>.<span style="color: #660e7a; font-weight: bold;">paths</span>.<span style="color: #660e7a; font-weight: bold;">tmp</span>, <span style="color: green; font-weight: bold;">'/serve/app/index.module.js'</span>),
<span style="color: #660e7a; font-style: italic; font-weight: bold;">path</span>.<span style="color: #7a7a43;">join</span>(<span style="color: #660e7a; font-style: italic; font-weight: bold;">conf</span>.<span style="color: #660e7a; font-weight: bold;">paths</span>.<span style="color: #660e7a; font-weight: bold;">src</span>, <span style="color: green; font-weight: bold;">'/**/*.spec.js'</span>),
<span style="color: #660e7a; font-style: italic; font-weight: bold;">path</span>.<span style="color: #7a7a43;">join</span>(<span style="color: #660e7a; font-style: italic; font-weight: bold;">conf</span>.<span style="color: #660e7a; font-weight: bold;">paths</span>.<span style="color: #660e7a; font-weight: bold;">src</span>, <span style="color: green; font-weight: bold;">'/**/*.mock.js'</span>),
<span style="color: #660e7a; font-style: italic; font-weight: bold;">path</span>.<span style="color: #7a7a43;">join</span>(<span style="color: #660e7a; font-style: italic; font-weight: bold;">conf</span>.<span style="color: #660e7a; font-weight: bold;">paths</span>.<span style="color: #660e7a; font-weight: bold;">src</span>, <span style="color: green; font-weight: bold;">'/**/*.html'</span>),
{<span style="color: #660e7a; font-weight: bold;">pattern</span>: <span style="color: #660e7a; font-style: italic; font-weight: bold;">path</span>.<span style="color: #7a7a43;">join</span>(<span style="color: #660e7a; font-style: italic; font-weight: bold;">conf</span>.<span style="color: #660e7a; font-weight: bold;">paths</span>.<span style="color: #660e7a; font-weight: bold;">src</span>, <span style="color: green; font-weight: bold;">'../mocks/**/*.json'</span>), <span style="color: #660e7a; font-weight: bold;">watched</span>: <span style="color: navy; font-weight: bold;">false</span>, <span style="color: #660e7a; font-weight: bold;">included</span>: <span style="color: navy; font-weight: bold;">false</span>, <span style="color: #660e7a; font-weight: bold;">served</span>: <span style="color: navy; font-weight: bold;">true</span>}
]);
</code></pre>
<br />
<br />
In order to make your JSON file available, add<br />
<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code style="color: black; word-wrap: normal;">
<span style="font-family: Courier New, Courier, monospace;">{
<span style="color: #660e7a; font-weight: bold;"> pattern</span>: <span style="color: #660e7a; font-style: italic; font-weight: bold;">path</span>.<span style="color: #7a7a43;">join</span>(<span style="color: #660e7a; font-style: italic; font-weight: bold;">conf</span>.<span style="color: #660e7a; font-weight: bold;">paths</span>.<span style="color: #660e7a; font-weight: bold;">src</span>, <span style="color: green; font-weight: bold;">'../mocks/**/*.json'</span>),
<span style="color: #660e7a; font-weight: bold;"> watched</span>: <span style="color: navy; font-weight: bold;">false</span>,
<span style="color: #660e7a; font-weight: bold;">included</span>: <span style="color: navy; font-weight: bold;">false</span>,
<span style="color: #660e7a; font-weight: bold;">served</span>: <span style="color: navy; font-weight: bold;">true
</span>}
</span></code></pre>
<pre style="background-color: white; font-size: 12pt;"></pre>
<br />
So that it becomes:<br />
<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code style="color: black; word-wrap: normal;">
<span style="font-family: Courier New, Courier, monospace;"><span style="color: navy; font-weight: bold;">return </span><span style="color: #660e7a; font-style: italic; font-weight: bold;">wiredep</span>(<span style="color: #458383;">wiredepOptions</span>).js
.<span style="color: #7a7a43;">concat</span>([
<span style="color: #660e7a; font-style: italic; font-weight: bold;">path</span>.<span style="color: #7a7a43;">join</span>(<span style="color: #660e7a; font-style: italic; font-weight: bold;">conf</span>.<span style="color: #660e7a; font-weight: bold;">paths</span>.<span style="color: #660e7a; font-weight: bold;">tmp</span>, <span style="color: green; font-weight: bold;">'/serve/app/index.module.js'</span>),
<span style="color: #660e7a; font-style: italic; font-weight: bold;">path</span>.<span style="color: #7a7a43;">join</span>(<span style="color: #660e7a; font-style: italic; font-weight: bold;">conf</span>.<span style="color: #660e7a; font-weight: bold;">paths</span>.<span style="color: #660e7a; font-weight: bold;">src</span>, <span style="color: green; font-weight: bold;">'/**/*.spec.js'</span>),
<span style="color: #660e7a; font-style: italic; font-weight: bold;">path</span>.<span style="color: #7a7a43;">join</span>(<span style="color: #660e7a; font-style: italic; font-weight: bold;">conf</span>.<span style="color: #660e7a; font-weight: bold;">paths</span>.<span style="color: #660e7a; font-weight: bold;">src</span>, <span style="color: green; font-weight: bold;">'/**/*.mock.js'</span>),
<span style="color: #660e7a; font-style: italic; font-weight: bold;">path</span>.<span style="color: #7a7a43;">join</span>(<span style="color: #660e7a; font-style: italic; font-weight: bold;">conf</span>.<span style="color: #660e7a; font-weight: bold;">paths</span>.<span style="color: #660e7a; font-weight: bold;">src</span>, <span style="color: green; font-weight: bold;">'/**/*.html'</span>),
{<span style="color: #660e7a; font-weight: bold;">pattern</span>: <span style="color: #660e7a; font-style: italic; font-weight: bold;">path</span>.<span style="color: #7a7a43;">join</span>(<span style="color: #660e7a; font-style: italic; font-weight: bold;">conf</span>.<span style="color: #660e7a; font-weight: bold;">paths</span>.<span style="color: #660e7a; font-weight: bold;">src</span>, <span style="color: green; font-weight: bold;">'../mocks/**/*.json'</span>), <span style="color: #660e7a; font-weight: bold;">watched</span>: <span style="color: navy; font-weight: bold;">false</span>, <span style="color: #660e7a; font-weight: bold;">included</span>: <span style="color: navy; font-weight: bold;">false</span>, <span style="color: #660e7a; font-weight: bold;">served</span>: <span style="color: navy; font-weight: bold;">true</span>}]);</span>
</code>
</pre>
<br />
<b>Mocks</b> is a directory in my project’s root folder. Customize as needed. For further details see:<br />
<br />
<a href="http://karma-runner.github.io/0.13/config/files.html">http://karma-runner.github.io/0.13/config/files.html</a><br />
<br />
Now, you're ready for testing. In your spec aka unit test file, in the <b>beforeEach</b>:<br />
<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code style="color: black; word-wrap: normal;">
<span style="font-style: italic;">beforeEach</span>(<span style="color: #660e7a; font-style: italic; font-weight: bold;">inject</span>(<span style="color: navy; font-weight: bold;">function </span>(_$httpBackend_, _$rootScope_, $controller) {
…
}));
</code>
</pre>
<br />
you can now mock up the <b>$httpBackend</b>:<br />
<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code style="color: black; word-wrap: normal;">
<span style="color: #660e7a; font-style: italic; font-weight: bold;">jasmine</span>.<span style="font-style: italic;">getJSONFixtures</span>().fixturesPath=<span style="color: green; font-weight: bold;">'/base/mocks'</span>;
<span style="color: #458383;">$httpBackend</span>.<span style="color: #7a7a43;">whenGET</span>(<span style="color: green; font-weight: bold;">'http://localhost:9876/api/plants'</span>).<span style="color: #7a7a43;">respond</span>(
<span style="color: #7a7a43;">getJSONFixture</span>(<span style="color: green; font-weight: bold;">'plants.json'</span>)
);
<span style="color: #458383;">$httpBackend</span>.<span style="color: #7a7a43;">whenGET</span>(<span style="color: green; font-weight: bold;">'app/components/plants/plants.html'</span>).<span style="color: #7a7a43;">respond</span>(<span style="color: green; font-weight: bold;">''</span>);
<span style="color: #458383;">$httpBackend</span>.<span style="color: #7a7a43;">flush</span>();
</code>
</pre>
Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com0tag:blogger.com,1999:blog-1699950446304666715.post-77559941581575835242015-10-03T12:14:00.000-04:002015-10-03T12:14:13.374-04:00AngularJS Best Practices - Style GuideLooks like the place du-jour for THE <b>AngularJS style guide</b> is here:<br />
<br />
<a href="https://github.com/johnpapa/angular-styleguide">https://github.com/johnpapa/angular-styleguide</a><br />
<br />
The author, John Papa, also provides the HotTowel <a href="http://yeoman.io/">Yeoman</a> generator, that implements this style-guide:<br />
<br />
<a href="https://github.com/johnpapa/generator-hottowel">https://github.com/johnpapa/generator-hottowel</a><br />
<br />
If you're a <a href="http://www.typescriptlang.org/">TypeScript</a> aficionado, you may want to keep an eye on the following GitHub issue:<br />
<br />
<a href="https://github.com/johnpapa/generator-hottowel/issues/90">https://github.com/johnpapa/generator-hottowel/issues/90</a><br />
<br />
In the meantime - checkout:<br />
<br />
<ul>
<li><a href="https://hstefanski.wordpress.com/2015/07/22/converting-an-angular-app-to-typescript/">Converting an Angular app to TypeScript – part 1</a></li>
<li><a href="https://hstefanski.wordpress.com/2015/08/19/converting-an-angular-app-to-typescript-part-2/">Converting an Angular app to TypeScript – part 2</a></li>
</ul>
<br />
And all this came up, as I was looking, for some good explanation for the advice to use AngularJS’<br />
“Controller as” syntax and to avoid <i>$scope</i> as much as possible.<br />
<br />
<a href="https://github.com/johnpapa/angular-styleguide#style-y030">https://github.com/johnpapa/angular-styleguide#style-y030</a><br />
<br />
A really good explanation is also here:<br />
<br />
<a href="http://toddmotto.com/digging-into-angulars-controller-as-syntax/">http://toddmotto.com/digging-into-angulars-controller-as-syntax/</a>Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com1tag:blogger.com,1999:blog-1699950446304666715.post-55881161102712790862015-10-02T11:31:00.000-04:002015-10-02T11:31:18.235-04:00TypeScript versus ES6<br />
A good question is: <b>Why would you want to use TypeScript versus ES6?</b><br />
<br />
A few reasons for me:<br />
<br />
<ul>
<li>I have to use a <a href="https://en.wikipedia.org/wiki/Source-to-source_compiler">transpiler</a> anyway in order to support older browsers such as <a href="https://babeljs.io/">Babel</a></li>
<li>TypeScript gives me types</li>
<li>You can still use JavaScript as valid TypeScript (TS being a superset of JS)</li>
<li>It seems to be a more natural fit for Java developers</li>
<li>Tooling support seems pretty good</li>
<li>AngularJS 2.0 will use it natively - as such you have Google and Microsoft supporting it</li>
</ul>
<br />
<b>Resources</b><br />
<br />
Will ES6 make Typescript irrelevant?<br />
<a href="https://www.reddit.com/r/javascript/comments/31qocr/will_es6_make_typescript_irrelevant/">https://www.reddit.com/r/javascript/comments/31qocr/will_es6_make_typescript_irrelevant/</a><br />
<br />
TypeScript vs ECMAScript 2015/2016<br />
<a href="http://ilikekillnerds.com/2015/07/typescript-vs-ecmascript-20152016/">http://ilikekillnerds.com/2015/07/typescript-vs-ecmascript-20152016/</a><br />
<br />
TypeScript and ES6 Dan Wahlin & Andrew Connell<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/U7NYTKgkZgo/0.jpg" src="https://www.youtube.com/embed/U7NYTKgkZgo?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<br />
Angular Air Episode 25: TypeScript or ES6 with Babel?<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/B6Q6RmwionA/0.jpg" src="https://www.youtube.com/embed/B6Q6RmwionA?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<br />Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com0tag:blogger.com,1999:blog-1699950446304666715.post-23127569619414203812015-10-01T23:11:00.000-04:002015-10-02T00:59:15.652-04:00AngularJS 1.x and TypeScriptI did a bit of research today on <a href="http://www.typescriptlang.org/"><b>TypeScript</b></a>. As it is favored (but not required) for the upcoming <a href="https://angular.io/">AngularJS 2.0</a> release, I wanted to dig a bit deeper. Keep in mind that as of Oct 2015, AngularJS 2.0 is still a pure alpha version and even new projects shall continue using <a href="https://angularjs.org/">AngularJS 1.4</a>.<br />
<br />
Nonetheless, it looks like TypeScript is a viable option even for the latest 1.4 version. In fact, <a href="http://yeoman.io/">Yeoman</a> now provides an Angular starter (<a href="https://github.com/Swiip/generator-gulp-angular">generator-gulp-angular</a>) that gives you the option to use TypeScript as your language of choice.<br />
<br />
Here are some resources that I thought were helpful:<br />
<br />
<a href="http://www.developerhandbook.com/typescript/writing-angularjs-1-x-with-typescript/">http://www.developerhandbook.com/typescript/writing-angularjs-1-x-with-typescript/</a><br />
<br />
I believe, that particularly for Java Developers, TypeScript could be quite interesting - as you have much better type-safety compared to using plain JavaScript. See the following blog entry by Veit Weber:<br />
<br />
<a href="http://blog.pikodat.com/2015/07/24/why-java-developers-might-love-typescript/">Why Java Developers might love TypeScript</a><br />
<br />
There is a good presentation by Sander Mak from JavaOne: "TypeScript for Java Developers: Coding JavaScript Without the Pain" on that subject as well:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/yZRr0kdk1os/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/yZRr0kdk1os?feature=player_embedded" width="320"></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
A longer version:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/h7NLi2w8ytg/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/h7NLi2w8ytg?feature=player_embedded" width="320"></iframe></div>
<br />
<br />
As you can have a much better OO experience with TypeScript, I think it will be also quite interesting to use rich domain objects with AngularJS rather than using JSON structures directly when retrieving data from your REST endpoints.<br />
<br />
There is a great presentation by Gert Hengeveld from NG-NL 2015.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/iz9zBWrhZUg/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/iz9zBWrhZUg?feature=player_embedded" width="320"></iframe></div>
<br />
<br />
<b>Slides: </b><br />
<br />
<a href="https://docs.google.com/presentation/d/1cbNH2WHO8WzF1XKPxMJ3gJXmfKnWAl3cN77eJJJdAEw/present?slide=id.p">https://docs.google.com/presentation/d/1cbNH2WHO8WzF1XKPxMJ3gJXmfKnWAl3cN77eJJJdAEw/present?slide=id.p</a><br />
<br />
<b>Blog Post:</b><br />
<br />
<a href="https://medium.com/opinionated-angularjs/angular-model-objects-with-javascript-classes-2e6a067c73bc">https://medium.com/opinionated-angularjs/angular-model-objects-with-javascript-classes-2e6a067c73bc</a><br />
<br />
<b>Convert JSON Structure to TypeScript Classes</b><br />
<br />
If you create TypeScript classes that need to handle JSON, the follow online tool to generate TypeScript interfaces from JSON might be of interest:<br />
<br />
<a href="http://json2ts.com/">http://json2ts.com/</a><br />
<br />
<b>TypeScript type definitions</b><br />
<br />
I still need to wrap my head around TypeScript type definitions. They basically bolt on type definition for libraries that are not inherently based on TypeScript. There is a repository for them:<br />
<br />
<a href="https://github.com/borisyankov/DefinitelyTyped">https://github.com/borisyankov/DefinitelyTyped</a><br />
<br />
<br />Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com0tag:blogger.com,1999:blog-1699950446304666715.post-47724615957720632552015-03-02T10:56:00.000-05:002015-03-02T10:56:25.147-05:00Still want to go to DevNexus 2015 (for free)? Room Volunteers Needed!We are still <b>looking for a few more room volunteers</b> to help us with the monitoring and basic quality control of the breakout session rooms at <a href="http://www.devnexus.com/">DevNexus 2015</a> next week.<br />
<br />
In total <b>we need 24 volunteers</b> (<b>12 tracks x 2 days</b>) for the 2 main conference days (<b>March 11 and 12</b>) It will be first come, first serve - So please apply ASAP. We will be accepting room monitors from now and up until Thursday, March 5th.<br />
<br />
The room monitor will be responsible for:<br />
<br />
<ul>
<li>Getting a copy of the presentation slides from speakers right after each session</li>
<li>Making sure speakers don't go over their allotted time</li>
<li>Communication of any room related issues (power, sound , temp... etc).</li>
<li>Count the attendees in each session</li>
<li>Provide some feedback in regards to the observed sessions</li>
</ul>
<br />
A volunteer will be in charge of a single track room for one full day. Then s(he) will be free all day on the alternate conference day. For example, you monitor the Agile session room on Wednesday, then you are free to attend any session on Thursday.<br />
<br />
<b>Please contact info at ajug dot org</b> if you are interested with the following info:<br />
<br />
<ul>
<li>Day and Track</li>
<li>Alternative Day and Track </li>
<li>Name</li>
<li>Email</li>
<li>Phone</li>
</ul>
<br />
Also, let us know if you have any further questions.<br />
<br />
THANKS!<br />
<br />Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com0tag:blogger.com,1999:blog-1699950446304666715.post-35920873031684024822015-01-10T15:56:00.002-05:002015-01-10T16:04:29.128-05:00DevNexus 2015 at BMW's Car Hackathon<br />
Thanks to my colleague Sabby Anandan, <a href="http://www.devnexus.com/"><b>DevNexus 2015</b></a> is getting some mentioning at BMW's Car Hackathon - Hack The Drive in San Francisco. The event takes place this weekend January 11-12.<br />
<br />
Details at: <a href="http://hackthedrive.com/">http://hackthedrive.com/</a><br />
<br />
Here are some photos:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxeiOYdAAHMkac7XcGwZyFLt-GyG_L1tSZrK5fdAM4b1N1r-pmmIPc48qBxcZINVY0kR_yql8YBX_bcX0NPOtdLHNNeu6Mi0whLwbqhjWqXRa0_R3asrPNCCXN0JJUxdtjslNx8jukr0krmS4/s1600/bmw-hackathon1_1024px.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxeiOYdAAHMkac7XcGwZyFLt-GyG_L1tSZrK5fdAM4b1N1r-pmmIPc48qBxcZINVY0kR_yql8YBX_bcX0NPOtdLHNNeu6Mi0whLwbqhjWqXRa0_R3asrPNCCXN0JJUxdtjslNx8jukr0krmS4/s1600/bmw-hackathon1_1024px.jpg" height="300" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwM9bdLkoWJ-M63UQnYCz3qKBY-tRiT_vsMVcSysKDbNUMN3370gj2rMg1jnK90TxgOxaBRdgo13snJGhvjizE9NKIeHVY6Mdlj69o7adnYNyInW25EYVGOoEO_crOQD451AZwvWk-JmF4Q9c/s1600/bmw-hackathon2_1024px.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwM9bdLkoWJ-M63UQnYCz3qKBY-tRiT_vsMVcSysKDbNUMN3370gj2rMg1jnK90TxgOxaBRdgo13snJGhvjizE9NKIeHVY6Mdlj69o7adnYNyInW25EYVGOoEO_crOQD451AZwvWk-JmF4Q9c/s1600/bmw-hackathon2_1024px.jpg" height="300" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilElQoeRntfa8ND9n0a-6-nNu0yOD9AaJV4EI2mwhPthDqcOonA1-U69VfbyhrSUIoIrJZS01SbgtwKu40s1rEtKJNm_CIdV4baWObgf0hHFb6hXI4HE-W6z_CXAWIX5pnmekMZ7jK4Ojb54s/s1600/bmw-hackathon3_1024px.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilElQoeRntfa8ND9n0a-6-nNu0yOD9AaJV4EI2mwhPthDqcOonA1-U69VfbyhrSUIoIrJZS01SbgtwKu40s1rEtKJNm_CIdV4baWObgf0hHFb6hXI4HE-W6z_CXAWIX5pnmekMZ7jK4Ojb54s/s1600/bmw-hackathon3_1024px.jpg" height="300" width="400" /></a></div>
<br />Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com0tag:blogger.com,1999:blog-1699950446304666715.post-88753932121693798552015-01-08T10:50:00.000-05:002015-01-08T10:50:14.461-05:00DevNexus 2015 - Early Bird pricing ends Jan 9The countdown for <b>DEVNEXUS 2015</b> (Workshop day <b>March 10</b>, main conference <b>March 11-12</b>) is on! The AJUG team has been working hard to secure speakers, build the new event site and make this year's event the best one ever:<br />
<br />
<ul>
<li><b>3 days</b> (1 workshop day and 2 conference days) </li>
<li><b>12 tracks</b> </li>
<li><b>120 sessions</b> </li>
<li>expected attendance of <b>1500</b> </li>
</ul>
<br />
You can see the accepted list of speakers and sessions at <a href="http://www.devnexus.com/">http://www.devnexus.com/</a>.<br />
<br />
Please note that the <b>Early Bird</b> pricing ends this <b>Friday Jan 9th</b>!! So if you want to take advantage of the super low event price of <b>$250</b> (other developer conferences of this scale cost $1000-$1800 to attend) then register this week.<br />
<br />
Also don’t forget that we have a whole day of workshops on March 10th. This conference has sold out every year for the last 6 years so be sure to <b>register now at:</b><br />
<br />
<ul>
<li><a href="http://www.devnexus.com/">http://www.devnexus.com/</a></li>
</ul>
<br />
A big <b>THANK YOU</b> to all of our sponsors that help make this event possible:<br />
<br />
PLATINUM SPONSOR<br />
<br />
<ul>
<li>IBM - <a href="http://www.ibm.com/">http://www.ibm.com</a> </li>
</ul>
<br />
GOLD SPONSORS<br />
<br />
<ul>
<li>JFrog - <a href="http://www.jfrog.com/">http://www.jfrog.com</a> </li>
<li>Microsoft - <a href="http://www.microsoft.com/">http://www.microsoft.com</a> </li>
<li>Pivotal - <a href="http://www.pivotal.io/">http://www.pivotal.io</a> </li>
<li>ThoughtWorks - <a href="http://www.thoughtworks.com/">http://www.thoughtworks.com</a> </li>
<li>Telerik - <a href="http://www.telerik.com/">http://www.telerik.com</a></li>
<li>BlueFletch - http://bluefletch.com/</li>
<li>Intercontinental Exchange - https://www.theice.com/</li>
</ul>
<br />
MEDIA PARTNER<br />
<br />
<ul>
<li>DZone - <a href="http://www.dzone.com/">http://www.dzone.com</a> </li>
</ul>
<br />
SILVER SPONSOSRS<br />
<br />
<ul>
<li>Altisource Labs - <a href="http://www.altisourcelabs.com/">http://www.altisourcelabs.com</a> </li>
<li>Anteo Group - <a href="http://www.anteogroup.com/">http://www.anteogroup.com</a> </li>
<li>Aspose - <a href="http://www.aspose.com/">http://www.aspose.com</a> </li>
<li>Bridge2 Solutions - <a href="http://www.bridge2solutions.com/">http://www.bridge2solutions.com</a> </li>
<li>Coverity - <a href="http://www.coverity.com/">http://www.coverity.com</a> </li>
<li>Dimensional Thinking - <a href="http://www.dtglobalstaffing.com/">http://www.dtglobalstaffing.com</a> </li>
<li>GitHub - <a href="http://www.github.com/">http://www.github.com</a> </li>
<li>Hazelcast - <a href="http://www.hazelcast.com/">http://www.hazelcast.com</a> </li>
<li>ORACLE - <a href="http://www.oracle.com/">http://www.oracle.com</a> </li>
<li>Sonatype - <a href="http://www.sonatype.com/">http://www.sonatype.com</a> </li>
<li>StateFarm - <a href="http://www.statefarm.com/">http://www.statefarm.com</a> </li>
<li>Thompson Technologies - <a href="http://www.thompsontechnologies.com/">http://www.thompsontechnologies.com</a> </li>
<li>Vaadin - <a href="http://www.vaadin.com/">http://www.vaadin.com</a></li>
<li>STONE Resource Group - <a href="http://www.stoneresource.net/">http://www.stoneresource.net/</a></li>
<li>JetBrains - <a href="https://www.jetbrains.com/">https://www.jetbrains.com/</a></li>
</ul>
<br />
COCKTAIL HOUR SPONSOR<br />
<br />
<ul>
<li>Mandrill - <a href="http://www.mandrill.com/">http://www.mandrill.com</a> </li>
</ul>
<br />
See you all in March!!!<br />
<br />Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com0tag:blogger.com,1999:blog-1699950446304666715.post-63318441135648594992014-12-02T11:10:00.000-05:002014-12-02T11:10:54.871-05:00Npm, Bower, CI and the NetworkOk, I accepted the reality that building single-page applications (SPA) is better done using the tooling options embraced by the JavaScript community, rather than building those apps using purely Gradle or Maven (and respective plugins). The reason being that building a complete web-UI is rather involved and tools like Yeoman, Grunt (Gulp) and Bower provide quite a bit of useful tooling while also having a much larger user-base than the (less complete) options in the Java world.<br />
<br />
So life was good. Everything builds. Of course we still need to integrate the app with our backend that provides the REST endpoints. Personally, I prefer it that developers can build the entire stack at once. Also, can we assume that every (Java) developer has Node/Npm intalled?<br />
<br />
Luckily, there are some plugins available for Maven and Gradle that provide useful wrappers around <a href="https://www.npmjs.org/">Npm</a> and Node:<br />
<ul>
<li><a href="https://github.com/eirslett/frontend-maven-plugin">Maven Frontend Plugin</a></li>
<li><a href="https://github.com/srs/gradle-grunt-plugin">Gradle Grunt Plugin</a></li>
</ul>
Thus, with some trial and error you get a fairly portable build (Linux, Mac and Windows) that not only executes the Grunt build but also downloads and installs Node and its dependencies, Grunt, Bower etc.<br />
<br />
You think you finally arrived...Things run mostly okay on the continuous integration (CI) server...mmh, wait... "Mostly" is causing some headaches. This is actually an area where I have some frustrations lately. Looks like the Maven Central in the node world is a tad more volatile than Maven central itself.<br />
<br />
In the Java world you have 2 layers of protection that ensure that the CI server build process is fairly resilient to internet hick-ups. Heck, it would even build off-line (assuming no library dependency changes were done). First, you have your local repository of course, which in the case of Maven is typically <span style="font-family: Courier New, Courier, monospace;">${user.home}/.m2/</span><br />
<br />
Second, any serious CI environment would also use a dedicated repository manager that serves as a proxy to the outside world, so that for already retrieved dependencies you would not need to hit Maven Central or other 3rd party repositories.<br />
<br />
With NPM you all of a sudden realize you are a tad back into the wild west. Not only do you have to consider NPM (Managing tooling dependencies) but Bower (managing JS/CSS dependencies) as well.<br />
<br />
NPM actually provides npm-cache - and you see dependencies being cached in your home directory under <span style="font-family: Courier New, Courier, monospace;">~/.npm/</span>. But try to disable your network card...the eternal spinner is yours. It does not even seem to timeout.<br />
<br />
You can go offline - kind of - using “npm install --cache-min 9999999 --no-registry” but it does not seem to support things the way Maven/Gradle does: Check the cache first, and only if the dependency does not exist fetch it remotely. See also: <a href="https://github.com/npm/npm/issues/2568">https://github.com/npm/npm/issues/2568</a><br />
<br />
Another issue I encountered is with using <a href="https://github.com/angular/protractor">Protractor</a> for the E2E testing of my AngularJS application. You will usually use <a href="https://github.com/angular/protractor/blob/master/bin/webdriver-manager">webdriver-manager</a> to retrieve the necessary Selenium files/driver for your targeted Browser, e.g. Chrome. Since, I like to make the build as portable as possible, I do a post-install of the web-driver manager, which requires direct network access in <span style="font-family: Courier New, Courier, monospace;">package.json</span>:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">"scripts": {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> "postinstall": "node_modules/protractor/bin/webdriver-manager update"</span><br />
<span style="font-family: Courier New, Courier, monospace;">}</span><br />
<br />
Bower unfortunately, does its own caching approach which is configured in <span style="font-family: Courier New, Courier, monospace;">.bowerrc</span>, e.g.:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">"storage": {</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>"packages": ".bower_cache"</span><br />
<span style="font-family: Courier New, Courier, monospace;">}</span><br />
<br />
So what about using dedicated repository managers as proxy for NPM and Bower?<br />
<br />
<a href="http://www.jfrog.com/open-source/#os-arti">Artifactory</a> provides <a href="http://www.jfrog.com/confluence/display/RTF/Npm+Repositories">support for NPM</a> but not Bower. There is a <a href="https://www.jfrog.com/jira/browse/RTFACT-6488">feature request to support Bower</a> in Artifactory, though. <a href="http://www.sonatype.org/nexus/go/">Nexus</a> also has <a href="http://books.sonatype.com/nexus-book/reference/_introduction_7.html">support for NPM</a>. For Bower an <a href="https://issues.sonatype.org/browse/NEXUS-6884">open ticket exists</a>.<br />
<br />
Maybe people should start rallying behind <a href="http://www.webjars.org/">web-jars</a> more broadly ;-(<br />
<br />
<br />
<br />Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com1tag:blogger.com,1999:blog-1699950446304666715.post-3407097081611077352014-10-13T14:30:00.000-04:002014-10-13T14:32:27.958-04:00Digging Deeper - RequireJS and ES6 ModulesI was exploring <a href="http://requirejs.org/">RequireJS</a> and <a href="http://www.sitepoint.com/understanding-es6-modules/">ES6 Modules</a> some more this weekend. Originally I started to explore how I can use richer domain objects (classes) as part of our AngularJS application that uses RequireJS for modularization. As part of that endeavor, using RequireJS looks like an interesting approach to <b>inject classes</b> into the application (Remember that AngularJS <b>injects class instances</b> ;-)<br />
<br />
Here is a list of interesting resources that I came across.<br />
<br />
<b>RequireJS Basics</b><br />
<br />
In order to get a refresher/introduction to RequireJS, I found Rob Dodson's <b>RequireJS -- Embracing the Awesomeness of Asynchronous Modules </b>quite nice:<br />
<ul>
<li><a href="https://www.youtube.com/watch?v=vWGuaZOTR4U">https://www.youtube.com/watch?v=vWGuaZOTR4U</a></li>
</ul>
<b>Integrating AngularJS and RequireJS</b><br />
<b><br /></b>
Thomas Burleson's <b>Angular and RequireJS </b>from ng-conf 2014 was high on my consumption list. I think his explanation of how RequireJS relates to AngularJS was perfect.<br />
<ul>
<li><a href="https://www.youtube.com/watch?v=4yulGISBF8w">https://www.youtube.com/watch?v=4yulGISBF8w</a></li>
</ul>
I thought his <a href="https://github.com/ThomasBurleson/angularjs-Quizzler">code example</a> was a tad on the complex side, though (Meaning I may need to revisit it ;-). For practical purposes, I then discovered Burke Holland's <b>Requiring vs Browserifying Angular </b>which I think is the nicest tutorial I came across:<br />
<ul>
<li><a href="http://developer.telerik.com/featured/requiring-vs-browerifying-angular/">http://developer.telerik.com/featured/requiring-vs-browerifying-angular/</a></li>
</ul>
The tutorial also underlines the point that using AngularJS and RequireJS is not for the faint of heart. It has its challenges. Maybe I need to look at <a href="http://browserify.org/">Browserify</a>?<br />
<br />
One challenge I came across this morning for example, is to make <a href="https://github.com/passy/angular-masonry">angular-masonry</a> work with RequireJS. I was able to solve that challenge using this Stackoverflow posting:<br />
<ul>
<li><a href="http://stackoverflow.com/questions/18295459/requirejs-with-jquery-masonry-imagesloaded-object-object-object-has-no-me">http://stackoverflow.com/questions/18295459/requirejs-with-jquery-masonry-imagesloaded-object-object-object-has-no-me</a></li>
</ul>
<b>Whats is coming with ES6 Modules</b><br />
<br />
When looking at modules, it does not take long to come across ES6 Modules, the next hot thing coming our way as part of <b>ECMAScript 6</b> (see <a href="http://www.2ality.com/2014/08/es6-today.html">Using ECMAScript 6 today</a>)<br />
<b><br /></b>
First I watched <b>Browser Package Management (</b>by Guy Bedford<b>)</b>:<br />
<ul>
<li><a href="http://www.confreaks.com/videos/3231-mwjs-browser-package-management">http://www.confreaks.com/videos/3231-mwjs-browser-package-management</a></li>
</ul>
He also has a nice blog post:<br />
<b><br /></b>
<a href="http://guybedford.com/practical-workflows-for-es6-modules">http://guybedford.com/practical-workflows-for-es6-modules</a><br />
<br />
Another good video was Guy Bedford's talk: <b>Package Management for ES6 Modules</b> from JSConf2014:<br />
<ul>
<li><a href="https://www.youtube.com/watch?v=szJjsduHBQQ">https://www.youtube.com/watch?v=szJjsduHBQQ</a></li>
</ul>
<div>
What was interesting to learn, is that with SPDY, the bundling of web-resources won't be necessary anymore (eventually). See <b>Multiplexing with SPDY and HTTP/2</b> for explanations:</div>
<div>
<ul>
<li><a href="https://www.youtube.com/watch?v=J_BxVEOVRNw#t=1303">https://www.youtube.com/watch?v=J_BxVEOVRNw#t=1303</a></li>
</ul>
</div>
So here is what is next for me...I need to look at the following projects and see how all this is usable today. Certainly looks fascinating being to use ES6 features right now, also keeping in mind that AngularJS 2.0 will use ES6 modules.<br />
<ul>
<li><a href="https://github.com/ModuleLoader/es6-module-loader">https://github.com/ModuleLoader/es6-module-loader</a></li>
<li><a href="https://github.com/systemjs/systemjs">https://github.com/systemjs/systemjs</a></li>
<li><a href="http://jspm.io/">http://jspm.io/</a></li>
</ul>
<br />Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com0tag:blogger.com,1999:blog-1699950446304666715.post-80484569077931735552014-10-06T13:02:00.000-04:002014-10-06T13:03:18.613-04:00Java Template Engines Revisited Part 1Over the past week, I spent some time looking at Java based template engines. Typically I need templating support for two areas:<br />
<br />
<ul>
<li><b>View Templates</b> (For rendering views in your browser)</li>
<li><b>Email Templates</b> - with support for both HTML and Text emails</li>
</ul>
<br />
For email templates I had used the usual suspects such as <a href="http://velocity.apache.org/">Velocity</a> and <a href="http://freemarker.org/">Freemarker</a> in the past but both feel a tad heavy and old these days - Velocity's last release was in 2010! Eventually I settled for a simpler option a while back: <a href="http://www.stringtemplate.org/">StringTemplate</a>, which as a library worked fairly okay.<br />
<br />
As I had done some client-side templating using <a href="http://mustache.github.io/">Mustache</a> and <a href="http://handlebarsjs.com/">Handlebars</a>, I was intrigued in <a href="http://java.dzone.com/articles/mustaches-world-java">seeing Java implementations</a> for both:<br />
<br />
<ul>
<li><b>jmustache</b> - <a href="https://github.com/samskivert/jmustache">https://github.com/samskivert/jmustache</a></li>
<li><b>mustache.java</b> - <a href="https://github.com/spullara/mustache.java">https://github.com/spullara/mustache.java</a></li>
<li><b>handlebars.java</b> - <a href="https://github.com/jknack/handlebars.java">https://github.com/jknack/handlebars.java</a></li>
</ul>
<br />
The nice thing about Mustache is that implementations are available for almost any programming language imaginable, which could be nice in case you have the need to maintain browser-bound and backend (Java) templates or in case you have multiple Java and non-Java application with templating needs.<br />
<br />
For now I have chosen <b>mustache.java</b>. Looks like it is <a href="https://github.com/spullara/mustache.java/blob/master/README.md">heavily used at Twitter</a>. Depending on how willing you are towards enduring any type of logic in your templates, you may also want to check out <a href="http://handlebarsjs.com/">Handlebars</a> and the corresponding Java implementation. It is basically a super-set of Mustache, providing additional built-in helpers.<br />
<br />
Lastly, for both Mustache and Handlebars there is support available for Spring MVC.<br />
<br />
<ul>
<li><a href="https://github.com/sps/mustache-spring-view">https://github.com/sps/mustache-spring-view</a></li>
<li><a href="https://github.com/jknack/handlebars.java#springmvc">https://github.com/jknack/handlebars.java#springmvc</a></li>
</ul>
<br />
I have not used either support for Spring MVC, yet, though. In case you have used any of the mentioned options, please leave feedback to this blog.<br />
<br />
<br />Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com3tag:blogger.com,1999:blog-1699950446304666715.post-68864551879659794052014-09-15T16:30:00.000-04:002014-09-15T16:33:47.814-04:00Secure your AngularJS Apps with Spring Security and Spring Session<br />
A few days ago I was in the middle of preparing for my <a href="http://www.springone2gx.com/">Spring One 2GX 2014</a> talk <a href="http://www.slideshare.net/hillert/angularjs-with-spring-s2gx2014">Creating Modular Test-Driven SPAs</a> (Slideshare) with <b><a href="http://spring.io/projects">Spring</a></b> and <b><a href="https://angularjs.org/">AngularJS</a></b>. Part of the presentation is a demo application I created called <a href="https://github.com/ghillert/botanic-ng"><b>botanic-ng</b></a>. This application uses AngularJS on the client side and Spring (<a href="http://projects.spring.io/spring-boot/">Boot</a>) on the server-side. As I wanted to not merely create a simplistic toy app, I also intended to add authentication and (simple) authorization to the application.<br />
<br />
I did not want to go too crazy with this (e.g. implementing full-fledged <a href="http://oauth.net/2/">OAuth 2.0</a> integration). Nevertheless, I wanted to add (I hope) some meaningful security features inside my AngularJS application.<br />
<br />
<b>Disclaimer:</b> I am not a security expert. Proceed with caution as this solution may not provide enough security for your application needs.<br />
<br />
By chance I came across a demo application that Josh Long <a href="https://github.com/joshlong/boot-examples/tree/master/x-auth-security">created a while back</a>. That application, while using Spring Security, did not integrate with <a href="http://projects.spring.io/spring-security/">Spring Security</a> to the fullest extends, and I felt that I could improve upon that implementation using <b><a href="https://github.com/spring-projects/spring-session">Spring Session</a> </b>which is new project created by Spring Security lead <a href="https://github.com/rwinch">Rob Winch</a>.<br />
<br />
<b>Spring Session</b><br />
<br />
The <b>Servlet 3.0</b> Specification (<a href="https://jcp.org/en/jsr/detail?id=315">JSR 315</a>) introduced several ways to customize the handling of session cookies, for instance changing the name of the cookie (from the default JSESSIONID) and providing additional security relevant settings:<br />
<br />
<ul>
<li><a href="https://blog.whitehatsec.com/tag/jsessionid/">https://blog.whitehatsec.com/tag/jsessionid/</a></li>
<li><a href="https://www.owasp.org/index.php/HttpOnly">https://www.owasp.org/index.php/HttpOnly</a></li>
<li><a href="http://software-security.sans.org/blog/2010/08/11/security-misconfigurations-java-webxml-files">http://software-security.sans.org/blog/2010/08/11/security-misconfigurations-java-webxml-files</a></li>
</ul>
<br />
However, you're still pretty much bound to using cookies in order to store your Session IDs. For cases where you need more comprehensive flexibility for handling your sessions, <i>Spring Session</i> comes in quite handy and provides <a href="https://github.com/spring-projects/spring-session#benefits">numerous advantages</a>.<br />
<br />
By default <i>Spring Session</i> stores session information in Redis using the <a href="https://github.com/spring-projects/spring-session/blob/master/spring-session/src/main/java/org/springframework/session/data/redis/RedisOperationsSessionRepository.java">RedisOperationsSessionRepository</a>. Sessions expire by default after 30 minutes but this can be customized using the <b>setDefaultMaxInactiveInterval</b> property. Beyond Redis a <a href="https://github.com/spring-projects/spring-session/blob/master/spring-session/src/main/java/org/springframework/session/MapSessionRepository.java">MapSessionRepository</a> is also provided to allow for easy integration with e.g. <a href="http://hazelcast.org/">Hazelcast</a>.<br />
<br />
For my use-case, I wanted to expose the Session ID not via a standard cookies but via an HTTP header. Luckily, <i>Spring Session</i> provides various pluggable strategies to customize that behavior. As <i>Spring Session</i> works as a Filter you have to configure a <a href="https://github.com/spring-projects/spring-session/blob/master/spring-session/src/main/java/org/springframework/session/web/http/SessionRepositoryFilter.java">SessionRepositoryFilter</a>. On this filter you can set the used <a href="https://github.com/spring-projects/spring-session/blob/master/spring-session/src/main/java/org/springframework/session/web/http/HttpSessionStrategy.java">HttpSessionStrategy</a>. By default it uses the <b><a href="https://github.com/spring-projects/spring-session/blob/master/spring-session/src/main/java/org/springframework/session/web/http/CookieHttpSessionStrategy.java">CookieHttpSessionStrategy</a></b>. For my use-case, though, I am using the <b><a href="https://github.com/spring-projects/spring-session/blob/master/spring-session/src/main/java/org/springframework/session/web/http/HeaderHttpSessionStrategy.java">HeaderHttpSessionStrategy</a></b>, which by default stores the Session ID in an HTTP header called <b>x-auth-token</b> (This is customizable though).<br />
<br />
On the client-side in my <i>AngularJS</i> application, I am adding a HTTP header via <b><a href="https://docs.angularjs.org/api/ng/service/$http">$http</a></b> to every request.<br />
<br />
<div class="p1">
</div>
<div class="p1">
<span style="font-family: Courier New, Courier, monospace;">$http.defaults.headers.common['x-auth-token'] = user.token;</span></div>
<div class="p1">
<br /></div>
<div class="p1">
This is configured upon successful login through the <a href="https://github.com/ghillert/botanic-ng/blob/master/ui/app/scripts/controllers/login-controller.js">LoginController</a>. <b>Botanic-ng</b> submits the login credentials to the server, which in turn uses them to authenticate the user using <b>Spring Security </b>(<a href="https://github.com/ghillert/botanic-ng/blob/master/src/main/java/com/hillert/botanic/controller/AuthenticationController.java">AuthenticationController</a>) and if successful, the <a href="https://github.com/ghillert/botanic-ng/blob/master/src/main/java/com/hillert/botanic/controller/dto/AuthenticationToken.java">AuthenticationToken</a> containing the Session ID and user roles will be send back to the client.</div>
<div class="p1">
<br /></div>
<div class="p1">
The Session ID on the client is stored in memory only and if you refresh the client, the user must re-authenticate.</div>
<div class="p1">
<br /></div>
<div class="p1">
For the full source code, please see: </div>
<div class="p1">
<br /></div>
<div class="p1">
<a href="https://github.com/ghillert/botanic-ng">https://github.com/ghillert/botanic-ng</a></div>
<div class="p1">
<br /></div>
<br />
<br />Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com3tag:blogger.com,1999:blog-1699950446304666715.post-21325053154934690412014-09-13T10:34:00.001-04:002014-09-13T10:34:41.101-04:00Spring One 2GX 2014 - My session slidesHave not blogged in a while. Need to make a mental note to revive that. Just came back from <a href="http://www.springone2gx.com/">Spring One 2GX</a> 2014 in Dallas, TX. It's been a wonderful event and I learned a lot - From microservices to reactive streams. I also gave 2 presentations which I think were well received. For my <a href="https://angularjs.org/">AngularJS</a> with Spring (Boot) talk I had 140 attendees, yeah :-)<br />
<h3>
Creating Modular Test-Driven SPAs with Spring and AngularJS</h3>
<iframe allowfullscreen="" frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="//www.slideshare.net/slideshow/embed_code/38955409" style="border-width: 1px; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;" width="425"> </iframe> <br />
<div style="margin-bottom: 5px;">
<strong> <a href="https://www.slideshare.net/hillert/angularjs-with-spring-s2gx2014" target="_blank" title="Creating Modular Test-Driven SPAs with Spring and AngularJS">Creating Modular Test-Driven SPAs with Spring and AngularJS</a> </strong> from <strong><a href="https://www.slideshare.net/hillert" target="_blank">Gunnar Hillert</a></strong></div>
<br />
<h3>
Spring Batch Performance Tuning</h3>
<iframe allowfullscreen="" frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="//www.slideshare.net/slideshow/embed_code/39027965" style="border-width: 1px; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;" width="425"> </iframe> <br />
<div style="margin-bottom: 5px;">
<strong> <a href="https://www.slideshare.net/hillert/spring-batch-performance-tuning-s2gx2014" target="_blank" title="Spring Batch Performance Tuning">Spring Batch Performance Tuning</a> </strong> from <strong><a href="https://www.slideshare.net/hillert" target="_blank">Gunnar Hillert</a></strong> </div>
Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com0Omni Dallas Hotel, 650 South Griffin Street, Dallas, TX 75202, USA32.775542 -96.80404699999996932.773873 -96.806568499999969 32.777211 -96.801525499999968tag:blogger.com,1999:blog-1699950446304666715.post-66326490663382302752013-12-05T14:20:00.000-05:002013-12-05T14:20:13.414-05:00DevNexus 2014 - Feb 24-25 - Atlanta - 10+1 Tracks - 100 sessions<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
The preparations for <b>DevNexus 2014</b> are in full swing and we are targeting to have the biggest and boldest DevNexus developer conference ever. DevNexus will take place <b>February 24-25</b> at the <b>Cobb Galleria Centre</b> in <b>Atlanta, GA</b>. With the holiday season upon us, why not reward yourself with a DevNexus ticket?</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
Registration is now open at:<b> <a href="http://www.devnexus.com/" style="color: #1155cc;" target="_blank">http://www.devnexus.com</a></b></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
Best of all, DevNexus will not break your wallet. The <b>Early Bird Pass</b> is available for <b>$210</b> ($240 regular) and the Group Pass for groups of 5 or more is $210. We also have a $150 Student Pass available (Contact us for the code - info at ajug dot org). Keep in mind not to wait too long as DevNexus has sold out completely in the past couple of years.</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
This year we will offer <b>10 parallel tracks</b> + <b>1 workshop track</b> covering a wide spectrum of topics such as:</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<ul>
<li style="margin-left: 15px;">Java/JavaEE/Spring</li>
<li style="margin-left: 15px;">HTML5</li>
<li style="margin-left: 15px;">JavaScript</li>
<li style="margin-left: 15px;">Data + Integration</li>
<li style="margin-left: 15px;">Alternative Languages on the JVM</li>
<li style="margin-left: 15px;">User Experience</li>
<li style="margin-left: 15px;">Cloud</li>
<li style="margin-left: 15px;">Agile + Tools</li>
<li style="margin-left: 15px;">Mobile</li>
</ul>
</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
In total we will have almost <b>100 sessions for you! </b></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
Currently the call for papers is still under way and the response so far has been nothing short of phenomenal. Already we have started confirming a few speakers. We are excited to have <b>Brett Meyer</b>, a core <b>Hibernate</b> team member. <b>Mark Pollack</b>, <b>Spring Data</b> and <b>Spring XD</b> co-lead as well as <b>Rob Winch</b>, the lead developer for <b>Spring Security</b> will present as well. Furthermore, industry experts such as <b>Venkat Subramaniam</b> and <b>Peter Bell</b> are confirmed to speak. Over the next couple of weeks you will see an explosion of new speakers and sessions being added to the DevNexus website at:</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<a href="http://devnexus.com/s/speakers" style="color: #1155cc;" target="_blank">http://devnexus.com/s/speakers</a></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
Please check in often to see the progress! Also, we are <b>very excited to announce our first keynote presenter</b> who will fly in all the way from Germany: <b>Sven Peters</b> is a software geek working as an ambassador for <b>Atlassian</b>. He has been developing Java applications for over 12 years and leading small teams using lean methodologies. Sven likes effective software development and cares about the motivation of developers.</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
He will present:</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<b>How To Do Kick-Ass Software Development</b></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
With Kick-Ass Software Development you actually get stuff done. Feedback cycles are short, code quality is awesome and customers get the features they lust after. Less mangers managing, less testers testing and less IT-operators operating. The developers take the power back, making them much happier. Sound like paradise? It is! This session will show you how we do Kick-Ass Software Development at Atlassian. I will talk about how we: use pull requests for better code quality; collaborate fast to develop ideas; avoid meetings to get more stuff done; tighten our feedback loops to fail faster; shorten our release cycles; and work together happily on different continents. It's a great way to develop software and we think it can work in your company, too.</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
With this line-up of topics and many more to come, attending DevNexus should be a top priority - This is the South-East’s best, yet affordable, developer conference! We, the volunteers from the <b>Atlanta Java Users Group</b> would be delighted to see you all at DevNexus! Learn, network and have fun -</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
We would like to <b>thank all our Sponsors</b> that help us greatly to keep DevNexus super-affordable.</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<b>Platinum Sponsor:</b></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<ul>
<li style="margin-left: 15px;">ThoughtWorks - <a href="http://www.thoughtworks.com/" style="color: #1155cc;" target="_blank">http://www.thoughtworks.com/</a></li>
</ul>
</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<b>Gold Sponsors:</b></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<ul>
<li style="margin-left: 15px;">Compuware - <a href="http://www.compuware.com/" style="color: #1155cc;" target="_blank">http://www.compuware.com/</a></li>
<li style="margin-left: 15px;">inBloom - <a href="https://www.inbloom.org/" style="color: #1155cc;" target="_blank">https://www.inbloom.org/</a></li>
</ul>
</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<b>Silver Sponsors:</b></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<ul>
<li style="margin-left: 15px;">4t Networks - <a href="http://www.4tvirtual.com/" style="color: #1155cc;" target="_blank">http://www.4tvirtual.com/</a></li>
<li style="margin-left: 15px;">Altisource Labs - <a href="http://www.altisourcelabs.com/" style="color: #1155cc;" target="_blank">http://www.altisourcelabs.<wbr></wbr>com/</a></li>
<li style="margin-left: 15px;">Anteo Group - <a href="http://www.anteogroup.com/" style="color: #1155cc;" target="_blank">http://www.anteogroup.com/</a></li>
<li style="margin-left: 15px;">Apex Systems - <a href="http://www.apexsystemsinc.com/" style="color: #1155cc;" target="_blank">http://www.apexsystemsinc.<wbr></wbr>com/</a></li>
<li style="margin-left: 15px;">AppDynamics - <a href="http://www.appdynamics.com/" style="color: #1155cc;" target="_blank">http://www.appdynamics.com/</a></li>
<li style="margin-left: 15px;">Aspose - <a href="http://www.aspose.com/" style="color: #1155cc;" target="_blank">http://www.aspose.com/</a></li>
<li style="margin-left: 15px;">Coverity - <a href="http://www.coverity.com/" style="color: #1155cc;" target="_blank">http://www.coverity.com/</a></li>
<li style="margin-left: 15px;">LexisNexis - <a href="http://www.lexisnexis.com/" style="color: #1155cc;" target="_blank">http://www.lexisnexis.com/</a></li>
<li style="margin-left: 15px;">Sonatype - <a href="http://www.sonatype.com/" style="color: #1155cc;" target="_blank">http://www.sonatype.com/</a></li>
</ul>
</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<b>Cocktail Hour Sponsor:</b></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<ul>
<li style="margin-left: 15px;">Hunter Technical Resources - <a href="http://www.htrjobs.com/" style="color: #1155cc;" target="_blank">http://www.htrjobs.com/</a></li>
</ul>
</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
We are looking forward seeing you all in February!!!</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<b>Please register today at: <a href="http://www.devnexus.com/" style="color: #1155cc;" target="_blank">http://www.devnexus.com</a></b></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
If you have any questions let us know at info at <a href="http://ajug.org/" style="color: #1155cc;" target="_blank">ajug.org</a> and please follow</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
us on Twitter at <a href="http://twitter.com/devnexus" style="color: #1155cc;" target="_blank">http://twitter.com/devnexus</a> for news and updates.</div>
Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com0tag:blogger.com,1999:blog-1699950446304666715.post-72192252940268750112013-10-28T12:03:00.000-04:002013-10-28T12:03:10.213-04:00DevNexus 2014 - Atlanta (Feb 24-25) - Call for Papers<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
The <b>Atlanta Java Users Group</b> is in the middle of organizing its annual developer conference for 2014. </div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
We are excited to announce that the <b>Call for Papers</b> is active now. Please spread the word among your peers and if your are interested we would love if you submit session proposals for our conference at:</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<b><a href="http://devnexus.com/s/cfp" style="color: #1155cc;" target="_blank">http://devnexus.com/s/cfp</a></b></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
This is what we plan so far:</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<b>DevNexus 2014</b> is on <b>February 24-25</b> (Monday and Tuesday). We plan on having <b>1000+ attendees</b> with <b>10 parallel tracks</b> and 1 workshop track. This equates to:</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<ul>
<li style="margin-left: 15px;">90+ sessions (75min each)</li>
<li style="margin-left: 15px;">4 workshops</li>
<li style="margin-left: 15px;">2 keynotes (60 min each)</li>
</ul>
</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
Topic-wise we plan to cover the following:</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<ul>
<li style="margin-left: 15px;">Java/JavaEE/Spring</li>
<li style="margin-left: 15px;">HTML5 + JavaScript</li>
<li style="margin-left: 15px;">Data + Integration</li>
<li style="margin-left: 15px;">User Experience</li>
<li style="margin-left: 15px;">Alternative Languages on the JVM</li>
<li style="margin-left: 15px;">Cloud</li>
<li style="margin-left: 15px;">Agile</li>
<li style="margin-left: 15px;">Tools</li>
<li style="margin-left: 15px;">Mobile</li>
</ul>
</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
Here is a short promo video that we did during DevNexus 2013:</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/js5lHerz8L4?feature=player_embedded' frameborder='0'></iframe></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
If you have any questions, please ping me or the rest of the organizers at <b>info at ajug dot org</b>.</div>
Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com0Atlanta, GA, USA33.7489954 -84.387982433.3266004 -85.0334294 34.1713904 -83.7425354tag:blogger.com,1999:blog-1699950446304666715.post-23807745905594975142013-08-08T10:25:00.000-04:002013-08-08T10:28:40.664-04:00SpringOne2GX 2013 - Early-bird registrationJust a quick note to point out that <b>SpringOne2GX</b> is coming up next month in <b>Santa Clara (Sept 9-12)</b> and the early bird registration (save $200) expires tomorrow, Aug 9th.<br />
<br />
Therefore, please join us and register at: <b><a href="http://www.springone2gx.com/conference/santa_clara/2013/09/register">http://www.springone2gx.com/conference/santa_clara/2013/09/register</a></b><br />
<br />
In case you haven't been following the massive amount of activity that has been happening in the Spring community such as <b><a href="http://blog.springsource.org/2013/07/24/spring-framework-4-0-m2-websocket-messaging-architectures/">Spring 4.0</a></b>, <b><a href="https://github.com/SpringSource/spring-xd">Spring XD</a></b>, <b><a href="http://blog.springsource.org/2013/05/13/reactor-a-foundation-for-asynchronous-applications-on-the-jvm/">Spring Reactor</a></b>, <b><a href="http://blog.springsource.org/2013/08/06/spring-boot-simplifying-spring-for-everyone/">Spring Boot</a></b>, and much, much more (Please check <a href="http://blog.springsource.org/">http://blog.springsource.org</a> for some of the latest), I think it is fairly safe to say there will be a LOT of announcements and news this year!<br />
<br />
If you are involved with, or work with the <b>Spring framework</b>, <b>Grails</b>, <b>Groovy</b> - This will be a big one and it would be very worthwhile to be there!<br />
<br />
Furthermore, if you are interested in cloud/PaaS, the first ever <b>Cloud Foundry conference</b>, <b>Platform</b>, is co-hosted at the same venue on Sept 8-9 and registration for SpringOne means you get to go to that too, if you want. <a href="http://www.platformcf.com/">http://www.platformcf.com</a><br />
<br />
Just FYI - there is some crazy massive Cloud Foundry usage going on in China right now: <a href="http://www.wired.com/wiredenterprise/2013/07/cloudfoundry/">http://www.wired.com/wiredenterprise/2013/07/cloudfoundry/</a><br />
<br />
I will see you there!<br />
<br />Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com0tag:blogger.com,1999:blog-1699950446304666715.post-26101728597168632092013-04-22T09:40:00.000-04:002013-04-26T16:55:30.880-04:00Spring Integration STS Templates Updated - 1.0.0.M5<div>
We are proud to announce a new milestone release of the <a href="https://github.com/SpringSource/spring-integration-templates">Spring Integration Templates</a> version <b>1.0.0.M5</b> for <a href="http://www.springsource.org/sts">Spring Tool Suite</a> (STS). This release brings numerous fixes and enhancements as detailed below. If you are using the latest version of <a href="http://static.springsource.org/sts/nan/v320/NewAndNoteworthy.html">STS version 3.2</a>, the updated templates are automatically available to you. Just press the "Refresh" button under <i>File --> New --> Spring Template Project</i>.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgroazS4MpE_2RXkILfMUlWAl3JPV53rqVVcd6QYhyJyw9nu7gevXU5uoYlXgnb8C9XCCRPFwuQqYDBPmip4F7aHfWifHnoZ1oxRJi65HU1tNmysQ9uEMPPpHqnI1JZ67gV1RAvrCma1uHdeE0/s1600/sts-template-selection.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgroazS4MpE_2RXkILfMUlWAl3JPV53rqVVcd6QYhyJyw9nu7gevXU5uoYlXgnb8C9XCCRPFwuQqYDBPmip4F7aHfWifHnoZ1oxRJi65HU1tNmysQ9uEMPPpHqnI1JZ67gV1RAvrCma1uHdeE0/s400/sts-template-selection.png" width="350" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
If you are not fully familiar with the <i>STS</i> Template support, please see the original blog post including screencast at:</div>
<div>
<br /></div>
<div>
<a href="http://blog.springsource.org/2012/04/09/create-spring-integration-projects-using-sts/">http://blog.springsource.org/2012/04/09/create-spring-integration-projects-using-sts/</a></div>
<div>
<br /></div>
<div>
In this new release, we have updated the templates to the latest <a href="http://www.springintegration.org/">Spring Integration</a> version (<a href="http://www.springsource.org/node/4305">2.2.3.RELEASE</a>). Also, all templates will now warn if either the <a href="http://maven.apache.org/">Maven</a> support or the <a href="http://www.gradle.org/">Gradle</a> support are not available in the respective Eclipse environment. </div>
<div>
<br /></div>
<div>
In particular, we made numerous improvements to the <i>War</i> template as well as the <i>Adapter</i> template.<br />
<br />
<h4>
Spring Integration War Template</h4>
</div>
<div>
The War template now provides a much better (prettier) UI using <a href="http://twitter.github.io/bootstrap/">Bootstrap</a>. If you have not used Bootstrap, yet - It is basically the new UI baseline. It is very simple to use and even prototypes, presentation demos etc. shall not look like 1990s websites any longer. </div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzsKEbPxXUIkwXDNSTFqrYYMxkHngzfaG1GrxFCDvRE_J5bv-4LDLFuAgecNZDi0F9VSmEvzYCA3enex9sUCCwI61HkRrXziAwJ-RxyxLZFH1_JrUYvs7aFF7i81yLBOFziRwTysK7LweWXFk/s1600/sts-template-twitter.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="207" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzsKEbPxXUIkwXDNSTFqrYYMxkHngzfaG1GrxFCDvRE_J5bv-4LDLFuAgecNZDi0F9VSmEvzYCA3enex9sUCCwI61HkRrXziAwJ-RxyxLZFH1_JrUYvs7aFF7i81yLBOFziRwTysK7LweWXFk/s400/sts-template-twitter.png" width="400" /></a></div>
<h4>
<span style="font-weight: normal;">The updated template also uses </span><a href="https://code.google.com/p/wro4j/" style="font-weight: normal;">wro4j</a><span style="font-weight: normal;"> to provide more efficient bundling and minifiacation of CSS and JavaScript resources. This allows the </span><i style="font-weight: normal;">War</i><span style="font-weight: normal;"> template to achieve a fairly decent </span><a href="http://developer.yahoo.com/yslow/" style="font-weight: normal;">YSlow</a><span style="font-weight: normal;"> rating of 97.</span></h4>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnrg0-1KtsM7dUJDVdAK6XO9qU33XZGG9bEqw7jib_TKttdTbF-TF7wJPP-hvkyxIhU62l8tZmj_yuixm4KUXmD8OM3T5K1t0uh7jXnRxuGrryK4IHi6z6eIKulCReWOE4iQBJ2ibshMH4_pA/s1600/sts-template-twitter-yslow.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnrg0-1KtsM7dUJDVdAK6XO9qU33XZGG9bEqw7jib_TKttdTbF-TF7wJPP-hvkyxIhU62l8tZmj_yuixm4KUXmD8OM3T5K1t0uh7jXnRxuGrryK4IHi6z6eIKulCReWOE4iQBJ2ibshMH4_pA/s400/sts-template-twitter-yslow.png" width="400" /></a></div>
<div>
<br /></div>
<h4>
Spring Integration Adapter Template</h4>
<div>
Another area of improvements for this release was the <i>Adapter</i> Template. In 2012, we introduced the <a href="https://github.com/SpringSource/spring-integration-extensions">Spring Integration Extensions</a> project, to further encourage community contributions to the Spring Integration project. In order to improve the starting experience, we also introduced the Spring Integration Adapter Template for STS back then.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0_UeYRsoffyV3pE49Mv3vFd6OZ87gz4fnQVze5-r-Xy1HSIAIrVU8_cv0BNsAQa-Tv-k8tS4AvRlcwBJGSDwpKrNL2NRaIHVubWBJbc6FETt66VpKRfSWjKy2ndz_gpENZbDEtFj9a9WUIsM/s1600/sts-template-custom-adapter.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0_UeYRsoffyV3pE49Mv3vFd6OZ87gz4fnQVze5-r-Xy1HSIAIrVU8_cv0BNsAQa-Tv-k8tS4AvRlcwBJGSDwpKrNL2NRaIHVubWBJbc6FETt66VpKRfSWjKy2ndz_gpENZbDEtFj9a9WUIsM/s400/sts-template-custom-adapter.png" width="321" /></a></div>
<div>
<br /></div>
<div>
<br />
For a detailed overview, please checkout the original blog post introducing the Spring Integration Extensions project as well the <i>Adapter</i> Template:</div>
<div>
<br /></div>
<div>
<a href="http://blog.springsource.org/2012/08/23/spring-integration-extensions/">http://blog.springsource.org/2012/08/23/spring-integration-extensions/</a></div>
<div>
<br /></div>
<div>
For the <b>1.0.0.M5</b> milestone, we upgraded the project to <a href="http://www.gradle.org/docs/1.5/release-notes">Gradle 1.5</a> and also upgraded all project dependencies to the latest release. As a minor enhancement, the user provided version number will now also set the version numbers for the XML Schemas (Which provide the XML namespace support). </div>
<div>
<br /></div>
<div>
I hope that the Spring Integration STS Templates are helpful to you, be it while learning and exploring Spring Integration, to kickstart new Spring Integration projects or to start developing new extensions for Spring Integration. If you see any issues, please let us know either in <a href="https://jira.springsource.org/browse/INTTEMPLATES">Jira</a> or the <a href="http://forum.springsource.org/forumdisplay.php?42-Integration">community forums</a>.</div>
<div>
<br /></div>
Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com0tag:blogger.com,1999:blog-1699950446304666715.post-88998290423827878822013-02-04T09:49:00.000-05:002013-02-04T09:49:05.004-05:00DevNexus 2013 Registration closing on 2/5/13 - Only 50 tickets left<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">With two weeks to go and 800 people attending we have only 50 tickets left for DevNexus 2013. The support from the community has been incredible and we will be closing registration on Tuesday evening, so if you are coming and have not registered, yet, now would be the time...</span><br />
<div dir="ltr" style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<div style="margin-bottom: 0.0001pt;">
</div>
<ul>
<li style="margin-left: 15px;">We have 8 incredible tracks with 50 speakers covering;</li>
<li style="margin-left: 15px;">HTML5 + JavaScript (Backbone.js, Bootstrap, CoffeeScript, Canvas, IndexedDB, WebSocket, LESS)</li>
<li style="margin-left: 15px;">Mobile Development (PhoneGap, Android, Titanium, Mobile Web, AeroGear)</li>
<li style="margin-left: 15px;">Data + Integration (MongoDB, Storm, Spring Integration + Batch, Ehcache, JPA)</li>
<li style="margin-left: 15px;">Java/JavaEE/Spring (Java 8, Java EE 7+8, Concurrent Programming)</li>
<li style="margin-left: 15px;">Web (Play, REST, Spring MVC)</li>
<li style="margin-left: 15px;">Alternative Languages (Groovy, Scala, Clojure)</li>
<li style="margin-left: 15px;">Cloud (Cloud Foundry, AWS, MS Azure)</li>
<li style="margin-left: 15px;">Agile + Tools (Git, Gradle, XP, Kanban, Continuous Delivery, Vagrant)</li>
</ul>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="margin-bottom: 0.0001pt;">
Adding to the fun, we will have a happy hour sponsored by eHire Labs, most of our sponsors will be raffling off cool stuff and we will be giving away a MacBook Air, Nexus 10 tablet and an unlocked Samsung Galaxy SIII in the raffle. <a href="http://devnexus.com/s/index" style="color: #1155cc;" target="_blank">http://devnexus.com/s/index</a></div>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="margin-bottom: 0.0001pt;">
<br /></div>
<div style="margin-bottom: 0.0001pt;">
A big thank you to all our sponsors without whom we would not be able to put on this event for such an incredibly affordable price.<br />
<br /></div>
<div style="margin-bottom: 0.0001pt;">
<b><u>Gold Sponsors:</u></b></div>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="margin-bottom: 0.0001pt;">
</div>
<ul>
<li style="margin-left: 15px;">Compuware - <a href="http://www.compuware.com/" style="color: #1155cc;" target="_blank">http://www.compuware.com/</a> </li>
<li style="margin-left: 15px;">IntercontinentalExchange (ICE) - <a href="https://www.theice.com/" style="color: #1155cc;" target="_blank">https://www.theice.com/</a> </li>
<li style="margin-left: 15px;">SpringSource, a division of VMware - <a href="http://www.springsource.com/" style="color: #1155cc;" target="_blank">http://www.springsource.com/</a> </li>
<li style="margin-left: 15px;">Terracotta - <a href="http://terracotta.org/" style="color: #1155cc;" target="_blank">http://terracotta.org/</a> </li>
</ul>
<br />
<div style="margin-bottom: 0.0001pt;">
<b><u>Silver Sponsors:</u></b></div>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="margin-bottom: 0.0001pt;">
</div>
<ul>
<li style="margin-left: 15px;">4t Networks - <a href="http://www.4tvirtual.com/" style="color: #1155cc;" target="_blank">http://www.4tvirtual.com/</a></li>
<li style="margin-left: 15px;">Actuate - <a href="http://www.actuate.com/" style="color: #1155cc;" target="_blank">http://www.actuate.com/</a></li>
<li style="margin-left: 15px;">Anteo Group - <a href="http://www.anteogroup.com/" style="color: #1155cc;" target="_blank">http://www.anteogroup.com/</a></li>
<li style="margin-left: 15px;">Apex Systems - <a href="http://www.apexsystemsinc.com/" style="color: #1155cc;" target="_blank">http://www.apexsystemsinc.com/</a></li>
<li style="margin-left: 15px;">AppDynamics - <a href="http://www.appdynamics.com/" style="color: #1155cc;" target="_blank">http://www.appdynamics.com/</a></li>
<li style="margin-left: 15px;">Bridge2 Solutions - <a href="http://www.bridge2solutions.com/" style="color: #1155cc;" target="_blank">http://www.bridge2solutions.<wbr></wbr>com/</a></li>
<li style="margin-left: 15px;">Creative Mischief - <a href="http://www.creative-mischief.com/" style="color: #1155cc;" target="_blank">http://www.creative-mischief.<wbr></wbr>com/</a></li>
<li style="margin-left: 15px;">Dimensional Thinking - <a href="http://www.dtglobalstaffing.com/" style="color: #1155cc;" target="_blank">http://www.dtglobalstaffing.<wbr></wbr>com/</a></li>
<li style="margin-left: 15px;">eHire Labs - <a href="http://ehirelabs.com/" style="color: #1155cc;" target="_blank">http://ehirelabs.com/</a></li>
<li style="margin-left: 15px;">GitHub - <a href="http://www.github.com/" style="color: #1155cc;" target="_blank">http://www.github.com/</a></li>
<li style="margin-left: 15px;">Google - <a href="http://www.google.com/" style="color: #1155cc;" target="_blank">http://www.google.com/</a></li>
<li style="margin-left: 15px;">inComm - <a href="http://www.incomm.com/" style="color: #1155cc;" target="_blank">http://www.incomm.com/</a></li>
<li style="margin-left: 15px;">JBoss - <a href="http://www.jboss.com/" style="color: #1155cc;" target="_blank">http://www.jboss.com/</a></li>
<li style="margin-left: 15px;">Lancope - <a href="http://www.lancope.com/" style="color: #1155cc;" target="_blank">http://www.lancope.com/</a></li>
</ul>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="margin-bottom: 0.0001pt;">
<br /></div>
<div style="margin-bottom: 0.0001pt;">
<b><u>Cocktail Hour Sponsor:</u></b></div>
<div style="margin-bottom: 0.0001pt;">
</div>
<ul>
<li style="margin-left: 15px;"> eHire Labs - <a href="http://ehirelabs.com/" style="color: #1155cc;" target="_blank">http://ehirelabs.com/</a></li>
</ul>
<div>
<div dir="ltr">
<div>
<br /></div>
<div>
<br /></div>
</div>
</div>
</div>
Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com0tag:blogger.com,1999:blog-1699950446304666715.post-45629334207815626402013-01-17T11:43:00.003-05:002013-01-17T11:43:46.631-05:00DevNexus 2013 - Schedule Published<br />
<br />
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
<b>DevNexus 2013</b> is only 4 weeks away and will take place <b>February 18-19</b> at the <b>Cobb Galleria</b> Centre in <b>Atlanta, GA</b>. The past days and weeks, we have been super-busy organizing and confirming the best speakers of our industry. <b>Finally, we are now happy to announce the preliminary schedule for DevNexus 2013 at:</b></div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
<b><a href="http://devnexus.com/s/devnexus2013/schedule" style="color: #1155cc;">http://devnexus.com/s/devnexus2013/schedule</a></b></div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
This year will mark our biggest DevNexus conference event, yet! Compared to last year, we added 2 more tracks to the conference, bringing the total to <b>8 tracks</b>. <b>40 speakers</b> will deliver <b>71 sessions</b> equipping you with the critical knowledge to take your career to the next level. This also includes <b>2 wonderful keynote sessions</b> by Neal Ford and Ben Evans.</div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
As in prior years, we will cover a wide variety of crucial topics and we will have dedicated tracks on:</div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
<ul>
<li><b>HTML5 + JavaScript</b> (Backbone.js, Bootstrap, CoffeeScript, Canvas, IndexDB, WebSockets, LESS)</li>
<li><b>Mobile Development</b> (PhoneGap, Android, Titanium, Mobile Web, AeroGear)</li>
<li><b>Data + Integration</b> (MongoDB, Storm, Spring Integration + Batch, Ehcache, JPA)</li>
<li><b>Java/JavaEE/Spring</b> (Java 8, Java EE 7+8, Concurrent Programming)</li>
<li><b>Web</b> (Play, REST, Spring MVC)</li>
<li><b>Alternative Languages</b> (Groovy, Scala, Clojure)</li>
<li><b>Cloud</b> (Cloud Foundry, AWS, MS Azure)</li>
<li><b>Agile + Tools</b> (Git, Gradle, XP, Kanban, Continuous Delivery, Vagrant)</li>
</ul>
</div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
With this line-up of topics, attending DevNexus should be a priority - This is also the South-East’s best, yet affordable, developer conference! We, the volunteers from the Atlanta Java Users Group would be delighted to see you all at DevNexus! Learn, network and have fun -</div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
<b>Please register today at: <a href="http://www.devnexus.com/" style="color: #1155cc;">http://www.devnexus.com</a></b></div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
We would like to thank all our Sponsors that help us greatly to keep DevNexus super-affordable (<b>$195 group-ticket / $220 regular ticket</b>). </div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
<b>Gold Sponsors:</b></div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
<ul>
<li>SpringSource, a division of VMware - <a href="http://www.springsource.com/">http://www.springsource.com/</a></li>
<li>Terracotta - <a href="http://terracotta.org/">http://terracotta.org/</a></li>
<li>IntercontinentalExchange (ICE) - <a href="https://www.theice.com/careers.jhtml">https://www.theice.com/careers.jhtml</a></li>
</ul>
</div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
<b>Silver Sponsors:</b></div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
<ul>
<li>AppDynamics - <a href="http://www.appdynamics.com/">http://www.appdynamics.com/</a></li>
<li>Anteo Group - <a href="http://www.anteogroup.com/">http://www.anteogroup.com/</a></li>
<li>Apex Systems - <a href="http://www.apexsystemsinc.com/">http://www.apexsystemsinc.com/</a></li>
<li>Creative Mischief - <a href="http://www.creative-mischief.com/">http://www.creative-mischief.com/</a></li>
<li>Dimensional Thinking - <a href="http://www.dtglobalstaffing.com/">http://www.dtglobalstaffing.com/</a></li>
<li>eHire Labs - <a href="http://ehirelabs.com/">http://ehirelabs.com/</a></li>
<li>GitHub - <a href="http://www.github.com/">http://www.github.com/</a></li>
<li>Google - <a href="http://www.google.com/">http://www.google.com/</a></li>
<li>inComm - <a href="http://www.incomm.com/">http://www.incomm.com/</a></li>
<li>JBoss - <a href="http://www.jboss.com/">http://www.jboss.com/</a></li>
<li>4t Networks - <a href="http://www.4tvirtual.com/">http://www.4tvirtual.com/</a></li>
<li>Bridge2 Solutions - <a href="http://www.bridge2solutions.com/">http://www.bridge2solutions.com/</a></li>
</ul>
</div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
<b>Cocktail Hour Sponsor:</b></div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
<ul>
<li>eHire Labs - <a href="http://ehirelabs.com/">http://ehirelabs.com/</a></li>
</ul>
</div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
We are looking forward seeing you all in February!!!</div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
PS:</div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial; font-size: small;">
If you have any question let us know at info at ajug.org and please follow us on Twitter at <a href="http://twitter.com/devnexus" style="color: #1155cc;">http://twitter.com/devnexus</a> for news and updates.</div>
<br />
Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com0tag:blogger.com,1999:blog-1699950446304666715.post-40432971711666349242012-11-21T16:02:00.000-05:002012-11-21T16:02:27.964-05:00DevNexus 2013 - Feb 18/19 - Registration is Open<br />
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<span style="font-size: 12.727272033691406px;">The Atlanta Java Users Group is delighted to announce that</span><span style="font-size: 12.727272033691406px;"> </span><b style="font-size: 12.727272033691406px;">registration for DevNexus 2013 is now open</b><span style="font-size: 12.727272033691406px;">. In order to reserve your ticket, please go to:</span></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<a href="http://www.devnexus.com/" style="color: #1155cc;" target="_blank"><b>http://www.devnexus.com/</b></a></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<b>DevNexus 2013</b> will be held on Monday, <b>February 18th</b> and Tuesday, <b>February 19th</b> at the <b>Cobb Galleria Centre</b> in <b>Atlanta, GA</b>. We have already confirmed many wonderful speakers, representing the who's who in our industry. They will be covering a wide array of crucial technology topics such as:</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<ul>
<li style="margin-left: 15px;">Java and JVM Languages (incl. Clojure + Scala)</li>
<li style="margin-left: 15px;">Cloud, Big Data and NoSQL</li>
<li style="margin-left: 15px;">Web (HTML5, JavaScript)</li>
<li style="margin-left: 15px;">Mobile (Android, Hybrid, Mobile Web)</li>
<li style="margin-left: 15px;">Methodologies, Architecture, Tools and Security</li>
</ul>
</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
In addition to providing great content for Java/JVM developers, DevNexus is an awesome networking opportunity. This event attracts Java/JVM talent from diverse backgrounds, be it large corporations, consulting organizations or independent technology connoisseurs. You will have an opportunity to discover what other development teams are using as their favorite tools and practices.</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<b>Why should you attend DevNexus 2013:</b></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<ul>
<li style="margin-left: 15px;"><b>Best Value</b>: <b>$195</b> Early Bird price (until Jan 15) for two full days of technology immersion and camaraderie (group+student discounts available).</li>
<li style="margin-left: 15px;">Ask questions to world-class experts and fellow developers</li>
<li style="margin-left: 15px;">Learn how to move your applications into the cloud </li>
<li style="margin-left: 15px;">Learn Agile Best Practices & Tools </li>
<li style="margin-left: 15px;">Learn more about core Java topics as well as other languages on the JVM</li>
<li style="margin-left: 15px;">Learn more about building rich (mobile) web-application applications using HTML5</li>
<li style="margin-left: 15px;">Hear about the latest developments from JBoss, SpringSource and Typesafe</li>
</ul>
</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
We have already lined-up some impressive speakers, with many more to be announced in the upcoming weeks:</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<ul>
<li style="margin-left: 15px;">Jeremy Deane</li>
<li style="margin-left: 15px;">Hans Dockter</li>
<li style="margin-left: 15px;">Ben Evans</li>
<li style="margin-left: 15px;">Mark Fisher</li>
<li style="margin-left: 15px;">Neil Ford</li>
<li style="margin-left: 15px;">Andrew Fuqua</li>
<li style="margin-left: 15px;">David Geary</li>
<li style="margin-left: 15px;">Wesley Hales</li>
<li style="margin-left: 15px;">Stuart Halloway</li>
<li style="margin-left: 15px;">Ken Kousen</li>
<li style="margin-left: 15px;">Josh Long</li>
<li style="margin-left: 15px;">Matthew McCullough</li>
<li style="margin-left: 15px;">Pratik Patel</li>
<li style="margin-left: 15px;">Reza Rahman</li>
<li style="margin-left: 15px;">Nate Schutta</li>
<li style="margin-left: 15px;">Venkat Subramaniam</li>
<li style="margin-left: 15px;">James Ward</li>
</ul>
</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
Fore more details regarding speakers please visit:</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<b><a href="http://www.devnexus.com/s/speakers" style="color: #1155cc;" target="_blank">http://www.devnexus.com/s/<wbr></wbr>speakers</a></b></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
We would like to <b>welcome 2 new DevNexus sponsors</b>: </div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<b>Silver Sponsors</b></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
- eHire Labs - <a href="http://ehirelabs.com/" style="color: #1155cc;" target="_blank">http://ehirelabs.com/</a></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
- AppDynamics - <a href="http://www.appdynamics.com/" style="color: #1155cc;" target="_blank">http://www.appdynamics.com/</a></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<b>Cocktail Hour Sponsor</b></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
- eHire Labs - <a href="http://ehirelabs.com/" style="color: #1155cc;" target="_blank">http://ehirelabs.com/</a></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
We also would like to thank our other AJUG/DevNexus sponsors for their support in making DevNexus a success. </div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<ul>
<li style="margin-left: 15px;"><span style="border-collapse: collapse;">Anteo Group (<a href="http://www.anteogroup.com/" style="color: #0000cc;" target="_blank">http://www.anteogroup.com</a>)</span></li>
<li style="margin-left: 15px;"><span style="border-collapse: collapse;">Apex Systems (<a href="http://www.apexsystemsinc.com/" style="color: #1155cc;" target="_blank">http://www.apexsystemsinc.<wbr></wbr>com/</a>)</span></li>
<li style="margin-left: 15px;"><span style="border-collapse: collapse;">GCA and Oracle University (<a href="http://www.gca.net/oracle" style="color: #1155cc;" target="_blank">http://www.gca.net/oracle</a>)</span></li>
<li style="margin-left: 15px;"><span style="border-collapse: collapse;">inComm (<a href="http://www.incomm.com/" style="color: #1155cc;" target="_blank">http://www.incomm.com/</a>)</span></li>
<li style="margin-left: 15px;"><span style="border-collapse: collapse;">Intercontinental Exchange (ICE) (<a href="https://www.theice.com/careers.jhtml" style="color: #0000cc;" target="_blank">https://www.theice.com/<wbr></wbr>careers.jhtml</a>)</span></li>
<li style="margin-left: 15px;"><span style="border-collapse: collapse;">JBoss (<a href="http://www.jboss.com/" style="color: #0000cc;" target="_blank">http://www.jboss.com</a>)</span></li>
<li style="margin-left: 15px;"><span style="border-collapse: collapse;">SpringSource, a division of VMware (<a href="http://www.springsource.com/" style="color: #1155cc;" target="_blank">http://www.springsource.com/</a>)</span></li>
<li style="margin-left: 15px;">The Intersect Group (<a href="http://www.theintersectgroup.com/" style="color: #0000cc;" target="_blank">http://www.theintersectgroup.<wbr></wbr>com</a>)</li>
<li style="margin-left: 15px;"><span style="border-collapse: collapse;">Terracotta </span><span style="border-collapse: collapse;">(<a href="http://www.terracotta.org/" style="color: #0000cc;" target="_blank">http://www.<wbr></wbr>terracotta.org/</a>)</span></li>
<li style="margin-left: 15px;">Turner (<a href="http://www.turnerjobs.com/" style="color: #1155cc;" target="_blank">http://www.turnerjobs.com/</a>)</li>
<li style="margin-left: 15px;">4t Networks (<a href="http://www.4tvirtual.com/" style="color: #0000cc;" target="_blank">http://www.4tvirtual.com</a>)</li>
</ul>
</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
We hope to see you all at DevNexus, and <b>please register</b> as soon as possible for this incredibly valuable event at:</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<b><a href="http://www.devnexus.com/" style="color: #1155cc;" target="_blank">http://www.devnexus.com/</a></b></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.727272033691406px;">
(We have sold out early in prior years)</div>
Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com02 Galleria Pkwy, Galleria Specialty Mall, Atlanta, GA 30339, USA33.883884 -84.46778333.882236500000005 -84.470250499999992 33.8855315 -84.4653155tag:blogger.com,1999:blog-1699950446304666715.post-34127213193587364622012-10-05T13:55:00.000-04:002012-10-05T13:55:36.312-04:00What's New in Spring Integration 2.2 - JPA SupportI have just published a new blog posting, which <span style="background-color: white; color: #484848; font-family: arial, helvetica, clean, sans-serif; font-size: 15px; line-height: 18.383333206176758px;">introduces the new <i>Java Persistence API</i> (<b>JPA</b>) support that is provided with <b><a href="http://www.springsource.org/spring-integration/">Spring Integration</a> 2.2</b>. This is the third part in a series of blog posts highlighting some of the new features available in Spring Integration 2.2 following the recent release of <a href="http://www.springsource.org/node/3665">Release Candidate 1</a>. Please head over to the SpringSource blog to get the details:</span><br />
<span style="background-color: white; color: #484848; font-family: arial, helvetica, clean, sans-serif; font-size: 15px; line-height: 18.383333206176758px;"><br /></span>
<span style="background-color: white; font-size: 15px; line-height: 18.383333206176758px;"><span style="color: #484848; font-family: arial, helvetica, clean, sans-serif;"><a href="http://blog.springsource.org/2012/10/05/whats-new-in-spring-integration-2-2-part-3-jpa-support/">http://blog.springsource.org/2012/10/05/whats-new-in-spring-integration-2-2-part-3-jpa-support/</a></span></span><br />
<span style="background-color: white; font-size: 15px; line-height: 18.383333206176758px;"><span style="color: #484848; font-family: arial, helvetica, clean, sans-serif;"><br /></span></span>Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com1tag:blogger.com,1999:blog-1699950446304666715.post-18695055800573042372012-08-23T18:07:00.000-04:002012-08-23T18:07:02.004-04:00Community-Driven Spring Integration ExtensionsI just published a new blog posting over at the SpringSource blog. This blog posting announces the new <a href="https://github.com/SpringSource/spring-integration-extensions">Spring Integration Extensions</a> repository and also describes the new Adapter Template for SpringSource Tool Suite (STS). Please check it out at:<br />
<br />
<a href="http://blog.springsource.org/2012/08/23/spring-integration-extensions/">http://blog.springsource.org/2012/08/23/spring-integration-extensions/</a>Gunnar Hillerthttp://www.blogger.com/profile/12757936011493339624noreply@blogger.com0