DasGenie: !Scrap http://www.dasgenie.com/scrap/ en-us 2005-04-14T18:53:31+01:00 End of line... http://www.dasgenie.com/scrap/archives/000137.html The life of this movable Type Blog is over But don't worry, the story continues on the new DasGenie: !Scrap. Please adjust your Browsers and Feed Readers!]]> dom 2005-04-14T18:53:31+01:00 <![CDATA[Days Left / Tageszähler]]> http://www.dasgenie.com/scrap/archives/000136.html Days LeftI written this thing for one purpose: help my mother get rid of her excel-file which calculated the days left until her retirement for her. I thought hey, I'm a programmer, I can do better. Since then it is running in my Dock and telling me how many days left until I have to hand over my diploma thesis. That day was now, so finally I've got the time again to blog and, moreover, release Days Left 1.0.2.

So what does it do? Simple. It sits in your dock, telling you how many days are left to a certain due date. That due date can be set in its preference window. Thanks to Stéphane Sudre's WBCalendarControl you can enter it nicely. If you want the same in the menu, you can use the Countdown menu extra, which can be found on Britta's excellent super OS X menubar items list. However Days Left only counts full days, and switches at exactly 00:00 hours. (It does so with a timer to not waste usefull CPU cycles, and updates on wake and sleep). I put this little thing right next to iCal and let it show me the Days Left until my next most important day. Use it for whatever purposes you want! It's free... take it!

P.S.: Für alle die das jetzt nicht lesen konnten, keine Sorge! Meine Mutter mag Deutsch auch lieber als Englisch, deswegen ist das Ding lokalisiert und heißt dann Tageszähler. Wie bei jeder guten Mac OS X Anwendung ist die Lokalisierung mit im Programm, also einfach auf das Bild oder den Link oben klicken und freuen.
]]>
dom 2005-03-15T17:53:02+01:00
Zynisch... http://www.dasgenie.com/scrap/archives/000135.html wurst
lammwurst im eigenen darm
das ist zynisch
die sau mästen, erst befruchten hier künstlich,
dann
zack ferkel
schlachten, mahlen,
in den eigenen darm zurückstopfen,
und dann:
Gesichtsmortadella

[via hagen rether - eigendarm (ende)]]]>
dom 2005-03-15T10:00:29+01:00
ex kunden http://www.dasgenie.com/scrap/archives/000134.html [Via wirres.net: ex kunden: "manchmal brauche ich etwas länger..."]

Kaum hab ich im Juli 2004 die Gegenaktion gestartet, greift sie auch schon um sich :-). Ich hab ja soviel Einfluss...

Bei mir hängt das bild links hinten im Auto, und hat schon mehr als einmal Gespräche heraufbeschworen. Besonders McDrive Personal ist immer angetan.

Ich empfehle die Anbringung des kleinen Banners auf genervten Bloghomes. Auch direkt mein Bild benutzen ohne zu spiegeln ist ausnahmsweise für diesen guten zweck erlaubt.

<div align="center"><a href="http://dasgeniedotcom.spymac.net/zkm.jpg" target="_BLANK"><img src="http://www.dasgenie.com/Graphics/Blog/Kinogaenger.png" alt="Kinogänger sind Kunden!" border="0"/></a></div>

Update: Und jetzt müssen wir erfahren dass auch Raubkopiererinnen Verbrecher sein sollen. Wie die Realtität einen doch immer wieder einholt. Dabei ist noch garnicht 1. April...

]]>
dom 2005-03-05T22:49:45+01:00
<![CDATA[Brüller auf HaraldSchmidt.tv]]> http://www.dasgenie.com/scrap/archives/000133.html Homepage zur neuen Schmidt Sendung.

Serven tuts ein Apache/2.0.46 (Red Hat) Server at www.haraldschmidt.tv Port 80

