<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
<channel>
  <title>reucon blogs</title>
  <link>http://blogs.reucon.com/</link>
  <description />
  <language>en</language>
  <copyright>Various</copyright>
  <lastBuildDate>Fri, 20 Nov 2009 02:57:00 GMT</lastBuildDate>
  <generator>Pebble (http://pebble.sourceforge.net)</generator>
  <docs>http://backend.userland.com/rss</docs>
  
  
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/reucon" /><feedburner:info uri="reucon" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
    <title>Book Review: Modular Java</title>
    <link>http://feedproxy.google.com/~r/reucon/~3/9X5Vrl-64RE/book_review_modular_java.html</link>
    
      
        <description>&lt;p&gt;
&lt;a href="http://www.amazon.de/gp/product/1934356409?ie=UTF8&amp;tag=reuconcom-21&amp;linkCode=xm2&amp;camp=1638&amp;creativeASIN=1934356409"&gt;&lt;img src="/srt/images/modular_java.gif" vspace="5" hspace="5" align="right"/&gt;&lt;/a&gt;
&lt;a href="http://www.amazon.de/gp/product/1934356409?ie=UTF8&amp;tag=reuconcom-21&amp;linkCode=xm2&amp;camp=1638&amp;creativeASIN=1934356409"&gt;Modular Java&lt;/a&gt; by &lt;a href="http://twitter.com/habuma"&gt;Craig Walls&lt;/a&gt; is a book on building modular Java applications on &lt;a href="http://www.osgi.org/"&gt;OSGi&lt;/a&gt; platforms.
&lt;/p&gt;&lt;p&gt;
Published in the &lt;a href="http://pragprog.com/"&gt;Pragmatic Bookshelf&lt;/a&gt; series it keeps up to the standards of that great series by presenting content that matters in a format that makes you try it out immediately. 
&lt;/p&gt;&lt;p&gt;
OSGi's &lt;a href="http://adaptevolve.blogspot.com/2009/10/osgi-value-proposition-in-recent-blog.html"&gt;value proposition&lt;/a&gt; is to keep complexity in software products manageable. It keeps modules isolated from each other and encourages loose coupling through publishing and consuming services. You can think of OSGi as an incarnation of service oriented archietcure (SOA) within the Java Virtual Machine. OSGi has its roots in the embedded systems environment and became popular for desktop applications with &lt;a href="http://www.eclipse.org"&gt;Eclipse&lt;/a&gt; using it as their core infrastructure. From embedded to desktop OSGi is currently coming to the server side.
&lt;/p&gt;&lt;p&gt;
Craig's book introduces the basics of OSGi, shows how it isolates modules by its unique approach to classpath handling and gives you an overview of the concept of OSGi services. One easy to follow example application is used consistently throughout the book to show the various aspects.&lt;br/&gt;
Most of the time the book uses &lt;a href="http://www.eclipse.org/equinox/"&gt;Equinox&lt;/a&gt; as runtime but &lt;a href="http://felix.apache.org/"&gt;Felix&lt;/a&gt; and &lt;a href="http://www.knopflerfish.org/"&gt;Knopflerfish&lt;/a&gt; are also mentioned. For building bundles Modular Java makes use of &lt;a href="http://wiki.ops4j.org/display/ops4j/Pax"&gt;Pax&lt;/a&gt; especially &lt;a href="http://wiki.ops4j.org/display/paxconstruct/Pax+Construct"&gt;Pax Construct&lt;/a&gt;. It does not mention &lt;a href="http://www.springsource.org/bundlor"&gt;Bundlor&lt;/a&gt;, &lt;a href="http://www.aqute.biz/Code/Bnd"&gt;Bnd&lt;/a&gt; or &lt;a href="http://docs.codehaus.org/display/M2ECLIPSE/Tycho+user+docs"&gt;Tycho&lt;/a&gt; in depth. Especially the &lt;a href="http://maven.apache.org"&gt;Maven&lt;/a&gt; based Tycho stack sounds really promising so it's unfortunate that it isn't covered. I guess however this is just an attribution to the current speed of development in the OSGi tooling space.
&lt;/p&gt;&lt;p&gt;
&lt;a href="http://www.springsource.org/osgi"&gt;Spring Dynamic Modules&lt;/a&gt; are an attempt to bring the principles of Spring Framework to OSGi. In the spirit of Spring Framework Dynamic Modules (DM) build on proven solutions (OSGi in this case) and make them easier to use. They eliminate a lot of boilerplate code that is normally require to handle OSGi services that may appear and disappear at any time. Spring-DM also provides integration with Spring Application Contexts and has support for web applications through an extender. Spring-DM is covered really well by the book. An appendix describes the new OSGi Blueprint Services that are an attempt to standardize the ideas of Spring-DM. Spring's new &lt;a href="http://www.springsource.com/products/dmserver"&gt;dm Server&lt;/a&gt; is not covered.
&lt;/p&gt;&lt;p&gt;
The book focuses on the core concepts and shows the benefits of using OSGi for application development. The target audience are experienced Java developers. It is very well written, easy and fun to read and serves as a great introduction. I recommend the book to Java developers who consider making use of OSGi in future projects.
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/reucon/~4/9X5Vrl-64RE" height="1" width="1"/&gt;</description>
      
      
    
    
    
    <comments>http://blogs.reucon.com/srt/2009/11/20/book_review_modular_java.html#comments</comments>
    <guid isPermaLink="false">http://blogs.reucon.com/srt/2009/11/20/book_review_modular_java.html</guid>
    <pubDate>Fri, 20 Nov 2009 02:57:00 GMT</pubDate>
  <feedburner:origLink>http://blogs.reucon.com/srt/2009/11/20/book_review_modular_java.html</feedburner:origLink></item>
  
  <item>
    <title>Asterisk-Java 1.0.0.M3 Released</title>
    <link>http://feedproxy.google.com/~r/reucon/~3/zCixMn9ML4Q/asterisk_java_1_0_0_m3_released.html</link>
    
      
        <description>&lt;p&gt;
We have released milestone 3 of Asterisk-Java 1.0.0. Next to a few bug fixes this new milestone makes Asterisk-Java OSGi compliant, adds support for the modern &lt;a href="http://www.slf4j.org/"&gt;SLF4J&lt;/a&gt; logging framework and makes debugging easier through &lt;a href="http://blogs.reucon.com/asterisk-java/2009/10/17/built_in_support_for_network_tracing.html"&gt;built-in support for network tracing&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;
You can browse the full &lt;a href="https://secure.reucon.net/issues/secure/ReleaseNote.jspa?projectId=10110&amp;version=10359"&gt;changelog&lt;/a&gt; to see which issues have been resolved.
&lt;/p&gt;&lt;p&gt;
The new release is available as a plain jar and a zip distribution at &lt;a href="http://asterisk-java.org/download/1.0.0.M3"&gt;http://asterisk-java.org/download/1.0.0.M3&lt;/a&gt;. You can also browse the &lt;a href="http://asterisk-java.org/1.0.0.M3/"&gt;documentation&lt;/a&gt; and &lt;a href="http://asterisk-java.org/1.0.0.M3/apidocs/"&gt;javadocs&lt;/a&gt; online.
&lt;/p&gt;&lt;p&gt;
The new milestone is also available through Maven:
&lt;/p&gt;
&lt;pre class="brush: xml;"&gt;
&amp;lt;dependency&amp;gt;
  &amp;lt;groupId&amp;gt;org.asteriskjava&amp;lt;/groupId&amp;gt;
  &amp;lt;artifactId&amp;gt;asterisk-java&amp;lt;/artifactId&amp;gt;
  &amp;lt;version&amp;gt;1.0.0.M3&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Please report back any issues you encounter while using milestone 3 through our &lt;a href="https://secure.reucon.net/issues/browse/AJ"&gt;issue tracker&lt;/a&gt;. If you like to have a certain feature or bug fix included in the next version vote for it in Jira.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;References&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://asterisk-java.org/download/1.0.0.M3"&gt;Download Asterisk-Java 1.0.0.M3&lt;/a&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/reucon/~4/zCixMn9ML4Q" height="1" width="1"/&gt;</description>
      
      
    
    
    
    <comments>http://blogs.reucon.com/asterisk-java/2009/10/19/asterisk_java_1_0_0_m3_released.html#comments</comments>
    <guid isPermaLink="false">http://blogs.reucon.com/asterisk-java/2009/10/19/asterisk_java_1_0_0_m3_released.html</guid>
    <pubDate>Mon, 19 Oct 2009 20:39:00 GMT</pubDate>
  <feedburner:origLink>http://blogs.reucon.com/asterisk-java/2009/10/19/asterisk_java_1_0_0_m3_released.html</feedburner:origLink></item>
  
  <item>
    <title>Built-in Support For Network Tracing</title>
    <link>http://feedproxy.google.com/~r/reucon/~3/5C_CxwMkVv8/built_in_support_for_network_tracing.html</link>
    
      
        <description>&lt;p&gt;
Up to now the preferred way to obtain traces of the communication between Asterisk-Java and Asterisk was using tcpdump, wireshark or ngrep as described in &lt;a href="/asterisk-java/2006/08/23/debugging_manager_api.html"&gt;Debugging Manager API&lt;/a&gt;. Having a full log of the direct network communication is often the only way to resolve issues related to problems in the Manager API or Fast AGI.
&lt;/p&gt;&lt;p&gt;
To make it easier for our users to obtain these traces we have now included a tracing feature directly into Asterisk-Java. You can enable it at runtime by setting the system property &lt;code&gt;org.asteriskjava.trace&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt;. On the command line:
&lt;/p&gt;
&lt;pre&gt;java -Dorg.asteriskjava.trace=true ...&lt;/pre&gt;
&lt;p&gt;Trace files are written to the temp dir by default ("java.io.temp"). You can specify an alternate location by using the &lt;code&gt;org.asteriskjava.trace.directory&lt;/code&gt; system property:&lt;/p&gt;
&lt;pre&gt;java -Dorg.asteriskjava.trace=true \
     -Dorg.asteriskjava.trace.directory=/opt/traces ...&lt;/pre&gt;
&lt;p&gt;Log files contain a timestamp and the IP addresses and ports of the involved servers in their file name. A typical file looks like this:&lt;/p&gt;
&lt;pre&gt;
2009-10-20T21:51:18.414CEST &amp;lt;&amp;lt;&amp;lt; Asterisk Call Manager/1.1
2009-10-20T21:51:18.536CEST &amp;gt;&amp;gt;&amp;gt; action: Challenge
                            &amp;gt;&amp;gt;&amp;gt; actionid: 888911819_0#
                            &amp;gt;&amp;gt;&amp;gt; authtype: MD5
                            &amp;gt;&amp;gt;&amp;gt;
2009-10-20T21:51:18.601CEST &amp;lt;&amp;lt;&amp;lt; Response: Success
2009-10-20T21:51:18.663CEST &amp;lt;&amp;lt;&amp;lt; ActionID: 888911819_0#
2009-10-20T21:51:18.664CEST &amp;lt;&amp;lt;&amp;lt; Challenge: 336054137
2009-10-20T21:51:18.665CEST &amp;lt;&amp;lt;&amp;lt;
2009-10-20T21:51:18.705CEST &amp;gt;&amp;gt;&amp;gt; action: Login
                            &amp;gt;&amp;gt;&amp;gt; actionid: 888911819_1#
                            &amp;gt;&amp;gt;&amp;gt; authtype: MD5
                            &amp;gt;&amp;gt;&amp;gt; username: manager
                            &amp;gt;&amp;gt;&amp;gt; key: ed0481d08ae7832fb
                            &amp;gt;&amp;gt;&amp;gt;
2009-10-20T21:51:18.768CEST &amp;lt;&amp;lt;&amp;lt; Response: Success
2009-10-20T21:51:18.831CEST &amp;lt;&amp;lt;&amp;lt; ActionID: 888911819_1#
2009-10-20T21:51:18.832CEST &amp;lt;&amp;lt;&amp;lt; Message: Authentication accepted
2009-10-20T21:51:18.833CEST &amp;lt;&amp;lt;&amp;lt;
&lt;/pre&gt;
&lt;p&gt;This new feature is already part of the latest Asterisk-Java &lt;a href="http://asterisk-java.org/download/1.0.0.CI-SNAPSHOT"&gt;1.0.0-CI-SNAPSHOT&lt;/a&gt; and will be shipped with milestone 3.&lt;/p&gt;
&lt;p&gt;Please consider attaching a trace file to your bug reports in the future. It speeds up bug fixing considerably.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/reucon/~4/5C_CxwMkVv8" height="1" width="1"/&gt;</description>
      
      
    
    
    
    <comments>http://blogs.reucon.com/asterisk-java/2009/10/17/built_in_support_for_network_tracing.html#comments</comments>
    <guid isPermaLink="false">http://blogs.reucon.com/asterisk-java/2009/10/17/built_in_support_for_network_tracing.html</guid>
    <pubDate>Sat, 17 Oct 2009 04:53:00 GMT</pubDate>
  <feedburner:origLink>http://blogs.reucon.com/asterisk-java/2009/10/17/built_in_support_for_network_tracing.html</feedburner:origLink></item>
  
  <item>
    <title>Asterisk-Java goes OSGi</title>
    <link>http://feedproxy.google.com/~r/reucon/~3/AkFC9JTtfGA/asterisk_java_goes_osgi.html</link>
    
      
        <description>&lt;p&gt;
We are currently working on making Asterisk-Java &lt;a href="http://www.osgi.org/"&gt;OSGi&lt;/a&gt; compliant to make it easier for those users who want to use Asterisk-Java in an OSGi container like &lt;a href="http://eclipse.org/equinox/"&gt;Equinox&lt;/a&gt;. This means  Asterisk-Java will contain the proper bundle headers in its MANIFEST.MF and will follow the OSGi rules for version names. The new version names for Asterisk-Java are similar to those used by Spring Framework: 
&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;1.0.0.CI-SNAPSHOT&lt;/dt&gt;
&lt;dd&gt;Continious integration snapshot releases&lt;/dd&gt;
&lt;dt&gt;1.0.0.M3&lt;/dt&gt;
&lt;dd&gt;Milestone releases&lt;/dd&gt;
&lt;dt&gt;1.0.0.RC1&lt;/dt&gt;
&lt;dd&gt;Release candidates&lt;/dd&gt;
&lt;dt&gt;1.0.0.RELEASE&lt;/dt&gt;
&lt;dd&gt;Final release&lt;/dd&gt;
&lt;dt&gt;1.0.0.SR01&lt;/dt&gt;
&lt;dd&gt;Service release with emergency bug fixes&lt;/dd&gt;
&lt;dl&gt;
&lt;p&gt;
The first OSGi compliant snapshots of Asterisk-Java are now available for download: &lt;a href="http://asterisk-java.org/download/1.0.0.CI-SNAPSHOT"&gt;Asterisk-Java 1.0.0.CI-SNAPSHOT&lt;/a&gt;. The old 1.0.0-SNAPSHOT releases will no longer be updated.&lt;br/&gt;
For those developers that are not interested in OSGi nothing will change. The OSGi manifest headers added to Asterisk-Java are simply ignored when run in a non-OSGi environment.
&lt;/p&gt;
&lt;p&gt;The new MANIFEST.MF looks like this:&lt;/p&gt;
&lt;pre class="codeSample"&gt;
Manifest-Version: 1.0
Bundle-Description: The free Java library for Asterisk PBX integration.
Bundle-DocURL: http://asterisk-java.org/
Bundle-ManifestVersion: 2
Bundle-Name: Asterisk-Java
Bundle-SymbolicName: org.asteriskjava
Bundle-Vendor: reucon
Bundle-Version: 1.0.0.CI-SNAPSHOT
Export-Package: org.asteriskjava;version="1.0.0.CI-SNAPSHOT",
 org.asteriskjava.config;version="1.0.0.CI-SNAPSHOT",
 org.asteriskjava.config.dialplan;version="1.0.0.CI-SNAPSHOT",
 org.asteriskjava.fastagi;version="1.0.0.CI-SNAPSHOT",
 org.asteriskjava.fastagi.command;version="1.0.0.CI-SNAPSHOT",
 org.asteriskjava.fastagi.reply;version="1.0.0.CI-SNAPSHOT",
 org.asteriskjava.manager;version="1.0.0.CI-SNAPSHOT",
 org.asteriskjava.manager.action;version="1.0.0.CI-SNAPSHOT",
 org.asteriskjava.manager.event;version="1.0.0.CI-SNAPSHOT",
 org.asteriskjava.manager.response;version="1.0.0.CI-SNAPSHOT",
 org.asteriskjava.manager.util;version="1.0.0.CI-SNAPSHOT",
 org.asteriskjava.live;version="1.0.0.CI-SNAPSHOT"
&lt;/pre&gt;
&lt;p&gt;If you are looking for a ready to use OSGi based framework to develop AGI scripts for Asterisk on SpringSource dm Server you may also want to check &lt;a href="http://code.google.com/p/ajdmserver/"&gt;ajdmserver&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/reucon/~4/AkFC9JTtfGA" height="1" width="1"/&gt;</description>
      
      
    
    
    
    <comments>http://blogs.reucon.com/asterisk-java/2009/09/26/asterisk_java_goes_osgi.html#comments</comments>
    <guid isPermaLink="false">http://blogs.reucon.com/asterisk-java/2009/09/26/asterisk_java_goes_osgi.html</guid>
    <pubDate>Sat, 26 Sep 2009 10:16:00 GMT</pubDate>
  <feedburner:origLink>http://blogs.reucon.com/asterisk-java/2009/09/26/asterisk_java_goes_osgi.html</feedburner:origLink></item>
  
  <item>
    <title>Code Style: Final Arguments</title>
    <link>http://feedproxy.google.com/~r/reucon/~3/Pu_2BXk7gOA/code_style_final_arguments.html</link>
    
      
        <description>&lt;p&gt;Java allows you to make arguments final by declaring them as final in the argument list of the method declaration:&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
public void doSomething(final String foo)
{
  ...
}
&lt;/pre&gt;
&lt;p&gt;This means that inside the method you cannot change what the argument reference points to, i.e. it prevents you from doing things like this:
&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
  foo = "bar";
&lt;/pre&gt;

&lt;p&gt;It is bad style to change the reference an argument points to. You should treat all arguments as if they were marked final. It would have even been a good idea to make this a language feature and have Java treat all arguments as final by default.&lt;/p&gt;
&lt;p&gt;However does this justify to declare all arguments as final? Some people suggest this though I haven't seen this in the wild very often.&lt;/p&gt;
&lt;p&gt;The pros:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;enforces not changing the reference an argument points to&lt;/li&lt;/ul&gt;
&lt;p&gt;The cons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;makes method signatures longer and harder to read&lt;/li
&lt;li&gt;takes longer to write, being lazy is a virtue&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is one thing to note: Changing the reference the argument points to does not actually change the value of the caller's variable passed to the method:&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
public void testDoSomething()
{
  String foo = "foo";
  doSomething(foo);
  System.out.println(foo); // still prints "foo"
}

public void doSomething(String foo)
{
  foo = "bar";
}
&lt;/pre&gt;
&lt;p&gt;However if you pass an object that is not immutable and you change the state inside the called method you actually do change the caller's data. This is nothing a final modifier can prevent you from doing though it may be a source of trouble if not properly stated in the contract of the method.&lt;/p&gt;
&lt;p&gt;So to sum it up: You should not change the reference an argument points to as it causes confusion. You can prevent this by adding the final modifer. Doing so however clutters your code and thus shouldn't be done (except when needed to use the argument in an inner class). Pay attention to not change the state of an object passed to a method if that's not part of the method's contract.&lt;p&gt;
&lt;p&gt;The same applies to some extend to final local variables. Use them where they make your code easier to understand but not everywhere you could. If you are a fan of final have a look at &lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt;'s val keyword.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/reucon/~4/Pu_2BXk7gOA" height="1" width="1"/&gt;</description>
      
      
    
    
    
    <comments>http://blogs.reucon.com/srt/2009/09/17/code_style_final_arguments.html#comments</comments>
    <guid isPermaLink="false">http://blogs.reucon.com/srt/2009/09/17/code_style_final_arguments.html</guid>
    <pubDate>Thu, 17 Sep 2009 18:43:00 GMT</pubDate>
  <feedburner:origLink>http://blogs.reucon.com/srt/2009/09/17/code_style_final_arguments.html</feedburner:origLink></item>
  
  <item>
    <title>Users: ADempiere Asterisk Integration</title>
    <link>http://feedproxy.google.com/~r/reucon/~3/t8W8sNbebUE/users_adempiere_asterisk_integration.html</link>
    
      
        <description>&lt;p&gt;
&lt;a href="http://www.adempiere.com/"&gt;ADempiere&lt;/a&gt; is a collection of Open Source ERP applications. 
&lt;/p&gt;
&lt;p&gt;By leveraging Asterisk-Java the &lt;a href="http://www.adempiere.com/index.php/AsteriskJava"&gt;Asterisk integration for ADempiere&lt;/a&gt; provides support for calling contacts directly from within ADempiere.
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/reucon/~4/t8W8sNbebUE" height="1" width="1"/&gt;</description>
      
      
    
    
    
    <comments>http://blogs.reucon.com/asterisk-java/2009/09/15/users_adempiere_asterisk_integration.html#comments</comments>
    <guid isPermaLink="false">http://blogs.reucon.com/asterisk-java/2009/09/15/users_adempiere_asterisk_integration.html</guid>
    <pubDate>Mon, 14 Sep 2009 23:59:00 GMT</pubDate>
  <feedburner:origLink>http://blogs.reucon.com/asterisk-java/2009/09/15/users_adempiere_asterisk_integration.html</feedburner:origLink></item>
  
  <item>
    <title>Asterisk-Java Sync to Maven Central Repo</title>
    <link>http://feedproxy.google.com/~r/reucon/~3/XtOZq8YTzLc/asterisk_java_sync_to_maven_central_repo.html</link>
    
      
        <description>&lt;p&gt;
The released Asterisk-Java artifacts are now automatically published to Maven's central repository. This includes our milestone releases 1.0.0-m1 and 1.0.0-m2. 
&lt;/p&gt;&lt;p&gt;
If you are already using Maven for development that means to you that you no longer have to download Asterisk-Java in order to use it. You can just declare a dependency and Maven automatically downloads it from central.
&lt;/p&gt;&lt;p&gt;
The Maven coordinates for Asterisk-Java are:
&lt;/p&gt;
&lt;pre class="brush: xml;"&gt;
&amp;lt;dependency&amp;gt;
  &amp;lt;groupId&amp;gt;org.asteriskjava&amp;lt;/groupId&amp;gt;
  &amp;lt;artifactId&amp;gt;asterisk-java&amp;lt;/artifactId&amp;gt;
  &amp;lt;version&amp;gt;1.0.0-m2&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/reucon/~4/XtOZq8YTzLc" height="1" width="1"/&gt;</description>
      
      
    
    
    
    <comments>http://blogs.reucon.com/asterisk-java/2009/07/09/asterisk_java_sync_to_maven_central_repo.html#comments</comments>
    <guid isPermaLink="false">http://blogs.reucon.com/asterisk-java/2009/07/09/asterisk_java_sync_to_maven_central_repo.html</guid>
    <pubDate>Thu, 09 Jul 2009 15:52:00 GMT</pubDate>
  <feedburner:origLink>http://blogs.reucon.com/asterisk-java/2009/07/09/asterisk_java_sync_to_maven_central_repo.html</feedburner:origLink></item>
  
  <item>
    <title>SSO for RoundCube Webmail with Atlassian Crowd</title>
    <link>http://feedproxy.google.com/~r/reucon/~3/RY4OZpKJ1_c/sso_for_roundcube_webmail_with_atlassian_crowd.html</link>
    
      
        <description>&lt;p&gt;
&lt;a href="http://www.atlassian.com/software/crowd/"&gt;Atlassian Crowd&lt;/a&gt; is a single sign-on and identity management tool by &lt;a href="http://www.atlassian.com/"&gt;Atlassian&lt;/a&gt; that integrates well with their suite of software engineering and collaboration tools like JIRA, Confluence and Crucible. It offers a SOAP API that allows integration into arbitrary third-party systems. Integrating a webmail system with Crowd is quite easy. I've choosen &lt;a href="http://roundcube.net/"&gt;RoundCube Webmail&lt;/a&gt; 0.2.2 as an example. RoundCube is based on PHP and has a nice and clean user interface and a well-written code base.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 1: Basic Integration&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;There is a &lt;a href="http://pear.php.net/package/Services_Atlassian_Crowd/"&gt;PHP integration library&lt;/a&gt; that can be used as a starting point. It provides the methods for SSO but lacks the convenience of Crowd's &lt;a href="http://docs.atlassian.com/crowd/1.6/com/atlassian/crowd/integration/http/HttpAuthenticator.html"&gt;HttpAuthenticator&lt;/a&gt;. Implementing a simple PHP version of the HttpAuthenticator was the first step. My implementation uses &lt;a href="http://pecl.php.net/package/APC"&gt;APC&lt;/a&gt; to store the application token and validates every request with Crowd.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 2: Dovecot Masteruser&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;While the original version of RoundCube uses the user's username and password to connect to the IMAP store that's no longer possible with the crowdified version as it doesn't have access to the user's password. One solution is to use dovecot's &lt;a href="http://wiki.dovecot.org/Authentication/MasterUsers"&gt;masteruser&lt;/a&gt; feature. With that configuration in place RoundCube can access the user's mailbox by using its own password instead of the user's password.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 3: Configuration&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;That's it. Quite simple. If you like you can have a look at my &lt;a href="http://blogs.reucon.com/srt/files/roundcubemail-0.2-crowd.diff"&gt;patch&lt;/a&gt;. Check config/main.inc.php and provide the username and password of your dovecot masteruser as well as the application name, credential and service URL for Crowd.&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/reucon/~4/RY4OZpKJ1_c" height="1" width="1"/&gt;</description>
      
      
    
    
    
    <comments>http://blogs.reucon.com/srt/2009/06/24/sso_for_roundcube_webmail_with_atlassian_crowd.html#comments</comments>
    <guid isPermaLink="false">http://blogs.reucon.com/srt/2009/06/24/sso_for_roundcube_webmail_with_atlassian_crowd.html</guid>
    <pubDate>Wed, 24 Jun 2009 20:23:00 GMT</pubDate>
  <feedburner:origLink>http://blogs.reucon.com/srt/2009/06/24/sso_for_roundcube_webmail_with_atlassian_crowd.html</feedburner:origLink></item>
  
  <item>
    <title>Nexus vs. Artifactory</title>
    <link>http://feedproxy.google.com/~r/reucon/~3/FtIGt3gD7k0/nexus_vs_artifactory.html</link>
    
      
        <description>&lt;p&gt;
Until now we didn't use a repository manager for Maven. Our repos were a plain directory structure on the file system served by Apache. Uploading was done using Apache's WebDAV capabilities with a simple authentication against our LDAP directory:
&lt;/p&gt;
&lt;pre class="brush: xml;"&gt;
&amp;lt;Location /maven&amp;gt;
  Options Indexes

  DAV On
  AuthType Basic 
  AuthName "reucon Maven Repositories"
  AuthBasicProvider ldap
  AuthLDAPURL ldap://ldap.myorg.com/o=myorg?uid?sub?(objectClass=person)
  AuthLDAPBindDN uid=httpd,ou=techusers,o=myorg
  AuthLDAPBindPassword secret
  AuthzLDAPAuthoritative off

  Require valid-user
  FileETag None
&amp;lt;/Location&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
We are maintaining four repositories: one for our public Open Source artifacts and one for proprietary internal artifacts along with corresponding snapshot repositories. Access to the internal repository was limited based on an IP address range.
&lt;/p&gt;&lt;p&gt;
There are multiple reasons for us to use a repository manager:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Unified access to repositories&lt;/b&gt;
&lt;br/&gt;In the old days all you needed was the central repo (formerly known as ibiblio). Times have changed and now many of our projects require artifacts from a variety of different repositories. It seems many organisations prefer having their own repos instead of publishing to central. This includes SpringSource, JBoss, Codehaus and several snapshot repos like for Apache. Maintaing a list of these repos in each developers settings.xml is a pity and including them in the poms makes things even worse in the long run.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Finer grained access control&lt;/b&gt;&lt;br/&gt;
On the one hand we need access to our internal repo from outside of our internal network, so IP based access control no longer works well. On the other hand not all developers should be allowed to publish releases. Some kind of role based access control was needed.
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Automated creation of the Nexus index&lt;/b&gt;&lt;br/&gt;
A Nexus index is basically a zip file containing a lucene index of the artifacts in a repository. Most Maven IDE plugins now support searching for artifacts when adding dependencies to a project. To make this work the IDE must be be able to download an up to date index of the repositories.
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Web based artifact search&lt;/b&gt;&lt;br/&gt;
You may know &lt;a href="http://mvnrepository.com"&gt;mvnrepository.com&lt;/a&gt; a web site to search for artifacts in the central repo. I've often used it to find the correct version and maven coordinates for a dependency. A similar solution for our internal repositories would be nice.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
There are a lot &lt;a href="http://maven.apache.org/repository-management.html"&gt;more reasons&lt;/a&gt; to use a repository manager like faster builds through caching of artifacts, black- or whitelisting of artifacts based on corporate standards but those listed above were the key factors for us.
&lt;/p&gt;&lt;p&gt;
There are three products that can be used: &lt;a href="http://archiva.apache.org/"&gt;Apache Archiva&lt;/a&gt;, &lt;a href="http://nexus.sonatype.org/"&gt;Sonatype Nexus&lt;/a&gt; and &lt;a href="http://www.jfrog.org/products.php"&gt;JFrog's Artifactory&lt;/a&gt;. There is a &lt;a href="http://docs.codehaus.org/x/FAAPBg"&gt;feature matrix&lt;/a&gt;
that shows their features.
&lt;/p&gt;&lt;p&gt;
I dropped Archiva because its development is rather slow and it is missing some important features like grouped repositories. So Nexus and Artifactory remained. I came across two blog postings from January: 
&lt;a href="http://www.sonatype.com/people/2009/01/contrasting-nexus-and-artifactory/"&gt;Sonatype's comparison&lt;/a&gt; and
&lt;a href="http://blogs.jfrog.org/2009/01/contrasting-artifactory-and-nexus.html"&gt;JFrog's response&lt;/a&gt;. Combined they provide a lot of insight. Here is my own comparison:
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Security&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;
Good LDAP integration is a must have. Artifactory supports this out of the box, Nexus does not include LDAP support in its Open Source edition. It is a Nexus Pro feature. I do understand that Sonatype is trying to sell its Pro version but LDAP support is really a basic and vital feature. Fortunately it is not too difficult to implement a custom authenticator for Nexus and in fact there is already a project at Google Code called &lt;a href="http://code.google.com/p/nexus-ldap/"&gt;nexus-ldap&lt;/a&gt; that adds free LDAP support to Nexus. Both Artifactory and Nexus support fine grained role based authorization. One problem I faced with Artifactory was that requiring authentication seems to be a global setting, so you either require authentication for all repositories or for none. This is less flexible than Nexus which allows us to make our Open Source repository available without authentication and requires authentication only for deployment and for our internal repositories.&lt;br/&gt;
Artifactory has a nice additional feature that eliminates the need to store the user's password in Maven's settingx.xml in clear text by encrypting the password with a user specific key stored in Artifactory. This is an interesting approach and I would like to see this concept being used more widely (e.g. for Subversion).
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Storage&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;
How the repository manager stores artifacts and meta data is the biggest difference between Artifactory and Nexus. Artifactory uses a Java Content Repository (JCR) that can optionally be hosted in a MySQL database.&lt;br/&gt;
Nexus stores artifacts and meta data in the file system. It uses the maven layout so it is easy to access the repositories managed by Nexus externally. This becomes handy not only for migration but also when synchronizing to central through rsync. Though Artifactory offers an export feature having my repository data available directly on the file system makes me feel better.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Searching and Indexing&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;
Both Nexus and Artifactory publish indexes (based on Lucene) and provide a web interface for searching artifacts stored in the repository. Nexus takes this one step futher and also allows searching for artifacts in proxied repositoreis not yet stores in the local repository. This is really handy and eliminates the need to use external sites to search for artifacts and they current version.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Before I found nexus-ldap I was about to choose Artifactory over Nexus. After that I prefer Nexus for the file system based storage and better searching.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;References&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://nexus.sonatype.org/"&gt;Sonatype Nexus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jfrog.org/products.php"&gt;JFrog Artifactory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/nexus-ldap/"&gt;nexus-ldap&lt;/a&gt;: Free LDAP authentication for Nexus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://confluence.atlassian.com/display/CROWDEXT/Nexus+Crowd+Plugin"&gt;Nexus Crowd Plugin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/reucon/~4/FtIGt3gD7k0" height="1" width="1"/&gt;</description>
      
      
    
    
    
    <comments>http://blogs.reucon.com/srt/2009/06/16/nexus_vs_artifactory.html#comments</comments>
    <guid isPermaLink="false">http://blogs.reucon.com/srt/2009/06/16/nexus_vs_artifactory.html</guid>
    <pubDate>Mon, 15 Jun 2009 23:23:48 GMT</pubDate>
  <feedburner:origLink>http://blogs.reucon.com/srt/2009/06/16/nexus_vs_artifactory.html</feedburner:origLink></item>
  
  <item>
    <title>Asterisk-Java 1.0.0-m2 Released</title>
    <link>http://feedproxy.google.com/~r/reucon/~3/Cy1BvIDjtMk/asterisk_java_1_0_0_m2_released.html</link>
    
      
        <description>&lt;p&gt;
As most of the users already make use of many new features in 1.0.0-SNAPSHOT it is time to push the final release out of the door. As a first step I've released milestone 2 of 1.0.0 called 1.0.0-m2. Have a look at the &lt;a href="http://jira.reucon.org/secure/ReleaseNote.jspa?projectId=10000&amp;styleName=Html&amp;version=10030"&gt;changelog&lt;/a&gt; to see which bugs have been fixed and which new features are included.
&lt;/p&gt;&lt;p&gt;
Most notably milestone 2 includes support for the 1.6 series of Asterisk as well as support for &lt;a href="http://blogs.reucon.com/asterisk-java/2009/05/13/scripting_support_for_fastagi.html"&gt;using scripting languages with the FastAGI server&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;
The new release is available as a plain jar and a zip distribution at &lt;a href="http://asterisk-java.org/download/1.0.0-m2"&gt;http://asterisk-java.org/download/1.0.0-m2&lt;/a&gt;. You can also browse the &lt;a href="http://asterisk-java.org/1.0.0-m2/"&gt;documentation&lt;/a&gt; and &lt;a href="http://asterisk-java.org/1.0.0-m2/apidocs/"&gt;javadocs&lt;/a&gt; online.
&lt;/p&gt;&lt;p&gt;
Please report back any issues you encounter while using milestone 2 through our &lt;a href="http://jira.reucon.org/browse/AJ"&gt;issue tracker&lt;/a&gt;. If you like to have a certain feature or bug fix included vote for it.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;References&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://asterisk-java.org/download/1.0.0-m2"&gt;Download Asterisk-Java 1.0.0-m2&lt;/a&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/reucon/~4/Cy1BvIDjtMk" height="1" width="1"/&gt;</description>
      
      
    
    
    
    <comments>http://blogs.reucon.com/asterisk-java/2009/06/11/asterisk_java_1_0_0_m2_released.html#comments</comments>
    <guid isPermaLink="false">http://blogs.reucon.com/asterisk-java/2009/06/11/asterisk_java_1_0_0_m2_released.html</guid>
    <pubDate>Thu, 11 Jun 2009 14:43:04 GMT</pubDate>
  <feedburner:origLink>http://blogs.reucon.com/asterisk-java/2009/06/11/asterisk_java_1_0_0_m2_released.html</feedburner:origLink></item>
  
  <item>
    <title>Maven Release with Subversion 1.5 and 1.6</title>
    <link>http://feedproxy.google.com/~r/reucon/~3/llPI0La2K4Y/maven_release_with_subversion_1_5_and_1_6.html</link>
    
      
        <description>&lt;p&gt;
&lt;img src="/srt/images/maven.gif" hspace="5" vspace="5" align="right"/&gt;
There is a problem with the maven-release-plugin when used with recent versions of Subversion. It stared at version 1.5.1 of Subversion and made the release:prepare command fail because Maven was no longer able to tag the release.&lt;/p&gt;
&lt;p&gt;You may have encountered the following error with release:prepare:&lt;/p&gt;
&lt;pre class="brush: plain;"&gt;
svn: File '...' already exists
&lt;/pre&gt;
&lt;p&gt;One reason for this can be &lt;a href="http://jira.codehaus.org/browse/SCM-406"&gt;SCM-406&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For some time I've worked around this issue by doing my releases on a machine with an older version of Subversion.&lt;/p&gt;
&lt;p&gt;A better solution is to use the latest version of the maven-release-plugin (2.0-beta-9 at the moment) and set the remoteTagging property to true:&lt;/p&gt;
&lt;pre class="brush: xml;"&gt;
&amp;lt;build&amp;gt;
  &amp;lt;plugins&amp;gt;
    &amp;lt;plugin&amp;gt;      
      &amp;lt;artifactId&amp;gt;maven-release-plugin&amp;lt;/artifactId&amp;gt;
      &amp;lt;version&amp;gt;2.0-beta-9&amp;lt;/version&amp;gt;
      &amp;lt;configuration&amp;gt;     
        &amp;lt;remoteTagging&amp;gt;true&amp;lt;/remoteTagging&amp;gt;
        &amp;lt;preparationGoals&amp;gt;clean install&amp;lt;/preparationGoals&amp;gt;
        &amp;lt;autoVersionSubmodules&amp;gt;true&amp;lt;/autoVersionSubmodules&amp;gt;
        &amp;lt;tagBase&amp;gt;...&amp;lt;/tagBase&amp;gt;
      &amp;lt;/configuration&amp;gt;
    &amp;lt;/plugin&amp;gt;     
  &amp;lt;/plugins&amp;gt;
&amp;lt;/build&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Keep in mind that you should always specify the exact version of the plugins you are using. This not only makes sure you get what you need it also ensures that the build is reproducible in the future and works consistently accross different machines.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/reucon/~4/llPI0La2K4Y" height="1" width="1"/&gt;</description>
      
      
    
    
    
    <comments>http://blogs.reucon.com/srt/2009/05/30/maven_release_with_subversion_1_5_and_1_6.html#comments</comments>
    <guid isPermaLink="false">http://blogs.reucon.com/srt/2009/05/30/maven_release_with_subversion_1_5_and_1_6.html</guid>
    <pubDate>Sat, 30 May 2009 13:58:00 GMT</pubDate>
  <feedburner:origLink>http://blogs.reucon.com/srt/2009/05/30/maven_release_with_subversion_1_5_and_1_6.html</feedburner:origLink></item>
  
  <item>
    <title>Security Issues Caused By External Hosting</title>
    <link>http://feedproxy.google.com/~r/reucon/~3/Jj39MUZblsw/security_issues_caused_by_external_hosting.html</link>
    
      
        <description>&lt;p&gt;
Thomas has a nice example of how &lt;a href="http://everflux.de/lufthansa-datenleck-1152/"&gt;Deutsche Lufthansa has leaked personal data through an entertainment site&lt;/a&gt; operated by an external agency.
&lt;/p&gt;&lt;p&gt;
Most companies have strict rules for handling personal data and installed security policies for secure handling of sensitive information. Therefore enterprise data centers are usually quite secure. However the corporate processes that are required to keep the standards high are slow and expensive. This causes some companies to skip them in favor of faster and cheaper alternatives.
&lt;/p&gt;&lt;p&gt;
One solution is to accept hosting offers by the agencies that build the sites. The problem is that they are seldomly capable of providing a secure environment. It's just not their business. The result is that sites with sensitive data are operated in shared hosting environments by unskilled persons out of control of corporate IT. It's only a matter of time until security issues pop up and companies can be glad if they are informed before any data is stolen.
&lt;/p&gt;&lt;p&gt;
It just doesn't make sense to harden the front door if you open up a few back doors at the same time. The best security policies are worthless if companies are willing to bypass them for faster and cheaper alternatives. Maybe Thomas' &lt;a href="http://everflux.de/lufthansa-datenleck-1152/"&gt;story&lt;/a&gt; will help showing the value of corporate IT to those seeking alternatives without looking at the consequences.
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/reucon/~4/Jj39MUZblsw" height="1" width="1"/&gt;</description>
      
      
    
    
    
    <comments>http://blogs.reucon.com/srt/2009/05/26/security_issues_caused_by_external_hosting.html#comments</comments>
    <guid isPermaLink="false">http://blogs.reucon.com/srt/2009/05/26/security_issues_caused_by_external_hosting.html</guid>
    <pubDate>Tue, 26 May 2009 11:27:00 GMT</pubDate>
  <feedburner:origLink>http://blogs.reucon.com/srt/2009/05/26/security_issues_caused_by_external_hosting.html</feedburner:origLink></item>
  
  <item>
    <title>Scripting Support for FastAGI</title>
    <link>http://feedproxy.google.com/~r/reucon/~3/hkq6G3KIyU0/scripting_support_for_fastagi.html</link>
    
      
        <description>&lt;p&gt;
Asterisk-Java 1.0.0 includes support for implementing AGI scripts in the scripting language of your choice. You still have the benefit of running on the JVM but for the implementation of your script you can now choose your favorite language.
&lt;/p&gt;&lt;p&gt;
I've prepared a small demo script that counts down from ten to zero. Then it plays a beep and waits for DTMF input to read the digit you've pressed back to you. You can exit by pressing star (*) or pound (#). To show you how this script looks like in the different languages it is implemented three times: In Groovy, JavaScript and PHP.
&lt;/p&gt;&lt;p&gt;
To get started just download the &lt;a href="http://maven.reucon.com/public-snapshot/org/asteriskjava/asterisk-java/1.0.0-SNAPSHOT/asterisk-java-1.0.0-20090513.085050-484-bin.zip"&gt;binary distribution of Asterisk-Java&lt;/a&gt;. Unpack it and run the asterisk-java.jar file from the unpacked directory.
&lt;/p&gt;
&lt;pre class="brush: plain;"&gt;
$ cd asterisk-java-1.0.0-SNAPSHOT
$ java -jar asterisk-java.jar
May 13, 2009 1:26:16 AM org.asteriskjava.fastagi.DefaultAgiServer startup
INFO: Listening on *:4573.
&lt;/pre&gt;
&lt;p&gt;
The AGI scripts are put into the agi directory. There you'll also find the &lt;a href="http://svn.reucon.net/repos/asterisk-java/trunk/dist/agi/demo.groovy"&gt;demo.groovy&lt;/a&gt;, &lt;a href="http://svn.reucon.net/repos/asterisk-java/trunk/dist/agi/demo.js"&gt;demo.js&lt;/a&gt; and &lt;a href="http://svn.reucon.net/repos/asterisk-java/trunk/dist/agi/demo.php"&gt;demo.php&lt;/a&gt; files. The lib directory contains additional libraries required to execute the scripts.
&lt;/p&gt;&lt;p&gt;
In addition to the functions provided by the scripting language Asterisk-Java adds two variables:
&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;a href="http://asterisk-java.org/development/apidocs/org/asteriskjava/fastagi/AgiRequest.html"&gt;request&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;the request data including the dialed extension, the caller id, channel name, parameters and more&lt;/dd&gt;
&lt;dt&gt;&lt;a href="http://asterisk-java.org/development/apidocs/org/asteriskjava/fastagi/AgiChannel.html"&gt;channel&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;for interacting with Asterisk, e.g. to stream files, receive DTMF digits or execute dialplan applications&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;
Modify your dialplan and add extensions for the demo scripts:
&lt;/p&gt;
&lt;pre class="brush: plain;"&gt;
exten =&gt; 2000,1,Agi(agi://localhost/demo.groovy)
exten =&gt; 2001,1,Agi(agi://localhost/demo.js)
exten =&gt; 2002,1,Agi(agi://localhost/demo.php)
&lt;/pre&gt;
&lt;p&gt;
If you are not running Asterisk-Java on the same server as Asterisk replace localhost by the hostname of the machine running Asterisk-Java.
&lt;/p&gt;&lt;p&gt;
Note that you will need at least Java 6 to make use of the new scripting support.
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/reucon/~4/hkq6G3KIyU0" height="1" width="1"/&gt;</description>
      
      
    
    
    
    <comments>http://blogs.reucon.com/asterisk-java/2009/05/13/scripting_support_for_fastagi.html#comments</comments>
    <guid isPermaLink="false">http://blogs.reucon.com/asterisk-java/2009/05/13/scripting_support_for_fastagi.html</guid>
    <pubDate>Wed, 13 May 2009 08:34:00 GMT</pubDate>
  <feedburner:origLink>http://blogs.reucon.com/asterisk-java/2009/05/13/scripting_support_for_fastagi.html</feedburner:origLink></item>
  
  <item>
    <title>Nokia E63</title>
    <link>http://feedproxy.google.com/~r/reucon/~3/14K6DI9Nhb8/nokia_e63.html</link>
    
      
        <description>&lt;p&gt;
&lt;img src="/srt/images/nokia-e63-red.jpg" align="right"/&gt;
As &lt;a href="http://en.wikipedia.org/wiki/DECT"&gt;DECT&lt;/a&gt; is mostly &lt;a href="http://it.slashdot.org/article.pl?sid=08/12/30/133222"&gt;broken&lt;/a&gt; it was time for some new mobile handsets.
&lt;/p&gt;&lt;p&gt;
We are already using &lt;a href="http://www.asterisk.org"&gt;Asterisk&lt;/a&gt; for our communication so the new mobile handsets are required to work well with it. Communication should be secure and ideally the handset would also be a mobile (GSM) phone that could be carried along when leaving the office. 
&lt;/p&gt;&lt;p&gt;
Our choice was the &lt;a href="http://europe.nokia.com/A41411172"&gt;Nokia E63&lt;/a&gt;. It supports quad-band GSM, UMTS, SIP and WLAN IEEE 802.11b/g including WEP, 802.1X, WPA and WPA2. Combining GSM and SIP + WLAN works out great. In the office we directly receive landline and VoIP calls to our mobile. When we are away Asterisk detects the missing phone and either routes calls to the mobile number or sends callers to the mailbox.
&lt;/p&gt;&lt;p&gt;
The solution is affordable, based on open standards, secure and very user friendly.
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/reucon/~4/14K6DI9Nhb8" height="1" width="1"/&gt;</description>
      
      
    
    
    
    <comments>http://blogs.reucon.com/srt/2009/05/01/nokia_e63.html#comments</comments>
    <guid isPermaLink="false">http://blogs.reucon.com/srt/2009/05/01/nokia_e63.html</guid>
    <pubDate>Fri, 01 May 2009 11:31:32 GMT</pubDate>
  <feedburner:origLink>http://blogs.reucon.com/srt/2009/05/01/nokia_e63.html</feedburner:origLink></item>
  
  <item>
    <title>JBoss Admin Console</title>
    <link>http://feedproxy.google.com/~r/reucon/~3/rmWA2wiRvVo/jboss_admin_console.html</link>
    
      
        <description>&lt;p&gt;&lt;a href="http://www.jboss.org/jbossas/"&gt;JBoss AS 5.1.0-CR1&lt;/a&gt; is out and finally includes a brand new admin console:&lt;/p&gt;
&lt;p&gt;&lt;img src="/srt/images/jboss-admin-console.png"/&gt;&lt;/p&gt;
&lt;p&gt;
After installing JBoss AS 5.1.0 you can access it at &lt;a href="http://localhost:8080/admin-console"&gt;http://localhost:8080/admin-console&lt;/a&gt;. Login with user "admin" and password "admin".
&lt;/p&gt;&lt;p&gt;
The project behind the admin console is &lt;a href="http://www.jboss.org/embjopr"&gt;Embedded Jopr&lt;/a&gt; a web-based application for managing and monitoring an instance of JBoss AS. It is the little brother of &lt;a href="http://www.jboss.org/jopr"&gt;Jopr&lt;/a&gt;. Jopr is a full-fledged systems management tool that helps managing and monitoring multiple instances of JBoss AS, Apache Webserver, Tomcat and more. The advantage of Embedded Jopr is that it is available out of the box and does not need any external resources like a database or separate agents. I am sure it makes operating JBoss AS a lot easier and more fun.
&lt;/p&gt;&lt;p&gt;
Give it a try and &lt;a href="http://www.jboss.org/jbossas/downloads/"&gt;download the latest version&lt;/a&gt;.
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/reucon/~4/rmWA2wiRvVo" height="1" width="1"/&gt;</description>
      
      
    
    
    
    <comments>http://blogs.reucon.com/srt/2009/04/30/jboss_admin_console.html#comments</comments>
    <guid isPermaLink="false">http://blogs.reucon.com/srt/2009/04/30/jboss_admin_console.html</guid>
    <pubDate>Thu, 30 Apr 2009 10:28:00 GMT</pubDate>
  <feedburner:origLink>http://blogs.reucon.com/srt/2009/04/30/jboss_admin_console.html</feedburner:origLink></item>
  
  <item>
    <title>Asterisk-Java Lightning Talk @ JUGC</title>
    <link>http://feedproxy.google.com/~r/reucon/~3/J2aUNc-fMfk/asterisk_java_lightning_talk_jugc.html</link>
    
      
        <description>&lt;p&gt;
&lt;img src="/asterisk-java/images/princeduke2.jpg" align="right"/&gt;
I will give a short presentation of Asterisk-Java (in German) at the &lt;a href="http://jugcologne.org"&gt;Java User Group Cologne&lt;/a&gt; (JUGC) on May 29th.
&lt;/p&gt;&lt;p&gt;
It will be a short overview of what Asterisk-Java can do and how it can be used to add phone support to Java applications. The presentation will have a duration of 5 to 10 minutes and include a small interactive demo that serves as a show case.
&lt;/p&gt;&lt;p&gt;
The main talk will be about &lt;a href="http://87.230.78.21:8080/display/jugc/2009.05.29+JSF+2.0+vs+Struts+2.1"&gt;JSF 2.0 vs Struts 2.1&lt;/a&gt;. I would be happy to meet a few Asterisk-Java developers over there.
&lt;/p&gt;
&lt;p&gt;The slides are available (in German) at &lt;a href="http://www.slideshare.net/srt/asteriskjava-at-jugc-20090529"&gt;slideshare&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/reucon/~4/J2aUNc-fMfk" height="1" width="1"/&gt;</description>
      
      
    
    
    
    <comments>http://blogs.reucon.com/asterisk-java/2009/04/27/asterisk_java_lightning_talk_jugc.html#comments</comments>
    <guid isPermaLink="false">http://blogs.reucon.com/asterisk-java/2009/04/27/asterisk_java_lightning_talk_jugc.html</guid>
    <pubDate>Mon, 27 Apr 2009 12:59:00 GMT</pubDate>
  <feedburner:origLink>http://blogs.reucon.com/asterisk-java/2009/04/27/asterisk_java_lightning_talk_jugc.html</feedburner:origLink></item>
  
  <item>
    <title>Users: Asterisk and CTI, what’s that all about?</title>
    <link>http://feedproxy.google.com/~r/reucon/~3/1aiH45h6z1s/users_asterisk_and_cti_whats_that_all_about.html</link>
    
      
        <description>&lt;p&gt;
Sameh Shaker has posted some &lt;a href="http://smshaker.wordpress.com/2009/03/17/asterisk-and-cti-whats-that-all-about/"&gt;examples&lt;/a&gt; of what you can do with Asterisk using the Manager API and Fast AGI. I think it's a good starting point for new users of Asterisk-Java to get some inspiration for their own applications.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;References&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sameh Shaker: &lt;a href="http://smshaker.wordpress.com/2009/03/17/asterisk-and-cti-whats-that-all-about/"&gt;Asterisk and CTI, what’s that all about?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/reucon/~4/1aiH45h6z1s" height="1" width="1"/&gt;</description>
      
      
    
    
    
    <comments>http://blogs.reucon.com/asterisk-java/2009/04/19/users_asterisk_and_cti_whats_that_all_about.html#comments</comments>
    <guid isPermaLink="false">http://blogs.reucon.com/asterisk-java/2009/04/19/users_asterisk_and_cti_whats_that_all_about.html</guid>
    <pubDate>Sun, 19 Apr 2009 09:25:00 GMT</pubDate>
  <feedburner:origLink>http://blogs.reucon.com/asterisk-java/2009/04/19/users_asterisk_and_cti_whats_that_all_about.html</feedburner:origLink></item>
  
  <item>
    <title>Speech Recognition with Asterisk-Java</title>
    <link>http://feedproxy.google.com/~r/reucon/~3/gprYNk2SCCo/speech_recognition_with_asterisk_java.html</link>
    
      
        <description>&lt;p&gt;
&lt;img src="/asterisk-java/images/lumenvox.gif" align="right" vspace="5"/&gt;
The latest &lt;a href="http://maven.reucon.com/public-snapshot/org/asteriskjava/asterisk-java/1.0.0-SNAPSHOT/asterisk-java-1.0.0-20090403.210610-444.jar"&gt;snapshot&lt;/a&gt; of Asterisk-Java contains support for the Asterisk Speech API. This makes writing AGI script that recognize speech as easy as writing AGI scripts for DTMF input.
&lt;/p&gt;&lt;p&gt;
All you need to get started is a recent version of Asterisk 1.6 and the &lt;a href="http://www.lumenvox.com"&gt;Lumenvox&lt;/a&gt; Speech Engine. For development you can buy a &lt;a href="http://store.digium.com/productview.php?product_code=8ASTLUMSTART"&gt;starter kit&lt;/a&gt; from Digium for 50 USD.
&lt;/p&gt;&lt;p&gt;
In your AGI script you initialize the speech engine, load and activate a grammer and are ready to recognize speech. The speechRecognize() method takes a voice prompt as its first parameter. The prompt is played to the user and the users response is recognized. The user doesn't have to wait for the prompt to finish, he can start talking right away ("barge in"). The corresponding Java code looks like this:
&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
speechCreate();
speechLoadGrammar("digits", grammarPath);
speechActivateGrammar("digits");
SpeechRecognitionResult result = 
  speechRecognize("speech-demo/prompt", 10);
speechDeactivateGrammar("digits");
&lt;/pre&gt;
&lt;p&gt;
The &lt;a href="http://asterisk-java.org/development/apidocs/org/asteriskjava/fastagi/SpeechRecognitionResult.html"&gt;SpeechRecognitionResult&lt;/a&gt; provided by Asterisk-Java contains the result and the confidence score &amp;ndash; a value between 0 and 1000 that indicates how sure the speech engine is that the result is correct. The Java code to evaluate the result looks like this:
&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
if (result.isSpeech())
{
    if (result.getScore() &gt; 990)
    {
        streamFile("speech-demo/absolutely-sure");
    }
    else if (result.getScore() &gt; 800)
    {
        streamFile("speech-demo/pretty-sure");
    }
    else
    {
        streamFile("speech-demo/not-sure");
    }

    // say what we have recognized
    sayDigits(result.getText());
}       
&lt;/pre&gt;
&lt;p&gt;Finally call speechDestory to end the speech recognition session (for a real application you probably want to do this in a finally block):&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
speechDestroy();
&lt;/pre&gt;
&lt;p&gt;Pretty easy, isn't it?&lt;/p&gt;
&lt;p&gt;
You can have a look at the &lt;a href="http://svn.reucon.net/repos/asterisk-java/trunk/src/integrationtest/org/asteriskjava/fastagi/SpeechDemo.java"&gt;SpeechDemo&lt;/a&gt; AGI script or download the &lt;a href="http://asterisk-java.org/static/speech-demo.zip"&gt;full demo&lt;/a&gt; that includes the latest snapshot of Asterisk-Java, the voice prompts and the AGI script.&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/reucon/~4/gprYNk2SCCo" height="1" width="1"/&gt;</description>
      
      
    
    
    
    <comments>http://blogs.reucon.com/asterisk-java/2009/04/03/speech_recognition_with_asterisk_java.html#comments</comments>
    <guid isPermaLink="false">http://blogs.reucon.com/asterisk-java/2009/04/03/speech_recognition_with_asterisk_java.html</guid>
    <pubDate>Fri, 03 Apr 2009 21:38:00 GMT</pubDate>
  <feedburner:origLink>http://blogs.reucon.com/asterisk-java/2009/04/03/speech_recognition_with_asterisk_java.html</feedburner:origLink></item>
  
  <item>
    <title>The Ideal Development Workspace</title>
    <link>http://feedproxy.google.com/~r/reucon/~3/ZYCko57XChs/the_ideal_development_workspace.html</link>
    
      
        <description>&lt;p&gt;
&lt;img src="/srt/images/embody.jpg" align="right"/&gt;
After my old chair was more and more broken I decided to buy a new one. After some research I chose the &lt;a href="http://www.hermanmiller.com/CDA/SSA/Product/1,1592,a10-c440-p271,00.html"&gt;Embody&lt;/a&gt; by &lt;a href="http://www.hermanmiller.com/"&gt;Herman Miller&lt;/a&gt;. 
&lt;/p&gt;&lt;p&gt;
The chair was delivered yesterday and it is just great. Its covering is like skin and lets the air flow through. The chair supports your movements and feels very comfortable. 
&lt;/p&gt;&lt;p&gt;
For me this chair is part of the ideal workspace for software development which consists of
&lt;ul&gt;
&lt;li&gt;a fast computer with lots of memory&lt;/li&gt;
&lt;li&gt;two big screens&lt;/li&gt;
&lt;li&gt;a phone with good support for hands free calls&lt;/li&gt;
&lt;li&gt;a cheap desk&lt;/li&gt;
&lt;li&gt;a great chair&lt;/li&gt;
&lt;li&gt;a calm environment&lt;/li&gt;
&lt;li&gt;enough coffee&lt;/li&gt;
&lt;/ul&gt; 
&lt;/p&gt;

&lt;p&gt;&lt;b&gt;References:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Embody Chairs &lt;a href="http://www.hermanmiller.com/hm/content/product_showroom/shared_assets/files/Embody_Chairs_brochure.pdf"&gt;brochure&lt;/a&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/reucon/~4/ZYCko57XChs" height="1" width="1"/&gt;</description>
      
      
    
    
    
    <comments>http://blogs.reucon.com/srt/2009/03/05/the_ideal_development_workspace.html#comments</comments>
    <guid isPermaLink="false">http://blogs.reucon.com/srt/2009/03/05/the_ideal_development_workspace.html</guid>
    <pubDate>Thu, 05 Mar 2009 15:46:00 GMT</pubDate>
  <feedburner:origLink>http://blogs.reucon.com/srt/2009/03/05/the_ideal_development_workspace.html</feedburner:origLink></item>
  
  <item>
    <title>Open Archive 1.0.5 for Openfire 3.6.2 released</title>
    <link>http://feedproxy.google.com/~r/reucon/~3/h0HguJnRGUY/open_archive_1_0_5_for_openfire_3_6_2_released.html</link>
    
      
        <description>&lt;p&gt;
I've updated Open Archive for the latest version of &lt;a href="http://www.igniterealtime.org/projects/openfire/index.jsp"&gt;Openfire&lt;/a&gt; and fixed a few bugs. Dele is about to add support for it to the &lt;a href="http://www.igniterealtime.org/community/docs/DOC-1518"&gt;Red5 SparkWeb&lt;/a&gt; client.
&lt;/p&gt;
&lt;p&gt;
Open Archive is a &lt;a href="http://www.xmpp.org/extensions/xep-0136.html"&gt;XEP-0136&lt;/a&gt; compliant server side message archive for Openfire.
It is available as a plugin from &lt;a href="http://maven.reucon.com/public/com/reucon/openfire/plugins/archive/"&gt;here&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;
To install the plugin just rename the jar to &lt;tt&gt;archive.jar&lt;/tt&gt;, place it into the plugins folder of your Openfire server and enable it in the Openfire console at Server Settings/Archive Settings.
&lt;/p&gt;&lt;p&gt;
For those interested in the source code have a look at its &lt;a href="http://maven.reucon.com/projects/public/archive/"&gt;development site&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Dele has &lt;a href="http://www.igniterealtime.org/community/message/184927#184927"&gt;published&lt;/a&gt; an updated version of the Red5 plugin that makes use of Open Archive. You can download it from &lt;a href="http://red5.4ng.net/red5-0.1.07.zip"&gt;http://red5.4ng.net/red5-0.1.07.zip&lt;/a&gt;.
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/reucon/~4/h0HguJnRGUY" height="1" width="1"/&gt;</description>
      
      
    
    
    
    <comments>http://blogs.reucon.com/srt/2008/12/17/open_archive_1_0_5_for_openfire_3_6_2_released.html#comments</comments>
    <guid isPermaLink="false">http://blogs.reucon.com/srt/2008/12/17/open_archive_1_0_5_for_openfire_3_6_2_released.html</guid>
    <pubDate>Wed, 17 Dec 2008 04:47:00 GMT</pubDate>
  <feedburner:origLink>http://blogs.reucon.com/srt/2008/12/17/open_archive_1_0_5_for_openfire_3_6_2_released.html</feedburner:origLink></item>
  
  </channel>
</rss>
