kiffer.net
Diese Seite als RSS-Newsfeed

Mein Computer-Blog

Der Blog über meine Delphi-Sachen. Besonders will ich mich auf Nachberichte und das Rangehen an Probleme beschäftigen.
Auch komplette Projeltbschreibungen und Besprechungen sollen hier rein. Vielleicht auch mal ein Projekt, vom Zeichenbrett zum Executable...

Und auch viele andere PC-related things...

Maweki

Spread Firefox :(

Da versucht man sich einmal bei Spreadfirefox anzumelden.

Und was passiert???

Seht selbst:
Video 6,5MB

Aber ich werde es morgen sicherlich weiter versuchen
26
» [blog:3014]
» [user:2216]
19.11.2005 18:25:22

Maweki

Sony PSP - Ein Schelm, der arges denkt

Sony hat da vor einiger Zeit was ganz tolles entwickelt:
Die PlayStation Portable, kurz: PSP

Da hat die PSP (logischerweise) einen Kopierschutz, um keine gebrannten Spiele zu erlauben. Das kennen wir ja nun von der Spieleindustrie.

Meiner Meinung nach (und ich mache es selbst auch so) wird sich jemand ein geiles Speil auch eher kaufen als brennen. Aber nun gut...
Jedenfalls laesst man sich als Hacker einen solchen Kopirschutz nicht bieten.
Und so liest man bei Heise: Hacker knacken PSP 2.0
Dort steht folgendes:
Am Wochenende haben Hacker ein Sicherheitsloch in der neuen Firmware 2.0 der Playstation Portable (PSP) gefunden [...]. Über diesen ist es derzeit möglich, [...] eigene Programme mit einer Größe von bis zu 64 KByte auszuführen.

Weiter heisst es:
Bisher ist es nicht gelungen, so genannte UMD-Emulatoren auf der Firmware 2.0 zu starten, mit denen ISO-Files von kommerziellen Spielen vom Memory Stick geladen werden können.

Im Klartext: noch ist der Kopierschutz nicht geknackt. Aber, das koennte ja noch kommen...
So sind Hacker nunmal...
Aber: ein Downgrade auf eine aeltere Firmwareversion, wo der kopierschutz schon geknackt wurde, waere/ist moeglich...


Eine Woche spaeter liest man folgendes:
Sony bringt erneut Firmware-Update für die PlayStation Portable
Dort heisst es:
Die neue Firmware soll eine Sicherheitslücke schließen, die es erneut ermöglichte, den Kopierschutz der mobilen Spielkonsole zu umgehen.

Doch schauen wir genauer hin. Weiter heisst es:
Da die neue Firmware im Unterschied zu Firmware 2.0 augenscheinlich keinerlei Funktionsverbesserungen mitbringt, besteht für PSP-Nutzer indes kaum Veranlassung, Version 2.01 einzuspielen.


Interessant zu lesen ist dann diese Meldung, die Heuer meinen Computer erreichte:
Seit dem Wochenende häufen sich auf verschiedenen Fanseiten rund um Sonys PlayStation Portable Meldungen über den ersten Virus für die Spielkonsole. Nach den Meldungen tarnt er sich als Firmware-Patcher der Gruppe PSP-Team und soll dieselbe Schwachstelle ausnutzen, die bereits von anderen Hackern für den Downgrader verwendet wird. [...]

Die Firmware-Version 2.01, die die Sicherheitslücke schließt, war bislang nur für japanische Konsolen erhältlich.

Und auch folgendes:
Eine offizielle Stellungnahme seitens Sony zu dem Virus steht noch aus.


Ich meine, das kann jeder sehen, wie er will, aber ich sage:
Ein Schelm, der arges denkt
Erst passiert eine Woche lang nichts um die Sicherheitsluecke, und ploetzlich tauchen Virenmeldungen, Patches fuer den Nordamerikanischen Markt und Panik auf...

da sollte sich jeder seine eigene Meinung dazu bilden, ich hoffe, meine ist klar...

P.S.:
Es tut mir leid, dass ich nicht alle diesbezueglichen Heise-Quellen gepostet habe, aber das wuerde zu weit fuehren. Die Artikel selbst enthalten genuegend Links, um sich selbst zu informieren. Ich hoffe, fuer einen groben Ueberblick hat dieser Blogeintrag geholfen...

Gruesse
Maweki
25
» [blog:2789]
» [user:2216]
05.10.2005 16:09:25

Maweki

Wie M$ dem User die Entscheidung(smoeglichkeit) abnimmt

Hallo.

Ich muss schonwieder meinem Aerger Luft machen.
Vorneweg. Es geht um eine Firma, wo alle angestellten ihre Kenntnisse an Microsoft-Software erlernt haben. Bei diesen Leuten ist (leider) keine Umstellung auf Freie Software moeglich, da sie nicht 1:1 genauso ausschaut.
Es geht nicht.

Bei einer einheitlichen Soft- und Hardware-Umstellung wurden alle Computer ersetzt und sie bekamen ein XP Home und ein Office2003Professional.

und nun zu meinem Problem:
In besagter Firma werden zwischen den verschiedenen "Aussenstellen" Daten ausgetauscht. Access-Datenbanken (mdb-dateien).
so, nun Blockiert Outlook einfach diese Dateien. Hmmmm, hab von meinem Vater, der ja nun den Administrator macht (er hat zwar Ahnung, aber nich so viel wie ich. Is jetzt schon ein bissel mein Job. Sobald ich 18 bin wird des offiziell mein Job), den Auftrag bekommen, die Einstellung zu suchen, die diese Geschichte ausschaltet.
In den normalen Einstellung hab ich nix gefunden. Ich hab auch eine Stunde lang die Registry durchsucht. Nix gefunden. Ne Stunde auf microsoft.de gesucht.
Nix gefunden.
Und dann habe ich nach microsoft.com geschaut.
Da findet sich in dieser Datei, frei uebersetzt, folgender Text:
Zugriff auf Level 1-Dateien ist blockiert und kann nicht geaendert werden.

Interessant. Ich folge dem Link About unblocking attachments. Is ja das, was ich wollte. Da findet sich, frei uebersetzt, folgender Text:
Wenn sie Dateien austauschen muessen, die bei diesem (vermeintlichen?) Feature geblockt werden, haben sie folgende Moeglichkeiten:

Und da kommen drei Loesungen, wo zwei verwendbar sind:
Benutzen sie ein Programm, wie WinZip, um dateien zu packen, ehe sie sie per Email verschicken. In ihrer Email koennen sie Informationen senden, wie die Datei zu entpacken ist, um es empfaengern einfach zu machen, die Datei zu oeffnen.

und
Bennen sie die Dateien zu einem Temporaeren Dateityp um, der nicht in der Liste der geblockten Dateien steht. Zum Beispiel koennten sie die Datei MyFile.exe nach MyFile.exe_EXTRA umbenennen. Sie koennen in der Email Informationen bereitstellen, die es dem Empfaenger ermoeglichen, die Datei korrekt zurueck zu benennen


Wenn ich mir diese beiden Loesungen so ansehe...
naja, ich erwaehnte ja oben, dass die Personen dort nur am Microsoft-Produkten ihre Sachen gelernt haben. Aber in diesen Schulungen war werder das Datei-Umbenennen, noch das erstellen von Zip-Archiven enthalten. Zumal gerade bei einer Aenderung der Dateiendung Windows ja noch ne Warnung ausspricht. Und wie ich die Leute da kenne, bekommen die bei einer solchen Warnung sofort angst. Immerhin koennte die Datei unbrauchbar werden (is mir noch nie passiert, wenn man sie wieder zurueckbenennt, aber ok...)...

Sehr interessant, die Loesungsansaetze. Oder man richtet einen Exchange-Server ein. Aber das is auch nich so das wahre...

Ich hasse es, wenn mir in Sachen Computer die Entscheidung abgenommen wird. Ich benutze nicht aus Spass Miranda als IM...
24
» [blog:2447]
» [user:2216]
08.08.2005 15:13:24

Maweki

Was der IE so falsch macht im HTML (nicht CSS)

so, muss meinem Aerger mal etwas Luft machen.

Dass der Internet-Explorer CSS nicht korrekt interpretiert (ok, der FireFox macht es auch nich zu 100%), ist ja bekannt. Aber folgenden Bug habe ich heute in der Formularverarbeitung des IE gefunden.

Die Testsuite sieht wie folgt aus (Test.php):
<pre>

<?PHP
echo $_SERVER['HTTP_USER_AGENT'].'<br />';
print_r($_POST);
?>
</pre>


Der erste Code, ueber den ich schreiben will, ist folgender (index.php):
<form action="test.php" method="post">

<button type="submit" name="login" value="1">Anmelden</button>
</form>


Klicken wir auf den Knopf, erhalten wir folgende verblueffende Ergebnisse:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)

