Αποτελεσματική xρήση τεχνολογιών πληροφορικής στην έρευνα
Αναζήτηση στο διαδίκτυο
Οι κύριες πηγές αναζήτησης στο διαδίκτυο έχουν απλοποιηθεί:
Επιπρόσθετα υπάρχουν κλαδικές πηγές όπως:
Επεξεργασία κειμένου
Στόχοι:
- Επαγγελματική αίσθηση
- Καλαισθησία
- Συντηρησιμότητα
- Μεταφερσιμότητα (HTML, PDF, SGML)
Αντιπαράδειγμα:
Προσέγγιση
- Αποφεύγουμε προστακτικά συστήματα (Word) και εντολές (Enter, Format-Font)
- Ελαχιστοποιούμε τις γραμματοσειρές του κειμένου
- Αυτοματοποιούμε (πίνακα περιεχομένων, ευρετήριο, βιβλιογραφία)
Διαχείριση βιβλιογραφικών αναφορών
-
Για κάθε παραπομπή η βιβλιογραφική αναφορά συγκεντρώνουμε τα στοιχεία που
την προσδιορίζουν με ακρίβεια.
- Για το σκοπό αυτό χρησιμοποιούμε ένα κατάλληλο πρόγραμμα όπως
τα προγράμματα ανοικτού κώδικα
το BibTeX (τμήμα του LaTeX) ή
η γραφική διεπαφή JabRef (http://www.jabref.org/).
- Σε κάθε στοιχείο (άρθρο, βιβλίο, τεχνική αναφορά) που χρησιμοποιούμε
δίνουμε έναν μοναδικό κωδικό (π.χ. τα αρχικά του συγγραφέα και το έτος).
- Με βάση τον κωδικό αυτό:
- Καταχωρούμε τα βιβλιογραφικά δεδομένα.
- Φυλάμε αντίγραφο του στοιχείου σε ηλεκτρονική μορφή.
- Ταξινομούμε την αντίστοιχη εκτύπωση ή φωτοτυπία.
Πεδία βιβλιογραφικών αναφορών
Το πρόγραμμα BiBTeX υποστηρίζει τα παρακάτω πεδία.
Address | Publisher's address. For major ones just the city |
Annote | Annotation |
Author | First Last or Last, First. Multiple are separated by and |
Booktitle | Title properly capitalised |
Chapter | A chapter number |
Edition | Edition of the book, e.g. second |
Editor | First Last or Last, First. Multiple are separated by and |
HowPublished | If it was published in a strange way |
Institution | Institution that published it |
Journal | Journal name. Abreviations may exist ($TEXINPUTS/*.bst) |
Key | Used for alphabetizing and creating a label when no author |
Month | Month of publication, usual abbreviations |
Note | Additional information to help the reader |
Number | Number of a journal magazine to TR. |
Organization | Organization sponsoring the conference. |
Pages | Page numbers or range. |
Publisher | Publisher's name. |
School | Name of the school where the thesis was written. |
Series | The name of a series or set of books. |
Title | The work's title. |
Type | Type of a technical report e.g. Research Note |
Volume | The volume of a journal or multivolume book. |
Year | The year of publication. Numerals only." |
Μορφοποίηση βιβλιογραφικών αναφορών
Όταν έχουμε τις βιβλιογραφικές αναφορές μας σε ηλεκτρονική μορφή
μπορούμε:
- Να τις ξαναχρησιμοποιούμε εύκολα σε διαφορετικές εργασίες
- Να τις μορφοποιούμε αυτόματα ανάλογα με τις απαιτήσεις του κάθε συνεδρίου ή περιοδικού
- Ο Jean-Olivier Irisson διατηρεί μια βάση δεδομένων (http://jo.irisson.free.fr/bstdatabase/) με "συνταγές" μορφοποίησης για πάνω από 2000 περιοδικά.
Παράδειγμα μορφοποίησης
- [ASS85]
- Harold Abelson, Gerald Jay Sussman, and
Jullie Sussman.
Structure and Interpretation of Computer Programs.
MIT Press, Cambridge, 1985.
- [ATS04]
- Stephanos
Androutsellis-Theotokis and Diomidis Spinellis.
A
survey of peer-to-peer content distribution technologies.
ACM Computing Surveys, 36(4):335–371, December 2004.
(doi:10.1145/1041680.1041681 (http://dx.doi.org/10.1145/1041680.1041681))
Πηγές του διαδικτύου
Διαγράμματα
- Πρώτη επιλογή περιγραφικά και προγραμματιζόμενα εργαλεία
- Αν χρησιμοποιήσουμε Excel, Visio ή άλλο προστακτικό
εργαλείο κρατάμε το αρχείο που δημιούργησε το γράφημα και τοποθετούμε
στη διατριβή το γράφημα σε διανυσματική μορφή (π.χ. EPS, WMF)
(όχι χαρτογραφική (π.χ. BMP, JPG, GIF), όχι ως ενσωματωμένο έγγραφο).
Μερικά περιγραφικά προγραμματιζόμενα εργαλεία:
- D3
- ggplot
- GNUPlot
- dot
- GMT
- UMLGraph
Αν θέλουμε να χρησιμοποιήσουμε εργαλείο με γραφική διεπαφή,
προτιμούμε διανυσματικά εργαλεία
(Dia (http://www.gnome.org/projects/dia/),
Inkscape (http://www.inkscape.org/)
Corel Draw, Illustrator) έναντι
των χαρτογραφικών (PaintShop, Photoshop, ...).
Δύο εργαλεία με γραφική διπεαφή για σχεδιασμό διαγραμμάτων UML
είναι τα UMLet (http://qse.ifs.tuwien.ac.at/~auer/umlet/) και το
Violet (http://horstmann.com/violet).
Παράδειγμα: γραφική παράσταση με το GNU Plot
# SA performance graphs
#
# $Id: perf.gpl 1.1 1999/02/21 15:51:36 dds Exp dds $
#
set terminal gif
set ylabel 'Evaluated configurations'
set xlabel 'Buffer space'
set logscale y
# 1:Stations 2:Capacity 3:Time 4:Tries 5:SA-Throughput 6:Exact-throughput \
# 7:Decomposition-throughput 8:Full-count 9:Reduced-count 10:Hours 11:Minutes \
# 12:Seconds
set title '9 stations; 1-20 buffers'
set key 17,200
set output 'perf9.gif'
plot [0:21] '9.log' using 2:8 title 'S(CE, Deco)' with linespoints, \
'9.log' using 2:9 title 'S(RE, Deco)' with linespoints, \
'9.log' using 2:4 title 'S(SA, Deco)' with linespoints, \
'ga-9.log' using 2:4 title 'S(GA, Deco)' with linespoints
Παράδειγμα: διάγραμμα με το Graphviz
# Data flow diagram
digraph G {
nodesep=.1;
ranksep=.3;
node [height=0.3,fontname="Helvetica",fontsize=10];
edge [fontname="Helvetica",fontsize=10];
prox [label = "Proximity calculation"];
map [label = "Map generation"];
web [label = "Web generation"];
node [shape=octagon, style=filled, fillcolor=".64 .54 .99"];
Camera;
GPS;
node [shape=box, style=filled, fillcolor=".13 .9 1"];
Camera -> web [label = "pictures"];
GPS -> prox [label = "track log"];
Gazetteer -> prox [label = "feature coordinates"];
prox -> map [label="annotated track"];
Topography -> map;
Coastlines -> map;
map -> web [label = "map diagrams"];
web -> "Geoweb";
}
Παράδειγμα: χάρτες με το GMT
Διαχείριση αλλαγών
Όλες τις εξελίξεις της εργασίας μας καθώς και τις αλλαγές τις οποίες
κάνουμε καθημερινά, καλό είναι να τις φυλάμε οργανωμένα
σε μια βάση δεδομένων
με τα παρακάτω στοιχεία για κάθε τμήμα και αλλαγή:
- Όνομα του στοιχείου (π.χ. survey.tex)
- Περιεχόμενα του στοιχείου (π.χ. κείμενο)
- Τρέχουσα έκδοση
- Ημερομηνία και ώρα της αλλαγής
- Εκδόσεις της εργασίας μας που συμμετέχει το στοιχείο αυτό
- Στοιχεία του προσώπου που έκανε την αλλαγή
- Σχόλια για την αλλαγή
- Διαφορές από την προηγούμενη έκδοση
Με τον τρόπο αυτό έχουμε μια πλήρη ιστορία της εργασίας μας και
μπορούμε:
- να αναιρέσουμε εύκολα αλλαγές που τελικά δεν έπρεπε να γίνουν
- να ανιχνεύσουμε πότε έγινε μια συγκεκριμένη αλλαγή και γιατί
- να διαβάσουμε και να επιθεωρήσουμε τις αλλαγές ανάμεσα σε δύο
εκδόσεις
- να κρατήσουμε την τρέχουσα κατάσταση της εργασίας μας καθαρή από
παλιά στοιχεία τα οποία φυλάμε μήπως χρειαστούν ξανά στο μέλλον
- να κάνουμε εκτεταμένες αλλαγές με θάρρος και αυτοπεποίθηση
Κάτω από έλεγχο σχηματισμών θέτουμε:
- Το κείμενα της εργασίας μας
- Διαγράμματα
- Δεδομένα
- Κώδικα
Περίληψη αλλαγών σε κεφάλαιο βιβλίου.
Καλύπτουν περίοδο δύο ετών.
----------------------------
revision 1.33 locked by: dds;
date: 2002/11/02 18:26:52; author: dds; state: Exp; lines: +107 -67
Changes in response to the comments by Scott Meyers.
----------------------------
revision 1.32
date: 2002/08/27 11:23:42; author: dds; state: Exp; lines: +6 -6
Correct references to CD-ROM files.
----------------------------
revision 1.31
date: 2002/08/26 12:21:16; author: dds; state: Exp; lines: +3 -3
Groff is no longer part of the CD-ROM distribution.
----------------------------
revision 1.30
date: 2002/08/11 17:12:53; author: dds; state: Exp; lines: +5 -5
Consistency fixes
----------------------------
revision 1.29
date: 2002/08/10 18:00:43; author: dds; state: Exp; lines: +12 -10
Second pass of index correction
----------------------------
revision 1.28
date: 2002/08/10 09:22:22; author: dds; state: Exp; lines: +81 -60
Typed-in corrected index entries
----------------------------
revision 1.27
date: 2002/08/08 14:09:55; author: dds; state: Exp; lines: +9 -10
Fixed maxims
----------------------------
revision 1.26
date: 2002/08/07 18:26:37; author: dds; state: Exp; lines: +2 -23
No blank line after end{codelist}
----------------------------
revision 1.25
date: 2002/08/07 15:33:35; author: dds; state: Exp; lines: +8 -5
Reference documentaiton generators.
----------------------------
revision 1.24
date: 2002/08/07 13:38:17; author: dds; state: Exp; lines: +24 -9
Noexpand should not be used inside pmaxim
----------------------------
revision 1.23
date: 2002/08/07 11:10:38; author: dds; state: Exp; lines: +18 -2
Add index entries for all sections and chapters.
----------------------------
revision 1.22
date: 2002/08/05 05:37:37; author: dds; state: Exp; lines: +8 -8
Updated book references to newer editions.
----------------------------
revision 1.21
date: 2002/08/04 16:47:57; author: dds; state: Exp; lines: +3 -2
Added label.
----------------------------
revision 1.20
date: 2002/08/03 15:17:39; author: dds; state: Exp; lines: +3 -4
Use urlcite instead of dircite.
----------------------------
revision 1.19
date: 2002/08/03 15:10:27; author: dds; state: Exp; lines: +5 -5
No spaces around em dash
----------------------------
revision 1.18
date: 2002/08/03 14:35:59; author: dds; state: Exp; lines: +65 -5
Added information on cdecl and signature survey.
----------------------------
revision 1.17
date: 2002/08/01 14:22:42; author: dds; state: Exp; lines: +3 -4
Maxims are split by chapter title
----------------------------
revision 1.16
date: 2002/07/29 16:39:38; author: dds; state: Exp; lines: +67 -30
Incorporated comments from the Dave Thomas review.
----------------------------
revision 1.15
date: 2002/07/28 09:12:02; author: dds; state: Exp; lines: +7 -7
Form-comments from Guy Steele.
----------------------------
revision 1.14
date: 2002/07/27 14:25:30; author: dds; state: Exp; lines: +33 -2
Run fixcodelist.pl to add a new paragraph before and after code lists.
----------------------------
revision 1.13
date: 2002/07/06 08:13:31; author: dds; state: Exp; lines: +41 -41
Convert to American spelling
----------------------------
revision 1.12
date: 2002/05/17 14:40:41; author: dds; state: Exp; lines: +19 -18
Version for AW review.
----------------------------
revision 1.11
date: 2002/04/09 21:11:09; author: dds; state: Exp; lines: +7 -7
Homogenised punctuation to precede footnotes.
Introduced \filecite and \dircite where needed.
subsections are numebred.
----------------------------
revision 1.10
date: 2002/04/09 13:53:39; author: dds; state: Exp; lines: +111 -62
Before moving footnote symbols AFTER the punctuation symbols.
----------------------------
revision 1.9
date: 2001/08/26 11:23:30; author: dds; state: Exp; lines: +3 -3
Fixed bib entry.
----------------------------
revision 1.8
date: 2001/08/26 11:21:29; author: dds; state: Exp; lines: +53 -53
Spell check.
----------------------------
revision 1.7
date: 2001/08/26 10:56:44; author: dds; state: Exp; lines: +21 -22
Fixes after Eliza comments.
----------------------------
revision 1.6
date: 2001/07/27 16:56:12; author: dds; state: Exp; lines: +72 -17
Added references to code browsing and indexing tools.
----------------------------
revision 1.5
date: 2001/07/10 12:17:33; author: dds; state: Exp; lines: +31 -24
Added RCS id
----------------------------
revision 1.4
date: 2001/06/17 18:59:11; author: dds; state: Exp; lines: +234 -137
After printing and corrections.
----------------------------
revision 1.3
date: 2001/04/17 14:00:27; author: dds; state: Exp; lines: +857 -79
First complete version.
----------------------------
revision 1.2
date: 2001/02/03 12:03:46; author: dds; state: Exp; lines: +376 -30
Grep-based tools
----------------------------
revision 1.1
date: 2000/12/31 18:27:33; author: dds; state: Exp;
Initial revision
=============================================================================
Το παρακάτω παράδειγμα είναι απόσπασμα των αλλαγών που έγιναν
ανάμεσα στην έκδοση 1.12 και 1.13 (προσαρμογή στην αμερικανική
ορθογραφία):
12c12
< Often you locate particular program elements by utilising the programming
---
> Often you locate particular program elements by utilizing the programming
483c483
< first one as is the default behaviour.
---
> first one as is the default behavior.
802c802
< Some output formats are terse and are optimised for use by other
---
> Some output formats are terse and are optimized for use by other
1513c1513
< Use highlighters, coloured pens, post-it notes, and anything else
---
> Use highlighters, colored pens, post-it notes, and anything else
1626c1626
< These are available under all flavours of Unix.
---
> These are available under all flavors of Unix.
Τα εργαλεία ελέγχου σχηματισμών επιτρέπουν την αυτοματοποίηση
πολλών από τις διεργασίες που έχουμε περιγράψει.
Το πιο διαδεδομένο εργαλείο είναι το Git και παρέχει εντολές
όπως οι παρακάτω.
Start a working area |
clone | Clone a repository into a new directory |
init | Create an empty Git repository or reinitialize an existing one |
Work on the current change |
add | Add file contents to the index |
mv | Move or rename a file, a directory, or a symlink |
rm | Remove files from the working tree and from the index |
Examine the history and state |
grep | Print lines matching a pattern |
log | Show commit logs |
show | Show various types of objects |
status | Show the working tree status |
Grow, mark and tweak your common history |
branch | List, create, or delete branches |
checkout | Switch branches or restore working tree files |
commit | Record changes to the repository |
diff | Show changes between commits, commit and working tree, etc |
merge | Join two or more development histories together |
tag | Create, list, delete or verify a tag object signed with GPG |
Collaborate |
fetch | Download objects and refs from another repository |
pull | Fetch from and integrate with another repository or a local branch |
push | Update remote refs along with associated objects |
Εργασία με το διορθωτή
Ο
διορθωτής (editor) χρησιμοποιείται για την επεξεργασία
όλων των αρχείων κειμένου.
Ένας καλός διορθωτής πρέπει να υποστηρίζει τις παρακάτω δυνατότητες:
- Εύρεση και αλλαγή με κανονικές εκφράσεις (regular expressions)
- Αυτόματη στοίχιση (indentation)
- Ταίριαγμα παρενθέσεων, αγκυλών, κ.λπ.
- Χρωματισμός σύμφωνα με τη σύνταξη της γλώσσας ή του κειμένου
- Αναίρεση πολλαπλών επιπέδων,
- Σύνδεση με πρόγραμμα βοήθειας
- Σύνδεση με περιβάλλον στοιχειοθεσίας ή μεταγλώττισης
- Ταυτόχρονη διόρθωση σε πολλαπλά παράθυρα και αρχεία
- Ιεραρχική απόκρυψη περιοχών
- Αναγνώριση της σύνταξης της γλώσσας και αυτόματος σχηματισμός του προγράμματος
- Σελιδοδείκτες
- Συμπλήρωση ή επιλογή όρων
Το περιβάλλον του διορθωτή vim
Αυτόματος χρωματισμός βιβλιογραφικών αναφορών
Αποθήκευση και διαχείριση δεδομένων
Τα δεδομένα μας αποτελούν συχνά τη βάση της έρευνάς μας.
Ο τρόπος που τα αποθηκεύμουμε και τα επεξεργαζόμαστε
πρέπει να ταιρίαζει στη φύση τους.
- Απλά αριθμητικά δεδομένα μπορούν να αποθηκευτούν σε
φύλλα εργασίας του Excel.
Από εκεί μπορούμε να δημιουργήσουμε απλά διαγράμματα ή
να τα επεξεργαστούμε και με στατιστικά προγράμματα όπως το
σύστημα R (http://www.r-project.org/) ή τη
γλώσσα Python, σε συνδυασμό με το περιβάλλον
Jypyter (https://jupyter.org/).
- Δεδομένα με σύνθετες σχέσεις πρέπει να φυλάσσονται σε μια βάση
δεδομένων.
Αν ο όγκος τους δεν είναι πολύ μεγάλος (π.χ. μέχρι 5000 εγγραφές)
η SQLite ή Access είναι μια καλή επιλογή.
Για μεγαλύτερο όγκο ίσως να πρέπει να εξετάσουμε τη χρήση μεγαλύτερων
συστημάτων όπως Oracle, SQL Server, mySQL, ή Postgres.
Η επεξεργασία τους γίνεται με τη χρήση της γλώσσας SQL.
- Απλά δεδομένα κειμένου είναι προσφορότερο να φυλάσσονται σε αρχεία
κειμένου με την κατάλληλη γραμμογράφηση (π.χ. ετικέτες).
Από εκεί μπορούμε να τα επεξεργαστούμε με εργαλεία του Unix ή
με ολοκληρωμένες γλώσσες όπως η Perl.
Μερικά χρήσιμα εργαλεία του Unix τα οποία μπορούν να συνδυαστούν
μεταξύ τους με τη χρήση σωληνώσεων (pipes) είναι τα παρακάτω:
egrep | Εύρεση κανονικής έκφρασης |
tr | Μετάφραση χαρακτήρων |
fmt | Συμπλήρωση λέξεων σε γραμμές |
wc | Μέτρηση λέξεων, γραμμάτων, γραμμών |
rev | Αντιστροφή των περιεχομένων κάθε γραμμής |
diff | Εμφάνιση της διαφοράς δύο αρχείων |
sort | Ταξινόμηση των δεδομένων ανά πεδίο |
join | Σχεσιακή σύνδεση δύο αρχείων |
cut | Επιλογή ορισμένων μόνο πεδίων από ένα αρχείο |
uniq | Εύρεση επαναλαμβανόμενων γραμμών σε ταξινομημένο αρχείο |
comm | Εύρεση κοινών και μή κοινών γραμμών σε δύο ταξινομημένα αρχεία |
awk | Γλώσσα επεξεργασίας αρχείων που αποτελούνται από διακριτά πεδία |
sed | Γλώσσα επεξεργασίας αρχείων με βάση κανονικές εκφράσεις |
Αν έχουμε εμπειρία και εργαλεία για χρήση της XML είναι και αυτή
μια πρόσφορη επιλογή.
Κανονικές εκφράσεις
-
Οι κανονικές εκφράσεις επιτρέπουν τον ορισμό σύνθετων συμβολοσειρών με
δηλωτικό τρόπο.
-
Με τον τρόπο αυτό μπορούμε να εκτελέσουμε σύνθετες αναζητήσεις σε αρχεία
κειμένου.
-
Υποστηρίζονται από εργαλεία όπως η εντολή grep,
γλώσσες όπως οι Perl, sed, awk
και προγράμματα όπως οι διορθωτές emacs και vi
και (σε περιορισμένη μορφή) το Microsoft Word.
Τα παρακάτω σύμβολα έχουν ειδικό νόημα:
- ^
- Αρχή της γραμμής
- $
- Τέλος της γραμμής
- .
- Οποιοδήποτε γράμμα
- [abc]
- Ένα από τα γράμματα a, b, ή c
- [a-z]
- Ένα από τα γράμματα a μέχρι z
- [^abc]
- Οποιοδήποτε γράμμα εκτός από τα a, b, και c.
- Έκφραση*
- Η έκφραση μηδέν ή περισσότερες φορές
- Έκφραση+
- Η έκφραση μία ή περισσότερες φορές (μόνο με την egrep)
- Έκφραση?
- Η έκφραση μία ή καμία φορά (μόνο με την egrep)
- Έκφραση1|Έκφραση1
- Η έκφραση1 ή η έκφραση2 (μόνο με την egrep)
- (Έκφραση)
- Το περιεχόμενο στην παρένθεση (μόνο με την egrep)
- \1 \2 ... \n
- To περιεχόμενο της νοστής παρένθεσης
Παράδειγμα:
$ grep 'abo' words
...
sabotage
seaboard
taboo
thereabouts
turnabout
vagabond
whereabout
...
$ grep '^abo' words
aboard
abode
abolish
abolition
abominable
abominate
aboriginal
$ grep bent words
absorbent
bent
benthic
debenture
incumbent
recumbent
$ grep 'bent$' words
absorbent
bent
incumbent
recumbent
$ grep -v '[AEIOUYaeiouy]' words
...
MD
MN
MPH
Mr
Mrs
Ms
m's
Mt
n
NBC
...
$ egrep '(.)(.)(.)\3\2\1' words
braggart
Brenner
collocation
diffident
dissident
glossolalia
grammar
grammarian
installation
staccato
suffuse
Αυτοματοποίηση
Αυτοματοποιόντας την εργασία μας επιτυγχάνουμε:
- Ελαχιστοποίηση των σφαλμάτων.
- Επαναληπτικότητα: όταν μεταβληθούν τα δεδομένα μας μπορούμε εύκολα
να δημιουργήσουμε ξανά τα αντίστοιχα αποτελέσματα.
- Ευελιξία: αν χρειαστεί να αλλάξουμε την μορφή των αποτελεσμάτων αρκεί να
διορθώσουμε τη διεργασία που τα παράγει.
- Τεκμηρίωση: οι κανόνες που σχηματίζουν την αυτοματοποιημένη διεργασία
αποτελούν και την τεκτμηρίωση της παραγωγής των αποτελεσμάτων.
- Πνευματική ανάταση: αντικαθιστούμε επαναλαμβανόμενες βαρετές
εργασίες με τη δημιουργική ασχολία της αυτοματοποίησης.
Μερικές προσεγγίσεις αυτοματοποίησης είναι οι παρακάτω:
- Μακροεντολές Word/Excel/Access
- Μακροεντολές του διορθωτή μας
- Εντολές SQL
- Visual Basic for Applications
- Οι γλώσσες υψηλού επιπέδου Python, R, Perl, Ruby
- Συνδυασμός εντολών του Unix
- Αρχεία δέσμης των Windows (.bat)
- Προγραμματισμός σε μια συμβατική γλώσσα όπως C, C++, Java
Παράδειγμα (μετατροπή του προχείρου σε αρχείο γραφικών):
winclip -p |
ppmquant 256 |
ppmtogif >%1
Συνεργασία με εργαλεία των Windows
Τα εργαλεία της σουίτας Outwit μας επιτρέπουν την πρόσβαση σε στοιχεία
των Windows μέσα από εντολές της κονσόλας.
Παρέχουν μεταξύ άλλων τις παρακάτω δυνατότητες:
- Πρόσβαση στο πρόχειρο (winclip)
- Υποβολή ερωτημάτων σε βάσεις δεδομένων
- Πρόσβαση στις ιδιότητες των εγγράφων
-
Συνδυάζοντας τα παραπάνω εργαλεία με έτοιμα εργαλεία του
περιβάλλοντος Unix μπορούμε να αυτοματοποιήσουμε πολλές εργασίες.
Παράδειγμα
Μεταφορά δεδομένων από τα πακέτα εργασίας σε πίνακα παραδοτέων και σε
διάγραμμα GANTT.
Περιγραφή πακέτου εργασίας
Δημιουργία πίνακα παραδοτέων
Για να δημιουργήσουμε τον πίνακα των παραδοτέων αντιγράφουμε όλα τα
πακέτα εργασίας στο πρόχειρο και εξάγουμε τις γραμμές που περιγράφουν
παραδοτέα.
winclip -p |
awk "-F\t" '/^D[0-9]/ {
print $3 "\t" substr($1, 2, 1) \
"\t" $1 "\t" $2
}' |
winclip -c
Δημιουργία διαγράμματος GANTT
Για να δημιουργήσουμε το διάγραμμα GANTT αντιγράφουμε όλα τα
πακέτα εργασίας στο πρόχειρο και εξάγουμε τις γραμμές που περιγράφουν
τους χρόνους.
winclip -p | awk '
BEGIN {FS = "\t" }
/For WORK/ {split($0, a, "\t")}
/^WP title/ {WP = $2}
/^Start month/ {
print "WP" a[4] "\t" \
WP "\t" \
($4 - $2 + 1) * 31 "ed\t" \
"1/" ($2 - 1) % 12 + 1 "/" 2000 +
int(($2 - 1)/12)
}' |
winclip -c
Οι παραπάνω εντολές παράγουν τα δεδομένα στη μορφή
WP0 Project Management 744ed 1/1/2000
WP1 Requirements Analysis 124ed 1/1/2000
WP3 Metalevel Specification 279ed 1/4/2000
...
με την οποία μπορούν να επικοληθούν στο Microsoft Project.
Ανάπτυξη λογισμικού
- Χρησιμοποιούμε γλώσσα ανάλογη με το πρόβλημα:
- Python, R, Perl, Ruby, για πειραματισμό και επεξεργασία αρχείων
- JavaScript, Visual Basic, HTML/CSS, Tcl/Tk για γραφικές διεπαφές
- Java, C# για μεταφέρσιμα, κατανεμημένα ή ενσωματωμένα συστήματα
- Rust, Go, C, C++ για μεγάλο όγκο δεδομένων και ταχύτητα επεξεργασίας
- ML, Haskell για συναρτησιακό προγραμματισμό
- R, Matlab, Mathematica για σύνθετα αριθμητικά προβλήματα
- Prolog για έκφραση κανόνων
- Χρησιμοποιούμε έτοιμες βιβλιοθήκες και κώδικα
- PyPI, npm, Perl modules
- Java SDK
- Boost (C++)
- Εξωτερικά προγράμματα
- Υλοποιούμε πρώτα ένα αρχέτυπο (prototype) του συστήματος.
Πιθανότατα δε θα χρειαστεί ποτέ δεύτερη υλοποίηση.
- Η υλοποίηση σε μορφή αρχετύπου δεν είναι δικαιολογία για να μην είναι
ο κώδικας ευανάγνωστος και με σωστά σχόλια.
- Τοποθετούμε τον κώδικα που γράφουμε κάτω από σύστημα διαχείρισης αλλαγών.
Η προσωπική ιστοσελίδα
Πως είναι:
- Στα αγγλικά
- Σε απλή XHTML (όχι π.χ. Macromedia Flash, ή Microsoft Word)
- Προσβάσιμη από όλους τους φυλλομετρητές
Τι περιέχει:
- Στοιχεία επικοινωνίας
- Λεπτομέρειες για την έρευνα που κάνουμε
- Δημοσιεύσεις
- Λογισμικό και δεδομένα μας
- Δεσμούς
- Blog;
Τι δεν περιέχει:
- Αναλυτικό βιογραφικό (id theft)
- Προσωπικά στοιχεία (σε ξεχωριστή περιοχή)
Διαχείριση του συστήματος
Ο σταθμός εργασίας μας είναι τμήμα του ερευνητικού μας περιβάλλοντος.
Πρέπει λοιπόν να μπορούμε κάθε στιγμή να αναπαράξουμε το
περιβάλλον από το μηδέν.
Οι παρακάτω βέλτιστες πρακτικές βοηθούν σε αυτό.
- Αποφεύγουμε προεγκατεστημένα συστήματα
- Κρατάμε λεπτομερές αρχείο με όλες τις αλλαγές που έχουμε κάνει από
την εγκατάσταση
- Κρατάμε αντίγραφα του λειτουργικού συστήματος και όλων των εφαρμογών
που έχουμε εγκαταστήσει
- Εγκαθιστούμε λογισμικό με σύστημα εγκατάστασης, π.χ. apt-get, choco
- Διαμορφώνουμε το σύστημά μας δηλωτικά, π.χ. με Puppet, Ansible, Chef
- Διαχωρίζουμε αυστηρά τα δικά μας δεδομένα από τα αρχεία των εφαρμογών
- Αρχεία εργασίας (π.χ. αρχεία του Word, Excel)
- Παράμετροι των εφαρμογών (π.χ. διευθύνσεις, templates)
- Ιστορικά δεδομένα (π.χ. μηνύματα email και fax που έχουμε στείλει)
- Αποφεύγουμε την εγκατάσταση προγραμμάτων για τα οποία δεν έχουμε
νόμιμη άδεια και προτιμούμε ελεύθερα προγράμματα που διατίθονται με
πηγαίο κώδικα.
Ασφάλεια
- Τακτική ενημέρωση του λογισμικού με τις διορθώσεις του αντίστοιχου
κατασκευαστή.
- Λειτουργικό σύστημα
- Εφαρμογές
- Δεν εκτελούμε προγράμματα p2p στο μηχάνημα που
χρησιμοποιούμε για τη δουλειά μας.
Τα προγράμματα αυτά μπορεί να κατεβάσουν ή να γίνουν φορείς ιομορφικού
λογισμικού.
- Καθορισμός των παραμέτρων των προγραμμάτων για μεγιστοποίηση της
ασφάλειας χρήσης τους.
Ενδεικτικά:
- Μη ενεργοποίηση δικτυακών υπηρεσιών του λειτουργικού συστήματος
που δε χρειάζονται
- File sharing (CIFS (Windows), NFS (Unix))
- Remote access
- Web server
- Απενεργοποίηση macros στο Word, Excel
Αντίγραφα εφεδρείας
Αντίγραφα εφεδρείας χρειάζονται όταν:
- Διαγραφούν στοιχεία
- Χαλάσει το βασικό μέσο αποθήκευσης
- Χρειάζεται να ανατρέξουμε στο παρελθόν
Για βελτιστοποίηση της διαδικασίας,
διαχωρίζουμε τα παρακάτω αντίγραφα εφεδρείας
- Πλήρες αντίγραφο εφεδρείας (full backup) (επίπεδο 0)
- Επαυξητικό αντίγραφο εφεδρείας (incremental backup)
(μερικές φορές πολλαπλών επιπέδων)
Κάθε επίπεδο περιέχει τις αλλαγές από το προηγούμενο μικρότερο επίπεδο.
Πρόσθετα στοιχεία:
- Τα αντίγραφα εφεδρείας πρέπει να φυλάσσονται σε άλλο (ασφαλή) χώρο
- Περιοδικά δοκιμάζουμε την ανάκτηση αρχείων καθώς και την ανάκτηση
ολόκληρου δίσκου
- Ως αποθηκευτικό μέσο οι μεγάλοι οργανισμοί χρησιμοποιούν ταινίες.
Εμείς μπορούμε να χρησιμοποιούμε μνήμες USB.
Δεσμοί στο διαδίκτυο
Κατευθύνσεις για τη χρήση παραγωγικής τεχνητής νοημοσύνης
Η χρήση
παραγωγικής τεχνητής νοημοσύνης (generative AI)
(π.χ. ChatGP, Bard, Bing)
μπορεί να βοηθήσει στην εκπόνηση εκπαιδευτικών εργασιών αρκεί να συνεισφέρει
στους εκπαιδευτικούς στόχους της κάθε εργασίας και να
γίνεται με διαφάνεια και περίσκεψη.
Ακολουθούν μερικές καλές πρακτικές, για την περίπτωση που
δεν έχουν δοθεί διαφορετικές οδηγίες.
- Επιβεβαιώνουμε ότι τα στοιχεία της ΠΤΝ είναι ορθά, προσθέτοντας σχετικές παραπομπές σε δημοσιευμένη βιβλιογραφία (με DOI και δεσμό υπερκειμένου σ' αυτό για να είναι εύκολα επαληθεύσιμες).
- Προσθέτουμε παράρτημα που περιέχει αριθμημένα όλες τις προτροπές μας προς την εφαρμογή ΠΤΝ και τις απαντήσεις που έχουμε λάβει από αυτή για το κείμενο που έχουμε χρησιμοποιήσει.
- Προσθέτουμε υποσημειώσεις στα σημεία του κύριου κειμένου που χρησιμοποιούμε κείμενο ΠΤΝ προς την αντίστοιχη απάντηση στο σχετικό παράρτημα.
- Προσθέτουμε στην εισαγωγή μια ενότητα όπου περιγράφουμε ποσοτικά και ποιοτικά πώς χρησιμοποιήσαμε ΠΤΝ, τους κινδύνους που αυτό συνεπάγεται, καθώς και τα συγκεκριμένα μέτρα που λάβαμε για να αντισταθμίσουμε τους κινδύνους αυτούς.
Στην ενότητα αυτή περιλαμβάνουμε φράση όπου ξεκαθαρίζουμε ότι αναλαμβάνουμε
την πλήρη ευθύνη για όλο το κείμενο της εργασίας.
- Προσθέτουμε μια ενότητα στο τέλος της εργασίας όπου αναλύουμε τι αξία έχουμε προσθέσει εμείς σε σχέση με την εφαρμογή ΠΤΝ και σε ποια συγκεκριμένα σημεία χρειάστηκε η δική μας επέμβαση για να διορθώσουμε ή να κατευθύνουμε κατάλληλα την ΠΤΝ (με συγκεκριμένα παραδείγματα).
Για τη χρήση ΠΤΝ σε επιστημονικές εργασίες ακολουθούμε τις οδηγίες της
επιστημονικής ένωσης ή του εκδότη του περιοδικού ή του συνεδρίου
που σκοπεύουμε να υποβάλλουμε. Παραδείγματα:
Nature Machine Intelligence: Writing the rules in AI-assisted writing (https://doi.org/10.1038/s42256-023-00678-6),
ACM (https://www.acm.org/publications/policies/new-acm-policy-on-authorship),
IEEE (https://conferences.ieeeauthorcenter.ieee.org/author-ethics/guidelines-and-policies/submission-policies/),
ACL (https://2023.aclweb.org/blog/ACL-2023-policy/).
Βιβλιογραφία
- Writing the rules in AI-assisted
writing.
Nature Machine Intelligence, 5(5):469–469, may 2023.
(doi:10.1038/s42256-023-00678-6 (http://dx.doi.org/10.1038/s42256-023-00678-6))
- Alfred V. Aho, Brian W.
Kernighan, and Peter J. Weinberger.
Awk—a pattern scanning and processing language.
Software: Practice and Experience, 9(4):267–280, 1979.
- Mark Burgess.
Principles of Network and System Administration.
John Wiley and Sons, New York, 2001.
- Claire Kehrwald Cook.
Line by Line.
Houghton Mifflin, Boston, MA, 1986.
- Emden R. Gasner,
Eleftherios Koutsofios, Stephen C. North, and Kiem-Phong Vo.
A technique for drawing dricted graphs.
IEEE Transactions on Software Engineering, 19(3):124–230, May
1993.
- John Grossman, editor.
The Chicago Manual of Style.
The University of Chicago Press, Chicago and London, fourteenth edition,
1993.
- Andrew Hunt and David
Thomas.
The Pragmatic Programmer: From Journeyman to Master.
Addison-Wesley, Boston, MA, 2000.
- Aviel William Strunk Jr.
and E. B. White.
The Elements of Style.
Macmillan Publishing Co., New York, 1979.
- S. Katzoff.
Clarity
in technical reporting.
Technical Report NASA SP-7010, NASA, Washington, D.C., 1964.
Second edition. Available online
http://techreports.larc.nasa.gov/ltrs/PDF/NASA-64-sp7010.pdf.
- Brian W. Kernighan
and Rob Pike.
The UNIX Programming Environment.
Prentice-Hall, Englewood Cliffs, NJ, 1984.
- Brian W. Kernighan
and P. J. Plauger.
The Elements of Programming Style.
McGraw-Hill, New York, second edition, 1978.
- Brian W. Kernighan.
PIC—a language for typesetting graphics.
Software: Practice and Experience, 12:1–21, 1982.
- Leslie Lamport.
LATEX: A Document Preparation System.
Adisson-Wesley, Reading, MA, 1985.
- Steve Lawrence and
C. Lee Giles.
Searching
the World Wide Web.
Science, 280(5360):98–100, 1998.
- Steve Lawrence and
C. Lee Giles.
Searching
the web: General and scientific information access.
IEEE Communications, 37(1):116–122, 1999.
- Thomas A.
Limoncelli and Christine Hogan.
The Practice of System and Network Administration.
Addison-Wesley, 2001.
- Eric Steven Raymond.
The Art of Unix Programming.
Addison-Wesley, 2003.
- Charles H. Sides.
How to Write and Present Technical Information.
Cambridge University Press, Cambridge, 1991.
- Diomidis Spinellis.
Small
tools for automatic text generation.
;login:, 23(4):44–47, August 1998.
- Diomidis Spinellis.
Outwit:
Unix tool-based programming meets the Windows world.
In Christopher Small, editor, USENIX 2000 Technical Conference
Proceedings, pages 149–158, Berkeley, CA, June 2000. Usenix
Association.
- Diomidis Spinellis.
The
decay and failures of web references.
Communications of the ACM, 46(1):71–77, January 2003.
(doi:10.1145/602421.602422 (http://dx.doi.org/10.1145/602421.602422))
- Diomidis Spinellis.
On
the declarative specification of models.
IEEE Software, 20(2):94–96, March/April 2003.
- Diomidis Spinellis.
Organized
pruning of file sets.
;login:, 28(3):39–42, June 2003.
- Walter F. Tichy.
Design, implementation, and evaluation of a revision control system,.
In Proceedings of the 6th International Conference on Software
Engineering. IEEE, September 1982.
- Edward R. Tufte.
The Visual Display of Quantitative Information.
Graphics Press, Cheshire, CT, 1983.
- Larry Wall and
Randal L. Schwartz.
Programming Perl.
O'Reilly and Associates, Sebastopol, CA, 1990.
- P. Wessel and W. H. F.
Smith.
Free software helps map and display data.
EOS Transactions American Geophysical Union, 72(41):441, 445–446,
1991.
Χρήση του διαδικτύου για ερευνητές της πληροφορικής
Έντυπα περιοδικά και πρακτικά συνεδρίων
Στα παρακάτω δωρεάν μόνο η εύρεση άρθρων και ανάκτηση της περίληψης.
Για ανάκτηση των άρθρων σε πλήρες κείμενο πρέπει να είσαστε
εσείς συνδρομητές ή να υπάρχει συμφωνία με το Πανεπιστήμιο ή
με το Δίκτυο Ελληνικών Ακαδημαϊκών Βιβλιοθηκών.
Συλλογές άρθρων και τεχνικών αναφορών
Λογισμικό
'Αλλες πληροφορίες
Μηχανές αναζήτησης και κατάλογοι
Τέλος, μη πιστεύετε ό,τι διαβάζετε στο web
Άσκηση
- Επιλέξτε (αν δε χρησιμοποιείτε ήδη) ένα σύστημα διαχείρισης
βιβλιογραφικών αναφορών και εισάγετε σε αυτό
- 50 αναφορές από τη δική σας βιβλιογραφική έρευνα.
-
- 5 παραπομπές σε σχετικές με το θέμα σας εργασίες
συναδέλφων του τμήματος
- 5 παραπομπές στο διαδίκτυο.
- 20 παραπομπές σε εργασίες του David A. Patterson
(Department of Computer Science, University of California, Berkeley).
- Μορφοποιείστε τις παραπάνω 80 αναφορές.
- Σύμφωνα με το πρότυπο της American Psychological Association.
- Σύμφωνα με το πρότυπο του Institute of Electrical and Electronics Engineers.
- Να παραδώσετε μια αναφορά που να περιέχει:
- Περιγραφή των εργαλείων που χρησιμοποιήσατε και
της διαδικασίας (νόμιμης) απόκτησής τους.
- Περιγραφή της διαδικασίας που ακολουθήσατε για την
υλοποίηση της αναφοράς (αναζήτηση αναφορών, μορφοποίηση, κ.λπ.).
- Αναφορά στις πηγές των προτύπων που χρησιμοποιήσατε.
- Σχόλια για τα εργαλεία και τον τρόπο εργασίας σας.
- Τις βιβλιογραφικές αναφορές σας σύμφωνα με το πρότυπο της American Psychological Association.
- Τις βιβλιογραφικές αναφορές σας σύμφωνα με το πρότυπο του Institute of Electrical and Electronics Engineers.
- Η αναφορά μπορεί να παραδωθεί σε μένα σε μορφή PDF μέσω του email μου,
ή τυπωμένη στο γραφείο μου.
Πρότυπο γραφής κειμένων με έμφαση στη χρήση επεξεργαστή κειμένου
Γενικοί κανόνες
Σκοπός σας να είναι το κείμενο που γράφετε να
αποπνέει επαγγελματισμό, να είναι καλαίσθητο, εύκολο στη
συντήρηση, και μεταφέρσιμο σε άλλες μορφές (π.χ. HTML).
-
Τονίζετε λέξεις που έχουν ιδιαίτερο νόημα σε μια πρόταση
με τη χρήση πλαγίων χαρακτήρων.
Αν οι λέξεις αυτές προδίδουν νόημα σε μια ολόκληρη παράγραφο,
μπορείτε να τις τονίσετε και με έντονους χαρακτήρες.
Μη χρησιμοποιείτε ΚΕΦΑΛΑΙΑ και μην υπογραμμίζετε λέξεις.
-
Στοιχειοθετείτε παραδείγματα εντολών, αποτελέσματα που τυπώνονται
από τον υπολογιστή καθώς και κώδικα με γραμματοσειρά σταθερού πλάτους,
π.χ. Courier ή, καλύτερα, Consolas.
Εξαίρεση στον κανόνα αυτό είναι στοιχεία τα οποία είναι
στοιχειοθετημένα με καλύτερο τρόπο από κάποιο εργαλείο (π.χ. vgrind).
-
Χρησιμοποιείτε το πλήκτρο Enter μόνο για να δηλώσετε το τέλος μιας
παραγράφου.
Όλες οι άλλες χρήσεις του, όπως η προσθήκη κενών ανάμεσα
σε παραγράφους και η ρύθμιση του σημείου που χωρίζονται
οι σελίδες, αντιβαίνουν τον κανόνα 2.
Εντολές που μπορείτε να χρησιμοποιήσετε για να επιτύχετε
αντίστοιχο αποτέλεσμα είναι η
Home - Paragraph - Indents and Spacing - Spacing και η
Home - Paragraph - Text Flow.
-
Χρησιμοποιείτε το πλήκτρο του κενού (space) μόνο για να χωρίζετε
λέξεις και προτάσεις μεταξύ τους.
Όλες οι άλλες χρήσεις του, όπως η στοίχιση στηλών και η δημιουργία
ειδικής στοίχισης σε παραγράφους, αντιβαίνουν τον κανόνα 2.
Εντολές που μπορείτε να χρησιμοποιήσετε για να επιτύχετε αντίστοιχο
αποτέλεσμα είναι οι
Table, Home - Paragraph - Indents and Spacing - Indentation, και
Layout - Columns.
-
Αποφεύγετε τη χρήση πολλών θαυμαστικών ("Μην το ξεχάσετε!!!!") εκτός
αν δουλεύετε για τον Walt Disney.
Μην ακολουθείτε το θαυμαστικό ή άλλα σημεία στίξης από τελεία.
-
Πάντα να ελέγχετε την ορθογραφία του κειμένου τόσο με τον ορθογραφικό
διορθωτή του επεξεργαστή κειμένου όσο και με μια προσεκτική ανάγνωση της εκτύπωσης.
-
Όταν αντιγράφετε κείμενο από έγγραφα άγνωστης προέλευσης ή άλλων προγραμμάτων
να πραγματοποιείτε την επικόλληση (paste) με την εντολή Home - Paste - Paste Special
- Unformatted Text για να αποφύγετε την εισαγωγή στο κείμενό σας ασχέτων
εντολών στοιχειοθέτησης.
-
Σε κείμενα μεγαλύτερα από δέκα σελίδες να περιλαμβάνετε πίνακα περιεχομένων
με την εντολή References - Table of Contents.
-
Να αποφεύγετε την επικόλληση αντικειμένων (π.χ. Excel Worksheet) μέσα
στο κείμενό σας αν αυτό δεν είναι απολύτως απαραίτητο.
Με την εντολή Home - Paste - Paste Special μπορείτε να ελέγξετε τη μορφή της
επικόλλησης.
Με ακόμα μεγαλύτερη φειδώ να χρησιμοποιείτε τις επικολλήσεις συνδέσμων
(links) Home - Paste - Paste Special - Paste Link.
Οι πιθανότητες αυτοί να συνεχίσουν να δουλεύουν όταν το έγγραφο
μεταφερθεί σε άλλο υπολογιστή, ή όταν ο δικό σας υπολογιστής
αναβαθμιστεί είναι λίγες.
-
Μην προγραμματίζετε την εκτύπωση μεγάλων κειμένων υπερβολικά
κοντά σε ανελαστική προθεσμία παράδοσης τους.
Κατά τη διαδικασία της τελικής εκτύπωσης αναπόφευκτα θα προκύψουν
λόγοι που θα σας καθυστερήσουν.
Επικεφαλίδες
-
Εισάγετε τις επικεφαλίδες με τη χρήση στυλ (styles) του επεξεργαστή κειμένου
(Heading 1, Heading 2, κλπ.).
Συχνά στη μορφοποίηση της δομής του κειμένου βοηθά η
προβολή διάρθρωσης (outline view) με τη χρήση της εντολής View - Outline.
-
Μη βάζετε τελεία στο τέλος των επικεφαλίδων.
-
Στις ελληνικές επικεφαλίδες γράφετε με κεφαλαία μόνο το πρώτο γράμμα.
Βασική μορφή του εγγράφου
-
Στις αγγλικές επικεφαλίδες γράφετε με κεφαλαία το πρώτο γράμμα
της πρώτης λέξης, το πρώτο γράμμα μετά από διπλή τελεία,
και το πρώτο γράμμα όλων των άλλων λέξεων εκτός από άρθρα, συνδέσμους,
και προθέσεις.
The Format of the Document: An Example
-
Αποφεύγετε να γράφετε επικεφαλίδες με κεφαλαία γράμματα.
Είναι ακαλαίσθητες, διαβάζονται δύσκολα, και δημιουργούν
πρόβλημα στον πίνακα περιεχομένων.
-
Αριθμείτε τις επικεφαλίδες με την εντολή Home - Paragraph - Multilevel list.
Κουκίδες και αριθμοί
-
Πάντα να αριθμείτε ασύνδετες παραγράφους σε τεχνικά έγγραφα (προτάσεις,
προδιαγραφές, αναφορές, διαδικασίες).
Να χρησιμοποιείτε κουκκίδες (bullets) μόνο για άτυπες απαριθμήσεις σε
αφηγηματικό κείμενο.
-
Χρησιμοποιείτε τις εντολές του επεξεργαστή κειμένου για την εισαγωγή κουκκίδων και
αριθμών (από τη γραμμή εργαλείων).
Ποτέ μην εισάγετε κουκκίδες ή νούμερα με το χέρι.
-
Όπου είναι απαραίτητο χρησιμοποιείστε την αρίθμηση πολλαπλών επιπέδων
του επεξεργαστή κειμένου επιλέγοντας την περιοχή που θέλετε να απαριθμήσετε
και δίδοντας την εντολή Home - Paragraph - Multilevel list.
-
Απαριθμήσεις στοιχείων που δεν αποτελούν ολοκληρωμένες προτάσεις
πρέπει να ακολουθούν διπλή τελεία.
Να αρχίζετε κάθε γραμμή με πεζό γράμμα και να τελειώνετε κάθε γραμμή
εκτός από την τελευταία με κόμμα.
Τερματίζετε την τελευταία γραμμή με τελεία.
Η εφαρμογή περιλαμβάνει:
1. τη μονάδα εισαγωγής στοιχείων,
2. το σύστημα επεξεργασίας,
3. τις εκτυπωτικές λειτουργίες.
Σελιδοποίηση
-
Μην καθορίζετε την αρχή νέας σελίδας με
την εντολή Insert - Page Break.
Τις περισσότερες φορές οι εντολές
Format - Paragraph - Text Flow - Page Break Before ή
ο συνδυασμός
Home - Paragraph - Text Flow - Keep with Next και
Home - Paragraph - Text Flow - Keep Lines Together
εκφράζουν σωστότερα αυτό που θέλετε να επιτύχετε.
-
Να καθορίζετε ποιες γραμμές ενός πίνακα περιέχουν τις επικεφαλίδες
των στηλών (εντολή (Table) Layout - Repeat header rows έτσι
ώστε οι γραμμές αυτές να εμφανίζονται στην αρχή κάθε σελίδας
στην οποία συνεχίζεται ο πίνακας.
-
Τα περιθώρια για όλο το έγγραφο να τα ορίζετε με την εντολή
Layout - Page Setup και όχι αλλάζοντας τα περιθώρια των παραγράφων.
-
Προσπαθήτε να αποφεύγετε το χωρισμό πινάκων και μικρών παραγράφων ανάμεσα
σε σελίδες.
Στίξη και τυπογραφικά στοιχεία
-
Μετά οποιοδήποτε σημείο στίξης πρέπει πάντα να ακολουθεί κενό.
-
Στην τυπογραφία χρησιμοποιούνται διαφορετικά είδη από παύλες:
-
Το ενωτικό - που χρησιμοποιείται
σε λέξεις όπως Αγια-Σοφιά, X-ray.
Να το εισάγετε με το συνδυασμό CTRL _.
-
Το ενωτικό - που χρησιμοποιείται
για να χωρίσει λέξεις που δεν χωράν στο τέλος της γραμμής.
Σε περιπτώσεις που ο αυτόματος χωρισμός λέξεων
του επεξεργαστή κειμένου (Tools-Hyphenate) δε σας ικανοποιεί να το εισάγετε με το συνδυασμό
CTRL -.
-
Η μεσαία παύλα (en dash) που χρησιμοποιείται για να δηλώσει περιοχές αριθμών
π.χ. 12-14.
Να την εισάγετε με το συνδυασμό CTRL numeric -.
-
Η διπλή παύλα - em dash - χρησιμοποιείται σε παρενθετικές προτάσεις.
Να την εισάγετε με το συνδυασμό ALT CTRL numeric -.
-
Γράφετε τα εισαγωγικά σε ελληνικό κείμενο χρησιμοποιώντας τους ειδικούς
χαρακτήρες << και >>.
Επειδή η εισαγωγή τους με την εντολή Insert - Symbol
είναι δύσκολη μπορείτε να ορίσετε με την εντολή
(File - Options - Proofing - AutoCorrect options)
να εισάγονται αυτόματα όταν πληκτρολογείτε
>>.
-
Υπάρχουν τέσσερα είδη αγγλικών εισαγωγικών τα οποία πρέπει
να χρησιμοποιείτε αντί για τους χαρακτήρες " ,' , `:
-
διπλά εισαγωγικά αρχής: τα εισάγετε με το συνδυασμό CTRL ` ",
-
μονά εισαγωγικά αρχής: τα εισάγετε με το συνδυασμό CTRL ` ',
-
διπλά εισαγωγικά τέλους: τα εισάγετε με το συνδυασμό CTRL ' ",
-
μονά εισαγωγικά τέλους: τα εισάγετε με το συνδυασμό CTRL ' '.
-
'Αλλα σύμβολα τυπογραφικής ποιότητας που πρέπει
να χρησιμοποιείτε είναι τα εξής:
-
η έλλειψη (...): την εισάγετε με το συνδυασμό ALT CTRL .,
-
το σύμβολο copyright symbol (©): το εισάγετε με το συνδυασμό ALT CTRL C,
-
το σύμβολο registered trademark (®): το εισάγετε με το συνδυασμό ALT CTRL R,
-
το σύμβολο trademark (TM): το εισάγετε με το συνδυασμό ALT CTRL T.
-
Με την εντολή (File - Options - Proofing - AutoCorrect options)
μπορείτε να ρυθμίσετε
την αυτόματη εισαγωγή πολλών από τα παραπάνω.
Ελληνική γλώσσα
-
Να γράφετε το τελικό ν στα άρθρα τον, την, έναν, τις προσωπικές
αντωνυμίες αυτήν, την και στα άκλιτα δεν, μην μόνο όταν
η επόμενη λέξη αρχίζει με φωνήεν ή στιγμιαίο
ή διπλό σύμφωνο (κ, π, τ, μπ, γκ τσ, τζ, ξ, ψ).
τον εκτυπωτή
την κρυπτογραφική λειτουργία
δεν πρέπει
δε φαντάζεστε
-
Γράφετε την αναφορική αντωνυμία ό,τι με υποδιαστολή.
Γράφετε τον ειδικό σύνδεσμο ότι χωρίς υποδιαστολή.
Θα αφαιρεθεί ό,τι δεν είναι απαραίτητο.
Ο κατασκευαστής δήλωσε ότι το πρόγραμμα έχει ελεγχθεί.
-
Να χωρίζετε με κόμμα:
-
λέξεις ασύνδετες που ανήκουν στο ίδιο μέρος
του λόγου,
Περιλαμβάνονται οθόνες, εκτυπώσεις και πίνακες.
-
την κλητική,
Συγχωρέστε μας, κυρίες και κύριοι, για την ποιότητα της παρουσίασης.
-
προτάσεις
όμοιες ασύνδετες,
Θα αναλύσουμε τις απαιτήσεις, θα σχεδιάσουμε
τη δομή και θα υλοποιήσουμε τη λειτουργία του συστήματος.
-
δευτερεύουσες προτάσεις από τις κύριες.
Πρέπει να αποφεύγεται η λειτουργία χωρίς κλιματισμό,
διότι μπορεί να καταστραφεί το τροφοδοτικό.
-
Δε χωρίζονται με κόμμα οι ειδικές, οι πλάγιες ερωτηματικές και
οι διστακτικές προτάσεις.
Ο υπολογιστής που παραλάβαμε την Τρίτη.
Δεν εξετάσαμε αν θα απαιτηθεί επέκταση του συστήματος.
-
Αποφεύγετε να χρησιμοποιείτε αγγλικούς τεχνικούς όρους.
-
Την πρώτη φορά που αναφέρετε τεχνικούς όρους που δε χρησιμοποιούνται
συχνά στα ελληνικά να ακολουθείτε τον όρο με την αγγλική λέξη
σε παρένθεση.
Στο σύστημα περιλαμβάνεται και ο συμβολομεταφραστής (assembler).
-
Όταν χρησιμοποιείτε αρχικά που δεν είναι διαδεδομένα, στην
πρώτη χρήση τους να γράψετε ολόκληρες τις λέξεις
που τα απαρτίζουν ακολουθώντας τις από τα αρχικά
σε παρένθεση.
Με τη χρήση του Simple Network Management Protocol (SNMP) μπορούμε
να ελέγχουμε αυτόματα όλο το δίκτυο.
-
Στα ελληνικά να γράφετε τους επιθετικούς προσδιορισμούς πριν από το
ουσιαστικό και όχι - ακολουθώντας την αγγλική σύνταξη - ανάποδα
Το σύστημα προγραμματίζεται σε γλώσσα SQL.
Όχι: Το σύστημα προγραμματίζεται σε SQL γλώσσα.
-
Να ακολουθείτε τους κανόνες του μονοτονικού συστήματος:
-
Βάζετε τόνο σε όλες τις λέξεις που έχουν δύο ή περισσότερες συλλαβές, στο
διαζευκτικό σύνδεσμο ή και στα ερωτηματικά πού και πώς.
-
Μη βάζετε τόνο σε μονοσύλλαβες λέξεις καθώς και σε λέξεις που προφέρονται
ως μια συλλαβή (μια, για, πιο, ποιος, κλπ.)
-
Να σημειώνετε τον τόνο του εγκλιτικού που ακούγεται στη λήγουσα
των προπαροξύτονων λέξεων, π.χ. ο πρόεδρός μας.
-
Να σημειώνετε τον τόνο στα ερωτηματικά πού και πώς.
-
Γράφετε τη συντομογραφία των λέξεων και τα λοιπά ως κτλ..
Αγγλική γλώσσα
-
Να σχηματίζετε τον κτητικό ενικό αριθμό ουσιαστικών με την προσθήκη
's.
the processor's speed.
Burns's computer.
Εξαίρεση αποτελεί μόνο η κτητική αρχαίων κυρίων ονομάτων σε -es και -is.
Periklis' computer.
-
Να σχηματίζετε τον κτητικό πληθυντικό αριθμό ουσιαστικών με την προσθήκη
'.
the peoples' choice.
-
Να χωρίζετε με κόμμα:
- σειρά τριών ή παραπάνω όρων με έναν σύνδεσμο,
This includes source code, data sets, and documentation.
Input can be numbers, letters, or symbols.
- παρενθεντικές προτάσεις,
The data set, downloaded from the Internet, is now available.
- ανεξάρτητη φράση που αρχίζει με σύνδεσμο,
The object space is large, but fast processor should handle it.
- Να χωρίζετε ανεξάρτητες φράσεις που δεν ενώνονται με σύνδεσμο με άνω
τελεία και όχι με κόμμα.
We are able to convert the files; most of them were plain ASCII.
- Να συντάσσετε τις φράσεις με τη σειρά: αντικείμενο, ρήμα, υποκείμενο,
τρόπος, τόπος, χρόνος.
- Να χρησιμοποιείτε τη λέξη that για να εισάγετε
προτάσεις που είναι απαραίτητες και δεν μπορούν να αφαιρεθούν
(restrictive clauses):
"files that contain XML data have an additional type field."
Να χρησιμοποιείτε τη λέξη which για να εισάγετε
παρενθεντικές προτάσεις που μπορούν και να αφαιρεθούν
(non-restrictive clauses):
"the program, which is implemented in C++, converts input
from XML into the graphics map."
Θέματα ύφους
-
Σχεδιάστε τη δομή του εγγράφου σας πριν αρχίσετε να γράφετε.
Γράψτε στην προβολή διάρθρωσης του επεξεργαστή κειμένου τους τίτλους των ενοτήτων και των
υποενοτήτων.
-
Δομήστε το κείμενό σας γύρω από την παράγραφο.
Κάθε παράγραφος πρέπει να περιγράφει ένα μόνο θέμα.
-
Χρησιμοποιείτε ενεργητική φωνή, ειδικά στα αγγλικά.
Use the file foo.log to find more information on error causes.
Όχι:The file foo.log can be used to find more information on error causes.
- Να εκφράζετε παρόμοιες ιδέες με όμοιο τρόπο.
Για να εισάγετε έναν τύπο πληκτρολογήστε =.
Για να εισάγετε μια λέξη πληκτρολογήστε ένα κενό.
Όχι:Για να εισάγετε έναν τύπο πληκτρολογήστε =.
Μπορείτε να εισάγετε μια λέξη πληκτρολογώντας ένα κενό.
Αναφορές
-
Να αναφέρεστε σε εικόνες, πίνακες, ενότητες, σελίδες και αριθμημένες
παραγράφους
με τη χρήση πεδίων (fields) σε αντίστοιχους σελιδοδείκτες
(bookmarks).
Για να αναφέρετε λ.χ. στο σημείο αυτό την ενότητα 4 (Σελιδοποίηση)
ακολουθείτε την παρακάτω διαδικασία:
-
μαρκάρετε την επικεφαλίδα της ενότητας,
-
εισάγετε έναν σελιδοδείκτη Edit - Bookmark - Add με ένα κατανοητό
όνομα (π.χ. punct),
-
εισάγετε στο σημείο αναφοράς το πεδίο {REF punct \n} (με την
εντολή Insert - Field - Links and References - Ref) για
να έχετε τον αριθμό της ενότητας και το πεδίο {REF
punct} για να έχετε το όνομά της.
-
Τα πεδία και οι σελιδοδείκτες στον επεξεργαστή κειμένου μπορούν να αποσυγχρονιστούν
κατά τη διαδικασία αλλαγών στο κείμενο.
Πριν την τελευταία εκτύπωση ελέγξτε ότι τα πεδία που χρησιμοποιείτε
εμφανίζονται σωστά.
-
Στοιχεία που εμφανίζονται στο κείμενο πρέπει να τεκμηριώνονται από αντίστοιχες
βιβλιογραφικές αναφορές.
Ο κανόνας αυτός δεν ισχύει απαραίτητα για ανεπίσημα κείμενα.
-
Οι βιβλιογραφικές αναφορές πρέπει να είναι πρωτογενείς
(να αναφέρονται στην αρχική, κύρια ή βασική πηγή του συγκεκριμένου θέματος)
και κατά προτίμηση σε άρθρα περιοδικών, μονογραφίες ή δημοσιευμένα πρακτικά
συνεδρίων.
Οι παραπομπές σε βιβλία πρέπει να περιέχουν και τις αντίστοιχες
σελίδες.
Παραπομπές στο διαδίκτυο καλό είναι να αποφεύγονται όταν υπάρχουν
αντίστοιχες πηγές σε επίσημα αρχειοθετημένα κείμενα (π.χ. βιβλία και επιστημονικά περιοδικά).
-
Για βιβλιογραφικές αναφορές χρησιμοποιήστε ένα πρόγραμμα αυτόματης
διαχείρισης και παραγωγής τους όπως το BibTeX.
-
Παραπομπές σε ηλεκτρονικές πηγές δεδομένων γίνονται όμοια με τις
παραπομπές σε αντίστοιχες γραπτές πηγές με την προσθήκη στο τέλος
των παρακάτω στοιχείων:
- μέσο (λ.χ. Online για δεδομένα του διαδικτύου),
- προμηθευτής των δεδομένων λ.χ. IBM, Πανεπιστήμιο Αιγαίου,
- για δεδομένα του διαδικτύου το URL, για άλλα μέσα προσδιορισμό του
αρχείου,
- ημερομηνία πρόσβασης στα στοιχεία.
Παράδειγμα:
- Pritzker, Thomas J. An Early Fragment from Central Nepal. N.D.
Online.
Ingress Communications.
Available http://www.ingress.com/~astanart/pritzker/pritzker.html.
8 June 1995.
- Diomidis Spinellis. Greek character encoding for electronic mail messages.
Network Information Center, Request for Comments 1947, May 1996. RFC-1947.
Online.
Network Information Center.
Available http://ds.internic.net/rfc/rfc1947.txt (http://ds.internic.net/rfc/rfc1947.txt).
23 March 1998.
Βιβλιογραφία
-
Philipp Leitner.
"Some Frequent Writing Tips I Give Software Engineering Thesis Students".
Διαθέσιμο στη θέση
https://philippleitner.medium.com/some-frequent-writing-tips-i-give-software-engineering-thesis-students-da2acab30381 (https://philippleitner.medium.com/some-frequent-writing-tips-i-give-software-engineering-thesis-students-da2acab30381) (Τελευταία επίσκεψη: Ιούλιος 2021.)
-
Νεοελληνική γραμματική: αναπροσαρμογή της μικρής νεοελληνικής
γραμματικής του Μανόλη Τριανταφυλλίδη.
Οργανισμός εκδόσεως διδακτικών βιβλίων, Αθήνα.
- Πως γίνεται μια διπλωματική εργασία
Umberto Eco.
Εκδόσεις Νήσος, Αθήνα 1994.
-
Ψηφιακή τυπογραφία με το XeLaTeX
Απόστολος Συρόπουλος.
Επίκεντρο, Αθήνα 2010.
- Η συγγραφή επιστημονικής εργασίας
Χρήστος Θεοφιλίδης.
Εκδόσεις Γ. Δαρδάνος, Αθήνα 1995.
-
Οδηγός για τη σύνταξη, τη μετάφραση και την αναθεώρηση των νομικών πράξεων και λοιπών εγγράφων της Ευρωπαϊκής Ένωσης στα Ελληνικά
Διαθέσιμο στη θέση
http://ec.europa.eu/translation/greek/guidelines/documents/styleguide_greek_dgt_el.pdf (http://ec.europa.eu/translation/greek/guidelines/documents/styleguide_greek_dgt_el.pdf) (Τελευταία επίσκεψη: Ιούλιος 2010.)
- Aviel William Strunk Jr. and E. B. White.
The Elements of Style.
Macmillan Publishing Co., 1979.
-
The Chicago Manual of Style:
The Essential Guide for Writers, Editors, and Publishers
University of Chicago, 14th Edition, 1993.
- Charles H. Sides.
How to Write and Present Technical Information.
Cambridge University Press, 1991.
- Michael Shortland and Jane Gregory.
Communicating Science: A Handbook.
Longman Scientific & Technical, 1991.
- Roger C. Parker.
Looking Good in Print: A Guide to Basic Design for Desktop Publishing.
Vantana Press, third edition.
- Michael Gosney, John Odam, and Jim Benson.
The Gray Book: Designing in Black & White on your Computer.
Vantana Press, second edition, 1990.
Guidelines for Citing Referenced Material
Introduction
The correct citation of referenced material is an important aspect of
scientific publications.
The following guidelines provide a quick starting point for creating and
managing citations.
The guidelines are structured as follows:
first we outline the type of information that can appear in cited items
(
citation elements),
then, for every type of item (article, book, thesis) we indicate information
that is required or optional (
citation contents), and finally
we outline citation formats, give some examples, and describe the tools we use.
This guide is intended to be an efficient reference for creating
scientific citations.
It is biased towards the citation formats supported by BibTeX.
It is not intended to be complete or authoritative.
Citation Elements
The following list includes all elements that can appear in citations.
Author and editor lists are separeted by "and" in BibTeX files;
in citations they are typically separated by a comma, with an "and"
appearing before the last one.
Address | Publisher's address. For major ones just the city |
Annote | Annotation |
Author | First Last or Last, First. Multiple are separated by and |
Booktitle | Title properly capitalised |
Chapter | A chapter number |
Edition | Edition of the book, e.g. second |
Editor | First Last or Last, First. Multiple are separated by and |
HowPublished | If it was published in a strange way |
Institution | Institution that published it |
Journal | Journal name. Abreviations may exist ($TEXINPUTS/*.bst) |
Key | Used for alphabetizing and creating a label when no author |
Month | Month of publication, usual abbreviations |
Note | Additional information to help the reader |
Number | Number of a journal magazine to TR. |
Organization | Organization sponsoring the conference. |
Pages | Page numbers or range. |
Publisher | Publisher's name. |
School | Name of the school where the thesis was written. |
Series | The name of a series or set of books. |
Title | The work's title. |
Type | Type of a technical report e.g. Research Note |
Volume | The volume of a journal or multivolume book. |
Year | The year of publication. Numerals only." |
Citation Contents
The following sections indicate required and optional items for different
types of cited material.
In general, avoid providing a URL for archived material
(articles and conference papers stored in digital libraries),
especially when a DOI is available.
Article
Title | Required |
Author | Required |
Journal | Required |
Volume | Optional |
Number | Optional |
Pages | Optional |
Month | Optional |
Year | Required |
URL | Optional |
Note | Optional |
DOI | Optional |
Book
Title | Required |
Edition | Optional |
Series | Optional |
Volume | Optional |
Author | Required or include Editor |
Editor | Required or include Author |
Publisher | Required |
Address | Optional |
Month | Optional |
Year | Required |
Note | Optional |
ISBN | Optional |
Booklet
Address | Optional |
Author | Optional |
HowPublished | Optional |
Key | Optional (needed if no Author) |
Month | Optional |
Note | Optional |
Title | Required |
Year | Optional |
InBook
Address | Optional |
Author | Required or include Editor |
Chapter | Required or include Pages |
Edition | Optional |
Editor | Required or include Author |
Month | Optional |
Note | Optional |
Pages | Required or include Chapter |
Publisher | Required |
Series | Optional |
Title | Required |
Volume | Optional |
Year | Required |
InCollection
Author | Required |
Title | Required |
Chapter | Optional |
Pages | Required |
Editor | Optional |
Booktitle | Required |
Publisher | Required |
Address | Optional |
Month | Optional |
Year | Required |
Note | Optional |
DOI | Optional |
InProceedings
Title | Required |
Author | Required |
Booktitle | Required |
Address | Optional |
Month | Optional |
Year | Required |
Organization | Optional |
Pages | Optional |
Editor | Optional |
Publisher | Optional |
Note | Optional |
URL | Optional |
DOI | Optional |
Manual
Address | Optional |
Annote | Annotation |
Author | Optional |
Edition | Optional |
Key | Optional (needed if no Author) |
Month | Optional |
Note | Optional |
Organization | Optional |
Title | Required |
Year | Optional |
MastersThesis
Address | Optional |
Author | Required |
Month | Optional |
Note | Optional |
School | Required |
Title | Required |
Year | Required |
Misc
Author | Optional |
HowPublished | Optional |
Key | Optional (needed if no Author) |
Month | Optional |
Note | Optional |
Title | Optional |
Year | Optional |
DOI | Optional |
PhDThesis
Address | Optional |
Author | Required |
Month | Optional |
Note | Optional |
School | Required |
Title | Required |
Year | Required |
Proceedings
Title | Required |
Editor | Optional |
Note | Optional |
Organization | Optional |
Address | Optional |
Publisher | Optional |
Month | Optional |
Year | Required |
DOI | Optional |
TechReport
Author | Required |
Title | Required |
Note | Optional |
Type | Optional |
Number | Optional |
Month | Optional |
Year | Required |
Institution | Required |
Address | Optional |
DOI | Optional |
Unpublished
Author | Required |
Month | Optional |
Note | Required |
Title | Required |
Year | Optional |
Citations in the Text
The are a number of established forms for referencing a citation
in the publication text.
The reference should be unambiguous and the format used should be consistent.
Some popular styles include:
- [Author-Initial(s)Year]
-
as in [Spi97] (single author) or [WKS82] (multiple authors) or [Knu88b]
(multiple works for the same author and year).
- [Number]
-
as in [12]. Citations are then numbered by order of occurence in the
document or by the order they appear when sorted by the author names.
- Supersctipt number
- as in12
numbered as described in the previous case.
- Author (year)
- as in Spinellis (1997) or Kernighan and Ritchie (1978),
or (Knuth 1981).
Append a lowercase letter (a, b, c) for multiple works by the same author
in the same year.
The format Author (year) is used in narrative form as used by
Knuth (1983), while the format (Author year) is used when
the reference is outside the flow of the text (Knuth 1983).
We recomment against using this reference style as it confuses bilbiographic
tools without offering any significant benefits.
Choose the format appropriate for the publication you are writing for
and use it consistently.
We prefer the first format, as it is helps us identify the reference in
the text, and is efficiently supported by BibTeX.
Citation Formats
- AuthorName(s).
Book, volume VolumeNumber of Series.
Publisher, Address, editionnumber edition, Month Year.
Note.
- AuthorName(s).
Book Title, volume VolumeNumber of Series, chapter
Chapter appearing in a book, page Pages.
Publisher, Address, editionnumber edition, Month Year.
Note.
- AuthorName(s).
Booklet.
HowPublished, Address, Month Year.
Note.
- AuthorName(s).
Collection title.
In EditorName, editor, Booktitle, chapter Chapter appearing in a
collection, page Pages. Publisher, Address, Month Year.
Note.
- AuthorName(s).
Journal article.
Journal, VolumeNumber(Number):Pages, Month Year.
Note.
- AuthorName(s).
Manual.
Organization, Address, editionnumber edition, Month Year.
Note.
- AuthorName(s).
Mastersthesistitle.
Master's thesis, School, Address, Month Year.
Note.
- AuthorName(s).
Miscellaneous item.
HowPublished, Month Year.
Note.
- AuthorName(s).
Paper appearing in proceedings.
In EditorName, editor, Proceedings Title, page Pages, Address,
Month Year. Organization, Publisher.
Note.
- AuthorName(s).
PhDThesisTitle.
PhD thesis, School, Address, Month Year.
Note.
- AuthorName(s).
Technical report.
Type Number, Institution, Address, Month Year.
Note.
- AuthorName(s).
Unpublished work.
Note, Month Year.
- EditorName, editor.
ConferenceProceedingsTitle, Address, Month Year. Organization,
Publisher.
Note.
Citations to Electronic Data
Citations to data that is available in electronic format
should follow the guidelines for traditional formats,
appending at the end the following:
- medium (e.g. Online (for Internet data), CD-ROM),
- data supplier (e.g. IBM, MIT),
- for Internet data the URL, for other data the filename,
- the date you accessed the data.
It is generally preferable to cite traditional sources over Internet
pages as the latter tend to be rather volatile.
When you
do cite material on the web, archive it using
WebCite (
http://www.webcitation.org/63NhkqLsO).
Examples:
Advice for Writing BibTeX Entries
Many electronic libraries provide the ability to export a reference
in BibTeX format.
However, these references often contain errors and style bugs.
Before incorporating a reference into your database ensure that the following
hold.
- The work's title is set in title case (http://en.wikipedia.org/wiki/Letter_case#Headings_and_publication_titles), e.g.
The Vitamins Are in My Fresh California Raisins.
According to the actual style used, the words set with their first letter
in uppercase will remain so, or will be converted to lowercase.
- Set the capital letters of proper nouns and acronyms on curly braces,
so that they will remain in uppercase, even if the bibliography
style is to convert them to lowercase. Example:
Cognitive support, {UML} adherence, and {XMI} interchange in {A}rgo/{UML}.
- Ensure that the author names are given either in the form
FirstName LastName or LastName, FirstName.
- Author names should be separated with and.
- If the entry contains non-ASCII characters, use the appropriate
TeX escapes (http://www.ctan.org/tex-archive/info/symbols/comprehensive/symbols-a4.pdf).
Example
author = {Yann-Ga\"{e}l Gu\'{e}h\'{e}neuc and Herv\'{e} Albin-Amiot},
- Change journal names according to the macro file you are using.
For instance, write
journal = cacm,
instead of
journal = "Communications of the ACM",
This allows you to uniformly abbreviate the journal titles, according to the
publisher's style.
For this to work, you'll need a list of journal abbreviations,
like this or this (http://ftp.math.utah.edu/pub//tex/bib/journal.bib) one.
- Similarly, use symbolic abbreviated month names, rather than they
full name equivalents.
For instance, write
month = dec,
instead of
month = "December",
Again, this allows the style file to abbreviate month names only if required.
- Remove unneeded curly braces or quotes from integer numbers.
For instance, write
volume = 33,
number = 6,
year = 1990,
instead of
volume = {33},
number = {6},
year = {1990},
This is only a matter of style.
- Remove the resolver URL from the Digital Object Identifier (DOI).
For instance, write
doi = {10.1145/78973.78974},
instead of
doi = {http://doi.acm.org/10.1145/78973.78974},
The resolver is not part of the DOI, and should not appear in it.
Examples
- Egon Balas and Manfred W.
Padberg.
Set partitioning --- a survey.
In Nicos Christofides, editor, Combinatorial Optimization,
chapter 7, pages 151-210. Wiley, 1979.
- H. Dobbertin,
A. Bosselaers, and B. Preneel.
RIPEMD-160: A strengthened version of RIPEMD (ftp://ftp.esat.kuleuven.ac.be/pub/cosic/bosselae/ripemd/ripemd160.ps.gz).
In Dieter Gollmann, editor, Fast Software Encryption: Third International
Workshop, pages 71-82. Springer-Verlag, Cambridge, UK, February 1996.
Lecture Notes in Computer Science 1039.
- John L. Hennessy and
David A. Patterson.
Computer Architecture: A Quantitative Approach.
Morgan Kaufmann Publishers, second edition, 1996.
- Brian W. Kernighan.
Why Pascal is not my favorite programming language.
Computer Science Technical Report 100, Bell Laboratories, Murray Hill, NJ, USA,
July 1981.
Available online at http://cm.bell-labs.com/cm/cs/cstr. (Reprinted in Comparing
and Assessing Programming Languages Ed. A. Feuer N. Gehani Prentice-Hall
1984).
- David P. Maher.
Fault induction attacks, tamper resistance, and hostile reverse engineering in
perspective.
In Rafael Hirschfeld, editor, Financial Cryptography: First International
Conference, FC '97, pages 109-121, Anguilla, British West Indies,
February 1997. Springer-Verlag.
Lecture Notes in Computer Science 1318.
- Jef Poskanzer et al.
NETPBM: Extended portable bitmap toolkit.
Available online ftp://ftp.x.org/contrib/utilities/, December 1993.
Release 7.
- W. H. Press, B. P.
Flannery, S. A. Teukolsky, and W. T. Vetterling.
Numerical
Recipes in C, pages 343-352.
Cambridge University Press, 1988.
- Jesse Reisman.
Web site design: Less
is more.
IT Professional, 1(5):63-64, September/October 1999.
- Brian Cantwell Smith.
Procedural Reflection in Programming
Languages.
PhD thesis, Massachusetts Institute of Technology, January 1982.
- Eugene H. Spafford.
The internet worm program: An analysis.
Technical Report CSD-TR-823, Purdue University, West Lafayette, IN 47907-2004,
November 1988.
- Diomidis Spinellis.
An implementation of the Haskell language (http://softlab.icsd.aegean.gr/~dspin/pubs/thesis/MEng/html/haskell.pdf).
Master's thesis, Imperial College, London, UK, June 1990.
- Diomidis Spinellis.
Programming Paradigms as Object Classes: A Structuring Mechanism for
Multiparadigm Programming.
PhD thesis, Imperial College of Science, Technology and Medicine, London, UK,
February 1994.
- Usenix Association.
Very High Level Languages Workshop (VHLL), Santa Fe, Mexico,
October 1994. Usenix Association.
- AT&T Bell Laboratories, Murray Hill, New
Jersey.
UNIX Time-Sharing System, Programmer's Manual, Research Version,
February 1985.
Eighth Edition.
- Niklaus Wirth.
From programming language design to computer construction.
Communications of the ACM, 28(2):159-164, February 1985.
Tools and Links
I manage bibliography lists and automatically create citations using BibTeX
a companion program for the LaTeX text-processing system.
LaTeX, BibTeX and instructions can be found on
CTAN: the Comprehensive TeX Archive Network (
http://www.ctan.org/)
Extensive bibliography lists in BibTeX format are maintained on many Internet
sites such as the
Networked Computer Science Technical Reports Library (
http://www.ncstrl.org/)
When forced to use Microsoft Word I have developed
a set of BibTeX styles
that create Microsoft Word RTF files.
More information is also available from
Dana Jacobsen's
Survey of Bibliographic Tools (
http://www.ecst.csuchico.edu/~jacobsd/bib/tools/index.html).
Some other tools that you may wish to examine are
ProCite,
EndNote,
Reference Manager,
RefViz, and
WriteNote.
References
- John Grossman, editor.
The Chicago
Manual of Style.
The University of Chicago Press, Chicago and London, fourteenth edition,
1993.
- Donald E. Knuth.
The
TeXbook.
Addisson-Wesley, 1989.
- Leslie Lamport.
LATEX: A
Document Preparation System.
Addisson-Wesley, 1985.
- Bernice Sacks Lipkin.
Latex for
Linux: A Vade Mecum.
Springer Verlag, 1999.
- Oren Patashnik.
Designing BibTeX styles.
Available from the TeX archives, February 1988.
- Norbert Schwarz.
Introduction
to TeX.
Addison-Wesley, 1989.
- Charles H. Sides.
How to Write
and Present Technical Information.
Cambridge University Press, 1991.
PhD Student and Supervisor Resources
A Reading List for PhD Students (and their Supervisors)
- Phil Agre.
Networking on
the network: A guide to professional skills for PhD students.
Available online http://dlis.gseis.ucla.edu/people/pagre/network.html (http://dlis.gseis.ucla.edu/people/pagre/network.html).
Current January 2003, August 2002.
- Steven Alter and
Alan R. Dennis.
Selecting research topics: Personal experiences and speculations for the
future.
Communications of the Association for Information Systems,
8:314–329, 2002.
- Vance W. Berger and
John P. A. Ioannidis.
The
Decameron of poor research.
British Medical Journal, 329(7480):1436–1440, December 2004.
(doi:10.1136/bmj.329.7480.1436 (http://dx.doi.org/10.1136/bmj.329.7480.1436))
- John W. Chinneck.
How to
organize your thesis.
Available online http://www.sce.carleton.ca/faculty/chinneck/thesis.html (http://www.sce.carleton.ca/faculty/chinneck/thesis.html).
Current November 2005.
- Claire Kehrwald Cook.
Line by Line.
Houghton Mifflin, Boston, MA, 1986.
- Gordon B. Davis.
Advising
and supervising doctoral students: Lessons I have learned.
MISRC Working Paper 04-12, University of Minnesota. MIS Research Center, May
2004.
Forthcoming as chapter in PhD Supervisors and Student Handbook for
Information Systems Research, Butterworth-Heinnemann, 2004.
- Robert A. Day.
How to write a scientific paper.
IEEE Transactions on Professional Communication, PC-20(1):32–37,
June 1977.
- A.R. Dennis and J.S.
Valacich.
Conducting research in
information systems.
Communications of AIS, 7(5), 2001.
(doi:10.17705/1CAIS.00705 (http://dx.doi.org/10.17705/1CAIS.00705))
- R. Farrow, F. Iniesto,
M. Weller, and R. Pitt.
The
GO-GN Research Methods Handbook.
Open Education Research Hub. The Open University, Buckingham, UK, 2020.
- Hugh Gallagher.
An
exemplary college application essay.
Available online http://www.ifs.tuwien.ac.at/ silvia/research-tips/ (http://www.ifs.tuwien.ac.at/~silvia/research-tips/).
Current November 2005, 1990.
- William Germano.
The scholarly lecture:
How to stand and deliver.
The Chronicle Review, 50(14), November 2003.
- George D. Gopen and
Judith A. Swan.
The science of scientific writing.
American Scientist, 78(6):550–558, November 1990.
Available online
https://www.americanscientist.org/blog/the-long-view/the-science-of-scientific-writing (https://www.americanscientist.org/blog/the-long-view/the-science-of-scientific-writing).
- Patricia Gosling and
Bart Noordam.
Mastering your PhD : Survival and Success in the Doctoral Years and
Beyond.
Springer, New York, 2006.
- John Grimond.
The Economist style
guide.
Also available online http://www.economist.com/research/StyleGuide/ (http://www.economist.com/research/StyleGuide/).,
2005.
- John Grossman, editor.
The Chicago Manual of Style.
The University of Chicago Press, Chicago and London, fourteenth edition,
1993.
- Philip Guo.
The Ph.D. grind (http://pgbovine.net/PhD-memoir.htm).
Available online http://pgbovine.net/PhD-memoir.htm (http://pgbovine.net/PhD-memoir.htm). Current January
2020, 2012.
- Richard W. Hamming.
You and your research.
Available online via a Google search, March 1986.
Bell Communications Research Colloquium Seminar.
- A. R. Hevner, S. T.
March, J. Park, and S. Ram.
Design science in information
systems research.
MIS Quarterly, 28(1):75–105, 2004.
- Ralph E.
Johnson, Kent Beck, Grady Booch, William Cook, Richard Gabriel, and Rebecca
Wirfs-Brock.
How to get a paper accepted at OOPSLA (panel).
In Proceedings of the Eighth Annual Conference on Object-Oriented
Programming Systems, Languages, and Applications, OOPSLA â93, page
429â436, New York, NY, USA, 1993. Association for Computing Machinery.
(doi:10.1145/165854.165934 (http://dx.doi.org/10.1145/165854.165934))
- Simon L. Peyton Jones, John
Hughes, and John Launchbury.
How
to give a great research talk.
Available online
http://www.ifs.tuwien.ac.at/ silvia/research-tips/Giving%20a%20talk.pdf (http://www.ifs.tuwien.ac.at/~silvia/research-tips/Giving%20a%20talk.pdf).
Current November 2005.
- Simon L. Peyton Jones, John
Hughes, and John Launchbury.
How
to write a great research paper.
Available online
http://www.ifs.tuwien.ac.at/ silvia/research-tips/Writing%20a%20paper.pdf (http://www.ifs.tuwien.ac.at/~silvia/research-tips/Writing%20a%20paper.pdf).
Current November 2005.
- Aviel William Strunk Jr.
and E. B. White.
The Elements of Style.
Macmillan Publishing Co., New York, 1979.
- S. Katzoff.
Clarity
in technical reporting.
Technical Report NASA SP-7010, NASA, Washington, D.C., 1964.
Second edition. Available online
http://techreports.larc.nasa.gov/ltrs/PDF/NASA-64-sp7010.pdf (http://techreports.larc.nasa.gov/ltrs/PDF/NASA-64-sp7010.pdf).
- Barbara
Kitchenham and Stuart Charters.
Guidelines for performing systematic literature reviews in software
engineering.
Technical Report EBSE-2007-01, School of Computer Science and Mathematics,
Keele University, 2007.
- Barbara A.
Kitchenham and Shari L. Pfleeger.
Personal opinion surveys.
In Forrest Shull, Janice Singer, and Dag I. K. Sjøberg, editors, Guide
to Advanced Empirical Software Engineering, pages 63–92. Springer
London, London, 2008.
(doi:10.1007/978-1-84800-044-5_3 (http://dx.doi.org/10.1007/978-1-84800-044-5_3))
- Donald E. Knuth, Tracy
Larrabee, and Paul M. Roberts.
Mathematical
writing.
Available online
http://jmlr.csail.mit.edu/reviewing-papers/knuth_mathematical_writing.pdf (http://jmlr.csail.mit.edu/reviewing-papers/knuth_mathematical_writing.pdf).
Current January 2020, 1987.
- Markus G. Kuhn.
Effective scientific
electronic publishing.
Available online http://www.cl.cam.ac.uk/ mgk25/publ-tips/ (http://www.cl.cam.ac.uk/~mgk25/publ-tips/). Current March
2008, 2006.
- James Lavin.
Proving almost anything: a beginner's guide to a world with infinite solutions.
IEEE Potentials, pages 6–7, February/March 1996.
- Adrian Lee, Carina Dennis,
and Philip Campbell.
Nature's guide for mentors.
Nature, 447(7119):791–797, June 2007.
- Ralp Lengler and Marin J.
Eppler.
A
periodic table of visualization methods.
Available online
http://www.visual-literacy.org/periodic_table/periodic_table.html (http://www.visual-literacy.org/periodic_table/periodic_table.html).
Current September 2012.
- Roy Levin and David D.
Redell.
An evaluation of the ninth
SOSP submissions -or- how (and how not) to write a good systems paper.
Operating Systems Review, 17(3):35–40, July 1983.
- Jack Lynch.
Guide to
grammar and style.
Available online http://andromeda.rutgers.edu/ jlynch/Writing/index.html (http://andromeda.rutgers.edu/~jlynch/Writing/index.html).
Current September 2010.
- Marie desJardins.
How to be a good
graduate student / advisor.
Available online http://www.cs.indiana.edu/how.2b/how.2b.html (http://www.cs.indiana.edu/how.2b/how.2b.html). Current
November 2005.
- Marie desJardins.
How to succeed in
postgraduate study.
Available online http://aerg.canberra.edu.au/jardins/t.htm (http://aerg.canberra.edu.au/jardins/t.htm). Current
November 2005.
- Matthew Might.
Reading
for graduate students.
Available online
http://matt.might.net/articles/books-papers-materials-for-graduate-students/ (http://matt.might.net/articles/books-papers-materials-for-graduate-students/).
Current August 2010.
- Matthew Might.
Reading for
graduate students.
Available online http://matt.might.net/articles/ways-to-fail-a-phd/ (http://matt.might.net/articles/ways-to-fail-a-phd/).
Current January 2012.
- Silvia Miksch.
How to do
research.
Available online http://www.ifs.tuwien.ac.at/ silvia/research-tips/ (http://www.ifs.tuwien.ac.at/~silvia/research-tips/).
Current November 2005, 2005.
- John Mingers.
The long and winding road: Getting papers published in top journals.
Communications of the Association for Information Systems,
8:330–339, 2002.
- George Orwell.
Politics
and the english language.
Horizon, April 1946.
Also available online
https://www.orwellfoundation.com/the-orwell-foundation/orwell/essays-and-other-works/politics-and-the-english-language/ (https://www.orwellfoundation.com/the-orwell-foundation/orwell/essays-and-other-works/politics-and-the-english-language/).
- Ian Parberry.
A guide for
new referees in theoretical computer science.
Information and Computation, 112(1):96–116, July 1994.
(doi:10.1006/inco.1994.1053 (http://dx.doi.org/10.1006/inco.1994.1053))
- David A. Patterson.
How to have a
bad career in research/academia.
Available online
http://www.cs.utah.edu/ lepreau/osdi94/keynote/abstract.html (http://www.cs.utah.edu/~lepreau/osdi94/keynote/abstract.html) and
http://www.cs.berkeley.edu/ pattrsn/talks/BadCareer.pdf (http://www.cs.berkeley.edu/~pattrsn/talks/BadCareer.pdf). Current
November 2005, November 1994.
Invited Talk. First Symposium on Operating Systems Design and Implementation
(OSDI '94) keynote address, November 14-17, 1994 Monterey, CA.
- Randy Pausch.
Really achieving your
childhood dreams.
Video available online http://www.youtube.com/watch?v=ji5_MqicxSo (http://www.youtube.com/watch?v=ji5_MqicxSo).
Current September 2008, September 2007.
- Vern Paxson.
Strategies
for sound internet measurement.
In Proceedings of the Internet Measurement Conference, Taormina,
Sicily, Italy, October 2004.
- Chad Perry.
A structured
approach to presenting PhD theses: Notes for candidates and their
supervisors.
In ANZ Doctoral Consortium. University of Sydney, February 1994.
- Estelle M. Phillips
and Derek S. Pugh.
How to Get a PhD.
Open University Press, Buckingham, UK, third edition, 2000.
- Frantz Rowe.
What literature review is not: diversity, boundaries and recommendations.
European Journal of Information Systems, 23(3):241–255, 2014.
(doi:10.1057/ejis.2014.7 (http://dx.doi.org/10.1057/ejis.2014.7))
- E. Robert Schulman and
C. Virginia Cox.
How to write a
Ph.D. dissertation.
Annals of Improbable Research, 3(5):8, September 1997.
- E. Robert Schulman.
How
to write a scientific paper.
Annals of Improbable Research, 2(5):8, September 1996.
- Claude Shannon.
Creative
thinking.
Available online
https://medium.com/the-mission/a-genius-explains-how-to-be-creative-claude-shannons-long-lost-1952-speech-fbbcb2ebe07f (https://medium.com/the-mission/a-genius-explains-how-to-be-creative-claude-shannons-long-lost-1952-speech-fbbcb2ebe07f).
Current August 2017, March 1952.
- Zur Shapira.
"i've got a theory paperâdo you?": Conceptual, empirical, and theoretical
contributions to knowledge in the organizational sciences.
Organization Science, 22(5):1312–1321, 2011.
- Mary Shaw.
Writing good
software engineering research papers.
In Proceedings of the 25th International Conference on Software
Engineering, pages 726–726. IEEE Computer Society, May 2003.
- Jonathan Shewchuk.
Three sins of authors in
computer science and math.
Available online
http://www-2.cs.cmu.edu/ jrs/sins.html.gseis.ucla.edu/people/pagre/network.html (http://www-2.cs.cmu.edu/~jrs/sins.html.gseis.ucla.edu/people/pagre/network.html).
Current December 2004, 1997.
- Michael Shortland
and Jane Gregory.
Communicating Science: A Handbook.
Longman Scientific & Technical, 1991.
- Forrest Shull, Janice
Singer, and Dag I. K. Sjøberg, editors.
Guide to Advanced Empirical Software Engineering.
Springer London, London, 2008.
(doi:10.1007/978-1-84800-044-5 (http://dx.doi.org/10.1007/978-1-84800-044-5))
- Charles H. Sides.
How to Write and Present Technical Information.
Cambridge University Press, Cambridge, 1991.
- Yannis Smaragdakis.
Phd rants and
raves.
Available online http://www.cs.uoregon.edu/ yannis/phd-slides.pdf (http://www.cs.uoregon.edu/~yannis/phd-slides.pdf).
Current January 2008.
- Alan Jay Smith.
The task
of the referee.
Computer, 23(4):65–71, 1990.
(doi:10.1109/2.55470 (http://dx.doi.org/10.1109/2.55470))
- Diomidis Spinellis.
The Elements of
Computing Style: 180+ Tips for Busy Knowledge Workers.
Leanpub, Vancouver, BC, Canada, 2014.
- Diomidis Spinellis.
Advice for writing LaTeX
documents.
Available online https://github.com/dspinellis/latex-advice (https://github.com/dspinellis/latex-advice). Current
January 2019, January 2019.
- William H. Starbuck.
Fussy
professor Starbuck's cookbook of handy-dandy prescriptions for ambitious
academic authors or why I hate passive verbs and love my word
processor.
Available online http://pages.stern.nyu.edu/ wstarbuc/Writing/Fussy.htm (http://pages.stern.nyu.edu/~wstarbuc/Writing/Fussy.htm).
Current May 2005, 1999.
- Klaas-Jan Stol and
Brian Fitzgerald.
The ABC of software engineering
research.
ACM Trans. Softw. Eng. Methodol., 27(3):11:1–11:51, September
2018.
(doi:10.1145/3241743 (http://dx.doi.org/10.1145/3241743))
- John O. Summers.
Guidelines for conducting research and publishing in marketing: From
conceptualization through the review process.
Journal of the Academy of Marketing Science, 29(4):404–415, 2001.
(doi:10.1177/03079450094243 (http://dx.doi.org/10.1177/03079450094243))
- Ivan Sutherland.
Technology
and courage.
Sun Labs Perspectives Essay Series 96-1, Sun Microsystems Laboratories, Santa
Clara, CA, April 1996.
Available online
http://research.sun.com/techrep/Perspectives/smli_ps-1.pdf (http://research.sun.com/techrep/Perspectives/smli_ps-1.pdf).
- Science jokes.
Available online http://www.xs4all.nl/ jcdverha/scijokes/ (http://www.xs4all.nl/~jcdverha/scijokes/). Current
February 2007, 2007.
- M. Vidoni.
A systematic process for mining software repositories: Results from a
systematic literature review.
Information and Software Technology, 144:106791, 2022.
(doi:10.1016/j.infsof.2021.106791 (http://dx.doi.org/10.1016/j.infsof.2021.106791))
- Toby Walsh.
Empirical methods in CS and AI.
Available online http://www.cse.unsw.edu.au/ tw/empirical.html (http://www.cse.unsw.edu.au/~tw/empirical.html). Current
October 2014.
- Jane Webster and
Richard T. Watson.
Analyzing the past to prepare for the future: Writing a literature review.
MIS Quarterly, 26(2):xiii–xxiii, June 2002.
- Roel Wieringa.
Writing
a report about design research.
Available online
http://wwwhome.cs.utwente.nl/ roelw/ReportingAboutDesignResearch.pdf (http://wwwhome.cs.utwente.nl/~roelw/ReportingAboutDesignResearch.pdf).
Current September 2008, 2007.
- Gene Woolsey.
An exemplary essay on communication or corporate style, corporate substance, &
the sting.
Interfaces, 9(3):10–12, May 1979.
PhD Student Achievements
This page contains significant achievements of PhD students I supervise.
- 26 February 2009
-
The book
Beautiful Architecture: Leading Thinkers Reveal the Hidden Beauty in Software Design (http://oreilly.com/catalog/9780596517984/)
(O'Reilly, 2008,
ISBN 9780596517984)
co-edited by Georgios Gousios
obtained the top rank on the amazon.co.uk Software Architecture books category.
The book's royalties are donated to the
international humanitarian aid organisation
Médecins Sans Frontières (http://www.msf.org/).
- February 2009
-
Vassilis Karakoidas is awarded funding for his research through
AUEB's Funding Programme for Basic Research (PEVE).
- January 2009
-
Dimitris Mitropoulos publishes a paper in a high-impact journal:
SDriver: Location-specific signatures prevent SQL injection
attacks.
Computers and Security, 2009.
- October 13th, 2008
-
Vasileios Vlachos is elected Lecturer in the
Department of Computer Science and Telecommunications
at the Technological Educational Institution of Larissa.
The subject of his post is the Development and Security of Internet Applications.
- September 2008
-
Vasileios Vlachos publishes a paper he co-autored during his PhD study
in a top-impact journal:
Power laws in software.
ACM Transactions on Software Engineering and Methodology,
18(1):1–26, September 2008.
Article 2.
- June 2008
-
The paper
A PRoactive
Malware Identification System based on the Computer Hygiene Principles
(Information Management and Computer Security, 15(4):295-312, 2007)
co-authored by Vasileios Vlachos
was awarded (http://info.emeraldinsight.com/authors/literati/awards.htm?jr=imcs)
by
Emerald (http://www.emeraldinsight.com/)
publishers with the
"Highly Commended Paper" distinction.
The award was given by the journal's editorial board to three papers
as part of the
"Literati Network Awards for Excellence 2008".
- May 2008
-
Vassilis Karakoidas publishes a paper in a high-impact journal:
FIRE/J — optimizing regular expression searches with generative
programming.
Software: Practice & Experience, 38(6):557–573, May 2008.
- November 17th, 2007
-
Konstantinos Chorianopoulos is elected Lecturer in the
Department of Informatics at the Ionian University.
- July 24th, 2007
-
Vasileios Vlachos successfully defends his PhD thesis.
- April 2006
-
The paper
A
survey of peer-to-peer content distribution technologies
(ACM Computing Surveys, 36(4):335–371, December 2004)
co-authored by Stephanos Androutsellis Theotokis
obtained the top yearly download rank in the ACM's digital library
popular magazine and computing surveys articles category.
Table from the
Communications of the ACM Volume 49, Number 4 (2006), Pages 29-30.
- January 2006
-
Stephanos Androutsellis Theotokis,
Georgios Gousios, and
Konstantinos Stroggylos
are awarded a scholarhip through the
framework of the "Reinforcement Programme of Human Research Manpower"
(PENED) co-financed by National and Community Funds
(25% from the Greek Ministry of Development-General Secretariat of Research and Technology and 75% from E.U.-European Social Fund).
- December 2004
-
Stephanos Androutsellis Theotokis publishes a paper in a top-impact journal:
A
survey of peer-to-peer content distribution technologies.
ACM Computing Surveys, 36(4):335–371, December 2004.
- July 2004
-
Vasileios Vlachos is awarded a scholarship
co-funded by the European Social Fund and National Resources - EPEAEK II -
IRAKLITOS Fellowships for research of
Athens University of Economics and Business.
- June 2004
-
Vasileios Vlachos and Stefanos Androutsellis Theotokis publish a paper in a high-impact journal:
Security applications of peer-to-peer networks.
Computer Networks, 45(2):195–205, June 2004.
- May 10th, 2004
-
Konstantinos Chorianopoulos successfully defends his PhD thesis.
- May 2004
-
Konstantinos Chorianopoulos publishes a paper in a high-impact journal:
User
interface development for interactive television: Extending a commercial
DTV platform to the virtual channel API.
Computers & Graphics, 28(2):157–166, April 2004.
- April 2004
-
Vasileios Vlachos coordinated the student team that won the third place
in the national phase of the Microsoft Imagine Cup 2004 competition.
- December 2004
-
The paper
A
survey of peer-to-peer content distribution technologies
(ACM Computing Surveys, 36(4):335–371, December 2004)
co-authored by Stephanos Androutsellis Theotokis
obtained the top monthly download rank in the ACM's digital library
popular magazine and computing surveys articles category.
Table from the
Communications of the ACM Volume 48, Number 9 (2005), Pages 29-30.
- June 16th, 2002
-
Konstantinos Raptis successfully defends his PhD thesis.
- June 2000
-
Konstantinos Raptis publishes a paper in a high-impact journal:
Component mining: A process and its pattern language.
Information and Software Technology, 42(9):609–617, June 2000.
The PhD Game
0.
BEGINNING
Throw away sanity to start |
|
The Ph.D Game |
|
|
1. Your supervisor gives you project title. Go on 3 spaces. |
2.
|
3. You are full of enthusiasm.
Have another turn. |
4. Realise supervisor has given nothing but project title. |
5. Go to Library -you can't understand catalogue!
Miss one turn. |
6. The important reference has gone missing in the lib. Back 2 spaces. |
7.
|
14.
|
13. Things don't go well. You become disillusioned Miss one turn |
12. END OF FIRST YEAR
|
11. Examiners not impressed by first year report.
Throw 1 to cont |
10. Do extra work on first year report.
Extra turn. |
9. Supervisor makes a comment you don't understand. Go back two spaces |
8. Need supervisor's help.
Miss one turn finding her. |
15. You become depressed.
Miss 2 turns. |
16. You become more depressed.
Miss 3 turns. |
17. Change project.
Go back to beginning |
18. Change supervisor. Throw 6 to cont Otherwise go back 6 spaces. |
19. Do lab demonstra -tions to get some dosh. Go on 2 spaces. |
20.
|
21. Lab demos take up too much of your time.
Back 4 spaces. |
28. You begin to think you will never finish. You are probably right. |
27. Beer monster strikes. Spend 1 turn recovering. |
26. Work every weekend for two months. Go on 6 spaces. |
25. END OF SECOND YEAR No results. Who cares? |
24. Experiment are working. Go on 4 spaces. |
23. Specimens incorrectly labelled. Go back to 20. |
22.
|
29.
|
30. You spend more time complaining than working. Miss 1 turn. |
31. You realise your mates are earning 5 times your grant. Have a good cry |
32. You are asked why you started a PhD. Miss a turn finding a reason |
33. You are offered a job. You may cont. or retire from game. |
34. Start writing up. Now you are really depressed.
Miss 5 turns. |
35.
|
42. Your PhD is awarded. Congratula -tions
now join dole queue! |
41. You are asked to resubmit thesis.
Back to 33. |
40. You decide PhD isn't worth the bother. Withdraw now. Game over. |
39. Harddisk crashes. Back 3 spaces |
38. It proves impossible to write up and work.
Go to 33. |
37. Your thesis will disprove external examiners work. Go back to 28. |
36. Your data has just been published by rival group.
Go back to 28. |
*Matrix by somebody at the Jenner Institute (http://www.jenner.ac.uk/), who deserves the copyright with minor modifications by Kohei Watanabe.
The Nine Types of Principal Investigators
From The NIH Catalyst, Volume 3, page 23.
Delaying Higher Degree Completion
Collated by Diana Bental (D.Bental@lancaster.ac.uk) with the help
of contributions from many PhD students, past and present.
Purpose
This document is intended for supervisors of students registered for
higher degrees in just about any University department anywhere.
Though the presentation of the document is deliberately light in tone,
the contents are based on a collation of feedback from a fairly large
number of students currently pursuing their studies for a Ph.D.
Acknowledgement
This document is extremely close to that published in the AISB
Quarterly (No. 80, Summer 1992), the quarterly magazine of the Society
for the Study of Artificial Intelligence and the Simulation of
Behaviour. It has been slightly edited by Paul Brna.
``All the information here has in fact been contributed by PhD
students, past and present. Much of what is written here has been
exaggerated for effect, but it is all based on students' real
experiences and some of it is no more than a literal description of
what has happened to them.'' (page 60, AISBQ No 80, Summer 1992)
Many PhD students have collaborated to provide the insights that are
found within. Our thanks go to them, and to those that helped in
pulling the contributions together into such a formidable body of
knowledge.
Thesis Prevention: Advice to Supervisors
As you will be aware, Professor Hacker in his wisdom supervises a
great many Higher degree students. Prof Hacker is currently angling for
research money for his Automated Thesis Adviser, and it is his aim
that no student of his should do anything which requires any input
from him until he has obtained the grant for, researched, developed
and completed the Automated Thesis Adviser which will replace him.
Clearly, it is not easy to prevent reasonably intelligent and mildly
motivated students (such as ourselves) from producing useful work.
Nevertheless, he has developed some excellent techniques for Thesis
Prevention which we feel may be of use to others, and which we, Professor
Hacker's research students
present here for your enlightenment and
entertainment. If you, as a supervisor, wish to prevent your students
from researching and writing up a thesis, or indeed doing anything
useful at all, we hope you will take inspiration from Prof. Hacker's
example.
On Arrival: Settling In
Try to be away when the student arrives. Out of the country is
preferable, but in today's economic climate Prof. Hacker acknowledges
that it is also acceptable to be merely in another city. In this
case, your student cannot try to set up any kind of regular contact
with you, and will be forced to become independent of you early on.
Supervisions
Initially, Prof. Hacker attempted to shelve the whole problem of
supervisions by simply refusing to see his students at all. He would
smile at them on his way out of the tea room, realising that this was
as much supervision as any student could expect, especially if he
occasionally discussed the weather with them when meeting in the
corridor. He was forced to drop this approach when his department laid
down some guidelines which insisted that supervisors should actually
sit down in the same room as students every few weeks and discuss the
students' work. This was only a temporary setback to the intrepid
Prof. Hacker, of the sort that spurs a good researcher on to new
heights. It was at this point that he made some stunning discoveries
about how to use these meetings to achieve depths of demotivation
previously beyond human imagining.
Basic Etiquette
Here are some guidelines which, if adhered to strictly for even quite
a short time, will convey the desired message to the student: a
student's work is unimportant, uninteresting and not worth anybody's
time, not even their supervisor's.
Punctuality
Arrive late for all appointments with the student. If you can't manage
that, then be occupied in some long and complicated task when the
student arrives and be sure to finish the task before turning your
attention to the student.
Concentration
Encourage interruptions. Do not cut callers short with the rude
statement that you are in a meeting. Never re-route telephone calls.
Ask the secretaries to route all their calls through your office as
a return favour for all those times you've re-routed your calls.
Encourage your head of department, researchers from overseas and your
three-year-old child to call at these times. Make any outgoing calls
that you suddenly realise are necessary.
If supervisions are held in your office (and they needn't be) make
sure that you have a keyboard handy. This is so that you can, in the
middle of any detailed explanations that your student may indulge in,
reach for the keyboard and read your mail. Prof. Hacker likes to get his
workstation to emit distracting beeps at random intervals.
Reliability
Cancel meetings frequently on the flimsiest pretexts that you can. Do
not ever tell students that the meeting is cancelled, but let them
come prepared for a supervision and find the room empty. (If the
students have prepared for the supervision, that is 90 per cent of the
benefit anyway, so don't feel that you are depriving them.)
The Group Supervision
Try as far as possible to conduct the supervision of several students
simultaneously. The students can talk to each other, thus decreasing
your need to contribute. If they are all working on unrelated projects
and share no common terminology, their attempts to hold a useful
discussion should provide you with much diversion.
Productivity is increased even further if this is done as a lunch-time
exercise. After all, you have to eat sometime, and if you can do this
and fulfill your obligations to your students at the same time, so
much the better.
Prof. Hacker warns that only experienced supervisors should attempt
simultaneous supervision of more than two students. Note also that
fewer than two is really not cost effective and in this case you
should try to turn up as late as possible, grab your lunch and be busy
eating for most of the next 15 minutes (which is the recommended
duration for such supervisions).
Preparing for Supervisions
Do not prepare for any supervision. If you have an excellent
memory, know all the background to the student's project and see the
student often, then this technique will not help you. But if not, then
your failure to take note of what the student has been doing and/or
your failure to look back over your notes will enable you to start
each supervision from scratch, requiring the student to explain and
justify every step of background to their work before they can discuss
any real problems with you. Do this one well enough and you will
never have to discuss any real technical problems with your student.
Content of Supervisions
You will find that you are expected to talk during supervisions.
Prof. Hacker prefers to avoid the strain of listening critically to
students' ideas, and still more to avoid the strain of thinking up
helpful and detailed advice.
Avoid at all times any discussion of practical possibilities. Inspire
the student by using supervision meetings to soliloquise on all your
vaguest and most esoteric ideas, particularly on philosophical issues.
Tell lengthy anecdotes to illustrate a point which the student will
have forgotten by the time you finish.
Your students will also expect you to respond to their ideas.
Prof. Hacker has demonstrated that three quite different techniques
may be expected to produce the same effect.
- Always agree with any suggestions a student makes. At first, this
will boost their confidence beyond their wildest expectations
which means they won't come back for supervision for a long time. The
next time you use this approach they will become suspicious that
whatever they say is enthusiastically accepted, however ludicrous, so
they won't come for supervision since they don't trust you.
- Always disagree with what the student says. This is more
dangerous since it is confrontational and so should only be attempted
by persons of large stature or with a black belt in an appropriate
martial art. A good way of ridding yourself of students with the
possibility of unlimited earnings from suing for assault. If you have
been unable to prevent a student from progressing deeply into a
thesis, you can discourage the student by commenting only on the weak
aspects of the work and assuming that the student will know, perhaps
by psychic projection, that you think the rest is good.
- Maintain a strict neutrality to avoid unfairly influencing the
student. This is far less obvious than either of the two previous
approaches and it still frees you from having to think about what the
student is doing. Never give clear approval or disapproval of any
ideas the student comes up with, so that they don't know if the idea
should be followed up or abandoned. The student, unlike you, is
unfamiliar with doing a Higher Degree, so it would be unfair to bias
their ideas of what is appropriate.
-
Research Guidance
Directing the Area and Scope of your Students' Research
A good way to prevent your students from doing any useful research is
to ensure that they choose the right topic. An ideal topic is one that
the student isn't interested in, and that the supervisor knows nothing
about. Prof. Hacker is especially pleased with a topic if the
department lacks the facilities required to pursue it, and if any
results are likely to be inconclusive.
The department accidentally played right into Prof. Hacker's hands
when it instigated the requirement that students submit a thesis
proposal at the end of their first year. A feebler supervisor would
have given in and tried to ensure that students produce a detailed and
well thought out proposal by this deadline. Prof. Hacker is made of
sterner stuff. By following techniques given in this section and the
reading techniques given in the section below throughout his students'
first year, Prof. Hacker was able to use this deadline to panic his
students into choosing the right sort of topic - for his
purposes.
Discourage students from following up their initial interests.
Post-graduate work is a chance to explore new areas! Suggest subject
areas that they know nothing about, so that they spend a year or two
trying to understand an area before they find out that it's not worth
the trouble to pursue.
Suggest that the student should apply a promising technique to a
useless area, such as applying termination proof theory to Cobol
programs.
Suggest that students should research a `related' area to their
current research since the two areas share a common word in their
titles, even though they are lightyears apart (see the following
section on reading). This could set them on
the wrong track for years.
Wait a year or two and then find a good reason why it would be
pointless for the student to continue their current line of research.
Refer them to the paper that reports someone else having done the work
they intend to do, or explain that the equipment or facilities that
the project depends upon will be unavailable. Remember that just
because you know that a research group of thirty staff is working on a
topic that your student is investigating alone, or that your equipment
bid is unlikely to be funded, you don't have to tell the student
immediately. You wouldn't want to discourage them, after all.
Finally, gild the lily. Prof. Hacker is delighted to report that having
been initially sceptical about a student's choice of project and
having suggested that the student spend several months preparing
some alternative proposals, he was able to inform the student that
the student's original proposal was indeed the best.
Directing the Student's Reading
Guidance on reading is vital. Prof. Hacker's aim is to ensure that his
students' reading lists increase in length exponentially.
If ever a student raises an interesting point that Prof. Hacker fears
might lead to a technical discussion, he exclaims ``Ah yes, you really
must read what Whizzbang and Genius have to say about that in their
theses at the University of Obscurity, Darkest Peru in about, oh,
1965''. He makes it quite clear that there is no point discussing the
topic further until the student has read the vital reference (or
better still, five or six of them).
The choice of reference material should be guided by a generate and
test procedure. Prof. Hacker generates appropriate reference material by
looking for titles that share a common word with the student's topic
regardless of context. He filters out inappropriate references by
making sure that all the references he gives are very hard to dig out.
(Never actually produce one to lend to your students, for students are
independent researchers who must not be spoon-fed.) Prof. Hacker prefers
to mention theses done in remote corners of the world and of 1960s
or 70's vintage.
The consistent application of these guidelines should put the student
into a sufficiently desperate state that they will settle on a
completely inappropriate topic when they have to write their thesis
proposal (as discussed in the previous section).
Writing Up
If your students get this far (and if you follow all our guidelines
strictly, we trust that your students will not), you will need to
assist your students and ensure that they never finish writing up. Prof.
Hacker takes care to identify every concept referred to in his
students' work and reminds students that there must be a background
chapter on each concept in the thesis, with accompanying related work
section. As the size of this grows (we suspect factorially, see our
appendix on complexity theory) that is a very off-putting task. If a
student actually attempts the task it is guaranteed to produce a
nervous breakdown, as each of these background chapters then requires
further elaboration in itself, and so on recursively.
Reading
Students will expect that you will read technical papers that they
have written, however badly worded, boring and pointless they may be.
There are two main approaches to preventing students from giving you
things to read. Applied with sufficient vigour they may prevent your
student from ever writing anything at all.
- Do not write comments on anything that the student has written.
This conveys the impression that you have not read the paper without
providing the student with any concrete evidence that could be used
against you. You can make verbal comments. These give the impression
that yes, you did read the paper but you found it too pointless to be
worth searching for a pencil. If you wish to convey the impression
that you read the paper with pencil in hand and thought nothing of the
contents, you can simply dip into the middle of the paper and correct
a minor grammatical error.
- Allow several months to elapse before reading (or claiming to have
read) anything the student writes. This is risky with drafts of
conference papers which may have a deadline for submission, but is an
adequate way to deal with thesis chapters, thesis proposals and other
half-baked nonsense. This method is especially useful when applied
to something that you have asked the student to write.
A caveat: we suggest that beginners apply only one of these two
techniques to any one piece of work. Only the experienced can apply
both and maintain a balance which will not cause an explosion.
Prof. Hacker occasionally takes a more subtle approach, in which comments
are always written but are content free or (better still) ambiguous,
thus leaving the student with the work of incorporating the wrong
ideas into their paper.
If Prof. Hacker makes any comments on style or content, e.g. that some
sentence should be re-written in a particular way, Prof. Hacker tries to
remember to reverse the comments in the next draft. This can be
applied ad infinitum, or at least until he forgets to do it.
Publications
Prof. Hacker believes that it is an excellent idea for a supervisor to
add his or her name to all of a student's published work. This is
justified for two reasons. Firstly, you are doing the student a
favour because you are a more famous researcher and therefore your
name as co-author will mean that the paper is more likely to be
accepted. Secondly, you are the student's supervisor and therefore you
are naturally the inspiration for everything the student publishes.
This will delight the student even further if you have been practising
all the other the techniques proposed here, especially those suggested
in the section on reading.
Extra-Mural Activities
All supervisors should encourage their students to make contacts in other
institutions and to broaden their range of interests. The ideal way to do
this is to ask students to organise a conference or workshop, preferably
on a topic unrelated to their thesis work.
Conclusions
We believe that we have gathered together a collection of techniques
that will be of widespread use in the slowing down and prevention of
the production of theses for Higher Degrees. We have emphasised the
many ways in which a supervisor can contribute, and the great variety
of approaches to the prevention of theses. Finally, we would like to
think that Professor Hacker's supervision techniques were unique to
him but we fear that they are not.
A Letter Regarding Attendance Time
And, yes, the receipient was a
former student (
http://www.carreira.ethz.ch/people/former_members).
(From the web page of
Jinghai Rao (
http://www.cs.cmu.edu/~jinghai/),
brought to my attention by
Vassilis Prevelakis (
http://vp.cs.drexel.edu/).)
189 Things (Not) to Do at or for your Thesis Defense (in no particular order)
From: mnsotn#NoSpam.picard.cs.wisc.edu (Christopher Bovitz)
From The NIH Catalyst, Volume 3, page 23.
Written by Peter Dutton, Jim Lalopoulos, Alison Berube, and Jeff Cohen,
grad students extrordiannaire (#1 - 101).
Appended by Chris Bovitz, grad student grandioso (#102-131).
(#132 from Mary C. Liles).
Patricia Whitson and a few others (#130-...)
- "Ladies and Gentlemen, please rise for the singing of our National
Anthem..."
- Charge 25 cents a cup for coffee.
- "Charge the mound" when a professor beans you with a high fast question.
- Interpretive dance.
- "Musical accompaniment provided by..."
- Stage your own death/suicide.
- Lead the specators in a Wave.
- Have a sing-a-long.
- "You call THAT a question? How the hell did they make you a professor?"
- "Ladies and Gentlemen, as I dim the lights, please hold hands and
concentrate so that we may channel the spirit of Lord Kelvin..."
- Have bodyguards outside the room to "discourage" certain professors
from sitting in.
- Puppet show.
- Group prayer.
- Animal sacrifice to the god of the Underworld.
- Sell T-shirts to recoup the cost of copying, binding, etc.
- "I'm sorry, I can't hear you - there's a banana in my ear!"
- Imitate Groucho Marx.
- Mime.
- Hold a Tupperware party.
- Have a bikini-clad model be in charge of changing the overheads.
- "Everybody rhumba!!"
- "And it would have worked if it weren't for those meddling kids..."
- Charge a cover and check for ID.
- "In protest of our government's systematic and brutal oppression of
minorities..."
- "Anybody else as drunk as I am?"
- Smoke machines, dramatic lighting, pyrotechnics...
- Use a Super Soaker to point at people.
- Surreptitioulsy fill the room with laughing gas.
- Door prizes and a raffle.
- "Please phrase your question in the form of an answer..."
- "And now, a word from our sponsor..."
- Present your entire talk in iambic pentameter.
- Whine piteously, beg, cry...
- Switch halfway through your talk to Pig Latin. Or Finnish Pig Latin.
- The Emperor's New Slides ("only fools can't see the writing...")
- Table dance (you or an exotic dancer).
- Fashion show.
- "Yo, a smooth shout out to my homies..."
- "I'd like to thank the Academy..."
- Minstrel show (blackface, etc.).
- Previews, cartoons, and the Jimmy Fund.
- Pass the collection basket.
- Two-drink minimum.
- Black tie only.
- "Which reminds me of a story - A Black guy, a Chinese guy, and a
Jew walked into a bar..."
- Incite a revolt.
- Hire the Goodyear Blimp to circle the building.
- Release a flock of doves.
- Defense by proxy.
- "And now a reading from the Book of Mormon..."
- Leave Jehovah's Witness pamphlets scattered about.
- "There will be a short quiz after my presentation..."
- "Professor Robinson, will you marry me?"
- Bring your pet boa.
- Tell ghost stories.
- Do a "show and tell".
- Food fight.
- Challenge a professor to a duel. Slapping him with a glove is optional.
- Halftime show.
- "Duck, duck, duck, duck... GOOSE!"
- "OK - which one of you farted?"
- Rimshot.
- Sell those big foam "We're number #1 (sic)" hands.
- Pass out souvenier matchbooks.
- 3-ring defense.
- "Tag - you're it!"
- Circulate a vicious rumor that the Dead will be opening, making sure
that it gets on the radio stations, and escape during all the commotion.
- Post signs: "Due to a computer error at the Registrar's Office, the
original room is not available, and the defense has been relocated to
Made-up non-existent room number)"
- Hang a pinata over the table and have a strolling mariachi band.
- Make each professor remove an item of clothing for each question he asks.
- Rent a billboard on the highway proclaiming "Thanks for passing me
Professors X,Y, and Z" - BEFORE your defense happens.
- Have a make-your-own-sundae table.
- Make committee members wear silly hats.
- Simulate your experiment with a virtual reality system for the
spectators.
- Do a soft-shoe routine.
- Throw a masquerade defense, complete with bobbing for apples and
pin-the-tail-on-the-donkey.
- Use a Greek Chorus to highlight important points.
- "The responsorial psalm can be found on page 124 of the thesis..."
- Tap dance.
- Vaudeville.
- "I'm sorry Professor Smith, I didn't say 'SIMON SAYS any questions?'.
You're out."
- Flex and show off those massive pecs.
- Dress in top hat and tails.
- Hold a pre-defense pep rally, complete with cheerleaders, pep band, and
a bonfire.
- Detonate a small nuclear device in the room. Or threaten to.
- Shadow puppets.
- Show slides of your last vacation.
- Put your overheads on a film strip. Designate a professor to be in
charge of turning the strip when the tape recording beeps.
- Same as #88, but instead of a tape recorder, go around the room
making a different person read the pre-written text for each picture.
- "OK, everybody -
heads down on the desk until you show me you can behave."
- Call your advisor "sweetie".
- Have everyone pose for a group photo.
- Instant replay.
- Laugh maniacally.
- Talk with your mouth full.
- Start speaking in tongues.
- Explode.
- Implode.
- Spontaneously combust.
- Answer every question with a question.
- Moon everyone in the room after you are done.
- Rearrange the chairs into a peace symbol.
- Refer to yourself in the third person, like Julius Caesar did.
- Mention your professor as "my helper."
- Say that you'd like to thank a few people. Pull out the White Pages.
Start reading.
- Advertise it as "pot luck".
- Talk in Klingonese.
- Dress like your favorite character from "Star Trek".
- Ask imaginary helpers to change transparencies; fly off the handle
when they don't.
- Wear a trenchcoat. And nothing else.
- Dress in a Wild West style.
- Go dressed in scuba gear. Use the oxygen tank.
- Preface with the story of your life.
- Wear a swimsuit from the opposite sex: man - wear a bikini, woman -
wear trunks.
- Have bodyguards on your sides as you talk. The bigger, the better.
Have a questioner thrown out "as an example."
- Have someone wheel in a big cake with you in it. Jump out and begin.
- Perform your defense as a Greek tragedy, kill yourself offstage when
you're done.
- Half way through, break down. Go to your professor, curl up on
his or her lap and call him or her "Mommy". Suck your thumb.
- Suddenly develop Turret's Syndrome.
- Suddenly develop the China Syndrome.
- "This defense has been sponsored by the fine people at (your favorite
corporation)..."
- Secede from the U.S. Give yourself political asylum.
- Talk in Canadianese - add an "eh" after every sentence.
- When a professor asks you a question, argue with your imaginary twin
over the final answer.
- Videotape it ahead of time, and get someone set it up to show. Come in
the back and sit there. When your tape is done, ask for questions.
In person.
- Have every person pick a "CB" handle. Enforce their usage. Talk in
CB lingo. End every statement with "good buddy." End every question
with "over."
- Provide party favors. Noisy ones.
- Frequently ask if anyone has to go to the potty.
- Mention that you have to hurry because "Hard Copy" is on in 15 minutes.
- Dress like your school mascot.
- Urge your committee that if they like your defense enough to tell two
friends, and then they'll tell two friends, and so on, and so on...
- Show up in drag accompanied by the Drag Queens you met at last night's
performance and proclaim your thesis presentation will instead
discuss: "Blue Eyeshadow: Our Friend Or Foe?"
From: smitch#NoSpam.alcor.concordia.ca (Sidney N. Mitchell)
- Plead the fifth ammendment if you can't answer a question.
- Keep your back to the committee during the presentation and
defense phases.
- Answer only questions that begin with sir and end with sir. (tell
your committe this beforehand).
- Limit the number of questions that you will allow, and then when
the limit is almost reached, go into aerobics terminology...
four more...three more...two more..and...rest.
- Ignore the committee and say "I think that young man/lady at the back
has a question".
- Have your parents call your committee members repeatedly the week
before your defense to tell them how expensive it is putting a
child through graduate school etc.
- At the defense, have your parents sit directly behind your committee.
- Burp, pass gas, scratch (anywhere repeatedly), and pick your nose.
- "Laugh, will you? Well, they laughed at Galileo, they laughed at
Einstein..."
- Hand out 3-D glasses.
- "I'm rubber, you're glue..."
- Go into labor (especially for men).
- Give your entire speech in a "Marvin Martian" accent.
- "I don't know - I didn't write this."
- Before your defense, build trapdoors underneath all the seats.
- Swing in through the window, yelling a la Tarzan.
- Lock the department head and his secretary out of the defense room. And
the coffee lounge, the department office, the copy room, and the mail
room. Heck, lock them out of the building. And refuse to sell them
stamps.
(NOTE: This is an inside gripe, based on conditions that existed in
the ME department at WPI while we were there. Sorry.)
- Roll credits at the end. Include a "key grip", and a "best boy".
- Hang a disco ball in the center of the room. John Travolta pose optional.
- Invite the homeless.
- "I could answer that, but then I'd have to kill you"
- Hide.
- Get a friend to ask the first question. Draw a blank-loaded gun and
"shoot" him. Have him make a great scene of dying (fake blood helps).
Turn to the stunned audience and ask "any other wise-ass remarks?"
- Same as #154, except use real bullets.
- "Well, I saw it on the internet, so I figured it might be a good idea..."
- Wear clown makeup, a clown wig, clown shoes, and a clown nose. And
nothing else.
- Use the words "marginalized", "empowerment", and "patriarchy".
- Play Thesis Mad Libs.
- Try to use normal printed paper on the overhead projector.
- Do your entire defense operatically.
- Invite your parents. Especially if they are fond of fawning over you.
("We always knew he was such an intelligent child")
- Flash "APPLAUSE" and "LAUGHTER" signs.
- Mosh pit.
- Have cheerleaders. ("Gimme an 'A'!!")
- Bring Howard Cosell out of retirement to do color commentary.
- "I say Hallelujah, brothers and sisters!"
- Claim political asylum.
- Traffic reports every 10 minutes on the 1's.
- Introduce the "Eyewitness Thesis Team". Near the end of your talk, cut
to Jim with sports and Alison with the weather.
- Live radio and TV coverage.
- Hang a sign that says "Thank you for not asking questions"
- Bring a microphone. Point it at the questioner, talk-show style.
- Use a TelePromTer
- "Take my wife - please!"
- Refuse to answer questions unless they phrase the question as a limerick.
- Have everyone bring wine glasses. When they clink the glasses with a
spoon, you have to kiss your thesis. Or your advisor.
- Offer a toast.
- Firewalk.
- Start giving your presentation 15 minutes early.
- Play drinking thesis games. Drink for each overhead. Drink for each
question. Chug for each awkward pause. This goes for the audience
as well.
- Swoop in with a cape and tights, Superman style.
- "By the power of Greyskull..."
- Use any past or present Saturday Night Live catchphrase. Not.
- Stand on the table.
- Sell commercial time for your talk and ad space on your overheads.
- Hold a raffle.
- "You think this defense was bad? Let me read this list to show you
what I COULD have done..."
(FINAL NOTE: Depending on the subject of your thesis, some of these things,
such as tap dance, virtual reality, or reading from the Book of Mormon
might be entirely appropriate, of course.)
(FINAL FINAL NOTE: Circulate this list freely if you'd like, but please
remember to credit Peter, Jim, and Alison as the major authors.)
Preparing a Poster Presentation
How to Setup a Brilliant Poster Stand
Elements that make up a good poster stand:
- A visually striking poster
- A physical object related to the work (physical demo, mascot)
- An auto-running presentation or demo running on a PC
- A leaflet to take away
- Related publications (papers, book)
- A knowledgeable presenter interested on the topic
Drafting the Poster Advice
- Print your poster on A0 paper (smaller only if the organizers specify it)
- Prefer a mat to a glossy surface
- Avoid extended text runs
- Use large (sans-serif) fonts
- Liberally use graphical elements
- Clipart
- Pictures
- Diagrams
- Graphs
- Rotated text
- Markup the poster areas using large color expanses
- Try to come up with an original and interesting layout
- Make the graphics of the poster tell a story, using elements such as arrows and pictures
- Consider providing a mechanism for obtaining feedback
- Include the contributor's names and contact information (including web site)
- Don't forget to mention your sponsor (if any)
Poster Examples: Good Use of Color
The following are some good examples of posters that use color to
stand out from the crowd.
Click on the images for a larger version.
(EURO XX 2004)
(EURO XX 2004)
(MSAD 2004)
Poster Examples: Liberal Use of Graphical Elements
The following are some good examples of posters that use graphics to
bring their message across.
Click on the images for a larger version.
(EURO XX 2004)
(EURO XX 2004)
(MSAD 2004)
(ICSE 2006)
(ICSE 2008)
Poster Examples: Graphics that Tell a Story
The following are some good examples of posters that use graphics
to guide the reader through the story.
Click on the images for a larger version.
See also the
interesting layout examples.
(EURO XX 2004)
(EURO XX 2004)
(EURO XX 2004)
Poster Examples: Interesting Layout
The following are some good examples of posters with an
interesting layout.
Click on the images for a larger version.
The layout is self-referential. The work describes the use of
Voronoi diagrams (
http://en.wikipedia.org/wiki/Voronoi_diagram)
for vote districting, and the poster layout follows the same scheme.
This poster won the conference's best poster award.
(EURO XX 2004)
(MSAD 2004)
This slide (although a bit crowded) uses numbering and nested
layouts to guide the reading order.
(ICSE 2006)
Poster Examples: Adding Hardware
The following are some good examples of posters that have additional
"hardware" elements pasted on them.
Click on the images for a larger version.
The slide includes a folder with a copies of it, and an area for adding
comments.
(ICSE 2006)
Another approach for collecting comments: a notepad and a pen hanging on
a pin
(ICSE 2006)
This slide has copies and business cards attached to a paper fastener.
(ICSE 2006)
This slide includes a blank area where a projector shows a demo of the software.
(ICSE 2008)
Poster Examples: Making do Without a Big Format Printer
You don't necessarily need access to a big-format printer to
create a good poster.
If you find yourself stranded without suitable hardware
(e.g. wanting to create a poster on the spot at the conference)
you can improvise by assembling printed A4 sheets,
or even by writing and drawing your poster in flip-chart paper.
Here are two examples.
Click on the images for a larger version.
This poster is assembled mainly from printed A4 sheets, placed in an interesting
pattern.
(SPLASH 2012)
This poster is written by hand on flip-chart and A4 sheets.
The placement of the A4 sheets is used to indicate how they relate to
the larger flip-chart sheets.
(SPLASH 2012)
Poster Counterexamples
The following are some counterexamples of the poster design techniques
I described.
To protect the guilty,
you can not click on the images for a larger version.
The paper's pages printed on an A0 sheet
The paper typeset and printed on an A0 sheet;
this is worse the previous example, because our eye can't
follow printed lines spanning half a metre.
Too much and small text, not enough color (EURO XX 2004)
Too much information (text and small diagrams), glossy paper (EURO XX 2004)
Too much and small text (EURO XX 2004)
Stand Examples
The following are some good examples of stands following the guidelines
I described.
Click on the images for a larger version.
The perfect setup: poster, book, physical demo, laptop, presentation.
The board allows the demonstration of
Voronoi diagrams (
http://en.wikipedia.org/wiki/Voronoi_diagram)
using nails and rubber bands.
This poster won the conference's best poster award.
(EURO XX)
A live hardware demo (MSAD 2004)
Closeup of the live hardware demo (MSAD 2004)
The perfect packing for the demo (MSAD 2004)
Packing List
Bring with you the following items:
- The poster (protected in a sturdy cylindrical container).
Seal the container's covers with adhesive tape, because they can fall off
in the airport handling.
- Double-sided adhesive tape and scissors, pins, or Blue-tackTM
- The physical object, suitably protected
- Business cards with up to date contact information
- Promotional leaflet
- A laptop for running the demo
- The demo on backup media (CD-ROM, USB stick)
- Publications to distribute (e.g. paper reprints)
- Publications to display (e.g. a book)
- Giveaways: posters, pens, buttons, candy, CDs, T-shirts
- An attire appropriate for the occasion - consider wearing a
T-shirt with the research project's logo
- Drinking water
- Reading material, to pass your time if attendance is low
Don't forget to update your web site, before you leave.
Keep copies of the promotional material (leaflet, publication)
in a web-accessible directory.
You may find them useful, if you need to print additional copies
from an Internet cafe, or a public PC room.
Recommended C Style and Coding Standards
Author List
L.W. Cannon
R.A. Elliott
L.W. Kirchhoff
J.H. Miller
J.M. Milner
R.W. Mitze
E.P. Schan
N.O. Whittington
Bell Labs
Henry Spencer
Zoology Computer Systems
University of Toronto
David Keppel
EECS, UC Berkeley
CS&E, University of Washington
Mark Brader
SoftQuad Incorporated
Toronto
Diomidis Spinellis
Department of Technology and Management
Athens University of Economics and Business
Athens, Greece
dds@aueb.gr (mailto:dds@aueb.gr)
Introduction
This document
is a modified version of a document from
a committee formed at AT&T's Indian Hill labs to establish
a common set of coding standards and recommendations for the
Indian Hill community.
The scope of this work is C coding style.
Good style should encourage consistent layout, improve
portability, and reduce errors.
This work does not cover functional organization, or general
issues such as the use of
goto
s.
We
have tried to combine previous work [1,6,8] on C style into a uniform
set of standards that should be appropriate for any project using C,
although parts are biased towards particular systems.
The opinions in this document
do not reflect the opinions of all authors.
Please reflect comments and suggestions to
the last author.
Of necessity, these standards cannot cover all situations.
Experience and informed judgement count for much.
Programmers who encounter unusual situations should
consult either
experienced C programmers or code written by experienced C
programmers (preferably following these rules).
Ultimately, the goal of these standards is to
increase portability, reduce maintenance, and above all
improve clarity.
Many of the style choices here are somewhat arbitrary.
Mixed coding style is harder to maintain than bad coding style.
When changing existing code it is better to conform to the
style (indentation, spacing, commenting, naming conventions)
of the existing code than it is to blindly follow this document.
This is particularly relevant when coding Microsoft Windows programs
which depend on the Microsoft style of declarations and coding.
``To be clear is professional; not to be clear
is unprofessional.'' - Sir Ernest Gowers.
File Organization
A file consists of various sections that should be separated by
several blank lines.
Although there is no maximum length limit for source files,
files with more than about 1000 lines are cumbersome to deal with.
The editor may not have enough temp space to edit the file,
compilations will go more slowly,
etc.
Many rows of asterisks, for example,
present little information compared to the time it takes to scroll past,
and are discouraged.
Lines longer than 79 columns are not handled well by all terminals
or windows
and should be avoided if possible.
Excessively long lines which result from deep indenting are often
a symptom of poorly-organized code.
File names are made up of a base name,
and an optional period and suffix.
The first character of the name should be a letter
and all characters (except the period)
should be lower-case letters and numbers.
The base name should be eight or fewer characters and the
suffix should be three or fewer characters
(four, if you include the period).
These rules apply to both program files and
default files used and produced by the program
(e.g., ``rogue.sav'').
Some compilers and tools require certain suffix conventions for names
of files [5].
The following suffixes are required:
-
C source file names must end in .c
-
MS-DOS, OS/2 and NT assembler source file names must end in .asm
-
Unix assembler source file names must end in .s
The following conventions are universally followed:
-
MS-DOS, OS/2 and NT relocatable object file names end in .obj
-
Unix relocatable object file names end in .o
-
Include header file names end in .h.
-
Yacc source file names end in .y
-
Lex source file names end in .l
In addition,
it is conventional to use ``Makefile'' for the
control file for make (for systems that support it)
and ``README'' for a summary of the contents
of the directory or directory tree.
The suggested order of sections for a program file is as follows:
-
First in the file is a prologue that tells what is in that file.
A description of the purpose of the objects in the files (whether
they be functions, external data declarations or definitions, or
something else) is more useful than a list of the object names.
The prologue also contains author(s),
revision control information, copyright message, references, etc.
/*
* bitmap -- Routines that operate on square bitmaps
*
* (C) Copyright Yoyodyne Enterprises. All rights reserved.
*
* Author: John Smith
*
* $Header$
*
*/
-
Any header file includes should be next.
If the include is for a non-obvious reason,
the reason should be commented.
In most cases, system include files like stdio.h should be
included before user include files.
-
Any defines and typedefs that apply to the file as a whole are next.
One normal order is to have
``constant'' macros first,
then ``function'' macros, then typedefs and enums.
-
Next come the global (external) data declarations,
usually in the order: externs, non-static globals, static globals.
If a set of defines applies to a particular piece of global data
(such as a flags word), the defines should be immediately after
the data declaration or embedded in structure declarations,
indented to put the defines one level
deeper than the first keyword of the declaration to which they apply.
-
The functions come last,
and should be in some sort of meaningful order.
Like functions should appear together.
A
``depth-first'' (functions defined as soon as possible
before their calls)
is preferred over
a ``breadth-first''
approach (functions on a similar level of abstraction together).
Considerable judgement is called for here.
If defining large numbers of essentially-independent utility
functions, consider alphabetical order.
Header files are files that are included in other files prior to
compilation by the C preprocessor.
Some, such as stdio.h, are defined at the system level
and must included by any program using the standard I/O library.
Header files are also used to contain data declarations and defines
that are needed by more than one program.
Header files should be functionally organized,
i.e., declarations for separate subsystems
should be in separate header files.
Also, if a set of declarations is likely to change when code is
ported from one machine to another, those declarations should be
in a separate header file.
Avoid private header filenames that are the same
as library header filenames.
The statement
#include
"""math.h"""
will include the standard library math header file
if the intended one is not
found in the current directory.
If this is what you want to happen,
comment this fact.
Don't use absolute pathnames for header files.
Use the
<name>
construction for getting them from a standard
place, or define them relative to the current directory.
The ``include-path'' option of the C compiler
(-I on many systems)
is the best way to handle
extensive private libraries of header files; it permits reorganizing
the directory structure without having to alter source files.
Header files that declare functions or external variables should be
included in the file that defines the function or variable.
That way, the compiler can do type checking and the external
declaration will always agree with the definition.
Defining variables in a header file is often a poor idea.
Frequently it is a symptom of poor partitioning of code between files.
Also, some objects like typedefs and initialized data definitions
cannot be seen twice by the compiler in one compilation.
On some systems, repeating uninitialized declarations
without the extern keyword also causes problems.
Repeated declarations can happen if include files are nested
and will cause the compilation to fail.
Header files should not be nested.
The prologue for a header file should, therefore, describe what
other headers need to be #included for the header to be functional.
In extreme cases, where a large number of header files are to be
included in several different source files,
it is acceptable to put all common #includes in one include file.
It is common to put the following into each
.h
file
to prevent accidental double-inclusion.
#ifndef EXAMPLE_H
#define EXAMPLE_H
/* body of example.h file */
/* ... */
#endif /* EXAMPLE_H */
This double-inclusion mechanism should not be relied upon,
particularly to perform nested includes.
It is conventional to have a file called ``README'' to document both
``the bigger picture'' and issues for the program as a whole.
For example, it is common to include a list of all conditional
compilation flags and what they mean.
It is also common to list files that are machine dependent, etc.
Comments
``When the code and the comments disagree,
both are probably wrong.'' - Norm Schryer
The comments should describe what is happening,
how it is being done,
what parameters mean,
which globals are used and which are modified,
and any restrictions or bugs.
Avoid, however, comments that are clear from the code,
as such information rapidly gets out of date.
Comments that disagree with the code are of negative value.
Short comments should be
what comments, such as ``compute mean value'',
rather than how comments such as
``sum of values divided by n''.
C is not assembler;
putting a comment at the top of a 3-10 line section telling what it
does overall is often more useful than a comment on each line
describing micrologic.
Comments should justify offensive code.
The justification should be that something bad will happen if
unoffensive code is used.
Just making code faster is not enough to rationalize a hack;
the performance must be shown to be unacceptable
without the hack.
The comment should explain the unacceptable behavior and describe why
the hack is a ``good'' fix.
Comments that describe data structures, algorithms, etc., should be
in block comment form with the opening
/*
in columns 1-2, a
*
in column 2 before each line of comment text,
and the closing
*/
in columns 2-3.
/*
* Here is a block comment.
* The comment text should be tabbed or spaced over uniformly.
* The opening slash-star and closing star-slash are alone on a line.
*/
Note that grep '^. *' will catch all block comments in the
file.
Some automated program-analysis
packages use different characters before comment lines as
a marker for lines with specific items of information.
In particular, a line with a
`-
'
in a comment preceding a function
is sometimes assumed to be a one-line summary of the function's
purpose.
Very long block comments such as drawn-out discussions and copyright
notices often start with
/*
in columns 1-2, no leading
*
before lines of text, and the closing
*/
in columns 1-2.
Block comments inside a function are appropriate, and
they should be tabbed over to the same tab setting as the code that
they describe.
One-line comments alone on a line should be indented to the tab
setting of the code that follows.
if (argc > 1) {
/* Get input file from command line. */
if (freopen(argv[1], "r", stdin) == NULL) {
perror (argv[1]);
}
}
Very short comments may appear on the same line as the code they
describe,
and should be tabbed over to separate them from the statements.
If more than one short comment appears in a block of code
they should all be tabbed to the same tab setting.
if (a == EXCEPTION) {
b = TRUE; /* special case */
} else {
b = isprime(a); /* works only for odd a */
}
Declarations
Global declarations should begin in column 1.
All external data declaration should be preceded by the
extern
keyword.
If an external variable is an array that is defined with an explicit
size, then the array bounds must be repeated in the extern
declaration unless the size is always encoded in the array
(e.g., a read-only character array that is always null-terminated).
Repeated size declarations are
particularly beneficial to someone picking up code written by another.
The ``pointer'' qualifier,
`*
',
should be with the variable name rather
than with the type.
instead of
which is wrong, since
`
t
'
and
`
u
'
do not get declared as pointers.
Unrelated declarations, even of the same type,
should be on separate lines.
A comment describing the role of the object being declared should be
included, with the exception
that a list of
#define
d
constants do not need comments
if the constant names are sufficient documentation.
The names, values, and comments
are usually
tabbed so that they line up underneath each other.
Use the tab character rather than blanks (spaces).
For structure and union template declarations,
each element should be alone on a line
with a comment describing it.
The opening brace
({
)
should be on the same line as the structure
tag, and the closing brace
(}
)
should be in column 1.
struct boat {
int wllength; /* water line length in meters */
int type; /* see below */
long sailarea; /* sail area in square mm */
};
/* defines for boat.type */
#define KETCH (1)
#define YAWL (2)
#define SLOOP (3)
#define SQRIG (4)
#define MOTOR (5)
These defines are sometimes put right after the declaration of
type
,
within the
struct
declaration, with enough tabs after the
`#
'
to indent
define
one level more than the structure member declarations.
When the actual values are unimportant,
the
enum
facility is better.
enum bt { KETCH=1, YAWL, SLOOP, SQRIG, MOTOR };
struct boat {
int wllength; /* water line length in meters */
enum bt type; /* what kind of boat */
long sailarea; /* sail area in square mm */
};
Any variable whose initial value is important should be
explicitly initialized, or at the very least should be commented
to indicate that C's default initialization to zero
is being relied upon.
The empty initializer,
``{}
'',
should never be used.
Structure
initializations should be fully parenthesized with braces.
Constants used to initialize longs should be explicitly long.
Use capital letters; for example two long
``2l
''
looks a lot like
``21
'',
the number twenty-one.
int x = 1;
char *msg = "message";
struct boat winner[] = {
{ 40, YAWL, 6000000L },
{ 28, MOTOR, 0L },
{ 0 },
};
In any file which is part of a larger whole rather than a self-contained
program, maximum use should be made of the
static
keyword to make functions and variables local to single files.
Variables in particular should be accessible from other files
only when there is a clear
need that cannot be filled in another way.
Such usage should be commented to make it clear that another file's
variables are being used; the comment should name the other file.
If your debugger hides static objects you need to see during
debugging,
declare them as
STATIC
and #define
STATIC
as needed.
The most important types should be highlighted by typedeffing
them, even if they are only integers,
as the unique name makes the program easier to read (as long as there
are only a few things typedeffed to integers!).
Avoid typedeffing structures and unions, as this hides the fact that
an object is composite from the code reader.
The return type of functions should always be declared.
Always use function prototypes.
One common mistake is to omit the
declaration of external math functions that return
double
.
The compiler then assumes that
the return value is an integer and the bits are dutifully
converted into a (meaningless) floating point value.
``C takes the point of view that the programmer is always right.'' - Michael DeCorte
Function Declarations
Each function should be preceded by a block comment prologue
that gives a short description of what the function does
and (if not clear) how to use it.
Discussion of non-trivial design decisions and
side-effects is also appropriate.
Avoid duplicating information clear from the code.
The function return type should be alone on a line,
(optionally) indented one stop.
``Tabstops'' can be blanks (spaces) inserted by your editor in clumps
of 2, 4, or 8.
Do not default to
int
;
if the function does not return a value then it should be given
return type void.
If the value returned requires a long explanation,
it should be given in the prologue;
otherwise it can be on the same line as the return type, tabbed over.
The function name
(and the formal parameter list)
should be alone on a line, in column 1.
Destination (return value) parameters
should generally be first (on the left).
All local declarations and code within the function body
should be tabbed over one stop.
The opening brace of the function body should be alone on a line
beginning in column 1.
Each parameter should be declared (do not default to
int
).
In general the role of each variable in the function should be described.
This may either be done in the function comment or, if each declaration
is on its own line, in a comment on that line.
Loop counters called ``i'', string pointers called ``s'',
and integral types called ``c'' and used for characters
are typically excluded.
If a group of functions all have a like parameter or local variable,
it helps to call the repeated variable by the same name in all
functions.
(Conversely, avoid using the same name for different purposes in
related functions.)
Like parameters should also appear in the same place in the various
argument lists.
Comments for parameters and local variables should be
tabbed so that they line up underneath each other.
Local variable declarations should be separated
from the function's statements by a blank line.
Be careful when you use or declare functions
that take a variable number of arguments (``varargs'').
Always use the ``stdarg.h'' header definitions and do not rely on item
order on the stack.
If the function uses any external variables (or functions)
that are not declared globally in the file,
these should have their
own declarations in the function body using the
extern
keyword.
Avoid local declarations that override declarations at higher levels.
In particular, local variables
should not be redeclared in nested blocks.
Although this is valid C, the potential confusion is
enough that
lint will complain about it when given the -h option.
Whitespace
int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell\
o, world!\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);}
- Dishonorable mention, Obfuscated C Code Contest, 1984.
Author requested anonymity.
Use vertical and horizontal whitespace generously.
Indentation and spacing should reflect the block structure of the code;
e.g.,
there should be at least 2 blank lines between the end of one function
and the comments for the next.
A long string of conditional operators should be split
onto separate lines.
if (foo->next==NULL && totalcount<needed && needed<=MAX_ALLOT
&& server_active(current_input)) { ...
Might be better as
if (foo->next == NULL
&& totalcount < needed && needed <= MAX_ALLOT
&& server_active(current_input))
{
...
Similarly, elaborate
for
loops should be split onto different lines.
for (curr = *listp, trail = listp;
curr != NULL;
trail = &(curr->next), curr = curr->next )
{
...
Other complex expressions, particularly those using the ternary
?:
operator,
are best split on to several lines, too.
c = (a == b)
? d + f(a)
: f(b) - d;
Keywords that are followed by expressions in parentheses
should be separated from the left parenthesis by a blank.
(The
sizeof
operator is an exception.)
Blanks should also appear after commas in argument lists to help
separate the arguments visually.
On the other hand, macro definitions with arguments must
not have a blank between the name and the left parenthesis,
otherwise the C preprocessor will not recognize the argument list.
Examples
/*
* Determine if the sky is blue by checking that it isn't night.
* CAVEAT: Only sometimes right. May return TRUE when the answer
* is FALSE. Consider clouds, eclipses, short days.
* NOTE: Uses `hour' from `hightime.c'. Returns `int' for
* compatibility with the old version.
*/
int /* true or false */
skyblue(void)
{
extern int hour; /* current hour of the day */
return (hour >= MORNING && hour <= EVENING);
}
/*
* Find the last element in the linked list
* pointed to by nodep and return a pointer to it.
* Return NULL if there is no last element.
*/
node_t *
tail(node_t *nodep)
{
node_t *np; /* advances to NULL */
node_t *lp; /* follows one behind np */
if (nodep == NULL)
return (NULL);
for (np = lp = nodep; np != NULL; lp = np, np = np->next)
; /* VOID */
return (lp);
}
Simple Statements
There should be only one statement per line unless the statements are
very closely related.
case FOO: oogle (zork); boogle (zork); break;
case BAR: oogle (bork); boogle (zork); break;
case BAZ: oogle (gork); boogle (bork); break;
The null body of a
for
or
while
loop should be alone on a line and commented
so that it is clear that the null body is intentional
and not missing code.
while (*dest++ = *src++)
; /* VOID */
Do not default the test for non-zero, i.e.
is better than
even though
FAIL
may have the value 0 which C considers to be false.
An explicit test will help you out later when somebody decides that a
failure return should be -1 instead of 0.
Explicit comparison should be used even if the comparison value will
never change; e.g.,
``
if (!(bufsize % sizeof(int)))
''
should be written instead as
``
if ((bufsize % sizeof(int)) == 0)
''
to reflect the
numeric (not
boolean) nature of the test.
A frequent trouble spot is using
strcmp
to test for string equality, where the result should
never
ever be defaulted.
The preferred approach is to define a macro
STREQ.
#define STREQ(a, b) (strcmp((a), (b)) == 0)
The non-zero test is often defaulted for predicates
and other functions or expressions which meet the following
restrictions:
-
Evaluates to 0 for false, nothing else.
-
Is named so that the meaning of (say) a `true' return
is absolutely obvious.
Call a predicate isvalid or valid, not checkvalid.
It is common practice to declare a boolean type
``bool
''
in a global include file.
The special names improve readability immensely.
typedef int bool;
#define FALSE 0
#define TRUE 1
or
typedef enum { NO=0, YES } bool;
Even with these declarations,
do not check a boolean value for equality with 1 (TRUE, YES, etc.);
instead test for inequality with 0 (FALSE, NO, etc.).
Most functions are guaranteed to return 0 if false,
but only non-zero if true.
Thus,
if (func() == TRUE) { ...
must be written
if (func() != FALSE) { ...
It is even better (where possible) to rename the function/variable or
rewrite the expression so that the meaning is obvious without a
comparison to true or false
(e.g., rename to
isvalid()).
There is a time and a place for embedded assignment statements.
In some constructs there is no better way to accomplish the results
without making the code bulkier and less readable.
while ((c = getchar()) != EOF) {
process the character
}
The
++
and
--
operators count as assignment statements.
So, for many purposes, do functions with side effects.
Using embedded assignment statements to improve run-time performance
is also possible.
However, one should consider the tradeoff between increased speed and
decreased maintainability that results when embedded assignments are
used in artificial places.
For example,
should not be replaced by
even though the latter may save one cycle.
In the long run the time difference between the two will
decrease as the optimizer gains maturity, while the difference in
ease of maintenance will increase as the human memory of what's
going on in the latter piece of code begins to fade.
Goto statements should be used sparingly, as in any well-structured
code.
The main place where they can be usefully employed is to break out
of several levels of
switch
,
for
,
and
while
nesting,
although the need to do such a thing may indicate
that the inner constructs should be broken out into
a separate function, with a success/failure return code.
for (...) {
while (...) {
...
if (disaster)
goto error;
}
}
...
error:
clean up the mess
When a
goto
is necessary the accompanying label should be alone
on a line and tabbed one stop to the left of the
code that follows.
The goto should be commented (possibly in the block header)
as to its utility and purpose.
Continue
should be used sparingly and near the top of the loop.
Break
is less troublesome.
Compound Statements
A compound statement is a list of statements enclosed by braces.
There are many common ways of formatting the braces.
Please be consistent with our local standard.
When editing someone else's code, always use the style
used in that code.
control {
statement;
statement;
}
The style above is called ``K&R style'', and is
preferred if you haven't already got a favorite.
With K&R style, the
else
part of an
if-else statement
and the
while
part of a do-while statement
should appear on the same line as the close brace.
With most other styles, the braces are always alone on a line.
When a block of code has several labels
(unless there are a lot of them),
the labels are placed on separate lines.
The fall-through feature of the C switch statement,
(that is, when there is no
break
between a code segment and the next
case
statement)
must be commented for future maintenance.
A lint-style comment/directive is best.
switch (expr) {
case ABC:
case DEF:
statement;
break;
case UVW:
statement;
/*FALLTHROUGH*/
case XYZ:
statement;
break;
}
Here, the last
break
is unnecessary, but is required
because it prevents a fall-through error if another
case
is added later after the last one.
The
default
case, if used, should be last and does not require a
break
if it is last.
Whenever an
if-else
statement has a compound statement for either the
if
or
else
section, the statements of both the
if
and
else
sections should both be enclosed in braces
(called fully bracketed syntax).
if (expr) {
statement;
} else {
statement;
statement;
}
Braces are also essential in
if-if-else sequences
with no second
else such as the following,
which will be parsed incorrectly if the brace after
(ex1)
and its mate are omitted:
if (ex1) {
if (ex2) {
funca();
}
} else {
funcb();
}
An if-else with else if should
be written with the else conditions left-justified.
if (STREQ (reply, "yes")) {
statements for yes
...
} else if (STREQ (reply, "no")) {
...
} else if (STREQ (reply, "maybe")) {
...
} else {
statements for default
...
}
The format then looks
like a generalized
switch statement and the
tabbing reflects the switch between exactly one of several
alternatives rather than a nesting of statements.
Do-while
loops should always have braces around the body.
Forever loops should be coded using the
for
(;;)
construct, and not the
while
(1)
construct.
Do not use braces for single statement blocks.
Sometimes an
if
causes an unconditional control transfer
via
break
,
continue
,
goto
,
or
return
.
The
else
should be implicit and the code should not be indented.
if (level > limit)
return (OVERFLOW)
normal();
return (level);
The ``flattened'' indentation tells the reader that the boolean test
is invariant over the rest of the enclosing block.
Operators
Unary operators should not be separated from their single operand.
Generally, all binary operators
except
`.
'
and
`->
'
should be separated from their operands by blanks.
Some judgement is called for in the case of complex expressions,
which may be clearer if the ``inner'' operators are not surrounded
by spaces and the ``outer'' ones are.
If you think an expression will be hard to read,
consider breaking it across lines.
Splitting at the lowest-precedence operator near the break is best.
Since C has some unexpected precedence rules,
expressions involving mixed operators should be parenthesized.
Too many parentheses, however,
can make a line harder to read
because humans aren't good at parenthesis-matching.
There is a time and place for the binary comma operator,
but generally it should be avoided.
The comma operator is most useful
to provide multiple initializations or operations,
as in for statements.
Complex expressions,
for instance those with nested ternary
?:
operators,
can be confusing and should be avoided if possible.
There are some macros like
getchar
where both the ternary
operator and comma operators are useful.
The logical expression operand before the
?:
should be parenthesized and both return values must be the same type.
Naming Conventions
Individual projects will no doubt have their own naming conventions.
There are some general rules however.
-
Names with leading and trailing underscores are reserved for system
purposes and should not be used for any user-created names.
Most systems use them for names
that the user should not have to know.
If you must have your own private identifiers,
begin them with a letter or two identifying the
package to which they belong.
-
#define constants should be in all CAPS.
-
Enum constants are all CAPS
-
Function, typedef, and variable names, as well as struct, union, and
enum tag names should be in lower case.
-
Many macro ``functions'' are in all CAPS.
Some macros (such as
getchar
and
putchar
)
are in lower case
since they may also exist as functions.
Lower-case macro names are only acceptable if the macros behave
like a function call,
that is, they evaluate their parameters exactly once and
do not assign values to named parameters.
Sometimes it is impossible to write a macro that behaves like a
function even though the arguments are evaluated exactly once.
-
Avoid names that differ only in case, like foo and Foo.
Similarly, avoid foobar and foo_bar.
The potential for confusion is considerable.
-
Similarly, avoid names that look like each other.
On many terminals and printers, `l', `1' and `I' look quite similar.
A variable named `l' is particularly bad because it looks so much like
the constant `1'.
In general, global names (including
enum
s)
should have a
common prefix identifying the module that they belong with.
Globals may alternatively be grouped in a global structure.
Typedeffed names often have
``_t
''
appended to their name.
Avoid names that might conflict with various standard
library names.
Some systems will include more library code than you want.
Also, your program may be extended someday.
Also note the following (from [15]):
``Length is not a virtue in a name;
clarity of expression
is.
A global variable rarely used may deserve a long name,
maxphysaddr
say. An array index used on every line of a loop needn't be named
any more elaborately than
i
.
Saying
index
or
elementnumber
is more to type (or calls upon your text editor) and obscures
the details of the computation.
When the variable names are huge, it's harder to see what's going on.
This is partly a typographic issue; consider
for(i=0 to 100)
array[i]=0
vs.
for(elementnumber=0 to 100)
array[elementnumber]=0;
The problem gets worse fast with real examples.
Indices are just notation, so treat them as such.''
``Pointers also require sensible notation.
np
is just as mnemonic as
nodepointer
if
you consistently use a naming convention from which
np
means ``node pointer'' is easily derived.''
As in all other aspects of readable programming, consistency is important
in naming. If you call one variable
maxphysaddr
,
don't call its cousin
lowestaddress
.''
``Finally, I prefer minimum-length but maximum-information names, and
then let the context fill in the rest.
Globals, for instance, typically have little context when they are used,
so their names need to be relatively evocative. Thus I say
maxphysaddr
(not
MaximumPhysicalAddress
)
for a global variable, but
np
not
NodePointer
for a pointer locally defined and used.
This is largely a matter of taste, but taste is relevant to clarity.
I eschew embedded capital letters in names; to my prose-oriented eyes,
they are too awkward to read comfortably. They jangle like bad typography.''
``Procedure names should reflect what they do; function names should
reflect what they
return.
Functions are used in expressions, often in things like
if
's,
so they need to read appropriately.
is unhelpful because we can't deduce whether checksize returns true on
error or non-error; instead
makes the point clear and makes a future mistake in using the routine
less likely.''
Constants
Numerical constants should not be coded directly.
The
#define
feature of the C preprocessor should be used to
give constants meaningful names.
Symbolic constants make the code easier to read.
Defining the value in one place
also makes it easier to administer large programs since the
constant value can be changed uniformly by changing only the
define.
The enumeration data type is a better way to declare variables
that take on only a discrete set of values, since
additional type checking is often available.
At the very least, any directly-coded numerical constant must have a
comment explaining the derivation of the value.
Constants should be defined consistently with their use;
e.g. use
540.0
for a float instead of
540
with an implicit float cast.
There are some cases where the constants 0 and 1 may appear as
themselves instead of as defines.
For example if a
for
loop indexes through an array, then
for (i = 0; i < ARYBOUND; i++)
is reasonable while the code
door_t *front_door = opens(door[i], 7);
if (front_door == 0)
error("can't open %s\n", door[i]);
is not.
In the last example
front_door
is a pointer.
When a value is a pointer it should be compared to
NULL
instead of 0.
NULL
is available
as part of the standard I/O library's header file
stdio.h
and
stdlib.h.
Even simple values like 1 or 0 are often better expressed using
defines like
TRUE
and
FALSE
(sometimes
YES
and
NO
read better).
Simple character constants should be defined as character literals
rather than numbers.
Non-text characters are discouraged as non-portable.
If non-text characters are necessary,
particularly if they are used in strings,
they should be written using a escape character of three octal digits
rather than one
(e.g.,
`\007
').
Even so, such usage should be considered machine-dependent and treated
as such.
Macros
Complex expressions can be used as macro parameters,
and operator-precedence problems can arise unless all occurrences of
parameters have parentheses around them.
There is little that can be done about the problems caused by side
effects in parameters
except to avoid side effects in expressions (a good idea anyway)
and, when possible,
to write macros that evaluate their parameters exactly once.
There are times when it is impossible to write macros that act exactly
like functions.
Some macros also exist as functions (e.g.,
getc
and
fgetc
).
The macro should be used in implementing the function
so that changes to the macro
will be automatically reflected in the function.
Care is needed when interchanging macros and functions since function
parameters are passed by value, while macro parameters are passed by
name substitution.
Carefree use of macros requires that they be declared carefully.
Macros should avoid using globals, since the global name may be
hidden by a local declaration.
Macros that change named parameters (rather than the storage they
point at) or may be used as the left-hand side of an assignment
should mention this in their comments.
Macros that take no parameters but reference variables,
are long,
or are aliases for function calls
should be given an empty parameter list, e.g.,
#define OFF_A() (a_global+OFFSET)
#define BORK() (zork())
#define SP3() if (b) { int x; av = f (&x); bv += x; }
Macros save function call/return overhead,
but when a macro gets long, the effect of the call/return
becomes negligible, so a function should be used instead.
In some cases it is appropriate to make the compiler
insure that a macro is terminated with a semicolon.
if (x==3)
SP3();
else
BORK();
If the semicolon is omitted after the call to
SP3
,
then the
else
will (silently!) become associated with the
if
in the
SP3
macro.
With the semicolon, the
else
doesn't match
any
if
!
The macro
SP3
can be written safely as
#define SP3() \
do { if (b) { int x; av = f (&x); bv += x; }} while (0)
Writing out the enclosing
do-while
by hand is awkward and some compilers and tools
may complain that there is a constant in the
``
while
''
conditional.
A macro for declaring statements may make programming easier.
#ifdef lint
static int ZERO;
#else
# define ZERO 0
#endif
#define STMT( stuff ) do { stuff } while (ZERO)
Declare
SP3
with
#define SP3() \
STMT( if (b) { int x; av = f (&x); bv += x; } )
Using
STMT
will help prevent small typos from silently changing programs.
Except for type casts,
sizeof
,
and hacks such as the above,
macros should contain keywords only if the entire
macro is surrounded by braces.
Conditional Compilation
Conditional compilation is useful for things like
machine-dependencies,
debugging,
and for setting certain options at compile-time.
Beware of conditional compilation.
Various controls can easily combine in unforeseen ways.
If you #ifdef machine dependencies,
make sure that when no machine is specified,
the result is an error, not a default machine.
(Use
``#error
''
and indent it so it works with older compilers.)
If you #ifdef optimizations,
the default should be the unoptimized code
rather than an uncompilable program.
Be sure to test the unoptimized code.
Note that the text inside of an #ifdeffed section may be scanned
(processed) by the compiler, even if the #ifdef is false.
Thus, even if the #ifdeffed part of the file never gets compiled
(e.g.,
),"#ifdef
COMMENT"
it cannot be arbitrary text.
Put #ifdefs in header files instead of source files when possible.
Use the #ifdefs to define macros
that can be used uniformly in the code.
For instance, a header file for checking memory allocation
might look like (omitting definitions for
REALLOC
and
FREE
):
#ifdef DEBUG
extern void *mm_malloc();
# define MALLOC(size) (mm_malloc(size))
#else
extern void *malloc();
# define MALLOC(size) (malloc(size))
#endif
Conditional compilation should generally be
on a feature-by-feature basis.
Machine or operating system dependencies
should be avoided in most cases.
#ifdef 4BSD
long t = time ((long *)NULL);
#endif
The preceding code is poor for two reasons:
there may be 4BSD systems for which there is a better choice,
and there may be non-4BSD systems for which the above
is the
best code.
Instead, use
define symbols
such as
TIME_LONG
and
TIME_STRUCT
and define the appropriate one
in a configuration file such as
config.h.
Program Structure
The following are some excerpts from [15] relevant to program structure
and organisation.
Most programs are too complicated - that is,
more complex than they need to be to solve their problems efficiently.
Why?
Mostly it's because of bad design,
but I will skip that issue here because it's a big one.
But programs are often complicated
at the microscopic level,
and that is something I can address here.
Rule 1.
You can't tell where a program is going to spend its time.
Bottlenecks occur in surprising places, so don't
try to second guess and put in a speed hack until you've
proven that's where the bottleneck is.
Rule 2.
Measure.
Don't tune for speed until you've measured,
and even then don't unless one part of the code
overwhelms
the rest.
Rule 3.
Fancy algorithms are slow when
n
is small, and
n
is usually small.
Fancy algorithms have big constants.
Until you know that
n
is frequently going to be big,
don't get fancy.
(Even if
n
does get big, use Rule 2 first.)
For example, binary trees are always faster than splay trees for
workaday problems.
Rule 4.
Fancy algorithms are buggier than simple ones,
and they're much harder to implement.
Use simple algorithms as well as simple data structures.
The following data structures are a complete list for almost
all practical programs:
- array
- linked list
- hash table
- binary tree
Of course, you must also be prepared to collect these into compound
data structures.
For instance, a symbol table might be implemented as a hash table
containing linked lists of arrays of characters.
Rule 5.
Data dominates.
If you've chosen the right data structures and organized things well,
the algorithms will almost always be self-evident.
Data structures, not algorithms, are central to programming.
(See Brooks p. 102.)
Rule 6.
There is no Rule 6.
Algorithms, or details of algorithms,
can often be encoded compactly, efficiently and expressively as data
rather than, say, as lots of
if
statements.
The reason is that the
complexity
of the job at hand, if it is due to a combination of
independent details,
can be encoded.
A classic example of this is parsing tables,
which encode the grammar of a programming language
in a form interpretable by a fixed, fairly simple
piece of code.
Finite state machines are particularly amenable to this
form of attack, but almost any program that involves
the `parsing' of some abstract sort of input into a sequence
of some independent `actions' can be constructed profitably
as a data-driven algorithm.
Perhaps the most intriguing aspect of this kind of design
is that the tables can sometimes be generated by another
program - a parser generator, in the classical case.
As a more earthy example, if an operating system is driven
by a set of tables that connect I/O requests to the appropriate
device drivers, the system may be `configured'
by a program that reads a description of the particular
devices connected to the machine in question and prints
the corresponding tables.
One of the reasons data-driven programs are not common, at least
among beginners, is the tyranny of Pascal.
Pascal, like its creator, believes firmly in the separation
of code and data.
It therefore (at least in its original form) has no ability to
create initialized data.
This flies in the face of the theories of Turing and von Neumann,
which define the basic principles of the stored-program computer.
Code and data
are
the same, or at least they can be.
How else can you explain how a compiler works?
(Functional languages have a similar problem with I/O.)
Another result of the tyranny of Pascal is that beginners don't use
function pointers.
(You can't have function-valued variables in Pascal.)
Using function pointers to encode complexity has some interesting
properties.
Some of the complexity is passed to the routine pointed to.
The routine must obey some standard protocol - it's one of a set
of routines invoked identically - but beyond that, what it
does is its business alone.
The complexity is
distributed.
There is this idea of a protocol, in that all functions used similarly
must behave similarly. This makes for easy documentation, testing,
growth and even making the program run distributed over a network -
the protocol can be encoded as remote procedure calls.
I argue that clear use of function pointers is the heart of object-oriented
programming. Given a set of operations you want to perform on data,
and a set of data types you want to respond to those operations,
the easiest way to put the program together is with a group of function
pointers for each type.
This, in a nutshell, defines class and method.
The O-O languages give you more of course - prettier syntax,
derived types and so on - but conceptually they provide little extra.
Combining data-driven programs with function pointers leads to an
astonishingly expressive way of working, a way that, in my experience,
has often led to pleasant surprises. Even without a special O-O
language, you can get 90% of the benefit for no extra work and be
more in control of the result.
I cannot recommend an implementation style more highly.
All the programs I have organized this way have survived comfortably
after much development - far better than with less disciplined
approaches.
Maybe that's it: the discipline it forces pays off handsomely in the long run.
Debugging
``C Code. C code run. Run, code, run... PLEASE!!!'' - Barbara Tongue
If you use
enum
s,
the first enum constant should have a non-zero value,
or the first constant should indicate an error.
enum { STATE_ERR, STATE_START, STATE_NORMAL, STATE_END } state_t;
enum { VAL_NEW=1, VAL_NORMAL, VAL_DYING, VAL_DEAD } value_t;
Uninitialized values will then often ``catch themselves''.
Check for error return values, even from functions that ``can't''
fail.
Consider that
close()
and
fclose()
can and do fail, even when all prior file operations have succeeded.
Write your own functions so that they test for errors
and return error values or abort the program in a well-defined way.
Include a lot of debugging and error-checking code
and leave most of it in the finished product.
Check even for ``impossible'' errors. [8]
Use the
assert
facility to insist that
each function is being passed well-defined values,
and that intermediate results are well-formed.
Build in the debug code using as few #ifdefs as possible.
For instance, if
``mm_malloc
''
is a debugging memory allocator, then
MALLOC
will select the appropriate allocator,
avoids littering the code with #ifdefs,
and makes clear the difference between allocation calls being debugged
and extra memory that is allocated only during debugging.
#ifdef DEBUG
# define MALLOC(size) (mm_malloc(size))
#else
# define MALLOC(size) (malloc(size))
#endif
Check bounds even on things that ``can't'' overflow.
A function that writes on to variable-sized storage
should take an argument
maxsize
that is the size of the destination.
If there are times when the size of the destination is unknown,
some `magic' value of
maxsize
should mean ``no bounds checks''.
When bound checks fail,
make sure that the function does something useful
such as abort or return an error status.
/*
* INPUT: A null-terminated source string `src' to copy from and
* a `dest' string to copy to. `maxsize' is the size of `dest'
* or UINT_MAX if the size is not known. `src' and `dest' must
* both be shorter than UINT_MAX, and `src' must be no longer than
* `dest'.
* OUTPUT: The address of `dest' or NULL if the copy fails.
* `dest' is modified even when the copy fails.
*/
char *
copy (char *dest, size_t maxsize, char *src)
{
char *dp = dest;
while (maxsize-- > 0)
if ((*dp++ = *src++) == '\0')
return (dest);
return (NULL);
}
In all, remember that
a program that produces wrong answers twice as fast is infinitely
slower.
The same is true of programs that crash occasionally
or clobber valid data.
Portability
``C combines the power of assembler with
the portability of assembler.''
- Anonymous, alluding to Bill Thacker.
The advantages of portable code are well known.
This section gives some guidelines for writing portable code.
Here, ``portable'' means that a source file
can be compiled and executed on different machines
with the only change being the inclusion of possibly
different header files and the use of different compiler flags.
The header files will contain #defines and typedefs that may vary from
machine to machine.
In general, a new ``machine'' is different hardware,
a different operating system, a different compiler,
or any combination of these.
Reference [1] contains useful information on both style and portability.
The following is a list of pitfalls to be avoided and recommendations
to be considered when designing portable code:
-
Write portable code first,
worry about detail optimizations only on machines where they
prove necessary.
Optimized code is often obscure.
Optimizations for one machine may produce worse code on another.
Document performance hacks and localize them as much as possible.
Documentation should explain how it works and why
it was needed (e.g., ``loop executes 6 zillion times'').
-
Recognize that some things are inherently non-portable.
Examples are code to deal with particular hardware registers such as
the program status word,
and code that is designed to support a particular piece of hardware,
such as an assembler or I/O driver.
Even in these cases there are many routines and data organizations
that can be made machine independent.
-
Organize source files so that the machine-independent
code and the machine-dependent code are in separate files.
Then if the program is to be moved to a new machine,
it is a much easier task to determine what needs to be changed.
Comment the machine dependence in the headers of the appropriate
files.
-
Any behavior that is described as ``implementation defined''
should be treated as a machine (compiler) dependency.
Assume that the compiler or hardware does it some completely screwy
way.
-
Pay attention to word sizes.
Objects may be non-intuitive sizes,
Pointers are not always the same size as ints,
the same size as each other,
or freely interconvertible.
The following table shows bit sizes for basic types in C for various
machines and compilers.
type | pdp11 | VAX/11 | 68000 | Cray-2 | Unisys | Harris | 80386-Pentium |
| series | | family | | 1100 | H800 | |
char | 8 | 8 | 8 | 8 | 9 | 8 | 8 |
short | 16 | 16 | 8/16 | 64(32) | 18 | 24 | 8/16 |
int | 16 | 32 | 16/32 | 64(32) | 36 | 24 | 16/32 |
long | 32 | 32 | 32 | 64 | 36 | 48 | 32 |
char* | 16 | 32 | 32 | 64 | 72 | 24 | 16/32/48 |
int* | 16 | 32 | 32 | 64(24) | 72 | 24 | 16/32/48 |
int(*)() | 16 | 32 | 32 | 64 | 576 | 24 | 16/32/48 |
Some machines have more than one possible size for a given type.
The size you get can depend both on the compiler
and on various compile-time flags.
The following table shows ``safe'' type sizes on the majority of
systems.
Unsigned numbers are the same bit size as signed numbers.
Type | Minimum | No Smaller |
| # Bits | Than |
char | 8 |
short | 16 | char |
int | 16 | short |
long | 32 | int |
float | 24 |
double | 38 | float |
any * | 14 |
char * | 15 | any * |
void * | 15 | any * |
-
The
void*
type
is guaranteed to have enough bits
of precision to hold a pointer to any data object.
The
void(*)()
type is guaranteed to be able to hold a pointer to any function.
Use these types when you need a generic pointer.
Be sure to cast pointers back to the correct type before using them.
-
Even when, say, an
int*
and a
char*
are the same size, they may have different formats.
For example, the following will fail on some machines that have
sizeof(int*)
equal to
sizeof(char*)
.
The code fails because
free
expects a
char*
and gets passed an
int*
.
int *p = (int *) malloc (sizeof(int));
free (p);
-
Note that
the size of an object does not guarantee the precision of
that object.
The Cray-2 may use 64 bits to store an
int
,
but a long cast into an
int
and back to a
long
may be truncated to 32 bits.
-
The integer
constant
zero may be cast to any pointer type.
The resulting pointer is called a
null pointer
for that type, and is different from any other pointer of that type.
A null pointer always compares equal to the constant zero.
A null pointer might not compare equal with a variable
that has the value zero.
Null pointers are not always stored with all bits zero.
Null pointers for two different types are sometimes different.
A null pointer of one type cast in to a pointer of another
type will be cast in to the null pointer for that second type.
-
On ANSI compilers, when two pointers of the same type access
the same storage, they will compare as equal.
When non-zero integer constants are cast to pointer types,
they may become identical to other pointers.
On non-ANSI compilers, pointers that
access the same storage may compare as different.
The following two pointers, for instance,
may or may not compare equal,
and they may or may not access the same storage.
The code may also fail to compile, fault on pointer creation,
fault on pointer comparison, or fault on pointer dereferences.
((int *) 2 )
((int *) 3 )
If you need `magic' pointers other than NULL,
either allocate some storage or treat the pointer as
a machine dependence.
extern int x_int_dummy; /* in x.c */
#define X_FAIL (NULL)
#define X_BUSY (&x_int_dummy)
#define X_FAIL (NULL)
#define X_BUSY MD_PTR1 /* MD_PTR1 from "machdep.h" */
-
Floating-point numbers have both a precision and a range.
These are independent of the size of the object.
Thus, overflow (underflow) for a 32-bit floating-point number will
happen at different values on different machines.
Also,
4.9
times
5.1
will yield
two different numbers on two different machines.
Differences in rounding and truncation can give surprisingly
different answers.
-
On some machines,
a
double
may have less range or precision than a
float
.
-
On some machines the first half of a
double
may be a
float
with similar value.
Do not depend on this.
-
Watch out for signed characters.
On Intel architectures and some VAXes, for instance,
characters are sign extended when used in expressions,
which is not the case on many other machines.
Code that assumes signed/unsigned is unportable.
For example,
array[c]
won't work if
c
is supposed to be positive and is instead signed and negative.
If you must assume signed or unsigned characters, comment them as
SIGNED
or
UNSIGNED
.
Unsigned behavior can be guaranteed with
unsigned char
Be particularly careful if your program will deal with above-127 character
values (e.g. to use strings containing Greek characters).
Also note that some compilers (e.g. Watcom C 9.1) produce wrong results
when strings containing above-127 characters are passed to the
strcmp
function.
-
Avoid assuming ASCII or a particular character set (ELOT, 437).
(Use
"<ctype.h>"
where possible, but beware that their behavior varies considerably
between C implementations.
For instance, if c is not an upper-case letter,
tolower(c) may return c or garbage.)
If Greek strings will be processed use the system-provided ctype.h may not
work correctly.
If you must assume, document and localize.
Remember that characters may hold (much) more than 8 bits.
-
Code that takes advantage of the two's complement representation of
numbers on most machines should not be used.
Optimizations that replace arithmetic operations with equivalent
shifting operations are particularly suspect.
If absolutely necessary, machine-dependent code should be #ifdeffed
or operations should be performed by #ifdeffed macros.
You should weigh the time savings with the potential for obscure
and difficult bugs when your code is moved.
-
In general, if the word size or value range is important,
typedef ``sized'' types.
Large programs should have a central header file which supplies
typedefs for commonly-used width-sensitive types, to make
it easier to change them and to aid in finding width-sensitive code.
Unsigned types other than
"unsigned
int"
are highly compiler-dependent.
If a simple loop counter is being used where either 16 or 32 bits will
do, then use
int
,
since it will get the most efficient (natural)
unit for the current machine.
-
Data alignment is also important.
For instance,
on various machines a 4-byte integer may start at any address,
start only at an even address, or start only at a multiple-of-four
address.
Thus, a particular structure may have its elements
at different offsets on different machines,
even when given elements are the same size on all machines.
Indeed, a structure of a 32-bit pointer and an 8-bit character may be
3 sizes on 3 different machines.
As a corollary, pointers to objects may not be interchanged freely;
saving an integer through a pointer
to 4 bytes starting at an odd address
will sometimes work,
sometimes cause a core dump,
and sometimes fail silently (clobbering other data in the process).
Pointer-to-character is a particular trouble spot on machines which
do not address to the byte.
Alignment considerations and loader peculiarities make it very rash
to assume that two consecutively-declared variables are together
in memory, or that a variable of one type is aligned appropriately
to be used as another type.
-
The bytes of a word are of increasing significance with increasing
address on machines such as the Intel x88 and the VAX (little-endian)
and of decreasing significance with increasing address on other
machines such as the 68000 (big-endian).
The order of bytes in a word and of words in larger
objects (say, a double word) might not be the same.
Hence any code that depends on the left-right orientation of bits
in an object deserves special scrutiny.
Bit fields within structure members will only be portable so long as
two separate fields are never concatenated and treated as a unit. [1,3]
Actually, it is nonportable to concatenate any two variables.
-
There may be unused holes in structures.
Suspect unions used for type cheating.
Specifically, a value should not be stored as one type and retrieved as
another.
An explicit tag field for unions may be useful.
-
Different compilers use different conventions for returning
structures.
This causes a problem when libraries return structure values
to code compiled with a different compiler.
Structure pointers are not a problem unless you have specified
an non-default structure packing option to your compiler.
-
Do not make assumptions about the parameter passing mechanism.
especially pointer sizes and parameter evaluation order, size, etc.
The following code, for instance, is very nonportable.
c = foo (getchar(), getchar());
char
foo (char c1, char c2, char c3)
{
char bar = *(&c1 + 1);
return (bar); /* often won't return c2 */
}
This example has lots of problems.
The stack may grow up or down
(indeed, there need not even be a stack!).
Parameters may be widened when they are passed,
so a
char
might be passed as an
int
,
for instance.
Arguments may be pushed left-to-right, right-to-left,
in arbitrary order, or passed in registers (not pushed at all).
The order of evaluation may differ from the order in which
they are pushed.
One compiler may use several (incompatible) calling conventions.
-
On some machines, the null character pointer
"
((char*)0)
"
is treated the same way as a pointer to a null string.
Do not depend on this.
-
Do not modify string constants.
Some libraries attempt to modify and then restore read-only
string variables.
Programs sometimes won't port because of these broken libraries.
The libraries are getting better.
One particularly notorious (bad) example is
s = "/dev/tty??";
strcpy (&s[8], ttychars);
-
The address space may have holes.
Simply computing the address
of an unallocated element in an array
(before or after the actual storage of the array)
may crash the program.
If the address is used in a comparison,
sometimes the program will run but clobber data, give wrong answers,
or loop forever.
In ANSI C, a pointer into an array of objects may legally point to
the first element after the end of the array; this is usually safe
in older implementations.
This ``outside'' pointer may not be dereferenced.
-
Only the
==
and
!=
comparisons are defined for all pointers of a given type.
It is only portable to use
<
,
<=
,
>
,
or
>=
to compare pointers when they both point in to
(or to the first element after) the same array.
It is likewise only portable to use arithmetic operators on pointers
that both point into the same array or the first element afterwards.
-
Word size also affects shifts and masks.
The following code will clear only the three rightmost bits of an
int on some 68000s.
On other machines it will also clear the upper two bytes.
Use instead
which works properly on all machines.
Bitfields do not have these problems.
-
Side effects within expressions can result in code
whose semantics are compiler-dependent, since C's order of evaluation
is explicitly undefined in most places.
Notorious examples include the following.
In the above example, we know only that
the subscript into
b
has not been incremented.
The index into
a
could be the value of
i
either before or after the increment.
struct bar_t { struct bar_t *next; } bar;
bar->next = bar = tmp;
In the second example, the address of
``bar->next
''
may be computed before the value is assigned to
``bar
''.
In the third example,
bar
can be assigned before
bar->next.
Although this appears to violate the rule that
``assignment proceeds right-to-left'', it is a legal interpretation.
Consider the following example:
long i;
short a[N];
i = old
i = a[i] = new;
The value that
``i
''
is assigned must be a value that is typed as if assignment
proceeded right-to-left.
However,
``i
''
may be assigned the value
``(long)(short)new
''
before
``a[i]
''
is assigned to.
Compilers do differ.
-
Be suspicious of numeric values appearing in the code (``magic
numbers'').
-
Become familiar with existing library functions and defines.
(But not too familiar.
The internal details of library facilities, as opposed to their
external interfaces, are subject to change without warning.
They are also often quite unportable.)
You should not be writing your own string compare routine,
terminal control routines, or making
your own defines for system structures.
``Rolling your own'' wastes your time and
makes your code less readable, because another reader has to
figure out whether you're doing something special in that reimplemented
stuff to justify its existence.
It also prevents your program
from taking advantage of any microcode assists or other
means of improving performance of system routines.
Furthermore, it's a fruitful source of bugs.
If possible, be aware of the differences between the common
libraries (such as ANSI, POSIX, and so on).
-
Always run your compiler with the switches set for maximum warnings.
As an example run the Microsoft compilers with
-W3.
On Unix systems use alint.
-
Suspect labels inside blocks with the
associated
switch
or
goto
outside the block.
-
Use explicit casts when doing arithmetic
that mixes signed and unsigned values.
-
The inter-procedural goto,
longjmp
,
should be used with caution.
Many implementations ``forget'' to restore values in registers.
Declare critical values as
volatile
if you can or comment them as
VOLATILE
.
-
Some linkers convert names to lower-case
and
some only recognize the first six letters as unique.
Programs may break quietly on these systems.
-
Beware of compiler extensions.
If used, document and
consider them as machine dependencies.
-
A program cannot generally execute code in the data
segment or write into the code segment.
Even when it can, there is no guarantee that it can do so reliably.
ANSI C
Modern C compilers
support the ANSI standard C [16].
Write code to run under standard C, and use
features such as function prototypes, constant storage, and volatile
storage.
Standard C improves program performance by giving better information
to optimizers.
Standard C improves portability by insuring that all compilers
accept the same input language and by providing mechanisms
that try to hide machine dependencies or emit warnings about
code that may be machine-dependent.
Note that under ANSI C, the `#' for a preprocessor directive must be
the first non-whitespace character on a line.
Use this feature to improve the formatting of your files.
An
``#ifdef NAME
''
should end with either
``#endif
''
or
``#endif /* NAME */
'',
not with
``#endif NAME
''.
The comment should not be used on short #ifdefs,
as it is clear from the code.
ANSI
trigraphs
may cause programs with strings containing
``??
''
may break mysteriously.
The style for ANSI C is the same as for regular C,
with two notable exceptions: storage qualifiers
and parameter lists.
Because
const
and
volatile
have strange binding rules,
each
const
or
volatile
object should have a separate declaration.
int const *s; /* YES */
int const *s, *t; /* NO */
Prototyped functions merge parameter declaration
and definition in to one list.
Parameters should be commented in the function comment.
/*
* `bp': boat trying to get in.
* `stall': a list of stalls, never NULL.
* returns stall number, 0 => no room.
*/
int
enter_pier (boat_t const *bp, stall_t *stall)
{
...
Pragmas
are used to introduce machine-dependent code in a controlled way.
Obviously, pragmas should be treated as machine dependencies.
Unfortunately, the syntax of ANSI pragmas
makes it impossible to isolate them in machine-dependent headers.
Pragmas are of two classes.
Optimizations
may safely be ignored.
Pragmas that change the system behavior (``required pragmas'')
may not.
Required pragmas should be #ifdeffed so that compilation will abort if
no pragma is selected.
Two compilers may use a given pragma in two very different ways.
For instance, one compiler may use
``haggis
''
to signal an optimization.
Another might use it to indicate that a given statement,
if reached, should terminate the program.
Thus, when pragmas are used,
they must always be enclosed in machine-dependent #ifdefs.
Pragmas must always be #ifdefed out for non-ANSI compilers.
Be sure to indent the `#' character on the
#pragma
,
as older preprocessors will halt on it otherwise.
#if defined(__STDC__) && defined(USE_HAGGIS_PRAGMA)
#pragma (HAGGIS)
#endif
``The `#pragma' command is specified in the ANSI standard to have an
arbitrary implementation-defined effect.
In the GNU C preprocessor, `#pragma' first attempts to run the game
`rogue'; if that fails, it tries to run the game `hack'; if that
fails, it tries to run GNU Emacs displaying the Tower of Hanoi; if
that fails, it reports a fatal error.
In any case, preprocessing does not continue.''
- Manual for the GNU C preprocessor for GNU CC 1.34.
Special Considerations
This section contains some miscellaneous do's and don'ts.
-
Don't change syntax via macro substitution.
It makes the program unintelligible to all but the perpetrator.
-
Don't use floating-point variables where discrete values are needed.
Using a
float
for a loop counter is a great way to shoot yourself in the foot.
Always test floating-point numbers as <= or >=,
never use an exact comparison (== or !=).
-
Compilers have bugs.
Common trouble spots include structure assignment and bitfields.
You cannot generally predict which bugs a compiler has.
You could write a program that avoids all constructs that are
known broken on all compilers.
You won't be able to write anything useful,
you might still encounter bugs,
and the compiler might get fixed in the meanwhile.
Thus, you should write ``around'' compiler bugs only when you are
forced to use a particular buggy compiler.
-
Do not rely on automatic beautifiers.
The main person who benefits from good program style is the
programmer him/herself,
and especially in the early design of handwritten algorithms
or pseudo-code.
Automatic beautifiers can only be applied to complete, syntactically
correct programs and hence are not available when the need for
attention to white space and indentation is greatest.
Programmers can do a better job of making clear
the complete visual layout of a function or file, with the normal
attention to detail of a careful programmer.
(In other words, some of the visual layout is dictated by intent
rather than syntax
and beautifiers cannot read minds.)
Sloppy programmers should learn to be careful programmers instead of
relying on a beautifier to make their code readable.
-
Accidental omission of the second
``
=
''
of the logical compare is a problem.
Use explicit tests.
Avoid assignment with implicit test.
abool = bbool;
if (abool) { ...
When embedded assignment is used, make the test explicit
so that it doesn't get ``fixed'' later.
while ((abool = bbool) != FALSE) { ...
while (abool = bbool) { ... /* VALUSED */
while (abool = bbool, abool) { ...
-
Explicitly comment
variables that are changed out of the normal control flow,
or other code that is likely to break during maintenance.
-
Modern compilers will put variables in registers automatically.
Do not use the
register
keyword.
Make
One very useful tool is make [7].
During development,
make recompiles only those modules that have been changed
since the last time make was used.
It can be used to automate other tasks, as well.
Some common conventions include:
- all
- always makes all binaries
- clean
- remove all intermediate files
- debug
- make a test binary 'a.out' or 'debug'
- depend
- make transitive dependencies
- install
- install binaries, libraries, etc.
- deinstall
- back out of ``install''
- print/list
- make a hard copy of all source files
- shar
- make a shar of all source files
- spotless
- make clean, use revision control to put away sources.
Note: doesn't remove Makefile, although it is a source file
- source
- undo what spotless did
- tags
- run ctags, (using the -t flag is suggested)
- rdist
- distribute sources to other hosts
- zip
- create a zip file for distribution
file.c
- check out the named file from revision control
In addition, command-line defines
can be given to define either Makefile values
(such as ``CFLAGS'')
or values in the program
(such as ``DEBUG'').
Project-Dependent Standards
Individual projects may wish to establish additional standards beyond
those given here.
The following issues are some of those that should be addressed by
each project program administration group.
-
What additional naming conventions should be followed?
In particular, systematic prefix conventions for functional grouping
of global data and also for structure or union member names can be
useful.
-
What kind of include file organization is appropriate for the
project's particular data hierarchy?
-
What procedures should be established for reviewing compiler
warnings?
A tolerance level needs to be established in concert with the compiler
options to prevent unimportant complaints from hiding complaints about
real bugs or inconsistencies.
-
What kind of revision control needs to be used?
Conclusion
A set of standards has been presented for C programming style.
Among the most important points are:
-
The proper use of white space and comments
so that the structure of the program is evident from
the layout of the code.
The use of simple expressions, statements, and functions
so that they may be understood easily.
-
To keep in mind that
you or someone else will likely be asked to modify code or make
it run on a different machine sometime in the future.
Craft code so that it is portable to obscure machines.
Localize optimizations since they are often confusing
and may be ``pessimizations'' on other machines.
-
Many style choices are arbitrary.
Having a style that is consistent
(particularly with group standards)
is more important than following absolute style rules.
Mixing styles is worse than using any single bad style.
As with any standard, it must be followed if it is to be useful.
If you have trouble following any of these standards
don't just ignore them.
Talk with an experienced programmer.
References
-
B.A. Tague, C Language Portability, Sept 22, 1977.
This document issued by department 8234 contains three memos by
R.C. Haight, A.L. Glasser, and T.L. Lyon dealing with style and
portability.
-
S.C. Johnson, Lint, a C Program Checker,
USENIX
Unix
Supplementary Documents, November 1986.
-
R.W. Mitze, The 3B/PDP-11 Swabbing Problem, Memorandum for File,
1273-770907.01MF,
September 14, 1977.
-
R.A. Elliott and D.C. Pfeffer, 3B Processor Common Diagnostic
Standards- Version 1,
Memorandum for File, 5514-780330.01MF, March 30, 1978.
-
R.W. Mitze,
An Overview of C Compilation of
Unix
User Processes on the 3B,
Memorandum for File, 5521-780329.02MF, March 29, 1978.
-
B.W. Kernighan and D.M. Ritchie,
The C Programming Language,
Prentice Hall 1978,
Second Ed. 1988, ISBN 0-13-110362-8.
-
S.I. Feldman,
Make - A Program for Maintaining Computer Programs,
USENIX
Unix
Supplementary Documents, November 1986.
-
Ian Darwin and Geoff Collyer,
Can't Happen or /* NOTREACHED */ or Real Programs Dump Core,
USENIX Association Winter Conference, Dallas 1985 Proceedings.
-
Brian W. Kernighan and P. J. Plauger
The Elements of Programming Style.
McGraw-Hill, 1974, Second Ed. 1978, ISBN 0-07-034-207-5.
-
J. E. Lapin
Portable C and UNIX System Programming,
Prentice Hall 1987,
ISBN 0-13-686494-5.
-
Ian F. Darwin,
Checking C Programs with lint,
O'Reilly & Associates, 1989.
ISBN 0-937175-30-7.
-
Andrew R. Koenig,
C Traps and Pitfalls,
Addison-Wesley, 1989.
ISBN 0-201-17928-8.
-
Samuel P. Harbison and Guy L. Steele Jr.
C: A Reference Manual
1984, 1987
ISBN is 0-13-109802-0
-
Mark Horton
Portable C Software
Prentice-Hall, Englewood Cliffs NJ
1990
ISBN is 0-13-868050-7
-
Rob Pike
Notes on Programming in C
-
American National Standard for Information Systems - Programming Language -
C: ANSI X3.159-1989,
December, 1989.
Published by the American National Standards Institute, 1430 Broadway, New York, New York 10018.
Πως να γράφετε και να μη γράφετε μια εκτενή περίληψη (executive summary/abstract/review)
Παράδειγμα από την Οδύσσεια: Λάθος
Το έργο αυτό εξετάζει το ταξίδι του κεντρικού ήρωα μέχρι την πατρίδα του. Η πρώτη ραψωδία ασχολείται με τις αποφάσεις των θεών του Ολύμπου σχετικά με τον Οδυσσέα και τη συμπεριφορά των μνηστήρων. Η επόμενη ραψωδία περιγράφει τις ενέργειες του Τηλέμαχου σχετικά με την αναζήτηση του πατέρα του και τα νέα που μαθαίνει. Στη συνέχεα περιγράφεται το ταξίδι του Οδυσσέα και ο τρόπος που καταλήγει στο παλάτι του πατέρα της Ναυσικάς καθώς και τις συζητήσεις που έχει ο Οδυσσέας εκεί και τη συμμετοχή του στους αγώνες. Η ραψωδία που ακολουθεί περιλαμβάνει τις περιγραφές του Οδυσσέα σχετικά με την άλωση της Τροίας, την τροφή των Λωτοφάγων, τον Κύκλωπα, τον Αίολο και τα δώρα του, τους Λαστρυγώνες, την Κίρκη και το ταξίδι του στον ´Αρη. Ο Οδυσσέας συνεχίζει περιγράφοντας τα σοβαρά προβλήματα που αντιμετώπισε από τις Σειρήνες, τη Χάρυβδη και τη Σκύλλα καθώς και την παρεξήγηση που συνέβη στο νησί του Ήλιου. Το έργο συνεχίζει με την περιγραφή της αποστολής του Οδυσσέα στην Ιθάκη και τον τρόπο φιλοξενίας του βοσκού Εύμαιου. Εκτενώς ακόμα περιγράφονται οι ενέργειες της Αθηνάς σχετικά με τον Τηλέμαχο, τον Οδυσσέα και τους συγγενείς των μνηστήρων. Η αλαζονική συμπεριφορά των μνηστήρων παρουσιάζεται με μελανά χρώματα. Στο τέλος του έργου περιλαμβάνεται εκτενής αφήγηση των διαδικασιών με τις οποίες ο Οδυσσέας κατατροπώνει τους μνηστήρες, και αναγνωρίζεται από την Πηνελόπη.
(Το παραπάνω είναι απλώς αφήγηση του πίνακα περιεχομένων. Είναι αόριστο και χρησιμοποιεί υπερβολικά την παθητική φωνή. Δεν μας δίνει να καταλάβουμε τα πραγματικά γεγονότα της ιστορίας)
Παράδειγμα από την Οδύσσεια: Σωστό (σύντομη περίληψη)
Οι θεοί στον Όλυμπο αποφασίζουν ότι ο Οδυσσέας έχει παραμείνει πολύ καιρό στο νησί της Καλυψούς ενώ παράλληλα οι μνηστήρες ζητούν επίμονα το χέρι της Πηνελόπης. Ο Δίας στέλνει τον Ερμή στην Καλυψώ να της ζητήσει να αφήσει τον Οδυσσέα. Το καράβι όμως του Οδυσσέα καταστρέφεται και ο Οδυσσέας μισοπνιγμένος προσφεύγει ως ικέτης στην πριγκίπισσα Ναυσικά. Στο δείπνο αποκαλύπτει το όνομά του και περιγράφει την άλωση της Τροίας και την τροφή των Λωτοφάγων που έκανε τους συντρόφους του να χάσουν τη διάθεση να επιστρέψουν. Αναφέρει ακόμα το μονόφθαλμο ανθρωποφάγο Κύκλωπα και εξηγεί πως τον τύφλωσαν και του ξέφυγαν κρεμασμένοι κάτω από τα πρόβατα. Στη συνέχεια ο Αίολος τους έδωσε καλό άνεμο για το δρόμο, αλλά οι σύντροφοί του άνοιξαν τον ασκό με τους άλλους ανέμους και ελευθέρωσαν έναν τυφώνα που τους γύρισε στους Λαιστρυγόνες - γίγαντες που τους βομβάρδιζαν με τεράστιους βράχους. Οι λίγοι που γλίτωσαν κατέληξαν στη νησί της μάγισσας Κίρκης που τους μεταμόρφωσε σε χοίρους. Χάρη στις συμβουλές του μάντη Τειρεσία ο Οδυσσέας δεμένος στο κατάρτι γλίτωσε από τις σειρήνες που καλούσαν τους ταξιδιώτες με πλανερά τραγούδια και από τη δίνη της Χάρυβδης. Όταν ο Οδυσσέας έφθασε στην Ιθάκη, σχεδίασε μαζί με τον Τηλέμαχο πώς θα κατατροπώσουν τους μνηστήρες. Ο Οδυσσέας επέστρεψε στο παλάτι μεταμφιεσμένος σε ζητιάνο. Η Πηνελόπη είπε στους μνηστήρες πως όποιος περάσει τη χορδή στο τόξο του Οδυσσέα και με αυτό στείλει ένα βέλος μέσα από 12 μάτια τσεκουριών θα πάρει το χέρι της. Μόνο ο Οδυσσέας τα κατάφερε, και, στη συνέχεια, μαζί με τον Τηλέμαχο και δύο βοσκούς κατατρόπώσαν τους μνηστήρες. Στη σύγκρουση που ακολούθησε την επόμενη μέρα με τους συγγενείς των μνηστήρων η Αθηνά επεμβαίνει και καλεί όλους να ζήσουν από εκεί και πέρα ειρηνικά.
Παράδειγμα από την Οδύσσεια: Σωστό (εκτενής περίληψη)
Οι θεοί στον Όλυμπο αποφασίζουν ότι ο Οδυσσέας έχει παραμείνει πολύ καιρό στο νησί της Καλυψούς. Οι μνηστήρες ζητούν επίμονα το χέρι της Πηνελόπης, ενώ ο Δίας τους στέλνει ένα χρησμό που προδικάζει την καταστροφή τους. Ο γιος του Οδυσσέα, Τηλέμαχος, πηγαίνει στο βασιλιά Νέστορα για να πληροφορηθεί για τον πατέρα του. Ο Νέστορας του αναφέρει ότι οι περισσότεροι Έλληνες έχουν επιστρέψει από την Τροία εκτός από δύο: τον Μενέλαο, ο οποίος χάνοντας το δρόμο έμεινε επτά χρόνια στην Αίγυπτο, και τον Οδυσσέα. Ο Νέστορας διαθέτει μια άμαξα στον Τηλέμαχο για να πάει στο Μενέλαο, ο οποίος τον πληροφορεί ότι ο Οδυσσέας παραμένει, παρά τη θέλησή του, κοντά στην Καλυψώ. Ο Δίας στέλνει τον Ερμή στην Καλυψώ να της ζητήσει να αφήσει τον Οδυσσέα. Το καράβι όμως του Οδυσσέα καταστρέφεται από την οργή του Ποσειδώνα και ο Οδυσσέας βγαίνει στη στεριά μισοπνιγμένος. Προσφεύγει ως ικέτης στην πριγκίπισσα Ναυσικά. Στο δείπνο που του παραθέτει ο βασιλιάς πατέρας της ο Οδυσσέας δακρύζει όταν ακούει ένα τραγούδι για τον Τρωικό πόλεμο. Ο Οδυσσέας τότε αποκαλύπτει το όνομά του και περιγράφει την άλωση της Τροίας και την τροφή των Λωτοφάγων που έκανε τους συντρόφους του να χάσουν τη διάθεση να επιστρέψουν στην πατρίδα. Αναφέρει ακόμα το μονόφθαλμο Κύκλωπα που έφαγε δύο συντρόφους του και εξηγεί πως κατάφεραν να του ξεφύγουν κρεμασμένοι κάτω από τα πρόβατα, αφού πριν τον είχαν τυφλώσει. Στη συνέχεια ο Αίολος τους έδωσε καλό άνεμο για το δρόμο, αλλά οι σύντροφοί του άνοιξαν τον ασκό με τους άλλους ανέμους που είχε δώσει στον Οδυσσέα νομίζοντας πως ήταν λάφυρα και ελευθέρωσαν έναν τυφώνα που τους γύρισε στους Λαιστρυγόνες - γίγαντες που τους βομβάρδιζαν με τεράστιους βράχους. Οι λίγοι που γλίτωσαν κατέληξαν στη νησί της μάγισσας Κίρκης. Αυτή μεταμόρφωσε τους συντρόφους τού Οδυσσέα σε χοίρους, ο ίδιος τη γλίτωσε χάρη σε ένα βοτάνι που του είχε δώσει ο Ερμής. Η Κίρκη του είπε πως για να επιστρέψει στην πατρίδα του θα πρέπει να περάσει από τον Αδη. Εκεί ο τυφλός μάντης Τειρεσίας του έδωσε συμβουλές για το υπόλοιπο ταξίδι. Έτσι, πίσω στη θάλασσα γλίτωσε από τις σειρήνες που καλούσαν τους ταξειδιώτες με πλανερά τραγούδια, κυβερνώντας το πλοίο δεμένος στο κατάρτι, και από τη δίνη της Χάρυβδης, ενώ έχασε έξι συντρόφους του από τη Σκύλλα. Στο νησί του Ήλιου που κατέληξαν οι υπόλοιποι σύντροφοί του, προκάλεσαν την οργή του και τον καταστροφικό κεραυνό του Δία θυσιάζοντας τα κοπάδια του παρά τις προειδοποιήσεις του Οδυσσέα. Ο Οδυσσέας τελείωσε τη διήγηση του λέγοντας πως μόνος αυτός κατέληξε στο νησί της Καλυψούς. Ο βασιλιάς Αλκίνοος έδωσε αμέσως διαταγές να τον στείλουν στην Ιθάκη. Όταν έφθασε εκεί η Αθηνά τον μεταμορφώνει αμέσως σε γέρο και τον συμβουλεύει να συναντήσει τον γέρο βοσκό Εύμαιο. Αν και δεν του αποκαλύπτει την ταυτότητά του ο Εύμαιος τον φιλοξενεί υποδειγματικά. Η Αθηνά καλεί τον Τηλέμαχο να επιστρέψει σπίτι και τον συμβουλεύει πώς να αποφύγει την παγίδα των μνηστήρων. Ο Τηλέμαχος επιστρέφοντας αναγνωρίζει τον Οδυσσέα τον οποίο η Αθηνά έχει μεταμορφώσει στην παλιά του μορφή και μαζί σχεδιάζουν πώς θα κατατροπώσουν τους μνηστήρες. Ο Οδυσσέας επιστρέφει στο παλάτι μεταμφιεσμένος σε ζητιάνο. Ο σκύλος του τον αναγνωρίζει και αμέσως μετά ψοφάει. Όταν ζητάει τροφή από τους μνηστήρες ο Αντίνοος τον βρίζει και τον χτυπάει. Ο Οδυσσέας δεν αποκαλύπτει την ταυτότητά του στην Πηνελόπη, η οποία βάζει τη δούλα Ευρύκλεια να του πλύνει τα πόδια, και τότε αυτή αναγνωρίζει ένα σημάδι στο πόδι του, αλλά ο Οδυσσέας την παρακαλεί να μην τον αποκαλύψει. Η Πηνελόπη λέει στους μνηστήρες πως όποιος περάσει τη χορδή στο τόξο του Οδυσσέα και με αυτό στείλει ένα βέλος μέσα από 12 μάτια τσεκουριών θα πάρει το χέρι της. Μόνο ο Οδυσσέας τα καταφέρνει, και μαζί με τον Τηλέμαχο και δύο βοσκούς κατατροπώνουν τους μνηστήρες. Η Πηνελόπη όμως δεν πιστεύει την ταυτότητα του Οδυσσέα μέχρι που αυτός της θυμίζει πώς είχε φτιάξει το κρεβάτι τους σε κορμό ζωντανής ελιάς, με το παλάτι κατασκευασμένο μετά γύρω του. Την επόμενη μέρα συναντά τον πατέρα του, τον παλιό βασιλιά Λαέρτη και μαζί με τον Τηλέμαχο ερίζουν με τους συγγενείς των μνηστήρων. Η Αθηνά επεμβαίνει και καλεί όλους να ζήσουν από εκεί και πέρα ειρηνικά.
Παράδειγμα από σχολικό βοήθημα: Αρχικό κείμενο
Το παρακάτω κείμενο, με τίτλο «Μεταλλαγμένα τρόφιμα. Λύση ή απειλή;», παρά τις αδυναμίες του, έχει χρησιμοποιηθεί ως παράδειγμα για τη συγγραφή περίληψης σε βοήθημα για μαθητές λυκείου (https://www.taexeiola.gr/%CF%80%CF%89%CF%82-%CE%B3%CF%81%CE%B1%CF%86%CF%89-%CF%80%CE%B5%CF%81%CE%B9%CE%BB%CE%B7%CF%88%CE%B7/) και εμφανίζεται πρώτο σε σχετική αναζήτησή.
«Πολλοί υποστηρίζουν ότι τα μεταλλαγμένα τρόφιμα μπορούν να δώσουν μια λύση στο επισιτιστικό πρόβλημα των χωρών που υποφέρουν. Στις Δυτικές χώρες όμως, είναι ακόμα περισσότεροι εκείνοι που υποστηρίζουν ότι τα μεταλλαγμένα τρόφιμα αποτελούν απειλή για την υγεία των καταναλωτών. Ποιο δρόμο πρέπει να διαλέξουμε άραγε;
Ας δούμε για αρχή τι εννοούμε με τον όρο «μεταλλαγμένα». Μεταλλαγμένα καλούνται τα προϊόντα που παράγονται στο εργαστήριο έπειτα από εφαρμογή της γενετικής μηχανικής. Σαν σκοπό τους έχουν την εμφάνιση νέων χαρακτηριστικών ή την ενίσχυση κάποιων υπαρχόντων σε διάφορα προϊόντα, εισάγοντας με την βοήθεια της γενετικής γονίδια από έναν ιό ή βακτήριο ή ακόμα και από κάποιο φυτό ή ζώο, σε ένα διαφορετικό οργανισμό, για παράδειγμα ένα καλλιεργούμενο φυτό. Το αποτέλεσμα συνήθως αποσκοπεί στην εμφάνιση ανθεκτικών χαρακτηριστικών όπως για παράδειγμα, αντοχή των φυτών στην ξηρασία ή σε ακατάλληλές καιρικές συνθήκες για την ανάπτυξή τους σε διαφορετικά από τα προβλεπόμενα κλίματα.
Το παραπάνω παράδειγμα, αποτελεί τον κύριο λόγο που προβάλλεται από τους υποστηρικτές αυτής της διαδικασίας, θεωρώντας ότι με αυτόν τον τρόπο θα δοθεί λύση στο επισιτιστικό πρόβλημα των χωρών του τρίτου κόσμου. Για παράδειγμα, με την δημιουργία ενός μεταλλαγμένου προϊόντος, μπορεί να κατασκευαστεί ένα υβρίδιο λαχανικών που να αντέχει στα ξηρά κλίματα ή ένα αντίστοιχο υβρίδιο σιτηρών που να μπορεί να δώσει μεγάλη παραγωγή προϊόντων, χωρίς ιδιαίτερη ποσότητα νερού. Η αλήθεια είναι, ότι αυτή η λύση φαντάζει ιδανική και ικανή να σώσει πολλές ζωές.
Από την άλλη πλευρά, όσοι αντιτίθενται στην παραγωγή μεταλλαγμένων τροφίμων, παρουσιάζουν σαν κύριο πρόβλημα την ανάπτυξη χαρακτηριστικών έξω από τη φύση, αλλά και την ανάπτυξη γονίδιων που είναι ανθεκτικά στα αντιβιοτικά.
Συμπερασματικά, το αποτέλεσμα της δημιουργίας μεταλλαγμένων τροφίμων μπορεί να αποτελεί άμεση λύση για ορισμένες περιπτώσεις αλλά λόγω της πρόσφατης έντονης δραστηριότητας των γενετιστών, δεν μπορούμε να γνωρίζουμε τα μελλοντικά αποτελέσματα της χρήσης των μεταλλαγμένων προϊόντων στην δημόσια υγεία. Οπότε το δίλημμα παραμένει: Να σώσουμε κάποιες ζωές σήμερα, αλλά να βάλουμε σε κίνδυνο τις ζωές των παιδιών μας σε μερικά χρόνια;»
Μαρία Τουμπή
Παράδειγμα από σχολικό βοήθημα: Ακατάλληλη προτεινόμενη περίληψη
H προτεινόμενη περίληψη συνοψίζει κυρίως το είδος του περιεχομένου της κάθε παραγράφου του αρχικού κειμένου,
αλλά δεν μας διαφωτίζει ιδιαίτερα για
το πραγματικό περιεχόμενό του.
Ο αναγνώστης θα χρειαστεί τελικά να ανατρέξει στο πλήρες κείμενο
για να καταλάβει το θέμα.
«Η αρθρογράφος πραγματεύεται το ζήτημα των μεταλλαγμένων τροφίμων και διερωτάται εάν αποτελούν λύση για το επισιτιστικό πρόβλημα ή απειλή για τους καταναλωτές. Αρχικά, μέσω της διατύπωσης του ορισμού των «μεταλλαγμένων προϊόντων», αναφέρεται με παραδείγματα στον σκοπό, τον τρόπο, αλλά και στα αποτελέσματα της παραγωγής τους. Στη συνέχεια, παραθέτει τα επιχειρήματα που τίθενται υπέρ και κατά της χρήσης τους. Καταλήγοντας, επισημαίνει ότι αν και τα μεταλλαγμένα προϊόντα δύνανται να αποτελέσουν λύση σε κάποια προβλήματα, δεν είναι δυνατό να διαπιστωθεί άμεσα η αποτελεσματικότητα ή η επικινδυνότητά τους λόγω της πρωιμότητας των ερευνών σε αυτόν τον τομέα.»
94 λέξεις
Παράδειγμα από σχολικό βοήθημα: Περιεκτικότερη περίληψη
Τα μεταλλαγμένα τρόφιμα, αυτά δηλαδή που παράγονται με τη χρήση γενετικής μηχανικής, αποτελούν αμφιλεγόμενη λύση για το επισιτιστικό πρόβλημα. Αν και η ανθεκτικότητά τους στην ξηρασία μπορεί να αυξήσει την παραγωγή τροφίμων σε δύσκολες συνθήκες, οι αντιτιθέμενοι σε αυτά φοβούνται ότι μπορεί στο μέλλον να βρεθούν χαρακτηριστικά που να τα καθιστούν επικίνδυνα για τη φύση και τη δημόσια υγεία. Συνεπώς υπάρχει δίλημμα μεταξύ των ζωών που θα σωθούν σήμερα και των άγνωστων μελλοντικών συνεπειών.
74 λέξεις
Βιβλιογραφία (άλλη προσέγγιση)
Καταργημένα θέματα ερευνητικών εργασιών 1996-2016
Αποθετήριο εργασιών του ΟΠΑ (καταργήθηκε 2016)
Στόχος της εργασίας είναι ο σχεδιασμός και η υλοποίηση ενός
αποθετηρίου εργασιών και τεχνικών αναφορών (working papers, technical reports) για το ΟΠΑ.
Περιλαμβάνει:
Το σύστημα θα χρησιμοποιεί διεπαφές RADIUS του ΟΠΑ
για την αυθεντικοποίηση
των χρηστών και
EPIC (
http://epic.grnet.gr/guides/overview/)
του ΕΔΕΤ για τη δημιουργία αναγνωριστικών DOI.
Εργαλεία του Unix στο περιβάλλον Eclipse (καταργήθηκε 2016)
Τα εργαλεία που παρέχει μέσω της γραμμής εντολών
το λειτουργικό σύστημα Unix (και Linux)
είναι εξαιρετικά ισχυρά, αλλά για πολλούς δύσχρηστα.
Έτσι αρκετοί προγραμματιστές χρησιμοποιούν ολοκληρωμένα περιβάλλοντα
ανάπτυξης, όπως το Eclipse και το Visual Studio, τα οποία παρέχουν
εύκολες στη χρήση, αλλά σε πολλούς τομείς περιορισμένες δυνατότητες.
Στόχος της εργασίας είναι η ανάπτυξη στο περιβάλλον Eclipse μιας
εύχρηστης διεπαφής για την εκτέλεση εργασιών με τα εργαλεία του
Unix.
Παραδείγματα τέτοιων εργαλείων είναι τα find, grep, sort, uniq, wc, sed,
awk, stat, jot, tar, nm, diff, comm, head, tail, fmt, και xargs.
Μέσω της διεπαφής αυτής θα μπορούν οι χρήστες να επιλέγουν εργαλεία,
να καθορίζουν τις παραμέτρους τους,
να τα συνδέουν μεταξύ τους,
να τους παρέχουν δεδομένα από το περιβάλλον Eclipse,
και να βλέπουν τα παραγόμενα αποτελέσματα.
Βιβλιογραφία
- Diomidis Spinellis.
Working with Unix tools (http://www.dmst.aueb.gr/dds/pubs/jrnl/2005-IEEESW-TotT/html/v22n6.html).
IEEE Software, 22(6):9–11, November/December 2005.
(doi:10.1109/MS.2005.170 (http://dx.doi.org/10.1109/MS.2005.170))
- Diomidis Spinellis.
Outwit: Unix tool-based programming meets the Windows world (http://www.dmst.aueb.gr/dds/pubs/conf/2000-Usenix-outwit/html/utool.html).
In Christopher Small, editor, USENIX 2000 Technical Conference
Proceedings, pages 149–158, Berkeley, CA, June 2000. USENIX
Association.
- Erich Gamma and Kent
Beck.
Contributing to
Eclipse: Principles, Patterns, and Plug-Ins.
Addison-Wesley, Boston, MA, 2004.
- Brian W. Kernighan
and Rob Pike.
The UNIX
Programming Environment.
Prentice Hall, Englewood Cliffs, NJ, 1984.
- Brian W. Kernighan.
Sometimes the Old Ways are Best.
IEEE Software, 25(6), November/December 2008.
- Diomidis Spinellis.
Unix tools as visual programming components in a GUI-builder
environment.
Software: Practice & Experience, 32(1):57–71, January 2002.
(doi:10.1002/spe.428 (http://dx.doi.org/10.1002/spe.428))
Διαδικτυακή διεπαφή αποσφαλματωτή (καταργήθηκε 2016)
Η διεπαφή κειμένου που προσφέρει ο αποσφαλματωτής gdb δεν είναι ιδιαίτερα
εύχρηστη.
Πολλές λειτουργίες, όπως η τοποθέτηση σημείων διακοπής και η παρακολούθηση
ροής του προγράμματος, πραγματοποιούνται με τρόπο που δεν είναι διαισθητικός.
Από την άλλη πλευρά οι περισσότερες γραφικές διεπαφές διορθωτών δεν είναι
μεταφέρσιμες ανάμεσα σε διαφορετικές πλατφόρμες.
Η εργασία περιλαμβάνει το σχεδιασμό και την υλοποίηση μιας διαδικτυακής
διεπαφής στον αποσφαλματωτή gdb,
αντίστοιχης με αυτή που παρέχεται από την εφαρμογή
RStudio (
http://rstudio.org/) για το
έργο R (
http://www.r-project.org/).
Η υλοποίηση θα μπορούσε να βασιστεί στη χρήση της υπάρχουσας
διεπαφής GDB/MI (machine interface),
στη βιβλιοθήκη SWILL και
στη τεχνολογία AJAX (asynchronous Javascript and XML).
Η βιβλιοθήκη SWILL επιτρέπει την λειτουργία εφαρμογών ως
διαδικτυακών εξυπηρετητών.
Έτσι, ο προτεινόμενος συνδυασμός παρέχει μια μεταφέρσιμη γραφική διεπαφή
μέσω ενός οποιουδήποτε φυλλομετρητή,
η οποία μάλιστα έχει ως πρόσθετο
πλεονέκτημα να είναι προσβάσιμη από το διαδίκτυο.
Βιβλιογραφία
- Sotiria Lampoudi and
David M. Beazley.
SWILL: A simple embedded web server library.
In USENIX Technical Conference Proceedings, Monterey, CA, USA,
June 2002. Usenix Association.
FREENIX Track Technical Program.
- Even Adams and
Steven S. Muchnick.
Dbxtool: A window-based symbolic debugger for sun workstations.
Software: Practice & Experience, 16(7):653-669, July 1986.
- Dave Crane, Eric
Pascarello, and Darren James.
Ajax
in Action.
Manning, Greenwich, CT, 2006.
Το πρόβλημα της διαδοχικής τρωτότητας στις υπηρεσίες του παγκοσμίου ιστού (καταργήθηκε 2016)
Το πρόβλημα της διαδοχικής τρωτότητας ανακύπτει όταν πρέπει να εξεταστεί αν
μια ομάδα ασφαλών συστημάτων διασυνδεδεμένων με ασφαλή τρόπο αποτελεί ένα
ασφαλές κατανεμημένο σύστημα.
Το πρόβλημα εμφανίζεται όταν ένας αντίπαλος μπορεί,
εκμεταλλευόμενος τις δικτυακές συνδέσεις,
να έχει πρόσβαση σε πληροφορίες υψηλότερου επίπεδου εμπιστευτικότητας από αυτές
που θα του επιτρεπόταν από το κάθε ένα σύστημα ξεχωριστά.
Στόχος της εργασίας είναι η διερεύνηση του προβλήματος σε πρακτικά σενάρια
που προκύπτουν σήμερα μέσω της διασύνδεσης υπηρεσιών που προσφέρονται στον
παγκόσμιο ιστό.
Διασυνδέσεις που μπορούν να προκαλέσουν πρόβλημα στα σενάρια που θα εξεταστούν
είναι, μεταξύ άλλων οι παρακάτω.
- Η ανάκτηση ξεχασμένων συνθηματικών μέσω διαδικτυακής υπηρεσίας
ηλεκτρονικού ταχυδρομείου (π.χ. GMail).
-
Οι εξουσιοδοτήσεις σε εφαρμογές τρίτων που παρέχονται μεταξύ υπηρεσιών όπως Facebook,
LinkedIn, Twitter.
-
Η δυνατότητα επαναχρησιμοποίησης δεδομένων από τις προσφερόμενες υπηρεσίες για
την πραγματοποίηση επιθέσεων κοινωνικής μηχανικής (social engineering attacks).
Βιβλιογραφία
Αξιολόγηση του έργου της μετάβασης λογισμικού στο πρότυπο IPv6 (καταργήθηκε 2016)
Αργά ή γρήγορα όλο το λογισμικό που έχει διαδικτυακές διεπαφές θα χρειαστεί
να προσαρμοστεί στην επόμενη γενιά του διαδικτυακού πρωτοκόλλου IP, την
έκδοση 6 (IPv6).
Η μετάβαση αυτή βρίσκεται σε εξέλιξη και είναι απαραίτητο να ολοκληρωθεί,
διότι ο αριθμός των διαθέσιμων διευθύνσεων της τρέχουσας έκδοσης IPv4
κοντεύει να εξαντληθεί.
Αυτό έχει ως αποτέλεσμα να τίθενται εμπόδια στη διάδοση του διαδικτύου,
ειδικά στις αναπτυσσόμενες χώρες.
Στόχος της εργασίας είναι η αξιολόγηση του απαιτούμενου έργου,
μέσω της άντλησης εμπειρικών δεδομένων από υπάρχοντα έργα ανοικτού λογισμικού.
Στα πλαίσια της εργασία θα εξεταστούν τα παρακάτω δύο στοιχεία:
- Το ποσοστό των εφαρμογών που είναι συμβατές με το πρότυπο IPv6.
- Το έργο που απαιτήθηκε για την προσαρμογή της κάθε εφαρμογής στο
πρότυπο IPv6.
Βιβλιογραφία
-
Carlos E. Caicedo, James B.D. Joshi, Summit R. Tuladhar, IPv6 Security Challenges, Computer, vol. 42, no. 2, pp. 36-42, Feb. 2009.
-
Chen, A., Chou, E., Wong, J., Yao, A. Y., Zhang, Q.,
Zhang, S., and Michail, A. CVSSearch: Searching through
Source Code using CVS Comments in
Proceedings of IEEE International Conference on Software
Maintenance (ICSM'01) (2001), 364–373.
-
German, D. M. An Empirical Study of Fine-Grained
Software Modifications in Proceedings of 20th IEEE
International Conference on Software Maintenance
(ICSM'04) (2004), 316–25.
-
Zimmermann, T., Zeller, A., Weissgerber, P., and Diehl, S.
Mining Version Histories to Guide Software Changes. IEEE
Transactions on Software Engineering, 31, 6 (2005), 429–445.
-
Van Rysselberghe, F. and Demeyer, S. Mining Version
Control Systems for FACs (Frequently Applied Changes) in
Proceedings of International Workshop on Mining Software
Repositories (MSR'04) (May 25, 2004), 48–52.
-
[6] Dinh-Trong, T. T. and Bieman, J. M. The FreeBSD Project:
a Replication Case Study of Open Source Development.
IEEE Transactions on Software Engineering, 31, 6 (2005),
481–494.
-
Bieman, J. M., Andrews, A. A., and Yang, H. J.
Understanding Change-Proneness in OO Software Through
Visualization in Proceedings of 11th IEEE International
Workshop on Program Comprehension (IWPC'03) (2003),
44–53.
-
Hassan, A. E. and Holt, R. C. Predicting Change
Propagation in Software Systems in Proceedings of 20th
IEEE International Conference on Software Maintenance
(ICSM'04) (2004), 284–93.
Μετρικές ποιότητας λογισμικού κατά τον Christopher Alexander (καταργήθηκε 2016)
O αρχιτέκτων Christopher Alexander έχει ορίσει μια σειρά από σχεδιαστικές
ιδιότητες που περιστρέφονται γύρω από τον ορισμό κέντρων.
Η ικανοποίηση των αντικειμενικών αυτών ιδιοτήτων συνιστά κατά τον
Alexander μια έκφραση
ποιότητας.
Οι ιδιότητες αυτές είναι
η κλίμακα σε διάφορα επίπεδα,
ένα ισχυρό κέντρο,
τα όρια,
η εναλλασσόμενη επανάληψη,
ο θετικός χώρος,
το Καλό σχήμα,
η βαθιά αλληλοσύνδεση,
η αντίθεση,
η κλιμάκωση,
η τραχύτητα,
η ηχώ,
το κενό,
η απλότητα και εσωτερική ηρεμία και
το ένα με τον κόσμο.
Στόχος της εργασίας είναι ο ορισμός και η υλοποίηση μετρικών που θα
βρίσκουν χαρακτηριστικά της ποιότητας σύμφωνα με τους ορισμούς του
Alexander.
Βιβλιογραφία
Η ροή σκέψης της Wikipedia (καταργήθηκε 2016)
H ελεύθερη εγκυκλοπαίδεια
Wikipedia (
http://www.wikipedia.org)
παρέχει στον παγκόσμιο ιστό πάνω από δύο εκατομμύρια άρθρα δομημένα
σε μορφή πλούσιου υπερκειμένου.
Το περιεχόμενο της εγκυκλοπαίδειας είναι διαθέσιμο σε μορφή βάσης
δεδομένων.
Στόχος της εργασίας είναι η ανάλυση των ιδιοτήτων της Wikipedia
ως γράφου και η αποδοτική δημιουργία οπτικοποίησης των συνδέσμων
κάθε λήμματος με τρόπο που να επιτρέπει στο χρήση να πλοηγείται οπτικά
ανάμεσα στα λήμματα.
Για να είναι χρήσιμη η παράσταση αυτή θα πρέπει να φαίνονται όχι μόνο
οι σύνδεσμοι των άμεσα συνδεδεμένων λημμάτων, αλλά και αρκετές επόμενες
σειρές.
Η οπτικοποίηση θα βοηθά το χρήστη να πλοηγείται προς λήμματα-κόμβους
με ικανό αριθμό υπερσυνδέσμων.
Εναλλακτικά, το περιεχόμενο της Wikipedia μπορεί να παρουσιαστεί σε
εικαστική μορφή (π.χ. screen saver).
Άρθρα που περιέχουν εικόνες καλής ποιότητας συνδέονται μεταξύ τους
σε γράφο τον οποίο το πρόγραμμα ακολουθεί, δείχοντας την κάθε εικόνα
στην οθόνη του υπολογιστή.
Παλαιότερες εικόνες θα μπορούσαν να απομακρύνονται και να μικραίνουν
σε μέγεθος, π.χ. κινούμενες σε σχήμα σπείρας προς το κέντρο της
οθόνης.
Βιβλιογραφία
- Wikipedia, the free encyclopedia (http://en.wikipedia.org)
- TouchGraph (http://www.touchgraph.com/TGAmazonBrowser.html)
- Visualizing Everything. Communications of the ACM 44:8 August 2001.
-
Stephen C. North.
Neato User's Guide.
Technical Report 59113-921014-14TM, AT&T
Bell Laboratories, Murray Hill, NJ, 1992.
Available online http://www.research.att.com/sw/tools/graphviz/neatoguide.pdf.
-
Thomas M. J. Fruchterman and Edward M. Reingold. Graph Drawing by
Force-directed Placement.
Software: Practice and Experience, 21(11):1129{1164, November 1991.
-
Emden R. Gansner, Eleftherios Koutsofios, Stephen C. North, and Kiem-Phong Vo.
A Technique for Drawing Directed Graphs.
IEEE Trans. Sofware Eng., 19(3):214{230, May 1993.
- Neal W. Johnston.
Documenting a scientific visualization tool (http://www.acm.org/pubs/articles/proceedings/doc/122778/p83-johnston/p83-johnston.pdf).
In Ninth Annual ACM International Conference on Systems
Documentation, pages 83–87. ACM, ACM Press, October 1991.
Ελέγχος διεπαφών σε προγράμματα Java (καταργήθηκε 2016)
Σύγχρονα προγράμματα όλο και συχνότερα υλοποιούν τη λειτουργικότητά τους
μέσω διεπαφών έτοιμων κλάσεων.
Ο μεγάλος αριθμός των έτοιμων κλάσεων
έχει ως αποτέλεσμα προγράμματα στατικού ελέγχου του κώδικα να
χρειάζονται εξειδικευμένο κώδικα για να βρουν λάθη στις κλήσεις
των μεθόδων τους.
Για το λόγο αυτό προτείνουμε ο έλεγχος διεπαφών να αποτελεί τμήμα
της διεπαφής και όχι του προγράμματος στατικού ελέγχου.
Η δυνατότητα αυτή έχει
ήδη υλοποιηθεί (
http://www.dmst.aueb.gr/dds/sw/api-verify/)
(Spinellis and Louridas)
στο πρόγραμμα
FindBugs (
http://findbugs.sourceforge.net/)
(Hovemeyer and Pugh, 2004).
Η εργασία έχει ως στόχο να προσθέσει ελέγχους σε σημαντικές κλάσεις
της Java και να μετρήσει την αποτελεσματικότητα της μεθόδου με
την εφαρμογή της σε μεγάλες βάσεις ανοικτού κώδικα.
Βιβλιογραφία
- David Hovemeyer and
William Pugh.
Finding bugs is easy.
ACM SIGPLAN Notices, 39(12):92–106, December 2004.
OOPSLA 2004 Onward! Track.
- Diomidis Spinellis and Panagiotis Louridas.
A framework for the static verification of API calls.
The Journal of Systems and Software.
To appear.
Επεκτάσεις UML στο περιβάλλον AT&T Graphviz (καταργήθηκε 2016)
Το περιβάλλον Graphviz της AT&T επιτρέπει το δηλωτικό καθορισμό
γραφημάτων χωρίς τη χρήση γραφικού περιβάλλοντος.
Με τον τρόπο αυτό τα γραφήματα μπορούν εύκολα
να παραχθούν αυτόματα από άλλα εργαλεία,
να ελεχθούν ως προς τις αλλαγές και τις διαμορφώσεις τους,
να επαναχρησιμοποιηθούν και να τεκμηριωθούν.
Για παράδειγμα η περιγραφή αριστερά δημιουργεί αυτόματα
το διάγραμμα που εμφανίζεται δεξιά:
digraph G {
main->usage;
main->fprintf;
main->exit;
usage->fprintf;
usage->exit;
}
|
|
Δύο ξεχωριστά εργαλεία, το dot και το neato επιτρέπουν το
σχεδιασμό κατευθυνόμενων ή μη γράφων.
Το περιβάλλον Graphviz είναι διαθέσιμο από το Internet σε
μορφή ανοικτού κώδικα.
Το σύστημα UMLGraph (http://www.umlgraph.org) επιτρέπει το
σχεδιασμό διαγραμμάτων κλάσεων και ακολουθίας με δηλωτικό τρόπο.
Στόχος της εργασίας αυτής είναι η προσθήκη στο περιβάλλον Graphviz
πρόσθετων εντολών για το σχεδιασμό και άλλων γραφημάτων UML.
Μερικά διαγράμματα που θα μπορούσαν να υποστηρίζονται είναι:
- Διάγραμμα αντικειμένων
- Διάγραμμα περιπτώσεων χρήσης
- Διαγράμματα συνεργασίας
- Διαγράμματα κατάστασης
- Διαγράμματα δραστηριότητας
- Διαγράμματα υλοποίησης
Βιβλιογραφία
- Diomidis Spinellis.
On the declarative specification of models.
IEEE Software, 20(2):94-96, March/April 2003.
- UMLGraph home page
- Graphviz home page (http://www.research.att.com/sw/tools/graphviz/)
-
Eleftherios Koutsofios and Stephen North.
Drawing graphs with dot.
Technical Report 910904-59113-08TM, AT&T Bell Laboratories, Murray Hill, NJ, September
1991.
Available online http://www.research.att.com/sw/tools/graphviz/leftyguide.pdf.
-
Stephen C. North.
Neato User's Guide.
Technical Report 59113-921014-14TM, AT&T
Bell Laboratories, Murray Hill, NJ, 1992.
Available online http://www.research.att.com/sw/tools/graphviz/neatoguide.pdf.
-
Thomas M. J. Fruchterman and Edward M. Reingold. Graph Drawing by
Force-directed Placement.
Software: Practice and Experience, 21(11):1129{1164, November 1991.
-
Emden R. Gansner, Eleftherios Koutsofios, Stephen C. North, and Kiem-Phong Vo.
A Technique for Drawing Directed Graphs.
IEEE Trans. Sofware Eng., 19(3):214{230, May 1993.
- Grady Booch, James Rumbaugh,
and Ivar Jacobson.
The
Unified Modeling Language User Guide.
Addison-Wesley, 1999.
Υποστήριξη scalable vector graphics στη σουίτα Outwit (καταργήθηκε 2016)
Η σουίτα εργαλείων Outwit επιτρέπει την αλληλεπίδραση
εργαλείων του Unix στο περιβάλλον των Windows.
Περιέχει εργαλεία για πρόσβαση στο πρόχειρο (clipboard),
στο registry, της ιδιότητες εγγράφων και σε σχεσιακές βάσεις
δεδομένων.
Στόχος της εργασίας αυτής είναι η προσθήκη στο πρόγραμμα πρόσβασης
στο πρόχειρο (winclip)
της δυνατότητας αντιγραφής και επικόλλησης διανυσματικών
γραφημάτων με τη μορφή
Windows Metafile και
Scalable Vector Graphics αντίστοιχα.
Βιβλιογραφία
Έλεγχος λαθών σε λογιστικά φύλλα (καταργήθηκε 2016)
Σύμφωνα με στοιχεία ερευνών 21-80% των λογιστικών φύλλων και
1-5% των κελιών τους περιέχουν λάθη.
Η εργασία αυτή αρχικά θα διερευνήσει με εμπειρικό τρόπο
(ερωτηματολόγια) συχνά λάθη που εμφανίζονται σε λογιστικά φύλλα.
Στη συνέχεια θα προταθούν ευρηστικές μέθοδοι και αλγόριθμοι για
τον εντοπισμό των λαθών.
Με βάση τις μεθόδους αυτές θα υλοποιηθεί εργαλείο εντοπισμού λαθών
με βάση τη γλώσσα ενός προγράμματος λογιστικών φύλλων (π.χ. Excel Basic).
Βιβλιογραφία
-
Doug Bell and Mike Parr. Spreadsheets: a research agenda. ACM SIGPLAN
Notices, 28(9):26-28, September 1993.
-
Judith A. Ross. Spreadsheet Risk. Harvard Business Review,
74(5):10-12, September-October 1996.
-
Spreadsheet Research (http://panko.cba.hawaii.edu/ssr/)
- Stephen C. Johnson.
Lint, a C program checker.
Computer Science Technical Report 65, Bell Laboratories, Murray Hill, NJ, USA,
December 1977.
-
Gregg Rothermel, Margaret Burnett, Lixin Li, Christopher Dupuis and Andrei Sheretov
A methodology for testing spreadsheets
ACM Transactions on Software
Engineering and Methodology
Volume 10 (2001)
Pages 110 - 147
Εργαλειοθήκη βελτιστοποίησης (καταργήθηκε 2016)
Οι μη-αιτιοκρατικοί αλγόριθμοι βελτιστοποίησης όπως αυτοί που βασίζονται
στην εξομοιούμενη ανόπτηση (simulated annealing) και τις γενετικές
μεθόδους συχνά απαιτούν πειραματισμό για την εξεύρεση των βέλτιστων
παραμέτρων και τεχνικών υλοποίησης.
Η εργασία αυτή περιλαμβάνει την υλοποίηση μιας εργαλειοθήκης βελτιστοποίησης
η οποία εμπεριέχοντας την υλοποίηση των παραπάνω αλγορίθμων θα επιτρέπει
στο χρήστη την επιλογή και αξιολόγηση διαφορετικών αλγορίθμων, τεχνικών,
και παραμέτρων τους.
Βιβλιογραφία
- Diomidis D. Spinellis and Chrissoleon T.
Papadopoulos.
Production line buffer allocation: Genetic algorithms versus simulated
annealing.
In Second International Aegean Conference on the Analysis and Modelling
of Manufacturing Systems, pages 89-101, Tinos, Greece, May 1999.
University of the Aegean, Department of Business Administration.
- Diomidis Spinellis and Chrissoleon T.
Papadopoulos.
ExPLOre: A modular architecture for production line
optimisation.
In Proceedings of the 5th International Conference of the Decision
Sciences Institute, Athens, Greece, July 1999.
- V. Cerny.
Thermodynamical approach to the traveling salesman problem: an efficient
simulation algorithm.
Journal of Optimization Theory and Applications, 45:41-51,
1985.
- David E. Goldberg.
Genetic Algorithms: In Search of Optimization & Machine Learning.
Addison-Wesley, 1989.
- L. Ingber.
Simulated annealing: Practice versus theory.
Journal of Mathematical Computation Modelling, 18(11):29-57,
1993.
Υλοποίηση του Μηχανισμού των Αντικυθήρων σε τρεις διαστάσεις (καταργήθηκε 2014)
O
Μηχανισμός των Αντικυθήρων (
http://el.wikipedia.org/wiki/%CE%9C%CE%B7%CF%87%CE%B1%CE%BD%CE%B9%CF%83%CE%BC%CF%8C%CF%82_%CF%84%CF%89%CE%BD_%CE%91%CE%BD%CF%84%CE%B9%CE%BA%CF%85%CE%B8%CE%AE%CF%81%CF%89%CE%BD)
είναι ένας αρχαίος μηχανικός υπολογιστής αστρονομικών φαινομένων.
Στόχος της εργασίας είναι η αυτοματοποιημένη κατασκευή ενός πλήρως
λειτουργικού ιδεατού ψηφιακού αντιγράφου του υπολογιστή σε τρεις διαστάσεις.
Ιδέες για τον τρόπο υλοποίησης μπορούν να αντληθούν από την υπάρχουσα
προσομοίωση του υπολογιστή σε δύο διαστάσεις (
http://www.dmst.aueb.gr/dds/sw/ameso/index.el.html) στο περιβάλλον Squeak EToys.
Παραδοτέο της εργασίας είναι αρχείο στερεολιθογραφίας μορφότυπου
STL (
https://en.wikipedia.org/wiki/STL_%28file_format%29)
για την κατασκευή των γραναζιών καθώς και οδηγίες συναρμολόγησής τους
σε τρεις διαστάσεις.
Η τοποθέτηση των γραναζιών πρέπει να ακολουθεί όσο το δυνατόν τον
αρχαίο μηχανισμό.
Ο σχεδιασμός των γραναζιών και οι οδηγίες συναρμολόγησης θα πρέπει να
υλοποιηθούν αυτόματα από λογισμικό που θα γραφεί για το σκοπό αυτό.
Βιβλιογραφία
- Diomidis Spinellis.
The
Antikythera mechanism: A computer science perspective.
IEEE Computer, 41(5):22–27, May 2008.
(doi:10.1109/MC.2008.166 (http://dx.doi.org/10.1109/MC.2008.166))
- Diomidis Spinellis.
The Antikythera mechanism: Hacking with gears. (http://www.usenix.org/event/usenix09/tech/tech.html#spinellis)
Invited talk, June 2009.
USENIX Annual Technical Conference. San Diego, CA.
- Derek de Solla Price. Gears from the Greeks: The Antikythera Mechanism a calendar computer from ca. 80 B.C. Transactions of the American Philosophical Society New Series, 64(7), November 1974.
- T. Freeth, Y. Bitsakis, X. Moussas, J. H. Seiradakis, A. Tselikas, H. Mangou, M. Zafeiropoulou, R. Hadland, D. Bate, A. Ramsey, M. Allen, A. Crawley, P. Hockley, T. Malzbender, D. Gelb, W. Ambrisco, and M. G. Edmunds. Decoding the ancient Greek astronomical calculator known as the Antikythera Mechanism. Nature, 444(7119):587591, November 2006.
Έλεγχος και βελτιστοποίηση της υλοποίησης OpenMIC (καταργήθηκε 2013)
Ο μετρική MIC (maximal information coefficient) επιτρέπει την εύρεση
μη προκαθορισμένων συσχετίσεων σε σύνολα δεδομένων πολλαπλών διαστάσεων.
Η εργασία αυτή στοχεύει στον έλεγχο και τη βελτιστοποίηση μιας
υλοποίησης της μετρικής αυτής που είναι διαθέσιμη ως λογισμικό ανοικτού κώδικα.
Περισσότερες πληροφορίες σχετικά με τη μετρική αυτή
υπάρχουν στην
ιστοσελίδα που δημιουργήθηκε από την ομάδα που την ανακάλυψε (
http://www.exploredata.net/)
καθώς και το αντίστοιχο
άρθρο (
http://dx.doi.org/10.1126/science.1205438)
που δημοσιεύτηκε στο περιοδικό Science.
Ως βάση της εργασίας παρέχεται
κώδικας (
https://github.com/dspinellis/OpenMIC)
που υλοποιεί τους αλγόριθμους που αναφέρονται στο άρθρο, μεταγλωττίζεται,
και περνά όλους τους ελέγχους μονάδας,
καθώς και η
αρχική εφαρμογή (
http://www.exploredata.net/Downloads)
ως πλαίσιο αναφοράς.
Πράγματα που πρέπει να κάνετε είναι τα παρακάτω.
-
Να διορθώστε την εφαρμογή ώστε να παράγει αποτελέσματα κοντά σε αυτά
της αρχικής εφαρμογής.
-
Να βελτιστοποιήστε τον αλγόριθμο με επιθετική χρήση βοηθητικής μνήμης (caching).
-
Να εξετάσετε άλλες μεθόδους για να επιτύχετε καλύτερα αποτελέσματα σε
μικρότερο χρόνο.
Βιβλιογραφία
-
D. Reshef, Y. Reshef, H. Finucane, S. Grossman, G. McVean, P. Turnbaugh, E. Lander, M. Mitzenmacher, P. Sabeti. Detecting novel associations in large datasets. Science 334, 6062 (2011).
Ασφαλής και διαφανής βελτιστοποίηση σκληρού δίσκου (καταργήθηκε 2013)
Τα προγράμματα βελτιστοποίησης σκληρών δίσκων μεταφέρουν τα περιεχόμενα των
αρχείων έτσι ώστε να καταλαμβάνουν συνεχή χώρο στην επιφάνεια του
δίσκου. Ο συνηθισμένος τρόπος υλοποίησης τέτοιων προγραμμάτων είναι με
απευθείας πρόσβαση στα αδόμητα δεδομένα του δίσκου. Ο τρόπος αυτός
εγκυμονεί κινδύνους για την ασφάλεια των δεδομένων στην περίπτωση που η
βελτιστοποίηση διακοπεί από κάποιον απρόβλεπτο εξωτερικό παράγοντα,
εξαρτάται άμεσα από τη δομή του δίσκου και δεν επιτρέπει την εκτέλεση
του προγράμματος παράλληλα με άλλα. Προτείνουμε την υλοποίηση
προγράμματος βελτιστοποίησης το οποίο - σύμφωνα άλλωστε και με την
αρχιτεκτονική λειτουργικών προγραμμάτων μικροπυρήνα - θα εργάζεται
μετακινώντας αρχεία στο παρασκήνιο με βάση ευρηστικές μεθόδους
προσδιορισμού αρχείων που δεν επηρεάζουν τη λειτουργία του συστήματος.
Βιβλιογραφία
-
Chris Ruemmler and John Wilkes, UNIX Disk Access
Patterns. USENIX Technical Conference Proceedings. p.
405-420, winter 1993. USENIX, San Diego, CA.
Μαθηματικοί υπολογισμοί σε δηλωτικά συστήματα διαμόρφωσης κειμένου (καταργήθηκε 2012· βλ. SWeave)
Δηλωτικά συστήματα διαμόρφωσης κειμένου (SGML, TeX, troff) παρέχουν
ευέλικτες και εξελίξιμες πλατφόρμες για τη συγγραφή επιστημονικών και
τεχνικών κειμένων. Ένα στοιχείο που απουσιάζει από τα συστήματα αυτά
είναι η δυνατότητα δηλωτικής εισαγωγής παραμετρικών μαθηματικών
υπολογισμών. Η δυνατότητα αυτή η οποία παρέχεται από τους σύγχρονους
επεξεργαστές κειμένου μέσω της εισαγωγής λογιστικών φύλλων (MS-Word /
Excel) μπορεί να υποστηριχτεί με τον ορισμό κατάλληλης γλώσσας και την
υλοποίηση ενός ανάλογου προ-επεξεργαστή.
Βιβλιογραφία
-
Doug Bell and Mike Parr. Spreadsheets: a research agenda. ACM SIGPLAN
Notices, 28(9):26-28, September 1993.
-
Donald E. Knuth.
The TeXbook. Addisson-Wesley, 1989.
Επεκτάσεις τις γλώσσας D (καταργήθηκε 2011)
Το Dtrace είναι ένα πολύ δυνατό εργαλείο ανάλυσης της απόδοσης
συστημάτων. Βασίζεται σε μια γλώσσα προγραμματισμού ειδικού πεδίου (D),
την οποία και ο χρήστης χρησιμοποιεί για να εισάγει μετρητές απόδοσης
στον κώδικα του προγράμματος προς αξιολόγηση. Η γλώσσα D δανείζεται
στοιχεία από το συντακτικό της γλώσσας C αλλά η εκτέλεσή της βασίζεται
στη λογική της αναγνώρισης προτύπων (pattern matching). Αν και δίνει στο
χρήστη μεγάλη ελευθερία σχετικά με τον καθορισμό σημείων μέτρησης, είναι
περιοριστική αναφορικά με τις δυνατότητες επεξεργασίας των συλλεγόμενων
δεδομένων και της μορφοποίησης της εξόδου των προγραμμάτων. Αυτό έχει ως
αποτέλεσμα τα ποιο εξελιγμένα προγράμματα σε γλώσσα D να αποτελούνται
σε μεγάλο βαθμό από κώδικα κάποιας άλλης γλώσσας, για παράδειγμα Perl
ή Python.
Σκοπός της προτεινόμενης εργασίας είναι ο σχεδιασμός και η υλοποίηση επεκτάσεων της γλώσσας D ώστε να επιτρέπει τουλάχιστο:
-
Την εκτέλεση κατά συνθήκη στο σώμα ενός probe, για παράδειγμα:
pid123::write:entry
{
if / args[2] > 20 /
@totals["writes larger than 20 bytes"] = count();
}
-
Συνένωση δομών συγκέντρωσης (aggregations) και μορφοποίηση εξόδου, για παράδειγμα:
:::END
{
@merged = merge(1, @totals, @total_time);
printa("%s: %d %d", @merged[0], @totals[2], @total_time[2]);
}
Ο κώδικας του Dtrace είναι ελεύθερα διαθέσιμος.
Πηγές
Εξωτερική πρόσβαση σε δομές δεδομένων STL (καταργήθηκε 2011)
Στόχος της εργασίας είναι η δημιουργία μιας ενδιάμεσης επαφής που θα
επιτρέπει την εύκολη σύνδεση των δομών δεδομένων που παρέχει η βιβλιοθήκη
STL της C++ (vector, deque, list, set, map) στους τελικούς χρήστες
του προγράμματος.
Αυτό μπορεί να επιτευχθεί με τρεις τρόπους:
Με τον τρόπο αυτό θα μπορεί κανείς εύκολα να προσθέσει τη δυνατότητα
χρήσης εντολών SQL, του φλοιού του Unix, ή XML
πάνω στις δομές δεδομένων ενός προγράμματος.
Η σχεσιακή βάση δεδομένων
SQLite
μπορεί εύκολα να ενσωματωθεί ως βιβλιοθήκη σε προγράμματα γραμμένα
σε C ή C++.
Επιπλέον η SQLite παρέχει μια
διεπαφή ιδεατών πινάκων (http://www.sqlite.org/cvstrac/wiki?p=VirtualTableMethods)
μέσω της οποίας μπορούμε να αντιστοιχίσουμε δικές μας πηγές δεδομένων
σε πίνακες SQL.
Παράδειγμα κώδικα
class Employee : public SqlValueInterface {
private:
int id;
string givenName;
string familyName;
int salary;
};
main()
{
vector <Employee> e;
sql_register_vector("Employees", e);
fuse_register_vector("Employees", e);
xml_register_vector("Employees", e);
}
Παράδειγμα χρήσης
Μέσω SQL
SELECT MIN(salary), AVG(salary), MAX(salary) FROM Employees;
SELECT * FROM Employees ORDER BY familyName;
Ως αρχείο κειμένου
awk '
{ sum += $4; count++ }
END { print "Average salary is ", sum / count }
' /tmp/fuse/Employees
Σημείωση
Το τμήμα του έργου που αφορά τη σύνδεση με τη σχεσιακή βάση δεδομένων
μπορεί να υλοποιηθεί και σε Java με τη χρήση της
HSQLB και των κλάσεων που υλοποιούν περιέκτες του πακέτου java.util.
Βιβλιογραφία
Εντοπισμός θέσης με τη χρήση κυψελών κινητής τηλεφωνίας (καταργήθηκε 2011)
Κάθε κυψέλη κινητής τηλεφωνίας εκπέμπει ένα μοναδικό κωδικό.
Αν φυλάξουμε την αλληλουχία των κωδικών των κυψελών που σχετίζονται
με μια μετακίνηση μαζί με τις γεωγραφικές συντεταγμένες της μετακίνησης
αυτής, μπορούμε να συνδυάσουμε τα δεδομένα αυτά έτσι ώστε να υπολογίσουμε
τη θέση μας μόνο από το ιστορικό των κυψελών από τις οποίες έχουμε περάσει.
Στόχος της εργασίας αυτής είναι η υλοποίηση αλγορίθμου που συνδυάζει
τα παραπάνω δεδομένα (συντεταγμένες θέσης, προερχόμενες από GPS και
κωδικούς κυψέλης, προερχόμενους από κινητό τηλέφωνο) για τον αυτόματο
(προσεγγιστικό) υπολογισμό της θέσης μας.
Η παρακάτω εικόνα δείχνει τμήμα μιας καταγεγραμμένης διαδρομής κατά μήκος της
λεωφόρου Κηφισιάς και της Αττικής οδού καθώς και τις αντίστοιχες αλλαγές
κυψελών.
Έρευνα υιοθέτησης λογισμικού ανοικτού κώδικα (καταργήθηκε 2011)
Παρόλο που το λογισμικό ανοικτού κώδικα χρησιμοποιείται σε πολλές εφαρμογές,
η έκταση και το εύρος της χρήσης του δεν έχει τεκμηριωθεί επαρκώς.
Στόχος της εργασίας αυτής είναι η βιβλιογραφική έρευνα για
πληροφοριακά συστήματα ή ενσωματωμένες εφαρμογές στις οποίες χρησιμοποιείται
λογισμικό ανοικτού κώδικα.
Η εργασία περιλαμβάνει την εύρεση, καταχώρηση και συστηματική κατηγοριοποίηση
των εφαρμογών αυτών.
Βιβλιογραφία
Οπτικοποίηση και ανάλυση δυναμικών χρήσης εργαλείων ελέγχου εκδόσεων λογισμικού (καταργήθηκε 2008)
Τα συστήματα ελέγχου εκδόσεως λογισμικού κρατούν λεπτομερή στοιχεία
για όλες τις αλλαγές που γίνονται στο λογισμικό κατά τη διάρκεια της
ανάπτυξής του.
Η post mortem ανάλυση των αλλαγών που έγιναν σε ένα μεγάλο σώμα
λογισμικού σε μακρύ χρονικό διάστημα και από περισσότερα άτομα μπορεί να
προσδιορίσει ενδιαφέροντα στοιχεία για το λογισμικό και την ομάδα που το
ανέπτυξε όπως:
- το διαχωρισμό των αρχείων του συστήματος σε λειτουργικές ομάδες,
- τους ρόλους και τις υπευθυνότητες του προσωπικού που εργάστηκε στο έργο,
- την αλληλοεξάρτηση των αρχείων,
- τον κύκλο ζωής της ανάπτυξης,
- την ποιότητα απαιτήσεων, σχεδιασμού και υλοποίησης για
συγκεκριμένες λειτουργίες, και
- την ποιότητα υλοποίησης για συγκεκριμένα άτομα.
Τα παραπάνω μπορούν να διερευνηθούν σε επίπεδο αρχείου ή, με λίγη πρόσθετη
ανάλυση, σε επίπεδο διαδικασίας ή συνάρτησης.
Υλοποίηση
Η εργασία αυτή δεν προσφέρεται πλέον, μια και έχει υλοποιηθεί παρόμοια
λειτουργικότητα στο έργο code_swarm (http://vis.cs.ucdavis.edu/~ogawa/codeswarm/).
Βιβλιογραφία
- Walter F. Tichy.
Design, implementation, and evaluation of a revision control system,.
In Proceedings of the 6th International Conference on Software
Engineering. IEEE, September 1982.
- Stephen G. Eick, Michael C. Nelson, and Jeffery D. Schmidt
Graphical Analysis of Computer Log Files
Communications of the ACM, 37(12):50-56, December 1994.
- S. G. Eick and J. L. Steffen and E. E. Summer
Seesoft - a tool for visualizing line oriented software statistics
IEEE Transactions on Software Engineering, 18(11):957-968,
November 1992.
Εκτέλεση κρυπτογραφημένου λογισμικού σε έξυπνες κάρτες (καταργήθηκε 2007)
Οι έξυπνες κάρτες (http://en.wikipedia.org/wiki/Smartcard)
επιτρέπουν την εκτέλεση λογισμικού σε περιβάλλον που δυσκολεύει
σημαντικά την πρόσβαση σε μη εξουσιοδοτημένους τρίτους.
Σύγχρονες έξυπνες κάρτες επιτρέπουν την εκτέλεση προγραμμάτων γραμμένων σε Java (http://www.gemplus.com/products/gemxpresso_pro_range/).
Στόχος της εργασίας είναι η προσαρμογή προγραμμάτων Java που εκτελούνται
σε έναν προσωπικό υπολογιστή έτσι ώστε μέρος τους να εκτελείται
κρυπτογραφημένα στο περιβάλλον της έξυπνης κάρτας.
Σημασία στο εγχείρημα αυτό έχουν η αυτοματοποίηση της διαδικασίας,
η ασφάλεια και η απόδοση.
Βιβλιογραφία
- C. Lambrinoudakis.
Smart card technology for deploying a secure information management framework.
Information Management and Computer Security, 8(4):173183, May
2000.
(doi:10.1108/09685220010344925 (http://dx.doi.org/10.1108/09685220010344925))
- Diomidis Spinellis.
Reflection as a mechanism for software integrity verification (http://www.dmst.aueb.gr/dds/pubs/jrnl/1999-TISS-Reflect/html/reflect.html).
ACM Transactions on Information and System Security, 3(1):51–62, February 2000.
(doi:10.1145/353323.353383 (http://dx.doi.org/10.1145/353323.353383))
- Mike Jochen, Lisa
Marvel, and Lori Pollock.
A
framework for tamper detection marking of mobile applications.
In International Symposium on Software Reliability Engineering
(ISSRE), November 2003.
- Mike Jochen, Lori
Pollock, and Lisa Marvel.
Tamper detection marking for object files.
In Military Communications Conference, MILCOM, pages 747751,
October 2003.
Μετατροπή της Wikipedia σε βάση γνώσης (καταργήθηκε 2007)
H ελεύθερη εγκυκλοπαίδεια Wikipedia (http://www.wikipedia.org)
παρέχει στον παγκόσμιο ιστό πάνω από ένα εκατομύριο άρθρα δομημένα
σε μορφή πλούσιου υπερκειμένου.
Το περιεχόμενο της εγκυκλοπαίδειας είναι διαθέσιμο σε μορφή βάσης
δεδομένων.
Στόχος της εργασίας είναι η εξόρυξη από τα άρθρα της Wikipedia,
κανόνων γνώσης, λ.χ. πως ο
Περικλής (http://en.wikipedia.org/wiki/Pericles)
ήταν στρατηγός που έζησε από το 495 έως το 429 π.Χ.
Οι κανόνες μπορούν να εκφραστούν εύκολα ως κατηγορήματα της γλώσσας
Prolog, για παράδειγμα:
military_person('Pericles');
military_rank('Pericles', 'General');
birth_year('Pericles', -495);
death_year('Pericles', -429);
Η εξόρυξη της γνώσης θα γίνει αυτόματα.
Για το σκοπό αυτό θα δημιουργηθεί ένα πλαίσιο για την
περιγραφή της μετατροπής προτύπων (templates) της Wikipedia
σε κανόνες Prolog.
Βιβλιογραφία
Εύρεση τέλειας συνάρτησης κατακερματισμού με τη χρήση στοχαστικού αλγόριθμου (καταργήθηκε 2007)
Η στατική δομή αναζήτησης είναι ένας αφηρημένος τύπος δεδομένων
ο οποίος επιτρέπει την εισαγωγή και την αναζήτηση στοιχείων.
Όλες οι εισαγωγές γίνονται πριν από τις αναζητήσεις με αποτέλεσμα
να είναι δυνατός ο υπολογισμός μιας στατικής δομής που να επιτρέπει
τη γρήγορη εύρεση στοιχείων.
Μια τέτοια δομή μπορεί να βασίζεται σε συνάρτηση κατακερματισμού.
Για παράδειγμα,
το πρόγραμμα gperf υπολογίζει βέλτιστες τέτοιες συναρτήσεις
για χρήση στο τμήμα της λεκτικής ανάλυσης μεταγλωττιστών.
Η πληθώρα των δυνατών συναρτήσεων κατακερματισμού και ο εύκολος τρόπος
αξιολόγησής τους επιτρέπουν τη χρήση γενετικών αλγορίθμων για την
"εξέλιξη" μιας βέλτιστης συνάρτησης από έναν πληθυσμό δυνατών συναρτήσεων.
Η εργασία περιλαμβάνει τη χρήση γενετικών αλγορίθμων για τον υπολογισμό
βέλτιστων συναρτήσεων κατακερματισμού.
Η δυναμική αποτίμηση της συνάρτησης μπορεί να οδηγήσει σε αποδοτικό
αλγόριθμο αναζήτησης.
Βιβλιογραφία
- David E. Goldberg.
Genetic Algorithms: In Search of Optimization & Machine Learning.
Addison-Wesley, 1989.
-
Schmidt, Douglas C. GPERF: A Perfect Hash Function Generator
Second USENIX C++ Conference Proceedings, April 1990.
- Χρήστος Κοίλιας
Δομές Δεδομένων και Οργανώσεις Αρχείων. σ. 208-221
Εκδόσεις Νέων Τεχνολογιών, 1993.
- Donald E. Knuth.
The Art of Computer Programming, volume 3 / Searching
and Sorting.
Addison-Wesley, second edition, 1973.
- Andrew Hume.
Grep wars: The strategic search initiative.
In Proceedings of the EUUG Spring 88 Conference, pages 237-245.
European UNIX User Group, 1988.
- Niklaus Wirth.
Algorithms + Datastructures = Programs. p. 169-280.
Prentice-Hall, 1976.
-
Chang, C.C.: A Scheme for Constructing Ordered Minimal Perfect
Hashing Functions Information Sciences 39(1986), 187-195.
-
Cichelli, Richard J. Author's Response to "On Cichelli's Minimal Perfect Hash
Functions Method" Communications of the ACM, 23, 12(December 1980), 729.
-
Cichelli, Richard J. Minimal Perfect Hash Functions Made Simple
Communications of the ACM, 23, 1(January 1980), 17-19.
-
Cook, C. R. and Oldehoeft, R.R. A Letter Oriented Minimal
Perfect Hashing Function SIGPLAN Notices, 17, 9(September 1982), 18-27.
-
Cormack, G. V. and Horspool, R. N. S. and Kaiserwerth, M.
Practical Perfect Hashing Computer Journal, 28, 1(January 1985), 54-58.
-
Jaeschke, G. Reciprocal Hashing: A Method for Generating Minimal
Perfect Hashing Functions Communications of the ACM, 24, 12(December
1981), 829-833.
-
Jaeschke, G. and Osterburg, G. On Cichelli's Minimal Perfect
Hash Functions Method Communications of the ACM, 23, 12(December 1980),
728-729.
-
Sager, Thomas J. A Polynomial Time Generator for Minimal Perfect
Hash Functions Communications of the ACM, 28, 5(December 1985), 523-532
-
Sebesta, R.W. and Taylor, M.A. Minimal Perfect Hash Functions
for Reserved Word Lists SIGPLAN Notices, 20, 12(September 1985), 47-53.
-
Sprugnoli, R. Perfect Hashing Functions: A Single Probe
Retrieving Method for Static Sets Communications of the ACM, 20
11(November 1977), 841-850.
Έλεγχος τύπων μεταξύ αρχείων της C (καταργήθηκε 2007)
Ο έλεγχος του τύπου των
μεταβλητών και των συναρτήσεων μεταξύ διαφορετικών αρχείων στη γλώσσα
προγραμματισμού C επαφίεται συνήθως σε εξωγλωσσικές συμβάσεις (τη χρήση
κοινών αρχείων ορισμού). Η εργασία αυτή περιλαμβάνει τη μετατροπή του
διερμηνευτή της C gcc για τον έλεγχο τον τύπων κατά το χρόνο της
σύνδεσης των αρχείων. Ο έλεγχος μερικών ευρέως χρησιμοποιούμενων
προγραμμάτων με τον νέο αυτό διερμηνευτή πιστεύουμε ότι θα παρουσιάσει
ορισμένα ενδιαφέροντα αποτελέσματα.
Βιβλιογραφία
Χρονική ανασκόπηση πρακτικών γραφής πηγαίου κώδικα (καταργήθηκε 2007)
Η ύπαρξη μεγάλων συλλογών ανοιχτού πηγαίου κώδικα επιτρέπει την εύκολη
συγκριτική έρευνα μετρικών και χαρακτηριστικών του.
Η εργασία αυτή θα ερευνήσει τη μεταβολή μετρικών που επηρεάζουν την
αναγνωσιμώτητα του κώδικα με βάση το χρόνο και άρα την εξέλιξη της τεχνολογίας.
Μερικές τέτοιες μετρικές μπορεί να είναι:
- το μήκος των ονομάτων των μεταβλητών,
- το μέγεθος κάθε συνάρτησης,
- η χρήση δεικτών,
- η χρήση δομών,
- η χρήση αντικειμένων ή αντίστοιχης τεχνολογίας,
- το μέγεθος των αρχείων,
- το μήκος της κάθε γραμμής.
Ως βάση για τη μελέτη θα μπορούσε να χρησιμοποιηθούν υλοποιήσεις
του λειτουργικού συστήματος Unix,
από αυτές της περιόδου 1973-1979 (http://minnie.tuhs.org/UnixTree/)
μέχρι σύγχρονες εκδόσεις Linux, FreeBSD και Minix.
Βιβλιογραφία
Μετρητής κατανομής χρόνου για διερμηνευόμενα προγράμματα (καταργήθηκε 2007)
Η απόδοση προγραμμάτων γραμμένων σε διερμηνευόμενες γλώσσες όπως
Perl, Ruby, PHP, Python, καθώς και στη γλώσσα του φλοιού του λειτουργικού
συστήματος Unix (shell scripts)
δεν είναι σήμερα εύκολο να αναλυθεί και, κατά συνέπεια,
να βελτιστοποιηθεί.
Με βάση την υπόθεση πως ο χρόνος των προγραμμάτων που γράφονται στις
παραπάνω γλώσσες δεν αναλίσκεται στην
εκτέλεση κώδικα γραμμένου στην αντίστοιχη γλώσσα
αλλά σε κλήσεις του λειτουργικού συστήματος,
μπορούμε να διαχωρίσουμε και να αναλύσουμε τις κλήσεις αυτές ανά διεργασία
και ανά πόρο (λ.χ. αρχείο, δικτυακή σύνδεση), εξάγοντας έτσι πολύτιμα
συμπεράσματα.
Σκοπός της εργασίας είναι η υλοποίηση ενός αναλυτή κατανομής χρόνου
εκτέλεσης διεργασιών που βασίζεται στις κλήσεις του λειτουργικού
συστήματος.
Βάση για την εργασία θα αποτελέσει το πρόγραμμα
παρακολούθησης κλήσεων
του λειτουργικού συστήματος strace.
Το πρόγραμμα είναι ανοιχτού πηγαίου κώδικα και προτείνεται να
επεκταθεί έτσι ώστε να κατανέμει τους χρόνους που μετράει για κάθε
κλήση ανά πόρο και ανά παρακολουθούμενη διεργασία.
Βιβλιογραφία
Η χρήση μη τεκμηριωμένων εντολών των Windows (καταργήθηκε 2007)
Η Microsoft έχει συχνά κατηγορηθεί ότι χρησιμοποιεί αθέμιτα τις
γνώσεις της στον τομέα των λειτουργικών συστημάτων τα οποία η
ίδια δημιουργεί για να επιτύχει δεσπόζουσα θέση και στον τομέα των εφαρμογών.
Στοιχεία το οποίο θα μπορούσε να τεκμηριώσει την άποψη αυτή θα
ήταν η χρήση μη τεκμηριωμένων κλήσεων του λειτουργικού συστήματος
από εφαρμογές της Microsoft.
Η εργασία αυτή περιλαμβάνει τη χρήση εργαλείων όπως το apispy και
το dumpbin πάνω σε εφαρμογές της Microsoft όπως το Office, ο
Internet Explorer και το Visual Studio για την έρευνα του κατά πόσο
χρησιμοποιούνται τέτοιες κλήσεις.
Βιβλιογραφία
Έρευνα λαθών σε κρίσιμα προϊόντα (καταργήθηκε 2007)
Πολλοί κατασκευστές προϊόντων υλικού και λογισμικού παρέχουν τεκμηρίωση
για λάθη τα οποία έχουν εμφανιστεί στα προϊόντα τους.
Στόχος της εργασίας είναι η έρευνα τέτοιας τεκμηρίωσης και η εξαγωγή
συμπερασμάτων σχετικά με το είδος, την κρισιμότητα και τη συγκριτική
συχνότητα των λαθών μεταξύ προϊόντων.
Βιβλιογραφία
Σύγκριση γράφων εξάρτησης ανοιχτού πηγαίου κώδικα και κλειστών εφαρμογών (καταργήθηκε 2007)
Το λογισμικό ανοιχτού πηγαίου κώδικα (open source) και οι τεχνολογικές και
κοινωνικές όψεις της διεργασίας παραγωγής του δέχονται τελευταία σημαντική
προσοχή από ερευνητές, τεχνικούς και τη βιομηχανία.
Η συγκριτική μελέτη της αλληλεξάρτησης υποσυστημάτων ανάμεσα σε
λογισμικό ανοιχτού και λογισμικό "ιδιωτικού" πηγαίου κώδικα μπορεί
να αποκαλύψει σημαντικές πτυχές διαφορών του κύκλου ζωής των δύο μοντέλων.
Η εργασία περιλαμβάνει την συγκριτική εξέταση της αλληλεξάρτησης
σε "κλειστές" εφαρμογές στο περιβάλλον Microsoft Windows και σε ανοιχτές
εφαρμογές στο περιβάλλον Red Hat Linux με μεθοδολογία που θα προταθεί
από τον επιβλέποντα και μικρά εργαλεία που θα υλοποιηθούν στα πλαίσια
της εργασίας.
Η σύγκριση θα βασιστεί σε αλγορίθμους γράφων και τεχνικές οπτικοποίησης.
Πληροφορίες
- Open Source Software (http://www.opensource.org)
- The Halloween Documents (http://www.opensource.org/halloween.html)
- The Cathedral and the Bazaar (http://www.redhat.com/redhat/cathedral-bazaar/cathedral-bazaar.html)
- Red Hat Linux (http://www.redhat.com)
- Χρήστος Κοίλιας
Δομές Δεδομένων και Οργανώσεις Αρχείων. σ. 98-105
Εκδόσεις Νέων Τεχνολογιών, 1993.
- Alfred V. Aho, John E. Hopcroft,
and Jeffrey D. Ullman.
The Design and Analysis of Computer Algorithms, pages 172-309.
Addison-Wesley, 1974.
- Alfred V. Aho, John E. Hopcroft,
and Jeffrey D. Ullman.
Data Structures and Algorithms, pages 198-252.
Addison-Wesley, 1983.
- Donald E. Knuth.
The Art of Computer Programming, volume 1 / Fundamental
Algorithms, pages 362-378.
Addison-Wesley, second edition, 1973.
- Robert Sedgewick.
Algorithms in C, pages 415-508.
Addison-Wesley, 1990.
Ασφαλές περιβάλλον εργασίας Unix σε Perl (καταργήθηκε 2007)
Η γλώσσα Perl
επιτρέπει την εύκολη υλοποίηση προγραμμάτων συστήματος σε χώρο και χρόνο
υποπολλαπλάσιο αυτού που απαιτείται για την υλοποίησή τους σε C. Μια
πρόσθετη δυνατότητα της γλώσσας επιτρέπει την υλοποίηση ασφαλών
προγραμμάτων με δυναμικό έλεγχο ροής δεδομένων ανάμεσα σε προστατευμένα
και μη προστατευμένα πεδία (domain tainting). Ο σχεδιασμός και η
υλοποίηση του φλοιού του Unix καθώς και των βασικών εντολών του σε Perl
μπορούν να δημιουργήσουν ένα περιβάλλον για την ασφαλή ανάπτυξη προγραμμάτων
συστήματος.
Βιβλιογραφία
Προσθήκη καθοριζόμενου τελεστή για πρόσβαση σε μέλη της C++ (καταργήθηκε 2007)
Η γλώσσα C++ δεν επιτρέπει τον καθορισμό του τελεστή . μια και ο δεξιός του
τελεστέος δεν είναι τιμή αλλά μια σταθερά.
Με τη χρήση του καθοριζόμενου τελεστή . μπορεί να αποφευχθεί ο άχρηστος
καθορισμός μεθόδων πρόσβασης (accessor methods) (get* set*) που
συνηθίζεται κατά τον αντικειμενοστρεφή σχεδιασμό.
Η εργασία περιλαμβάνει την προσθήκη στο μεταγλωττιστή gcc του παραπάνω
τελεστή.
Ιδιαίτερο ενδιαφέρον παρουσιάζει ο χειρισμός δεικτών σε μέλη ο οποίος
μπορεί να υλοποιηθεί εύκολα και αποδοτικά.
Βιβλιογραφία
Γλώσσες εξειδεικευμένου πεδίου βασισμένες στην XML (καταργήθηκε 2007)
Υποσυστήματα λογισμικού μπορούν συχνά να σχεδιαστούν και να υλοποιηθούν με καθαρό ευσύνοπτο και αισθητικά άρτιο τρόπο με τη χρήση εξειδικευμένων γλωσσικών φορμαλισμών.
Σε περιπτώσεις όπου ο φορμαλισμός αυτός είναι ασύμβατος με την κύρια γλώσσα υλοποίησης χρησιμοποιούμε εξειδικευμένες "μικρές γλώσσες".
Τις γλώσσες αυτές τις ονομάζουμε γλώσσες εξειδικευμένου πεδίου (ΓΕΠ) - domain-specific languages (DSL).
Τέτοιες περιπτώσεις μπορούν να εμφανιστούν όταν στοιχεία του προγράμματος ή των δεδομένων επαναλαμβάνονται, στην προδιαγραφή σύνθετων σταθερών, στην υποστήριξη μιας περίπλοκης διεργασίας ανάπτυξης, στην υλοποίηση συστημάτων για τα οποία δεν υπάρχει άμεση υποστήριξη από το περιβάλλον ανάπτυξης, στον πολυπαραδειγματικό προγραμματισμό και σε άλλες σύνθετες υλοποιήσεις.
Ένα πρόβλημα με τη χρήση των ΓΕΠ είναι οι εξοικίωση των χρηστών τους
με τη σύνταξη που η κάθε μια χρησιμοποιεί.
Η εργασία αυτή θα διερευνήσει το κατά πόσο η XML μπορεί να χρησιμοποιηθεί ως
μια ΓΕΠ γενικής εφαρμογής.
Στοιχεία που ενδιαφέρουν είναι:
- ο τρόπος ορισμού μιας ΓΕΠ σε XML,
- εργαλεία γραφής της ΓΕΠ βασισμένα σε εργαλεία της XML,
- μεταγλώττιση της ΓΕΠ με τη χρήση βιβλιοθηκών και εργαλείων XML.
Βιβλιογραφία
- Diomidis Spinellis
and V. Guruprasad.
Lightweight languages as software engineering tools.
In [Ramming, 1997], pages 67-76.
- Diomidis Spinellis.
Notable design patterns for domain specific languages.
Journal of Systems and Software, 56(1):91-99, February 2001.
- J. Christopher Ramming, editor.
USENIX Conference on Domain-Specific Languages, Santa Monica, CA, USA,
October 1997. Usenix Association.
-
XML.COM - XML News Feed: All You Can Parse (http://www.xml.com/xml/pub)
- Diomidis Spinellis.
Reliable software implementation using domain specific
languages.
In G. I. Schuëller and P. Kafka, editors, Proceedings ESREL '99 ---
The Tenth European Conference on Safety and Reliability, pages
627-631, Munich-Garching, Germany, September 1999. ESRA, VDI, TUM, A. A.
Balkema.
- Diomidis Spinellis
and Dimitris Gritzalis.
A domain-specific language of intrusion detection.
In Proceedings of the 1st ACM Workshop on Intrusion Detection
Systems. ACM, November 2000.
- Elliotte Rusty Harold and
W. Scott Means.
XML
in a Nutshell.
O'Reilly and Associates, Sebastopol, CA, USA, 2001.
Σχεσιακή πρόσβαση σε δομές δεδομένων (καταργήθηκε 2006)
Οι σύγχρονες γλώσσες, όπως η Java και η C++, επιτρέπουν την
εύκολη δημιουργία τυποποιημένων δομών δεδομένων μέσω
περιεχόντων (containers).
Συχνά όμως θέλουμε μια πιο σύνθετη πρόσβαση σε ένα σύστημα που περιέχει τέτοιες
δομές, για να θέσουμε λ.χ. απαιτητικά ερωτήματα.
Αυτή θα μπορούσε να επιτευχθεί με μια σχεσιακή γλώσσα διεπαφής, όπως η SQL.
Στόχος της εργασίας αυτής είναι η μετατροπή μιας ενσωματωμένης
σχεσιακής βάσης δεδομένων όπως η
HSQLDB (http://www.hsqldb.org/) (Java) ή η
SQLite (http://www.sqlite.org/) (C) έτσι ώστε να μπορεί
να δίνει εύκολα σχεσιακή πρόσβαση σε περιέχοντες.
Ανάλογο παράδειγμα είναι η βιβλιοθήκη SWILL που επιτρέπει εύκολα
σ'ένα πρόγραμμα να δρα ως εξυπηρετητής ιστού.
Βιβλιογραφία
- Sotiria Lampoudi and
David M. Beazley.
SWILL: A simple embedded web server library.
In USENIX Technical Conference Proceedings, Monterey, CA, USA,
June 2002. Usenix Association.
FREENIX Track Technical Program.
Αυτόματη ανίχνευση επιθέσεων ένεσης SQL (καταργήθηκε 2006)
Οι επιθέσεις ένεσης SQL (SQL injection attacks) βασίζονται στην
εισαγωγή δεδομένων που θα προκαλέσουν τη μη εξουσιοδοτημένη
εκτέλεση εντολών SQL.
Η εργασία αυτή περιλαμβάνει το σχεδιασμό και την υλοποίηση ενός
προστατευτικού περιβλήματος για βιβλιοθήκες διασύνδεσης με τη βάση
δεδομένων, όπως αυτές που υποστηρίζουν τα πρωτόκολλα ODBC και JDBC.
Το περίβλημα, θα συνδέει εντολές SQL με αντίστοιχους τόπους κλήσης
τους, έτσι ώστε σε περίπτωση που κληθούν άλλες μη επιτρεπόμενες εντολές να τις
ανιχνεύει και να απογερεύει την εκτέλεσή τους ή να σημαίνει συναγερμό.
Βιβλιογραφία
- Stephen Boyd and
Angelos Keromytis.
SQLrand: Preventing SQL injection attacks.
In Markus Jakobsson, Moti Yung, and Jianying Zhou, editors, Applied
Cryptography and Network Security, Second International Conference, ACNS
2004, Yellow Mountain, China, June 8-11, 2004, Proceedings, volume
3089 of Lecture Notes in Computer Science. Springer, 2004.
- Yves Younan, Wouter
Joosen, and Frank Piessens.
A methodology for
designing countermeasures against current and future code injection
attacks.
In Proceedings of the Third IEEE International Information Assurance
Workshop 2005 (IWIA2005). IEEE, March 2005.
- Mark Graff and Ken van Wyk.
Secure Coding.
O'Reilly and Associates, Sebastopol, CA, 2003.
- Michael Howard and David LeBlanc.
Writing Secure Code.
Microsoft Press, Redmond, WA, second edition, 2003.
- John Viega and Gary McGraw.
Building Secure Software: How to Avoid Security Problems the Right Way.
Addison-Wesley, Boston, MA, 2001.
Νέα Επιχειρησιακά Μοντέλα στην Ανάπτυξη και Διάθεση Λογισμικού - Ανάλυση Διεθνών Πρακτικών και Ανάπτυξη Εργαλείου Υποστήριξης Αποφάσεων (καταργήθηκε 2006)
Η εργασία αυτή προσφέρεται από την εταιρία
Singular (http://www.singular.gr).
Το πλαίσιο της εργασίας θα διαμορφωθεί σε συνεργασία με στέλεχος της εταιρίας.
Νέες Εφαρμογές Σημασιολογικών Δικτύων στην Αναπαράσταση Πληροφορίας και Γνώσης σε Επιχειρησιακό Περιβάλλον (καταργήθηκε 2006)
Η εργασία αυτή προσφέρεται από την εταιρία
Singular (http://www.singular.gr).
Το πλαίσιο της εργασίας θα διαμορφωθεί σε συνεργασία με στέλεχος της εταιρίας.
Συστήματα Επιχειρησιακής Μοντελοποίησης και Αναπαράστασης : Αξιολόγηση και Εφαρμογές (καταργήθηκε 2006)
Η εργασία αυτή προσφέρεται από την εταιρία
Singular (http://www.singular.gr).
Το πλαίσιο της εργασίας θα διαμορφωθεί σε συνεργασία με στέλεχος της εταιρίας.
Μεταγλώττιση φύλλων εργασίας του Excel (καταργήθηκε 2006)
Τα φύλλα εργασίας του Excel συχνά περιέχουν χιλιάδες ενεργά κελιά και αντίστοιχους
τύπους.
Συχνά όμως λίγα μόνο στοιχεία από το φύλο εργασίας μεταβάλλονται ενώ είναι από
την αρχή γνωστό ποια στοιχεία αποτελούν το σταθερό μοντέλο και ποια τις εισόδους
του.
Σκοπός της εργασίας είναι η υλοποίηση ενός συστήματος που θα μεταγλωττίζει
(πιθανώς σε κώδικα C, C# ή .NET CLR) φύλλα εργασίας του Excel.
Το νέο φύλλο εργασίας που θα παράγεται θα αντικαθιστά κελιά που περιέχουν
τύπους που δε μεταβάλλονται με κλήσεις στις αντίστοιχες μεταγλωττισμένες συναρτήσεις.
Η μεταγλώττιση μπορεί να χρησιμοποιήσει τεχνικές αφηρημένης διερμηνείας (abstract interpretation)
για τη βελτιστοποίηση του παραγώμενου κώδικα.
Βιβλιογραφία
- David Boctor.
Microsoft Office 2000 Visual Basic Fundamentals.
Microsoft Press, Redmond, WA, USA, 1999.
- Alfred V. Aho, Ravi Sethi, and
Jeffrey D. Ullman.
Compilers, Principles, Techniques, and Tools.
Addison-Wesley, 1985.
-
Doug Bell and Mike Parr. Spreadsheets: a research agenda. ACM SIGPLAN
Notices, 28(9):26-28, September 1993.
-
Spreadsheet Research (http://www.cba.hawaii.edu/panko/ssr/)
- Christoph M. Hoffmann,
Michael J. O'Donnel, and Robert I. Strandh.
Implementation of an interpreter for abstract equations.
Software: Practice & Experience, 15(12):1185-1204, December
1985.
Διαμόρφωση προγραμμάτων μέσω XML (καταργήθηκε 2005)
Πολλά προγράμματα διαμορφώνουν δυναμικά τη λειτουργία τους με βάση εξωτερικά
αρχεία.
Στο περιβάλλον Unix τα αρχεία αυτά έχουν ad hoc περιεχόμενο και όνομα .*rc.
Στο περιβάλλον Windows η διαμόρφωση γινόταν παλαιότερα από αρχεία με
συγκεκριμένη σύνταξη και όνομα *.ini και σήμερα από τη βάση δεδομένων
που αναφέρεται ως registry.
Στόχος της εργασίας είναι η δημιουργία ενός σχήματος XML,
εργαλείων υποστήριξης και μιας
μικρής αυτοδύναμης και αποδοτικής βιβλιοθήκης που θα επιτρέπει τη
χρήση αρχείων διαμόρφωσης γραμμένων σε XML.
Τα ονόματα των στοιχείων της διαμόρφωσης καθώς και οι μεταβλητές του
προγράμματος που σχετίζονται με αυτά θα αναφέρονται σε ένα αρχείο XML.
<?xml version="1.0" ?>
<metaconfiguration>
<language>Java</language>
<item>
<name>xsize</name>
<type>int</name>
<variable>x_size</variable>
</item>
<item>
<name>name</name>
<type>string</name>
<method>Properties::set_name</method>
</item>
</metaconfiguration>
Το αρχείο αυτό θα μετασχηματίζεται (με τη χρήση XSLT) σε κώδικα για σύνδεση
με το υπόλοιπο πρόγραμμα καθώς και σε αρχείο XSchema που θα ορίζει το σχήμα
του συγκεκριμένου αρχείου διαμόρφωσης.
Επιθυμητό στοιχείο της εργασίας είναι η μέγιστη δυνατή μεταφερσιμότητα του
συστήματος μεταξύ C, C++, C# και Java.
Βιβλιογραφία
- Alfred V. Aho, Ravi Sethi,
and Jeffrey D. Ullman.
Compilers, Principles, Techniques, and Tools.
Addison-Wesley, Reading, MA, 1985.
- Diomidis Spinellis.
Notable design patterns for domain specific languages.
Journal of Systems and Software, 56(1):91-99, February 2001.
- Elliotte Rusty Harold and
W. Scott Means.
XML
in a Nutshell.
O'Reilly and Associates, Sebastopol, CA, USA, 2001.
Δικαιώματα και λίστες ελέγχου πρόσβασης στο Unix (καταργήθηκε 2004)
Το λειτουργικό σύστημα Windows, όπως και ορισμένα άλλα λειτουργικά συστήματα,
ελέγχει την πρόσβαση σε αντικείμενα (λ.χ. αρχεία) με βάση τις
λίστες ελέγχου πρόσβασης (access control lists).
Επίσης, περιορίζει τη χρήση ορισμένων κλήσεων του συστήματος
(π.χ. SetSystemPowerState) σε χρήστες που έχουν τα συγκεκριμένα
δικαιώματα (privileges).
Στόχος της εργασίας είναι η προσθήκη των παραπάνω δυνατοτήτων σε
ένα λειτουργικό σύστημα ανοιχτού πηγαίου κώδικα τύπου Unix,
όπως το FreeBSD, OpenBSD ή το Linux.
Οι λίστες πρόσβασης μπορούν να υλοποιηθούν με βάση την υπάρχουσα
υποστήριξη ομάδων χρηστών και τη δυναμική δημιουργία συνθετικών ομάδων
(π.χ. acl_453).
Τα μέλη των συνθετικών ομάδων θα υπολογίζονται με
λογισμό επί των δικαιωμάτων των αντικειμένων και των υπαρχόντων ομάδων.
Με τον τρόπο αυτό δεν απαιτούνται αλλαγές στον πυρήνα ή σε υπάρχοντα
προγράμματα.
Τα δικαιώματα στις κλήσεις του λειτουργικού συστήματος,
υλοποιούνται με αλλαγές στον πυρήνα.
Ένας παραμετρικός τρόπος προδιορισμού είναι η προσθήκη
αρχείων που καθορίζουν την ομάδα χρηστών που έχει τη συγκεκριμένη δυνατότητα
κλήσης (π.χ. /etc/privileges/acct).
Βιβλιογραφία
- Michael Howard and
David LeBlanc.
Writing Secure Code.
Microsoft Press, Redmond, WA, second edition, 2003.
- Kay A. Robbins and
Steven Robbins.
UNIX Systems Programming: Communication, Concurrency, and
Threads.
Prentice Hall PTR, Upper Saddle River, NJ, 2003.
- Eric Steven Raymond.
The Art of Unix Programming.
Addison-Wesley, 2003.
- Andrew S. Tanenbaum.
Operating Systems: Design and Implementation.
Prentice-Hall, Englewood Cliffs, NJ, 1987.
- Maurice J. Bach.
The
Design of the UNIX Operating System.
Prentice-Hall, Englewood Cliffs, NJ, 1986.
- Samuel J. Leffler,
Marshall Kirk McKusick, Michael J. Karels, and John S. Quarterman.
The
Design and Implementation of the 4.3BSD Unix Operating System.
Addison-Wesley, Reading, MA, 1988.
- W. Richard Stevens.
Advanced Programming in the UNIX Environment.
Addison-Wesley, 1992.
- Gary Fernandez and Larry Allen.
Extending the {UNIX} Protection Model with Access Control Lists.
In Proceedings of the Summer 1988 Technical Conference
pp. 119--132, Usenix Association.
- Steven M. Kramer.
On Incorporating Access Control Lists into the {UNIX} Operating System.
In Proceedings of the Summer 1988 Technical Conference
pp. 38--48, Usenix Association.
Υλοποίηση ασφαλούς ομότιμου δικτύου για την ανταλλαγή μηνυμάτων σχετικά με την δραστηριότητα κακόβουλου λογισμικού (καταργήθηκε 2003)
Η εργασία περιγράφεται στη σελίδα
http://istlab.dmst.aueb.gr/~vbill/topic.htm (http://istlab.dmst.aueb.gr/~vbill/topic.htm)
Μέτρηση συνέπειας στον πηγαίο κώδικα προγραμμάτων (καταργήθηκε 2003)
Η συνέπεια στο πως έχει γραφεί ένα πρόγραμμα είναι συχνά σημαντικός
παράγοντας που είναι πιθανό να μπορεί να χρησιμοποιηθεί για να προβλέψει
άλλα στοιχεία της συμπεριφοράς του προγράμματος, όπως την παρουσία λαθών.
Στόχος της εργασίας αυτής είναι η χρήση στατιστικών τεχνικών για την
ανάλυση της συνέπειας (η ασυνέπειας) που εμφανίζεται στον τρόπο που
έχει γραφεί ο πηγαίος κώδικας.
Η ανάλυση του κώδικα θα γίνει με εργαλείο που θα αναπτυχθεί στα πλαίσια
της εργασίας.
Στοιχεία που θα αναλυθούν μπορεί να είναι:
- Η στοίχιση των γραμμών
- Η χρήση κενών ανάμεσα σε τελεστές
- Το μέγιστο μήκος των γραμμών
- Τα χαρακτηριστικά των ονομάτων των μεταβλητών
Στην εργασία θα μελετηθεί η αλληλοσυσχέτιση των παραπάνω κατηγοριών
καθώς και η σχέση τους με τη χρήση βέλτιστων πρακτικών γραφής κώδικα
και με συχνά εμφανιζόμενα λάθη.
Βιβλιογραφία
Μεταγλωττιστής κανονικών εκφράσεων σε Java bytecodes (καταργήθηκε 2003)
Οι κανονικές εκφράσεις χρησιμοποιούνται σε πολλές εφαρμογές επεξεργασίας
συμβολοσειρών.
Η αποδοτική χρήση τους είναι σημαντική και αντικείμενο έρευνας.
Οι εκφράσεις συχνά μεταγλωττίζονται σε αφηρημένο κώδικα ενός αυτόματου
το οποίο και τις εκτελεί.
Η εργασία αυτή έχει ως στόχο τη μεταγλώττιση κανονικών εκφράσεων στη
γλώσσα της αφηρημένης μηχανής της Java (Java bytecodes) με στόχο
την αποδοτική εκτέλεσή τους.
Βιβλιογραφία
- Ken Arnold and James Gosling. The Java Programming Language.
Addisson-Wesley, 1996.
- Andrew Hume.
Grep wars: The strategic search initiative.
In Proceedings of the EUUG Spring 88 Conference, pages 237-245.
European UNIX User Group, 1988.
- Tim Lindhorn and Frank
Yellin.
The Java
Virtual Machine Specification.
The Java Series. Addison-Wesley, 1997.
Διεπαφή σχεσιακής βάσης δεδομένων πηγαίου κώδικα (καταργήθηκε 2003)
Είναι δυνατό ένα σύνολο από προγράμματα να αναλυθεί και να αποθηκευτεί σε
σχεσιακή βάση δεδομένων με τέτοιο τρόπο ώστε ο πηγαίος κώδικας να μπορεί
να ανασυσταθεί από το περιεχόμενο της βάσης.
Ένα κατάλληλο σχεσιακό σχήμα θα επέτρεπε να γίνονται στη βάση μόνο
μετασχηματισμοί που θα οδηγούσαν πάλι σε ορθά προγράμματα (refactoring).
Στόχος της εργασίας είναι η υλοποίηση διεπαφής για μια τέτοια βάση
δεδομένων.
Το σύστημα θα υλοποιηθεί σε Java με τη χρήση JDBC για επικοινωνία με τη
βάση δεδομένων.
Είναι επίσης δυνατό να χρησιμοποιηθεί η ενσωματωμένη βάση δεδομένων
hsqldb (http://hsqldb.sourceforge.net/).
Η διεπαφή μπορεί να υλοποιηθεί είτε σε περιβάλλον swing ή σε περιβάλλον
web με τη χρήση ενός ενσωματωμένου εξυπηρετητή Web.
Βιβλιογραφία
- Ken Arnold and James Gosling. The Java Programming Language.
Addisson-Wesley, 1996.
- Martin Fowler.
Refactoring: Improving the Design of Existing Code
Addison-Wesley, 2000.
Φλοιός XML (καταργήθηκε - 2002)
Η XML επιτρέπει τον εύκολο προσδιορισμό και την επεξεργασία σύνθετων δομών δεδομένων.
Η επεξεργασία των δεδομένων μπορεί να πραγματοποιηθεί γράφοντας κώδικα,
με τη χρήση γλωσσών μετασχηματισμού,
μέσα από ένα γραφικό περιβάλλον ή
μέσα από έναν φλοιό εντολών (command shell).
Στόχος της εργασίας αυτής είναι ο σχεδιασμός και η υλοποίηση ενός φλοιού εντολών για την
επεξεργασία σύνθετων δομών ορισμένων με XML.
Η εργασία θα εκμεταλλεύεται υπάρχουσες βιβλιοθήκες XML ανοικτού κώδικα.
Βιβλιογραφία
Ποιες βελτιστοποιήσεις υποστηρίζουν οι σύγχρονοι μεταγλωττιστές C++; (καταργήθηκε - 2002)
Ένας μεγάλος αριθμός από συχνά χρησιμοποιούμενες δομές κώδικα της C++
μπορεί εύκολα να βελτιστοποιηθεί έτσι ώστε να μην επιβαρύνει τον τελικό
κώδικα.
Η εργασία αυτή θα ερευνήσει κατά πόσο μεταγλωττιστές παραγωγής όπως
η Microsoft C++ και ο GNU C++ Compiler υλοποιούν τις βελτιστοποιήσεις
αυτές.
Η έρευνα θα γίνει ακολουθώντας τα βήματα που παρουσιάζονται παρακάτω.
- Περιγραφή των τεχνικών βελτιστοποίησης που παρουσιάζονται στη
βιβλιογραφία (κυρίως στο βιβλίο του Stroustrup).
- Κατασκευή μικρών προγραμμάτων που να υλοποιούν την κάθε τεχνική.
- Μεταγλώττιση και ανάγνωση του παραγόμενου κώδικα.
- Συγκέντρωση και σύγκριση των αποτελεσμάτων.
Βιβλιογραφία
Αυτόματη δημιουργία βιβλιογραφικών αναφορών (καταργήθηκε - 2002)
Το πρόγραμμα BibTeX δημιουργεί αυτόματα λίστες για βιβλιογραφικές αναφορές
με βάση τις παραπομπές που υπάρχουν σε ένα κείμενο.
Το BibTeX διαβάζει:
- αρχεία του επεξεργαστή κειμένου LaTeX,
- αρχεία κειμένου που περιέχουν τη βιβλιογραφία σε ένα απλό σχήμα βάσης
δεδομένων και
- αρχεία σε μια απλή γλώσσα επεξεργασίας στοίβας που περιγράφει
τη μορφή που θα έχει η λίστα των βιβλιογραφικών παραπομπών.
Από τα παραπάνω στοιχεία το πρόγραμμα δημιουργεί τη λίστα των βιβλιογραφικών
αναφορών στη γλώσσα του LaTeX.
Σκοπός της εργασίας αυτής είναι η επανυλοποίηση του συστήματος με τη
χρήση νεώτερης τεχνολογίας.
Μερικά από τα χαρακτηριστικά που μπορεί να έχει το νέο σύστημα είναι
τα παρακάτω:
- ο ορισμός των παραπομπών και η λίστα των αναφορών να μπορεί να
οριστεί παραμετρικά σε διαφορετικές
μορφές όπως LaTeX, RTF ή OLE automation (Microsoft Word), HTML,
- η περιορισμένη και απλοϊκή γλώσσα περιγραφής της μορφής της εξόδου να
εκσυγχρονιστεί με τη χρήση μιας έτοιμης ενσωματούμενης
τυποποιημένης γλώσσας όπως Perl, VBScript, Tcl/Tk.
Για το σκοπό αυτό θα πρέπει να γραφτεί και ένα πρόγραμμα μετατροπής των
υπαρχόντων αρχείων στη νέα γλώσσα.
- η βιβλιογραφική βάση να μπορεί να φυλαχτεί και σε σχεσιακή βάση
δεδομένων,
- η διεπαφή με τη βιβλιογραφική βάση να μπορεί να γίνει με τρόπο
φιλικό για τον αδαή χρήστη μέσα από παραθυρικό περιβάλλον.
Βιβλιογραφία
- Leslie Lamport.
LATEX: A
Document Preparation System.
Addisson-Wesley, 1985.
- John Grossman, editor.
The Chicago
Manual of Style.
The University of Chicago Press, Chicago and London, fourteenth edition,
1993.
- Oren Patashnik
BibTeXing: Information for general BibTeX Users
8 February 1988.
Available as part of the BibTeX distribution.
http://www.tex.org (http://www.tex.org)
- Oren Patashnik
Designing BibTeX Styles
8 February 1988.
Available as part of the BibTeX distribution.
http://www.tex.org (http://www.tex.org)
- John K. Ousterhout.
Tcl and the
Tk Toolkit.
Addison-Wesley, 1994.
- Larry Wall and Randal L.
Schwartz.
Programming
Perl.
O'Reilly and Associates, Sebastopol, CA, USA, 1990.
Γραφική παράσταση ψηφιακών υπογραφών (καταργήθηκε - 2002)
Ένα πρόβλημα στην υλοποίηση διεργασιών που βασίζονται σε κρυπτογραφικά πρωτόκολλα είναι
η ταύτιση μιας ψηφιακής υπογραφής με την οντότητα στην οποία αυτή ανήκει.
Η ταύτιση αυτή γίνεται συχνά με τη σύγκριση του "αποτυπώματος" της ψηφιακής
υπογραφής με ένα αποτύπωμα το οποίο είναι γνωστό με κάποιον ασφαλή τρόπο.
Ο άνθρωπος δύσκολα συγκρίνει ακολουθίες αριθμών, ενώ αντίθετα έχει εξελικτικά
αναπτύξει ανεπτυγμένη δυνατότητα αναγνώρισης προσώπων.
Η εργασία αυτή περιλαμβάνει το σχεδιασμό και την υλοποίηση συστήματος που
μετασχηματίζει ψηφιακές υπογραφές σε εικόνες προσώπων και την έρευνα
της απόδοσης του συστήματος αυτού για την ταυτοποίηση των υπογραφών.
Βιβλιογραφία
- C. Ellison and
B. Schneier.
Ten risks of pki: What
you're not being told about public key infrastructure.
Computer Security Journal, 16(1):1-7, 2000.
- R. L. Rivest, A. Shamir,
and L. Adleman.
A method for obtaining digital signatures and public-key cryptosystems.
Communications of the ACM, 21(2), February 1978.
- Dorothy Elizabeth Robling Denning.
Cryptography and Data Security.
Addison-Wesley, 1983.
- Bruce Schneier.
Applied Cryptography.
Wiley, second edition, 1996.
- Bruce Schneier.
Secrets & Lies: Digital Security in a Networked World.
Wiley Computer Publishing, 2000.
Οπτικοποίηση διαδρομών GPS (καταργήθηκε - 2000)
Το GPS (Global Positioning System) επιτρέπει την καταγραφή τη διαδρομής
που ακολουθεί ένα όχημα ή σκάφος με την αποθήκευση του στίγματός του στις
διαδοχικές του θέσεις.
Η καταγεγραμμένη πορεία εκτός από στοιχεία της διαδρομής εμπεριέχει
και το στοιχείο της ταχύτητας μέσω του χρόνου που είναι αποθηκευμένος
σε σχέση με κάθε στίγμα.
Σκοπός της εργασίας αυτής είναι ο σχεδιασμός και η υλοποίηση
ενός εργαλείου για τη δημιουργία ενός αλληλεπιδραστικού
χάρτη της διαδρομής ο οποίος θα μπορεί να προβάλλεται στο Web.
Πληροφορίες
- Global Positioning System Overview (http://www.utexas.edu/depts/grg/gcraft/notes/gps/gps.html)
- GPS Waypoint Registry (http://www.waypoint.org/)
- Digital Chart of the World (http://ortelius.maproom.psu.edu/dcw/)
- GPS World Home Page (http://www.gpsworld.com/)
- Global Positioning System (GPS) Resources (http://www.cnde.iastate.edu/gps.html)
- NMEA-0183 and GPS Information (ftp://sundae.triumf.ca/pub/peter/index.html)
- GPS - General Information Sites (http://www.inmet.com/~pwt/gps_gen.htm)
Στατιστική και γλωσσολογική ανάλυση δικαστικών αποφάσεων (καταργήθηκε - 2000)
Ανάλυση corpus (σώματος κειμένου) 20000 αποφάσεων των Ελληνικών
Ανωτάτων Δικαστηρίων. Σκοπός της ανάλυσης αυτής είναι η ανάπτυξη
κατάλληλων εργαλείων και διαδικασιών για τη δημιουργία εννοιολογικού
δέντρου ανάμεσα στις αποφάσεις, και την εξαγωγή στατιστικών
συμπερασμάτων σχετικά με τη γλώσσα που χρησιμοποιείται (δημοτική
καθαρεύουσα), την χρονική διαφοροποίησή της και τον τρόπο έκφρασης
διαφορετικών δικαστηρίων ή δικαστών.
Βιβλιογραφία
Φλοιός γραφικής επεξεργασίας εικόνων (καταργήθηκε - 2000)
Το περιβάλλον
επεξεργασίας εικόνων pbmplus παρέχει μια πληθώρα εντολών για την
επεξεργασία εικόνων. Ο τρόπος χρήσης του περιβάλλοντος βασίζεται στη
σειριακή εκτέλεση των εντολών και τον προσδιορισμό παραμέτρων μέσω
διακοπτών. Προτείνουμε τη μελέτη ενός πιο φιλικού συστήματος διεπαφής
με το χρήστη και την υλοποίησή του σε Tcl/Tk (σύστημα που επιτρέπει την
εύκολη υλοποίηση γραφικών εφαρμογών σε παραθυρικά περιβάλλοντα).
Βιβλιογραφία
-
John K. Ousterhout. Tcl and the Tk
Toolkit. Addison-Wesley, 1994.
Η αξιοπιστία παραπομπών στο Internet σε άρθρα περιοδικών (καταργήθηκε - 1999)
Συχνά σε άρθρα επιστημονικών περιοδικών υπάρχουν παραπομπές σε πηγές
στο Internet.
Οι πηγές αυτές δεν έχουν αρχειακό χαρακτήρα και με την πάροδο του
χρόνου παύουν να είναι επίκαιρες απαξιώνοντας έτσι και τα άρθρα τα
οποία παραπέμπουν σε αυτές.
Οι εργασία περιλαμβάνει την υλοποίηση εργαλείου για την αυτόματη
αξιολόγηση παραπομπών στο Web από άρθρα των ACM, IEEE, Usenix κλπ τα οποία
υπάρχουν και σε ηλεκτρονική μορφή ως προς την επικαιρότητά τους και
την εξαγωγή συμπερασμάτων.
Βιβλιογραφία
- Tim Berners-Lee, Robert
Cailliau, Ari Luotonen, Henrik Frystyk Nielsen, and Arthur Secret.
The World-Wide-Web.
Communications of the ACM, 37(8):76-82, August 1994.
Ασφαλής διαμόρφωση εξυπηρετητή ιστοσελίδων (καταργήθηκε - 1999)
Η εξάπλωση
του Internet και του WWW παρέχει μια διαδεδομένη πλατφόρμα για την
υλοποίηση της επικοινωνίας με το χρήστη διαφόρων εφαρμογών.
Προτείνουμε την ανάλυση θεμάτων
ασφαλείας και την υλοποίηση με τη χρήση τεχνολογίας CGI
φιλικού συστήματος ασφαλούς διαμόρφωσης του εξυπηρετητή του ιστού
Apache.
Η πιστοποίηση του χρήστη θα γίνεται με τη χρήση πιστοποιητικών.
Βιβλιογραφία
- Claus Fritzner, Leif Nilsen,
and Asmund Skomedal.
Protecting security information in distributed systems.
In 1991 IEEE Symposium on Security and Privacy, pages 245-254.
IEEE Computer Society Press, 1991.
- Kraig Meyer, Stuart Schaeffer,
and Dixie Baker.
Addressing threats in World Wide Web technology.
In 11th Annual Computer Security Applications Conference, pages
123-132. IEEE Computer Society Press, 1995.
- Charles Pfleeger.
Security in Computing.
Prentice-Hall, 1996.
- Apache Home Page http://www.apache.org
Η αξιοπιστία των προγραμμάτων του Unix: οκτώ χρόνια αργότερα (καταργήθηκε - 1998)
Το 1990 δημοσιεύτηκε στο περιοδικό Communications of the ACM άρθρο
στο οποίο γινόταν εμπειρικός έλεγχος στην αξιοπιστία αντιπροσωπευτικών
βοηθητικών προγραμμάτων του Unix. Σκοπός της εργασίας αυτής είναι ο
επανέλεγχος των αντίστοιχων προγραμμάτων με παρόμοιες μεθόδους σε
αντιπροσωπευτικά εμπορικά και ερευνητικά συστήματα (λ.χ. AIX, Solaris,
Windows NT, Linux) και η εξαγωγή των αντιστοίχων συμπερασμάτων.
Βιβλιογραφία
-
Barton P. Miller, Lars Fredriksen, and Bryan So. An empirical study of
the reliability of UNIX utilities. Communications of the
ACM, 33(12):32-44, December 1990.
Διορθωτής με δυνατότητα αντίστροφης εκτέλεσης προγραμμάτων (καταργήθηκε - 1998)
Συχνά η επόμενη ενέργεια μετά την ανακάλυψη ενός λάθους στο διορθωτή
είναι η επανεκκίνηση του προγράμματος με σκοπό την ανακάλυψη της αιτίας
που οδήγησε στο λάθος αυτό.
Ιδανικά θα έπρεπε να είναι δυνατή η αντίστροφη εκτέλεση των εντολών
από την εντολή που κατέδειξε το λάθος μέχρι την εντολή που το δημιούργησε.
Λόγω του ότι κατά την εκτέλεση των εντολών χάνονται στοιχεία για να μπορέσει
να γίνει δυνατή η αντίστροφη εκτέλεση των εντολών απαιτείται υποστήριξη από
το μεταγλωττιστή.
Σκοπός της εργασίας αυτής είναι η υλοποίηση ενός μεταγλωττιστή (για
ένα υποσύνολο της C) που για κάθε εντολή θα παράγει και κώδικα για την
αναίρεσή της (undo) καθώς και ενός διορθωτή που θα εκμεταλλεύεται τον
παραπάνω κώδικα για να παρέχει τη δυνατότητα αναίρεσης των εντολών.
Βιβλιογραφία
- M. Ducasse and A-M.
Emde.
Opium+, a meta-debugger for Prolog.
In Proceedings of the European Conference on Artificial
Intelligence, pages 272-277, Munich, August 1988. ECCAI.
- R. Seidner and
N. Tindall.
Interactive debug requirements.
In M.S. Johnson, editor, Proceedings of the Software Engineering
Symposium on High-Level Debugging, pages 9-22. ACM SIGSOFT/SIGPLAN,
March 1983.
- Even Adams and
Steven S. Muchnick.
Dbxtool: A window-based symbolic debugger for sun workstations.
Software: Practice & Experience, 16(7):653-669, July 1986.
Μετατροπή Java bytecodes σε C (καταργήθηκε - 1998)
Η μετατροπή των bytecodes που αποτελούν τις κλάσεις της μεταγλωττισμένης
Java σε κώδικα C και η επαναμεταγλώττισή του θα μπορούσε να προσφέρει
βελτίωση της αποδοτικότητας χωρίς προβλήματα μεταφερσιμότητας.
Η εργασία αυτή περιλαμβάνει την υλοποίηση της μεθόδου αυτής και την
αξιολόγηση της αποδοτικότητας του παραγόμενου κώδικα.
Βιβλιογραφία
- Ken Arnold and James Gosling. The Java Programming Language.
Addisson-Wesley, 1996.
- Tim Lindhorn and Frank
Yellin. The Java Virtual Machine Specification.
The Java Series. Addison-Wesley, 1997.
- Ian Piumarta and Fabio Riccardi.
Optimizing direct threaded code by selective inlining
In proceedings of the 1998 ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI)
SIGPLAN Notices 33(5):291-300. May 1998.
Ασφαλής κατάλογος LDAP (καταργήθηκε - 1998)
Οι υπηρεσίες καταλόγου για την πιστοποίηση εξυπηρετητών και πελατών
πρέπει να προσφέρονται και να ανακτώνται με ασφαλή τρόπο όταν τα στοιχεία
πρόκειται να περάσουν μέσα από ένα ανοικτό δίκτυο.
Η εργασία περιλαμβάνει την προσθήκη σε λογισμικό καταλόγου LDAP
(lightweight directory access protocol)
χαρακτηριστικών ασφαλείας με την υποστήριξη της τεχνολογίας SSL
(secure session layer).
Βιβλιογραφία
- Yeong, W., Howes, T., and S. Kille (1995)
Lightweight Directory Access Protocol, RFC 1777,
Performance Systems International, University of Michigan,
ISODE Consortium. Request for Comments 1777.
Σύνδεση εξυπηρετητή Web με εξυπηρετητή καταλόγου (καταργήθηκε - 1998)
Οι υπηρέτες Web μπορούν να διασφαλίσουν την ταυτότητα του χρήστη τους με
τη χρήση πιστοποιητικών.
Στόχος της εργασίας αυτής είναι η σύνδεση του υπηρέτη Web Apache με
έναν υπηρέτη πιστοποιητικών.
Ο υπηρέτης Apache περιλαμβάνει ένα δομημένο αντικειμενοστρεφές
μοντέλο για την προσθήκη λειτουργιών σε όλα τα στάδια της ανάκτησης
και αποστολής ιστοσελίδων και έτσι επιτρέπει σχετικά εύκολα τη σύνδεση
με άλλες υπηρεσίες.
Βιβλιογραφία
- Yeong, W., Howes, T., and S. Kille (1995)
Lightweight Directory Access Protocol, RFC 1777,
Performance Systems International, University of Michigan,
ISODE Consortium. Request for Comments 1777.
- Apache Home Page http://www.apache.org
Εργαλείο ανάλυσης και διαχείρισης κινδύνων σε πληροφοριακά συστήματα (καταργήθηκε - 1997)
Κατά την ανάπτυξη και τη διαχείριση των πληροφοριακών συστημάτων που
περιέχουν προσωπικά ή ευαίσθητα δεδομένα (σύμφωνα με το Ν. 2472/97
ευαίσθητα δεδομένα είναι αυτά που αφορούν τη
φυλετική ή εθνική προέλευση, τα πολιτικά φρονήματα,
τις θρησκευτικές ή φιλοσοφικές πεποιθήσεις,
τη συμμετοχή σε ένωση, σωματείο και συνδικαλιστική οργάνωση, την υγεία,
την κοινωνική πρόνοια και την ερωτική ζωή, καθώς και τα σχετικά με ποινικές
διώξεις ή καταδίκες) απαιτείται να λαμβάνονται
τα κατάλληλα οργανωτικά και τεχνικά μέτρα για την ασφάλεια
των δεδομένων και την προστασία τους από τυχαία ή αθέμιτη καταστροφή,
τυχαία απώλεια, αλλοίωση, απαγορευμένη διάδοση ή πρόσβαση και κάθε άλλη
μορφή αθέμιτης επεξεργασίας.
Τα μέτρα αυτά πρέπει να εξασφαλίζουν επίπεδο ασφάλειας ανάλογο προς τους
κινδύνους που συνεπάγεται η επεξεργασία και η φύση των δεδομένων που
είναι αντικείμενο της επεξεργασίας.
Στόχος της εργασίας είναι η υλοποίηση ενός εργαλείου το οποίο με τη
χρήση της κατάλληλης μεθόδου (π.χ. της CRAMM: UK Government Risk
Analysis and Management Method) θα βοηθά:
- στην ανάλυση του ρίσκου σε πληροφοριακά συστήματα και δίκτυα,
- στον προσδιορισμό των απαιτήσεων ασφάλειας και πιθανών λύσεων, και
- στον προσδιορισμό των απαιτήσεων αντιμετώπισης
απροβλέπτων γεγονότων και πιθανών λύσεων.
Το εργαλείο θα μπορεί να χρησιμοποιείται σε όλα τα στάδια του κύκλου ζωής
του λογισμικού, από την αρχική μελέτη σκοπιμότητας, το σχεδιασμό και την
υλοποίηση, μέχρι τη συντήρηση.
Βιβλιογραφία
-
Information Technology Security Evaluation Criteria
, published by the Office for Official Publications of the European Communities.
-
A Code of Practice for Information Security Management
, (BS7799), published by the British Standards Institute.
Ιδεατή συσκευή τραπεζικών συναλλαγών στο Internet (καταργήθηκε - 1997)
Η εξάπλωση
του Internet και του WWW παρέχει μια διαδεδομένη πλατφόρμα για την
υλοποίηση δικτυακών εφαρμογών. Προτείνουμε την ανάλυση θεμάτων
ασφαλείας και την υλοποίηση σε γλώσσα Java μιας ιδεατής συσκευής
τραπεζικών συναλλαγών (ATM) η οποία θα επιτρέπει με ασφαλή τρόπο τη
διεκπεραίωση από το σπίτι όλων των συναλλαγών που δεν απαιτούν παρουσία
στην τράπεζα (υπόλοιπο λογαριασμού, μεταφορά μεταξύ λογαριασμών,
εκτύπωση συναλλαγών, πληρωμή λογαριασμών κ.λπ.)
Βιβλιογραφία
-
Ken Arnold and James Gosling. The Java Programming Language.
Addisson-Wesley, 1996.
- Claus Fritzner, Leif Nilsen,
and Asmund Skomedal.
Protecting security information in distributed systems.
In 1991 IEEE Symposium on Security and Privacy, pages 245-254.
IEEE Computer Society Press, 1991.
- Gary McGraw and Edward
Felten.
Java Security Hostile Applets, Holes, and Antidotes.
J. Wiley & Sons, 1996.
- Kraig Meyer, Stuart Schaeffer,
and Dixie Baker.
Addressing threats in World Wide Web technology.
In 11th Annual Computer Security Applications Conference, pages
123-132. IEEE Computer Society Press, 1995.
- Charles Pfleeger.
Security in Computing.
Prentice-Hall, 1996.
Σύστημα διαχείρισης αλλαγών λογισμικού βασισμένο σε σχεσιακή βάση δεδομένων (καταργήθηκε - 1997)
Τα περισσότερα συστήματα διαχείρισης αλλαγών
λογισμικού (Revision Control Systems) υλοποιούν το συντονισμό των
αλλαγών χτίζοντας εξ' αρχής μια ad hoc βάση δεδομένων χρησιμοποιώντας ως
δομικά στοιχεία αρχεία του λειτουργικού συστήματος. Η υλοποίηση των
συναλλαγών, του κλειδώματος και της αποθήκευσης των διαφορετικών
εκδόσεων γίνεται περίπλοκη και δύσκολα μεταφερτή ανάμεσα σε διαφορετικά
λειτουργικά συστήματα ή ακόμα και συστήματα αποθήκευσης (λ.χ. NFS). Η
εργασία περιλαμβάνει την υλοποίηση συστήματος διαχείρισης αλλαγών
λογισμικού βασισμένου σε σχεσιακή βάση δεδομένων (λ.χ. Ingres) καθώς και
την υλοποίηση συστήματος διεπαφής με το χρήστη τεχνικής
πελάτη-εξυπηρετητή (client-server).
Βιβλιογραφία
- Walter F. Tichy.
Design, implementation, and evaluation of a revision control system,.
In Proceedings of the 6th International Conference on Software
Engineering. IEEE, September 1982.
- M. J. Rochkind. The source
code control system. IEEE Transactions on Software
Engineering, SE-1(4):255-265, 1975.
Προσθήκη ελληνικών στον πολυγλωσσικό ορθογραφικό διορθωτή ispell (καταργήθηκε - 1996)
Ο ορθογραφικός διορθωτής ispell είναι εύκολα παραμετροποιήσιμος με
τη χρήση αρχείων λέξεων και καταλήξεων. Η εργασία αυτή περιλαμβάνει την
ελληνοποίηση του διορθωτή με τη δημιουργία αρχείου ελληνικών λέξεων και
αρχείου καταλήξεων. Τα αρχεία αυτά θα προκύψουν από την επεξεργασία
ελληνικών κειμένων μέσω κατάλληλων εργαλείων και υπαρχόντων διορθωτών.
Βιβλιογραφία:
http://hoth.stsci.edu/gnu/ispell/ispell_toc.html
Περιεχόμενα