Leider immer noch PHP, und videos nur als WMV. Interessant ist das top-level verzeichnis /html/ parallel liegt /images/ interessanterweise gibts auch /archiv/. Also ein hübscher deutsch-englisch mix. Höhepunkt ist das deutsche javascript. Ich sage nur function sehen() {}. Wie sie sehen, sehen sie nix :-).

    <script language="JavaScript" type="text/javascript">
    <!--
    //bilder vorausladen
    var img1=new Image();
    img1.src="../../../images/bg_linie.gif";
    var img2=new Image();
    img2.src="../../../images/bg_linie_unten.gif";
    
    hmpunkte=new Array();   
    untermenues=new Array();
    /************************
    klasse fuer hauptmenuepunkt
    ************************/
    function hmpunkt(objekt) {
        this.aktiv=0;
        this.drueber=0;
        return this;
    }
    /************************
    klasse fuer untermenue-ebenen
    ************************/
    function unterebene(objekt) {
        this.offen=0;
        this.drueber=0;
        return this;
    }
    
    /*************************
    hauptmenuepunkte initiieren
    *************************/
    function init() {           
        hmpunkte["high"]=new hmpunkt("high");       
        hmpunkte["specials"]=new hmpunkt("specials");
        hmpunkte["service"]=new hmpunkt("service");
        hmpunkte["archiv"]=new hmpunkt("archiv");
        hmpunkte["home"]=new hmpunkt("home");
        hmpunkte["high2"]=new hmpunkt("high2");     
        hmpunkte["specials2"]=new hmpunkt("specials2");
        hmpunkte["service2"]=new hmpunkt("service2");
        hmpunkte["archiv2"]=new hmpunkt("archiv2");
        hmpunkte["home2"]=new hmpunkt("home2");
        
        untermenues["um_service"]= new unterebene("um_service");
        untermenues["um_archiv"]= new unterebene("um_archiv");
        untermenues["um_high"]= new unterebene("um_high");
    }
        
    function rollover(art,objekt,submenu) {         
        if (art==1) {
            hmpunkte[objekt].drueber=1;
            if (submenu==1) {
                hmpunkte[objekt].aktiv=1;
            }
            if (document.all) {             
                document.all[objekt+"_oben"].style.backgroundImage="url(../../../images/bg_linie.gif)";
                document.all[objekt+"_unten"].style.backgroundImage="url(../../../images/bg_linie_unten.gif)";
                document.all[objekt].style.backgroundColor="#a2b3e9";
            }
            else if (document.getElementById) {
                document.getElementById(objekt+"_oben").style.backgroundImage="url(../../../images/bg_linie.gif)";
                document.getElementById(objekt+"_unten").style.backgroundImage="url(../../../images/bg_linie_unten.gif)";
                document.getElementById(objekt).style.backgroundColor="#a2b3e9";
            }
        }
        else {
            hmpunkte[objekt].drueber=0;
            if (objekt!="home" && objekt!="home2") {
                if (hmpunkte[objekt].aktiv==0) {
                    if (document.all) {
                        //alert(objekt);
                        document.all[objekt+"_oben"].style.backgroundImage="url(../../../images/spacer.gif)";
                        document.all[objekt+"_unten"].style.backgroundImage="url(../../../images/spacer.gif)";
                        document.all[objekt].style.backgroundColor="#697592";
                    }
                    else if (document.getElementById) {
                        document.getElementById(objekt+"_oben").style.backgroundImage="url(../../../images/spacer.gif)";
                        document.getElementById(objekt+"_unten").style.backgroundImage="url(../../../images/spacer.gif)";
                        document.getElementById(objekt).style.backgroundColor="#697592";
                    }
                }
            }
        }
    }
    function untermenue(art,objekt) {
        if (art==1) {
            untermenues[objekt].drueber=1;
            if (document.all) {
                document.all[objekt].style.visibility="visible";
            }
            else if (document.getElementById) {
                document.getElementById(objekt).style.visibility="visible";
            }
            untermenues[objekt].offen=1;
        }
        else {  
            untermenues[objekt].drueber=0;      
            window.setTimeout("schliessen()",400);
        }
    }
    function schliessen () {
        for (var temp in untermenues) {
            if (untermenues[temp].drueber==0) {
                if (untermenues[temp].offen==1) {
                    if (document.all) {
                        document.all[temp].style.visibility="hidden";
                    }
                    else if (document.getElementById) {
                        document.getElementById(temp).style.visibility="hidden";
                    }
                    hm_zurueck();
                    untermenues[temp].offen=0;
                }
            }
        }
    }
    function hm_zurueck() {
        for (var temp in hmpunkte) {
            if (temp!="home" && temp!="home2") {
                if (hmpunkte[temp].drueber==0) {
                    if (document.all) {
                        document.all[temp+"_oben"].style.backgroundImage="url(../../../images/spacer.gif)";
                        document.all[temp+"_unten"].style.backgroundImage="url(../../../images/spacer.gif)";
                        document.all[temp].style.backgroundColor="#697592";
                    }
                    else if (document.getElementById) {
                        //alert(temp);
                        document.getElementById(temp+"_oben").style.backgroundImage="url(../../../images/spacer.gif)";
                        document.getElementById(temp+"_unten").style.backgroundImage="url(../../../images/spacer.gif)";
                        document.getElementById(temp).style.backgroundColor="#697592";
                    }
                    hmpunkte[temp].aktiv=0;
                }
            }
        }
    }
    init();
    //-->
    </script>
    <script language="JavaScript" type="text/javascript">
    <!--
    function sehen() {
        }
    
    //-->

    </script>