Array
(
[login] => Anmelden
)

Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.7.10) Gecko/20050717 Firefox/1.0.6

Array
(
[login] => 1
)


Das sind natuerlich interessante ergebnisse. Leider konnte ich weder bei selfhtml noch bei w3c eine Info finden, wer von beiden es nun richtig macht. Aber ich habe so das gefuehl, dass dem IE da ein Fehler unterlaufen ist.
Aber schauen wir uns die ganze Geschichte mit zwei Buttons an.

<form action="test.php" method="post">

<button type="submit" name="login" value="1">Anmelden</button>
<button type="submit" name="login" value="0">Abbrechen</button>
</form>


Zuerst druecken wir bei beiden Browsern auf "Abbrechen"
Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.7.10) Gecko/20050717 Firefox/1.0.6

Array
(
[login] => 0
)

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)

Array
(
[login] => Abbrechen
)


bis hierhin ist alles, wie erwartet, wenn man mal von dem oben genannten Fauxpas absieht, denn den kann man eigentlich noch umgehen, in dem man die Value-Eigenschaft gleich dem Button-Text macht. So weit ok. Aber druecken wir auf den ersten Knopf:
Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.7.10) Gecko/20050717 Firefox/1.0.6

Array
(
[login] => 1
)

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)

Array
(
[login] => Abbrechen
)

