Tag: software

ZuckMail… wie suess

facebook hat nen eigenen “X-Mailer” header in die emails gebaut:

X-Mailer: ZuckMail [version 1.00]

wie suess…

aber im ernst.. wenn die ihr eigenes messaging system aufbauen wuerden mich schon mal die technischen details zu “ZuckMail” interessieren. ich hoffe, dass das nicht von SuckMail kommt 😉

leider ist auf der facebook developer seite nichts ueber ZuckMail zu finden.

wie immer der hinweis: nicht weil ich facebook toll finde (was auch nicht stimmt), sondern weil mich die technik interessiert.

ubuntu auf dem desktop

ich starte den naechsten versuch, mal mit linux auf dem desktop zurecht zu kommen. vor ein paar jahren hab ich das schonmal probiert und auch ca. 2 jahre durchgehalten. aber irgendwann hatte ich die schnauze voll und bin wieder zu windows (xp) gewechselt. das lag aber eher an der schlechten unterstuetzung mehrerer matrox dualhead grafikkarten. die treiber unterstuetzen in dieser konstellation die 2d beschleunigung nicht und ein fluessiges arbeiten war unmoeglich. logischerweise waren damals die rechner auch nicht so leistungsfaehig wie heute.

ich weiss nicht mehr genau, wie lange ich dann wieder windows auf dem desktop hatte. danach war ich auf dem apple trip und hab mir das mal von vorne bis hinten angetan. war auch nicht alles gold, was glaenzt und osx hat auch so seine tuecken. ueber zwei jahre habe ich das durchgehalten, bis ich im fruehling diesen jahres zu windows 7 gewechselt bin. so richtig zufrieden war ich damit auch nicht, kann aber auch nicht genau festmachen warum. wahrscheinlich eher die neugier trieb mich dann gestern abend dazu, ein ubuntu auf den windows rechner zu installieren. erstmal die quick and dirty loesung mit dem “windows installer” draufkloppen und testen, wie sich das anfuehlt. kurze zeit spaeter hat dann auch schon alles funktioniert, was ich so im alltag brauche.

erstmal mussten die propritaeren nvidia treiber drauf und xinerama aktiviert werden, damit die zwei bildschirme richtig genutzt werden koennen. mit der geilen apple tastatur hatte ich ja schon unter windows so meine problemchen und musste die belegung umbiegen. unter linux ist das noch ein bischen anstrengender. die funktionstasten haben standardmaessig mediafunktionen, was mit einem kernelparameter behoben werden kann und ein paar andere muessen noch vertauscht werden, damit man halbwegs gluecklich wird. hier die datei .Xmodmap aus meinem homedir:

keycode 37 =    Control_L
keycode 133 =   Alt_L Meta_L
keycode 64 =    Super_L
keycode 108 =   Super_R
keycode 134 =   ISO_Level3_Shift Multi_key
keycode 105 =   Control_R       Multi_key
clear Shift
clear Lock
clear Control
clear Mod1
clear Mod2
clear Mod3
clear Mod4
clear Mod5
add    Shift   = Shift_L Shift_R
add    Lock    = Caps_Lock
add    Control = Control_L Control_R
add    Mod1    = Alt_L 0x007D
add    Mod2    = Num_Lock
add    Mod4    = Super_L Super_R
add    Mod5    = Mode_switch ISO_Level3_Shift ISO_Level3_Shift ISO_Level3_Shift
! Configure '=' key on numpad as '='.
keycode 0x7D =  equal
keycode  49 = less greater less greater bar brokenbar bar
keycode  94 = dead_circumflex degree dead_circumflex degree U2032 U2033 U

mit diesem befehl kann man die config neu laden:

xmodmap ~/.Xmodmap

dank firefox sync, dem thunderbird addon synckolab und servergespeichertem roaster im jabber-account sind die lebenswichtigen funktionen in null komma nix hergestellt. enigmail konnte ich nicht ueber die thunderbird addon funktion installieren, da dort anscheinend keine 64bit version verfuegbar ist, aber im ubuntu software-center findet man das. ein bischen popelig sind die ganzen kleinen bildbetrachter und bearbeiter. muss ich halt doch schon bei kleinigkeiten zu gimp greifen. die musik spielt seit dem ersten login aus der “Rhythmbox” und selbst der vmware player fuer mein windows mit ausschliesslich onlinebanking- und steuersoftware laeuft bereits. aus steht noch die geschichte mit den verschluesselten partitionen, rumspielen mit truecrypt fuer die externen platten und vielleicht endlich mal die inbetriebnahme des crypto sticks der german privacy foundation. unter windows 7 wollte der damals nicht so wie ich.