Im Freificken-Glossar dann noch unausgeführtes PHP, leider nix kritisches:
<?php
$to_root="../../../../"
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
    <link rel="STYLESHEET" type="text/css" href="../../../../styles/styles.css">
    <link rel="STYLESHEET" type="text/css" href="../../../../styles/styles_navi.css">
    <?php
    include($to_root."html/includes/javascript.php");
    ?>
In diesem sinne eine fröhliche und gute nacht.]]>
dom 2005-02-18T02:06:17+01:00
iWork 05: Pages - dog slow http://www.dasgenie.com/scrap/archives/000132.html Pages. I did some tests, and it's a great disappointment. A even bigger disappointment is the quality of the Reviews out there on the net. No full scale review mentions the catastrophic speed of Pages. I tested it here on my Powerbook G4 800Mhz 1GB RAM as well as on the dual 2.5 GHz G5 2GB RAM, so both ends have been seen.
While the general workflow and concept is nice, the speed is unacceptable. The simplest way of seeing this is opening a new Pages document with the "Club Newsletter" template. Try to drag the round flag at the bottom around, then enter text in the middle section. You can literally see the letters form shape, one after one, on both the Powerbook and the top notch Dual G5. WTF? And this is a one page document...

Next test: importing a standard word document, a 30 page work of a friend of mine with TOC and footnotes. While cleaning up the styles, I wanted to change the TOC. After the tick for every style I got a nice 5-10 second beach ball... G5 was quicker, but not beach ball free. On a side-note: I didn't get the TOC to contain the correct automatic bullets which the headings had. And for developers: this little document accumulated 120 MB additional RPRVT memory... and even after closing all documents, Pages only came down to 100 MB total RPRVT which suggest some leaks as the initial RPRVT size is 8 MB...

If you thought Keynote is slower as it ought to be, Pages exceeds this to the maximum. So a great disappointment. But what really concerns me are the reviewers. I like Apple, I really do. But when a product has crappy qualities, you have to report it. Why didn't they at least mention that the speed wasn't optimal. At least an euphemism like this. But nothing. Does Apple love make reviewers blind? (MacTeens, pcmag, MacWorld). At least some user sites report Pages speed issues...

P.S.: Keynote 2 for 79$ is still much bang for your buck... so just ignore Pages ;-)

P.S.: comments work again now, sorry for the inconvenience]]>
dom 2005-02-09T15:02:31+01:00
<![CDATA[Über das File Sharing in Mac OS X...]]> http://www.dasgenie.com/scrap/archives/000131.html Über das File Sharing in Mac OS X...:
"... mit Jaguar führte Apple eine neue Technologie namens Rendezvous ein, mit der sich auf simple und einfache Weise Dienste im lokalen Netzwerk ausfindig machen können. Warum hat Apple diese Möglichkeit nicht genutzt und auf Basis von Rendezvous ein neues File Sharing-Protokoll implementiert, welches einfach und verlässlich ist? Auch in Tiger sind keine Anzeichen vorhanden, dass Apple an diesem Missstand was ändern wird. Rendezvous konnte schon in vielen Programmen von Apple und von Drittherstellern zeigen, dass es sehr gut funktioniert. ..."

