<HTML><BODY style="word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space; ">Bio:<DIV><BR class="khtml-block-placeholder"></DIV><DIV>Brett Schuchert has over 20 years of teaching experience and 17 years of professional software development experience. Starting in the mid 80's he taught computer literacy courses. At the end of the 80's while still teaching, he began professionally developing first in C++ (before C++ had multiple-inheritance) and working with Smalltalk (and for a short stint back he used a pre-ANSI, K&R type 1 C compiler for embedded systems development). He continued with C++ and Smalltalk training and consulting, managing to work with both C++ and Smalltalk on the same project using object-oriented database technology for the short time it was in vogue.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>In 1997 he developed and deployed his first Java application on top of Java 1.0, which he later migrated to Java 1.1 to take advantage of the newly-added Java Serialization. The project used applets to directly update the DOM of a complex web page to avoid the full turn-around of an HTTP get (this is now referred to as AJAX). </DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>He has continued developing enterprise-level applications in Java and has recently changed the emphasis of his training and mentoring towards software professionalism.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>Presentation:</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>Hello Java: </DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>From no-threading to the executor framework built in to Java 5</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>This is a quick hop through basic threading.</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>We start with a single-threaded server with a failing test (due to performance).</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>We fix the performance problem by introducing basic threading (justified by the Single Responsibility Principle)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>We then upgrade the server to us the Executor framework instead hand-rolling threads</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>This is a quick example of creating a fixed-size thread pool</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>If time permits (it probably won't), we'll look at a deadlock problem with the executor framework.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>Main Presentation</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>This presentation assumes familiarity with Java, JUnit 4, and basic Threading - the hello Java should suffice</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>We begin with a simple problem of an unguarded, shared resource</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>We fix the problem using synchronized (basic)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>We fix the problem by NOT guarding (intermediate) using a Java 5 class to do so</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>We then discuss the background behind how this works</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>We continue with a real problem, trying to screen scrape some web pages using the HTTP Client. The whole process takes 30 seconds</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>We evaluate the work to figure out</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>The CPU bound parts<SPAN class="Apple-tab-span" style="white-space:pre"></SPAN></DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>The I/O bound parts<SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN></DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>Estimate how much we can speed things up</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>We then test our way into a multi-threaded solution</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>Evaluate the results</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>Remove contention</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>Move towards our theoretical maximum speed</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>Along the way we'll learn a little more about the executor framework</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>(Note: I'll skip some steps to cover more material.)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>If we have time (we probably won't), we'll have a look at a few more of the Java 5 classes:</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>Barrier or Latch (haven't picked which one yet)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN>ConcurrentHashMap</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>Picture</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN><IMG src="cid:B55221DF-B0FB-42D9-AE26-606B7C5EE3F1@local"><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN><BR><DIV><DIV>On Sep 4, 2007, at 5:19 PM, Jason Lee wrote:</DIV><BR class="Apple-interchange-newline"><BLOCKQUOTE type="cite">On 9/4/07, <B class="gmail_sendername">Brett L. Schuchert</B> <<A href="mailto:schuchert@yahoo.com">schuchert@yahoo.com</A>> wrote:<DIV><SPAN class="gmail_quote"></SPAN><BLOCKQUOTE class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> Did someone want a bio, outline and picture for the presentation?<BR></BLOCKQUOTE></DIV><BR>A picture, short bio, and a summary of each presentation (Hello Java and the main presentation) would be GREAT! :P<BR><BR>Thanks! <BR><BR>-- <BR>Jason Lee, SCJP<BR>Software Architect -- Objectstream, Inc.<BR>JSF RI Dev Team<BR><A href="http://blogs.steeplesoft.com">http://blogs.steeplesoft.com</A><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">_______________________________________________</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Sc mailing list</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><A href="mailto:Sc@lists.okcjug.org">Sc@lists.okcjug.org</A></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><A href="http://lists.okcjug.org/listinfo.cgi/sc-okcjug.org">http://lists.okcjug.org/listinfo.cgi/sc-okcjug.org</A></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><A href="http://wiki.okcjug.org">http://wiki.okcjug.org</A></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><A href="http://tech.groups.yahoo.com/group/okcjug/">http://tech.groups.yahoo.com/group/okcjug/</A></DIV> </BLOCKQUOTE></DIV><BR></DIV></BODY></HTML>