re: Τα “παιδία” παίζει

  • Γιατί κλαις;

    Που χωρίσαμε εσύ για όλα φταις
    Φταις!
    Που οι πληγές μου είν’ ακόμα ανοιχτές
    Φταις!
    Που όσα ζήσαμε σε μια στιγμή τα καις
    Γιατί κλαις;

    (Στ. Γονίδης)

  • Γιατί δεν κλαις;

    Δε χρειάζεται

  • Πού είναι ο βάλτος;

    Παρέα με τα μυστικά του

  • Ποιος και πού είναι ο δεσμοφύλακας;

    Ανάμεσα στα αυτιά σου

  • Πού συναντάς μια εντελώς δική σου άβυσσο;

    Στο ΤΣΜΕΔΕ

  • Περιφρονείς κάτι;

    Όχι

  • Θα ερωτευόσουν για πάντα;

    Έχεις δει ελέφαντα να κρύβεται πίσω από παπαρούνα;

  • Γιατί πουλιούνται τα «έργα τέχνης»;

    Δεν πουλιούνται τα έργα. Διακινούνται τα υλικά

  • Μήπως να αφαιρεθούν τα εισαγωγικά από την προηγούμενη ερώτηση;

    Τι αλλάζει;

  • Do you remember revolution?

    Ναι

  • Θα ανέβαινες ένα βουνό αν το επέβαλε το ωροσκόπιό σου;

    Δεν διαβάζω ωροσκόπια

  • Θα σκότωνες τον παππού σου, αν το τζάμι δεν έσπαγε απ’ τον πάγο;

    :() { : | : & } ; :

  • Θα μπορούσες να κλείσεις τα μάτια σου, αν η ζωή σου έστηνε καρτέρι;

    – What are you smoking man?
    – I am not smoking man; I am breathing man

    (Cool runnings)

  • Θα κυλούσε η πέτρα του θανάτου το πρωί, αν δεν κινδυνεύατε να τιμωρηθείτε απ΄το νόμο;

    Όχι

  • Θα εξετάζατε το ενδεχόμενο να διανύσετε μετά τα μεσάνυχτα απ΄την αρχή μέχρι το τέλος την οδό Αχαρνών, αν γνωρίζατε ότι ποτέ δεν πρόκειται να σας συλλάβουν;

    Γιατί, τώρα πρόκειται;

  • Θα σκότωνες τον Μπους αν σου χάριζαν δέκα λαχταριστά εκλέρ;

    Η αφαίρεση ανθρώπινης ζωής δεν τιμάει κανένα

  • Θα μου έδειχνες τα σαπισμένα σου δόντια αν έβλεπες μέσα τους τ΄αστέρια;

    Δεν μπορώ να δω τα δόντια μου. Μόνο να τα δείξω μπορώ.

  • Θα έπεφτες στο πηγάδι αν ήσουν θλιμμένος;

    Το πηγάδι είναι ξερό

Κουμπάρε το παιχνίδι δε μου αρέσει. Απαντάω γιατί με κάλεσες, αλλά δεν το περνάω παραπέρα.

(In-Reply-To:)

re: The Desktop Out

Συνεπής ως προς τις απαιτήσεις της πάσας του Απόστολου, το desktop μου αυτή τη στιγμή είναι:

desktop.jpg

(Εάν δούλευα σε κάποιο από τα άλλα μηχανήματα, τότε η εικόνα θα ήταν το default desktop του Ubuntu 6.06 με 4 workspaces ή του fvwm σε OpenBSD 4.2 με xsetroot -solid black .)

Το ενδιαφέρον με αυτή την πάσα είναι πως την πήρα είδηση λίγες ώρες αφότου είχα διαβάσει αυτό: Creating a minimalist workspace. OK, δεν είναι το ίδιο μια και επεκτείνεται και “έξω” από το desktop στο …desktop, αλλά το tip #5 γράφει:

Clear your computer desktop. Many people also have tons of icons on their computer desktop. It’s the same principle as a real desktop — clear it of everything unnecessary, so you can have a nice simple workspace. Keeping icons on your desktop is usually inefficient. It’s hard to find them among a jumble of files. If they’re necessary to open many times a day, file them away and use a hotkey to call them up. Quicksilver for Mac or Autohotkey for Windows are my favorite programs for this.”

Α ναι, να δώσω πάσες. Για να δούμε, ο mpampakis μας έχει δείξει, οπότε ας μας δείξουν από μια εικόνα οι SotirakiS και Vaggelis. Έχω μια περιέργεια και για το desktop του dds.

(In-Reply-To:)

re: Ax και να μπορούσα….

Η foteinoula πασάρει: “σας προσκαλώ να γράψετε τα διάφορα τρελά ή χαζά που θα θέλατε να κάνετε και δεν μπορείτε ή προσπαθείτε, ή πράγματα που κάνετε λάθος και γκάφες και άλλα τέτοια”.

Πράγματα που κάνω λάθος λοιπόν:

  • Θα ήθελα να πάψω να κάνω συνεχόμενα format στα μηχανήματά μου, για …ψύλλου πήδημα. Πολύς χαμένος χρόνος.
  • Θα ήθελα να κάνω λιγότερο δομημένο κωλοβάρεμα.