Als Dritthersteller möchte ich mich hier mal zu Wort melden. Rendezvous hat nichts aber auch gar nichts mit dem darunterliegenden Protokoll zu tun. Rendezvous macht es nur einheitlich und einfach möglich im lokalen netz Dienste zu entdecken. Das eigentlich Netzwerkprotkoll hängt dann mit der entsprechenden Anwendung zusammen. Rendezvous ist weder eine eierlegende Wollmilchsau noch der Heilige Gral jedwelcher Netzwerkprogrammierung. Es ist die entscheidende Technologie um Programme wie SubEthaEdit ohne jegliche Netzwerkkonfiguration zu ermöglichen.

(Via MacTechNews.de.)

]]>
dom 2005-02-04T18:17:25+01:00
Iterating over an NSIndexSet http://www.dasgenie.com/scrap/archives/000130.html NSIndexSet:
// easy and still reasonable fast - can be reversed by using lastIndex and indexLessThanIndex:
unsigned index = [indexSet firstIndex];
while (index!=NSNotFound) {
    // do Stuff
    index=[indexSet indexGreaterThanIndex:index]) {
}
This seems a little bit inefficient, but I was made belief (by mmalc) that indexGreaterThanIndex: behaves efficient when called this way.

Nevertheless if you want full speed at possibly large sets, then go for this one:
// more complex but as efficient as you choose your buffersize
unsigned int indexBuffer[40];
unsigned int bufferIndex;
unsigned int indexCount=1;
NSRange range=NSMakeRange([indexSet firstIndex],
                          [indexSet lastIndex]-[indexSet firstIndex]+1);
while ((indexCount=[indexSet getIndexes:indexBuffer maxCount:40 inIndexRange:&range])) {
    for (bufferIndex=0;bufferIndex<indexCount;bufferIndex++) {
        unsigned int index=indexBuffer[bufferIndex];
        // do stuff
    }
}
If you know a way to reverse the direction of this one please add a comment.]]>
dom 2005-01-08T20:26:15+01:00
Apple Store Refund http://www.dasgenie.com/scrap/archives/000129.html here under "Prices") on price drops:
"Should Apple reduce its price on any shipped product within 10 calendar days of shipment, you may contact Apple Sales Support at 1-800-676-2775 to request a refund or credit of the difference between the price you were charged and the current selling price.  To receive the refund or credit you must contact Apple within 14 business days of shipment."

Sadly I couldn't find a regulation like this in the german policy.]]>
dom 2005-01-08T12:07:07+01:00
... nachtrag http://www.dasgenie.com/scrap/archives/000128.html hier

Und der im ersten Kommentar erwähnte Artikel: Die Zeit: Wir haben versagt!. Lesen.]]>
dom 2005-01-02T11:33:57+01:00
Die Perfekte Welle... http://www.dasgenie.com/scrap/archives/000127.html SpOn wird Juli's "Perfekte Welle" bei vielen Radio Sendern aus dem Programm genommen - aus "Pietätsgründen". Morgen werden dann die Worte Welle, Surfen (auch wenn's nur im Internet ist) und Wasser an sich aus dem Vokabular aller Sender gestrichen. Bullshit. Spenden hilft. Und das geht u. a. hier. Falschverstandene Pietät nicht. Niemandem.

Naja andererseits ist die Musikauswahl der betroffenen Musiksender eh an sich eine Katastrophe...]]>
dom 2004-12-29T13:12:52+01:00
Shatner has been... he really has... http://www.dasgenie.com/scrap/archives/000126.html If you're wondering what William f**king Shatner (as Wil Weaton AKA SuperWes is calling him...) is doing:

Have a look at ShatnerHasBeen

