technisches

Friday, 6. October 2006

sound captchas

Das ist doch glatt an mir vorüber gegangen: JCpatcha kann mittlerweile auch SoundCaptchas erzeugen.
-> http://jcaptcha.sourceforge.net/samples/challenge2.wav
Nicht ganz ohne. Vor allem für Leute die nicht des Englischen mächtig sind.

Des weiteren gibt es nun angeblich auch Logik-Puzzles, welche man lösen lassen kann. Hab aber im Code nichts dergleichen finden können.

Wednesday, 4. October 2006

Amazon S3 (again)

Jeremy does some math too, and thinks Amazon's S3 is a good option:
-> http://jeremy.zawodny.com/blog/archives/007624.html

And smugmug.com claims to store 300TB of foto data on their XServe RAIDs as well as on Amazon's S3 Service:
-> http://blogs.smugmug.com/onethumb/2006/08/12/amazon-s3-the-holy-grail/

Friday, 29. September 2006

Java Performance Tuning Tipps

-> http://www.cafesoft.com/../admin/PerformanceTuning.html

Tuesday, 26. September 2006

Most Popular Ajax Frameworks

[via hackr]

Thursday, 14. September 2006

Trac & SVN

Kaum zu fassen, dass es mal eine Zeit bei Knallgrau gab, als wir noch keinen CVS-Server zwecks zentraler Speicherung unserer Applikationen hatten. Die Quell-Dateien lagen einfach auf irgendeinem shared Ordner, auf welchen wir übers Netzwerk zugegriffen haben. Dies ging eben solange irgendwie gut, solange nur matthias und ich am Programmcode entwickelten. Mit zunehmender Größe der Firma waren wir aber dann doch froh, dass sich andere Leute bereits den Kopf über das Problem zerbrochen hatten, und wir CVS einfach nur noch einsetzen mussten.

Das Development-Team bei uns wächst stetig weiter, und es kristallierte sich heraus dass die Kommunikation (die interne als auch die externe) sich sehr stark um die Code-Basis dreht. Seien es Feature-Requests, Deployment-Prozesse, Bug-Reports, die Roadmap, Code Changes: Es besteht eigentlich immer eine enge Verknüpfung mit dem Source Code selbst.

Und wieder bin ich froh, dass andere (smartere) Leute schon längst weitergedacht haben, und das absolut phantastische Projekt-Management-Tool trac geschaffen haben, welches den Quell-Code im Projekt mehr in den Mittelpunkt rückt. Trac ist einfach wunderbar! Ein Wiki-, ein Bugreport-, ein Code-Browser-, ein Kunden-Kommunikations-, ein Support-Tracking-Wundertool. Alles in einem. Authentifizierung über LDAP. RSS-Feeds für alles mögliche. Attachements sind eine Selbstverständlichkeit. Alles ist verlinkbar. Alles ist superflott durchsuchbar. Herrlich!

Hier ein paar Links wie so ein Trac in Aktion aussieht:
-> eine Latest Changes Seite
-> ein Changeset mit Diffs
-> Verlinkung einer bestimmten Zeile im Code
-> Diverse Reports (RoR verwendet Trac auch zum Management der Patches)
-> source code browser
-> Roadmap
-> Revision Log

Und da ich von Trac nun dermassen begeistert bin, verwenden wir es (und SVN anstatt CVS) ab sofort auch bei uns in der Firma.

Wär eigentlich auch für das Helma-Projekt eine Überlegung wert, oder?

Nachtrag:
Hier noch ein paar interessante Erweiterungen zu Trac
* GanttPlugin
* RssGetMacro
* ScreenshotsPlugin
* CodeTagsPlugin !
* EmailtoTracScript
* ChangeLogPlugin
* PeerReviewPlugin
* RepoSearchPlugin
* TracBlogPlugin

Wednesday, 30. August 2006

object (de)serialization with Helma

robert provided a handy "PropertyMgr" for Antville quite some time ago, which allows to store arbitrary objects within a single db-column.

we still use this mechanism a lot. yesterday i finally switched our twoday.net installation from using the xerces-parser (xerces 2.8.0) instead of helma's default crimson parser, which is already quite outdated (and behaves buggy under weird circumstances).

i did some benchmarking now, in order to compare the performance of the two parsers, and to compare them also to a possible JSON-serialization format.

Here are the measured times for serializing and deserializing a dummy hopobject with several properties:
xerces 2.8.0:
10000 writes: 5100ms
10000 reads:   950ms