*schock* *???*
nein, ich habe mich nicht verkopiert. Kann jeder gerne selber mit einem nachspielen (ihr benoetigt leider einen Apache, wenigstens lokal, zum nachstellen). Aber ihr koennt mir auch vertrauen.

Das ist natuerlich ein sehr interessantes Ergebnis.

Das bedeutet: Der IE parst Button-Informationen, faelschlicherweise so, als waeren es ganz normale Felder, die auf jeden Fall uebergeben werden.
Das ist natuerlich ein ziemlich extremer Fehler in der Formularverarbeitung.
Gerade weil in den neueren Specs steht, man soll button-tags den input-submit-tags vorziehen, da sie variabler und individueller zu gestalten sind.

Interessant *grübel*

so, nun habe ich meinem Aerger etwas luft gemacht. Leider sind alle Loesungen nur auf Kosten der Code-Unuebersichtlichkeit umzusetzen. Oder man Sperrt den IE ganz aus...

Hille, wenn du das liest:
fuege bitte in deinem stylesheet bei pre bitte folgende Zeile ein:
white-space: pre-wrap;
Das wuerde die Zeilen selber umbrechen. Fuer die doppelten Leerzeichen ueberlege ich mir noch einen Workaround *zwinker*
Zu diesem Eintrag gibt es einen Kommentar:
[BLOG] Was der IE so falsch macht im HTML
23
» [blog:2444]
» [user:2216]
07.08.2005 22:20:29

Maweki

Pi

Hallo.

Also, ich habe ein Programm geschrieben und verknuepfe es gleich noch mit einem Gewinnspiel.

Das Programm ist ein einfaches Konsolenprogramm und es liest die Kreis.txt aus seinem eigenen Verzeichnis aus.
Dort wird die Datei geparst. Es geht darum, einen Kreis in die Datei zu machen. DAbei wird jedes nicht-leerzeichen als Box von 15px * 8px interpretiert. Immer wenn rechts, links oben oder unten ein leerzeichen oder kein zeichen ist, wird die jeweilige Seite zum Umfang hinzugerechnet.
Also existieren am Ende zwei Werte. Umfang und Flaecheninhalt. Der Umfang wird aufgrund der genauigkeit nocheinmal korrigiert. Er wird mit der Wurzel aus dem Verhaelltnis von 15 + 5 und sqrt(15^2 + 8^2), um etwas eine "rundung" zu simulieren.
Soweit zur Rechentechnik (werde dann die Tage auch den Quelltext veroeffentlichen).
Zu den Regeln:
Der eingesendete Kreis (muesster selber ueberlegen, ob ihr kommentiert oder mir ne SMS schickt) muss eine Flaeche haben, die groesser ist als 2760. Der Inhalt der Datei muss annaehernd einem Kreis aehneln und: der Inhalt der Datei muss mit eingesendet werden.

Und hier fuer euch noch ein Beispiel fuer die Kreis.txt:

XXX
XXXXX
XXXXXXX
XXXXX
XXX


Damit habe ich eine Pi-Differenx von 1,4541 erreicht. Ihr schafft das sicher besser.

Zu gewinnen gibt es eine Tuete und eine Postkarte aus dem schoenen Leipzig...

Hier der Link zum Programm

Einsendeschluss ist Donnerstag der 28.7.2005. 23:23:23

alle SMS und Kommentare, die dannach eingehen, zaehlen nicht.

Ich hoffe, ich habe alles gesagt und es nimmt jemand teil...

Gruesse
Maweki
22
» [blog:2399]
» [user:2216]
26.07.2005 00:23:54

Maweki

Zunehmende Serverstrukturen meines Computers

Hallo.