Hilarious... really. He's really thinking he is doing art. Just listen to the commentary and excerpts on the flash-website. And if this is not enough to make you ROTFL: just listen to the spoken word version of bananaphone.
]]>
dom 2004-12-19T19:27:11+01:00
SubEthaEdit Conference Kit http://www.dasgenie.com/scrap/archives/000125.html SubEthaEdit is used widespread on Conferences. To further support this usage I announce today the offical SubEthaEdit Conference Kit. The Conference Kit is a .dmg file containing:
  • note_template.notes - the template for note taking on conferences that has been around for a while, with quite some modifications for the...
  • Conference.mode - a SubEthaEdit mode featuring technicolor highlighting and navigation for the above template
  • An example HTML Export of a template so you can have a look at it without installing the mode
  • An AppleScript that takes the text of the front Safari window and puts it into a new SubEthaEdit document in Conference mode
The AppleScript is best to be put into the ~/Library/Scripts/Applications/Safari/ folder together with the "View Source in SubEthaEdit" AppleScript from Assorted Geekery. It is meant for viewing conference notes that are already out there, like the ones of PyCon 2004, 2005. You may have to convert the line endings to NL too, because some of the notes have CR as endings and OgreKit then has issues with the line context, which is used in the mode.

Suggestions and feedback is very welcome in the comments of this entry!

Share and Enjoy!]]>
dom 2004-12-07T18:10:47+01:00
see command line tool xtreme http://www.dasgenie.com/scrap/archives/000124.html A wonderful thing about SubEthaEdit 2.1.1 is the see command line tool.
If your living a lot in the terminal then the first thing you might want to do is set the EDITOR environment variable to 'see -rw', in bash this would be done by adding a
export EDITOR='see -rw'
to your ~/.bash_profile. Now everytime a standard unix tool wants you to edit something, the file is opened in SubEthaEdit and the tool will wait until you close the window before it will proceed. -w, --wait is for the waiting, -r, --resume will bring the Terminal.app to in front again after you close the window.
Another interesting switch is the -j, --job-description option. What it does is it puts the following string in the corresponding see window title. E.g. in my ~/.subversion/config there is:
[helpers]
editor-cmd = see -wr -j "SVN CheckIn"
so my svn checkins look like this:
wc/trunk/svn-commit.tmp [SVN Check In]

Now let's go to the more elaborate things. I bet many of you know and love the find command, especially combined with the xargs command it can be extremely useful. A typical example for find is finding and deleting files you don't like. E.g. the dreadful Thumbs.db you get from your windows users when you get images from them. So a simple:
find . -name "Thumbs.db" -delete
gets rid of them. Thats all quite nice, if you know exactly what your searching and doing, cause otherwise you either delete accidently, or get prompted on every file. So what if you want to delete many files but maybe not all of them? You use see to have a semi-automatic workflow.
find . -name "*.jpg" | see -r -t "Delete Files" | tr '\n' '\0' | xargs -0 rm
Now you can have a look at all the filenames, delete the filenames you wish to keep out of the document, close it, and deleting begins. Be cautious, when piping out, closing the window does not cancel the outer action. To cancel the deletion you have to control-c in the corresponding terminal. The extra | tr '\n' '\0' | xargs -0 ensures that spaces as well as quotes in filenames work
I used this cause I wanted to delete all thumbnails out of a directory structure. Problem was the thumbnails were named uniquely so you could tell it was a thumbnail by its name, but no simple regex would match all variations. Another way of achieving this would have been to pipe the find into see, blockedit an rm in every line and save it as an script.
Another similar one, measure the size of a hand selected number of photoshop files in the current directory and below:
find . -name "*.psd" | see -r -t "Count" | tr '\n' '\0' | xargs -0 du -hc
Or a more programming oriented variant, measure the lines of code of your project, removing third party stuff by hand:
find . -name "*.[hmc]" | see -r -t "Lines Of Code" | tr '\n' '\0' | xargs -0 wc -l
I think you get the idea...
And now going into recursion... kind of. Open a selection of txt-files in see:
find . -name "*.txt" | see -r -t "Open in SubEthaEdit" | tr '\n' '\0' | xargs -0 see
BunkBlog even used the piping to do remote editing via ssh. nice.

So what do you do with the command line tool? ]]>
dom 2004-11-27T21:56:39+01:00
"Our Leader"? http://www.dasgenie.com/scrap/archives/000123.html this is a hoax. Please. If not, what's next? "Hail Bush"?

Our Leader


[via blogitics.com]]]>
dom 2004-11-23T18:44:35+01:00