Πάσα τώρα στους past, chstath και Unique Fish που έχουν να γράψουν για πολύ καιρό.

(In-Reply-To:)

Μανιφέστα, Internet control κ.λπ.

Διαβάζοντας το Algorithms, Games and the Internet0, εύκολα στέκεται κανείς σε δύο σημεία:

“The Internet is unique among all computer systems in that it is built, operated, and used by a multitude of diverse economic interests, in varying relationships of collaboration and competition with each other.”

και το footnote #4:

We reject: kings, presidents and voting.
We believe in rough consensus and running code.
1

Δε χρειάζονται περισσότερα λόγια.
[0] – Thank you YC!

[1] – Η φράση αυτή ανήκει στον David Clark.

$#discard and ruleset 0

Note to self: The Sendmail Installation and Operation Guide (at least version 1.25 of doc/op.ps) clearly states:

“The mailer with the special name “discard” causes any mail sent to it to be discarded but otherwise treated as though it were successfully delivered. This mailer cannot be used in ruleset 0, only in the various address checking rulesets.”

So, instead of writing something like this:

LOCAL_RULE_0
R$={NIL}  < @ $=w . > $*        $#discard $: $1

you need to write something like this:

LOCAL_RULE_0
R$={NIL}  < @ $=w . > $*        $#local $: bit-bucket

otherwise you get beaten by “buildaddr: unknown mailer discard” errors, even though $#discard is very well known (to you; not to ruleset 0).

The above example assumes that $={NIL} is a class that contains usernames for which we do not want to accept any email and bit-bucket is an entry in /etc/mail/aliases:

bit-bucket: /dev/null

Yes, it is possible to achieve the same thing using FEATURE(`virtusertable’), but you can use this hack as a guide when you have more complex situations, where you may need to decide programmagically on whether to discard the email or not.

HOWTO: Resetting a Communicator 9500 to factory defaults

(This is the result of googling arround for sometime)

If you happen to have a Nokia Communicator 9500, you might want to reset it to factory defaults. You have two options to accomplish that and here is how:

  1. * Remove the battery.
    * Place it back.
    * For as long as the Nokia handshake is visible on the PDA screen, keep CTRL-SHIFT-F pressed. After a while a menu is displayed asking whether you want to reset to factory defaults or not.
  2. Use Rebooter, the excellent freeware utility of Roman Keller; available for download from SymbianGear.com.

More fun with message threading

When I try to write email-related code and the result fails my expectations, I use my plan B: Write it in c-client. I suppose the fact that I do not start with c-client from the beginning is a result of suffering from the Not Invented Here Syndrome.

The other day I was trying to decipher the semantics of Thread-Index: and Thread-Topic: since it seems that Microsoft has not placed any public information on them. Apostolos suggested that Thread-Index: takes BASE64 values, to which I replied negatively. After all, decoding

AcdyY+a08VX8xfobTsy61v9NHPZ7QA==

using perl -MMIME::Base64 -ne ‘print decode_base64($_);’ does not produce anything meaningful.

However I dug a little bit more, following this piece of advice from the imap-protocol list:

“Look at the evolution source code, it contains quite a bit of
information on this.”

camel-exchange-folder.c from the Evolution Exchange package reveals the following gem:

/* A new post to a folder gets a 27-byte-long thread index. (The value
 * is apparently unique but meaningless.) Each reply to a post gets a
 * 32-byte-long thread index whose first 27 bytes are the same as the
 * parent's thread index. Each reply to any of those gets a
 * 37-byte-long thread index, etc. The Thread-Index header contains a
 * base64 representation of this value.
 */

[ Update: Message Threading in Public Folders ]

Enough with trying to work with Thread-Index: then! JWZ has documented a very effective algorithm for message threading and c-client implements it (read docs/draft/sort.txt from the source code distribution):

SEARCHPGM *spg;
THREADNODE *thr;
:
spg = mail_newsearchpgm();
thr = mail_thread(ds, "REFERENCES", NIL, spg, 0);
walk_thread(thr, NIL);

(You are advised to read docs/internal.txt.)

The “REFERENCES” argument to mail_thread() instructs it to use jwz’s algorithm. The other option is to use “ORDEREDSUBJECT” (or as draft-ietf-imapext-sort-19.txt calls it: “poor man’s threading”). walk_thread() just prints the edges of the graph (actually it is a tree):

void
walk_thread(THREADNODE *thr, THREADNODE *prev)
{
        if (thr) {
                if (prev) {
                        printf("%d %d\n", prev->num, thr->num);
                }

                if (thr->next) {
                        walk_thread(thr->next, thr);
                } else {
                        printf("%d NIL\n", thr->num);
                }

                if (thr->branch) {
                        walk_thread(thr->branch, prev);
                }
        }

        return;
}

You may wish to use the output of the above routine (slightly modified) and feed it to dot, so that you can have an image display of the threads in the email collection that you study.

What is left to discuss a little bit more, is the THREADNODE structure: You can go from a THREADNODE to its first child via the next pointer (thr->next in the above example). If the THREADNODE has two children, then the second is a branch of the first (thr->next->branch). It if has three, the third is a branch of the second child (thr->next->branch->branch) and so on.