$#random – a local mailer that returns a random EX_*

I found myself in a situation where I needed a local mailer that was required to return random exit values0 for email directed to certain users. Luckily, most of the job can be done via your .mc file:

MAILER_DEFINITIONS
Mrandom,        P=/opt/bin/random,
                F=lsDFMqbE,
                S=ruleset_noop, R=ruleset_random,
                T=DNS/RFC822/X-Unix,
                A=random $u

LOCAL_CONFIG
C{Random} adamo yiorgos admin system operator
Kcomp arith

LOCAL_RULESETS
Sruleset_noop
# This ruleset does nothing

Sruleset_random
# EX__BASE == 64 and EX__MAX == 78. EX_OK == 0, so we mask it to 79.
R$*             $: $1 . $(comp r $@ 64 $@ 79 $)
R$* . 79        $@ $1 . 0

LOCAL_RULE_0
R$={Random}  < $=w . > $*        $#random $: $1

When $#random is called, ruleset_random is called with $1 (the username) as an argument and returns $1.number, where number is a random number between EX__BASE (64) and EX__MAX (78) or zero. Therefore, the $#random binary is executed with $1.number as an argument.

/opt/bin/random can be as simple as this shell script1:

#!/bin/sh
# This is an example (non) delivery agent and is not considered safe to run on a 
# production server.
status=`echo $1 | sed -e 's/.*\.\(.*\)$/\1/'`

while read x
do
        # noop
done

exit $status

A random EX_* value is returned to the sender of the email, assuming s/he has emailed a local user contained in class $={Random}.


[0] – Valid sendmail exit codes (EX_*) are defined in sysexits.h.
[1] – In my case I wrote the mail delivery agent in C, as I needed to do a few more stuff prior to calling exit().

time there is not

Time there is not. Αυτό το έχουμε τεκμηριώσει.

Ο Vaggelis και ο apostolos ρωτάνε πως προλαβαίνω. Στην πραγματικότητα δεν προλαβαίνω. Αλλά δεν παύω να ασχολούμαι. Τα παιδιά στη δουλειά ξέρουν π.χ. πως έχω ανοιχτά 4-5 pet projects που το καθένα θα ήθελε ένα ανθρωπομήνα για να τελειώσει σαν prototype, αλλά ήδη ένα έχει χρονίσει. Το ίδιο συμβαίνει και με τα βιβλία και τα περιοδικά που υπάρχουν στο stack. Τα έχω όμως ανοιχτά και ανάλογα με το διαθέσιμο χρόνο και την κατάσταση στην οποία βρίσκομαι, ασχολούμαι με κάποιο από αυτά.

Νομίζω πως το καλύτερο πράγμα που μπορεί να κάνει κανείς, είναι να εντοπίσει που έχει “νεκρό χρόνο”. Π.χ. εγώ έχω αρκετό τέτοιο στα ΜΜΜ (που αντίστοιχα δεν έχει κάποιος που οδηγεί για να πάει στη δουλειά του). Αυτός είναι χρόνος που μπορεί να αφιερώσει κάποιος για να κάνει μια “ελαφριά” δουλειά (Δεν διαβάζει κανείς άνετα τη “Δομή των Επιστημονικών Επαναστάσεων” στο λεωφορείο, διάβασα όμως το “Meta Math!“).

Το επόμενο πράγμα που πρέπει να κάνει κανείς είναι να έχει ισχυρό commitment για το στόχο. Ο φίλος μου ο Γιώργος, σε όλη τη διάρκεια της εκπόνησης του διδακτορικού του είχε στο τηλέφωνό του το εξής καλοσώρισμα: “PhD: Πρόοδος σήμερα?”. Φυσικά δεν περιοριζόταν μόνο στο να το βλέπει, έκανε κάτι για αυτό κιόλας.

Οι άνθρωποι με πολλές υποχρεώσεις (ή/και λίγο χρόνο) χρειάζονται μικρούς ορατούς στόχους για να μπορέσουν να διατηρήσουν μια πορεία: Baby steps. Υπάρχει φως στο τούνελ, και ρεαλιστικά βλέπεις κάποιο τέλος, ανεξάρτητα από το διαθέσιμο χρόνο. Baby steps και συνέχεια. Χωρίς τη συνέχεια δεν καταφέρνει κανείς τίποτε. Τελικά, πρέπει να συντηρηθεί ένας ενισχυτικός κύκλος: Baby steps, που επειδή ολοκληρώνονται, ενισχύουν την αυτοπεποίθησή μας, κρατάνε τη συνέχεια και την αφοσίωσή μας, άρα προχωράει κανείς στο επόμενο baby step, κ.ο.κ.

Και βέβαια έτσι καταφέρνει κανείς να έχει κίνητρο να κοιμάται 1 με 2 ώρες λιγότερο.

Καταλαβαίνω πως τα παραπάνω είναι πιο δύσκολα για ανθρώπους που έχουν δικιά τους δουλειά, αλλά: Every day, try and move things forward, even just a little bit. Think chess. Granted, your life is more like chess on speed…