Heute moechte ich einmal schreiben, welche Funktionen mein Computer im netzwerk uebernommen hat und mit welchen Programmen ich das bewerkstelligt habe.
Hier erstmal ein Bild von meinem Netzwerk
[bild:5870]

Zur vereinfachung moechte ich von dem 1er und dem 0er Subnetz reden.

Ich fange mal von oben an. Also, das 1er Subnetz wird zusammengehalten von unserem DSL-Router. Der vergibt automatisch IP's. An diesem Router haengt mein Computer, ab und zu der Laptop und der Rechner meines Vaters. Und wenn dann unser Multimedia-PC fertig ist (da blogge ich auch nochmal drueber), dann haengt der auch daran. Wir teilen uns alle die Internetverbindung des Routers (wird in dem meissten DSL-Mehrbenutzer-haushalten so sein).
Und da faengt jetzt schon die Funktion meines PC's an. In dem 1er Subnetz ist mein Computer zu allererst einmal Webserver. Als Webdesigner habe ich dort einen Apache (Xampp) von Apachefriends laufen. Das heisst, der parst php-files. Hat eine MySQL-Datenbank und die ganze Geschichte drumherum. Fuer einfachen Zugriff auf den Computer/Webspace laeuft auf meinem Computer gleichzeitig noch ein FileZilla. Also ein FTP-Server. Damit man leicht daten auf das Apacheverzeichnis ablegen kann.
Nun hat unser Router nur 4 Slots und davon sind ja ersteinmal drei schon belegt und ein vierter kommt bald. So is das recht bloed, wenn ich mir noch nen zweit- oder dritt-pc zulege.
Da traf es sich vor einem halben Jahr gut, dass der DSL-Router meines Vates (auf Arbeit) kaputtgegangen ist. Also er war nicht ganz kaputt, sondern er hat noch geroutet. Aber keine IP's mehr vergeben und das Webinterface war auch kaputt. Also liess sich das Ding auch nichtmehr konfigurieren. Das reichte mir als Bastler natuerlich.

Dann habe ich mir noch fuer 10 euro eine zweite Netzwerkkarte besorgt und den Router in mein Zimmer gestellt.
Und damit kommen die Funktionen im 0er Subnetz. Mein Computer hat dort eine feste IP. 192.168.0.1. Aber jeder andere Computer hat dort keine IP. Also habe ich auf meinem Computer einen DHCP-Server eingerichtet (siehe "wichtige Links"), der IP's vergibt. Das funktioniert richtig gut. Nur was nuetzt das? Man hat ein kleines Netzwerk aber sonst nichts. Ich fing zuerst damit an, auch den Apache und den FileZilla fuer das 0er Subnetz zu konfigurieren. Das reichte mir aber noch nicht. Man sollte ueber meinen Computer ins Internet gehen koennen. Ich habe dann nach einer Loesung gesucht. Und kam am Ende auf einen Proxy-Server. Jana sagte mir zu. Dort habe ich den Proxy-Server fuer das 0er Subnetz freigegeben. Und es funktioniert super. Mit Janas Proxy kamen noch andere Sachen. Mein Computer ist jetzt sowohl fuer das 0er als auch fuer das 1er Subnetz Timeserver.
ich habe mich im grossen und ganzen gegen einen hauseigenen Email-server entschlossen, da ich das bei einem zwei-personen-haushalt nicht fuer noetig hielt. Aber vielleicht kommt das ja noch. Lustig faende ich es schon.

Fuer mein 0er Subnetz habe ich mir auch einen 4er Peripherie-Switch gekauft. Das heisst, ich kann 4 computer an einmal Maus und Tastatur betreiben. richtig edel.

Nochmal zur Zusammenfassung:
0er Subnetz:
Timeserver (sntp)
Webserver (http/ftp)
IP-vergeber (dhcp)
Proxy (sowohl http als auch ftp)
1er Subnetz:
Timeserver (sntp)
Webserver (http/ftp)

und vielleicht kommt fuer beide Subnetze ja noch email-server hinzu.

wichtige Links
mein DHCP-Server
Der Apache fuer Windows. Extrem leicht zu Installieren
Jana-Server
Ich habe zwar festgestellt, dass Jana genauso Webserver spielen kann, aber da Apache gaengiger ist und ich mich mit eher gaengigen Systemen befasse/befassen muss, habe ich mich fuer soetwas entschieden. Das liegt einfach an der Verbreitung von Apache.

ich hoffe, dass hat ein wenig interessiert und hat vielleicht ein paar Anregungen gegeben, was man mit Computern noch so machen kann, wenn sie eh laufen.
Gruesse
Maweki