auf jeden fall bin ich schonmal begeistert, dass das alles fast reibungslos geklappt hat. ich werde mir das ganze mal ein paar tage ansehen und bin gespannt, ob ich das auf dauer aushalten werde. hin und wieder mal ein kompletter tapetenwechsel beim deskop haeltfit 😉

zuckerberg enttaeuscht mich

als ich den film “the social network” gesehen hat mit als it’ler und serverbetreiber ein zitat besonders gefallen: (sinngemaess) “nein, keine downtime. sowas gibts bei facebook nicht”… oder so aehnlich. (ich muss den film nochmal schauen 😉 )
facebook muss natuerlich auch wartungsarbeiten durchfuehren. ueblicherweise bekommt man dann einen hinweis, das irgendwas vorruebergehend nicht erreichbar ist. in den faq bei facebook findet man auch ein paar wenig hilfreiche eintraege dazu.

mein broken link checker for wordpress informiert mich nun schon fast seit einem tag ueber mehrere “internal servererror (500)” des facebook eigenen blogs. die startseite ist erreichbar, aber ein paar unterseiten, die ich verlinkt hatte nicht mehr (beispiel), ueber die blogsuche sind die artikel aber noch auffindbar.

bei sowas wird natuerlich kaschiert, was geht… im http header steht zwar “HTTP/1.1 500 Internal Server Error” und als webseite wird ausgegeben:

…was natuerlich viel professioneller aussieht, als eine standard webserver hardcore fehlermeldung wie die vom apache (die man natuerlich auch nach den eigenen beduerfnissen umbiegen kann):

alles “normal” und eigentlich nicht weiter tragisch, aber trotzdem hab ich immernoch die sprueche aus dem film im hinterkopf 😉

mehr verschluesselung

als ich das erste mal was ueber die firefox erweiterung “https-everywhere” gehoert habe, stiegen in mir die erwartungen an dieses addon. ich hab mir sofort vorgestellt, dass dieses teil immer bei allen webseitenaufrufen ueberprueft, ob auch eine https variante existiert und dann dahin umleitet.

natuerlich ist das nicht so einfach, wie man sich das vorstellt. vor allem deswegen, weil es manche webseitenbetreiber es einfach nicht hinbekommen, dass die ssl seite die gleiche ist wie die ohne ssl. bei groesseren systemen steigt natuerlich die komplexitaet enorm. siehe facebook… ein zitat von heise.de:

“Entschärft wurde die Facebook-Regel – in der bisherigen Version waren einige Facebook-Apps aufgrund eines Zertifikatsfehlers nicht nutzbar. Wer seine Facebook-Cookies vor Diebstahl mit Tools wie Firesheep schützen will – und auf die Apps verzichten kann – muss nach der Installation des Add-ons nun den erweiterten Regelsatz Facebook+ aktivieren. Wer hingegen den Facebook-Chat nutzen will, muss bei der Seite auf sämtliche Schutzmaßnahmen verzichten und alle Facebook-Regeln deaktivieren.”

und den faq steht nochmal beschrieben, warum es nicht so einfach ist, wie ich mir das (ohne drueber nachzudenken) vorgestellt hatte:

“There are several problems with the idea of trying to automatically detect HTTPS on every site. Firstly, there is no guarantee that sites are going to give the same response via HTTPS that they give via HTTP. As of 2010, LiveJournal is a good example of this problem: compare these HTTP and HTTPS responses. Secondly, we don’t think it’s possible to test for HTTPS in real time without introducing security vulnerabilities (What should the extension do if the HTTPS connection attempt fails? Falling back to insecure HTTP isn’t safe). Lastly, in some cases, HTTPS Everywhere has to perform quite complicated transformations on URIs — for example the Wikipedia rule turns an address like http://en.wikipedia.org/wiki/World_Wide_Web into one like https://secure.wikimedia.org/wikipedia/en/wiki/World_Wide_Web.”

also ist es nun erstmal so, dass dieses addon nur die webseiten bedienen kann, die es auch von haus aus kennt. mag sein, dass da fuer viele was dabei ist, aber die seiten daraus, die ich persoenlich nutze, kann ich an einer hand abzaehlen:

wer will, kann sich eigene rulesets bauen und hinzufuegen. wie das geht steht hier geschrieben: https://www.eff.org/https-everywhere/rulesets.

fuer diese seite hier hab ichs mal gemacht und abgespeichert als sdvc.xml im verzeichnis “HTTPSEverywhereUserRules” unterhalb des firefox profile verzeichnises:


  
  
  

