<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-18901656</id><updated>2009-02-21T04:56:53.809-08:00</updated><title type='text'>Various tutorials</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://byteschreck.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18901656/posts/default'/><link rel='alternate' type='text/html' href='http://byteschreck.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>byteschreck</name><uri>http://www.blogger.com/profile/13271757938243655659</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-18901656.post-113189301306703557</id><published>2005-11-13T06:36:00.000-08:00</published><updated>2005-11-13T06:43:39.043-08:00</updated><title type='text'></title><content type='html'>&lt;span style="font-weight: bold;"&gt;Benchmark comparing Java, C++, Delphi, PHP and Python&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I created a little benchmark and was surprised to learn that Java outperformed C++. I am a Delphi developer and look for alternatives, and Java seems much more attractive  than both C++ and C#.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Here are the results (I used optimizations where available):&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Language / Execution time (ms.) -&gt; &lt;span style="font-weight: bold;"&gt;Less is better!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Java    599&lt;br /&gt;C++    6979&lt;br /&gt;Delphi    9708&lt;br /&gt;Python    55906&lt;br /&gt;PHP    171172&lt;br /&gt;&lt;br /&gt;Language / Speed (%) -&gt;&lt;span style="font-weight: bold;"&gt; Less is worse!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Java    100&lt;br /&gt;C++    8,6&lt;br /&gt;Delphi    6,1&lt;br /&gt;Python    1,1&lt;br /&gt;PHP    0,35&lt;br /&gt;&lt;br /&gt;And here is the source code:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;C++&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#include &lt;string&gt;&lt;br /&gt;#include &lt;windows.h&gt;&lt;br /&gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;class Robot&lt;br /&gt;{&lt;br /&gt;private:&lt;br /&gt;    string name;&lt;br /&gt;public:&lt;br /&gt;    void SetName(string name);&lt;br /&gt;    string GetName();&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;void Robot::SetName(string name)&lt;br /&gt;{&lt;br /&gt;    this-&gt;name = name;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;string Robot::GetName()&lt;br /&gt;{&lt;br /&gt;    return this-&gt;name;   &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;    int start = GetTickCount();&lt;br /&gt;    const int loops = 256;&lt;br /&gt;    const string name = "Terminator";&lt;br /&gt;&lt;br /&gt;    Robot** robots = new Robot*[loops];&lt;br /&gt;    int numInstances = 0;&lt;br /&gt;&lt;br /&gt;    for(int x=0; x&lt;loops; x++)&lt;br /&gt;    {&lt;br /&gt;        for(int y=0; y&lt;loops; y++)&lt;br /&gt;        {&lt;br /&gt;            for(int z=0; z&lt;loops; z++)&lt;br /&gt;            {&lt;br /&gt;                robots[x] = new Robot();&lt;br /&gt;                robots[x]-&gt;SetName(name);&lt;br /&gt;&lt;br /&gt;                if(robots[x]-&gt;GetName() == name)&lt;br /&gt;                    numInstances++;&lt;br /&gt;&lt;br /&gt;                delete robots[x];&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    delete [] robots;&lt;br /&gt;    int stop = GetTickCount();&lt;br /&gt;    printf("Created a total of %d instances.\n", numInstances);&lt;br /&gt;    printf("Took %d ms.\n", stop - start);&lt;br /&gt;&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Delphi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;program Benchmark;&lt;br /&gt;&lt;br /&gt;{$APPTYPE CONSOLE}&lt;br /&gt;&lt;br /&gt;uses&lt;br /&gt;  SysUtils, Windows;&lt;br /&gt;&lt;br /&gt;type&lt;br /&gt;  TRobot = class(TObject)&lt;br /&gt;  private&lt;br /&gt;    FName: String;&lt;br /&gt;    procedure SetName(Value: String);&lt;br /&gt;    function GetName: String;&lt;br /&gt;  public&lt;br /&gt;    property Name: String read GetName write SetName;&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;{ TRobot }&lt;br /&gt;&lt;br /&gt;function TRobot.GetName: String;&lt;br /&gt;begin&lt;br /&gt;  Result := FName;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TRobot.SetName(Value: String);&lt;br /&gt;begin&lt;br /&gt;  FName := Value;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;const&lt;br /&gt;  Loops = 256;&lt;br /&gt;  Name = 'Terminator';&lt;br /&gt;var&lt;br /&gt;  X, Y, Z: Integer;&lt;br /&gt;  Robots: array of TRobot;&lt;br /&gt;  Start, Stop: Integer;&lt;br /&gt;  NumInstances: Integer;&lt;br /&gt;begin&lt;br /&gt;  Start := GetTickCount;&lt;br /&gt;&lt;br /&gt;  NumInstances := 0;&lt;br /&gt;  SetLength(Robots, Loops);&lt;br /&gt;&lt;br /&gt;  for X := 0 to Loops - 1 do begin&lt;br /&gt;    for Y := 0 to Loops - 1 do begin&lt;br /&gt;      for Z := 0 to Loops - 1 do begin&lt;br /&gt;        Robots[X] := TRobot.Create;&lt;br /&gt;        Robots[X].Name := Name;&lt;br /&gt;&lt;br /&gt;        if Robots[X].Name = Name then&lt;br /&gt;          Inc(NumInstances);&lt;br /&gt;&lt;br /&gt;        Robots[X].Free;&lt;br /&gt;      end;&lt;br /&gt;    end;&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;  Stop := GetTickCount;&lt;br /&gt;  WriteLn(Format('Created a total of %d instances.', [NumInstances]));&lt;br /&gt;  WriteLn(Format('Took %d ms.', [Stop - Start]));&lt;br /&gt;&lt;br /&gt;  ReadLn;&lt;br /&gt;end.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Java&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;class Robot&lt;br /&gt;{&lt;br /&gt;    private String name;&lt;br /&gt;   &lt;br /&gt;    public void setName(String name)&lt;br /&gt;    {&lt;br /&gt;        this.name = name;&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    public String getName()&lt;br /&gt;    {&lt;br /&gt;        return this.name;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class Main&lt;br /&gt;{&lt;br /&gt;    public static void main(String[] args)&lt;br /&gt;    {&lt;br /&gt;        long start = System.currentTimeMillis();&lt;br /&gt;       &lt;br /&gt;        final int loops = 256;&lt;br /&gt;        final String name = "Terminator";&lt;br /&gt;        Robot[] robots = new Robot[loops];&lt;br /&gt;        long numInstances = 0;&lt;br /&gt;       &lt;br /&gt;        for(int x=0; x&lt;loops; x++)&lt;br /&gt;        {&lt;br /&gt;            for(int y=0; y&lt;loops; y++)&lt;br /&gt;            {&lt;br /&gt;                for(int z=0; z&lt;loops; z++)&lt;br /&gt;                {&lt;br /&gt;                    robots[x] = new Robot();&lt;br /&gt;                    robots[x].setName(name);&lt;br /&gt;                   &lt;br /&gt;                    if(robots[x].getName().equals(name))&lt;br /&gt;                        numInstances++;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;       &lt;br /&gt;        long stop = System.currentTimeMillis();&lt;br /&gt;        System.out.printf("Created a total of %d instances.\n", numInstances);&lt;br /&gt;        System.out.printf("Took %d ms.\n", stop - start);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;PHP&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;    class Robot&lt;br /&gt;    {&lt;br /&gt;        var $name;&lt;br /&gt;&lt;br /&gt;        function SetName($name)&lt;br /&gt;        {&lt;br /&gt;            $this-&gt;name = $name;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        function GetName()&lt;br /&gt;        {&lt;br /&gt;            return $this-&gt;name;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    $start = microtime(true);&lt;br /&gt;&lt;br /&gt;    $loops = 256;&lt;br /&gt;    $name = "Terminator";&lt;br /&gt;&lt;br /&gt;    $robots = array();&lt;br /&gt;    array_pad($robots, loops, null);&lt;br /&gt;&lt;br /&gt;    $num_instances = 0;&lt;br /&gt;    for($x=0; $x&lt;$loops; $x++)&lt;br /&gt;    {&lt;br /&gt;        for($y=0; $y&lt;$loops; $y++)&lt;br /&gt;        {&lt;br /&gt;            for($z=0; $z&lt;$loops; $z++)&lt;br /&gt;            {&lt;br /&gt;                $robots[$x] = new Robot();&lt;br /&gt;                $robots[$x]-&gt;SetName($name);&lt;br /&gt;&lt;br /&gt;                if($robots[$x]-&gt;GetName() == $name)&lt;br /&gt;                    $num_instances++;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    $stop = microtime(true);&lt;br /&gt;    printf("Created a total of %d instances.\n", $num_instances);&lt;br /&gt;    printf("Took %d ms.\n", ($stop - $start) * 1000);&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Python&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;import time&lt;br /&gt;&lt;br /&gt;class Robot:&lt;br /&gt;    def __init__(self):&lt;br /&gt;        self.name = ''&lt;br /&gt;&lt;br /&gt;    def set_name(self, value):&lt;br /&gt;        self.name = value&lt;br /&gt;&lt;br /&gt;    def get_name(self):&lt;br /&gt;        return self.name&lt;br /&gt;&lt;br /&gt;start = time.time()&lt;br /&gt;loops = 256&lt;br /&gt;name = "Terminator"&lt;br /&gt;&lt;br /&gt;robots = []&lt;br /&gt;for x in xrange(loops):&lt;br /&gt;    robots.append(None)&lt;br /&gt;&lt;br /&gt;num_instances = 0&lt;br /&gt;&lt;br /&gt;for x in xrange(loops):&lt;br /&gt;    for y in xrange(loops):&lt;br /&gt;        for z in xrange(loops):&lt;br /&gt;            robots[x] = Robot()&lt;br /&gt;            robots[x].set_name(name)&lt;br /&gt;&lt;br /&gt;            if robots[x].get_name() == name:&lt;br /&gt;                num_instances += 1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;stop = time.time()&lt;br /&gt;print "Created a total of %d instances." % (num_instances)&lt;br /&gt;print "Took %d ms." % ((stop - start) * 1000)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18901656-113189301306703557?l=byteschreck.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://byteschreck.blogspot.com/feeds/113189301306703557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18901656&amp;postID=113189301306703557' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18901656/posts/default/113189301306703557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18901656/posts/default/113189301306703557'/><link rel='alternate' type='text/html' href='http://byteschreck.blogspot.com/2005/11/benchmark-comparing-java-c-delphi-php.html' title=''/><author><name>byteschreck</name><uri>http://www.blogger.com/profile/13271757938243655659</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11481829702637993009'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18901656.post-113181582966440332</id><published>2005-11-12T09:00:00.000-08:00</published><updated>2005-11-12T10:46:01.293-08:00</updated><title type='text'></title><content type='html'>This is a simple step by step tutorial that explains how to setup Eclipse on Windows for SDLJava:&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Download sdljava-0.9.1-win32-bin.zip&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;optionally &lt;/span&gt;sdljava-0.9.1-src.zip (It contains the source code for the samples, very handy).&lt;/li&gt;      &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Extract &lt;/span&gt;to any directory (e.g. C:\Java\sdljava-0.9.1)&lt;sdljava&gt;.&lt;/sdljava&gt;&lt;/li&gt;&lt;li&gt;Click &lt;span style="font-weight: bold;"&gt;Start &lt;/span&gt;-&gt; &lt;span style="font-weight: bold;"&gt;Settings &lt;/span&gt;-&gt; &lt;span style="font-weight: bold;"&gt;Control Panel &lt;/span&gt;-&gt; &lt;span style="font-weight: bold;"&gt;System &lt;/span&gt;-&gt; &lt;span style="font-weight: bold;"&gt;Advanced &lt;/span&gt;-&gt; &lt;span style="font-weight: bold;"&gt;Environment Variables&lt;/span&gt; and append &lt;span style="font-weight: bold;"&gt;C:\Java\sdljava-0.9.1\lib&lt;/span&gt; to the &lt;span style="font-weight: bold;"&gt;Path &lt;/span&gt;system variable.&lt;/li&gt;   &lt;li&gt;Go to C:\Java\sdljava-0.9.1&lt;sdljava&gt;\bin and &lt;span style="font-weight: bold;"&gt;execute testsprite.bat &lt;/span&gt;- If it works, congratulations, 75% done.&lt;/sdljava&gt;&lt;/li&gt;    &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Open Eclipse&lt;/span&gt;, create a new project, add a source file to it and paste the following into it:&lt;/li&gt;   &lt;div style="text-align: left;"&gt; &lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;import sdljava.*;&lt;br /&gt;import sdljava.video.*;&lt;br /&gt;&lt;br /&gt;class HelloSDL {&lt;br /&gt;public static void main(String[] args) {&lt;br /&gt;final String caption = "Hello, SDL!";&lt;br /&gt;System.out.println(caption);&lt;br /&gt;&lt;br /&gt;try {&lt;br /&gt;   SDLMain.init(SDLMain.SDL_INIT_VIDEO);  &lt;br /&gt;   SDLVideo.wmSetCaption(caption, caption);&lt;br /&gt;   SDLSurface screen = SDLVideo.setVideoMode(640, 480, 24, 0);&lt;br /&gt;   java.lang.Thread.sleep(2500);&lt;br /&gt;&lt;br /&gt;} catch(Exception e) {&lt;br /&gt;   e.printStackTrace();&lt;br /&gt;} finally {&lt;br /&gt;   SDLMain.quit();&lt;br /&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt; &lt;/div&gt;&lt;br /&gt;&lt;li&gt;Right click the source file and choose &lt;span style="font-weight: bold;"&gt;Run As ... Run&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;If there isn't already an &lt;span style="font-weight: bold;"&gt;entry below "Java Application"&lt;/span&gt;, create one. Ensure that the main class is set to "HelloSDL".&lt;/li&gt;    &lt;li&gt;Switch to the &lt;span style="font-weight: bold;"&gt;Arguments &lt;/span&gt;tab and add the following to &lt;span style="font-weight: bold;"&gt;VM arguments&lt;/span&gt;: &lt;span style="font-weight: bold;"&gt;-Djava.library.path=C:\Java\sdljava-0.9.1\lib&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Open the project properties&lt;/span&gt;, select &lt;span style="font-weight: bold;"&gt;Java Build Path -&gt; Libraries&lt;/span&gt; and click on &lt;span style="font-weight: bold;"&gt;Add external JARs&lt;/span&gt;, then choose &lt;span style="font-weight: bold;"&gt;C:\Java\sdljava-0.9.1\lib\sdljava.jar&lt;/span&gt; and click Open.&lt;/li&gt; &lt;font&gt;&lt;font&gt;&lt;font&gt;    &lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;Run the project.&lt;/span&gt; If it works, that's all there is to it!&lt;/li&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/ol&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;Make sure you consult the &lt;span style="font-weight: bold;"&gt;SDL documentation&lt;/span&gt; and the&lt;span style="font-weight: bold;"&gt; sample source code&lt;/span&gt; that ships with SDLJava (&lt;span style="font-weight: bold;"&gt;testsrc\testsuite&lt;/span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18901656-113181582966440332?l=byteschreck.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://byteschreck.blogspot.com/feeds/113181582966440332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18901656&amp;postID=113181582966440332' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18901656/posts/default/113181582966440332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18901656/posts/default/113181582966440332'/><link rel='alternate' type='text/html' href='http://byteschreck.blogspot.com/2005/11/this-is-simple-step-by-step-tutorial.html' title=''/><author><name>byteschreck</name><uri>http://www.blogger.com/profile/13271757938243655659</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11481829702637993009'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry></feed>