<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
	<channel>
		<title>BlitzBasic Portal Worklogs - BlitzMax Standard Library</title>
		<link>https://www.blitzforum.de/worklogs/349/</link>
		<description>Worklog von ProfJake</description>
		<language>de</language>
		<managingEditor>mail@blitzforum.de</managingEditor>
		<webMaster>mail@blitzforum.de</webMaster>
		<pubDate>Thu, 17 Mar 2011 18:13:17 +0100</pubDate>
		<lastBuildDate>Thu, 17 Mar 2011 18:13:17 +0100</lastBuildDate>

		<item>
			<title>Application</title>
			<link>https://www.blitzforum.de/worklogs/349/#3217</link>
			<guid>https://www.blitzforum.de/worklogs/349/#3217</guid>
			<author>ProfJake</author>
			<description>F&amp;uuml;r gew&amp;ouml;hnlich fangen BlitzMax Programme einfach bei der ersten Code-Zeile an laufen dann durch.&lt;br /&gt;Selbstverst&amp;auml;ndlich ist es jedem freigestellt, sich einen eigenen Application-Type zu schreiben (wxMax macht das beispielsweise) und diesen dann zu initiieren. Aber da kocht nat&amp;uuml;rlich wieder jeder sein S&amp;uuml;ppchen.&lt;br /&gt;&lt;br /&gt;Java hat sie, Monkey hat sie (naja, fast) und jetzt auch BlitzMax: Eine feste Klasse f&amp;uuml;r Applications.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;TApplication&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ein abstrakter Type, dessen als letzter registrierter &lt;i&gt;Child Type&lt;/i&gt; automatisch erkannt wird. Von diesem wird dann ohne weiteres Zutun des Programmierers die &lt;i&gt;run()&lt;/i&gt; Methode aufgerufen. Das passiert hinter den Kulissen mit ein bisschen C-Magie : )&lt;br /&gt;&lt;br /&gt;Hier mal ein Beispiel:&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]Import std.application&lt;br /&gt;&lt;br /&gt;Type TExampleApplication Extends TApplication&lt;br /&gt;&lt;br /&gt;	Method run()&lt;br /&gt;		Print &amp;quot;BlitzMax still has got some suprises for you!&amp;quot;&lt;br /&gt;	End Method&lt;br /&gt;&lt;br /&gt;End Type[/syntax]&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]Output: &amp;quot;BlitzMax still has got some suprises for you!&amp;quot;[/syntax]&lt;br /&gt;&lt;br /&gt;Ich denke, den Type k&amp;ouml;nnte man sp&amp;auml;ter sehr komfortabel erweitern, z.B &lt;i&gt;TGUIApplication&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Bei dem Thema Event-Handling bin ich mir noch nicht ganz sicher, wie ich das handhaben werde.&lt;br /&gt;Methoden wie &lt;i&gt;onStartup&lt;/i&gt;, &lt;i&gt;onExit&lt;/i&gt; sind zur Zeit eingebaut. Das k&amp;ouml;nnte man nat&amp;uuml;rlich auch &amp;uuml;ber &lt;i&gt;New&lt;/i&gt; und &lt;i&gt;Delete&lt;/i&gt; l&amp;ouml;sen, aber bei weiteren geplanten Aktionen, wie z.B &lt;i&gt;onActive&lt;/i&gt;, w&amp;auml;re das dann etwas inkonsistent.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Keep coding,&lt;br /&gt;&lt;br /&gt;Fabian</description>
			<pubDate>Thu, 17 Mar 2011 18:13:17 +0100</pubDate>
		</item>

		<item>
			<title>Back On Track</title>
			<link>https://www.blitzforum.de/worklogs/349/#3185</link>
			<guid>https://www.blitzforum.de/worklogs/349/#3185</guid>
			<author>ProfJake</author>
			<description>Hi,&lt;br /&gt;&lt;br /&gt;nach langer Auszeit hab ich nun endlich wieder Internetanschluss, was der Produktivit&amp;auml;t doch merklich zugute kommt.&lt;br /&gt;&lt;br /&gt;Die BSL w&amp;auml;chst und w&amp;auml;chst stetig weiter und obwohl noch l&amp;auml;ngst nicht alles in T&amp;uuml;ten ist, sind schon viele neue Features geplant und teils implementiert. So bastele ich so nebenbei noch an einem eigenen Threading Modul, was mehr auf OOP zugeschnitten ist.&lt;br /&gt;&lt;br /&gt;Um auch mal was Konkretes f&amp;uuml;r die Netzgemeinde zu melden, noch ein paar Funktionen des neuen &lt;b&gt;Char&lt;/b&gt; Types. Damit wird die &amp;Uuml;berpr&amp;uuml;fung und Umwandlung von Character Codes wesentlich eleganter gel&amp;ouml;st, als durch st&amp;auml;ndig selbstgeschriebene Funktionen.&lt;br /&gt;Die Funktionalit&amp;auml;t wird sich an der anderer Sprachen wie C/Java anlehnen, aber ich bin noch am experimentieren. (Unicode etc)&lt;br /&gt;Hier ein kleiner Ausblick:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;isAlpha&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Char.isAlpha:Int(character:Int)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Pr&amp;uuml;ft, ob der angegebene character ein Buchstabe des Alphabets ist.&lt;br /&gt;Als alphabetische Buchstaben gelten folgende: &lt;i&gt;A a B b C c D d E e F f G g H h I i J j K k L l M m N n O o P p Q q R r S s T t U u V v W w X x Y y Z z&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;isDigit&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Char.isDigit:Int(character:Int)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Pr&amp;uuml;ft, ob der angegebene character eine dezimale Ziffer ist.&lt;br /&gt;Als dezimale Ziffern gelten folgende: &lt;i&gt;0 1 2 3 4 5 6 7 8 9&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;isHexDigit&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Char.isHexDigit:Int(character:Int)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Pr&amp;uuml;ft, ob der angegebene character eine hexadezimale Ziffer ist.&lt;br /&gt;Als hexadezimale Ziffern gelten folgende: &lt;i&gt;0 1 2 3 4 5 6 7 8 9 A a B b C c D d E e F f&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Das ganze wird im Modul &lt;i&gt;brl.blitz&lt;/i&gt; enthalten sein, kann also auf die interne Code Tabelle von BlitzMax zugreifen und beispielsweise sehr effizient in Gro&amp;szlig;- &amp;amp; Kleinschreibung umwandeln.&lt;br /&gt;Dazu musste ich die interne Struktur des Moduls wieder etwas &amp;auml;ndern, aber nat&amp;uuml;rlich &amp;auml;ndert sich an der API faktisch nichts.&lt;br /&gt;&lt;br /&gt;Keep coding,&lt;br /&gt;&lt;br /&gt;Fabian</description>
			<pubDate>Wed, 16 Feb 2011 22:16:36 +0100</pubDate>
		</item>

		<item>
			<title>Goodbye toHandle/fromHandle</title>
			<link>https://www.blitzforum.de/worklogs/349/#3073</link>
			<guid>https://www.blitzforum.de/worklogs/349/#3073</guid>
			<author>ProfJake</author>
			<description>Kleiner Zwischebericht:&lt;br /&gt;&lt;br /&gt;BlitzMax kommt wohl mit dem erweiterten Object Type nicht so wirklich klar, deshalb musste ich die &lt;b&gt;toHandle&lt;/b&gt;/&lt;b&gt;fromHandle&lt;/b&gt; Geschichte wieder entfernen.&lt;br /&gt;Daf&amp;uuml;r gibt's jetzt freshe Iteratoren und der Bug ist gefixt. Testprogramme mit MiniB3D laufen problemlos.&lt;br /&gt;&lt;br /&gt;Kleiner Vorgeschmack:&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]For Local character:String = EachIn &amp;quot;abc&amp;quot;.reverse()&lt;br /&gt;    Print character&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;' Output: c b a[/syntax]&lt;br /&gt;&lt;br /&gt;Eine genauere Beschreibung der Iteratoren kommt sp&amp;auml;ter, jetzt erstmal nur so viel: Alle Iteratoren implementieren das &lt;b&gt;IIterator&lt;/b&gt; Interface, das die Methoden &lt;b&gt;hasNext&lt;/b&gt;, &lt;b&gt;setNext&lt;/b&gt; und &lt;b&gt;getCurrent&lt;/b&gt; bereitstellt.&lt;br /&gt;&lt;br /&gt;Keep coding,&lt;br /&gt;&lt;br /&gt;Fabian</description>
			<pubDate>Fri, 17 Dec 2010 12:57:14 +0100</pubDate>
		</item>

		<item>
			<title>Logo</title>
			<link>https://www.blitzforum.de/worklogs/349/#3059</link>
			<guid>https://www.blitzforum.de/worklogs/349/#3059</guid>
			<author>ProfJake</author>
			<description>Hi Blitzer,&lt;br /&gt;&lt;br /&gt;ich &amp;auml;rgere mich immer noch mit dem Code-Highlighting rum (in JavaScript - kennt da jemand was gutes f&amp;uuml;r BlitzMax?) deshalb hab ich mich zur Abwechslung mal um das Logo gek&amp;uuml;mmert.&lt;br /&gt;Eigentlich war es nur als Platzhalter gedacht, aber mittlerweile gef&amp;auml;llt es mir doch recht gut.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;https://www.blitzforum.de/upload/file.php?id=9943&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Gef&amp;auml;llt's euch? Und noch viel wichtiger .. liest das hier &amp;uuml;berhaupt jemand??&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Fabian</description>
			<pubDate>Thu, 09 Dec 2010 20:10:21 +0100</pubDate>
		</item>

		<item>
			<title>GC</title>
			<link>https://www.blitzforum.de/worklogs/349/#3057</link>
			<guid>https://www.blitzforum.de/worklogs/349/#3057</guid>
			<author>ProfJake</author>
			<description>Okay, Nikolaus ist nichts geworden, da ein Bug aufgetreten ist, den ich noch nicht fixen konnte.&lt;br /&gt;Daf&amp;uuml;r erz&amp;auml;hle ich euch heute was &amp;uuml;ber den &lt;b&gt;Garbage Collector&lt;/b&gt; (GC) von BlitzMax.&lt;br /&gt;&lt;br /&gt;Die Funktionen &lt;b&gt;GCCollect()&lt;/b&gt;, &lt;b&gt;GCSetMode()&lt;/b&gt; etc sind euch ja sicher bekannt (ansonsten: Dokumentation lesen). Da zusammenhangslose Funktionen aber irgendwie dem top-modernen Ansatz ( &lt;img src=&quot;/forum/images/smiles/icon_wink.gif&quot; alt=&quot;Wink&quot; /&gt; ) von BlitzMax widersprechen, habe ich alle die mit dem GC zusammenh&amp;auml;ngen in einen eigenen Type verfrachtet. So sind die beiden gerade genannten jetzt zum Beispiel als &lt;b&gt;GC.collect()&lt;/b&gt; und &lt;b&gt;GC.setMode()&lt;/b&gt; zu finden.&lt;br /&gt;&lt;br /&gt;Von der Geschwindigkeit her sind sie nur unmerklich langsamer, da ich sie nicht in BlitzMax implementiert habe.&lt;br /&gt;Genau genommen sind sie nicht einmal in C implementiert, sondern irgendwo dazwischen einfach deklariert.&lt;br /&gt;Die Funktionen des &lt;b&gt;GC&lt;/b&gt; Types rufen deshalb ohne Umwege die original C Funktionen auf. Desweiteren ist der Type nicht von Object abgeleitet und als &lt;i&gt;Abstract Final&lt;/i&gt; implementiert. Ich glaube mehr kann man da nicht optimieren.&lt;br /&gt;&lt;br /&gt;Und *Trommelwirbel* es gibt nat&amp;uuml;rlich neues Spielzeug. Zwei Konstanten &lt;b&gt;GC.ModeAutomatic:Int  = 1&lt;/b&gt; und &lt;b&gt;GC.ModeManual:Int = 2&lt;/b&gt; repr&amp;auml;sentieren die beiden m&amp;ouml;glichen Modi. Der Modus in dem der GC arbeitet, kann wie schon erw&amp;auml;hnt mit &lt;b&gt;GC.setMode&lt;/b&gt; gesetzt werden. Zus&amp;auml;tzlich kann er jetzt aber auch ganz simpel ausgelesen werden:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;getMode&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;GC.getMode:Int()&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Liefert den Modus in dem der GC aktuell arbeitet. Standard ist &lt;b&gt;GC.ModeAutomatic&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]GC.setMode(GC.Manual)&lt;br /&gt;Print &amp;quot;GC mode: &amp;quot; + GC.getMode()&lt;br /&gt;' Output: 2[/syntax]&lt;br /&gt;&lt;br /&gt;Das war's erstmal von mir. Als n&amp;auml;chstes werde ich erstmal den Bug fixen m&amp;uuml;ssen. Ansonsten bastle ich gerade an der Dokumentation, die sich von der doch recht dr&amp;ouml;gen Klotz-Doku des Originals doch stark unterscheidet.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Fabian</description>
			<pubDate>Tue, 07 Dec 2010 08:28:14 +0100</pubDate>
		</item>

		<item>
			<title>Handles</title>
			<link>https://www.blitzforum.de/worklogs/349/#3051</link>
			<guid>https://www.blitzforum.de/worklogs/349/#3051</guid>
			<author>ProfJake</author>
			<description>Kaum zu Glauben, aber BlitzMax hat ein eigenes System um ein Integer Handle eines Objects zu bekommen und daraus selbstverst&amp;auml;ndlich sp&amp;auml;ter wieder das Objekt zu bekommen.&lt;br /&gt;Die zwei Befehle &lt;b&gt;HandleFromObject&lt;/b&gt; und &lt;b&gt;HandleToObject&lt;/b&gt; sind daf&amp;uuml;r zust&amp;auml;ndig ein Handle zu erstellen oder ein zu dem Handle geh&amp;ouml;rendes Objekt zu erhalten.&lt;br /&gt;&lt;br /&gt;Ich habe das ganze kurzerhand in den Object Type reingepackt, da ich denke, dass es dort eher hingeh&amp;ouml;rt.&lt;br /&gt;Object hat jetzt also eine neue Methode und eine neue Funktion.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;toHandle&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Object.toHandle:Int() Final&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Erzeugt ein Handle, dass das Object repr&amp;auml;sentiert.&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]Print foo.toHandle()&lt;br /&gt;' Entspricht&lt;br /&gt;Print HandleFromObject(foo)&lt;br /&gt;[/syntax]&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;fromHandle&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Object.fromHandle:Object(handle:Int) Final&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Liefert das zu dem Handle geh&amp;ouml;rende Object.&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]Print Object.fromHandle(bar).toString()&lt;br /&gt;' Entspricht&lt;br /&gt;Print HandleToObject(bar).toString()[/syntax]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ich bin der Ansicht, dass das so einfach mehr dem OOP Gedanken entspricht, als die zwei einzelnen Funktionen.&lt;br /&gt;&lt;br /&gt;Das war's auch schon f&amp;uuml;r heute, beim n&amp;auml;chsten Mal gibt's aber bestimmt mehr zu erz&amp;auml;hlen.&lt;br /&gt;Speziell die Themen Exceptions und Iteratoren sind gerade in Arbeit.&lt;br /&gt;&lt;br /&gt;Fabian</description>
			<pubDate>Sun, 05 Dec 2010 20:30:53 +0100</pubDate>
		</item>

		<item>
			<title>Neustart</title>
			<link>https://www.blitzforum.de/worklogs/349/#3049</link>
			<guid>https://www.blitzforum.de/worklogs/349/#3049</guid>
			<author>ProfJake</author>
			<description>Hi.&lt;br /&gt;&lt;br /&gt;Ich geb's zu, ich hab schon ewig nichts mehr gemacht. Aber da ich gerade krankheitsbedingt zu Hause bleiben muss, hab ich mal den Dancefloor gegen das gute alte BlitzMax ausgetauscht und mich wieder rangesetzt.&lt;br /&gt;Da ich mich mittlerweile recht gut im &lt;i&gt;brl.blitz&lt;/i&gt; Code auskenne (dem Kern von BlitzMax in C) hab ich gleich alles wieder &amp;uuml;ber den Haufen geworfen und fange nochmal ganz von vorne an. Klingt erstmal nicht so gut, ich wei&amp;szlig;.  &lt;img src=&quot;/forum/images/smiles/icon_confused.gif&quot; alt=&quot;Confused&quot; /&gt; &lt;br /&gt;&lt;br /&gt;Aber das ganze hat auch sein gutes: Die neue &lt;b&gt;BSL&lt;/b&gt; (BlitzMax Standard Library) wird jetzt nochmal ein ganzen Zacken praktischer. Da der gute Herr Sibly ja in letzter Zeit ganz von seinem neuen Baby BMX2 eingenommen ist und Updates ja in der Regel recht gut dokumentiert werden, habe ich kurzer Hand einfach das &lt;i&gt;brl.blitz&lt;/i&gt; Modul umgeschrieben. Also eigentlich stecke ich noch mittendrin, aber egal.&lt;br /&gt;&lt;br /&gt;Das neue Modul, welches Teil der BSL ist, enth&amp;auml;lt die schon optimierten Routinen - arbeitet also schneller - und bringt einige doch recht nette Features mit sich. So habe ich zum Beispiel den &lt;b&gt;String&lt;/b&gt; Type erweitert, der jetzt ein paar n&amp;uuml;tzliche neue Methoden hat:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;reverse&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;String.reverse:String()&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Liefert eine umgedrehte Version des Strings.&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]Print &amp;quot;abc&amp;quot;.reverse()&lt;br /&gt;' Output: &amp;quot;bca&amp;quot;[/syntax]&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;count&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;String.count:Int(substring:String, caseSensitive:Int = True)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Liefert die Anzahl der im String enthaltenen Substrings.&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]Print &amp;quot;abc ABC abc&amp;quot;.count(&amp;quot;abc&amp;quot;)&lt;br /&gt;' Output: 2&lt;br /&gt;&lt;br /&gt;Print &amp;quot;abc ABC abc&amp;quot;.count(&amp;quot;abc&amp;quot;, False)&lt;br /&gt;' Output: 3[/syntax]&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;sub&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;String.sub:String(start:Int, length:Int)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Liefert einen Teil des Strings zur&amp;uuml;ck.&lt;br /&gt;Wenn &lt;i&gt;start&lt;/i&gt; negativ ist, wird von hinten gez&amp;auml;hlt.&lt;br /&gt;Wenn &lt;i&gt;start&lt;/i&gt; + &lt;i&gt;length&lt;/i&gt; gr&amp;ouml;&amp;szlig;er als die L&amp;auml;nge des Strings ist, wird nat&amp;uuml;rlich nur bis zum Ende des Strings zur&amp;uuml;ckgegeben.&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]Print &amp;quot;abcdefg&amp;quot;.sub(2, 3)&lt;br /&gt;' Output: &amp;quot;cde&amp;quot;&lt;br /&gt;&lt;br /&gt;Print &amp;quot;abcdefg&amp;quot;.sub(-3, 1)&lt;br /&gt;' Output: &amp;quot;e&amp;quot;[/syntax]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Au&amp;szlig;erdem gibt's kleine Erweiterungen f&amp;uuml;r die Standardmethoden.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;find&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;String.find:Int(substring:String, start:Int = 0, caseSensitive:Int = True)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Findet jetzt auf Wunsch auch substrings ohne Beachtung von Gro&amp;szlig;/Kleinschreibung.&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]Print &amp;quot;BlitzMax hat POTENTIAL&amp;quot;.find(&amp;quot;potential&amp;quot;, 0, False)&lt;br /&gt;' Output: 13[/syntax]&lt;br /&gt;&lt;br /&gt;Die Defaultwerte sind so gesetzt, dass sich f&amp;uuml;r den Normalverbraucher nichts &amp;auml;ndert. 100% kompatibel also. Kleines Detail am Rande: Der &lt;b&gt;String&lt;/b&gt; Type enth&amp;auml;lt jetzt die Konstante &lt;b&gt;NotFound&lt;/b&gt; (= -1) f&amp;uuml;r bessere Lesbarkeit.&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]If foo.find(&amp;quot;bar&amp;quot;) = String.NotFound Then [...][/syntax]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Das l&amp;auml;uft alles schon sch&amp;ouml;n stabil, aber hochgeladen ist noch nichts, da m&amp;uuml;sst ihr euch noch etwas gedulden.&lt;br /&gt;Vielleicht gibt's ja was zum Nikolaus?  &lt;img src=&quot;/forum/images/smiles/icon_wink.gif&quot; alt=&quot;Wink&quot; /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Fabian&lt;br /&gt;&lt;br /&gt;P.S. Wer noch Vorschl&amp;auml;ge hat, was unbedingt noch mit reinmuss: &lt;a href=&quot;https://www.blitzforum.de/worklogs/349/comments/&quot; target=&quot;_blank&quot;&gt;klick&lt;/a&gt;</description>
			<pubDate>Sat, 04 Dec 2010 02:06:10 +0100</pubDate>
		</item>

		<item>
			<title>Die guten alten Vektoren mal wieder</title>
			<link>https://www.blitzforum.de/worklogs/349/#2571</link>
			<guid>https://www.blitzforum.de/worklogs/349/#2571</guid>
			<author>ProfJake</author>
			<description>Ich bin ganz gut vorangekommen, jetzt baut auch das ganze Vektorenmodul auf der C API auf. Zudem gibt's jetzt auch die komplette Funktionalit&amp;auml;t der BlitzMax Version auch in C. Dass hei&amp;szlig;t f&amp;uuml;r Engines oder solche Sp&amp;auml;&amp;szlig;e, kann man jetzt ganz l&amp;auml;ssig die rechenintensiven Sachen in C schreiben und dann einfach mit BlitzMax die letzten Details herausarbeiten.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&lt;b&gt;Mark, was tust du?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Ich will weder von mir behaupten ein guter C Programmierer zu sein noch &amp;uuml;berhaupt zur Cr&amp;egrave;me de la Cr&amp;egrave;me der Coder zu geh&amp;ouml;ren, aber was der gute Herr Sibly da mit dem Quellcode anstellt ist wirklich teilweise recht suboptimal. Ich habe mir beim wrappen schon &amp;uuml;berlegt, ob man vieles davon nicht gleich neu schreiben sollte, aber wer benutzt das dann schlussendlich? Naja, zumindest habe ich ein paar String-Funktionen neu geschrieben. Jetzt l&amp;auml;uft &lt;b&gt;find&lt;/b&gt; bei mir mehr als doppelt so schnell wie das Original. Die dazugeh&amp;ouml;rige Funktion hei&amp;szlig;t &lt;b&gt;bmStringFind&lt;/b&gt; und funktioniert genau wie die BRL-Version. F&amp;uuml;r den Endverbraucher &amp;auml;ndert sich dabei wahrscheinlich kaum was, aber ich werde die Funktionen bald an anderer Stelle in der BMSL brauchen. Ich habe das schon mal testweise mit einem &lt;b&gt;TPath&lt;/b&gt; Type ausprobiert und die Geschwindigkeit kann sich sehen lassen. Die BRL-Funktionen wie &lt;b&gt;ExtractDir&lt;/b&gt; h&amp;auml;ngt es trotz OOP locker ab.&lt;br /&gt;&lt;br /&gt;Bis ich das release dauert es aber noch ein Weilchen, irgendwann muss ich die Matrix und Quaternion Types schlie&amp;szlig;lich auch noch machen.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&lt;b&gt;Ordnung im Array&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ist zwar nur eine kleine &amp;Auml;nderung, aber gerade deshalb sollte ich vielleicht darauf hinweisen. Wenn ihr die Arrays, die mit &lt;b&gt;toArray&lt;/b&gt; erzeugt werden auslesen wollt, nehmt die Konstanten &lt;b&gt;XIndex&lt;/b&gt;, &lt;b&gt;YIndex&lt;/b&gt;, &lt;b&gt;ZIndex&lt;/b&gt; und &lt;b&gt;WIndex&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Ach ja, man kann jetzt neben &lt;b&gt;clamp&lt;/b&gt; auch &lt;b&gt;clampToRange&lt;/b&gt; benutzen.&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]vector.clamp(range.getMinimum(), range.getMaximum())&lt;br /&gt;' ist langsamer als ..&lt;br /&gt;vector.clampToRange(range)[/syntax]&lt;br /&gt;&lt;br /&gt;P.S.: Ich warte immer noch auf gute Ideen, wie ich die C API am besten so verpacken kann, dass nur die Funktionen die die BlitzMax-Version wirklich benutzt auch importiert werden und der Rest dann extra eingebunden werden kann, wenn n&amp;ouml;tig.&lt;br /&gt;&lt;br /&gt;P.P.S.: Es gab einen kleinen Bug in den getLength Funktionen - wurde behoben.&lt;br /&gt;&lt;br /&gt;Fabian</description>
			<pubDate>Fri, 18 Jun 2010 11:30:09 +0200</pubDate>
		</item>

		<item>
			<title>Renn Range, renn</title>
			<link>https://www.blitzforum.de/worklogs/349/#2519</link>
			<guid>https://www.blitzforum.de/worklogs/349/#2519</guid>
			<author>ProfJake</author>
			<description>So die Range Types setzen jetzt alle auf die neue C API auf. Jedenfalls dort wo es Geschwindigkeitsvorteile gibt. Wenn die native BlitzMax-Implementierung schneller ist, wird die nat&amp;uuml;rlich verwendet. Dass das 'ne total spannende Arbeit ist das alles durchzuchecken muss ich wohl nicht dazusagen &lt;img src=&quot;/forum/images/smiles/icon_wink.gif&quot; alt=&quot;Wink&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&lt;b&gt;C API&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;quot;C in der BlitzMax Standard Library? H&amp;auml;?&amp;quot;&lt;/i&gt;&lt;br /&gt;Tja, da die Blitzer (und ich auch) Wert auf Ausf&amp;uuml;hrungsgeschwindigkeit legen musste ich mir was einfallen lassen. Denn das ganze soll gleichzeitig schnell, aber auch verdammt sauber und vollst&amp;auml;ndig sein. Assembler f&amp;auml;llt eh weg, das kann ich nicht und ist glaub ich auch nicht mehr so &amp;uuml;berwichtig. Der GCC optimiert ordentlich  - besser als ich - nehme ich an.&lt;br /&gt;&lt;br /&gt;Okay, zur&amp;uuml;ck zum Thema: Die C API ist eigentlich verdammt einfach aufgebaut, da sie sich quasi 100% an BlitzMax orientiert, ist ja auch die &lt;i&gt;BlitzMax&lt;/i&gt; Standard Library. Schaun wir's uns an.&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]Local color:TColor = TColor.Create(1.0, 1.0, 1.0, 1.0)&lt;br /&gt;color.setGreen(0.25)[/syntax]&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox0&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('0')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox0&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('0')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox0&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('0');&quot;&gt;BSColor* color = bsColorCreate&amp;#40;1.0f, 1.0f, 1.0f, 1.0f&amp;#41;;&lt;br /&gt;bsColorSetGreen&amp;#40;color, 0.25f&amp;#41;;&lt;br /&gt;bsColorFree&amp;#40;color&amp;#41;;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;F&amp;uuml;r die Kommunikation mit C haben alle Instanz Typen (von denen also Instanzen erzeugt werden) die Methoden &lt;b&gt;toC()&lt;/b&gt; und &lt;b&gt;fromC()&lt;/b&gt;. Damit kann ein Object ganz einfach an die C API &amp;uuml;bergeben werden. Lohn der M&amp;uuml;he: Einige Methoden sind jetzt mit C Untersatz &lt;i&gt;mehr als 10x&lt;/i&gt; so schnell. Nat&amp;uuml;rlich nicht alle - manchmal w&amp;uuml;rde sich's eigentlich kaum lohnen. Aber die Funktionen sind eh da, was soll's? &lt;br /&gt;&lt;br /&gt;Ich wei&amp;szlig; nur noch nicht genau, wie ich das mache mit den Funktionen die von BlitzMax eigentlich gar nicht benutzt werden. Die also quasi nur f&amp;uuml;r C da sind (z.B. bsCreate/bsFree). Die gammeln zur Zeit einfach noch im Modul rum. Wenn da jemand was wei&amp;szlig;, her damit. Ich habe schon ein paar Ideen, die aber alle nicht so 100% befriedigend sind.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Genug f&amp;uuml;r heute.&lt;br /&gt;&lt;br /&gt;Fabian</description>
			<pubDate>Wed, 09 Jun 2010 15:49:13 +0200</pubDate>
		</item>

		<item>
			<title>SVN</title>
			<link>https://www.blitzforum.de/worklogs/349/#2518</link>
			<guid>https://www.blitzforum.de/worklogs/349/#2518</guid>
			<author>ProfJake</author>
			<description>Endlich habe ich mich dazu durchgerungen das ganze Zeug auf SVN umzustellen. Der Grund f&amp;uuml;r diese Aktion ist ganz einfach, dass ich nicht mehr durchsehe. Wenn ich hier und da ein bisschen an den Modulen rumschraube hab ich danach oft nicht mehr so den &amp;Uuml;berblick, was alles als .zip neu hochgeladen werden muss. &lt;i&gt;(siehe gestern)&lt;/i&gt;&lt;br /&gt;Ich hoffe jetzt wird das ganze ein wenig leichter f&amp;uuml;r euch (und mich nat&amp;uuml;rlich auch &lt;img src=&quot;/forum/images/smiles/icon_biggrin.gif&quot; alt=&quot;Very Happy&quot; /&gt;)&lt;br /&gt;&lt;br /&gt;Fabian&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://code.google.com/p/maxstd/source/checkout&quot; target=&quot;_blank&quot;&gt;SVN&lt;/a&gt;</description>
			<pubDate>Wed, 09 Jun 2010 15:21:20 +0200</pubDate>
		</item>


	</channel>
</rss>