im screenshot rechts unten sieht man mein beispiel “sd.vc”. das kleine, aber feine plugin sollte aber nicht “https-everywhere” heissen sondern “https-somewhere” oder aehnlich… weil everywhere ist anders…

hier oder da klicken?

ich hab schon ein paar mal in einem bestimmten onlineshop bestellt… und jedesmal will ich auf das gross geschriebene HIER klicken…

blogtuning

da diese webseite ja nur in einer kleinen, virtuellen maschine laeuft, die an einem lehmen dsl anschluss haengt, neige ich ja schon laenger dazu, die eingebetteten bilder vor dem hochladen so weit zu verkleinern, dass sie ins layout “reinpassen”. die qualitaet schraube ich zudem meist so weit runter dass man nicht mehr von schoenen bildern reden kann. ich sehe aber schon zu, dass die bilder entsprechend dem inhalt noch “nutzbar” sind. vor ein paar tagen habe ich dazu noch das apache modul “mod_deflate” aktiviert.

das an sich geht ja ganz easy:

ww:~# a2enmod deflate
Enabling module deflate.
Run '/etc/init.d/apache2 restart' to activate new configuration!

damit diverse alte browser noch zurechtkommen, habe ich die datei /etc/apache2/mods-available/deflate.conf ergaenzt um zeilen 3 bis 5:


  AddOutputFilterByType DEFLATE text/html text/plain text/xml
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4\.0[678] no-gzip
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

…und am ende der .htaccess datei im documentroot das hinzugefuegt:


  SetOutputFilter DEFLATE

hier gibts eine seite, mit der man dann ausprobieren kann, ob die komprimierung wie gewuenscht funktioniert. so sieht das ergebnis aus:

das ist doch schon mal ordentlich. um dann noch etwas bandbreite zu “sparen” habe ich ein paar bots per .htaccess datei ausgesperrt. die stellen zwar die anfrage, aber bekommen nur eine fehlermeldung zurueck. die hier angezeigte .htaccess ist stark verkuerzt. die komplette version gibts als download

SetEnvIfNoCase user-Agent "^AESOP_com_SpiderMan" bad_bot
SetEnvIfNoCase user-Agent "^Alexibot" bad_bot
SetEnvIfNoCase user-Agent "Anonymouse.org" bad_bot
SetEnvIfNoCase user-Agent "^asterias" bad_bot
SetEnvIfNoCase user-Agent "^attach" bad_bot
SetEnvIfNoCase user-Agent "^BackDoorBot" bad_bot
[...]

Order Allow,Deny
Allow from all
Deny from env=bad_bot

die liste mit den bad bots habe ich mir zusammengegoogelt. zum testen hab ich einfach mal den safari eingetragen. so wuerde das dann fuer einen bot “aussehen”, der in der .htaccess gelistet ist:

und im apache error-logfile steht dann:

[Fri Nov 12 09:26:57 2010] [error] [client 85.xxx.xx.xxx] 
client denied by server configuration: /xxxxxxx/sd.vc/wp/

sd.vc ist jetzt ueber https erreichbar

dieses blog ist nun auch ueber https, ssl, port 443, whatever erreichbar. inspiriert durch das (absolut falsche und indiskutable) bauernmotto “ich hab ja nix zu verbergen” hier nun meine (gegen-)aktion “und es geht trotzdem niemanden was an”. verschluesselte kommunikation ist gut.

im moment ist auch noch die unverschluesselte kommunikation moeglich. ich bin mir noch nicht sicher, ob ich irgendwann auf ssl-only umstelle. es gibt verschiedene gruende dafuer und dagegen. (rein technischer natuer uebrigens)

der vollstaendigkeit halber hier noch der sha1 fingerprint des verwendeten zertifikats (von cacert):

29:1C:0C:A9:A6:66:B1:18:73:E9:5D:EA:33:A4:70:E1:C0:22:02:19

und bevor hier kommentare kommen wie “ich bekomme ne fehlermeldung angezeigt… bla… “, sei auf das cacert wiki verwiesen.

microsoft beta programm ist anstrengend

wenn man sich mal bei microsoft fuer ein stueck beta software angemeldet hat, wird man reichlich genervt:

beta laeuft bald ab – erwerben sie noch heute office 2010!, dringende erinnerung: beta laeuft bald ab – handeln sie jetzt – ihre testversion von office 2010 beta laeuft in 72 stunden ab!, es ist noch nicht zu spaet – laden sie offiice 2010 herunter! …und damits nicht langweilig ist oder die einfach nicht wissen, welche sprache der betatester spricht… schicken wir alle mails gleich mal in deutsch und englisch.

mann ey… die nerven…