crimson 1.1:
10000 writes:  900ms
10000 reads:   900ms

rhino 1.5 eval/uneval:
10000 writes: 1400ms
10000 reads:   600ms

rhino 1.6 eval/uneval:
10000 writes: 1050ms
10000 reads:   550ms

json:
10000 writes: 3700ms
10000 reads: 12000ms
conclusion: eval/uneval is of course the fastest, but the xml-parsers are not that far behind. unfortunately the much safer json-implementation seems to be up to 20times slower than uneval when it comes to reading from strings.

Monday, 28. August 2006

Amazon's Elastic Compute Cloud

-> http://www.amazon.com/gp/browse.html?node=201590011
also see my posting on Amazon's Simple Storage Service a.k.a. S3

$73 (=57€) per machine per month. Each machine is supposed to be comparable with a 1.7Ghz Xeon with 1.75GB of RAM and 160GB disk.

Soon we all will be able to chant "we have all those machines" :-)

I think the prices are very competitive, even in comparison with Hetzner.

But as we all know, the tough part of scaling is not filling out the online form for the new root server (which becomes a API-call with Amazon's new service), but rather to design/implement the distribution of processing over multiple machines and to manage all those machines. And with this new service (as opposed to their storage solution) this will still remain your task.

So, if you boil it down, there is just one major advantage:
* you get machines that have access to a completely free scalable storage solution (i.e. Amazon's S3)

The only other "service highlight", that can not be fullfilled by other hosting companies, is that you can change the number of machines faster (it takes just a couple of minutes to get that extra server up and running, instead of 2 work-days as it is with Hetzner). And honestly, I don't think that there are that many organizations out there, who need to scale that fast.

By the way: It seems that Hetzner has completely dropped its traffic limitations! I guess the overhead for charging extra traffic simply exceeded the incoming money for them.

Thursday, 10. August 2006

Super GAU bei RoR?

zumindest klang es zunächst danach:

Rails 1.1.5: Mandatory security patch (and more)
...
This is a MANDATORY upgrade for anyone not running on a very recent edge (which isn’t affected by this). If you have a public Rails site, you MUST upgrade to Rails 1.1.5. The security issue is severe and you do not want to be caught unpatched.
...
UPDATE: This problem affects 0.13, 0.14, 1.0, and 1.1.x. So here’s a happy opportunity to upgrade if you still haven’t.


Es wird im Artikel dann noch paar mal ausdrücklich wiederholt, dass wirklich jeder upgraden muss, und dass das sofort erfolgen zu hat.

Vor allem aber war anfänglich eben davon die Rede dass auch User von schon älteren Installation pre1.0 auf 1.1.5 updaten müssen. Ein Schritt der normalerweise gut geplant (und getestet) sein will, und der auch ein gewisses Code-Refactoring erfordert. Ich vermute da wurden mal paar Urlaube von RoR-Developern unsanft unterbrochen.

Hier ein Kommentar dazu:

What exactly is the vulnerability and what is the impact (I would look at dev.rubyonrails.org but it is down with too much traffic). We are launching a very large rails site in one week and are currently locked at 1.1.2. It is going to be very difficult to convince management and the testing team to upgrade the production environment this late in the game. Has mongrel and all the rails engines been tested against 1.1.5? What about all the gems? These types of news releases really show the immaturity of rails.

Sicherlich keine angenehmen Stunden für das Ruby-On-Rails Team gerade.

Mittlerweile dürfte sich die Situation entschärft haben, denn man hat entdeckt dass nur die Versionen 1.1.0, 1.1.1, 1.1.2 und 1.1.4 betroffen sind. Und für diese aktuellen Installationen sollte es sowieso weniger schwieriger sein den kleinen Versionssprung mitzumachen.

Bin schon gespannt worin die Sicherheitslücke denn genau bestand. Aus solchen Fehlern (wie z.b. auch vom seinerzeitigen myspace wurm) kann man viel lernen. Derzeit versucht man aber die Hintergründe zu verschleiern.

Nachtrag: Hier gibts schon die passende Erklärung der Sicherheitslücke.

Nachtrag 2: Hier gibts die tatsächliche Erklärung zur Sicherheitslücke:
With Rails 1.1.0 through 1.1.5 (minus the short-lived 1.1.3), you can trigger the evaluation of Ruby code through the URL because of a bug in the routing code of Rails.

"eval is evil", i guess.

Monday, 31. July 2006

automated SQL Analysis

I posted an analysis of the SQL Log Files of twoday.net here on this blog a while ago:
-> SQL Log File Analysis

Back then I did this analysis by playing around with RegExps in my text-editor (in order to group statements), and performed the calculation in R.

Well, now max wrote a small little perl-script, which automated the whole process. All you need to do now, in order to find out your top-queries, is to enable logSQL for a while, and then call this script on it:
-> helmasqllogfileanalyzer (pl, 1 KB)
./helmaSqlLogFileAnalyzer.pl helma.twoday_net.sql.log

ms      count   sql
32035   2156    SELECT AV_TEXT.TEXT_ID FROM AV_TEXT WHERE AV_TEXT.TEXT_F_SITE = XXX AND (TEXT_PROTOTYPE = 'XXX' AND TEXT_ISONLINE > 0) ORDER BY TEXT_CREATETIME DESC
29067   1609    SELECT AV_TEXT.TEXT_TOPIC FROM AV_TEXT WHERE AV_TEXT.TEXT_F_SITE = XXX AND (TEXT_PROTOTYPE = 'XXX' and TEXT_ISONLINE > 0) GROUP BY TEXT_TOPIC ORDER BY TEXT_TOPIC
24899   1400    SELECT AV_TEXT.TEXT_DAY FROM AV_TEXT WHERE AV_TEXT.TEXT_F_SITE = XXX AND (TEXT_PROTOTYPE = 'XXX' and TEXT_ISONLINE = XXX) GROUP BY TEXT_DAY ORDER BY TEXT_DAY asc
24442   10030   SELECT AV_SKIN.* FROM AV_SKIN  WHERE AV_SKIN.SKIN_NAME = 'XXX' AND AV_SKIN.SKIN_F_LAYOUT = XXX AND AV_SKIN.SKIN_PROTOTYPE = 'XXX'
21766   8708    SELECT AV_IMAGE.* FROM AV_IMAGE  WHERE AV_IMAGE.IMAGE_ALIAS = 'XXX' AND AV_IMAGE.IMAGE_F_SITE = XXX AND (IMAGE_PROTOTYPE = 'XXX' and IMAGE_F_IMAGE_PARENT is null)
19574   8503    SELECT AV_TEXT.TEXT_ID FROM AV_TEXT WHERE AV_TEXT.TEXT_F_TEXT_STORY = XXX AND (TEXT_PROTOTYPE='Comment' AND TEXT_ISONLINE = XXX) ORDER BY TEXT_MODIFYTIME DESC
11081   2734    SELECT AV_TEXT.TEXT_ID FROM AV_TEXT WHERE AV_TEXT.TEXT_F_SITE = XXX AND AV_TEXT.TEXT_DAY = 'XXX' AND (TEXT_PROTOTYPE = 'XXX' and TEXT_ISONLINE = XXX) ORDER BY TEXT_CREATETIME desc
11035   31      SELECT AV_SITE.SITE_ID FROM AV_SITE WHERE (SITE_ISONLINE > 0 AND SITE_ISBLOCKED = XXX AND SITE_SHOW = XXX) ORDER BY SITE_LASTUPDATE desc
10072   3905    SELECT AV_TEXT.* FROM AV_TEXT WHERE AV_TEXT.TEXT_ID = XXX
...
The first column contains the cumulated amount of time, and the second column the number of occurences for the according group of SQL-statements.

Feel free to use/abuse this script for your own needs. Thanks max!

Friday, 28. July 2006

JavaScript Newbies

Neue Pflichtlektüre für JavaScript-Newbies/Wannabes:
-> JavaScript Bootcamp

Für uns alte JS-Hasen ist da eher wenig Neues dabei :-)

Search

 

About michi

michi Michi a.k.a. 'Michael Platzer' is one of the Knallgraus, a Vienna-based New Media Agency, that deals more and more with 'stuff' that is commonly termed as Social Software.

Meet my fellow bloggers at Planet Knallgrau.

my delicious

Recent Updates

My Gadgets

Credits

Knallgrau New Media Solutions - Web Agentur f�r neue Medien

powered by Antville powered by Helma


Creative Commons License

xml version of this page
xml version of this page (summary)
xml version of this topic

twoday.net AGB

Counter



berufliches
blogosphaerisches
privates
spassiges
sportliches
technisches
trauriges
Profil
Logout
Subscribe Weblog