Captcha again

written by Martin Häcker on

So muss man das machen!

Kongress zum bedingungslosen Grundeinkommen

written by Martin Häcker on

Dieses Wochenende. Hingehen.

C-Code fĂĽr C und C++ verwendbar machen

written by Martin Häcker on

Ich hab mich schon immer gefragt woher man eigentlich diese Defines nimmt um C-Code deklarationen so zu schützen, dass sie auch in C++ Code gut reingeholt werden können.

Ja klar, man kann das selber machen, etwas präprozessor bla und los gehts. Aber, das gibts ja vielleicht schon.

Enter #import <sys/cdefs.h>.

Und das ist in in Apple-Code praktischerweise immer schon includiert und enthält praktische Kleinigkeiten wie:

  • __BEGIN_DECLS - jetzt kommen C-Deklarationen
  • __END_DECLS - fettich
  • __dead2 - diese Funktion kehrt nicht zurĂĽck (ĂĽber das 2 könnte ich mich total amĂĽsieren)
  • __pure2 - diese Funktion hat keine Seiteneffekte
  • __unused
  • __printflike(formatArg, firstVarArg)
  • __scanflike(formatArg, firstVarArg)
  • __COPYRIGHT(string) - erzeugt eine globale variable
  • __PROJECT_VERSION(string) - erzeugt eine globale variable
  • __deprecated

Dann gibts natürlich noch <AvailabilityMacros.h> das auch noch ein paar Kleinigkeiten enthält - neben dem ganzen Zeug um APIs zu versionieren sind da auch noch mal Attribute definiert:

  • WEAK_IMPORT_ATTRIBUTE -- funktion ist vielleicht da
  • DEPRECATED_ATTRIBUTE -- funktion soll nicht mehr verwendet werden
  • UNAVAILABLE_ATTRIBUTE -- funktion ist nicht vorhanden (z.B. weil sie API ist die erst in einer späteren Version des Frameworks unterstĂĽtzt wird)

Vor allem __BEGIN_DECLS, __END_DECLS und __deprecated werde ich mit Sicherheit sofort benutzen. Ob ich die anderen auch verwende, weiĂź ich noch nicht. Mal schaun. :)

Ich find User-Ideen groĂźartig

written by Martin Häcker on

Einfach mal kreativ mit der Techik umgehen. Mal probieren und testen und dann die Erfahrung austauschen.

Image (via)

Unglaublich ĂĽber sowas einfach herzuziehen. Einfach die eingebaute Kamera als Spiegel verwenden. Zum Beispiel damit.

If you want to count on it - pirate it

written by Martin Häcker on

XKCD hats erwischt.

Image

Das Gedicht zum Bankendomino

written by Martin Häcker on

(via Fefe, von Brokerz)

Wenn die Börsenkurse fallen,
regt sich Kummer fast bei allen,
aber manche blĂĽhen auf:
Ihr Rezept heiĂźt Leerverkauf.
Keck verhökern diese Knaben
Dinge, die sie gar nicht haben,
treten selbst den Absturz los,
den sie brauchen - echt famos!

Leichter noch bei solchen Taten
tun sie sich mit Derivaten:
Wenn Papier den Wert frisiert,
wird die Wirkung potenziert.

Wenn in Folge Banken krachen,
haben Sparer nichts zu lachen,
und die Hypothek aufs Haus
heiĂźt, Bewohner mĂĽssen raus.

Trifft's hingegen groĂźe Banken,
kommt die ganze Welt ins Wanken -
auch die Spekulantenbrut
zittert jetzt um Hab und Gut!

Soll man das System gefährden?
Da muss eingeschritten werden:
Der Gewinn, der bleibt privat,
die Verluste kauft der Staat.

Dazu braucht der Staat Kredite,
und das bringt erneut Profite,
hat man doch in jenem Land
die Regierung in der Hand.

FĂĽr die Zechen dieser Frechen
hat der Kleine Mann zu blechen
und - das ist das Feine ja -
nicht nur in Amerika!

Und wenn Kurse wieder steigen,
fängt von vorne an der Reigen -
ist halt Umverteilung pur,
stets in eine Richtung nur.

Aber sollten sich die Massen
das mal nimmer bieten lassen,
ist der Ausweg längst bedacht:
Dann wird bisschen Krieg gemacht.

Regexe updated

written by Martin Häcker on

Hab ich mir doch gedacht, nur matching von regexen auf ganzen Strings ist doch langweilig - also hab ich noch containsRegex: hinzugefĂĽgt um etwas mehr komfort zu haben.

Da dachte ich ja zuerst dass ein Regex wie dieser hier eigentlich nicht funktionieren dürfte: .*^a angewandt auf "aaa" - aber interessanterweise funktioniert das ohne Probleme. Muss ich wohl noch etwas an meinen Regex-Verständnis feilen.

Ah well.

[source:/open-source/SimpleRegexSupport/trunk/RegexTest.m Code hier]

Wie kriegt man eigentlich mit was sich im Linux Kernel so tut?

written by Martin Häcker on

SchlieĂźlich gibt es dort nicht so ausgezeichnete release notes wie man sie von Eclipse, Gnome oder Ubuntu kennt.

Die Antwort ist ĂĽberraschenderweise: Heise lesen. Und sogar optional auch auf englisch.

Cocoa hat ja Regex Support

written by Martin Häcker on

Ăśberraschend.

Das der so vollständig ist, hätte ich nicht erwartet. Aber in der Tat, ICU-Regexe in ihrer ganzen Pracht. Völlig ohne eine neue externe Dependency.

Laut der Dokumentation sollte das sogar in 10.4 schon funktionieren - mit dem einen Caveat, dass multiline Support dort wohl von Hand eingeschaltet werden muss (via (?m))

Sowas wird da möglich:

if ([@"aaa" matchesRegex:@"a{3}"])
    NSLog(@"gotcha");

// other examples
[@"argh fnord argh" matchesRegex:@".*\\bfnord\\b.*"];
[@"aaa" matchesRegex:@"\\w{3}"];

Und das mit extrem wenig Aufwand:

@interface NSString (SimpleRegexMatching)
- (BOOL) matchesRegex:(NSString *)aRegex;
@end

@implementation NSString (SimpleRegexMatching)
- (BOOL) matchesRegex:(NSString *)aRegex;
{
    id predicate = [NSPredicate predicateWithFormat:@"self matches %@", aRegex];
    return [predicate evaluateWithObject:self];
}
@end

Ich bin beeindruckt.

[source:/open-source/SimpleRegexSupport/trunk/RegexTest.m Code hier]

Die gegenwärtige Finanzkrise ist...

written by Martin Häcker on

... eigentlich einfach zu verstehen.

Zum weglegen. :)