Related posts:

shopping therapy

Μερικές μέρες στη δουλειά είναι δύσκολες. Κάπως πρέπει να ξεδίνει κανείς. Π.χ. οι γυναίκες πάνε στην Ερμού. Εγώ από την άλλη μπαίνω σε βιβλιοπωλεία. Και το έχω “τάμα” όταν μπαίνω να μη βγω χωρίς βιβλίο. Με την Εστία απέναντι και την Πολιτεία στα 100 μέτρα οι επιλογές είναι πολλές. Λίγο καιρό πριν υπήρξε μια τέτοια δύσκολη μέρα. Για αλλαγή είπα να πάω στο άλλο κοντινό βιβλιοπωλείο.

– Βιβλία για Μαθηματικά έχετε;
– Βεβαίως! Στο υπόγειο.

Κατεβαίνω τις σκάλες και πέφτω φάτσα με το Introduction to Mathematical Logic. Καλή αρχή!

Έφυγα από εκεί με τα Combinatorial Optimization: Algorithms and Complexity, Flatland και Elementary Theory of Numbers ανά χείρας. Πέτυχα και δυο βιβλία για την Catastrophe theory. Δεν τα αγόρασα όμως γιατί θα ήταν πια υπερβολή*.

Ηρεμία mode ON. Μπορούσα να γυρίσω σπίτι χωρίς να κουβαλάω τα νεύρα της δουλειάς.


[*] – Μπορούμε να καταργήσουμε τον ύπνο χωρίς να χάσουμε τις ευεργετικές του ιδιότητες;

The 5 minute effect

– Έλα μωρέ! Αυτό είναι 5 λεπτά για εσένα

Λάθος! Πέντε λεπτά είναι για εσάς που με ρωτάτε. Για εμένα είναι όλος εκείνος ο χρόνος που χρειάστηκε να ασχοληθώ, να διαβάσω και να πειραματιστώ μέχρι να ξέρω να απαντήσω σε πέντε λεπτά. Και όλος εκείνος ο χρόνος που θα χρειαστώ για να συγκεντρωθώ ξανά στη δουλειά μου.

Καιρός να κινητοποιηθούμε στην πράξη…

Από το ΙΝΒΟΧ μου, φρέσκο-φρέσκο:

Οργανώνουμε μαζί με ορισμένους ακόμα συναδέλφους μια πρωτοβουλία προκειμένου να προχωρήσουμε σε μια πρακτική αντιμετώπιση του προβλήματος της ειδικής προσαύξησης του ΤΣΜΕΔΕ.

Προς ενημέρωση συναδέλφων Μηχανικών. Ελπίζω αυτή η κινητοποίηση να είναι πιο πετυχημένη από το “Κίνημα ΤΣΜΕΔΕ”.

Update: Επίσης ενδιαφέρον blog για τα ίδια θέματα: http://reengineering.wordpress.com/

#include <std/disclaimer.h>

Guest Post: A blind call

Όσοι είναι πρώτοι στον τηλεφωνικό κατάλογο του κινητού φίλων και γνωστών τους έχουν υποφέρει από κλήσεις ή μηνύματα τις πιο άσχετες ώρες της μέρας (ή καλύτερα της νύχτας). Ο Giorgos σχολιάζει:

“Προχθές στις Βρυξέλλες είδα την τέλεια λύση για όλες αυτές τις περιπτώσεις λάθος κλίσεων στον πρώτο αριθμό του καταλόγου:

http://www.ablindcall.be/

Από τα λίγα γαλλικά και φλαμανδικά μου καταλαβαίνω ότι είναι το εξής:
Βάζεις στον κατάλογο το ονομα “A Blind Call” και φυσικά βγαίνει πρώτο στον κατάλογο (ακόμα και πριν το “adamo”). Το συνδέεις με αριθμό φιλανθρωπικής οργάνωσης για τυφλούς και κάθε φορά που κάνεις λάθος στις 6:37 ένα ποσό πάει αυτόματα στο λογαριασμό της οργάνωσης. Αν ξέρετε καλύτερα γαλλικά πείτε μου αν μετά τερματίζει και την κλίση για να μην έχει επιπλέον χρέωση.

BTW, μιλάμε για σοβαρή προσπάθεια, ήταν αναρτημένο ΠΑΝΤΟΥ στα δημόσια μέρη. Καμμια πρωτοβουλία να το κάνουμε και εδώ;”

Πράγματι, το babelfish μεταφράζοντας από τα Γαλλικά δίνει:

Help the blind men without you to give an account of it.

The keyboard of your GSM is not locked and you call quelqu’one without wanting it. This situation inevitably already had to arrive to you. Pour L’money of these lost calls to the League Braille. Record our special number in your GSM.

The principle is simple.

Encodez “A blind call” in the repertory of your GSM.
(contact = A blind call; number = 070 22 22 30)

