Using Prolog in Windows NT Network Configuration

(Αυτό είναι στο όρια της ψηφιακής αρχαιολογίας)

Μίλαγα χτες με ένα φίλο που προσπαθούσε να λύσει ένα πρόβλημα με Prolog και έψαξα κανά δίωρο για να βρω μια καλή υλοποίηση που να ταιριάζει στο πρόβλημά του. Στην πορεία θυμήθηκα πως χρόνια πριν, είχα διαβάσει για τη Small Prolog η οποία είχε χρησιμοποιηθεί στον Windows NT kernel. Θυμόμουν πως είχα ξανακάνει αυτή την “άσκηση”, αλλά δε θυμόμουν περισσότερα @(%#*&$%^!

Mε λίγη τύχη, λίγη ώρα και χάρη στο Web Archive: Using Prolog in Windows NT Network Configuration του David Hovel.

Update: Περισσότερα μπορεί να δει κανείς στο “Is Prolog really used in Windows NT?

Yes.

For more information, see

  1. Dennis Merritt, “Extending C with Prolog“, Dr Dobb’s Journal, August 1994, pages 78-82 and 102, 104.
  2. D. Hovel, “Small Prolog and Windows NT Networking“, Dr Dobb’s Journal, August 1994, page 80.

Α Commentary on the Sixth Edition UNIX Operating System

Πρωτοάκουσα για το Lions’ Book από το Μάνο 10 και βάλε χρόνια πριν. Παρόλο που δεν το έψαξα ποτέ φανατικά, δεν ήξερα και κανένα που να είχε φωτοτυπίες από το the most famous suppressed book in computer history. Είχε υποσχεθεί και ο Μάνος πως εάν βρει κάποιον στην Αμερική που να το έχει σε φωτοαντίγραφο, θα …φροντίσει. Δεν πειράζει όμως, γιατί ήδη από το 1994 είχε γίνει post στο alt.folklore.computers.

Το βιβλίο το κατεβάζετε από εδώ. Ο κώδικας της 6ης έκδοσης είναι διαθέσιμος χάρη στo The Unix Heritage Society.

Έχω ξεκινήσει το ξεφύλλισμα.

/* You are not expected to understand this. */

[via]

just write some code

Ο Peter Viscarola γράφει στο NT Insider τη στήλη “Peter Pontificates”. Στη στήλη αυτή και με τίτλο “Just Write Some Code” (NT Insider, Volume 14, Issue 1) παρέθεσε εξαιρετικά ενδιαφέρουσες απόψεις σχετικά με το driver software development. Ο Peter (που γνωρίζει και λίγα Ελληνικά!) είχε την ευγενή καλοσύνη να μου επιτρέψει να αποπειραθώ να το μεταφράσω και να το δημοσιεύσω εδώ:

—begin-Peter-here—

Λες και χρειάζεται να εκνευρίζομαι περισσότερο. Παρατηρώ μια ενοχλητική νέα τάση στη βιομηχανία: Πρέπει το software να έχει γραφτεί χτες. Σας ακούω ήδη να λέτε, “Μα που ζεις; Πάντα ήταν έτσι, πάντα υπήρχε το πρόβλημα time-to-market. Δεν πρόκειται για το ποιος κάνει τη δουλειά καλύτερα, αλλά για το ποιος την κάνει πρώτος. Μπλα, μπλα, μπλα.” Για ακούστε: Είμαι καιρό στο κουρμπέτι, OK; Βεβαίως και καταλαβαίνω πως το time-to-market είναι σημαντικό. Αλλά αυτό που βλέπω τελευταία είναι διαφορετικό. Είναι πολύ, μα πολύ, χειρότερο από ότι έχω δει στο παρελθόν. Είναι σαν οι άνθρωποι να θέλουν το software να υλοποιείται στιγμιαία από τις κακοδουλεμένες ιδέες και τα ακαθόριστα οράματά τους.

Ήξερα πως εάν κάποιος θέλει ένα πολύπλοκο software, ξεκινάει με ένα σύνολο απαιτήσεων. Μερικές φορές μάλλιστα σκέφτεται αυτές τις απαιτήσεις λίγο παραπάνω και τις γράφει κάπου – ας πούμε στο Word. Μετά ένας μηχανικός τις διαβάζει, μερικές φορές κάνει και λίγο παραπάνω ψάξιμο, και προτείνει ένα σχέδιο που θα ικανοποιεί (ή καλύτερα, θα ικανοποιεί στο περίπου) αυτές τις απαιτήσεις. Αυτοί οι δυο το συζητάνε για λίγο καιρό και είτε οι απαιτήσεις, είτε ο προτεινόμενος σχεδιασμός, ακόμα συχνότερα και τα δύο, αναθεωρείται και μετά οι άνθρωποι αρχίζουν και γράφουν το software.

Αυτή η διαδικασία μου φαίνεται λογική. Εσείς τι λέτε;

Εάν είστε ένας από τους πολλούς πιθανούς πελάτες που έχω μιλήσει τελευταία, η απάντηση στην παραπάνω ερώτηση είναι ένα μεγαλοπρεπές “ΟΧΙ”. Προφανώς τα βήματα του καθορισμού των απαιτήσεων και του σχεδιασμού υλοποίησης θεωρούνται πολυτέλειες και δεν έχουν χρόνο και χρήματα για χάσιμο σε τέτοιες λεπτομέρειες. Και έτσι προτείνουν, κατά τα λόγια ενός τέτοιου πελάτη, πως είναι καλύτερα να “just write some code” και να τελειώνουμε με το όλο πράμα. Αν κανείς από εσάς τους consultants εκεί έξω διαβάζει τη σκέψη και ταυτόχρονα γράφει και drivers για τα Windows, έχω κανά δυο πελάτες που ακόμα ψάχνουν για κάποιον να τους βοηθήσει. Στείλτε στον Dan ένα email. Είμαι σίγουρος πως θα σας φέρει σε επαφή.

Προφανώς, εάν ακολουθήσει κανείς το μονοπάτι του “just write some code” υπάρχουν αναρίθμητοι κίνδυνοι. Ο πιο φανερός είναι πως, εφόσον δεν ξεκινάμε με ένα σύνολο ξεκάθαρων απαιτήσεων τις οποίες αποτυπώνουμε σε ένα σχεδιασμό για να εξετάσει ο πελάτης, υπάρχει ο κίνδυνος να φτιάξουμε άλλα αντί άλλων. Ή χειρότερα, φτιάχνουμε περίπου αυτό που θέλει ο πελάτης, αλλά συμπεριλαμβάνουμε κάποιο side-effect ή περιορισμό που ο πελάτης δεν θέλει να υπάρχει (“Φυσικά και δεν τρέχει σε Win2K. Το θέλετε και σε Win2K;”). Δεν χρειάζεται να υπενθυμίσω πως ακόμα και ο καλύτερος δυνατός προγραμματισμός και απρόσκοπτη επικοινωνία δεν μπορούν να αποτρέψουν κάθε πρόβλημα. Όμως το να ξεκινάς με ένα σύνολο προσυμφωνημένων σημείων αυξάνει την πιθανότητα και τα δύο μέρη – ο πελάτης και ο developer – να έχουν αμοιβαία κατανόηση για τους σημαντικούς στόχους και τους περιορισμούς του project.

Αυτό που βρίσκω ακόμα περισσότερο τρομακτικό είναι πως όταν επισημαίνω σε πιθανούς πελάτες την αξία της ύπαρξης μιας φάσης απαιτήσεων και σχεδιασμού στο project, πάντα συμφωνούν πως είναι καλό, λογικό ακόμα και σημαντικής αξίας για το έργο. “Φυσικά και είναι λογικό. Σε καταλαβαίνω και συμφωνώ μαζί σου πλήρως,” λένε. Κι όμως μετά εξακολουθούν να μην είναι πρόθυμοι να επενδύσουν τον απαιτούμενο χρόνο για αυτά που χρειάζεται το project. “Είναι που σε αυτή την ειδική περίπτωση πιεζόμαστε από το χρόνο, γι αυτό αν μπορείτε just write some code, είμαστε σίγουροι πως θα είναι καλός και θα το εκτιμήσουμε, πραγματικά.”

Ααααργκ!!!!

Φυσικά εάν όντως “we just write some code” και παραδώσουμε ένα driver που δεν ικανοποιεί τις μη δηλωθείσες ανάγκες του πελάτη, οι οποίες είναι εντελώς προφανείς σε αυτόν αλλά όχι και σε εμάς, το αποτέλεσμα θα είναι ακόμα περισσότερη καθυστέρηση από το να είχαμε κάνει τη δουλειά στην αρχή ώστε να είχε σχεδιαστεί σωστά η εκτέλεση του έργου. Δεν έχω καταφέρει να πείσω αρκετούς πιθανούς πελάτες για την αναγκαιότητα να εκτελείται ένα έργο σωστά από την αρχή. Πάντοτε σκέφτονται πως το δικό τους project θα είναι διαφορετικό. Φυσικά – ο καθένας έχει δικαίωμα να ονειρεύεται.

Με απασχολεί πολύ αυτή η νέα τάση και αναρωτιέμαι εάν σχετίζεται και με άλλα θέματα της βιομηχανίας μας και ειδικότερα με:

Χαμηλές Προσδοκίες

Έχετε παρατηρήσει πως οι περισσότεροι drivers που βγαίνουν είναι για τα μπάζα; Φαίνεται πως ένας driver πρέπει να είναι “good enough” για βγει στην κυκλοφορία μαζί με το προϊόν. Και αφού είναι έτσι τα πράγματα, γιατί να σπαταλήσεις παραπάνω χρόνο για specifications, σχεδιασμό ή ακόμα και για δοκιμές; Just write some code και πακετάρισε. Έχω ξαναγράψει για αυτό, αλλά οι χρήστες φαίνεται πως πλέον είναι συνηθισμένοι σε προβλήματα διαχείρισης του συστήματος, προβλήματα εγκατάστασης στους drivers και σε τυχαία crash του λειτουργικού συστήματος. Ανάλογα δε με την πολιτική ή τη θρησκευτική τους τοποθέτηση, οι χρήστες κατηγορούν το spyware, τη Microsoft ή ακόμα και την Al Qaeda. Πιστεύω όμως πως τις πιο πολλές φορές το πρόβλημα είναι ένας driver που είναι για τα μπάζα.

Commodity Pricing

Είναι αξίωμα στις επιχειρήσεις πως εάν πουλάς ένα κοινό προϊόν, τα περιθώρια κέρδους είναι μικρά. Και τι άλλο εκτός από κοινό προϊόν μπορεί να είναι το computer hardware στις μέρες μας; Είδα τις προάλλες μια κάρτα Ethernet προς πώληση για λιγότερο από το κόστος ενός βερύκοκου (βασικά λιγότερο από το κόστος ενός βιολογικής καλλιέργειας, fair traded, που δεν έχει δοκιμαστεί ποτέ σε ζώα, βερύκοκου. Αλλά νομίζω καταλαβαίνετε τι θέλω να πω). Όταν φτιάχνεις τέτοια προϊόντα, πολύ λίγος χώρος υπάρχει στο budget (σε χρόνο ή χρήμα) για συζητήσεις για features και σχεδιασμό. Just write some code και κάνε το γαργαλημένο το πράμα να δουλεύει, ώστε να βγάλουμε τη συσκευή στην αγορά πρώτοι και να πουλήσουμε έξι δισεκατομμύρια κομμάτια περισσότερα από τους ανταγωνιστές μας. Αν ο driver είναι για τα μπάζα, δεν πειράζει, για τα μπάζα είναι και ο driver του ανταγωνιστή. Δεν χάνουν και κάτι οι πελάτες.

Vista

Μη ξεχάσουμε να συμπεριλάβουμε και αυτή την αιτία, σωστά; Βασικά κατηγορώ για οτιδήποτε μπορώ να σκεφτώ τα Vista, γιατί είναι εύκολο, είναι της μόδας και – ας το παραδεχτούμε – ποιος δεν αρέσκεται να “βαράει” την τελευταία έκδοση ενός λειτουργικού συστήματος; Το αμάξι μου δεν ξεκίναγε τις προάλλες και είπα στη γυναίκα μου πως φταίει που αναβαθμίσαμε τα συστήματα του σπιτιού μας σε Vista. Βεβαίως εάν τα είχαμε αναβαθμίσει σε Vista Ultimate αντί για Vista Ghetto (ή όπως αλλιώς λέγονται) το να κάνεις τη δουλειά σου θα ήταν ήδη πιο διασκεδαστικό. Αλλά ξεφεύγω. Με την πρόσφατη έκδοση των Windows Vista, υπάρχει τρομακτική πίεση στους OEMs / IHVs / ODMs / ISVs να βγάλουν καινούργιο software “έξω”. Σοβαρά έχω δει γνήσιο πανικό σε μερικούς πραγματικά νηφάλιους και ήρεμους τύπους. Ελπίζω τα Vista να είναι το πρόβλημα. Γιατί εάν είναι, μόλις τα πράγματα ησυχάσουν λίγο, θα μπορέσουμε να επιστρέψουμε σε μια πιο ορθολογική διαδικασία παραγωγής software.

Όποιος κι αν είναι ο λόγος, αυτή η νέα τάση να ξεπερνιούνται οι “ανάγκες” των μηχανικών και ο κόσμος να “just write some code” είναι φοβιστική. Είτε είστε consultant, είτε in-house developer, βλέπετε κι εσείς την ίδια τάση; Αν ναι, τι νομίζετε πως την προκαλεί στο χώρο σας; Όποια κι αν είναι η αιτία, ελπίζω να τελειώνει σύντομα.


Peter Pontificates είναι η τακτική στήλη του σύμβουλου και συνεργάτη της OSR, Peter Viscarola. Ο Peter δεν ενδιαφέρεται εάν συμφωνείτε ή διαφωνείτε μαζί του, αλλά έχετε τουλάχιστον τη δυνατότητα να δείτε τα σχόλιά σας στη στήλη “Letters” ενός επόμενου τεύχους. Στείλτε σχόλια, φωνές ή διαστροφές της αλήθειας στο: PeterPont@ όου ες αρ τελεία κομ.

—end-Peter-here—

Υ.Γ. (adamo): Εάν κάποιος έχει διαβάσει το πρωτότυπο αγγλικό κείμενο και διαφωνεί με κάτι στη μετάφραση, θα εκτιμούσα τα σχόλιά του ώστε το αποτέλεσμα να γίνει καλύτερο.

a laptop comes back from the dead

Κατά τη διάρκεια ενός format/reinstall του laptop μου, το DVD-ROM …αποσύρθηκε. Και τώρα τι βάζουμε; Οι επιλογές περιορίζονταν από το ότι η εγκατάσταση έπρεπε να είναι δυνατή από USB floppy (το Debian π.χ. δεν εγκαθίσταται από USB floppy).

Η πρώτη επιλογή μου ήταν να εγκαταστήσω FreeBSD. Είχα να χρησιμοποιήσω FreeBSD σαν desktop από τις εποχές του 3.x. Εγκαταστάθηκε μια χαρά (4 δισκέτες). Ένα make buildworld και 4 ώρες μετά η επιλογή αυτή εγκαταλείφθηκε (ποιο το νόημα και η χαρά του FreeBSD αν δεν μπορείς να κάνεις compile το σύμπαν σε ένα λογικό χρόνο;).

Μια δισκέτα και 40 λεπτά μετά είχα έτοιμο ένα σύστημα με OpenBSD. Ο default window manager είναι ο fvwm που δεν με ενοχλεί ιδιαίτερα (άλλωστε για χρόνια η μόνη παραχώρηση που είχα κάνει στον εαυτό μου ήταν να τρέχω τον ctwm αντί για τον twm). Αυτή τη στιγμή ένα df -h δίνει:

$ df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/wd0a     16.7G    901M   15.0G     6%    /

και έχω ένα πλήρες σύστημα που έχει ότι χρειάζομαι (servers, development tools, λοιπό software από τα ports) σε ένα μηχάνημα που είναι στα 700MHz και που πηγαίνει πιο γρήγορα από τα Windows ME που είχε (κάποτε) από τη μάνα του.

Η εγκατάσταση ήταν απλή, γρήγορη και εύκολη (για όποιον δεν τρομάζει από ένα μη γραφικό installer) αλλά το αποτέλεσμα δεν είναι για τον απλό χρήστη:

  • Έπρεπε να πειράξω το xorg.conf που παράγεται από το X -configure για να έχει τη σωστή ανάλυση. Τις συχνότητες τις βρήκα από το linux-laptop.net.
  • Έπρεπε να κάνω:
    # ln /etc/X11/xkb/symbols/el /etc/X11/xkb/symbols/gr
    # ln /etc/X11/xkb/symbols/pc/gr /etc/X11/xkb/symbols/pc/el
    

    και μετά να προσθέσω στο keyboard section του xorg.conf:

    Option "XkbLayout" "us,gr"
    Option "XkbOptions" "grp:ctrl_shift_toggle"
    

    για να μπορώ να έχω μετά Ελληνικό πληκτρολόγιο από τo ΧΚΒ.

  • και έπρεπε να βρω το .Xdefaults από το 1999 για να έχω το xterm που είχα συνηθίσει.

Με παλιομοδίτικο look, αλλά και μικρό footprint που δίνει άλλον αέρα σε ένα laptop του 2001, το (default) OpenBSD desktop δεν είναι για τον απλό χρήστη, αλλά περισσότερο για τον retro system administrator.

Να έπαιζε και το gnash λίγο καλύτερα…

Handy Vista tip

Ο τίτλος του άρθρου από το Knowledge Base της Microsoft είναι: Network connectivity may fail when you try to use Windows Vista behind a firewall device*.

Από την εξήγηση:

“When you try to use a Windows Vista-based computer behind a firewall device, network connectivity may fail. […] The firewall device has a problem with its implementation of the TCP Window Scale Option that is defined in Internet Engineering Task Force (IETF) Request For Comments (RFC) 1323.”

Το άρθρο στο Knowledge Base μιλάει για περιπτώσεις που το μηχάνημα του χρήστη είναι “πίσω” από firewall που δεν μπορεί να διαχειριστεί καλά το TCP Window scaling (π.χ. κάποιο ADSL modem). Το πρόβλημα όμως προκύπτει και όταν κάποιος server (www, mail κ.λπ.) βρίσκεται “πίσω” από κάποιο firewall που δεν τα πάει καλά με το TCP Window scaling. Βέβαια και σε αυτή την περίπτωση το σύστημα με τα Vista πάλι πίσω από το συγκεκριμένο firewall είναι. Είναι θέμα ορισμού του “πίσω”.
:)