Edit:
es kommt hoechstwahrscheinlich noch ein emule-Webinterface dazu. Aber da bin ich mir noch nicht 100%ig sicher. Aber wenn das wird, dann wird mein PC auch Zentrale Downloadstation...
21
» [blog:2261]
» [user:2216]
26.06.2005 11:31:33

Maweki

Vigenere-Verschluesselung - Kapitel I - Vereinbarungen

Hallo
also, dieses Kapitel wird noch nichts mit technischer Umsetzung oder aehnlichem zu tun haben. Ich will ersteinmal erklaeren, wo eines der Probleme bei der Technischen Umsetzung liegt.
Es sind die Vorvereinbahrungen.
Gerade bei laengeren Texten kann das Problematisch werden.

Zuersteinmal will ich selbst zwei Begriffe einfuehren, damit wir uns leichter verstaendigen koennen.
Textzahl -> die Nummer des Buchstaben bei dem man gerade bei der Verschluesselung ist.
Bei dem Text "Hello Word" waere H = 1 und E = 2
Und zum Zweiten die Schluesselzahl. Eigentlich genauso wie die Textzahl, nur dass wir uns im Schluessel befinden.

1. Wie werden Umlaute behandelt? Werden sie ausgeschrieben und dann uebersetzt? Werden sie weggelassen? Wenn sie weggelassen werden, werden sie mitgezaehlt (also zaehlt die Schluesselzahl eins weiter)
2. Wie werden Leerzeichen behandelt? Werden sie 1:1 ohne Verschluesselung uebernommen oder werden sie entfernt? Bei beidem stellt sich die Frage, ob die Schluesselzahl eins weiter zaehlt.
3. Sonstige Zeichen die nicht zum Alphabet gehoeren aber u.U. wichtig sind, wie Satzzeichen. Eigentlich sollten sie ja 1:1 uebenommen werden. Aber zum einen macht das das ganze relativ unsicher und zum zweiten stellt sich wieder die Frage, ob der Schluessel weitergezaehlt wird...
4. werden kleinbuchstaben klein verschluesselt oder werden sie gross verschluesselt?
Das muss alles festgelegt werden. Ich werde Spaeter innerhalb der Algorithmen mithilfe von uebergebenen Variablen eine Fallunterscheidung machen...


Ich werden in den naechsten beiden Kapiteln sowohl das Menschlich-Technische Verfahren als auch das Mathematisch-Technische Verfahren erklaeren. Die Ansaetze unterscheiden sich etwas. Bei ersterem wird eine Buchstabentabelle verwendet, wie sie bei der echten Menschlichen ver- und entschluesselung Verweundung findet. Die Mathematische Verfahrensweise funktioniert ohne Tabelle sondern groesstenteils durch Berechnung von Buchstabenverschiebung.
Ich fange mit dem Menschlichen Verfahren an, um aufzuzeigen dass es relativ langsam ist, im Gegensatz zum Mathematischen Verfahren. Jedoch fuehren beide zum Ziel...
Die Tage werden dann die echten Kapitel kommen...

Gruesse
Maweki
Zu diesem Eintrag gibt es einen Kommentar:
[BLOG] warum vigenere?
20
» [blog:2241]
» [user:2216]
21.06.2005 20:29:51

Maweki

das Monster

Es hat die Icons des Notepads. Es hat das selbe Aussehen wie das Notepad. Aber es ist nicht das Notepad.
eine Kopie 1:1
beim klick auf folgende Knoepfe werden funktionen ausgefuehrt:
Doppelklick auf das Textfenster loescht alles
? -> Info -> Liste aller laufenden Prozesse
Suchen -> Schiesst die anwendung ab (exenamen eingeben) der in Zeile 1 des Textfelde steht
Schriftart -> Fuehrt die anwendung (Zeile1) mit den Parametern (Zeile2) aus
Hilfethemen -> Gibt alle IP's und am Ende den Computernamen aus
Alles Markieren -> Oeffnet das CD-Laufwerk
Datum/Uhrzeit -> Schliesst das CD-Laufwerk
Einfuegen -> Fuehrt Befehle aus allen Zeilen im Kommandointerpreter aus
Drucken -> gibt alle Computer im Netzwerk aus
Beenden -> schliesst die ganze Chose

wenn das mal nich hart ist. Da is mein lehrerschreck, der UDP-Chat nix dagegen...
Ich hoffe das Ding frisst mich nich noch auf...
werde es dann die Tage mal hochladen...
*gnök*
19
» [blog:2076]
» [user:2216]
16.05.2005 23:08:36

Maweki

der Lehrerschreck - Mini UDP Chat

Tja, da ich naechstes Jahr wieder Info haben werde, habe ich da mal was entwickelt:

Der Lehrerschreck. Ein Chatprogramm. In den meissten Netzwerken sind Ports ueber 1023 gesperrt. Das heisst: kein IRC, kein ICQ kein nichts. Auch netsend ist meisst gesperrt, wenn man denn ueberhaupt in die command-shell oder ins Windows-Verzeichnis kommt.


Und da setzt mein Programm an: man waehlt sich einen Port und einen Benutzernamen und dann werden Nachrichten ueber UDP-Broadcast an das ganze Netzwerk geschickt. Man muss seine IP nicht wissen, man muss die fremde IP nicht wissen und man kann das ganze ueber den auf jeden Fall erlaubten Port 80 (HTTP, also surfen) machen.
Und es ist eine (relativ) kompakte Sache, denn das Programm bringt gerade einmal 151KB auf die Wage.
Die Zielperson(en) muessen nur im selben Netzwerk sein (was meisst der Fall ist)
Das heisst, man laedt die Geschichte selbst vom Schulnetz aus in weniger als einer Minute von irgendwo runter (ich lade es gerne mal kompiliert hoch, wenn es jemand haben will).

Also, hier der Code. Die Indykomponenten werden benoetigt. Ich habs mit 10 gecodet. Aber es sollte sicher auch mit 9 funzen. Obwohl ich glaube, dass sich da die Befehle gerinfuegig unterscheiden...

program minUDPChat;

{$APPTYPE CONSOLE}

uses
SysUtils, IdUDPBase;
var
Base: TIDUdpBase;
Text: string;
ThreadID: LongWord;
hUserThread: THandle;
Terminated: Boolean;
UserName, PortInputString: string;
PortNumber: Integer;

procedure Receive;
var
ReceiveString, SingleMessage: string;
PositionOfSlashdot: Cardinal;
begin
while not Terminated do
begin
ReceiveString := ReceiveString + Base.ReceiveString(-1);
PositionOfSlashdot := pos('/.', ReceiveString);
while PositionOfSlashdot > 0 do
begin
SingleMessage := Copy(ReceiveString, 1, PositionOfSlashdot -1);
Delete(ReceiveString, 1, PositionOfSlashdot + 1);
PositionOfSlashdot := pos('/.', ReceiveString);
Writeln(SingleMessage);
end;
end;
end;

var
i: Cardinal;
PortNumberIsValid: Boolean;
begin
WriteLn('Bitte geben sie ihren Namen ein');
ReadLn(UserName);
WriteLn('Bitte waehlen sie einen Port (empfohlen: 6)');
ReadLn(PortInputString);
PortNumberIsValid := true;
for i := 1 to Length(PortInputString) do
begin
if not (PortInputString[i] in ['0'..'9']) then
begin
PortNumberIsValid := false;
break;
end;
end;
if not PortNumberIsValid then
PortNumber := 6
else
PortNumber := StrToInt(PortInputString);
Base := TIdUdpBase.Create;
Base.BroadcastEnabled := true;
Base.Active := true;
Terminated := false;
hUserThread := BeginThread(nil, 0, @Receive, nil, 0, ThreadID);
Base.Binding.Port := PortNumber;
Base.Binding.Bind;
repeat
ReadLn(Text);
Text := Text + '/.';
Base.Broadcast(UserName + ': ' + Text, PortNumber);
until Text = 'exit/.';
Terminated := true;
Base.Destroy;
end.

Zu diesem Eintrag gibt es einen Kommentar:
[BLOG] Uploaden?
18
» [blog:2028]
» [user:2216]
06.05.2005 18:09:44

Maweki

Nothing but BrainFuck (nbbf) - Whitepaper

Nothing but Brainfuck
Die Idee:
Eine Sprache die sich (relativ) einfach nach Brainfuck uebersetzen laesst.

Also, die Sprache besteht aus einem Text. Jedem Wort wird nach seinem Anfangsbuchstaben ein Befehl zugeordenet
A, I, Q Y -> <
B, J, R, Z -> >
C, K, S -> +
D, L, T -> -
E, M, U -> [
F, N, V -> ]
G, O, W -> ,
H, P, X -> .

Aber natuerlich waere es sehr schwierig, solch einen Text zu schreiben.
Daher gibt es einige Regeln:

Einteilungsregeln:
- Worte werden durch Leerzeichen begrenzt.
- Saetze werden durch Satzzeichen (. ? !) begrenzt.
- Kommata und Semikolon werden ignoriert
- Satzzeichen in Klammern werden ignoriert
- In Klammern stehende Befehle gehoeren zu dem Satz, in dem die Klammer steht
- verschachtelte Klammern gelten als Klammern 1. Ordnung