tsql regex oder nicht regex (teil 2)

ich habe meine untersuchung der sehr beschraenkten moeglichkeiten regex mit microsofts tsql zu nutzen fortgefuehrt.

dabei kam mir noch das “^” unter. laut dokumentation dient es der negierung: “Any single character not within the specified range”. was dann in der praxis wie beim vorangegangenen beispiel wieder nicht mit den kleinbuchstaben “[a-z]” funktioniert:

der vollstaendigkeit halber noch der code zum ergaenzen des ersten beispiels:

[...]
CASE
 WHEN (wert COLLATE Latin1_General_CS_AS LIKE '[^a-z]') THEN @x
  ELSE '' END AS '[^a-z]',
CASE
 WHEN (wert COLLATE Latin1_General_CS_AS LIKE '[^A-Z]') THEN @x
  ELSE '' END AS '[^A-Z]',
CASE
 WHEN (wert COLLATE Latin1_General_CS_AS LIKE '[^0-9]') THEN @x
  ELSE '' END AS '[^0-9]'
[...]

tsql regex oder nicht regex

bei einem sql statement stoesst man irgendwann an die grenzen der moeglichkeiten normaler vergleichsoperatoren. regulaere ausdruecke muessen her! .. denkt man sich dann. in microsofts tsql ist sowas in der art eingebaut. eigentlich nicht wirklich vergleichbar mit regulaeren ausdruecken, aber sieht ein bischen aus als ob.

und irgendwann stoesst man dann auch dabei auf grenzen. und wenn die moeglichkeiten bis zum letzten ausgereitzt sind, merkt man auch, dass nicht alles so funktioniert, wie es soll. zum demonstrieren ein kleines beispiel. (das hatte ich so aehnlich vor laengerer zeit mal auf irgendeiner webseite gefunden.)

DECLARE @tmp TABLE (wert char(1))

INSERT INTO @tmp (wert) VALUES ('1')
INSERT INTO @tmp (wert) VALUES ('A')
INSERT INTO @tmp (wert) VALUES ('a')
INSERT INTO @tmp (wert) VALUES (NULL)
INSERT INTO @tmp (wert) VALUES (' ')
INSERT INTO @tmp (wert) VALUES ('')
INSERT INTO @tmp (wert) VALUES ('J')
INSERT INTO @tmp (wert) VALUES ('!')
INSERT INTO @tmp (wert) VALUES ('9')
DECLARE @x varchar(10)

SET @x = 'MATCH'

SELECT wert,
CASE
 WHEN (wert COLLATE Latin1_General_CS_AS LIKE '[A-Z]') THEN @x
  ELSE '' END AS '[A-Z]',
CASE
 WHEN (wert COLLATE Latin1_General_CS_AS LIKE '[a-z]') THEN @x
  ELSE '' END AS '[a-z]',
CASE
 WHEN (wert COLLATE Latin1_General_CS_AS LIKE '[a-zA-Z]') THEN @x
  ELSE '' END AS '[a-zA-Z]',
CASE
 WHEN (wert COLLATE Latin1_General_CS_AS LIKE '[0-9]') THEN @x
  ELSE '' END AS '[0-9]',
CASE
 WHEN (wert COLLATE Latin1_General_CS_AS LIKE '[0-8]') THEN @x
  ELSE '' END AS '[0-8]',
CASE
 WHEN (wert COLLATE Latin1_General_CS_AS LIKE '[A-Z|0-9]') THEN @x
  ELSE '' END AS '[A-Z|0-9]',
CASE
 WHEN (wert COLLATE Latin1_General_CS_AS LIKE '[J]') THEN @x
  ELSE '' END AS '[J]',
CASE
 WHEN (wert COLLATE Latin1_General_CS_AS LIKE '[JERRY]') THEN @x
  ELSE '' END AS '[JERRY]',
CASE
 WHEN (wert COLLATE Latin1_General_CS_AS LIKE '%[A]%') THEN @x
  ELSE '' END AS '%[A]%',
CASE
 WHEN (wert COLLATE Latin1_General_CS_AS LIKE '[ ]') THEN @x
  ELSE '' END AS '[ ]'
FROM @tmp as t

das ergebniss sieht dann so aus:
(anklicken zum vergroessern)

man sieht, dass “[A-Z]” richtig funktioniert und “[a-z]” nicht so ganz und “[ ]” findet leerzeichen, aber auch “kein zeichen”. fuer viele sachen ist es aber doch sehr brauchbar, wenn man die fehler kennt. wer mehr moeglichkeiten braucht, kommt um ein bischen programmieraufwand oder kauf von fertigen addons nicht herum.