If you again forget to lock the keyboard of your GSM, it will be the first number with being made up.

You will not thus disturb any more Alain or Alexia, but your accidental – call, thank you D’advances! – will be made with the profit blind people and malvoyantes *.

You can obviously always give a phone call to us voluntarily.

Μακάρι να το δούμε και εδώ.

scientific journalism

Τις τελευταίες μέρες, λόγω της επέμβασης στο Χριστόδουλο, οι δημοσιογράφοι έχουν πάρει νέες* ειδικότητες: Έχουν εξελιχθεί σε παθολόγους, ηπατολόγους, ογκολόγους, ειδικούς μεταμοσχεύσεων…

Γιατί λοιπόν να απορούμε όταν εκφράζουν άποψη για τα Nobel Φυσικής; Φυσικά και ξέρουν καλύτερα την Φυσική του iPod!


[*] – Για παλαιότερες δημοσιογραφικές ειδικότητες δείτε εδώ.

degraded performance

Ένα σχόλιο του Βαγγέλη με ώθησε να γράψω δύο ακόμα αξιώματα:

Ποτέ μα ποτέ δεν εργαζόμαστε στο 100% της δυνατότητάς μας χειρισμού αιτημάτων.

Κάτι τέτοιο δεν μας δίνει περιθώρια. Όλοι έχουν καλές και κακές μέρες στη δουλειά. Λιγότερη ή περισσότερη δουλειά. Ανάγκη χρόνου για μελέτη. Pet projects. Επίσης, πάντα θα υπάρξει μία μέρα στην οποία θα πρέπει να αντιμετωπιστεί κάτι έκτακτο. Το τελευταίο πράγμα που χρειάζεται κανείς είναι εκείνη τη στιγμή να έχει χρήστες από πάνω του να ρωτάνε: “Επειδή βιάζομαι, σε πόση ώρα θα είναι έτοιμο;”

Για αυτό:

Ποτέ δεν εξυπηρετούμε ένα αίτημα πριν περάσει ένα τέταρτο (15min).

  • 15 λεπτά είναι ικανό χρονικό διάστημα για να επιλυθεί ένα μικροπρόβλημα από το χρήστη (με εξαιρετικά υψηλές πιθανότητες να μη μας ξαναενοχλήσει για αυτό, εάν επανεμφανιστεί).
  • Είναι επίσης αρκετό διάστημα για να μην υποχρεωθούμε σε context switching χωρίς τελικά να υπάρχει λόγος. Αυτός ο χρόνος δεν αναπληρώνεται.
  • Δίνει επίσης το χρόνο να ηρεμήσουμε από το έλα μωρέ, για ‘σένα είναι 5 λεπτάκια effect.

Μετά τα 15 λεπτά ρωτάμε τον χρήστη εάν συνεχίζει να υπάρχει το πρόβλημα. Εάν ναι, αναλαμβάνουμε δράση. Προσοχή! Εάν απαντήσει: “Αυτό το έλυσα, αλλά τώρα έχω ένα άλλο πρόβλημα και δεν μπορώ να …”, απαντάμε “ναι θα το κοιτάξω” και τον ξαναβάζουμε σε 15λεπτη αναμονή.

Χρειάζεται μεγάλη προσοχή η απάντηση που θα δώσουμε όταν το πρόβλημα(;) του χρήστη λυθεί automagically (δηλ. χωρίς τη συνειδητή παρέμβαση του χρήστη ή τη δικιά μας): “Λύθηκε το πρόβλημα, ευχαριστώ”. Ποτέ μα ποτέ δεν αποδεχόμαστε την πατρότητα της λύσης, όσο κι αν είναι καλό για την εικόνα μας. Γιατί κάτι που δεν ξέρουμε πως λύθηκε θα επανεμφανιστεί. Και τότε ο χρήστης θα έρθει και θα πει: “Θυμάσαι που είχα το Χ πρόβλημα; Το ξαναέχω. Τι είχες κάνει τότε και λύθηκε;”. Έλα ντε.

Βασική σημείωση: Ο χρήστης αυτά τα θυμάται πάντα.

Είναι καλό να χαίρει ο system administrator εκτίμησης και wizard status από τους χρήστες του. Η εμπιστοσύνη των χρηστών είναι μία από τις ανταμοιβές της δουλειάς. Για να την κερδίσεις όμως δε χρειάζεται να κινείσαι σε warp 9. Οι χρήστες συμπεριφέρονται όπως τους μαθαίνεις και ελάχιστη κατανόηση δείχνουν όταν δεν υπάρχει ο συνήθης χρόνος απόκρισης.

Αυτό που χάνει κανείς επειδή δεν ανταποκρίνεται στο πρώτο τέταρτο, το κερδίζει κάνοντας μια βόλτα στα γραφεία των χρηστών του μία φορά τη μέρα και ρωτώντας τους εάν όλα πάνε καλά (κατά προτίμηση γύρω στις 12:15).