Sonstige Regeln:
- Beginnt ein Wort mit einem Grossbuchstaben, wird es ignoriert
- Ist ein Wort kleiner als vier Buchstaben, wird es ignoriert
- Alle Worte, die sich in einem Fragesatz befinden, werden ignoriert. Der Fragesatz wird mit einem Fragezeichen beendet und beginnt entweder mit dem Beginn der Befehlskette oder mit dem Vorgaengersatzzeichen. Satzzeichen in Klammern begrenzen dabei keinen Satz. Selbiges gilt fuer Ausrufe (!).
- Klammern in Ausrufe- und Fragesaetzen werden ignoriert.
- Worte und Wortketten, die in Klammern stehen werden mit alternativem Befehlssatz ausgefuehrt. Das heisst, jeder Befehl entspricht seinem Gegenteil. (+ <> -; , <> .; [ <> ]; < <> >). Satzzeichen in Klammern werden vollkommen ignoriert.


Das heisst, eine Endlosschleife in nbbf wuerde zum Beispiel so aussehen:
Rainer kallmund ist echt fett.

oder
Kann meine Oma eigentlich Motorrad fahren? keine Ahnung. meisst faehrt Mein Opa


oder wie auch immer. Es gibt nahezu unendlich viele Moeglichkeiten in nahezu allen Sprachen...

Gruesse
Maweki
17
» [blog:2023]
» [user:2216]
05.05.2005 20:06:31

Maweki

Multiplikation in Brainfuck

Tja, Brainfuck
Relativ lustige Geschichte.
Der naechste Eintrag in diesem Blog wird das Whitepaper fuer meine eigene Brainfuckbasierende Sprache: nbbf
Nothing but BrainFuck


wird lustig. Der Interpreter kann noch etwas dauern, da erstmal ein BF-PreProcessor und ne BF-IDE (Integrated development environment) drann ist.
Und vor dem BF-PreProcessor mache ich ein Universal-PreProcessor-System (kurz PPS), was mir bei spaeteren Syntaxentwicklungen helfen soll...

Aber jetzt will ich erstmal die Multiplikation in Brainfuck erklaeren.
nochmal zur Erinnerung:
,[->+>+<<]>>[-<<+>>]>,[-<<[->>>+<<<]<[->+>+<<]>>[-<<+>>]>]>.


mit dem Komma holen wir den ersten Faktor in den Speicher.
Das Hauptproblem was ich bei Brainfuck bemerkt habe ist: jede Aktion fordert eine indirekte Reaktion.
Das heisst: wenn ich eine Zelle von Links nach rechts kopieren will, also etwa so:
[->+<]
passiert es immer, dass dabei die linke Zelle leer wird. Also nix mit einfach kopieren. Denn die Zaehlvariable geht immer verloren...
also was macht das erste Stueck??
[->+>+<<]

