<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.1" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>dz&#62;0</title>
	<link>http://blog.drewk.net</link>
	<description>Making computing useful : Andrew Kaluzniacki's Blog</description>
	<pubDate>Sun, 22 Jun 2008 22:59:16 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.1</generator>
	<language>en</language>
			<item>
		<title>Using OpenMP at work</title>
		<link>http://blog.drewk.net/using-openmp-at-work/2008/06/01/</link>
		<comments>http://blog.drewk.net/using-openmp-at-work/2008/06/01/#comments</comments>
		<pubDate>Sun, 01 Jun 2008 21:15:11 +0000</pubDate>
		<dc:creator>andrewk</dc:creator>
		
		<category><![CDATA[OpenMP]]></category>

		<category><![CDATA[Software Creation]]></category>

		<guid isPermaLink="false">http://blog.drewk.net/using-openmp-at-work/2008/06/01/</guid>
		<description><![CDATA[One of the developers in another group saw my OpenMP presentation and decided it would fit into the design of his current project. They are using an eight core machine to do spectral analysis and need to run a dozen or so models against the data. With much less work than it would take to [...]]]></description>
			<content:encoded><![CDATA[<p>One of the developers in another group saw my <a href="http://blog.drewk.net/openmp-presentation/2007/07/15/" title="OpenMP presentation">OpenMP presentation</a> and decided it would fit into the design of his current project. They are using an eight core machine to do spectral analysis and need to run a dozen or so models against the data. With much less work than it would take to multi-thread by hand, in fact it may only take a day or two including testing, we expect to get at least a factor of five improved run time performance. The hardest part may be convncing the client the the use of OpenMP is not too esoteric.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.drewk.net/using-openmp-at-work/2008/06/01/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Windows Remote Desktop</title>
		<link>http://blog.drewk.net/windows-remote-desktop/2008/03/30/</link>
		<comments>http://blog.drewk.net/windows-remote-desktop/2008/03/30/#comments</comments>
		<pubDate>Mon, 31 Mar 2008 01:12:13 +0000</pubDate>
		<dc:creator>andrewk</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.drewk.net/windows-remote-desktop/2008/03/30/</guid>
		<description><![CDATA[I need to set up my XP computer so I can just run it remotely from my Mac.  Windows Remote Desktop. I&#8217;ve enabled it on the PC. Now what can I use as a client on my Mac? Microsoft has a free client.   
]]></description>
			<content:encoded><![CDATA[<p>I need to set up my XP computer so I can just run it remotely from my Mac.  <a href="http://www.microsoft.com/windowsxp/using/mobility/getstarted/remoteintro.mspx">Windows Remote Desktop</a>. I&#8217;ve enabled it on the PC. Now what can I use as a client on my Mac? Microsoft has a free client.   </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.drewk.net/windows-remote-desktop/2008/03/30/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Hello Cow : my first iPhone App</title>
		<link>http://blog.drewk.net/hellocow-my-first-iphone-app/2008/03/20/</link>
		<comments>http://blog.drewk.net/hellocow-my-first-iphone-app/2008/03/20/#comments</comments>
		<pubDate>Fri, 21 Mar 2008 03:21:32 +0000</pubDate>
		<dc:creator>andrewk</dc:creator>
		
		<category><![CDATA[Software Creation]]></category>

		<category><![CDATA[apple]]></category>

		<guid isPermaLink="false">http://blog.drewk.net/hellocow-my-first-iphone-app/2008/03/20/</guid>
		<description><![CDATA[I was lucky enough to get in on the iPhone early SDK list and I&#8217;ve written my first simple application; HelloCow! Similar in concept and complexity to Hello World, the application consists of a picture of a cow. When you touch the cow, she moos. My little boy loves cows and he loves my iPhone, [...]]]></description>
			<content:encoded><![CDATA[<p>I was lucky enough to get in on the iPhone early SDK list and I&#8217;ve written my first simple application; HelloCow! Similar in concept and complexity to Hello World, the application consists of a picture of a cow. When you touch the cow, she moos. My little boy loves cows and he loves my iPhone, so I&#8217;m hoping this keeps him entertained without letting him dial 911 accidentally.  <img src="http://blog.drewk.net/wp-content/uploads/2008/03/iphone_cow.png" align="right" height="200" vspace="10" hspace="10" border="0" alt="Hello Cow" /> The permanent page is<a href="http://blog.drewk.net/hello-cow/" title="Hello Cow"> Hello Cow. </a>
<p>The image of the cow is graciously provided by Jordan McClements who has many beautiful images at <a href="http://www.ni-photos.jmcwd.com/" target="_blank" title="North Ireland Photos">jmcwd.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.drewk.net/hellocow-my-first-iphone-app/2008/03/20/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Update Wordpress</title>
		<link>http://blog.drewk.net/update-wordpress/2007/12/28/</link>
		<comments>http://blog.drewk.net/update-wordpress/2007/12/28/#comments</comments>
		<pubDate>Sat, 29 Dec 2007 04:29:52 +0000</pubDate>
		<dc:creator>andrewk</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.drewk.net/update-wordpress/2007/12/28/</guid>
		<description><![CDATA[Time to update.
done!
]]></description>
			<content:encoded><![CDATA[<p>Time to update.<br />
done!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.drewk.net/update-wordpress/2007/12/28/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Computational Performance Art</title>
		<link>http://blog.drewk.net/computational-performance/2007/12/28/</link>
		<comments>http://blog.drewk.net/computational-performance/2007/12/28/#comments</comments>
		<pubDate>Sat, 29 Dec 2007 02:51:04 +0000</pubDate>
		<dc:creator>andrewk</dc:creator>
		
		<category><![CDATA[Software Creation]]></category>

		<guid isPermaLink="false">http://blog.drewk.net/computational-performance/2007/12/28/</guid>
		<description><![CDATA[I am working with a number of people who are convinced that the application we are developing is inherently computationally intensive; and that is why we are not getting performance that some number of other people think we should be getting. In my experience, folks who build a slow application due to design issues tend [...]]]></description>
			<content:encoded><![CDATA[<p>I am working with a number of people who are convinced that the application we are developing is inherently computationally intensive; and that is why we are not getting performance that some number of other people think we should be getting. In my experience, folks who build a slow application due to design issues tend to blame the hardware, the compiler, the complexity of the application, but only lastly and only after being shown it is the case.<br />
In my case, I am highly suspect of the design, but I have to convince the folks making the decision that it is not a question of hardware.</p>
<p><strong>Theoretical Peak Performance<br />
</strong>How much power does a modern quad core Xeon have?<br />
XEON “Clovertown” retires 4 floating point operations [FLOPS] per clock, so a 3GHz “Clovertown” should do 3 billion x 4 FLOPS x 4 cores per second, or 48 GFLOPS theoretical peak with 64-bit precision. That&#8217;s 48 billion double precision floating point operations per second.<br />
<a href="http://en.wikipedia.org/wiki/List_of_Intel_Xeon_microprocessors#.22Woodcrest.22_.2865_nm.29">List_of_Intel_Xeon_microprocessors</a><br />
<a href="http://en.wikipedia.org/wiki/Intel_Core_%28CPU_architecture%29">Intel Core Architecture</a></p>
<p><strong>How does this relate in terms of our problem?</strong><br />
Assume much of our work is 3&#215;3 float matrix multiply [MM]. One 3&#215;3 MM is 3 multiplys and 2 adds for each of 9 elements = 27 multiplys and 18 adds, or 55 FLOPs. At peak, “Clovertown” should do 873 million 3&#215;3 MM per second. The number of configurations I&#8217;d like to check per second is about 10,000. I should be able to devote 87,000 MM per configuration per second. Based on what I guess of our computational coasts, this seems like plenty of juice.<br />
<em>Even if I only had one core to use in a single thread, I would have 20,000 MM per configuration.</em> This should put to rest our initial desire to use 8 different CPUs and take the added complexity of IPC.</p>
<p><strong>What is the computational cost of our problem?</strong><br />
This question is something I have not been able to answer, nor have anyone answer adequately. I need to find some good docs preferably, or less ideally do some call stack tracing through the code.</p>
<p><strong>Profiling Issues</strong><br />
Presently, profiling with VTune suggests that I have about eight computational domains each taking between 10 and 15 percent of CPU. This is not what one wants for an easy speed fix. I could optimize out any one of these domains and only see a 10% increase in speed.<br />
At one point malloc/free was taking around 30%, and I put Google Perf Tools to work which brought it down to 10%. This was a very nice win. Only took a few days to do and required no change in architecture, just adding the right link line.</p>
<p><strong>Cache Miss City</strong><br />
One of the possible problems that would really bring performance down is cache misses. The current architecture is base on dealing with single datums at a time rather than whole arrays of data. The genesis of these design decisions rests squarely with managements instance on a Model Driven Architectural way of doing things; also possibly from the developers wholesale embrace of object oriented mis-thinking.</p>
<p><strong>Network Bandwidth</strong><br />
One datum at a time is what I suspect to be one of the pillars of our problem. Why is this so costly? Because we kill the cache. We give up both code and data locality. We guarantee that each datum requires at least two context switches.</p>
<blockquote><p>Switching from one running process to another running process incurs a cost to the system. The values of all the registers must be saved in the present state, the status of all open files must be recorded and the present position in the program must be recorded. Then the contents of the MMU must be stored for the process (see next chapter). Then all those things must be read in for the next process, so that the state of the system is exactly as it was when the scheduler last interrupted the process. This is called a context switch. Context switching is a system overhead. It costs real time and CPU cycles, so we don&#8217;t want to context switch too often, or a lot of time will be wasted.</p></blockquote>
<p><strong>Using <a href="http://www.netperf.org/netperf/NetperfPage.html">Netperf</a> 2.4.2</strong><br />
Let&#8217;s do a little digging.</p>
<pre>
[andrew]$ ./netperf -a 4096 -t STREAM_STREAM

STREAM STREAM TEST

Recv   Send    Send

Socket Socket  Message  Elapsed

Size   Size    Size     Time     Throughput

bytes  bytes   bytes    secs.    10^6bits/sec110592  110592  110592    10.00    20369.26

[andrew]$ ./netperf  -t STREAM_STREAM

STREAM STREAM TEST

Recv   Send    Send

Socket Socket  Message  Elapsed

Size   Size    Size     Time     Throughput

bytes  bytes   bytes    secs.    10^6bits/sec

110592  110592  110592    10.00    16062.94

[andrew]$

bash-3.00$ ./netperf -a 4090 -A 4096 -c -C  -f G -n 2  -t STREAM_STREAM
STREAM STREAM TEST
Recv   Send    Send                          Utilization    Service Demand
Socket Socket  Message  Elapsed              Send   Recv    Send    Recv
Size   Size    Size     Time     Throughput  local  remote  local   remote
bytes  bytes   bytes    secs.    GBytes  /s  %      %       us/KB   us/KB

110592  110592  110592    10.00      2.48   99.90  99.90   0.768   6445907.000

bash-3.00$ ./netperf -a 4090 -A 4096 -c -C  -f G -n 2  -t STREAM_STREAM
STREAM STREAM TEST
Recv   Send    Send                          Utilization    Service Demand
Socket Socket  Message  Elapsed              Send   Recv    Send    Recv
Size   Size    Size     Time     Throughput  local  remote  local   remote
bytes  bytes   bytes    secs.    GBytes  /s  %      %       us/KB   us/KB

110592  110592  110592    10.00         2.48   99.90  99.90   0.768   6445907.000

bash-3.00$ ./netperf -a 4090 -A 4096 -c -C  -f G -n 2  -t STREAM_STREAM -- -m 128 -M 128
STREAM STREAM TEST
Recv   Send    Send                          Utilization    Service Demand
Socket Socket  Message  Elapsed              Send   Recv    Send    Recv
Size   Size    Size     Time     Throughput  local  remote  local   remote
bytes  bytes   bytes    secs.    GBytes  /s  %      %       us/KB   us/KB

110592  110592     128    10.00         0.02   99.25  99.25   105.632  886107072.000

bash-3.00$ ./netperf -a 4090 -A 4096 -c -C  -f G   -t STREAM_RR
STREAM REQUEST/RESPONSE TEST
Local /Remote
Socket Size   Request Resp.  Elapsed Trans.   CPU    CPU    S.dem   S.dem
Send   Recv   Size    Size   Time    Rate     local  remote local   remote
bytes  bytes  bytes   bytes  secs.   per sec  %      %      us/Tr   us/Tr

110592 110592 1       1      10.00   44428.70   80.85  80.91  36.397  933560.938
110592 110592

bash-3.00$ ./netperf -a 4090 -A 4096 -c -C  -f G   -t STREAM_RR -- -r 100,100
STREAM REQUEST/RESPONSE TEST
Local /Remote
Socket Size   Request Resp.  Elapsed Trans.   CPU    CPU    S.dem   S.dem
Send   Recv   Size    Size   Time    Rate     local  remote local   remote
bytes  bytes  bytes   bytes  secs.   per sec  %      %      us/Tr   us/Tr

110592 110592 100     100    10.00   45457.03   80.10  80.20  35.244  904538.250
110592 110592

bash-3.00$ ./netperf -a 4090 -A 4096 -c -C  -f G   -t STREAM_RR -- -r 100K,100K
STREAM REQUEST/RESPONSE TEST
Local /Remote
Socket Size   Request Resp.  Elapsed Trans.   CPU    CPU    S.dem   S.dem
Send   Recv   Size    Size   Time    Rate     local  remote local   remote
bytes  bytes  bytes   bytes  secs.   per sec  %      %      us/Tr   us/Tr

110592 110592 100     100    10.00   45404.84   80.20  80.35  35.328  907267.312
110592 110592</pre>
<pre></pre>
<pre>bash-3.00$ ./netperf -c -C -t STREAM_STREAM
STREAM STREAM TEST
Recv   Send    Send                          Utilization    Service Demand
Socket Socket  Message  Elapsed              Send   Recv    Send    Recv
Size   Size    Size     Time     Throughput  local  remote  local   remote
bytes  bytes   bytes    secs.    10^6bits/s  %      %       us/KB   us/KB

110592  110592  110592    10.00      16154.77   97.50  97.50   0.989   8294972.500</pre>
<p><strong>FLOPS for 3&#215;3 Inversion</strong></p>
<pre>
m3 = {{a11,a12,a13},{a21,a22,a23},{a31,a32,a33}}

{{a11,a12,a13},{a21,a22,a23},{a31,a32,a33}}

Inverse[m3]

{{(-a23 a32+a22 a33)/(-a13 a22 a31+a12 a23 a31+a13 a21 a32-a11 a23 a32-

          a12 a21 a33+a11 a22 a33),(

        a13 a32-a12 a33)/(-a13 a22 a31+a12 a23 a31+a13 a21 a32-a11 a23 a32-

          a12 a21 a33+a11 a22 a33),(-a13 a22+a12 a23)/(-a13 a22 a31+

          a12 a23 a31+a13 a21 a32-a11 a23 a32-a12 a21 a33+a11 a22 a33)},{(

        a23 a31-a21 a33)/(-a13 a22 a31+a12 a23 a31+a13 a21 a32-a11 a23 a32-

          a12 a21 a33+a11 a22 a33),(-a13 a31+a11 a33)/(-a13 a22 a31+

          a12 a23 a31+a13 a21 a32-a11 a23 a32-a12 a21 a33+a11 a22 a33),(

        a13 a21-a11 a23)/(-a13 a22 a31+a12 a23 a31+a13 a21 a32-a11 a23 a32-

          a12 a21 a33+a11 a22 a33)},{(-a22 a31+a21 a32)/(-a13 a22 a31+

          a12 a23 a31+a13 a21 a32-a11 a23 a32-a12 a21 a33+a11 a22 a33),(

        a12 a31-a11 a32)/(-a13 a22 a31+a12 a23 a31+a13 a21 a32-a11 a23 a32-

          a12 a21 a33+a11 a22 a33),(-a12 a21+a11 a22)/(-a13 a22 a31+

          a12 a23 a31+a13 a21 a32-a11 a23 a32-a12 a21 a33+a11 a22 a33)}}</pre>
<p>The denominator is common taking 18 multiplys and 5 adds. The numerators take 18 multiplys and 9 adds. Then there are 9 divides for the elements. That is 36 mutiplys, 9 divides, and 5 adds for a total of 50 FLOPS for a 3&#215;3 inversion.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.drewk.net/computational-performance/2007/12/28/feed/</wfw:commentRss>
		</item>
		<item>
		<title>KML Goodness</title>
		<link>http://blog.drewk.net/kml-goodness/2007/12/15/</link>
		<comments>http://blog.drewk.net/kml-goodness/2007/12/15/#comments</comments>
		<pubDate>Sun, 16 Dec 2007 03:19:04 +0000</pubDate>
		<dc:creator>andrewk</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.drewk.net/kml-goodness/2007/12/15/</guid>
		<description><![CDATA[http://drewk.net/NetBeansProjects.zip
/*
 * Writting a KML facility to help with FCS debugging.
 */
package gekml;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
/**
 * < ?xml version="1.0" encoding="UTF-8"?>
 * 
 *

 *   Simple placemark
 *   Attached to the ground. Intelligently places itself
 *      at the height of the underlying terrain.
 *

 [...]]]></description>
			<content:encoded><![CDATA[<p>http://drewk.net/NetBeansProjects.zip</p>
<p>/*<br />
 * Writting a KML facility to help with FCS debugging.<br />
 */<br />
package gekml;</p>
<p>import java.io.FileNotFoundException;<br />
import java.io.FileOutputStream;<br />
import java.io.IOException;<br />
import java.io.PrintWriter;<br />
import java.util.ArrayList;</p>
<p>/**<br />
 * < ?xml version="1.0" encoding="UTF-8"?><br />
 * <kml xmlns="http://earth.google.com/kml/2.2"><br />
 *
<placemark>
 *   <name>Simple placemark</name><br />
 *   <description>Attached to the ground. Intelligently places itself<br />
 *      at the height of the underlying terrain.</description><br />
 *
<point>
 *     <coordinates>-122.0822035425683,37.42228990140251,0</coordinates><br />
 *   </point>
 * </placemark>
 * </kml><br />
 * @author drew<br />
 * @author Andrew Kaluzniacki : drewk.net<br />
 * @copyright Andrew Kaluzniacki<br />
 */<br />
public class KmlFile {</p>
<p>    private KmlFile() {</p>
<p>    // empty<br />
    }</p>
<p>    public static KmlFile create() {<br />
        return new KmlFile();<br />
    }<br />
    private ArrayList placemarkList = new ArrayList();</p>
<p>    public void addPlacemark(double longitude, double latitude, String name, String description) {<br />
        placemarkList.add(new Placemark(longitude, latitude, 0, name, description));<br />
    }</p>
<p>    public void saveAs(String filePath) {</p>
<p>        FileOutputStream out = null;<br />
        try {<br />
            out = new FileOutputStream(filePath);<br />
        } catch (FileNotFoundException ex) {<br />
            ex.printStackTrace();<br />
            throw new IllegalArgumentException(&#8221;SaveAs must have valid filePath:&#8221; + filePath);<br />
        }<br />
        PrintWriter pw = new PrintWriter(out);</p>
<p>        pw.print(&#8221;< ?xml version=\"1.0\" encoding=\"UTF-8\"?>&#8220;);<br />
        pw.print(&#8221; <kml xmlns=\"http://earth.google.com/kml/2.2\">&#8220;);</p>
<p>        for (int i = 0; i < placemarkList.size(); i++) {<br />
            pw.print(((Placemark) placemarkList.get(i)).toXmlString());<br />
        }</p>
<p>        pw.print(" </kml>&#8220;);</p>
<p>        if (pw.checkError()) {<br />
            System.err.println(&#8221;Error in &#8221; + pw.toString());<br />
        }</p>
<p>        pw.close();<br />
        try {<br />
            out.close();<br />
        } catch (IOException ex) {<br />
            ex.printStackTrace();<br />
            throw new IllegalStateException(&#8221;Error in KmlFile::SaveAs()&#8221;);<br />
        } finally {<br />
            try {<br />
                out.close();<br />
            } catch (IOException ex) {<br />
                ex.printStackTrace();<br />
            }<br />
        }<br />
    }<br />
}</p>
<p>&#8212;&#8212;&#8211;</p>
<p>/*<br />
 * To change this template, choose Tools | Templates<br />
 * and open the template in the editor.<br />
 * Andrew Kaluzniacki<br />
 *<br />
 */</p>
<p>/**<br />
 * Two key items:<br />
 * Placemarks - used to show aimpoints<br />
 * Polygon - used to show the target area<br />
 *<br />
 * Start:<br />
 * If I can just get plaecmarks working, I can fake target areas.<br />
 * The key is to get the addPlacemark(location, name)<br />
 *<br />
 *<br />
 * References:<br />
 * http://code.google.com/apis/kml/documentation/kml_tut.html#descriptive_html<br />
 *<br />
 *<br />
 *<br />
 * < ?xml version="1.0" encoding="UTF-8"?><br />
 * </kml><kml xmlns="http://earth.google.com/kml/2.2"><br />
 *
<placemark>
 *   <name>Simple placemark</name><br />
 *   <description>Attached to the ground. Intelligently places itself<br />
 *      at the height of the underlying terrain.</description><br />
 *
<point>
 *     <coordinates>-122.0822035425683,37.42228990140251,0</coordinates><br />
 *   </point>
 * </placemark>
 * </kml><br />
 *<br />
 *<br />
 */<br />
package gekml;</p>
<p>/**<br />
 *<br />
 * @author drew<br />
 */<br />
public class Main {</p>
<p>    /**<br />
     * @param args the command line arguments<br />
     */<br />
    public static void main(String[] args) {</p>
<p>        // Create a nice  kml file<br />
        KmlFile kf = KmlFile.create();</p>
<p>        // 32°25&#8242;34.65&#8243;N<br />
        // ﻿106°40&#8242;13.68&#8243;W<br />
		kf.addPlacemark( -106.6253642521367, 32.35612182602554, &#8220;AndrewK&#8221;, &#8220;Is Success&#8221;);<br />
		kf.saveAs(&#8221;my.kml&#8221;);<br />
    }<br />
}</p>
<p>&#8212;&#8212;-<br />
/*<br />
 * To change this template, choose Tools | Templates<br />
 * and open the template in the editor.<br />
 */</p>
<p>package gekml;</p>
<p>/**<br />
 * *
<placemark>
 *   <name>Simple placemark</name><br />
 *   <description>Attached to the ground. Intelligently places itself<br />
 *      at the height of the underlying terrain.</description><br />
 *
<point>
 *     <coordinates>-122.0822035425683,37.42228990140251,0</coordinates><br />
 *   </point>
 *  </placemark>
 * @author drew<br />
 * @author Andrew Kaluzniacki : drewk.net<br />
 * @copyright Andrew Kaluzniacki<br />
 */<br />
public class Placemark {</p>
<p>    private double longitude;<br />
    private double latitude;<br />
    /** relative to ground - o is at ground level */<br />
    private double altitude;<br />
    private String name = &#8220;Untitled Placemark&#8221;;<br />
    private String description = &#8220;&#8221;;</p>
<p>    Placemark(double longitude, double latitude, double altitude, String name, String description)<br />
    {<br />
        this.longitude = longitude;<br />
        this.latitude = latitude;<br />
        this.altitude = altitude;<br />
        if ( name != null ) {<br />
            this.name = name;<br />
        }<br />
        if ( description != null ) {<br />
            this.description = description;<br />
        }<br />
    }</p>
<p>    /** Write to stream as xml<br />
     *<br />
     */<br />
    String toXmlString() {<br />
        StringBuffer buf = new StringBuffer();<br />
        buf.append(&#8221;
<placemark>\n&#8221;);<br />
        buf.append(&#8221;  <name>&#8220;).append(name).append(&#8221;</name>\n&#8221;);<br />
        buf.append(&#8221;  <description>&#8220;).append(description).append(&#8221;</description>\n&#8221;);<br />
        buf.append(&#8221;
<point>\n&#8221;);<br />
        buf.append(&#8221;    <coordinates>&#8220;).append(longitude).append(&#8217;,');<br />
        buf.append(latitude).append(&#8217;,').append(altitude).append(&#8221;</coordinates>\n&#8221;);<br />
        buf.append(&#8221;  </point>\n&#8221;);<br />
        buf.append(&#8221;</placemark>\n&#8221;);<br />
        return buf.toString();<br />
    }<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.drewk.net/kml-goodness/2007/12/15/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Apple Studio Display</title>
		<link>http://blog.drewk.net/apple-studio-display/2007/11/23/</link>
		<comments>http://blog.drewk.net/apple-studio-display/2007/11/23/#comments</comments>
		<pubDate>Sat, 24 Nov 2007 01:33:21 +0000</pubDate>
		<dc:creator>andrewk</dc:creator>
		
		<category><![CDATA[apple]]></category>

		<guid isPermaLink="false">http://blog.drewk.net/apple-studio-display/2007/11/23/</guid>
		<description><![CDATA[Info on the 15in Studio Display
 	 640&#215;480, 720&#215;400, 800&#215;600, 832&#215;624, 1024&#215;768
Manual
Using 50-75 Hz Vertical refresh
Xserver: press ctrl+alt+&#8217;+&#8217; to cycle resolutions
]]></description>
			<content:encoded><![CDATA[<p>Info on the 15in Studio Display<br />
 	 640&#215;480, 720&#215;400, 800&#215;600, 832&#215;624, 1024&#215;768</p>
<p><a href="http://manuals.info.apple.com/en/StudioDisplay_15inchLCDUserManual.PDF">Manual</a></p>
<p>Using 50-75 Hz Vertical refresh</p>
<p>Xserver: press ctrl+alt+&#8217;+&#8217; to cycle resolutions</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.drewk.net/apple-studio-display/2007/11/23/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CentOS 5</title>
		<link>http://blog.drewk.net/centos-5/2007/11/23/</link>
		<comments>http://blog.drewk.net/centos-5/2007/11/23/#comments</comments>
		<pubDate>Sat, 24 Nov 2007 01:16:09 +0000</pubDate>
		<dc:creator>andrewk</dc:creator>
		
		<category><![CDATA[CentOS]]></category>

		<guid isPermaLink="false">http://blog.drewk.net/centos-5/2007/11/23/</guid>
		<description><![CDATA[I&#8217;ve been using the CentOS Linux distribution for almost two years now. CentOS is based on Red Hat Enterprise. The reason I started using it in fact was that we were using RHEL on a project at work and I wanted to start using it at home so that I could become more adept with [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using the <a href="http://www.centos.org">CentOS</a> Linux distribution for almost two years now. CentOS is based on Red Hat Enterprise. The reason I started using it in fact was that we were using RHEL on a project at work and I wanted to start using it at home so that I could become more adept with the OS, but of course I was not willing to pay for the commercial version on my own dime. To be fair though, I recommend RHEL to clients.<br />CentOS 4 has worked very nicely for me and now I have a chance to set  up a new machine and I see that CentOS 5 is out.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.drewk.net/centos-5/2007/11/23/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Programming language for kids - Scratch wins!</title>
		<link>http://blog.drewk.net/programming-language-for-kids/2007/07/28/</link>
		<comments>http://blog.drewk.net/programming-language-for-kids/2007/07/28/#comments</comments>
		<pubDate>Sat, 28 Jul 2007 15:33:17 +0000</pubDate>
		<dc:creator>andrewk</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.drewk.net/programming-language-for-kids/2007/07/28/</guid>
		<description><![CDATA[Today&#8217;s question is what language to use to teach programming to a bright young child? I&#8217;ve seen the question before with answers ranging from Java to VB to Squeak. 
Slashdot has this  MIT Media Lab Making Programming Fun For Kids. Not surprising that there are some strong opinions in the thread.
Looks like Scratch is [...]]]></description>
			<content:encoded><![CDATA[<p>Today&#8217;s question is what language to use to teach programming to a bright young child? I&#8217;ve seen the question before with answers ranging from Java to VB to Squeak. </p>
<p>Slashdot has this <a href="http://it.slashdot.org/article.pl?sid=07/05/15/1420238"> MIT Media Lab Making Programming Fun For Kids</a>. Not surprising that there are some strong opinions in the thread.</p>
<p>Looks like <a href="http://scratch.mit.edu/">Scratch</a> is based on <a href="http://www.squeak.org/">Squeak</a> which in turn is based on Smalltalk. Smalltalk sound about the right speed!  I&#8217;ll have to look at both and see what I think.</p>
<p>Scratch is perfect for learning to program. I very much like the structuring of control, motion, sense, variable. The visual iconography of control structures wrapping statements is ingenious. </p>
<p>In a few hours we had a pong style game going. It is beautiful. Of course I can also see where some of the limits will occur. I don&#8217;t see any programmatic method of sprite creation or destruction.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.drewk.net/programming-language-for-kids/2007/07/28/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SMB set up</title>
		<link>http://blog.drewk.net/smb-set-up/2007/07/15/</link>
		<comments>http://blog.drewk.net/smb-set-up/2007/07/15/#comments</comments>
		<pubDate>Sun, 15 Jul 2007 21:34:12 +0000</pubDate>
		<dc:creator>andrewk</dc:creator>
		
		<category><![CDATA[CentOS]]></category>

		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[apple]]></category>

		<guid isPermaLink="false">http://blog.drewk.net/smb-set-up/2007/07/15/</guid>
		<description><![CDATA[I&#8217;d like to mount my Linux web directories on my Mac. SMB would seem appropriate.I think I have enabled SMB on linux, but I can not seem to get the finder to connect.smb://yyy.yyy.yyy.yyy which is not a valid address gets me nowhere.smb://xxx.xxx.xxx.xxx is valid and I can not connect because name or password is incorrect.smb://xxx.xxx.xxx.xxx/html [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;d like to mount my Linux web directories on my Mac. SMB would seem appropriate.I think I have enabled SMB on linux, but I can not seem to get the finder to connect.smb://yyy.yyy.yyy.yyy which is not a valid address gets me nowhere.smb://xxx.xxx.xxx.xxx is valid and I can not connect because name or password is incorrect.smb://xxx.xxx.xxx.xxx/html where html is the share name also fails.SMBClient may be useful for debugging.Ok, it seems to be a firewall/selinux issue. When I turn those off I can connect.System Settings:Security Level:
<ol>
<li>Firewall Options: Disable</li>
<li>Enabled, Enforcing Current</li>
</ol>
<p>Something broke. Ok, I needed <span style="font-family: 'Lucida Grande'; font-size: 13px; line-height: normal" class="Apple-style-span">smb://192.168.1.22/html </span>in the dialog.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.drewk.net/smb-set-up/2007/07/15/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