Με λίγα λόγια: Start -> All Programs -> Accessories -> Command Prompt

netsh interface tcp set global autotuninglevel=disabled

Εάν δεν θέλετε να απενεργοποιήσετε εντελώς το TCP window scaling, μπορείτε να δώσετε εναλλακτικά την εντολή:

netsh interface tcp set global autotuninglevel=restricted

Οι δυνατές τιμές που μπορεί να πάρει η παράμετρος autotuninglevel είναι:

netsh interface set tcp global /?
:
       autotuninglevel - One of the following values:
                         disabled: Fix the receive window at its default
                             value.
                         highlyrestricted: Allow the receive window to
                             grow beyond its default value, but do so
                             very conservatively.
                         restricted: Allow the receive window to grow
                             beyond its default value, but limit such
                             growth in some scenarios.
                         normal: Allow the receive window to grow to
                             accomodate almost all scenarios.
                         experimental: Allow the receive window to grow
                             to accomodate extreme scenarios.
                             WARNING: This can dramatically degrade
                             performance in common scenarios and should
                             only be used for research purposes.
:

Να ξέραμε και ποια είναι τα “some senarios” τα οποία εξαιρεί η επιλογή autotuning=restricted

Δείτε και αυτό το post στο lifehacker.com.

Αντιμετώπιση του ίδιου προβλήματος σε συστήματα που τρέχουν Linux:
Στο Linux το workaround είναι πιο εύκολο: Στο /etc/sysctl.conf προσθέτετε τη γραμμή:

net.ipv4.tcp_rmem = 4096 87380 174760

και μετά τρέχετε ένα sysctl -p

Σε μερικά setup η παραπάνω γραμμή δεν φτάνει και στο /etc/sysctl.conf πρέπει να προστεθεί και η γραμμή:

net.ipv4.tcp_wmem = 4096 16384 131072

Υπάρχουν δε και εκείνες οι περιπτώσεις (π.χ. Dell server και κάρτα δικτύου που υποστηρίζεται από τον driver tg3) που χρειάζεται ακόμα μία προσθήκη (σύνολο τρεις):

net.ipv4.tcp_window_scaling = 0

Δηλαδή πλήρης απενεργοποίηση του TCP Window Scaling.


[*] – Article ID: 934430