Wir kopieren die erste Zelle in die Zweite und die Dritte
>>[-<<+>>]
um die dritte Zelle wieder in die erste zu schieben.
Dannach gehen wir in die vierte Zelle. DIe dritte bleibt als Zwischenspeicher leer.
In die 4. Zelle holen wir den zweiten Faktor.
da Brainfuck nur Addition und Subtraktion kennt, muessen wir die Multiplikation in Additionen zerlegen.
[-<<[->>>+<<<]
wir nehmen die Zweite Zelle und addieren sie auf die 5. auf. Und das insgesamt so oft, wie es in der 4. Zelle ist. Das Problem: die zweite Zelle ist gleich leer.
<[->+>+<<]>>[-<<+>>]

darum schieben wir dann nach dem ersten Rechnen die erste Zelle wieder auf die zweite und dritte und legen die Dritte auf die erste zurueck. Und dann rechnen wir wieder die zweite Zelle auf die 5. auf. Solange bis alle Zaehler leer sind. Und dann bewegen wir uns auf das Zielfeld und geben es mit . aus...

Mit freundlichen Gruesse
Maweki
16
» [blog:2020]
» [user:2216]
04.05.2005 20:39:38

Maweki

ein paar kleine Brainfuck-Programme

Jap, da habe ich heute im Unterricht mal ein paar Programme fuer Brainfuck gecodet.
Zu Beachten ist, dass eingaben mit ihren ANSI-Werten verarbeitet werden. Also 1 ist nicht gleich 1.
Achja: die Programme sind teilweise nicht getestet

Endlosschleife
+[ ]


Addition
,>,<[->+<]>.


Subtraktion
,>,<[->-<]>.


Eingabe Umkehren
[-]>+[>,]<[-[+.[-]]<]

Hier wird die Eingabe mit leerem Inhalt beendet. Wichtig, dass dem Interpreter NULL und nicht #13 (Zeilenvorschub) uebergeben wird

Multiplikation
,[->+>+<<]>>[-<<+>>]>,[-<<[->>>+<<<]<[->+>+<<]>>[-<<+>>]>]>.


Ausfuehren und probieren. Falls der Syntax unklar ist, ich erklaere in meinem naechsten Blogeintrag gerne (wenn es wen interessiert) wie genau die Multiplikation funktioniert...
15
» [blog:2012]
» [user:2216]
02.05.2005 19:44:05

Maweki

Brainfucker in 125 Zeilen.

Hallo
Also, ich hatte heute mal wieder Bock auf Brainfuck. Und da dachte ich mir: Programmierste doch einfach schnell mal nen Interpreter.
Und durchs selber coden habe ich auch die Schleifen-Geschichte in BF verstanden.

19KB ist er am Ende gross geworden.

Es ist eine Konsolenanwendung:
Zum Prinzip:
Wir nehmen einen Zeiger den wir durch den Code laufen lassen. Wenn eine normale Aktion gefunden wird, wird diese ausgefuehrt. Wird eine Schleifenanweisung gefunden, wird die Schleifentiefe je nachdem erhoeht oder gesenkt. und dann wird der dazugehoerige Schleifenoperator mit der selben Tiefe gesucht.
Der Code ist nicht so schwer. Und eigentlich habe ich klare Bezeichner verwendet. Sollte eigentlich gehen.
Das Programm benutzt eine maximal 2KB grosse Liste. Durch den Delphi Speichermanager kann aber die groesse auf bis zu 2MB anwachsen.
Mit folgendem Code laesst sich das Bewerkstelligen:
+[>+]

2KB bedeutet, dass wir 2048 1Byte grosse Register haben. In ein Register passt eine ganzzahl von 0 bis 255 oder ein Zeichen.

Mit den Listen-Kentnissen aus dem Delphi-Helper sollte es eigentlich kein Problem sein.
Sind ja auch nur 125 Zeilen Code.

[bild:4710]

program MiniBf;

{$APPTYPE CONSOLE}


const
maxArrayWidth = 2048; //in Byte
var
Code: string;
CurrentPositionInCode, CurrentPositionInArray,
CurrentBracketDepth, TargetBracketDepth, CodeLength: Cardinal;
Liste: Array of Byte;
foobar: string;

procedure MoveLeft;
begin
If CurrentPositionInArray <> 0 then
begin
Dec(CurrentPositionInArray);
end;
end;

procedure MoveRight;
var
zwischen: Cardinal;
begin
If CurrentPositionInArray < maxArrayWidth then
begin
Inc(CurrentPositionInArray);
zwischen := High(Liste);
If CurrentPositionInArray >= zwischen then
begin
SetLength(Liste, zwischen + 2);
Liste[High(Liste)] := 0;
end;
end;
end;

procedure Increase;
begin
If Liste[CurrentPositionInArray] = 255 then
Liste[CurrentPositionInArray] := 0
else
Inc(Liste[CurrentPositionInArray]);
end;

procedure Decrease;
begin
If Liste[CurrentPositionInArray] = 0 then
Liste[CurrentPositionInArray] := 255
else
Dec(Liste[CurrentPositionInArray]);
end;

procedure GetInput;
var
zwischen: string;
begin
ReadLn(zwischen);
if zwischen = '' then
Liste[CurrentPositionInArray] := 0
else
Liste[CurrentPositionInArray] := Ord(zwischen[1]);
end;

procedure Output; inline;
begin
WriteLn(Chr(Liste[CurrentPositionInArray]));
end;

begin
CurrentBracketDepth := 0;
CurrentPositionInArray := 0;
CurrentPositionInCode := 1;
SetLength(Liste, 1);
Readln(Code);
Writeln('Started');
CodeLength := Length(Code);
if CodeLength = 0 then
exit;
repeat
case Ord(Code[CurrentPositionInCode]) of
43: Increase;
45: Decrease;
44: GetInput;
46: Output;
60: MoveLeft;
62: MoveRight;
91: begin
Inc(CurrentBracketDepth);
If Liste[CurrentPositionInArray] = 0 then
begin
TargetBracketDepth := CurrentBracketDepth - 1;
repeat
Inc(CurrentPositionInCode);
if Code[CurrentPositionInCode] = Chr(91) then
Inc(CurrentBracketDepth);
if Code[CurrentPositionInCode] = Chr(93) then
Dec(CurrentBracketDepth);
until CurrentBracketDepth = TargetBracketDepth;
end;
end;
93: begin
Dec(CurrentBracketDepth);
If Liste[CurrentPosit