Computers for All
Diomidis Spinellis
Department of Management Science and Technology
Athens University of Economics and Business
Athens, Greece
dds@aueb.gr
Administrativia
Welcome
Computers for All
Goals
Understand
- how computing works
- how it affects your business
- how it affects our world
so as to be able to
- make informed decisions
- be intelligently skeptical about technology
(What should an educated person know about computers)
Overview
- Anatomy of a computer; computer architecture
- Data: representing information
- Introduction to programming
- Algorithms and data structures; database systems
- Networks and operating systems
- Computer security
- Software engineering and open-source software
Notes
Assessment
- Exercise 1: create your home page (markup languages - HTML) 20%
- Exercise 2: Excel Christmas Tree (introductory programming) 30%
- Essay: Select, install, use, and review a FLOSS application 30%
- Written exam: 20%
Other paedagogical elements
- Action based learning (aka games)
- Prepare (if needed)
- Participate
- Take it seriously, but not too seriously
- Case studies: read before each lecture
Books
- J. Glenn Brookshear. Computer Science. Addison-Wesley, eighth edition, 2004.
- David G. Messerschmitt and Clemens Szyperski. Software Ecosystem: Understanding an Indispensable Technology and Industry. MIT Press, 2004.
- Paul Graham. Hackers & Painters: Big Ideas from the Computer Age. O'Reilly and Associates, Sebastopol, CA, 2004.
- Clive Max Maxfielf. Bebop to the Boolean Boogie. Newnes, 2003.
- Bruce Schneier. Secrets & Lies: Digital Security in a Networked World. Wiley Computer Publishing, New York, 2000.
- Donald A. Norman. The Invisible Computer. MIT Press, Cambridge, 1998.
- Michael A. Williams. A History of Computing Technology. IEEE Computer Society Press, 1997.
Coursework Instructions
Deadlines
The deadline for all exercises is 2005.01.17 23:59:00 local (Athens) time.
Submissions of exercise 2 received before 2005.01.06 10:00 (am) will
receive a small bonus grade.
The above deadlines are hard: late submissions will not be marked.
Exercise 1: Create your Home Page
The assignment will be marked from the contents of your home page,
in the form it appears on the lab's web server.
Don't forget to include your name in the page you create.
To setup your page on the lab's web server, hand in the file(s)
to Spiros Kallinikos (mailto:skallin@aueb.gr),
who will upload your files to the server's directory.
Exercise 2: Excel Christmas Tree
Submissions must be sent as an Excel spreadsheet by email
to xmas-tree@istlab.dmst.aueb.gr (mailto:xmas-tree@istlab.dmst.aueb.gr).
The sheet must contain conspicuous instructions for running the
program that will create the tree, as well as your name.
Essay: Select, Install, Use, and Review an Open Source Application
Submit a printed copy of the essay and the completed questionnaire
to the course's secretariat.
Selecting an Open Source Application
- Visit
http://sourceforge.net (http://sourceforge.net)
to browse through its 92000 registered projects.
-
Select a Free/Libre open source application you perceive as useful
to do your job.
-
Make sure the application can run on your computing platform.
-
Make sure none of your colleagues has selected the specific application.
Have a look at the page
http://istlab.dmst.aueb.gr/cfa-reservations.txt (http://istlab.dmst.aueb.gr/cfa-reservations.txt)
to see which projects have already been taken.
-
Reserve the application, by sending email to
cfa-reservations@istlab.dmst.aueb.gr (mailto:cfa-reservations@istlab.dmst.aueb.gr).
Essay Outline
Your essay should use the following outline.
The proposed contents of each section are indicative;
feel free to expand them, or limit them if you do not have
enough data.
- Application Overview
Start with the application's name and sourceforge.net URL.
Continue with a short summary of the application.
- Application Functionality
Describe what the application does.
Include screen dumps here, if appropriate.
- Development History
Describe the history behind this application.
How long is it being developed?
Is it derived from another application?
- Development Team
Describe the application's development model and team.
Is this a lone developer, or an organized team?
How is the team organized?
Who can participate?
If the above are not document in the application's web pages,
just say so.
- Documentation Overview
Describe the documentation that comes with the application.
Does it contain a user manual, a reference manual, a FAQ list,
technical information?
Is on-line help available?
Can you print it in a nice format?
Is it available for browsing over the web?
- Source Code Overview
Try to unpack and browse the application's source code.
Most likely, its size and complexity will ovewhelm you;
this is expected.
If, you notice something worth reporting, include it here.
- Support Options
If you have a problem with the application how can you obtain support?
Is there a mailing list, a newsgroup, or an open forum for sending questions?
Are these qustions answered promptly?
Is there a company providing paid support?
- Application Quality
You may find some of the following criteria (derived from ISO/IEC 9126)
useful for discussing the application's quality.
- Functionality: Suitability, accuracy, interoperability, security, functionality compliance
- Reliability: Maturity, fault tolerance, recoverability, reliability compliance
- Usability: Understandability, learnability, operability, attractiveness, usability compliance
- Efficiency: Time behavior, resource utilization, efficiency compliance
- Maintainability: Analyzability, changeability, stability, testability, maintainability compliance
- Portability: Adaptability, installability, replaceability, coexistence, portability compliance
- Software License
How is the application licensed?
Does it affect the way you use it?
- Critical Evaluation
Evaluate the application in the context of your work and time constraints.
Was installing and learning the application a waste of time,
or did you benefit from it?
- Appendix A: Detailed Logbook
Log your work in a logbook.
Adopt the following format, and submit it as an appendix.
Be honest, this part will be graded for its completeness,
but its actual contents will not affect your grade.
Do not try to impress us with an entry indicating you
worked on New Year's day.
Date | Time | Action |
2004.12.23 | 13:14 | Work session start |
2004.12.23 | 13:15 | Browse sourceforge.net, looking for application |
2004.12.23 | 13:38 | Start downloading Fingerprint manager |
2004.12.23 | 13:42 | Install application |
2004.12.23 | 13:43 | Installation failed |
2004.12.23 | 13:45 | Work session start |
2004.12.23 | 13:46 | Browse sourceforge.net, looking for another application |
2004.12.23 | 13:55 | Work session end |
2004.12.26 | 20:03 | Work session start |
2004.12.26 | 20:10 | Download Mozilla |
2004.12.26 | 20:15 | Install application |
2004.12.26 | 20:30 | Send my first email message |
2004.12.26 | 20:30 | Work session end |
- Appendix B: Questionnaire
This part is also not used in the grade, but its completion is
compulsorily.
Questionnaire
Please print out and complete this questionnaire after completing
the rest of your essay.
Answer the following questions,
based on your (we know, limited) experience with downloading and using
an open-source application.
|
|
I find an open source application easy to use | 1 | 2 | 3 | 4 | 5 |
Using an open source application would make it easier to do my job | 1 | 2 | 3 | 4 | 5 |
I intend to install and use an open source application on my computer | 1 | 2 | 3 | 4 | 5 |
All things considered, using an open source application in my job is a good idea | 1 | 2 | 3 | 4 | 5 |
Using an open source application would enhance my effectiveness of the job | 1 | 2 | 3 | 4 | 5 |
Learning to operate an open source application is easy to me | 1 | 2 | 3 | 4 | 5 |
I intend to use an open source application as a primary function in my job | 1 | 2 | 3 | 4 | 5 |
All things considered, using an open source application in my job is a positive idea | 1 | 2 | 3 | 4 | 5 |
Using an open source application in my job would increase my productivity | 1 | 2 | 3 | 4 | 5 |
I find it easy to get an open source application to do what I want to do | 1 | 2 | 3 | 4 | 5 |
Using an open source application in my job would enable me to accomplish tasks more quickly | 1 | 2 | 3 | 4 | 5 |
It is easy for me to become skillful at using an open source application | 1 | 2 | 3 | 4 | 5 |
I would find an open source application useful in my job | 1 | 2 | 3 | 4 | 5 |
My interaction with an open source application is clear and understandable | 1 | 2 | 3 | 4 | 5 |
I intend to use an open source application frequently in my job | 1 | 2 | 3 | 4 | 5 |
I find an open source application to be flexible to interact with | 1 | 2 | 3 | 4 | 5 |
All things considered, using an open source application in my job is a beneficial idea | 1 | 2 | 3 | 4 | 5 |
I intend to use an open source application in doing my job | 1 | 2 | 3 | 4 | 5 |
All things considered, using an open source application in my job is a wise idea | 1 | 2 | 3 | 4 | 5 |
Coursework Advice
Technical work, especially that involving computers, often runs into
unforseen difficulties.
Programs can crash, computers can stop working, ugly bugs can force
your to work around a problem.
Therefore:
- Schedule plenty of time for these difficulties.
- Don't wait till the last moment to test your program.
- Test early and often the results of your work (web page, program).
- Early on, make sure you are familiar with the submission procedures,
and that these work for you.
- Don't wait till the last moment to submit your work.
Anatomy of a Computer; Computer Architecture
Πρόδρομοι της πληροφορικής
- ´Ανθρωπος: ο πρώτος υπολογιστής
- Το δεκαδικό (decimal) σύστημα και οι τέσσερεις πράξεις
- Ο αλγόριθμος του Ευκλείδη για το ΜΚΔ
- Μηχανικά βοηθήματα
- Πέτρες
- ´Αβακας
- Ο αστρολάβος των Αντικηθύρων - διαφορικά γρανάζια
- Αριθμομηχανές
- Wilhelm Schickard (1592-1635)
Συνεργάστηκε με τον Kepler, μηχανή που άθροιζε και πολλαπλασίαζε (σε
πολλαπλά βήματα) αριθμούς
έξι ψηφίων.
- Blaise Pascal (1632-1662)
Κατασκεύασε πάνω από 30 αθροιστικές μηχανές, η αφαίρεση γίνονταν
με τη μέθοδο του συμπληρώματος.
- Gottfried Leibniz (1646-1716)
Προσπάθεια για πολλαπλασιασμό
- Αποθηκευμένα προγράμματα
- Λατέρνες και μηχανικά πιάνα
- Ελεγχόμενοι αργαλιοί (Jacquard 1805)
- Η διαφορική μηχανή του Charles Babbage (1792-1871)
- Η αναλυτική μηχανή του Charles Babbage
- Διάτρητες κάρτες (punched cards)
(Hollerith 1886)
Ο αλγόριθμος ΜΚΔ του Ευκλείδη
Θέλουμε να βρούμε το μέγιστο κοινό διαιρέτη των Α και Β, Α > Β
(Π.χ. ΜΚΔ των 18 και 24 είναι το 6, ΜΚΔ των 378 και 216 είναι το 54)
- Διαιρούμε ακέραια το Α με το Β και έχουμε ένα υπόλοιπο Υ
- Αν το Υ είναι 0 τότε ο Β είναι ο ΜΚΔ
- Αν το Υ δεν είναι 0 τότε υπολογίζουμε ως ΜΚΔ τον ΜΚΔ του Β και Υ
Ο αστρολάβος των Αντικηθύρων
Μηχανικός υπολογιστής του William von Schickard
Η διαφορική μηχανή του Charles Babbage
Η αναλυτική μηχανή του Charles Babbage
Διάτρητη κάρτα (1950)
Η βάση της διαφορικής μηχανής
Υπολογισμοί με πολυώνυμα
- Πολλές συναρτήσεις εκφράζονται ως πολυώνυμα
- cos(x) = 1 - x2/2! + x4/4! - x6/6! + ... + (-1)r*x(2*r)/(2*r)!
- ln(1 + x) = x - x2/2 + x3/3 - x4/4 + ... + (-1)(r+1)*xr/r
- Πολυώνυμα βαθμού ν έχουν σταθερές διαφορές τάξεως ν
f(x) = x2
1
3
4 2
5
9 2
7
16 2
9
25 2
11
36
f(x) = 3x2 + 2x + 5
10
11
21 6
17
38 6
23
61 6
29
90
Το παράδειγμα με τα ρολόγια
Clock A Clock B Clock C
1 3 2
+3 +2
4 5 2
+5 +2
9 7 2
+7 +2
16 9 2
Ακαδημαϊκές προσπάθειες Η/Υ
- Colossus Mark I (1943)
Σχεδιασμένο για την εκτέλεση λογικών πράξεων
- Harvard Mark I 1944 (relay computer)
- ENIAC (1946-1955) Mauchly και Eckert - Moore School of
Electrical Engineering, University of Pensylvania
- EDVAC (1946, Cambridge) και EDSAC (1949, Moore School) Αποθηκευμένο πρόγραμμα
- Πανεπιστήμιο του Machester (1949)
- Whirlwind (1950)
Έργο για λογαριασμό του αμερικανικού ναυτικού.
Οθόνη CRT, 20000 εντολές / δευτερόλεπτο.
ENIAC (1946-1955)
Colossus Mark I (1943)
Ο πίνακας οργάνων του υπολογιστή Whirlwind (1947)
Πρώτοι εμπορικοί Η/Υ
- IBM
- Σειρά 600 (1935) - "multiplying punch" - προγραμματισμός με πλακέτες
- SSEC (ηλεκτρομηχανικό: 13000 λυχνίες, 23000 ρελέ) (1948)
- Σειρά 700 (1952) (ενοικίαση προς $1500/ μήνα) - FORTRAN
- UNIVAC (Eckert/Mauchly 1950)
- Raytheon και Honeywell
- RCA
- Burroughs
Ένα από τα 4000 αρθρώματα του IBM 704
Θεωρητικό υπόβαθρο
- Kurt Goedel. On Formally Undecidable Propositions in Principia
Mathematica and Related Systems (1931).
- Alan M. Turing. On Computable Numbers with an Application to the
Entscheidungsproblem (1936)
- Norbert Wiener. Cybernetics: The study of control and
communication in the animal and the machine (1947)
- C. E. Shannon. The Mathematical Theory of Communication (1948)
Τεχνολογική εξέλιξη
Από αριστερά:
- λυχνία,
- τρανζίστορ,
- μνήμες EPROM TTL, επεξεργαστές (1980),
- επεξεργαστής και άρθρωμα μνήμης RAM 1995
Μνήμη φερριτικού πυρήνα
Λογικό κύκλωμα με λυχνία (IBM Pluggable Units - 1950)
Λογικό κύκλωμα με τρανζίστορ (1960)
Τεχνολογία ημιαγωγών
- Το πυρίτιο (silicon) (Si)
- Si n (περίσσεια e) με προσθήκη P, As, Sb
- Si p (έλλειμμα e) με προσθήκη B, Al, Ga
- SiO2 (κακός αγωγός)
- Τεχνολογία N-MOS
- Βασικά στοιχεία κατασκευής ολoκληρωμένων κυκλωμάτων
- Ανάπτυξη κρυστάλων Si
- Κοπή δίσκων
- Κατασκευή με φωτολιθογραφία
- Διάχυση p
- Οξείδωση SiO2
- Επίστρωση πολυπυριτίου
- Φωτολιθογραφία και απόξεση για εμφάνιση του Si p
- Διάχυση n
- Απόθεση SiO2 για μόνωση
- Φωτολιθογραφία και απόξεση
- Απόθεση Al για δημιουργία συνδέσεων
- Φωτολιθογραφία και απόξεση Al
- Κοπή και συσκευασία
Τεχνολογία CMOS 7S και έξι επιστρώματα χαλκού
Ο επεξεργαστής 750 της αρχιτεκτονικής IBM Power PC
υλοποιημένος με την τεχνολογία χαλκού CMOS 7S
Πυρίτιο σε γερμάνιο (τομή)
Κύκλωμα κατασκευασμένο με την τεχνολογία
πυριτίου σε μονωτικό υλικό (silicon on insulator (SOI))
σε ηλεκτρονικό μικροσκόπιο
Οι εικόνες προέρχονται από τον τόπο
IBM Microelectronics Gallery (http://www.chips.ibm.com/gallery/index.html).
Δομικά στοιχεία
- Λογικές πύλες
- Αθροιστές
- Αριθμητική και λογική μονάδα
- Δισταθή κυκλώματα
- Τεχνολογίες μνήμης
- Μικροεπεξεργαστές
Λογικές πύλες
- Πύλη άρνησης (NOT) Y = !A
- Πύλη σύζευξης (AND) Y = A && B
- Πύλη διάζευξης (OR) Y = A || B
- Πύλη αποκλειστικής διάζευξης (XOR) Y = A ^ B
Μερικές φορές θα συναντήσετε και παλαιότερα σύμβολα για τις ίδιες πύλες
όπως αυτά που απεικονίζονται στο διάγραμμα που ακολουθεί:
Αθροιστές
Με βάση τις πύλες μπορούν να κατασκευστούν κυκλώματα που κάνουν
υπολογισμούς.
- Απλός αθροιστής (adder)
- Αθροιστής με κρατούμενο ή πλήρης αθροιστής (full adder)
C0 | A | B | Σ | C1 |
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 0 |
0 | 1 | 0 | 1 | 0 |
0 | 1 | 1 | 0 | 1 |
1 | 0 | 0 | 1 | 0 |
1 | 0 | 1 | 0 | 1 |
1 | 1 | 0 | 0 | 1 |
1 | 1 | 1 | 1 | 1 |
- Σύνδεση αθροιστών
Σ = Α + Β
(Στην πράξη το κρατούμενο υπολογίζεται παράλληλα με το αποτέλεσμα).
Αριθμητική και λογική μονάδα
Η αριθμητική και λογική μονάδα (arithmetic and logical unit (ALU))
εκτελεί αριθμητικές και λογικές πράξεις ανάμεσα σε δύο τελεστέους.
- Τελεστές
- Πράξη π.χ. 74ALS381:
- A - B
- B - A
- A + B
- A ^ B
- A | B
- A & B
Πράξεις που εκτελεί η ALU 74AS181
Υλοποίηση της ALU 74AS181
Δομή ενός υπολογιστή
Κεντρική μονάδα επεξεργασίας
O κύκλος εντολών
- Ανάκληση εντολής (Instruction fetch)
- Αποκωδικοποίηση εντολής (Instruction decode)
- Εκτέλεση εντολής (Instruction execution)
- Πρόσβαση μνήμης (Memory access)
- Εγγραφή
Κύρια μνήμη
Περιφερειακή μνήμη
- Μαγνητικοί δίσκοι
- Δισκέτες
- CD-ROM
- DVD
- Μαγνητο-οπτικοί δίσκοι
- Μαγνητικές ταινίες
- Μονάδες αυτοματοποιημένης εναλλαγής μέσων
Μονάδα σκληρού δίσκου
Μονάδα ταινίας
Συσκευές εισόδου
Συσκευές εξόδου
Σχεδιογράφος
Συσκευές επικοινωνίας
- Διαμορφωτής / αποδιαμορφωτής (MODEM)
- Σύνδεση με ISDN
- Ευρυζωνική σύνδεση (xDSL)
- Σύνδεση με δίκτυο Ethernet
- Σύνδεση με δίκτυο οπτικής ίνας
- Ασύρματη σύνδεση
MODEM
Τερματισμός οπτικών ινών
Η επιστήμη της πληροφορικής
- Υλικό
- Λογικά κυκλώματα και μνήμες
- Επικοινωνίες και μονάδες εισόδου / εξόδου
- Ολοκληρωμένα κυκλώματα
- Οργάνωση συστημάτων
- Αρχιτεκτονικές επεξεργαστών
- Δίκτυα
- Απόδοση
- Λογισμικό
- Προγραμματισμός
- Τεχνολογία λογισμικού
- Λειτουργικά συστήματα
- Δεδομένα
- Δομές δεδομένων
- Θεωρία κωδικοποίησης και πληροφορίας
- Αρχεία
- Θεωρία υπολογιστών
- Υπολογισμοί από αφηρημένες μηχανές
- Ανάλυση αλγορίθμων
- Λογική και ερμηνεία προγραμμάτων
- Μαθηματική λογική και φορμαλιστικές γλώσσες
- Μαθηματικά της πληροφορικής
- Αριθμητική ανάλυση
- Διακριτά μαθηματικά
- Πιθανότητες και στατιστική
- Μαθηματικό λογισμικό
- Πληροφοριακά συστήματα
- Αρχές και μοντέλα
- Διαχείριση βάσεων δεδομένων
- Αποθήκευση και ανάκτηση πληροφοριών
- Εφαρμογές
- Επικοινωνία με τον άνθρωπο
- Μεθοδολογίες πληροφορικής
- Αλγεβρική επεξεργασία
- Τεχνητή νοημοσύνη
- Γραφικά
- Επεξεργασία εικόνας
- Επεξεργασία σημάτων
- Προσομοίωση και μοντελοποίηση
- Επεξεργασία κειμένου
- Εφαρμογές
- Γραφείου
- Φυσικών επιστημών και μηχανικού
- Βιολογικών και ιατρικών επιστημών
- Κοινωνικών και ψυχολογικών επιστημών
- Τέχνης και ανθρωπιστικών επιστημών
- Σχεδιασμός με υπολογιστή
- Πληροφορική και κοινωνία
- Η βιομηχανία υπολογιστών
- Ιστορία της πληροφορικής
- Πληροφορική και εκπαίδευση
- Πληροφορική και κοινωνία
- Νομικές διαστάσεις
- Το επάγγελμα του επιστήμονα πληροφορικής
(Βασισμένο στο σύστημα ταξινόμησης ACM Computing Reviews.)
Βιβλιογραφία
- J. Glenn Brookshear.
Computer Science, pages 1–15, 28–33, 73–108.
Addison-Wesley, 8th edition, 2004.
- IEEE Computer, July 1985.
- Aaron Finerman.
The CR classification system.
ACM Computing Reviews, pages 4–19, January 1992.
- John L. Hennessy
and David A. Patterson.
Computer Architecture: A Quantitative Approach.
Morgan Kaufmann Publishers, 1990.
- Roger Hunt and John
Shelley.
Computers and Common Sense.
Prentice Hall, fourth edition, 1988.
- IEEE annals of the history of
computing.
Published by the Institute of Electrical and Electronics Engineers Computer
Society.
- J.A.N. Lee.
Computer pioneers.
IEEE Computer Society Press, 1995.
- Brian Randell.
The Origins of Digital Computers.
Springer Verlag, Berlin, 1973.
- Eric Raymond.
The
New Hacker's Dictionary.
MIT Press, 1991.
- Saul Rosen.
Electronic computers: A historical survey.
ACM Computing Surveys, 1(1):7–36, March 1969.
- Richard L. Sites.
Alpha AXP architecture.
Communications of the ACM, 36(2):33–44, February 1993.
- Joseph Weizenbaum.
Computer Power and Human Reason.
Pelican books, 1984.
- Michael A. Williams.
A
History of Computing Technology.
IEEE Computer Society Press, 1997.
Γενικές πηγές στο διαδίκτυο
Πηγές στο διαδίκτυο
Data: Representing Information
Φυσικός κόσμος και πληροφορική
Φυσικός κόσμος
- Αντικείμενα
- Ενέργειες
Πληροφορική
- Δεδομένα (data)
- Αλγόριθμοι (algorithms)
Χάρτης καιρού
Εύρεση του κυρτού φλοιού
Αλφάβητα και κωδικοποίηση
Ορολογία
- Bit (b)
- 0 ή 1
- Byte (B)
- 8 bit - 28 = 256 τιμές
- Word
- φυσική ομάδα από bit(π.χ. 16, 32, 36, 48, 64).
Στους υπολογιστές που χρησιμοποιούμε 32.
- KiB/KB
- Kibi/Kilo - 1024 (210)
- MiB/MB
- Mebi/Mega - 1.028.576 (220)
- GiB/GB
- Gibi/Giga - 1.073.741.824 (230)
- TiB/TB
- Tebi/Tera - 1.099.511.627.776 (240)
- PiB/PB
- Peti/Peta - 1.125.899.906.842.624 (250)
Μνημονικός κανόνας
210 είναι περίπου ίσο με 103
2N * 10 είναι περίπου ίσο με 10N * 3
Παραδείγματα κωδικοποίησης
- Αριθμοί
- Χρόνος
- Ήχος
- Χρώματα (με μεταβολή κόκκινου, πράσινου, μπλε)
- Εικόνα
Παράσταση χαρακτήρων
- Morse
Α .-
Β -...
Γ --.
Δ -..
Ζ --..
Ε .
Θ -.-.
- Baudot
- EBCDIC
A 193
B 194
C 195
D 196
- ASCII
A 64
B 65
C 66
D 67
- ISO-8859-7, ISO-8859-13, ΕΛΟΤ-928
Α 193
Β 194
Γ 195
Δ 196
- Unicode (http://www.unicode.org)
Ελληνικό άλφα πεζό με τόνο (ά) 940
Ελληνικό ωμέγα κεφαλαίο (Ω) 937
Αραβικό γράμμα SEEN μόνο 65201
Αραβικό γράμμα SEEN αρχικό 65202
Αραβικό γράμμα SEEN μέσο 65203
Αραβικό γράμμα SEEN τελικό 65204
Παράσταση των χαρακτήρων "HELLO, WORLD! ABCDEFGHIJKLM 0123456789"
σε διάτρητη κάρτα.
________________________________________________
/HELLO, WORLD! ABCDEFGHIJKLM 0123456789 |
|]] ] ]]]]]]]]] |
| ]]] ]]] ]]]] |
| ] ] ] ] |
|11111111111111]11111111]11111]111111111111111111|
|222222222222222]22222222]22222]22222222222222222|
|33]]3]3333]33333]33333333]33333]3333333333333333|
|44444444444]44444]44444444]44444]444444444444444|
|5]5555555555555555]55555555555555]55555555555555|
|6666]66]]6666666666]66666666666666]6666666666666|
|777777777777]7777777]77777777777777]777777777777|
|]8888]888888]88888888]88888888888888]88888888888|
|999999999]999999999999]99999999999999]9999999999|
|________________________________________________|
Παράσταση των χαρακτήρων "HELLO, WORLD! ABCDEFGHIJKLM 0123456789"
σε διάτρητη ταινία.
___________
| o o. |
| o .o o|
| o o.o |
| o o.o |
| o o.ooo|
| o o.o |
| o . |
| o o .ooo|
| o o.ooo|
| o o . o |
| o o.o |
| o .o |
| o . o|
| o . |
| o . o|
| o . o |
| o . oo|
| o .o |
| o .o o|
| o .oo |
| o .ooo|
| o o. |
| o o. o|
| o o. o |
| o o. oo|
| o o.o |
| o o.o o|
| o . |
| oo . |
| oo . o|
| oo . o |
| oo . oo|
| oo .o |
| oo .o o|
| oo .oo |
| oo .ooo|
| ooo. |
| ooo. o|
___________
Εμφάνιση χαρακτήρων
Simple rendering
Anti-aliased rendering
ClearType rendering
Παράσταση ιστοσελίδων με HTML
H HTML είναι μια εφαρμογή της SGML για την περιγραφή σελίδων στο Web.
Περιοχές του κειμένου σημειώνονται με ετικέτες (tags).
Κάθε ετικέτα περιλαμβάνει το όνομά της και παραμέτρους.
Οι ετικέτες γράφονται ως εξής:
<όνομα ετικέτας παράμετροι>
Μια περιοχή του κειμένου μπορεί να σημειωθεί ως εξής:
<ετικέτα>
περιοχή που σημειώνεται
</ετικέτα>
Βασικές ετικέτες που υποστηρίζει η HTML είναι οι παρακάτω:
- html
- περιγραφή ολόκληρης σελίδας
- head
- επικεφαλίδα της σελίδας
- body
- κείμενο της σελίδας
- h1-h6
- επικεφαλίδες του κειμένου
- p
- Παράγραφος
- ul
- λίστα με τελείες
- ol
- αριθμημένη λίστας
- li
- στοιχείο λίστας
- br
- αλλαγή γραμμής
- hr
- οριζόντια γραμμή
- img
- εικόνα
- a
- (anchor) σημείο πρόσβασης από ή σε υπερκείμενο
- pre
- προστοιχειοθετημένο κείμενο
- dl, dt, dd
- λίστα περιγραφών, περιγραφές
- i
- πλάγιοι χαρακτήρες
- b
- έντονοι χαρακτήρες
- table, tr, th/td
- Πίνακας, γραμμή, επικεφαλίδα / δεδομένα
- <!-- κείμενο -->
- σχόλιο
Παράδειγμα σελίδας:
<!doctype html public "-//IETF//DTD HTML//EN">
<html>
<head>
<title>Τίτλος της σελίδας</title>
<meta NAME="GENERATOR" CONTENT="thread.pl">
<meta NAME="AUTHOR" CONTENT="Diomidis Spinellis">
<meta HTTP-EQUIV="Content-type" CONTENT="text/html; charset=ISO-8859-7">
<link REV="made" HREF="mailto:dds@aueb.gr">
<link REL="ToC" href="./web/index.htm">
<link REV="Subdocument" href="./web/index.htm">
<link REL="previous" href="./web/http.htm">
<link REL="next" href="./web/cgi.htm">
</head>
<body>
<h1>Επικεφαλίδα πρώτου επιπέδου</h1><hr />
<p>
Κείμενο που περιέχει ένα σημείο κατάληξης υπερκειμένου
<a name="G42"> (<em>με έντονο κείμενο</em>)</a>
και μια λίστα:
<ul>
<li> στοιχείο 1 </li>
<li> στοιχείο 2 </li>
</ul>
</p>
<p>
Νέα παράγραφος με ένωση υπερκειμένου στο
<a href="http://www.aueb.gr">Οικονομικό Πανεπιστήμιο</a>
</p>
<hr />
</body>
</html>
Αυτή θα εμφανιστεί ως εξής:
Επικεφαλίδα πρώτου επιπέδου
Κείμενο που περιέχει ένα σημείο κατάληξης υπερκειμένου
(με έντονο κείμενο)
και μια λίστα:
Νέα παράγραφος με ένωση υπερκειμένου στο
Οικονομικό Πανεπιστήμιο (http://www.aueb.gr)
Ιστορία αριθμητικών συστημάτων
Συστήματα παράστασης
- Ειδικές παραστάσεις για σύνολα (π.χ. Χ = 10)
Βαβυλώνιοι, Αιγύπτιοι, Έλληνες, Κινέζοι, Ρωμαίοι
- Εξηκονταδικό σύστημα των Βαβυλωνίων (1750 π.Χ.)
- Εικοσαδικό σύστημα των Μάγια
- Υπολογισμοί στο δεκαδικό σύστημα στην αρχαία Ελλάδα
- Η χρήση του 0 (Ινδία 600 μ.Χ.)
- Μεταφορά στην Περσία (750 μ.Χ.), το έργο του al-Khwarizmi.
- Η χρήση του εξηκονταδικού συστήματος από τον Πτολεμαίο και μετά
για κλάσματα
- Leonardo Pisano (Fibonacci)
x^3 + 2x^2 + 10x = 20 :
x = 1o 22' 7" 33iv 4v 40vi
- Δεκαδικά κλάσματα από τους Κινέζους
π = 3 chang, 1 chhih, 4 tshun, 1 fen, 5 li, 9 hao, 2 miao, 7 hu
- Ευρώπη (Simon Stevin 1585), λογάριθμοι
Το δυαδικό σύστημα
- Μέτρηση υγρών στην Αγγλία (13ος αιώνας)
2 gills = 1 chopin
2 chopins = 1 pint
2 pints = 1 quart
2 quarts = 1 pottle
2 pottles = 1 gallon
2 gallons = 1 peck
2 pecks = 1 demibushel
2 demibushels = 1 bushel
2 firkjins = 1 kilderkin
2 kilderkins = 1 barrrel
2 barrels = 1 higshead
2 higsheads = 1 pipe
2 pipes = 1 tun
- Η παρατήρηση του Pascal (1658):
κάθε αριθμός μεγαλύτερος του 1 μπορεί να χρησιμοποιηθεί ως βάση
- Ανάλυση και πράξεις (G. W. Leibniz 1703)
Ακέραιοι αριθμοί
Μετατροπές
- Από δυαδικό (binary) σε δεκαδικό
...ΕΔΓΒΑ2 =
Α * 20 +
Β * 21 +
Γ * 22 +
Δ * 23 +
Ε * 24 +
... =
A * 1 +
Β * 2 +
Γ * 4 +
Δ * 8 +
E * 16 +
...
Παράδειγμα:
10112 =
1 * 20 +
1 * 21 +
0 * 22 +
1 * 23 =
1 * 1 +
1 * 2 +
0 * 4 +
1 * 8 =
1 + 2 + 0 + 8 = 1110
- Από δεκαδικό σε δυαδικό
Διαιρούμε διαδοχικά με το 2 και γράφουμε τα υπόλοιπα από δεξιά προς τα αριστερά.
- Για ευκολία συχνά παριστάνουμε τετράδες ψηφίων του δυαδικού συστήματος στο
δεκαεξαδικό (hexadecimal)
σύστημα (με βάση το 16) σύμφωνα με τον παρακάτω πίνακα:
Ν16 | Ν2 |
0 | 0000 |
1 | 0001 |
2 | 0010 |
3 | 0011 |
4 | 0100 |
5 | 0101 |
6 | 0110 |
7 | 0111 |
8 | 1000 |
9 | 1001 |
A | 1010 |
B | 1011 |
C | 1100 |
D | 1101 |
E | 1110 |
F | 1111 |
Παράδειγμα:
FOOD16 = 1111 0000 0000 11012
Πρόσθεση και πολλαπλασιασμός
Πρόσθεση
Ψηφίο 1 | Ψηφίο 2 | 'Aθροισμα | Κρατούμενο |
0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
Παράδειγμα:
1110
+10111
------
100101
Δηλαδή
11102 + 101112 = 1001012 ή
1410 + 2310 = 3710
Πολλαπλασιασμός
Παράδειγμα:
1011
X 11
------
1011
+1011
------
100001
Δηλαδή
10112 + 112 = 1000012 ή
1110 + 310 = 3310
Αρνητικοί αριθμοί και αφαίρεση
Αφαίρεση με το μέθοδο του συμπληρώματος
Παράδειγμα 1
X = 4 - 3 <=>
X + 10 = 4 + (10 - 3) <=>
X + 10 = 4 + 7 <=>
X = 4 + 7 - 10 <=>
X = 11 - 10 <=>
X = 1
Παράδειγμα 2
X = 45 - 23 <=>
X + 100 = 45 + (100 - 23) <=>
X + 100 = 45 + 77 <=>
X = 45 + 77 - 100 <=>
X = 122 - 100 <=>
X = 22
Η εύρεση του
συμπληρώματος (complement)
ως προς ένα ΒN (π.χ. 10 - 3 ή 100 - 23)
και η απαλειφή του όρου ΒN στο τέλος είναι πράξεις εύκολες.
Αν θεωρήσουμε πως όλοι οι αριθμοί μας είναι μικρότεροι από ΒN/2
και στο τέλος κάθε πράξης απαλείφουμε τον όποιο όρο ΒN
τότε μπορούμε να παριστάνουμε τους αρνητικούς αριθμούς ως θετικούς
με βάση το συμπλήρωμά τους από το ΒN
(π.χ. το -3 ως 7 για ΒN = 101 ή
το -23 ως 77 για ΒN = 102)
και να κάνουμε πρόσθεση αντί για αφαίρεση.
Εύρεση του συμπληρώματος στο δυαδικό σύστημα
Παράδειγμα για τον αριθμό 01002 και ΒN = 24
(100002):
10000
-0100
-----
1100
Στο δυαδικό σύστημα το αποτέλεσμα της αφαίρεσης του αριθμού Α από το
ΒN (δηλαδή η παράσταση του -Α με το μέθοδο του συμπληρώματος)
μπορεί να υπολογιστεί εύκολα με δύο ισοδύναμους τρόπους:
- Αντιστρέφουμε τα 0 σε 1 και 1 σε 0 και προσθέτουμε 1:
0100 -> 1011
1011 + 1 = 1100
- Αντιγράφουμε από δεξιά προς τα αριστερά όλα τα 0 και το πρώτο 1 και
αντιστρέφουμε τα υπόλοιπα 0 σε 1 και 1 σε 0:
0 -> 0 (αντιγραφή)
0 -> 0 (αντιγραφή)
1 -> 1 (αντιγραφή)
0 -> 1 (αντιστροφή)
Παράδειγμα παράστασης
Για ΒN = 24 οι αριθμοί που μπορούν
να παρασταθούν είναι οι -8...7:
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
-8 1000
-7 1001
-6 1010
-5 1011
-4 1100
-3 1101
-2 1110
-1 1111
Παρατηρούμε πως οι θετικοί αριθμοί έχουν ως πρώτο ψηφίο 0 και οι
αρνητικοί αριθμοί έχουν ως πρώτο ψηφίο 1.
Παράδειγμα αφαίρεσης
Το αποτέλεσμα του 510 - 210 θα βρεθεί ως
01012Σ + 11102Σ:
0101
+1110
-----
10011
Με την απαλειφή του όρου 100002 το αποτέλεσμα είναι
112 δηλαδή
310.
Αριθμοί κινητής υποδιαστολής
Το πρότυπο IEEE-488
Ο τρόπος παράστασης του αριθμού κινητής υποδιαστολής μπορεί να διαφέρει
σε πολλά σημεία από υπολογιστή σε υπολογιστή
(μήκος σημαινόμενου και εκθέτη, παράσταση αρνητικού σημαινόμενου και εκθέτη,
κανονικοποίηση του σημαινόμενου).
Σήμερα οι περισσότεροι υπολογιστές παριστάνουν τους αριθμούς κινητής υποδιαστολής σύμφωνα με το πρότυπο IEEE-488.
Για αριθμούς διπλής ακρίβειας π.χ.
- H τιμή του Β είναι 2.
- Το πρόσημο του αριθμού παριστάνεται από ένα ξεχωριστό bit
- Ο εκθέτης καταλαμβάνει 11 bit
- Το σημαινόμενο τμήμα καταλαμβάνει 52 bit
- Ο εκθέτης φυλάσσεται αυξημένος κατά 1023 για να παριστάνονται
και να συγκρίνονται εύκολα αριθμοί με αρνητικό εκθέτη
- Το πρώτο bit του σημαινόμενου τμήματος που είναι 1
παραλείπεται και υπονοείται.
Έτσι ο αριθμός καταλαμβάνει συνολικά 64 bit:
Π ΕΕΕΕΕΕΕΕΕΕΕ ΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣ
Για παράδειγμα το π στο δυαδικό σύστημα εφράζεται ως:
11.0010 0100 0011 1111 0110 1010 1000 1000 1000 0101 1010 0011 0000 10....
και στο πρότυπο ΙΕΕΕ-488
με εκθέτη 1 (που παριστάνεται ως 1024) ως:
Π ΕΕΕΕΕΕΕΕΕΕΕ ΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣΣ
0 10000000000 1001001000011111101101010100010001000010110100011000
Προγράμματα
- Εντολές υπολογιστή
0C75:0000 0E PUSH CS
0C75:0001 1F POP DS
0C75:0002 BA0E00 MOV DX,000E
0C75:0005 B409 MOV AH,09
0C75:0007 CD21 INT 21
0C75:0009 B8014C MOV AX,4C01
0C75:000C CD21 INT 21
- Πηγαίος κώδικας
// Draw the circle and numbers
g.setFont(clockFaceFont);
g.setColor(handColor);
circle(xcenter,ycenter,50,g);
g.setColor(numberColor);
g.drawString("9",xcenter-45,ycenter+3);
g.drawString("3",xcenter+40,ycenter+3);
g.drawString("12",xcenter-5,ycenter-37);
g.drawString("6",xcenter-3,ycenter+45);
- Εκτελέσιμος κώδικας
Συμπίεση δεδομένων χωρίς απώλειες
Για τη συμπίεση δεδομένων (data compression)
χωρίς απώλειες (lossless)
χρησιμοποιούνται οι παρακάτω τρόποι:
Εφαρμογές:
Συμπίεση δεδομένων με απώλειες
- Η συμπίεση δεδομένων
με απώλειες (lossy)
βασίζεται σε ιδιαιτερότητες του ανθρώπινου αυτιού και ματιού.
- Τα αποσυμπιεσμένα δεδομένα διαφέρουν σημαντικά σε επίπεδο bit
αλλά ο άνθρωπος τα αισθάνεται ως ίδια.
Εφαρμογές:
- JPEG
- MP3
- Ogg Vorbis
- AAC (Apple)
- WMA (Microsoft)
- MPEG-1 (Video CD)
- MPEG-4
- DivX (DVD ripping)
- Quicktime (Apple)
- RealVideo (RealNetworks)
- WMV (Microsoft)
Ανίχνευση και διόρθωση λαθών
Έλεγχος λαθών
Διόρθωση λαθών
Απόσταση Hamming είναι ο αριθμός των bit κατά τον οποίο διαφέρουν δύο
λέξεις.
Α 000000
Β 001111
Γ 010011
Δ 011100
Ε 100110
Ζ 101001
Θ 110101
Ι 111010
Αν η απόσταση είναι N μπορούμε να διαπιστώσουμε λάθη N-1 bit και να διορθώσουμε
λάθη N-2 bit.
Βιβλιογραφία
- J. Glenn Brookshear.
Computer Science, pages 17–72.
Addison-Wesley, 8th edition, 2004.
- W. Buchholz.
Fingers or fists.
Communications of the ACM, (2):3–11, December 1959.
- Robert G. Burger and
R. Kent Dybvig.
Printing floating-point numbers quickly and accurately.
ACM SIGPLAN Notices, 31(5):108–116, May 1996.
ACM SIGPLAN '96 Conference on Programming Language Design and Implementation.
- William D. Clinger.
How to read floating-point numbers accurately.
ACM SIGPLAN Notices, 25(6):92–101, 1990.
ACM SIGPLAN '90 Conference on Programming Language Design and Implementation.
- IEEE standard for binary
floating-point arithmetic.
Published by the Institute of Electrical and Electronics Engineers, 1985.
ANSI/IEEE Std 754-1995).
- Henry S. Warren Jr.
Hacker's Delight.
Addison-Wesley, 2003.
- Donald E. Knuth.
The
Art of Computer Programming, volume 2 / Seminumerical Algorithms,
chapter 4: Arithmetic.
Addison-Wesley, second edition, 1981.
Παράρτημα: ο πίνακας ASCII
Ο παρακάτω πίνακας εμφανίζει τους χαρακτήρες του πίνακα
ASCII που μπορούν να εμφανιστούν στην οθόνη μαζί με την
τιμή τους σε δεκαεξαδικό σύστημα και την αντίστοιχη περιγραφή.
20 Space
! 21 Exclamation mark
" 22 Quotation mark
# 23 Number sign
$ 24 Dollar sign
% 25 Percent sign
& 26 Ampersand
' 27 Apostrophe
( 28 Left parenthesis
) 29 Right parenthesis
* 2a Asterisk
+ 2b Plus sign
, 2c Comma
- 2d Hyphen-minus
. 2e Full stop
/ 2f Solidus
0 30 Digit zero
1 31 Digit one
2 32 Digit two
3 33 Digit three
4 34 Digit four
5 35 Digit five
6 36 Digit six
7 37 Digit seven
8 38 Digit eight
9 39 Digit nine
: 3a Colon
; 3b Semicolon
< 3c Less-than sign
= 3d Equals sign
> 3e Greater-than sign
? 3f Question mark
@ 40 Commercial at (papaki)
A 41 Latin capital letter a
B 42 Latin capital letter b
C 43 Latin capital letter c
D 44 Latin capital letter d
E 45 Latin capital letter e
F 46 Latin capital letter f
G 47 Latin capital letter g
H 48 Latin capital letter h
I 49 Latin capital letter i
J 4a Latin capital letter j
K 4b Latin capital letter k
L 4c Latin capital letter l
M 4d Latin capital letter m
N 4e Latin capital letter n
O 4f Latin capital letter o
P 50 Latin capital letter p
Q 51 Latin capital letter q
R 52 Latin capital letter r
S 53 Latin capital letter s
T 54 Latin capital letter t
U 55 Latin capital letter u
V 56 Latin capital letter v
W 57 Latin capital letter w
X 58 Latin capital letter x
Y 59 Latin capital letter y
Z 5a Latin capital letter z
[ 5b Left square bracket
\ 5c Reverse solidus
] 5d Right square bracket
' 5e Circumflex accent
_ 5f Low line
` 60 Grave accent
a 61 Latin small letter a
b 62 Latin small letter b
c 63 Latin small letter c
d 64 Latin small letter d
e 65 Latin small letter e
f 66 Latin small letter f
g 67 Latin small letter g
h 68 Latin small letter h
i 69 Latin small letter i
j 6a Latin small letter j
k 6b Latin small letter k
l 6c Latin small letter l
m 6d Latin small letter m
n 6e Latin small letter n
o 6f Latin small letter o
p 70 Latin small letter p
q 71 Latin small letter q
r 72 Latin small letter r
s 73 Latin small letter s
t 74 Latin small letter t
u 75 Latin small letter u
v 76 Latin small letter v
w 77 Latin small letter w
x 78 Latin small letter x
y 79 Latin small letter y
z 7a Latin small letter z
{ 7b Left curly bracket
| 7c Vertical line
} 7d Right curly bracket
~ 7e Tilde
Παράρτημα: οι νεοελληνικοί χαρακτήρες στο πρότυπο Unicode
Ο παρακάτω πίνακας εμφανίζει τους νεοελληνικούς
χαρακτήρες στο πρότυπο κωδικοποίησης Unicode
μαζί με την τιμή τους σε δεκαεξαδικό σύστημα και την αντίστοιχη περιγραφή.
'Α 0386 Capital alpha with acute
Έ 0388 Capital epsilon with acute
Ή 0389 Capital eta with acute
Ί 038a Capital iota with acute
Ό 038c Capital omicron with acute
Ύ 038e Capital upsilon with acute
Ώ 038f Capital omega with acute
ΐ 0390 Small iota with acute and diaeresis
Α 0391 Capital alpha
Β 0392 Capital beta
Γ 0393 Capital gamma
Δ 0394 Capital delta
Ε 0395 Capital epsilon
Ζ 0396 Capital zeta
Η 0397 Capital eta
Θ 0398 Capital theta
Ι 0399 Capital iota
Κ 039a Capital kappa
Λ 039b Capital lamda
Μ 039c Capital mu
Ν 039d Capital nu
Ξ 039e Capital xi
Ο 039f Capital omicron
Π 03a0 Capital pi
Ρ 03a1 Capital rho
Σ 03a3 Capital sigma
Τ 03a4 Capital tau
Υ 03a5 Capital upsilon
Φ 03a6 Capital phi
Χ 03a7 Capital chi
Ψ 03a8 Capital psi
Ω 03a9 Capital omega
ϊ 03aa Capital iota with diaeresis
ϋ 03ab Capital upsilon with diaeresis
ά 03ac Small alpha with acute
έ 03ad Small epsilon with acute
ή 03ae Small eta with acute
ί 03af Small iota with acute
ΰ 03b0 Small upsilon with acute and diaeresis
α 03b1 Small alpha
β 03b2 Small beta
γ 03b3 Small gamma
δ 03b4 Small delta
ε 03b5 Small epsilon
ζ 03b6 Small zeta
η 03b7 Small eta
θ 03b8 Small theta
ι 03b9 Small iota
κ 03ba Small kappa
λ 03bb Small lamda
μ 03bc Small mu
ν 03bd Small nu
ξ 03be Small xi
ο 03bf Small omicron
π 03c0 Small pi
ρ 03c1 Small rho
ς 03c2 Small final sigma
σ 03c3 Small sigma
υ 03c4 Small tau
υ 03c5 Small upsilon
φ 03c6 Small phi
χ 03c7 Small chi
ψ 03c8 Small psi
ω 03c9 Small omega
ϊ 03ca Small iota with diaeresis
ϋ 03cb Small upsilon with diaeresis
ό 03cc Small omicron with acute
ύ 03cd Small upsilon with acute
ώ 03ce Small omega with acute
Introduction to Programming
Υλικό και λογισμικό
- Υλικό (hardware) καλούμε τα φυσικά στοιχεία του
υπολογιστή.
- Λογισμικό (software) καλούμε το σύνολο των προγραμμάτων
που χρησιμοποιεί ο υπολογιστής.
- Τα προγράμματα είναι αποθηκευμένες οδηγίες που εκτελούνται από το
υλικό.
Ιστορική ανασκόπηση
- Προγραμματισμός με διακόπτες
- Γλώσσα μηχανής
- Συμβολική γλώσσα
- Fortran
- Algol, C, Pascal, Modula-2
- Lisp, Simula, Prolog, ML
- Smalltalk, C++, Java
- Visual Basic, TCL/TK, Perl
Η διεργασία του προγραμματισμού
- Προσδιορισμός απαιτήσεων
- Ανάλυση / σχεδίαση
- Συγγραφή σε ψευδοκώδικα
- Συγγραφή στη γλώσσα προγραμματισμού
- Μεταγλώττιση
- Εκτέλεση
- Έλεγχος / επαλήθευση
- Αποσφαλμάτωση
Το περιβάλλον της Visual Basic
Το περιβάλλον υλοποίησης της Visual Basic στο Excel έχει την παρακάτω μορφή:
- Πάνω δεξιά γράφεται ο κώδικας της εφαρμογής
- Άνω αριστερά μπορεί κανείς να επιλέξει τα στοιχεία και τα αρθρώματα
της εφαρμογής.
- Κάτω αριστερά μπορεί κανείς να αλλάξει τις ιδιότητες του στοιχείου που
έχει επιλέξει
- Με την πάνω γραμμή εργαλείων μπορεί κανείς μεταξύ άλλων να
ξεκινήσει και να σταματήσει την εφαρμογή.
Πως γράφουμε απλά προγράμματα
- Στο πρόγραμμα Excel τα προγράμματα συσχετίζονται με
μακροεντολές (macros):
σύνθετες εντολές που μπορούμε να εκτελέσουμε με απλό τρόπο.
- Από την επιλογή Tools - Macro - Macros μπορούμε να δώσουμε όνομα
στη διαδικασία που θα απαρτήσει το πρόγραμμά μας.
- Με την εντολή Create δημιουργούμε τη νέα διαδικασία,
μέσα στην οποία μπορούμε να γράψουμε εντολές
- Για να εκτελέσουμε τη διαδικασία πατάμε F5 στο περιβάλλον του
προγραμματισμού, ή συσχετίζουμε τη διαδικασία μας με κάποιο πλήκτρο.
Πως το Excel μπορεί να γράψει προγράμματα για εμάς
Το πρώτο μου πρόγραμμα
Το πρώτο πρόγραμμα έχει ως στόχο να εμφανίσει στην οθόνη το μήνυμα "hello, world".
Έχει την παρακάτω μορφή:
Sub main()
MsgBox "hello, world"
End Sub
Για να το εκτελέσουμε, πατάμε το πλήκτρο F5 και, αν δεν έχουμε κάνει
κάποιο λάθος, θα δούμε στην οθόνη μας το παρακάτω αποτέλεσμα:
Μορφή του προγράμματος
- Η γραμμή "Sub Main" ορίζει μια διαδικασία (procedure),
στη δική μας περίπτωση το σημείο απ' όπου ξεκινάει το πρόγραμμα.
- MsgBox
- Το κείμενο μέσα στα εισαγωγικά είναι μια
συμβολοσειρά (string).
- End Sub
- Κάθε γραμμή περιέχει μια εντολή
- Μπορούμε να προσθέσουμε δικά μας
σχόλια (comments) αν αρχίσουμε ή συνεχίσουμε μια γραμμή με μονά
εισαγωγικά.
Σταθερές
- Η συμβολοσειρά "hello, world" την
οποία είδαμε στην προηγούμενη ενότητα είναι μια
σταθερά (constant) της Visual Basic.
- Οι σταθερές αυτές χρησιμοποιούνται συχνά για να παραστήσουν μηνύματα
προς το χρήστη (π.χ. "Παρακαλώ βάλτε την κάρτα σας στην υποδοχή") ή
και μεταξύ υπολογιστών (π.χ. "RCPT TO: dspin@aegean.gr").
- Ένα άλλο είδος σταθερών είναι αυτές που παριστάνουν αριθμητικές
τιμές (π.χ. 42 ή 3.1415927).
- Στη Visual Basic ξεχωρίζουμε της ακέραιες (integer)
σταθερές (π.χ. 42, 123456, -3) και τις σταθερές που παριστάνουν
αριθμούς κινητής υποδιαστολής (floating point numbers)
(π.χ. 3.1415827, -2.0, 6.023e-23).
Εκτύπωση τιμών
Απλές πράξεις
Οι αριθμητικές τιμές της Visual Basic μπορούν να συνδυαστούν με τη
χρήση των παρακάτω τελεστών (operators):
Πράξη | Τελεστής της Visual Basic |
Πρόσθεση | + |
Αφαίρεση | - |
Πολλαπλασιασμός | * |
Διαίρεση | / |
Υπόλοιπο ακέραιας διαίρεσης | mod |
Ύψωση σε δύναμη | ^ |
- Για τον υπολογισμό μιας τιμής, πρώτα εκτελούνται οι πράξεις ανάμεσα
στον τελεστή ^, μετά ανάμεσα στους τελεστές * / mod και
μετά οι πράξεις ανάμεσα στους τελεστές + -.
- Η παραπάνω σειρά μπορεί να μεταβληθεί με τη χρήση παρενθέσεων.
Παραδείγματα
- MsgBox "ένα συν ένα = " + Str(1 + 1)
- MsgBox "Το εμβαδό του δωματίου είναι " + Str(3 * 5) + " τετραγωνικά μέτρα."
- MsgBox Str(36.7) + " βαθμοί Celsius = " + Str(32 + 9.0 / 5.0 * 36.7) + " βαθμοί Fahrenheit."
- MsgBox Str(1 + 2 * 3) 'Τυπώνει 7
- MsgBox Str((1 + 2) * 3) ' Τυπώνει 9
Μεταβλητές
- Οι αριθμητικές τιμές μπορούν να αποθηκευτούν σε
μεταβλητές (variables)
- Το όνομα μιας μεταβλητής πρέπει να αρχίζει με έναν λατινικό αλφαβητικό
χαρακτήρα και να ακολουθείται από λατινικού αλφαβητικούς
χαρακτήρες ή/και ψηφία.
Παράδειγμα: Temperature, X1, Y1, X2, Y2, Total
- Τα ονόματα των μεταβλητών δεν πρέπει να ταυτίζονται με
δεσμευμένες λέξεις (reserved words)
της Visual Basic (Sub, MsgBox, End, κ.λπ.).
- Ο ορισμός τους γίνεται γράφοντας τη λέξη Dim,
το όνομα της μεταβλητής και
τον τύπο της μεταβλητής (integer για ακέραιες τιμές,
double για τιμές κινητής υποδιαστολής,
string για συμβολοσειρές).
- Μπορούμε να ορίσουμε πολλές μεταβλητές ίδιου τύπου χωρίζοντάς τις
με ",".
Παράδειγμα:
Dim Faces as Integer
Dim X As Double, Y As Double
- Για να δώσουμε μια τιμή σε μια μεταβλητή χρησιμοποιούμε τη
σύνταξη:
μεταβλητή = τιμή
για παράδειγμα:
Faces = 2 * 8 + 12
- Στη συνέχεια μπορούμε να χρησιμοποιούμε την τιμή της μεταβλητής
όπως και οποιοδήποτε άλλη σταθερά. Παράδειγμα:
Sub Main()
Dim Faces As Integer
Dim Len As Double
Len = 12.5;
Faces = 6;
MsgBox "Επιφάνεια = " + Str(Len * Len * Faces)
End Sub
Τελεστές σύγκρισης
Οι αριθμητικές τιμές της Visual Basic μπορούν να συγκριθούν με τη
χρήση των παρακάτω τελεστών:
Σύγκριση | Τελεστής της Visual Basic |
Ίσο | = |
Διάφορο | <> |
Μικρότερο | < |
Μεγαλύτερο | > |
Μικρότερο ή ίσο | <= |
Μεγαλύτερο ή ίσο | >= |
- Για τον υπολογισμό μιας τιμής, πρώτα εκτελούνται οι πράξεις με την
παρακάτω σειρά:
- ^
- * /
- mod
- + -
- = <>. < > <= >=
- Η παραπάνω σειρά μπορεί να μεταβληθεί με τη χρήση παρενθέσεων.
- Το αποτέλεσμα της κάθε σύγκρισης είναι
αληθές (True) αν το αποτέλεσμα της σύγκρισης είναι
αληθές και
ψευδές (False) αν το αποτέλεσμα της σύγκρισης είναι
ψευδές.
- Οι τιμές True και False είναι λογικές σταθερές.
Παραδείγματα
MsgBox 1 + 1 = 2 ' Εμφανίζει True
MsgBox 1 > 2 ' Εμφανίζει False
MsgBox 5 <> 5 ' Εμφανίζει False
MsgBox 1 <= 5 ' Εμφανίζει True
MsgBox 1 <= 1 ' Εμφανίζει True
MsgBox 1 <= 0 ' Εμφανίζει False
Βρόχοι με την εντολή do while
- Μπορούμε να επαναλάβουμε την εκτέλεση ορισμένων εντολών με τη
δομή ελέγχου (control structure) do while ... loop.
- Αυτή χρησιμοποιείται ως εξής:
do while συνθήκη
εντολή
εντολή
...
loop
- Οι εντολές που ακολουθούν το do while εκτελούνται όσο η συνθήκη είναι
αληθής.
Παράδειγμα (εμφανίζει στην οθόνη τους αριθμούς από το 0 μέχρι το 4):
Sub main()
Dim i As Integer
i = 0
Do While i < 5
MsgBox i
i = i + 1
Loop
End Sub
- Αν η συνθήκη δεν είναι αληθής όταν εκτελεστεί το do while για πρώτη
φορά τότε οι εντολές που περιέχονται σε αυτό δε θα εκτελεστούν.
- Η δομή ελέγχου do while ... loop μπορεί να χρησιμοποιηθεί οπουδήποτε θα μπορούσε
και οποιαδήποτε άλλη εντολή (π.χ. η MsgBox) δηλαδή ακόμα και μέσα σε μια άλλη
do while.
Το παρακάτω παράδειγμα εμφανίζει στην οθόνη την προπαίδεια των αριθμών
από το 2 μέχρι το 5.
Sub main()
Dim i As Integer
Dim j As Integer
i = 2
Do While i <= 5
j = i
Do While j <= 5
MsgBox Str(i) + " * " + Str(j) + " = " + Str(i * j)
j = j + 1
Loop
i = i + 1
Loop
End Sub
Η εντολή for
Λογικοί τελεστές
Τα λογικά αποτελέσματα στη Visual Basic μπορούν να συνδυαστούν με τη
χρήση των παρακάτω λογικών τελεστών:
- Τα αποτελέσματα χρήσης των τελεστών παριστάνονται από τους
παρακάτω πίνακες τιμών:
A | B | A And B | A Or B |
False | False | False | False |
False | True | False | True |
True | False | False | True |
True | True | True | True |
A | B | A Xor B | A Eqv B |
False | False | False | True |
False | True | True | False |
True | False | True | False |
True | True | False | True |
A | B | A Imp B |
False | False | True |
False | True | True |
True | False | False |
True | True | True |
A | Not A |
False | True |
True | False |
- Η προτεραιότητα υπολογισμού των λογικών τελεστών ορίζεται ως εξής:
- Not
- And
- Or
- Xor
- Eqv
- Imp
Παράδειγμα
Ο παρακάτω βρόχος μπορεί να αποτελεί τμήμα του προγράμματος
ελέγχου ενός τραπεζικού μηχανήματος αυτομάτων συναλλαγών:
Dim PIN As Integer
Dim Tries As Integer
Const CorrectPIN = 1234
Const MaxTries = 4
Tries = 0
Do
PIN = InputBox("Πληκτρολογήστε τον κωδικό εισόδου")
Tries = Tries + 1
Loop Until PIN = CorrectPIN Or Tries = MaxTries
Με τον προσδιορισμό Const μπορούμε να αντιστοιχούμε ονόματα σε
σταθερές τιμές.
Με τον τρόπο αυτό το πρόγραμμα διαβάζεται και συντηρείται ευκολότερα.
Λογικές τιμές
Η εντολή if-else
- Μπορούμε να εκτελέσουμε ορισμένες εντολές υπό συνθήκη με τη
δομή ελέγχου If.
- Αυτή χρησιμοποιείται ως εξής:
If συνθήκη Then
εντολή
...
End If
- Οι εντολή που ακολουθεί το If εκτελείται αν η συνθήκη είναι
αληθής.
-
Παράδειγμα (υπολογίζει και τυπώνει την απόλυτη τιμή των αριθμών που διαβάζει
μέχρι να συναντήσει το 0):
Sub main()
Dim Num As Integer
Do
Num = InputBox("Please enter a number")
If Num < 0 Then
Num = -Num
End If
MsgBox "The absolute value is " + Str(Num)
Loop Until Num = 0
End Sub
- Η δομή ελέγχου If μπορεί να ακολουθηθεί και από τη δομή Else
για να προσδιορίσουμε εντολές που θα εκτελεστούν αν η συνθήκη δεν
ισχύει.
Παράδειγμα:
If grade >= 5 Then
MsgBox "Περνάει"
Else
MsgBox "Απορρίπτεται"
End If
- Μπορούμε να συνδυάσουμε συνεχόμενα Else If για πολλαπλούς
ελέγχους. Παράδειγμα:
If grade >= 9 Then
MsgBox "'Αριστα!"
ElseIf grade >= 7 Then
MsgBox "Λίαν καλώς"
ElseIf grade >= 5 Then
MsgBox "Καλώς"
Else
MsgBox "Κακώς"
End If
Ο τύπος της συμβολοσειράς
- Μπορούμε να ορίσουμε μεταβλητές με τύπο
συμβολοσειρά
με τον τύπο string:
Dim Name as String
- Οι μεταβλητές αυτές μπορούν να αποθηκεύσουν μεταβλητό αριθμό από
χαρακτήρες.
- Οι σταθερές τύπου συμβολοσειράς γράφονται με τη χρήση των διπλών εισαγωγικών:
Dim Name as String
Name = "Γιώργος"
- Αν θέλουμε να παραστήσουμε εισαγωγικά σε μια σταθερή συμβολοσειρά τα
γράφουμε με δύο διπλά εισαγωγικά:
Dim Msg as String
Msg = "Πατήστε ""Enter"" για να συνεχίσετε"
Συναρτήσεις για συμβολοσειρές
Στη Visual Basic μπορούμε να χειριστούμε συμβολοσειρές με τη χρήση
διάφορων συναρτήσεων
(έχουμε δει πως μπορούμε να ενώσουμε δύο συμβολοσειρές με τον τελεστή +).
Οι πιο σημαντικές συναρτήσεις είναι οι παρακάτω:
- Len(string)
- Επιστρέφει το μήκος μιας συμβολοσειράς
- Left(string, length)
- Επιστρέφει length χαραρακτήρες από αριστερά
- Right(string, length)
- Επιστρέφει length χαραρακτήρες από δεξιά
- Mid(string, start[, length])
- Επιστρέφει length χαρακτήρες από τη
θέση start (ή όλη τη συμβολοσειρά από τη θέση start και μετά).
- LTrim(string)
- Αφαιρεί κενά στο αριστερό μέρος της συμβολοσειράς
- RTrim(string)
- Αφαιρεί κενά στο δεξί μέρος της συμβολοσειράς
- Trim(string)
- Αφαιρεί κενά αριστερά και δεξιά της συμβολοσειράς
Τέλος, η εντολή
Mid(stringvar, start[, length]) = string
επιστρέπει την αλλαγή ενός μέρους μιας συμβολοσειράς (από τη θέση start
και για length χαρακτήρες) με μια άλλη.
Αριθμητικοί τύποι
Η Visual Basic παρέχει αρκετούς διαφορετικούς τύπους για το χειρισμό αριθμών.
Είναι σημαντικό να επιλέξουμε τον κατάλληλο τύπο σύμφωνα με τις ανάγκες μας.
Ο παρακάτω πίνακας μπορεί να μας οδηγήσει στην κατάλληλη επιλογή:
Integer | -32,768 to 32,767 |
Long (long integer) | -2,147,483,648 to 2,147,483,647 |
Single (single-precision floating-point) | -3.402823E38 to -1.401298E-45 for negative values; 1.401298E-45 to 3.402823E38 for positive values |
Double (double-precision floating-point) | -1.79769313486232E308 to -4.94065645841247E-324 for negative values; 4.94065645841247E-324 to 1.79769313486232E308 for positive values |
Currency (scaled integer) | -922,337,203,685,477.5808 to 922,337,203,685,477.5807 |
Decimal | +/-79,228,162,514,264,337,593,543,950,335 with no decimal point; +/-7.9228162514264337593543950335 with 28 places to the right of the decimal; smallest non-zero number is +/-0.0000000000000000000000000001 |
Αξίζει να προσέξουμε τα παρακάτω:
Μαθηματικές συναρτήσεις
Οι βασικές μαθηματικές συναρτήσεις της Visual Basic είναι οι παρακάτω:
- Abs
- Απόλυτη τιμή
- Sgn
- Πρόσημο
- Fix
- Αφαίρεση του δεκαδικού τμήματος (στρογγύλευση προς το 0)
- Int
- Στρογγύλευση προς τα κάτω
- Sqr
- Τετραγωνική ρίζα
- Log
- Φυσικός λογάριθμος
- Exp
- e υψωμένο σε δύναμη
- Rnd
- Ψευδοτυχαίος αριθμός 0 <= χ < 1.
Αρνητικό όρισμα θέτει νέα αρχή για παραγωγή αριθμών, θετικό επιστρέφει
τον επόμενο αριθμό της σειράς.
- Sin
- Ημίτονο
- Cos
- Συνημίτονο
- Tan
- Εφαπτομένη
- Atn
- Αντίστροφη εφαπτομένη
Λογιστικές συναρτήσεις
Η Visual Basic παρέχει μια σειρά από συναρτήσεις για υπολογισμούς
λογιστικής φύσης σύμφωνα με τον παρακάτω πίνακα:
Υπολογισμός | Συνάρτηση |
Calculate the future value of an annuity based on periodic, fixed payments and a fixed interest rate.
|
FV(rate, nper, pmt[, pv[, type]])
|
Calculate the depreciation of an asset for a specific time period using the double-declining balance method or some other method you specify.
|
DDB(cost, salvage, life, period[, factor])
|
Calculate the interest payment for a given period of an annuity based on periodic, fixed payments and a fixed interest rate.
|
IPmt(rate, per, nper, pv[, fv[, type]])
|
Calculate the internal rate of return for a series of periodic cash flows (payments and receipts).
|
IRR(values()[, guess])
|
Calculate the modified internal rate of return for a series of periodic cash flows (payments and receipts).
|
MIRR(values(), finance_rate, reinvest_rate)
|
Calculate the number of periods for an annuity based on periodic, fixed payments and a fixed interest rate.
|
NPer(rate, pmt, pv[, fv[, type]])
|
Calculate the net present value of an investment based on a series of periodic cash flows (payments and receipts) and a discount rate.
|
NPV(rate, values())
|
Calculate the payment for an annuity based on periodic, fixed payments and a fixed interest rate.
|
Pmt(rate, nper, pv[, fv[, type]])
|
Calculate the principal payment for a given period of an annuity based on periodic, fixed payments and a fixed interest rate.
|
PPmt(rate, per, nper, pv[, fv[, type]])
|
Calculate the present value of an annuity based on periodic, fixed payments to be paid in the future and a fixed interest rate.
|
PV(rate, nper, pmt[, fv[, type]])
|
Calculate the interest rate per period for an annuity.
|
Rate(nper, pmt, pv[, fv[, type[, guess]]])
|
Calculate the straight-line depreciation of an asset for a single period.
|
SLN(cost, salvage, life)
|
Calculate the sum-of-years' digits depreciation of an asset for a specified period.
|
SYD(cost, salvage, life, period)
|
Μετατροπή αριθμών σε συμβολοσειρές
Η συνάρτηση Format επιτρέπει τον ακριβή καθορισμό της μετατροπής
αριθμητικών τιμών σε συμβολοσειρές.
Η σύνταξή της είναι:
Format(έκφραση[, εμφάνιση])
όπου η "εμφάνιση" είναι μια συμβολοσειρά που καθορίζει θα μετατραπεί η
αντίστοιχη έκφραση σύμφωνα με τους παρακάτω κανόνες:
- 0
- Εμφανίζει ένα ψηφίο ή 0
- #
- Εμφανίζει ένα ψηφίο ή κενό
- .
- Καθορίζει το σημείο εμφάνισης των δεκαδικών τιμών
- ,
- Καθορίζει το διαχωρισμό των χιλιάδων
- %
- Εμφανίζει το πηλίκο του αριθμού με το 100 ως ποσοστό
- E+
- Εμφανίζει τον αριθμό σε εκθετική μορφή με πρόσημο στους θετικούς εκθέτες
- E-
- Εμφανίζει τον αριθμό σε εκθετική μορφή χωρίς πρόσημο στους θετικούς εκθέτες
- "σύμβολα"
- Εμφανίζει τα σύμβολα μέσα στα εισαγωγικά
Παράδειγμα:
Sub main()
Dim x As Currency
x = 1500000
MsgBox ("Κερδίσατε " + Format(x, "0,0.00 ""EUR""!"))
End Sub
Εμφανίζει:
Ορισμός διαδικασίας
- Για να οργανώσουμε καλύτερα τον κώδικα που γράφουμε, αλλά και
για να μπορούμε να χρησιμοποιούμε τα ίδια τμήματα του κώδικα
πολλές φορές μπορούμε να ορίσουμε ένα σύνολο από εντολές ως
μια διαδικασία (procedure)
(στη Visual Basic υπορουτίνα (subroutine)).
- Μπορούμε να ορίσουμε δικές μας διαδικασίες με τον εξής τρόπο:
Sub όνομα διαδικασίας()
δηλώσεις τοπικών μεταβλητών;
εντολές
end Sub
- Στο πρόγραμμα η κλήση (call) της διαδικασίας
γίνεται κάθε φορά που εμφανίζεται μια εντολή με το όνομα της διαδικασίας
που ορίσαμε.
Στο σημείο αυτό η εκτέλεση συνεχίζει με τις εντολές της διαδικασίας,
και, όταν αυτές ολοκληρωθούν, η εκτέλεση
επιστρέφει στο σημείο απ' όπου ξεκίνησε.
-
Παράδειγμα:
Sub main()
hello
MsgBox "Back from hello"
hello
End Sub
' Display hello world
Sub hello()
MsgBox "Hello, world"
End Sub
-
Κάθε διαδικασία έχει ένα όνομα.
Στο πρόγραμμά μας χρησιμοποιούμε το όνομα της διαδικασίας όταν θέλουμε
να εκτελεστεί ο αντίστοιχος κώδικας.
- Η εντολή exit sub μπορεί να εμφανιστεί σε οποιοδήποτε σημείο της διαδικασίας.
Στο σημείο εκείνο σταματά η εκτέλεση της διαδικασίας και ο
έλεγχος ροής (control flow) του προγράμματος
συνεχίζει από το σημείο που κλήθηκε η συνάρτηση.
- Η διαδικασία Main είναι αυτή από την οποία ξεκινά η εκτέλεση του
προγράμματος.
Ορίσματα
- Μπορούμε να μεταβάλουμε τη λειτουργικότητα μιας διαδικασίας με
τη χρήση ορισμάτων.
Κάθε όρισμα (argument) μεταφέρεται από το σημείο
που καλούμε τη διαδικασία μέσα στη διαδικασία μέσω μιας ειδικής μεταβλητής.
- Τα ορίσματα της διαδικασίας είναι μια σειρά από ονόματα και τύπους
μεταβλητών χωρισμένα με κόμμα.
- Όταν καλείται μια διαδικασία οι μεταβλητές που ορίστηκαν ως όρισμα
παίρνουν τις τιμές που δόθηκαν κατά την κλήση.
- Παράδειγμα:
Sub main()
StrongMessage "Hello", 5, "*"
StrongMessage "world", 10, "!"
End Sub
' Display the message msg prefixed by n instances of the string s
Sub StrongMessage(msg As String, n As Integer, s As String)
Dim head As String
' Could use String(s, n) here
For i = 1 To n
head = head + s
Next i
MsgBox head + msg + head
End Sub
Ορισμός συνάρτησης
- Μπορούμε ακόμα να ορίσουμε δικές μας συναρτήσεις με τον εξής τρόπο:
Function όνομα συνάρτησης(δηλώσεις παραμέτρων) as τύπος αποτελέσματος
δηλώσεις τοπικών μεταβλητών;
εντολές
όνομα = τιμή
end Function
- Οι παράμετροι της συνάρτησης είναι μια σειρά από τύπους και ονόματα
μεταβλητών χωρισμένα με κόμμα.
- Όταν καλείται μια συνάρτηση οι μεταβλητές που ορίστηκαν ως παράμετροι
παίρνουν τις τιμές που δόθηκαν στο όρισμα κατά την κλήση.
- Για να θέσουμε την τιμή που επιστρέφει η συνάρτηση αναθέτουμε μια
τιμή στο όνομά της (δεν ορίζουμε αντίστοιχη μεταβλητή).
- Παράδειγμα:
Sub main()
MsgBox "64!=" + Str(factorial(45))
End Sub
' Return n!
Function factorial(n As Integer) As Double
Dim i As Integer
Dim r As Double ' result
r = 1
For i = 1 To n
r = r * i
Next i
factorial = r
End Function
- Η εντολή exit function μπορεί να εμφανιστεί σε οποιοδήποτε σημείο της συνάρτησης.
Στο σημείο εκείνο σταματά η εκτέλεση της συνάρτησης και ο
έλεγχος ροής του προγράμματος
συνεχίζει από το σημείο που κλήθηκε η συνάρτηση.
Στοιχεία αντικεμενοστρεφούς προγραμματισμού
- Κάθε οντότητα είναι ένα αντικείμενο (object).
- Υπολογισμοί γίνονται όταν ένα αντικείμενο στείλει ένα
μήνυμα (message) σε άλλο αντικείμενο
(ή - σύμφωνα με την επικρατέστερη ορολογία -
καλέσει μια μέθοδο (method) ενός άλλου αντικειμένου.)
Μια μέθοδος μπορεί να έχει ως όρισμα στοιχεία που είναι απαραίτητα
για την εκτέλεση του υπολογισμού.
- Κάθε αντικείμενο έχει τη δική του μνήμη για να αποθηκεύει την
κατάστασή του.
Οι μεταβλητές στις οποίες αποθηκεύεται η κατάσταση αυτή
καλούνται ιδιότητες (properties)
(ή μεταβλητές στιγμιότυπου (instance variables)).
- Κάθε αντικείμενο αποτελεί στιγμιότυπο (instance)
μιας κλάσης.
Η κλάση (class) είναι μια ομάδα από ομοειδή αντικείμενα.
- Η κλάση είναι ο χώρος στον οποίο ορίζεται η συμπεριφορά των αντικειμένων.
Όλα τα αντικείμενα μιας κλάσεις μοιράζονται την ίδια συμπεριφορά
(εκτελούν τις ίδιες μεθόδους).
- Οι κλάσεις μπορούν να οργανωθούν σε μια δενδρική δομή
που ορίζει κληρονομικότητα (inheritance).
Ιδιότητες και μέθοδοι που έχουν οριστεί σε μια μητρική κλάση
κληρονομούνται και είναι προσβάσιμες και από κάθε
υποκλάση (subclass) της.
Προγραμματισμός με αντικείμενα
Σύνδεση με το Excel
Η σύνδεση με το Excel μας επιτρέπει να δημιουργήσουμε αυτόματα
φύλλα εργασίας ή να διαβάσουμε υπάρχοντα.
Η πρόσβαση στο Excel γίνεται μέσα από το αντικείμενο Excel.Application
και τις κλάσεις που το αποτελούν.
Ο παρακάτω πίνακας των βασικών κλάσεων προέρχεται από την τεκμηρίωση
που παρέχει η Microsoft:
Στο παράδειγμα που ακολουθεί δημιουργούμε ένα νέο φύλλο εργασίας,
γεμίζουμε ορισμένα κελιά από έναν πίνακα και άλλα με τυχαίες
τιμές και δημιουργούμε ένα γράφημα από τις τιμές αυτές.
Sub main()
Dim xl As Excel.Application
Dim ws As Excel.Worksheet
Dim wb As Excel.Workbook
Dim regions(4, 1) As String
regions(0, 0) = "Europe"
regions(1, 0) = "Americas"
regions(2, 0) = "Asia"
regions(3, 0) = "Africa"
Set xl = New Excel.Application
xl.Visible = True
Set wb = xl.Workbooks.Add
Set ws = wb.Worksheets(1)
ws.Range("A2:A5") = regions
For i = 2 To 5
ws.Range("B" & Format(i)).Value = i * 110 * Rnd
Next i
Dim chart As Excel.chart
Dim rn As Range
Set rn = ws.Range("A1:B5")
Set chart = wb.Charts.Add
chart.ChartWizard rn, xl3DPie, 7, xlColumns, 1, 1, 1, "Sales by area", "Areas", "Sales"
End Sub
Χειρισμός χρόνου
Το παρακάτω παράδειγμα μας δείχνει πως μπορούμε με πρόγραμμα
να δημιουργήσουμε μια καθυστέριση ορισμένων δευτερολέπτων.
' Delay the specified number of seconds
Sub delay(t As Integer)
Dim i As Integer
For i = 1 To t
delayHalfSecond
Next i
End Sub
' Delay a period between (0-1) second
Sub delayHalfSecond()
Dim start As Date
start = Now
Do While Second(start) = Second(Now)
' Let the computer do something else
DoEvents
Loop
End Sub
Πρόσβαση στο πρόχειρο
Το πρόχειρο (clipboard) των Windows συχνά περιέχει
κείμενο το οποίο έχουμε αντιγράψει, αποκόψει ή θέλουμε να επικολήσουμε
σε άλλες εφαρμογές.
Μπορούμε να έχουμε πρόσβαση στο πρόχειρο με το
αντικείμενο (object) ClipBoard και τη
μέθοδο (method) GetText ως εξής:
Dim Result as String
Result = Clipbboard.GetText
Αντίστοιχα, μπορούμε να κάνουμε το πρόχειρο να περιέχει μια συμβολοσειρά
με τις μεθόδους Clear και SetText:
Clipboard.Clear
Clipboard.SetText("These are the new clipboard contents")
Βιβλιογραφία
- Michael Halvorson
Visual Basic 6 Βήμα προς βήμα.
Εκδόσεις Κλειδάριθμος, Αθήνα.
- David Boctor.
Microsoft Office 2000 Visual Basic Fundamentals.
Microsoft Press, Redmond, WA, USA, 1999.
- J. Glenn Brookshear.
Computer Science, pages 225–284, 319–358.
Addison-Wesley, 8th edition, 2004.
- Desmond Francis
D' Souza and Alan Cameron Wills.
Objects, Components, and Frameworks With UML : The Catalysis
Approach.
Addison-Wesley, 1998.
- Scott M. Lewandowski.
Frameworks for component-based client/server computing.
ACM Computing Surveys, 30(1):3–27, March 1998.
- Peter M. Maurer.
Components: What if they gave a revolution and nobody came.
IEEE Software, 33(6):28–34, June 2000.
- Urban Müller.
Brainf****: An
eight-instruction turing-complete programming language.
- Oscar Nierstrasz,
Simon Gibbs, and Dennis Tsichritzis.
Component-oriented software development.
Communications of the ACM, 35(9):160–165, September 1992.
- Diomidis Spinellis
and Konstantinos Raptis.
Component mining: A process and its pattern language (http://softlab.icsd.aegean.gr/~dspin/pubs/jrnl/2000-IST-Components/html/comp.html).
Information and Software Technology, 42(9):609–617, June
2000.
- Diomidis Spinellis.
Explore, excogitate, exploit: Component mining (http://softlab.icsd.aegean.gr/~dspin/pubs/jrnl/1999-Computer-Components/html/comp.html).
IEEE Computer, 32(9):114–116, September 1999.
- Clemens Szyperski.
Component Software: Behind Object-Oriented Programming.
Addison-Wesley, 1998.
- Jeffrey M. Voas.
The challenges of using COTS software in component-based development.
Computer, 31(6):44–45, June 1998.
- Alan Cameron Wills.
Designing component
kits and architectures.
In L. Barroca, J. Hall, and P. Hall, editors, Software Architectures:
Advances and Applications. Springer Verlag, 1999.
Παράρτημα: Χαρακτηριστικές αλγοριθμικές γλώσσες
Σε μια αλγοριθμική (imperative) γλώσσα
το πρόγραμμα εκφράζει άμεσα τα βήματα που επιθυμούμε να
εκτελέσει ο υπολογιστής.
- Fortran, Fortran 9X
- Cobol
- Algol-60
- Basic
- PL/I
- Pascal, Modula-2, Oberon
- C
- Ada
- Smalltalk
- C++
- Awk, Perl, Tcl/Tk
- Java
- Python
Παράρτημα: Χαρακτηριστικές δηλωτικές γλώσσες
Σε μια δηλωτική (declarative) γλώσσα
το πρόγραμμα εκφράζει τη δομή του προβλήματος που θέλουμε
να επιλύσουμε.
Η γλώσσα προγραμματισμού παρέχει τον κατάλληλο μηχανισμό ελέγχου
ο οποίος χρησιμοποιώντας τη δομή που έχουμε ορίσει καταλήγει
στο επιθυμητό αποτέλεσμα.
Γλώσσες βασισμένες στη λογική
Γλώσσες βασισμένες σε συναρτήσεις
Παράρτημα: Βασικά γλωσσικά εργαλεία
- Προετοιμαστής/Διορθωτής (Editor)
- Επιτρέπει τη συγγραφή και την αλλαγή του προγράμματος.
- Προεπεξεργαστής (Preprocessor)
- Επεξεργάζεται το πρόγραμμα εκτελώντας απλούς
συμβολικούς μετασχηματισμούς και παράγει ένα αντίστοιχο πρόγραμμα.
Χρησιμοποιείται σε συμβολικές γλώσσες, τη Fortran (Ratfor), τη C, και τη C++.
- Συμβολομεταφραστής (Assembler)
- Μετατρέπει τη συμβολική γλώσσα του επεξεργαστή σε γλώσσα
μηχανής.
- Μεταγλωττιστής (Compiler)
- Μεταφράζει μια γλώσσα υψηλού επιπέδου σε γλώσσα επιπέδου μηχανής.
- Διερμηνευτής (Interpreter)
- Εκτελεί άμεσα ένα πρόγραμμα σε γλώσσα υψηλού επιπέδου.
- Συνδέτης (Linker)
- Συρράφει τμήματα ενός προγράμματος που έχουν μεταγλωττιστεί ξεχωριστά
σε ένα συνεχές πρόγραμμα.
- Φορτωτής (Loader)
- Φορτώνει το πρόγραμμα στη μνήμη του επεξεργαστή διορθώνοντας αναφορές
σε σχετικές θέσεις μνήμης.
Συνήθως τμήμα του λειτουργικού συστήματος.
- Αποσφαλματωτής (Debuger)
- Επιτρέπει την εκτέλεση του προγράμματος βήμα-βήμα, την
εξέταση και αλλαγή μεταβλητών του
και γενικά ενέργειες που αποσκοπούν στην ανίχνευση
λαθών που μπορεί να περιέχει το πρόγραμμα.
- Διερμηνευτής (Interpreter)
- Εκτελεί απευθείας τις εντολές του προγράμματος χωρίς ενδιάμεσο στάδιο
μεταγλώττισης.
Παράρτημα: Είσοδος στοιχείων
Παράρτημα: Βρόχοι με την εντολή loop while
Παράρτημα: Προσδιορισμός της συνθήκης με τη χρήση της Until
- Μερικές φορές είναι πιο φυσικό να εκφράσουμε τη συνθήκη που
τερματίζει το βρόχο αντί για τη συνθήκη που πρέπει να είναι αληθής
για να εκτελείται ο βρόχος.
- Και οι δύο δομές ελέγχου που είδαμε μπορούν να διατυπωθούν με τη
χρήση του προσδιορισμού "Until συνθήκη" αντί για τον προσδιορισμό
"While συνθήκη".
- Έτσι, τα παραδείγματα που έχουμε δει μπορούν να γραφτούν και ως
εξής:
Παράδειγμα do while ... loop
(εμφανίζει στην οθόνη τους αριθμούς από το 0 μέχρι το 4):
Sub main()
Dim i As Integer
i = 0
Do Until i >= 5
MsgBox i
i = i + 1
Loop
End Sub
Παράδειγμα do ... loop while
(θέλουμε ο χρήστης να εισάγει έναν αριθμό μικρότερο του 10):
Sub main()
Dim Number As Integer
Do
Number = InputBox("Δώστε έναν αριθμό μικρότερο του 10")
Loop Until Number < 10
MsgBox "Δώσατε " + Str(Number)
End Sub
Παράρτημα: Έξοδος από το βρόχο
Παράρτημα: H εντολή select
- Η εντολή select μας επιτρέπει να κατευθύνουμε τη ροή του
προγράμματος προς μια συγκεκριμένη τιμή ανάλογα με την
τιμή μιας παράστασης.
- Συντάσσεται ως εξής:
Select Case παράσταση
Case λίστα τιμών1
εντολή1
εντολή1α
...
Case λίστα τιμών2
εντολή2
...
...
Case Else
εντολή ν
...
End Select
- Ανάλογα με ποια από τις τιμές ισούται η τιμή της παράστασης
εκτελούνται οι αντίστοιχες εντολές.
- Αν καμία από τις τιμές δεν ταυτίζεται με την τιμή της παράστασης
τότε εκτελείται η εντολή που ακολουθεί την Case Else (αν υπάρχει), αλλιώς
δεν εκτελείται καμία εντολή.
- Οι τιμές για κάθε case μπορεί να είναι
- μια έκφραση (π.χ. 42 ή i + 9),
- ο ορισμός μιας περιοχής με τη χρήση to (π.χ. 1 to 10)
- μια σύγκριση της τιμής της απόφασης με μια έκφραση με τη χρήση της
λέξης Is (π.χ. Is > 100)
- ή ένα σύνολο από από τα παραπάνω χωρισμένα με , (π.χ. 3 to 5, 50, 90, is > LastVal)
- Παράδειγμα:
Dim Number As Integer
Number = InputBox("Enter a Number")
Select Case Number ' Evaluate Number.
Case 1 To 5 ' Number between 1 and 5.
MsgBox "Between 1 and 5"
Case 6, 7, 8 ' Number between 6 and 8.
MsgBox "Between 6 and 8"
Case Is > 8 And Number < 11 ' Number is 9 or 10.
MsgBox "Greater than 8"
Case Else ' Other values.
MsgBox "Not between 1 and 10"
End Select
Παράρτημα: Σύγκριση συμβολοσειρών
Με τον τελεστή Like μπορούμε να συγκρίνουμε αν μια συμβολοσειρά
μοιάζει με ένα συγκεκριμένο πρότυπο.
Τα πρότυπα καθορίζονται με τη χρήση των παρακάτω χαρακτήρων:
- ?
- Ταιριάζει με οποιοδήποτε ένα χαρακτήρα
- *
- Ταιριάζει με μηδέν ή περισσότερους χαρακτήρες
- #
- Ταιριάζει με οποιοδήποτε ψηφίο
- [λίστα]
- Ταιριάζει με οποιοδήποτε χαρακτήρα στη λίστα (π.χ. [aeiyuio])
- [!λίστα]
- Ταιριάζει με οποιοδήποτε χαρακτήρα δεν περιέχεται στη λίστα
Η λίστα μπορεί να περιέχει χαρακτήρες ή μια περιοχή χαρακτήρων με τη σύνταξη
χαρακτήρας-χαρακτήρας (π.χ. [A-Z].
Αν θέλουμε η λίστα να περιέχει το -, τότε αυτό πρέπει να εμφανίζεται πρώτο στη
λίστα.
Παράδειγμα (ο βρόχος ελέγχει αν ο ταχυδρομικός κώδικας είναι γραμμένος σωστά):
Sub main()
Dim PostCode As String
Dim CodeOk As Boolean
Do
PostCode = InputBox("Δώστε ταχυδρομικό κώδικα")
CodeOk = (PostCode Like "##[- ]###" Or PostCode Like "###[- ]##")
If Not CodeOk Then
MsgBox "Λάθος ταχυδρομικός κώδικας, δοκιμάστε ξανά."
End If
Loop Until CodeOk
End Sub
Theoretical Computer Science; Algorithms and Data Structures
Επαλήθευση αλγορίθμων
Παράδειγμα
Είσοδος:
Α(1..Ν): πίνακας ακεραίων
N : ακέραιος
Έξοδος:
Β(1..Ν): πίνακας ακεραίων
Προϋποθέσεις:
Ν >= 1
Μετασυνθήκες:
Β(1..Ν) περιέχει τις τιμές του Α(1..Ν)
Μεταβλητές
Ι : Ακέραιος
I := 1
Όσο Ι <= Ν
Β(Ι) := Α(Ι)
Αναλοίωτη συνθήκη: Β(1..Ι) := Α(1..Ι)
Συνθήκη σύγκλισης: Ν - Ι
Ι := Ι + 1
Τέλος
Αποδοτικότητα των αλγορίθμων
- Η σημειογραφία Ο()
- Γραμμική ανίχνευση Ο(ν)
- Δυαδική ανίχνευση Ο(log ν)
- Διπλός βρόχος Ο(ν2)
- Κατώτερο (απόδειξης) πραγματικό και ανώτερο (αλγοριθμικό) κόστος
- Κόστος μνήμης
Πολυπλοκότητα
Μη υπολογισιμότητα
Τερματίζει(Πρόγραμμα, Δεδομένα)
Είσοδος: Πρόγραμμα, Δεδομένα
Έξοδος: Αληθές αν το πρόγραμμα τερματίζει με τα δεδομένα,
αλλιώς ψευδές.
Δοκιμή(Πρόγραμμα, Δεδομένα)
Αν Τερματίζει(Πρόγραμμα, Δεδομένα) Τότε
Όσο αληθές
Τέλος (Όσο)
Αλλιώς
Δοκιμή := ψευδές
Τέλος (Αν)
Δοκιμή(Δοκιμή ..., Δοκιμή ...)
Αλγοριθμική οικουμενικότητα
Πεντάδα Α = (Ι, Ο, S, λ, δ)
- Ι : Τιμές εισόδου
- Ο : Τιμές εξόδου
- S : Πεπερασμένο σύνολο εσωτερικών καταστάσεων
- λ : S X I -> S Συνάρτηση επόμενης κατάστασης
- δ : S X I -> O Συνάρτηση επόμενης τιμής εξόδου
Η μηχανή του Turing
- Πεπερασμένο αλφάβητο: Α
- Πεπερασμένο σύνολο καταστάσεων: Μ
- Άπειρη ταινία
- Κεφαλή γραφής και ανάγνωσης
- Διάγραμμα μετάπτωσης: (Α Χ Μ) -> (Α X {Δ, Α, Σ}) Χ Μ
Παραδείγματα
- Εγγραφή συμβόλου στο τέλος της ταινίας
- Αντιγραφή ταινίας
- Πρόσθεση
Η θέση των Church/Turing
Πιθανοτικοί αλγόριθμοι
Δειπνούντες φιλόσοφοι
Για πάντα
Πέτα νόμισμα και περίμενε το ανάλογο πηρούνι
Αν υπάρχει και το άλλο πηρούνι Τότε
πάρε το άλλο πηρούνι
φάε
Αλλιώς
Άσε τα πηρούνια
Τέλος
Τέλος
Γλώσσες προγραμματισμού
- Επιβάλλουν την έκφραση ενός αλγορίθμου με τυπική μορφή.
- Χρησιμοποιούνται άμεσα ή έμμεσα από τον υπολογιστή.
- Διαφορετικές γλώσσες διαθέτουν διαφορετικά επίπεδα και μέσα έκφρασης.
Γλώσσα μηχανής
89 D9
B8 01 00
83 F9 00
74 05
F7 E1
49
EB F6
Συμβολική γλώσσα
; Παραγοντικό του BX στο AX
MOV CX, BX ; Μετρητής στο CX
MOV AX, 1 ; Αρχική τιμή 1
LOOP: CMP CX, 0 ; Τέλος;
JZ DONE ; Ναι, έξοδος
MUL CX ; Όχι, πολλαπλασίασε ΑΧ με CX
DEC CX ; Επόμενη τιμή του CX
JMP LOOP ; Πίσω στο βρόχο
DONE:
Fortran 77
C Return factorial of N
C
FUNCTION IFACTORIAL(N)
INTEGER N
INTEGER IFACTORIAL
INTEGER IRESULT, I
IRESULT = 1
DO I = 1, N
IRESULT = IRESULT * I
END DO
IFACTORIAL = IRESULT
END
Fortran 95
! Return factorial of n
function factorial(n) result (nfac)
integer, intent(in) :: n
integer :: factorial
integer :: i
nfac = 1
do i = 1, n
nfac = nfac * i
end do
end function factorial
C
/* Παραγοντικό */
int
factorial(int n)
{
int result;
int count;
count = n;
result = 1;
while (count > 0) {
result = result * count;
count = count - 1;
}
return (result);
}
/* Παραγοντικό (με λιγότερες εντολές) */
int
factorial(int n)
{
int result = 1;
for (; n; n--)
result *= n;
return (result);
}
Prolog
factorial(0, 1).
% To N_Factorial είναι ισοδύναμο με Ν!
factorial(N, N_Factorial) :-
N > 0,
M is N - 1,
factorial(M, M_Factorial),
N_Factorial is M_Factorial * N.
Lisp
;; Επιστρέφει το παραγοντικό του n
(define (factorial n)
(if (= n 1)
1
(* n (factorial (- n 1)))))
Basic
500 REM Return factorial of N in variable FACT
510 FACT = 1
520 FOR I = 1 TO N
530 FACT = FACT * I
540 NEXT I
550 RETURN
Visual Basic
' Παραγοντικό του Ν
FUNCTION Factorial(N AS INTEGER) AS INTEGER
DIM Count AS INTEGER
DIM Result AS INTEGER
Count = N
Result = 1
WHILE Count > 0
Result = Result * Count
Count = Count - 1
WEND
END FUNCTION
Pascal
(* Παραγοντικό του Ν *)
function factorial(N : Integer) : Integer;
var
Count, Result : Integer;
begin
Count := N;
Result := 1;
While Count > 0 Do
begin
Result := Result * Count;
Count := Count - 1
end;
Factorial := Result
end (* Factorial *);
Java
// Υπολογισμός ν παραγοντικού
public int παραγοντικό(int ν) {
int αποτέλεσμα;
int μετρητής;
μετρητής = ν;
αποτέλεσμα = 1;
while (μετρητής > 0) {
αποτέλεσμα = αποτέλεσμα * μετρητής;
μετρητής = μετρητής - 1;
}
return (αποτέλεσμα);
}
Πίνακες
- Οι πίνακες (arrays) επιτρέπουν τη χρήση πολλών ομοίου τύπου στοιχείων.
- Συνήθως το στοιχείο i ενός πίνακα A προσδιορίζεται ως A[i] ή A(i).
- Μπορούν να οριστούν και πίνακες πολλαπλών διαστάσεων με στοιχεία
αντίστοιχα προσδιορισμένα ως A[i,j] κ.λπ.
- Συνήθως υλοποιούνται με τη διαδοχική φύλαξη των στοιχείων τους στη
μνήμη.
Παράδειγμα
class Sum {
static int sum(int a[]) {
int i, sum = 0;
for (i = 0; i < a.length; i++)
sum += a[i];
return sum;
}
static int testdata[] = {1, 2, 3, 4, 5};
public static void main(String args[]) {
System.out.println(sum(testdata));
}
}
Εγγραφές
- Οι εγγραφές (records) επιτρέπουν τον ομαδικό χειρισμό
διαφορετικού τύπου στοιχείων.
- Συνήθως το στοιχείο i μιας εγγραφής A προσδιορίζεται ως A.i
- Μπορούν να οριστούν και πίνακες που περιέχουν εγγραφές ή εγγραφές
που περιέχουν πίνακες.
- Συνήθως υλοποιούνται με τη διαδοχική φύλαξη των στοιχείων τους στη
μνήμη.
Παράδειγμα
struct point {
double x; /* X coordinate */
double y; /* Y coordinate */
};
struct customer {
char name[50]; /* Customer name */
int balance; /* Account balance */
};
struct customer customer_list[100];
main()
{
struct point a, b;
a.x = 5;
a.y = 9;
b.x = 12;
b.y = 19;
}
Δομές με δείκτη
- Οι δείκτες (pointers) αντιπροσωπεύουν δεδομένα
που έχουν καταχωρηθεί σε κάποια άλλα θέση της μνήμης.
Επιτρέπουν τον εύκολο ορισμό και χειρισμό σύνθετων δομών.
Τέτοιες δομές μπορεί να είναι
- Συνήθως τα περιεχόμενα ενός δείκτη p εκφράζονται ως *p (C, C++) ή p^ (Pascal).
- Στη γλώσσα Java όλα τα αντικείμενα εκφράζονται με τη χρήση ενός δείκτη.
- Οι δείκτες υλοποιούνται ως έμμεσες διευθύνσεις μνήμης.
Παράδειγμα (C)
struct s_int_list {
int val;
struct s_int_list *next;
};
Διαδικασίες, συναρτήσεις και τάξεις
Παράδειγμα συνάρτησης και διαδικασίας σε Pascal
program fun;
(* Παραγοντικό του Ν *)
function factorial(N : Integer) : Integer;
var
Count, Result : Integer;
begin
Count := N;
Result := 1;
While Count > 0 Do
begin
Result := Result * Count;
Count := Count - 1
end;
Factorial := Result
end (* Factorial *);
procedure clear_screen;
const number_of_lines = 24;
var i : integer;
begin
for i := 0 to number_of_lines do
writeln('');
end (*clear_screen*);
begin
clear_screen;
writeln(factorial(5));
end.
Παράδειγμα κλάσης σε Java
class Point extends Object {
private int x;
private int y;
public void MoveTo(int x, int y) {
this.x = x;
this.y = y;
}
public int GetX() {
return (x);
}
}
Αναδρομικές τεχνικές
- Διαδικασίες, συναρτήσεις και δομές που ορίζονται
αναδρομικά (recursively)
μπορούν εύκολα να ανιμετωπιστούν με τη χρήση αναδρομικών τεχνικών
προγραμματισμού.
Παράδειγμα
class Recurse {
static void russian_doll(int size) {
int i;
System.out.print("[");
for (i = 0; i < size; i++)
System.out.print("-");
System.out.println("]");
if (size > 1)
russian_doll(size - 1);
}
static int factorial(int n) {
if (n == 0)
return (1);
else
return (n * factorial(n - 1));
}
public static void main(String args[]) {
System.out.println(factorial(5));
russian_doll(10);
}
}
Αποτελέσματα
120
[----------]
[---------]
[--------]
[-------]
[------]
[-----]
[----]
[---]
[--]
[-]
Οι πύργοι του Ανόι
import java.util.*;
public class Hanoi {
static Stack A, B, C;
/** Display the contents of a collection with a given name */
static void showCollection(String name, Collection c) {
Iterator i;
System.out.print(name + ": ");
for (i = c.iterator(); i.hasNext(); )
System.out.print(i.next() + " ");
System.out.println();
}
/** Display the hanoi towers */
static void showConfiguration() {
showCollection("A", A);
showCollection("B", B);
showCollection("C", C);
System.out.println();
}
/** Move n blocks from to using tmp */
static void move(int n, Stack from, Stack to, Stack tmp) {
if (n == 1) {
to.push(from.pop());
showConfiguration();
} else {
move(n - 1, from, tmp, to);
to.push(from.pop());
showConfiguration();
move(n - 1, tmp, to, from);
}
}
public static void main(String args[]) {
final int N = 4;
A = new Stack();
B = new Stack();
C = new Stack();
for (int i = N; i > 0; i--)
A.push(new Integer(i));
showConfiguration();
move(N, A, C, B);
}
}
Βιβλιογραφία
- Μ. Μπεκάκος
Εισαγωγή στην πληροφορική. σ. 112-113
Οικονομικό Πανεπιστήμιο Αθηνών 1998.
- Andrew S. Tanenbaum
Δίκτυα Υπολογιστών. Τρίτη Έκδοση.
Παπασωτηρίου, 2000.
- Les Goldschlager και Andrew Lister
Εισαγωγή στη σύγχρονη επιστήμη των υπολογιστών. Κεφάλαιο 2.
Εκδόσεις Δίαυλος 1994.
- Peter Rechenberg.
Εισαγωγή στην Πληροφορική. σ. 112-133
Κλειδάριθμος, 1992.
- Alfred V. Aho, John E.
Hopcroft, and Jeffrey D. Ullman.
The
Design and Analysis of Computer Algorithms.
Addison-Wesley, 1974.
- J. Glenn Brookshear.
Computer Science, pages 167–224, 321–367.
Addison-Wesley, sixth edition, 2000.
- J. Glenn Brookshear.
Computer Science, pages 171–224, 319–358, 457–484.
Addison-Wesley, 8th edition, 2004.
- David Harel.
Algorithmics: the Spirit of Computing.
Addison-Wesley, 1987.
- George Pólya.
How to
Solve it.
Princeton University Press, second edition, 1957.
Published by Penguin Books 1990.
- Ravi Sethi.
Programming Languages: Concepts and Constructs.
Addison-Wesley, 1989.
Database Systems
Advantages
- Data independence
- Efficient data access
- Data integrity
- Data security
- Data administration capabilities
- Resilient concurrent access
- Crash recovery
- Reduced application development time
Problems and Limitations
- Data Management approach poses problems in data resource management
- Developing a large database and installing a DBMS can be difficult and expensive
- More hardware capability is required (storage and memory requirements are higher)
- Longer processing times may result from high-volume transaction processing applications
- The security and integrity of an organization's databases are major concerns of an organization's data resource management effort
Levels of Abstraction
- Physical schema
- Defines how data is stored
- Conceptual schema or logical schema
- Defines data in terms of a data model
- External schema or view level
- Defines a number of simplified domain-specific views
DBMS Levels of Abstraction
Data Independence
The three different levels of abstraction allow us to:
- Change the file organization without affecting the conceptual schema
- Change the conceptual schema without affecting an application (by adjusting the external schema)
Database Design
- Requirements analysis
- Conceptual database design: develop high level description
- Logical database design: map description into the specific DBMS
- Schema refinement: identify and solve potential problems
- Physical database design: optimize for specific workloads
- Security design
Entities and Attributes
- Entity
- Object in the real world
- Attributes
- Describe each entity
- Entity set
- Group of similar entities (share same attributes)
- Attribute domain
- Values that can be used for the attribute
- Key
- Minimal set of attributes that uniquely identify an entity
- Primary key
- Designated among a number of candidate keys
The books entity set
The Entity Relationship Model
- Relationship
- Association between two entities
- Relationship set
- Group of similar relationships
- Descriptive attributes
- can identify a relationsip
A relationship can be identified as:
- one-to-many
- many-to-many
- one-to-one
The Published relationship
The Relational Model
Relation Schema
- Name of the relation
- Name of each field (or column or attribute)
- Domain of each field
Relation Instance
- Set of tuples (or records)
(Table of rows with the same number of fields)
ISBN | Title | Price |
0-387-02620-7 | Beyond Fear | 29.00 |
0-201-79940-5 | Code Reading | 49.95 |
0-07-246535-2 | Database Management Systems | 40.00 |
0-19-502402-8 | The Timeless Way of Building | 60.00 |
Redundancy
Storing redundant information in a database results in:
- Waste of space
- Data that may not be correctly updated
- Data that can not be inserted unless other data is also inserted
- Data that is incidentally lost when other data is removed
Example
ISBN | Title | Price | Discount | Reduced Price |
0-387-02620-7 | Beyond Fear | 30.00 | 10 | 27.00 |
0-201-79940-5 | Code Reading | 50.00 | 20 | 40.00 |
0-07-246535-2 | Database Management Systems | 40.00 | 20 | 38.00 |
0-19-502402-8 | The Timeless Way of Building | 60.00 | 10 | 54.00 |
Dependencies are resolved by decomposing the relations.
The Structured Query Language
Language used for
- Creating
- Manipulating
- Querying
relational DBMSs.
Used:
- Directly by database administrators and expert users
- As a standard way for applications to communicate with the DBMS
- As a way to backup, restore, and transfer data in a portable form
SQL Table Definition and Data Manipulation
Create the Table
CREATE TABLE Books (
isbn CHAR(13),
title CHAR(100),
price real)
Add a Record
INSERT
INTO Books (isbn, title, price)
VALUES ("0-201-79940-5", "Code Reading", 49.95)
Modify Records
UPDATE Books B
SET B.price = B.price * 1.1
Delete a Record
DELETE
FROM Books B
WHERE ISBN="0-201-79940-5"
SQL Queries
Display the Details for a Record
SELECT *
FROM Books
WHERE ISBN="0-201-79940-5"
Display Records Based on a Condition
SELECT title, price
FROM Books
WHERE price > 50 AND price > 10
Perform an Aggregate Calculation
SELECT AVG(price)
FROM Books
Join Two Tables
SELECT title, authorname
FROM Books, Authors
WHERE Books.authorid = Authors.authorid
Query By Example
SELECT BOOKS.title, BOOKS.price, BOOKS.price, BOOKS.isbn
FROM BOOKS
WHERE (((BOOKS.price)>100)) OR (((BOOKS.price)<10))
ORDER BY BOOKS.title;
Additional SQL Query Constructs
SQL provides many sophisticated capabilities:
- Selection of distinct records
SELECT DISTINCT title, price
FROM Books
WHERE price < 50 AND price > 10
- Aggregate calculations (COUNT, SUM, AVG, MIN, MAX)
SELECT MIN(price), MAX(price)
FROM Books
- Operations on groups
SELECT discount, AVG(price)
FROM Books
WHERE price > 10
GROUP BY discount
HAVING MAX(price) - MIN(price) > 10
- String pattern matching
SELECT title, price
FROM Books
WHERE title LIKE 'TIMELESS%'
- Ordering
SELECT title, price
FROM Books
ORDER BY price
- Set union, intersection and difference (UNION, INTERSECT, EXCEPT)
SELECT title, price
FROM Books
UNION
SELECT title, price
FROM magazines
- Nested queries (IN, EXISTS, operator ANY, operator ALL)
SELECT title, price
FROM Books
WHERE price > (SELECT AVG(price) FROM Books)
SELECT title, price
FROM Books
WHERE price < ALL
(SELECT price
FROM Books
WHERE title LIKE 'Harry Potter%')
Views
By defining appropriate views on a schema we
- Achieve logical data independance
- Can better organise security
CREATE VIEW BrowseBooks(isbn, title)
AS SELECT B.isbn, B.title
FROM Books B
WHERE B.price < 100
Indexes
An index is an auxilliary data structure used
to speed up operations that are not efficiently supported by
a table's record organisation.
CREATE INDEX IndPrice ON Books
WITH STRUCTURE = BTREE
KEY = (price)
To design the index structure take into account:
- The query workload
- The update (insert, delete, update) workload
- Operations that will benefit from the index
- Attributes that are often used
- The type of the index structure (hash versus tree)
- Index maintenance cost
Security Issues
Our goal in designing a secure database is to achieve:
- Confidentiality
- Integrity
- Availability
Discretionary access control provides us the capability
to give (and revoke) rights to specific users or groups.
Examples
GRANT SELECT
ON BrowseBooks
TO WebUsers
REVOKE INSERT, DELETE
ON Books
From Alice
GRANT INSERT, DELETE
ON Books
TO InventoryGroup
GRANT UPDATE(price)
ON Books
TO MarketingGroup
GRANT UPDATE(title, isbn)
ON Books
TO MaintenanceGroup
Transaction Management
- A transaction is a single unit of execution program execution (e.g. book a seat)
- Transactions provide concurrency control
- Transactions support crash recovery
Four important properties (ACID):
- Atomic
- Database ensures that all actions are carried out, or none
- Consistency
- Users ensure that transactions leave the data in a consistent state
- Isolation
- Users to not have to worry about concurrently executing transactions
- Durability
- Completed transactions persist after a crash even if the database has not been updated
Crash Recovery
- Crash recovery mechanisms guard against
- System crashes
- Media failures
- A log or journal records all changes before they modify the database
- The log is assumed to survive system crashes and media failures
- After a crash the recovery manager follows the ARIES stretegy
- Analysis
- of changes that have not been written and active transactions
- Redo
- actions that were not written to the database
- Undo
- transactions that were not completed
- The log is also updated during the recovery to guard against repeated crashes
- A checkpoint is periodically recorded to the log to reduce the recovery overhead
- A checkpointing strategy is also used to take backup copies of live databases
The Database Administrator
Coordinates all the activities of the database system; the database administrator has a good understanding of the enterprise's information resources and needs.
The database administrator's duties include:
- Schema definition
- Storage structure and access method definition
- Schema and physical organization modification
- Granting user authority to access the database
- Specifying integrity constraints
- Acting as liaison with users
- Monitoring performance and responding to changes in requirements
User Profiles
Users are differentiated by the way they expect to interact with the system
- Application programmers
- interact with system through DML calls
- Sophisticated users
- form requests in a database query language
- Specialized users
- write specialized database applications that do not fit into the traditional data processing framework
- Naive users
- invoke one of the permanent application programs that have been written previously
RAID Storage
Redundant arrays of independent disks (RAID) are used to overcome
two bottlenecks associated with disk storage:
By using additional redundant disks we can increase both.
The following are some typically identified RAID levels:
- 0: Nonredundant
- Data is distributed across different disks to increase performance
- 1: Mirrored
- A second disk set keeps a copy of the data (50% overhead)
- 0+1 (or 10): Striping and mirroring
- Data is distributed across a second disk set to increase performance
- 2: Error correcting codes
- Additional check disks (4:3, 10:4, 25:5) are used to provide redundancy
with a smaller overhead (e.g. 57%, 71%, 83%)
- 3: Bit-interleaved parity
- A single additional check disk is used to recover the data by distributing bits across all disks
- 4: block-interleaved parity
- The check disk contains the parity on a block level: higher read throughput
- 5: block-interleaved distributed parity
- Block parity is distributed across all disks: higher read and write throughput
- 6: higher redundancy
- Like 5 with an additional check disk guarding against a second failure
XML Concepts
- Semantic and structural text markup language
- Does not (directly) define presentation
- Application of SGML derived from HTML
- Extensible
- A separate document type definition is used to specify the structure of the data
- Delivers cross-platform data portability
- Domain-specific applications allow data interchange
XML Syntax
An XML document is structured on the following building blocks:
- Elements
- Delimited by starting and ending tags
Example:
<title>The Lord of the Rings</title>
Elements can also be empty; a special shortcut makes them smaller:
Example:
<dvd></dvd>
is the same as
<dvd />
- Attributes
- Name=valua pairs in the starting tag, that can be used for metadata
Example:
<title lang="english">The Lord of the Rings</title>
- Entity references
- Are used to refer to special (reserved) symbols
Symbol | Entity reference |
< | < |
> | > |
& | & |
" | " |
' | ' |
- Comments
- Delimited by the <!-- and -> sequence
Example:
<!-- this is a comment ->
Example
<!-- List of shipped books -->
<booklist>
<book>
<isbn>0-387-02620-7</isbn>
<title>Beyond Fear</title>
<author>
<givenname>Bruce</givenname>
<familyname>Schneier</familyname>
</author>
<price>30.00</price>
</book>
<book>
<isbn>0-201-79940-5</isbn>
<title>Code Reading</title>
<author>
<givenname>Diomidis</givenname>
<familyname>Spinellis</familyname>
</author>
<price>50.00</price>
</book>
<book>
<isbn>0-07-246535-2</isbn>
<title>Database Management Systems</title>
<author>
<givenname>Raghu</givenname>
<familyname>Ramakrishnan</familyname>
</author>
<author>
<givenname>Johannes</givenname>
<familyname>Gehrke</familyname>
</author>
<price>40.00</price>
</book>
<book>
<isbn>0-19-502402-8</isbn>
<title>The Timeless Way of Building</title>
<author>
<givenname>Cristopher</givenname>
<familyname>Alexander</familyname>
</author>
<price>60.00</price>
</book>
<book>
<isbn>3-8218-0479-3</isbn>
<title lang="german">Lexikon der Populaeren Irrtuemer</title>
<author>
<givenname>Walter</givenname>
<familyname>Kraemer</familyname>
</author>
<author>
<givenname>Goetz</givenname>
<familyname>Trenkler</familyname>
</author>
<price>40.00</price>
</book>
</booklist>
Document Type Definitions
- A document type definition is used to describe the format of valid XML documents
- It can be used to verify XML documents
- It can be used to parse XML documents decomposing them into a tree
- Defines allowed elements
- For each element defines content and supported attributes
- Specified element content can be
- Parsed character data
- Indicated by #PCDATA
- Child element
- Indicated (name)
- Sequence of elements
- Indicated by (child1, child2, ...)
- Zero or one child elements
- Indicated by name?
- Zero or more child elements
- Indicated by name*
- One or more child elements
- Indicated by name+
- A choice among different child elements
- Indicated by (name1 | name2 | ...)
Example:
<!ELEMENT booklist (book)*>
<!ELEMENT book (isbn,title,author+,price,edition?)*>
<!ELEMENT isbn (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ATTLIST title lang (german|english) "german">
<!ELEMENT author (givenname,familyname)>
<!ELEMENT givenname (#PCDATA)*>
<!ELEMENT familyname (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT edition (#PCDATA)>
Bibliography
- J. Glenn Brookshear.
Computer Science, pages 359–402.
Addison-Wesley, 8th edition, 2004.
- D. D. Chamberlin,
M. M. Astrahan, K. P. Eswaran, P. P. Griffiths, R. A. Lorie, J. W. Mehl,
P. Reisner, and B. W. Wade.
SEQUEL 2: A unified approach to data definition manipulation and control.
IBM Journal of Research and Development, 20(6):560–575, November
1976.
- Peter Pin-Shan Chen.
The entity-relationship model — toward a unified view of data.
ACM Transactions on Database Systems, 1(1):9–36, March 1976.
- Elliotte Rusty Harold
and W. Scott Means.
XML
in a Nutshell.
O'Reilly and Associates, Sebastopol, CA, 2001.
- International Organization
for Standardization, Geneva, Switzerland.
Information technology — Database languages — SQL, 1992.
ISO/IEC 9075:1992.
- Henry F. Korth
and Abraham Silberschatz.
Database System Concepts.
McGraw-Hill, second edition, 1991.
- Raghu
Ramakrishnan and Johannes Gehrke.
Database Management Systems.
McGraw-Hill, second edition, 2000.
Operating Systems
Ορισμός και λειτουργίες
Το λειτουργικό σύστημα (operating system)
είναι το βασικό πρόγραμμα συστήματος ενός ηλεκτρονικού υπολογιστή.
Ελέγχει τη διαχείριση των πόρων του υπολογιστή και θέτει τα θεμέλεια
για τη λειτουργία των προγραμμάτων εφαρμογών.
Βασικά στοιχεία
Διεργασίες
Είσοδος και έξοδος στοιχείων
- Επικοινωνία με τις συσκευές
- Χρήση ανεξάρτητα από τη συσκευή
Διαχείριση μνήμης
Σύστημα αρχείων
- Αρχεία
- Κατάλογοι και ιεραρχική δομή
- Διαχείριση χώρου
- Ασφάλεια
Βιβλιογραφία
- Α. Λυπιτάκης
Ο σύγχρονος κόσμος των υπολογιστών. Κεφάλαιο 8
1997.
- Μ. Μπεκάκος
Εισαγωγή στην πληροφορική. σ. 103-111
Οικονομικό Πανεπιστήμιο Αθηνών 1998.
- Ε. Παπαθανασίου
Στοιχεία υπολογιστικών συστημάτων. Ενότητα 6.12.
Εκδόσεις Μπένου 1998.
- Les Goldschlager και Andrew Lister
Εισαγωγή στη σύγχρονη επιστήμη των υπολογιστών. Ενότητα 5.5.
Εκδόσεις Δίαυλος 1994.
- Andrew S. Tanenbaum
Σύγχρονα λειτουργικά συστήματα. Τόμος Α.
Παπασωτηρίου, 1993.
- Peter Rechenberg.
Εισαγωγή στην Πληροφορική. σ. 150-155
Κλειδάριθμος, 1992.
Computer Networks
Εισαγωγή, το μοντέλο αναφοράς OSI
Φυσικό επίπεδο
- Θεωρία πληροφορίας
- Μέσα μεταφοράς
- Μαγνητικά
- Συνεστραμένο καλώδιο
- Ομοαξονικό καλώδιο
- Οπτική ίνα
- Ασύρματη μεταφορά οπτικής επαφής
- Δορυφορική επικοινωνία
- Αναλογική μετάδοση
- Το τηλεφωνικό δίκτυο
- MODEM
- RS-232
- Ψηφιακή μετάδοση
- Πολυπλεξία (multiplexing)
- Πακέτα και συνδέσεις
- Ψηφιακά δίκτυα
- ISDN
- GSM / UMTS
- ATM
- SONET
Επίπεδο σύνδεσης
Επίπεδο δικτύου
Επίπεδο μεταφοράς
Επίπεδο συνόδου
Επίπεδο παρουσίασης
- Εμφάνιση δεδομένων
- Συμπίεση
- Ασφάλεια
Επίπεδο εφαρμογής
Τα πρωτόκολλα του Internet
Εφαρμογή
Το επίπεδο εφαρμογής στο Internet καλύπτει τα επίπεδα
εφαρμογής και παρουσίασης του OSI.
Τα πιο συχνά πρωτόκολλα που χρησιμοποιούνται από τους
χρήστες είναι:
- Telnet
- χρήση από απόσταση
- FTP
- μεταφορά αρχείων
- SMTP
- μεταφορά email
- POP/IMAP
- ανάγνωση email
- HTTP/HTML
- πρόσβαση στο Web
Μια σειρά από πρωτόκολλα στο επίπεδο αυτό υποστηρίζουν τη λειτουργία και
τη διαχείριση του δικτύου:
- DNS
- Κατανεμημένος κατάλογος ονομάτων
- SNMP
- Διαχείριση από απόσταση
- BOOTP
- Αρχικό φόρτωμα κώδικα
- RARP
- Αντίστροφη μετατροπή διευθύνσεων
Μεταφορά
Στο επίπεδο της μεταφοράς χρησιμοποιούνται δύο πρωτόκολλα:
- TCP
- Transmission Control Protocol
- UDP
- User Datagram Protoco
Δίκτυο
Στο επίπεδο του δικτύου το Internet Protocol (IP) μαζί με το
Internet Control Message Protocol εξασφαλίζουν τη μεταφορά δεδομένων
από τον αποστολέα στον παραλήπτη.
Το παρακάτω σχήμα παριστάνει τη σχέση ανάμεσα στα διάφορα πρωτόκολλα
του internet:
+------+ +-----+ +-----+ +-----+
|Telnet| | FTP | | TFTP| ... | ... |
+------+ +-----+ +-----+ +-----+
| | | |
+-----+ +-----+ +-----+
| TCP | | UDP | ... | ... |
+-----+ +-----+ +-----+
| | |
+--------------------------+----+
| Internet Protocol & ICMP |
+--------------------------+----+
|
+---------------------------+
| Local Network Protocol |
+---------------------------+
Σημείωση: Τα σχήματα της ενότητας αυτής προέρχονται από τα έντυπα RFC που
αναφέρονται στη βιβλιογραφία.
IP
Πακέτα στο επίπεδο του δικτύου internet έχουν την παρακάτω μορφή:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Οι διευθύνσεις αποστολέα και παραλήπτη περιγράφονται με 32 bit
που παριστάνονται για ευκολία με 4 δεκαδικούς αριθμούς (π.χ. 192.168.135.4).
Ένας αρχικός αριθμός από bit (π.χ. 24) παριστάνει το δίκτυο στο οποίο
ανήκει ένας συγκεκρικένος υπολογιστής, ενώ τα υπόλοιπα ξεχωρίζουν τον
υπολογιστή από τους υπόλοιπους στο ίδιο δίκτυο.
TCP
Το πρωτόκολλο TCP (Transmission Control Protocol) επιτρέπει τη σύνδεση
δύο διεργασιών και τη μεταξύ τους επικοινωνία.
Το TCP θεωρεί ότι το δίκτυο στο οποίο βασίζεται παρέχει τη δυνατότητα μεταφοράς
πακέτων χωρίς εγγυήσεις σχετικά με τη σειρά που θα παραδοθούν,
την απώλεια πακέτων ή τη διπλή παράδοσή τους.
Πάνω από ένα τέτοιο δίκτυο το TCP παρέχει αξιόπιστη μεταφορά δεδομένων.
Οι βασικές υπηρεσίες που παρέχει το TCP είναι οι παρακάτω:
- Μεταφορά δεδομένων
- Αξιοπιστία
- Έλεγχο ροής
- Πολυπλεξία
- Συνδέσεις
- Προτεραιότητα
Η μορφή της επικεφαλίδας του TCP είναι η παρακάτω:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |U|A|P|R|S|F| |
| Offset| Reserved |R|C|S|S|Y|I| Window |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Τα bit URG...FIN έχουν τους παρακάτω ρόλους:
- URG
- Το πεδίο Urgent Pointer περιέχει δεδομένα
- ACK
- Το πεδίο Acknowledgment περιέχει δεδομένα
- PSH
- Λειτουργία Push
- RST
- Επαναρύθμιση της σύνδεσης
- SYN
- Συγχρονισμός των αριθμών της σειράς
- FIN
- Δεν υπάρχουν άλλα δεδομένα από τον αποστολέα
Αρχιτεκτονική του παγκόσμιου ιστού
- Ο παγκόσμιος ιστός (world wide web)
είναι υλοποιημένες σύμφωνα με το μοντέλο
πελάτη-υπηρέτη (client-server).
- Υπηρέτες ακούν για εντολές του πρωτοκόλλου HTTP
στη θύρα TCP 80 και απαντούν ανάλογα με το περιεχόμενο της εντολής.
- Οι απαντήσεις είναι συνήθως υπερκείμενο (hypertext)
δομημένο σύμφωνα με το πρότυπο HTML.
- Παραπομπές σε άλλες σελίδες ή περιεχόμενο γίνονται με την
τυποποιημένη χρήση των Uniform Resource Locators (URL).
- Τόσο ο πελάτης, όσο και ο υπηρέτης μπορούν να προσαρμόσουν
δυναμικά το περιεχόμενο μιας σελίδας.
Προσδιορισμός στοιχείων με URI
Ο προσδιορισμός στοιχείων στο Web
γίνεται με τη χρήση των Uniform Resource Locators.
Διακρίνονται σε απόλυτα (π.χ. http://www.amazon.com) και σχετικά
(π.χ. info.gif).
Αποτελούνται από
- το πρωτόκολλο,
- τον προσδιορισμό του μηχανήματος που περιέχει το περιεχόμενο,
- τον προσδιορισμό της διαδρομής και
- το αρχείο.
Η χρήση τους επιτρέπει τον προσδιορισμό άλλων σελίδων τοπικά, σε άλλα
μηχανήματα, καθώς και ερωτήσεων:
http://www.spinellis.gr/
index.html
http://sourceforge.net/softwaremap/trove_list.php?form_cat=187&discrim=165
Το πρωτόκολλο HTTP
Το πρωτόκολλο HTTP υποστηρίζει τις παρακάτω μεθόδους επικοινωνίας:
- GET
- HEAD
- POST
- PUT
- DELETE
- TRACE
Παράδειγμα:
GET /pub/WWW/TheProject.html HTTP/1.1
Host: www.w3.org
Ενεργό περιεχόμενο
Υπάρχουν διάφορες τεχνολογίες για να εμφανίσουμε
ενεργό περιεχόμενο (active content)
στο Web όπως:
- CGI
- Active Server Pages (Microsoft)
- Java Server Pages (Java)
- Servlets (Java)
- PHP (Apache/Unix)
Προγράμματα που χρησιμοποιούν τις τεχνολογίες αυτές δημιουργούν δυναμικά
τις σελίδες HTML ανάλογα με τα στοιχεία του χρήστη.
Αναζήτηση πληροφοριών στον παγκόσμιο ιστό
Οι σελίδες στον παγκόσμιο ιστό μετριούνται σε εκατομμύρια.
Για την αποδοτική χρήση τους χρησιμοποιούμε διάφορες προσεγγίσεις.
Βιβλιογραφία
- Α. Λυπιτάκης
Ο σύγχρονος κόσμος των υπολογιστών. σ. 145-172
1997.
- Ε. Παπαθανασίου
Στοιχεία υπολογιστικών συστημάτων. Κεφάλαιο 8.
Εκδόσεις Μπένου 1998.
- Andrew S. Tanenbaum
Δίκτυα Υπολογιστών. Τρίτη Έκδοση.
Παπασωτηρίου, 2000.
- T. Berners-Lee and D. Connolly.
RFC 1866: Hypertext Markup
Language — 2.0, November 1995.
Available online.
- T. Berners-Lee,
L. Masinter, and M. McCahill.
RFC 1738: Uniform Resource
Locators (URL), December 1994.
Available online.
- R. Braden.
RFC 1122: Requirements for
Internet hosts — communication layers, October 1989.
Available online.
- R. Braden.
RFC 1123: Requirements for
Internet hosts — application and support, October 1989.
Available online.
- J. Glenn Brookshear.
Computer Science, pages 141–166.
Addison-Wesley, sixth edition, 2000.
- J. Glenn Brookshear.
Computer Science, pages 135–170.
Addison-Wesley, 8th edition, 2004.
- Douglas E. Comer and
David L. Stevens.
Internetworking with TCP/IP, volume II: Design, Implementation and
Internals.
Prentice-Hall, 1991.
- Douglas E. Comer and
David L. Stevens.
Internetworking with TCP/IP, volume III: Client-Server Programming and
Applications (BSD Socket Version.
Prentice-Hall, 1993.
- Douglas E. Comer.
Internetworking with TCP/IP, volume I: Principles, Protocols and
Architecture.
Prentice-Hall, second edition, 1991.
- D. Eastlake and
C. Kaufman.
RFC 2065: Domain Name System
security extensions, January 1997.
Available online.
- R. Fielding,
J. Gettys, J. Mogul, H. Frystyk, T. Berners-Lee, et al.
RFC 2068: Hypertext transfer
protocol — HTTP/1.1, January 1997.
Available online.
- B. Fraser.
RFC 2196: Site security
handbook, September 1997.
Available online.
- Stefanos
Gritzalis and Diomidis Spinellis.
Addressing threats and security issues in World Wide Web
technology.
In Proceedings CMS '97 3rd IFIP TC6/TC11 International joint working
Conference on Communications and Multimedia Security, pages 33–46,
Athens, Greece, September 1997. IFIP, Chapman & Hall.
- Fred Halsall.
Data Communications, Computer Networks and OSI.
Addison-Wesley, second edition, 1988.
- E. Krol.
RFC 1118: Hitchhikers guide to
the Internet, September 1989.
Available online.
- J. Postel.
RFC 768: User Datagram
Protocol, August 1980.
Available online.
- J. Postel.
RFC 774: Internet protocol
handbook: Table of contents, October 1980.
Available online.
- J. Postel.
RFC 791: Internet
protocol, September 1981.
Available online.
- J. Postel.
RFC 792: Internet control
message protocol, September 1981.
Available online.
- J. Postel.
RFC 793: Transmission Control
Protocol, September 1981.
Available online.
- Marshall T. Rose.
The
Open Book: A Practical Perspective on OSI.
Prentice Hall, 1989.
- Aviel D. Rubin, Daniel
Geer, and Marcus J. Ranum.
Web
Security Sourcebook.
John Wiley & Sons, 1997.
- W. Richard Stevens.
UNIX
Network Programming.
Prentice Hall, 1990.
- Andrew S. Tanenbaum.
Computer Networks.
Prentice-Hall, second edition, 1988.
System Security Roadmap
Security Infrastructure
- Management commitment
- Resources to back security policies and procedures
- Staff dedicated to security tasks
- Security mission statement
- Security awareness training program
- Security policies and procedures
- Clearly defined
- Implemented
- Documented
- Supplied to everyone within your organization
- Strong flow of information to and from the appropriate groups
- Security incident response team
- External and internal security perimeter controls
- Host and network based security auditing tools
Security Infrastructure Investment
Getting the management commitment
- Risk analysis
- Demonstrate threat (e.g. network sniffing)
probes.
- Run scanning tools against your network (be careful)
- Impact on company image
- Impact of DOS attack
- Information on other attacks
Management-related Security Problems
- No dedicated staff
- Insufficient resources
- Lack of management support
- Staff with no authority to deploy appropriate security measures
- Failure to install vendor patches for known security problems.
- No monitoring and restricting network access to internal hosts.
- Not using sufficient authentication and authorization systems for remote access.
- Failure to implement or enforce procedures and standards when installing new devices on the network.
- Security through obscurity
Security Mission Statement
The security mission statement is determined by a number of factors:
- Security expectations of users and customers
- Customer loss by security breaches
- Customer loss by impaired functionality (due to security)
- Past down-time and monetary loss due to security incidents
- Insider threats
- User trust
- Local and remote access
- On-line sensitive or personal information
- Loss due to compromise or theft
- Different levels of security for different parts of your organization
- ERP systems
- Development
- Customer support
- Cost of negative publicity
- Existing security guidelines, regulations, or laws
- Conflict of business requirements and security
- Importance of confidentiality, integrity, availability
- Business needs
- Financial constraints
Security Support Personnel Duties
Auditing
Help an organization balance resources expended against the most likely areas of weaknesses.
Audit Type | Reason |
New System Installation Security Audits |
Ensure conformance to existing policies and a standard system configuration. |
Regular Automated System Audit Checks |
Reveal a "visitation" by an intruder or illicit activity by insiders. |
Random Security Audit Checks |
- Test for conformance to security policies and standards (by finding illicit activity) ,
- Check for the existence of a specific class of problems (e.g., the presence of a vulnerability reported by a vendor).
|
Nightly Audits of Critical Files |
- Assess the integrity of critical files (e.g., the password file)
- Integrity of databases (e.g., payroll or sales and marketing information).
|
User Account Activity Audits |
Detect dormant, invalid, misused accounts. |
Periodic audits and vulnerability assessments |
Determine overall state of your security infrastructure. |
Internet Attack Methods
- Exploitation of vulnerabilities in vendor programs.
- Exploitation of cgi-bin vulnerabilities.
- Email bombing, spamming and relaying through other sites.
- Exploitation of misconfigured anonymous FTP and web servers.
- Exploitation of named/BIND vulnerabilities.
- Exploitation of mail transfer agents and mail readers.
- Denial of Services (DoS) attacks using various methods.
- Sending hostile code and attack programs as mail attachments or browsed
page contents.
Incident Response
- Don't panic!
- Evaluate the situation
- Has attacker succeeded?
- Is the attack in progress?
- Follow your organizations policies and procedures,
- Use the appropriate chain of command when notifying other people or organizations.
- Contact incident response agencies appropriate for your site
- Make communication via an out-of-band method (e.g., a phone call) to ensure intruders do not intercept information.
-
Document your actions
- persons contacted
- phone calls made
- files modified
- system jobs stopped
- Snapshot the system
-
Make copies of files the intruders may have left or touched and store them off-line.
-
If you are unsure of what actions to take, seek additional help and guidance before removing files or halting system processes.
- Involve security department
- Physical access
- Insider
- Law enforcement officers
- Plan
Incident Response Centers
CERT(sm) Coordination Center
http://www.cert.org/
email cert@cert.org or call +1 412 268-7090
GRNET-CERT
Computer Emergency Responce Team
for the Greek National Research Network
E-Mail: grnet-cert@grnet.gr (mailto:grnet-cert@grnet.gr)
Network Operations Center, University of the Aegean, 30 Voulgaroktonou str, Athens 114 72, Greece
Telephone: +30 - 210 - 649 - 2056
Telefax: +30 - 210 - 649 - 2499
World Wide Web:
http://cert.grnet.gr (http://cert.grnet.gr)
Network Management Center
National Technical University of Athens
Iroon Polytechnioy 9
Zografou, GR 157 80
Athens
Greece
phone [+30-210] 772.1860
fax [+30-210] 772.1866
http://www.ntua.gr/grnet-cert/grnet-cert.html (http://www.ntua.gr/grnet-cert/grnet-cert.html)
Software Installation Practices
Modify default software installation to
- remove unnecessary software,
- turn off unneeded services,
- close extraneous ports.
Develop standard installation guidelines for all operating systems and applications used by the organization.
Authentication Practices
- Audit the accounts on your systems and create a master list
- Develop procedures for adding authorized accounts to the list, and for removing accounts when they are no longer in use.
- Validate the list on a regular basis to make sure no new accounts have been added and that unused accounts have been removed.
- Run a password cracking tool against the accounts looking for weak or no passwords. (Make sure you
have official written permission before employing a password cracking tool.)
- Train users
- Install password checking tools
- Use alternative authentication methods
Backup Practices
- Inventory critical systems
- Are there backup procedures for those systems?
- Is the backup interval acceptable?
- Are those systems being backed up according to the procedures?
- Has the backup media been verified to make sure the data is being backed up accurately?
- Is the backup media properly protected in-house and with off-site storage?
- Are there copies of the operating system and any restoration utilities stored off-site (including necessary
license keys)?
- Have restoration procedures been validated and tested?
Port Filtering Practices
- Configure router
- Install a firewall
- Use a port scanner (e.g. nmap, netstat)
- Turn-off services (/etc/inetd.conf, /etc/rc*, services)
Evaluating Vulnerabilities
For each vulnerability we need to now:
- Systems impacted
- How to determine if we are vulnerable
- How to protect against it
Common Unix Vulnerabilities
- U1 BIND Domain Name System
- U2 Web Server
- U3 Authentication
- U4 Version Control Systems
- U5 Mail Transport Service
- U6 Simple Network Management Protocol (SNMP)
- U7 Open Secure Sockets Layer (SSL)
- U8 Misconfiguration of Enterprise Services NIS/NFS
- U9 Databases
- U10 Kernel
(From the Twenty Most Critical Internet Security Vulnerabilities
2004
Copyright 2001-2004, The SANS Institute
http://www.sans.org/top20.htm (http://www.sans.org/top20.htm))
Common Windows Vulnerabilities
- W1 Web Servers and Services
- W2 Workstation Service
- W3 Windows Remote Access Services
- W4 Microsoft SQL Server (MSSQL)
- W5 Windows Authentication
- W6 Web Browsers
- W7 File-Sharing Applications
- W8 LSAS Exposures
- W9 Mail Client
- W10 Instant Messaging
(From the Twenty Most Critical Internet Security Vulnerabilities
2004
Copyright 2001-2004, The SANS Institute
http://www.sans.org/top20.htm (http://www.sans.org/top20.htm))
Home-user Tips
(Excerpted from http://www.nipc.gov/warnings/computertips.htm (http://www.nipc.gov/warnings/computertips.htm))
- Use strong passwords.
- Make regular backups of critical data.
- Use virus protection software.
- Use a firewall as a gatekeeper between your computer and the Internet.
- Do not keep computers online when not in use.
- Do not open e-mail attachments from strangers or suspicious attachments.
- Regularly download security patches from your software vendors.
System Administrator Best Practices
- Knowledge update
- System and console - physical security
- Keep your systems lean and mean
- Superuser password
- Delegating superuser tasks
- User passwords
- User terminals
- Restrict users (shell, remote access)
- User education
- Keep your systems up to date
- Vulnerability testing
- Monitor your systems periodically
- Configuration documentation
- Backup and disaster recovery
Low-cost Security Improvements
Doing it on a shoestring basis:
- Document and publish what you expect your system support staff to do with respect to security.
- Configure your border routers to deny all unnecessary incoming traffic.
- Identify and protect your most valuable assets first.
- Secure the perimeter and core systems.
- Simplify.
- Use freeware vulnerability assessment tools to conduct a self-assessment of your network and
computers. Publish the results internally to management staff.
- Install freeware host and network based auditing and traffic analysis tools on critical hosts.
- Monitor output and logs on a daily basis.
Free Tool Repositories
Security Web Sites
Security Books
-
Firewalls and Internet Security by Bill Cheswick and Steve Bellovin
-
Practical UNIX and Internet Security, 2nd Edition by Simson Garfinkel and Gene Spafford
- Ross Anderson.
Security Engineering: A Guide to Building Dependable Distributed Systems.
John Wiley & Sons, New York, 2001.
- Friedrich L. Bauer.
Decrypted Secrets: Methods and Maxims of Cryptology.
Springer Verlag, 1997.
- J. Glenn Brookshear.
Computer Science, pages 128–128, 164–166.
Addison-Wesley, 8th edition, 2004.
- Dorothy Elizabeth Robling
Denning.
Cryptography and Data Security.
Addison-Wesley, 1983.
- Peter J. Denning.
Computers Under Attack: Intruders, Worms, and Viruses.
Addison-Wesley, 1990.
- Tom Forester and
Perry Morrison.
Computer Ethics: Cautionary Tales and Ethical Dilemmas in Computing.
MIT Press, Cambridge, 1990.
- Dieter Gollmann.
Computer Security.
John Wiley & Sons, New York, 1999.
- Michael Howard and
David LeBlanc.
Writing Secure Code.
Microsoft Press, Redmond, WA, second edition, 2003.
- David Kahn.
The
Codebreakers: The Story of Secret Writing.
Scribner, New York, 1996.
- Gary McGraw and
Edward W. Felten.
Securing Java: Getting Down to Business with Mobile Code.
Wiley, New York, 1999.
- Peter G. Neumann.
Computer Related Risks.
Addison-Wesley, 1995.
- David L.
Oppenheimer, David A. Wagner, and Michele D. Crabb.
System Security: A Management Perspective.
Short Topics in System Administration. USENIX Association, Berkeley, CA,
1997.
- Eric Rescorla.
SSL
and TLS.
Addison-Wesley, 2001.
- Aviel D. Rubin, Daniel
Geer, and Marcus J. Ranum.
Web
Security Sourcebook.
John Wiley & Sons, New York, 1997.
- Bruce Schneier.
Applied Cryptography.
Wiley, New York, second edition, 1996.
- Bruce Schneier.
Secrets & Lies: Digital Security in a Networked World.
Wiley Computer Publishing, New York, 2000.
- John Viega and Gary
McGraw.
Building Secure Software: How to Avoid Security Problems the Right Way.
Addison-Wesley, 2001.
- Elizabeth Zwicky, Simon
Cooper, and D. Brent Chapman.
Building Internet Firewalls.
O'Reilly and Associates, Sebastopol, CA, second edition, 2000.
Articles
- Anish Bhinami.
Securing the commercial internet.
Communications of the ACM, 39(6):29–35, June 1996.
- Huseyin Cavusoglu,
Birendra Mishra, and Srinivasan Raghunathan.
Model for evaluating security investments.
Communications of the ACM, 47(7):87–92, July 2004.
- Commission of the European Communities.
Glossary of information systems security.
DGXIII, INFOSEC Programme/S2001, 1993.
- Commission of the European Communities.
Risk analysis methods database.
DGXIII, INFOSEC Programme/S2014, 1993.
- United Kingdom Central Computer
and Telecommunication Agency, United Kingdom.
CCTA Risk Analysis and Management Method: User Manual., version
3.0 edition, 1996.
HMSO.
- Eric Dubois and Suchun Wu.
A framework for dealing with and specifying security requirements in
information systems.
In Sokratis K. Katsikas and Dimitris Gritzalis, editors, Information
Systems Security: Facing the information society of the 21st century,
pages 88–99. Chapman & Hall, 1996.
- 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.
- J. H. P. Eloff,
L. Labuschagne, and K. P. Badenhorst.
A comparative framework for risk analysis methods.
Computers & Security, 12(6):597–603, October 1993.
- M. E. Kabay.
The NCSA Guide ot Enterprise Security: Protecting Information
Assets.
McGraw-Hill, 1996.
- Ravi Sandhu, Edward
Coyne, Hal Feinstein, and Charles Youman.
Role-based access control: A multi-dimensional view.
In 10th Annual Computer Security Applications Conference, pages
54–62. IEEE Computer Society Press, 1994.
- Richard G. Wilsher and
Helmut Kurth.
Security assurance in information systems.
In Sokratis K. Katsikas and Dimitris Gritzalis, editors, Information
Systems Security: Facing the information society of the 21st century,
pages 74–87. Chapman & Hall, 1996.
Cryptology
Cryptology
- Cryptography:
-
Generalized methods to hide (encrypt) and authenticate information
- Cryptanalysis:
-
Generalized methods to expose and substitute information
Algorithm Uses and Properties
-
Algorithms reversibly converting data (plaintext) into unintelligible form (ciphertext).
- E(P) = C, and then D(C) = P
- Only knowledge of "secret" allows recovery.
- Kerckhoffs's doctrine (19th century):
not based on the secrecy of the algorithm.
- E(P, EK) = C, and then D(C, DK) = P
- Building blocks for services/protocols that provide other assurances such as
- confidentiality
- integrity
- authentication
- non-repudiation
Algorithm Types
Algorithm applications
- Confidentiality
- Block Ciphers: we encrypt several plaintext symbols at once in a block
- Stream Ciphers: the encryption rule depends on a plaintext symbol's position in the stream of plaintext symbols.
- Authenticity and non repudiation:
- Hash Functions
- Digital Signatures
Maintaining Confidentiality
- One time pad (OTP)
- length of key equal to message length
- c = m XOR k
- c XOR k = m
- perfect secrecy
- severe key distribution problems
- Shared secret key
- c = E(m,k).
- D(c,k) = m
- requires key distribution
- vulnerable to exhaustive key search
- Private / public key
- Key generator creates Ek, Dk
- c = E(m, Ek)
- D(c, Dk) = m
- Computationally expensive
Transposition Ciphers
- Re-arrange order of letters
- Write-in in a geometrical figure (square, scytale)
- Take-off in a specified order
- Key is the figure and the order
Example
1 2 3 4
T R A N
S P O T
I T I O
N X X X
Take-off as 2, 4, 3, 1: RPTXNTOXAOIXTSIN
Try RAYXPAIXYNSXCTLS
Transposition Cryptanalysis
- Recognize by noting relative frequencies
(same as in natural language)
- English: ... f m u c d h l r s n a I o t e
- Greek ... π λ μ ν σ ε κ σ ρ
τ ι ο α
- Use digraph and trigraph frequency distributions
Substitution Ciphers
- Shifted alphabets
- C = P + K mod 26
- Caesar Cipher (K=3)
- Key is the shift
- Cipher alphabet
- Key is the substitution alphabet
- Cryptanalysis: Single letter frequency analysis
Polyalphabetic Ciphers
Rotor Machines
- Each rotor maps 26 characters on the front face to 26 on the back face
- Simple substitution cipher
- After each encoding rotation changes the mapping
- Introduces polyalphabetic element with period 26
- The output of one rotor feeds the next
- Introduces function composition
- The key is the rotor wiring, placement, and initial position
- Used by the Germans during the WW2
- Cryptanalyzed by the British using electromechanical computers
The Playfair Cipher
Example:
A -> B
B -> I
O -> P
R -> U
T -> A
X -> V
L -> O
A -> I
N -> L
D -> G
I -> Y
N -> L
G -> H
X -> W
SP Networks
- To increase block size we need (prohibitively) larger tables
- As an example a function 16 -> 16 bits would
require a table of 220 bits (16 * 216).
- A substitution permutation network requires a lot less
storage
- Data has to pass through the network multiple times to add
diffusion and confusion to the plaintext
- Result is called a product cipher
Example: 4 bit S-box design with a single permutation
The Data Encryption Standard (DES)
- 64 bit input and output
- 56 bit key (marginal length; vulnerable to exhaustive key search)
- Standard for encryption of unclassified data since 1977
- 16 internal rounds
DES structure
The Advanced Encryption Standard (AES)
- Result of a public process
- Evaluation criteria:
- Security
- No licensing
- Computational efficiency
- Memory requirements
- Flexibility (key size, block size, time/memory tradeoffs)
- Hardware and software suitability
- Simplicity of design
- Acts on 128-bit blocks
- Key 128, 192 or 256 bits (for 10, 12, 14 rounds)
Hash Function Properties
Hash functions compress a n (abritrarily) large number of bits
into a small number of bits (e.g. 512).
Properties
- One way; can not be reversed
- Output does not reveal information on input
- Hard to find collisions (different messages with same hash)
Common Hash Functions
- Block cipher in CBC mode
- SHA1 (secure hash algorithm) 160-bit output
- MD5 (message digest) 128-bit output
- SHA256 SHA512 (secure hash algorithm) 256/512-bit output
Hash Function Applications
- Construct a message authentication code (MAC)
- Digital signature
- Make commitments, but reveal message later
- Timestamping
- Key updating: key is hashed at specific intervals resulting in new key
Asymmetric Ciphers
- Key is split into private and public part
- Public key can not be used to derive private key
- Encryption is performed using the public key
- Decryption is performed using the private key
- The two operations can be combined to establish secrecy and sender authenticity
- Can be used to implement a digital signature
- Underlying mathematical operations
- Factorization (factor a product of two primes)
- Discrete logarithm (calculate the integer nth root of a number)
- Elliptic curves
- Computationally expensive
- Typically used to establish common secret key
The Diffie-Hellman Protocol
- Can be used to establish common secret key over insecure channel
- Requires commutative encryption function E(E(M, Ka), Kb) = E(E(M, Kb), Ka)
- Procedure
- Alice chooses a key M
- Alice sends Bob E(M, Ka)
- Bob sends Alice E(E(M, Ka), Kb)
- ... which is E(E(M, Kb), Ka)
- Alice decrypts it into E(M, Kb) and sends it to Bob
- Bob decrypts it to M
- M can then be used as a shared secret key
Case Study: Public Key Cryptography
The following example is based on the
OpenSSL (http://www.openssl.org/) open-source cryptography
library and command-line tool.
#!/bin/sh
################
# Key generation
# Create Alice's key pair
openssl genrsa >alice.private
# Obtain Alice's public key
openssl rsa -pubout <alice.private >alice.public
# Create Bob's key pair
openssl genrsa >bob.private
# Obtain Bob's public key
openssl rsa -pubout <bob.private >bob.public
##########################################
# Alice sends a short confidential message
# Secret message Alice wants to send to Bob
echo "Alice loves you" >message.plain
# Alice encrypts the message using Bob's public key
openssl rsautl -encrypt -in message.plain -out message.encrypted -pubin -inkey bob.public
# Bob decrypts Alice's message using his private key
openssl rsautl -decrypt -in message.encrypted -out message.decrypted -inkey bob.private
##################################
# Bob sends a short signed message
# Message Bob wants to sign
echo "Will you marry me?" >message.plain
# Bob signs the message using his private key
openssl rsautl -sign -in message.plain -out message.signed -inkey bob.private
# Alice verifies Bob's message using his public key
openssl rsautl -verify -in message.signed -out message.verified -pubin -inkey bob.public
#####################################################
# Alice sends a large signed and confidential message
# Secret message Alice wants to send to Bob
cat >message.plain <<EOF
Marital AGREEMENT
THIS AGREEMENT, made this thirteen day of June, 2004 is between Bob
and Alice
1. PURPOSE. The parties expect to be married to death do them part,
and hear by enter into this agrement vouluntarily.
2. EFFECT OF AGREEMENT. The parties agree that if one or the other
commits infidelity during the duration of the marriage, that the person
guilty of said act shall in effect and wholey forsake all material
property, assets and rights to act as a parent of any children.
3. DEFINITON OF INFEDELITY. Infedelity is defined as follows: Any
socializing with the intent to establish a realtionship, and/or
physical contact with other person.
4. JOINT PROPERTY, ETC. This Agreement does not restrict, prohibit
or condition any conveyance or transfer by the parties, or either of
them alone, of the Separate Property of either party into tenancy in
common, joint tenancy, tenency by the entireties or any other form of
concurrent and/or undivided estate or ownership between the parties,
or the acquisition of any property in any such form of ownership by the
parties. The incidents and attributes of ownership and other rights
of the parties with respect to any property so conveyed, transferred
or acquired shall be determined under State law and shall not be
governed by or otherwise determined with reference to this Agreement.
5. SEPARATE PROPERTY. The parties agree that there is no seperate
property.
6. WAIVER OF RIGHTS. Except as otherwise provided in this Agreement,
each party hereby waives, releases and relinquishes any and all right,
title or interest whatsoever, whether arising by common law or present
or future statute of any jurisdiction or otherwise.
7. DISSOLUTION/SEPARATION/ANNULMENT. Except as otherwise provided in
this Agreement, each party specifically agrees that neither shall make
any claim for or be entitled to receive any money or property from
the other as alimony, spousal support, or maintenance in the event
of separation, annulment, dissolution or any other domestic relations
proceeding of any kind or nature, and each of the parties waives and
relinquishes any claim for alimony, spousal support or maintenance,
including, but not limited to, any claims for services rendered,
work performed, and labor expended by either of the parties during
any period of cohabitation prior to the marriage and during the entire
length of the marriage. The waiver of spousal support shall apply to
claims both pre and post-judgment.
8. RIGHT TO CONTEST. Nothing contained herein shall limit the right
of either party to contest any domestic relations suit between the
parties or to file a countersuit against the other party; However,
in any hearing on such suit, this Agreement shall be considered
a full and complete settlement of all property rights between the
parties. In such case, neither party shall maintain any claim or demand
whatsoever against the other for property, suit money, attorney fees
and costs which is either inconsistent with or not provided for in
this Agreement.
9. INTEGRATION. This Agreement sets forth the entire agreement between
the parties with regard to the subject matter hereof. All prior
agreements, covenants, representations, and warranties, expressed or
implied, oral or written, with respect to the subject matter hereof,
are contained herein. All prior or contemporaneous conversations,
negotiations, possible and alleged agreements, representations,
covenants, and warranties, with respect to the subject matter hereof,
are waived, merged, and superseded hereby. This is an integrated
agreement.
10. BINDING ON SUCCESSORS. Each and every provision hereof shall
inure to the benefit of and shall be binding upon the heirs, assigns,
personal representatives, and all successors in the interest of
the parties.
11. ACKNOWLEDGEMENTS. Each party acknowledges that he or she has
had an adequate opportunity to read and study this Agreement, to
consider it, to consult with attorneys individually selected by each
party, without any form of coercion, duress or pressure. Each party
acknowledges that he or she has examined the Agreement before signing
it, and has been advised by independent legal counsel concerning the
rights, liabilities and implications of this document.
12. STATE LAW. It is intended that this Agreement be valid and
enforceable within the provisions of the State Law, and that Case
Law that governs its interpretation. State law is considered to be
that of California, USA.
EOF
# Alice generates a short random key to be used for encrypting the message
openssl rand 16 -out key.plain
# Alice encrypts the message with the short random key
openssl des3 -e -kfile key.plain -in message.plain -out message.encrypted
# Alice creates a message digest of the message to sign
openssl dgst -binary message.plain >message.digest
# Alice signs the digest using her private key
openssl rsautl -sign -in message.digest -out digest.signed -inkey alice.private
# Alice encrypts the random key using Bob's public key
openssl rsautl -encrypt -in key.plain -out key.encrypted -pubin -inkey bob.public
# Alice sends Bob:
# - the encrypted message
# - the encrypted key
# - the signed message digest
# Bob decrypts Alice's encrypted key using his private key
openssl rsautl -decrypt -in key.encrypted -out key.decrypted -inkey bob.private
# Bob decrypts the message using the decrypted key
openssl des3 -d -kfile key.decrypted -in message.encrypted -out message.decrypted
# Bob verifies the digest Alice has signed using her public key
openssl rsautl -verify -in digest.signed -out message.digest1 -pubin -inkey alice.public
# Bob calculates again a message digest of the message
openssl dgst -binary message.plain >message.digest2
# Bob compares the two message digests to verify Alice signed the agreement
# he has examined
diff message.digest1 message.digest2
A Simple Public Key System
- Create a graph with a known perfect code
- We draw a set of dominating edges
- Add more edges around each edge
- Add more verices between the non-dominating edges
- The graph is our public key
- The exact dominating set the private key
- Determining whether the graph as a dominating set is NP-complete
- Simple example: fair coin tossing over the phone
- Alice sends map to Bob
- Bob guesses whether number of dominating edges is odd or even
- Alice reveals the solution
- Public key encryption and decryption
- To transmit a secret number
- Randomly distribute the number on all edges
- For each edge send the sum of all its immediate neighbours and itsself
- To decrypt
- Sum the values of the dominating set
Bibliography
- Ross Anderson.
Security Engineering: A Guide to Building Dependable Distributed Systems,
pages 73–113.
John Wiley & Sons, New York, 2001.
- Friedrich L. Bauer.
Decrypted Secrets: Methods and Maxims of Cryptology.
Springer Verlag, 1997.
- Tim Bell, Harold
Thimberly, Mike Fellows, Ian Witten, and Neil Koblitz.
Explaining cryptosystems to the general public.
In Louise Yngström and Simone Fisher-Hübner, editors, WISE 1:
First World Conference on Information Security Education, pages
221–233. IFIP TC11 WG 11.8, June 1999.
- J. Glenn Brookshear.
Computer Science, pages 485–488.
Addison-Wesley, 8th edition, 2004.
- Dorothy Elizabeth Robling
Denning.
Cryptography and Data Security.
Addison-Wesley, 1983.
- Dieter Gollmann.
Computer Security.
John Wiley & Sons, New York, 1999.
- David Kahn.
The
Codebreakers: The Story of Secret Writing.
Scribner, New York, 1996.
- Bruce Schneier.
Applied Cryptography.
Wiley, New York, second edition, 1996.
Software Engineering
Η σημασία του λογισμικού
Το λογισμικό
- ενεργοποιεί τις ενσωματωμένες συσκευές,
- αποτελεί τη βάση στα πληροφοριακά συστήματα,
- χρησιμοποιείται ως μέσο αποθήκευσης γνώσης.
Μέσα αποθήκευσης γνώσης:
- DNA
- Εγκέφαλος
- Υλικό
- Βιβλία
- Λογισμικό
Προβλήματα στην υλοποίηση συστημάτων που βασίζονται σε λογισμικό
Η διεργασία ανάπτυξης του λογισμικού καλείται σήμερα να επιλύσει
τα παρακάτω συχνά εμφανιζόμενα προβλήματα:
Επίσης, πρέπει να απαντηθούν οι παρακάτω προκλήσεις:
Τεχνολογία λογισμικού
-
Η εφαρμογή μιας συστηματικής πειθαρχημένης και ποσοτικοποιούμενης προσέγγισης στην ανάπτυξη, λειτουργία και συντήρηση του λογισμικού. με άλλα λόγια η εφαρμογή των τεχνικών του μηχανικού στο λογισμικό.
-
Η μελέτη προσεγγίσεων στο παραπάνω πρόβλημα.
Η τεχνολογία λογισμικού περιλαμβάνει τις παρακάτω περιοχές:
- Απαιτήσεις
- Σχεδιασμός
- Υλοποίηση
- Έλεγχος
- Συντήρηση
- Διαχείριση σχηματισμών
- Διαχείριση του οργανισμού, της διεργασίας (process)
και του έργου
- Διεργασίες τεχνολογίας λογισμικού
- Εργαλεία και μέθοδοι
- Ποιότητα
Κατηγορίες λογισμικού
Χαρακτηριστικά του λογισμικού
- Το λογισμικό αναπτύσσεται, δεν παράγεται βιομηχανικά
- Το λογισμικό δε φθείρεται
- Το μεγαλύτερο ποσοστό του λογισμικού παράγεται κατά παραγγελία
Ιδιότητες του λογισμικού
Ο κύκλος ζωής του λογισμικού
Σχεδιασμός με UML
Η ενοποιημένη γλώσσα σχεδιασμού (unified modeling language)
(UML) είναι μια γραφική γλώσσα για την οπτική παράσταση,
τη διαμόρφωση προδιαγραφών και την τεκμηρίωση συστημάτων που βασίζονται
σε λογισμικό.
Η UML στοχεύει στο σχεδιασμό αντικειμενοστρεφών συστημάτων.
Το σχέδιο είναι μια απλοποιημένη παράσταση της πραγματικότητας.
Σχεδιάζουμε για να μπορέσουμε να καταλάβουμε το σύστημα που αναπτύσσουμε.
Έτσι δημιουργώντας ένα σχέδια επιτυγχάνουμε τέσσερεις στόχους:
- παριστάνουμε οπτικά το σύστημα που έχουμε ή θέλουμε να κατασκευάσουμε,
- προσδιορίζουμε τη δομή και τη συμπεριφορά του συστήματος,
- δημιουργούμε ένα πρότυπο για να βασίσουμε την κατασκευή του συστήματος,
- τεκμηριώνουμε τις αποφάσεις που λάβαμε.
Σε όλους τους τεχνολογικούς τομείς ο σχεδιασμός βασίζεται σε τέσσερεις
βασικές αρχές:
- η επιλογή του είδους του σχεδίου έχει επίπτωση στον τρόπο και την
μορφή επίλυσης του προβλήματος,
- όλα τα σχέδια εκφράζονται σε διαφορετικές βαθμίδες ακρίβειας,
- τα καλύτερα σχέδια σχετίζονται με την πραγματικότητα,
- ένα είδος σχεδίων δεν είναι ποτέ αρκετό.
Η UML περιλαμβάνει τρία βασικά στοιχεία:
- Οντότητες
- Σχέσεις
- Διαγράμματα
Η UML είναι μια πλήρης και πλούσια γλώσσα με εξαιρετικά ευρύ πεδίο εφαρμογής.
Στο μάθημα αυτό θα εξετάσουμε εξαιρετικά συνοπτικά τον τρόπο παράστασης
ορισμένων αντικειμενοστρεφών δομών σε UML.
Διαγράμματα της UML
Η UML ορίζει τα παρακάτω διαγράμματα:
Προβλήματα στη διοίκηση έργων λογισμικού
- Το προϊόν δεν έχει φυσική έκφανση
- Δεν υπάρχουν κοινώς αποδεκτές και κοινές διεργασίες υλοποίησης
- Τα μεγάλα έργα κατασκευάζονται κατά παραγγελία για συγκεκριμένες απαιτήσεις
- Υπάρχει η ψευδαίσθηση πως το λογισμικό είναι εύπλαστο
- Μικρές αλλαγές στο λογισμικό επηρεάζουν συχνά δυσανάλογα πολλά τμήματα
- Δε χρησιμοποιούνται συχνά έτοιμα εξαρτήματα
Οι σημαντικότεροι κίνδυνοι
- Το προϊόν δεν έχει φυσική έκφανση
- Δεν υπάρχουν κοινώς αποδεκτές και κοινές διεργασίες υλοποίησης
- Τα μεγάλα έργα κατασκευάζονται κατά παραγγελία για συγκεκριμένες απαιτήσεις
- Υπάρχει η ψευδαίσθηση πως το λογισμικό είναι εύπλαστο
- Μικρές αλλαγές στο λογισμικό επηρεάζουν συχνά δυσανάλογα πολλά τμήματα
- Δε χρησιμοποιούνται συχνά έτοιμα εξαρτήματα
Στοιχεία της ευέλικτης ανάπτυξης
Η ευέλικτη ανάπτυξη λογισμικού (agile software development)
προσδίδει αξία:
- στους ανθρώπους και τις σχέσεις τους και όχι σε διεργασίες και εργαλεία
- σε λογισμικό που δουλεύει και όχι σε εκτενή τεκμηρίωση
- σε συνεργασία με τον πελάτη και όχι σε συμβατικές διαπραγματεύσεις
- σε άμεση απόκριση σε αλλαγές και όχι στην τήρηση ενός προδιαγεγραμμένου
σχεδίου
Ασυμβίβαστος προγραμματισμός
Ο ασυμβίβαστος προγραμματισμός (ΑΠ) (eXtreme programing (XP))
εδραιώθηκε ως μεθοδολογία ανάπτυξης για μικρές ομάδες ανάπτυξης έργων
στα οποία αλλάζουν συχνά οι προδιαγραφές.
Βασικά του χαρακτηριστικά είναι:
- Ο προγραμματισμός σε ζευγάρια
- Η συγγραφή ελέγχων μονάδος πριν από τον κώδικα.
- Η συνεχής ολοκλήρωση και ο συνεχής έλεγχος του κώδικα (πολλές
φορές μέσα στην ημέρα).
- Η βαθμιαία εξέλιξη του σχεδίου του έργου.
- Η γρήγορη παραγωγική χρήση του συστήματος για την
εκμαίευση των απαιτήσεων με το μεγαλύτερο όφελος για τον πελάτη.
Η μεθοδολογία δεν είναι κατάλληλη για:
- Επιχειρηματικά περιβάλλοντα όπου η διοίκηση θέλει να έχει τον
πλήρη έλεγχο του έργου.
- Έργα με αυστηρές προδιαγραφές.
- Έργα που βασίζονται σε σύμβαση με βάση τις προδιαγραφές.
- Συστήματα των οποίων τα αποτελέσματα αργούν να εμφανιστούν.
- Περιβάλλοντα στα οποία οι έλεγχοι είναι ακριβοί (OIS).
Βιβλιογραφία
- Kent Beck.
Extreme Programming Explained: Embrace Change.
Addison Wesley Longman, 2000.
- Grady Booch, James
Rumbaugh, and Ivar Jacobson.
The
Unified Modeling Language User Guide.
Addison-Wesley, 1999.
- F. P. Brooks.
The
Mythical Man Month.
Addison-Wesley, 1975.
- J. Glenn Brookshear.
Computer Science, pages 286–318.
Addison-Wesley, sixth edition, 2000.
- J. Glenn Brookshear.
Computer Science, pages 286–318.
Addison-Wesley, 8th edition, 2004.
- William J. Brown,
Raphael C. Malveau, Hays W. McCormick III, and Thomas J. Mowbray.
AntiPatterns Refactoring Software, Architectures, and Projects in
Crisis.
Wiley, 1998.
- Alan Cooper.
The Inmates are Running the Asylum.
Sams, Indianapolis, IN, USA, 1999.
- Alan M. Davis.
201
Principles of Software Development.
McGraw-Hill, 1995.
- Tom DeMarco and
Timothy R. Lister.
Peopleware: Productive Projects and Teams.
Dorset House Publishing, 1987.
- Jr. Frederick
P. Brooks.
No silver bullet: Essence and accidents of software engineering (http://www.di.ufpe.br/ java/graduacao/referencias/BrooksNoSilverBullet.html).
IEEE Computer, pages 10–19, April 1987.
- Erich Gamma, Richard
Helm, Ralph Johnson, and John Vlissides.
Design
Patterns: Elements of Reusable Object-Oriented Software.
Addison-Wesley, 1995.
- Robert L. Glass.
Software Runaways: Lessons Learned from Massive Software Project
Failures.
Prentice-Hall, 1998.
- Robert L. Glass.
Frequently forgotten fundamental facts about software engineering.
IEEE Software, 18(3):110–112, May/June 2001.
- Watts S. Humphrey.
Managing the Software Process.
Addison-Wesley, 1989.
- Andrew Hunt and David
Thomas.
The
Pragmatic Programmer: From Journeyman to Master.
Addison Wesley Longman, 2000.
- Cem Kaner, Jack Falk, and
Hung Quoc Nguyen.
Testing Computer Software.
Wiley, 1999.
- Brian W. Kernighan
and Rob Pike.
The
Practice of Programming.
Addison-Wesley, 1999.
- Steve C McConnell.
Code
Complete: A Practical Handbook of Software Construction.
Microsoft Press, Redmond, WA, second edition, 2004.
- P. J. Plauger.
Programming on Purpose: Essays on Software Design.
Prentice-Hall, 1993.
- P. J. Plauger.
Programming on Purpose II: Essays on Software People.
Prentice-Hall, 1993.
- P. J. Plauger.
Programming on Purpose III: Essays on Software Technology.
Prentice-Hall, 1994.
- Roger S. Pressman.
Software Engineering: A Practitioner's Approach.
McGraw-Hill, London, fifth edition, 2000.
European Adaptation. Adapted by Darrel Ince.
- Charles H. Schmauch.
ISO
9000 for Software Developers.
ASQC Quality Press, Milwaukee, Wisconsin, USA, 1995.
- Ian Sommerville.
Software Engineering.
Addison-Wesley, sixth edition, 2001.
- Diomidis
Spinellis and Clemens Szyperski.
How is open source affecting software development? ( http://www.spinellis.gr/pubs/jrnl/2004-IEEESW-OSS/html/ge-intro.html).
IEEE Software, 21(1):28–33, January/February 2004.
(doi:10.1109/MS.2004.1259204 (http://dx.doi.org/10.1109/MS.2004.1259204))
- Diomidis Spinellis.
Software reliability: Modern challenges ( http://www.spinellis.gr/pubs/conf/1999-ESREL-SoftRel/html/chal.html).
In G. I. Schuëller and P. Kafka, editors, Proceedings ESREL '99 —
The Tenth European Conference on Safety and Reliability, pages
589–592, Munich-Garching, Germany, September 1999. ESRA, VDI, TUM, A. A.
Balkema.
- Diomidis Spinellis.
Taking common sense to the extreme ( http://www.spinellis.gr/pubs/Breview/2000-IEEE-XP/html/review.html).
IEEE Software, 17(4):113–114, July/August 2000.
Book review: eXtreme Programming Explained: Embrace Change.
- Diomidis Spinellis.
The tools at hand ( http://www.spinellis.gr/pubs/jrnl/2005-IEEESW-TotT/html/v22n1.html).
IEEE Software, 22(1):10–13, January/February 2005.
- Edward Yourdon.
Death
March.
Prentice-Hall, 1997.
The Open Source Landscape
History
- Initially software was tied to the hardware and free
- Organized collections: SHARE, ACM collected algorithms on tape
- 1970s Academic distribution of Unix in source code form
- 1983: Richard Stallman and the GNU Project
- Late 1980s: X Window System
- 1991: Linus Torvalds and the Linux kernel
- 1998: Netscape releases Mozilla; the Open-Source Movement
Basic Concepts
- Public Domain Software
- Open-Source Software
- Shared-Source Software
- Free Software
- Shareware
- Adware
- Spyware
The Open Source Definition
Introduction
Open source doesn't just mean access to the source code. The
distribution terms of open-source software must comply with the
following criteria:
1. Free Redistribution
The license shall not restrict any party from selling or giving away the
software as a component of an aggregate software distribution containing
programs from several different sources. The license shall not require a
royalty or other fee for such sale.
2. Source Code
The program must include source code, and must allow distribution in
source code as well as compiled form. Where some form of a product is
not distributed with source code, there must be a well-publicized
means of obtaining the source code for no more than a reasonable
reproduction cost preferably, downloading via the Internet without
charge. The source code must be the preferred form in which a
programmer would modify the program. Deliberately obfuscated source
code is not allowed. Intermediate forms such as the output of a
preprocessor or translator are not allowed.
3. Derived Works
The license must allow modifications and derived works, and must allow
them to be distributed under the same terms as the license of the original
software.
4. Integrity of The Author's Source Code
The license may restrict source-code from being distributed in modified
form only if the license allows the distribution of "patch files" with
the source code for the purpose of modifying the program at build time.
The license must explicitly permit distribution of software built from
modified source code. The license may require derived works to carry a
different name or version number from the original software.
5. No Discrimination Against Persons or Groups
The license must not discriminate against any person or group of persons.
6. No Discrimination Against Fields of Endeavor
The license must not restrict anyone from making use of the program in
a specific field of endeavor. For example, it may not restrict the program
from being used in a business, or from being used for genetic research.
7. Distribution of License
The rights attached to the program must apply to all to whom the program
is redistributed without the need for execution of an additional license
by those parties.
8. License Must Not Be Specific to a Product
The rights attached to the program must not depend on the program's being
part of a particular software distribution. If the program is extracted
from that distribution and used or distributed within the terms of the
program's license, all parties to whom the program is redistributed should
have the same rights as those that are granted in conjunction with the
original software distribution.
9. License Must Not Restrict Other Software
The license must not place restrictions on other software that is
distributed along with the licensed software. For example, the
license must not insist that all other programs distributed on the
same medium must be open-source software.
*10. License Must Be Technology-Neutral
No provision of the license may be predicated on any individual technology or style of interface.
Origins: Bruce Perens wrote the first draft of this document as
"The Debian Free Software Guidelines", and refined it using the comments of the
Debian developers in a month-long e-mail conference in June, 1997. He removed
the Debian-specific references from the document to create the "Open Source
Definition."
Copyright © 2004 by the Open Source Initiative (http://www.opensource.org)
Software Categories (Sourceforge)
Category | Number |
Internet | 15604 |
System | 12793 |
Software Development | 10607 |
Communications | 9814 |
Games/Entertainment | 9097 |
Multimedia | 7765 |
Scientific/Engineering | 5769 |
Database | 3976 |
Office/Business | 3111 |
Desktop Environment | 2137 |
Education | 2002 |
Text Editors | 1735 |
Security | 1678 |
Other/Nonlisted Topic | 1583 |
Terminals | 393 |
Printing | 281 |
Sociology | 219 |
Religion | 172 |
Development Status
Status | Number |
1 - Planning | 14384 |
4 - Beta | 12036 |
2 - Pre-Alpha | 10308 |
3 - Alpha | 9819 |
5 - Production/Stable | 9664 |
6 - Mature | 904 |
7 - Inactive | 465 |
Software Categories (FreeBSD Ports)
Top-40 package categories (by population) in the FreeBSD Ports
distribution.
Category | Number of Packages |
Development Tools | 929 |
Networking | 699 |
www | 494 |
Games | 490 |
Text Processing | 445 |
japanese | 438 |
Graphics | 417 |
Audio | 352 |
Security | 347 |
Misc | 346 |
Mail | 322 |
System Utilities | 313 |
Languages | 240 |
Editors | 197 |
Databases | 196 |
X11 toolkits | 188 |
Printing | 188 |
x11 | 183 |
Math | 180 |
Chinese | 107 |
Multimedia | 103 |
X11 wm | 101 |
Emulators | 92 |
Distribution Files | 83 |
News | 81 |
Java | 75 |
ftp | 75 |
Archivers | 72 |
Korean | 71 |
Desk Utilities | 67 |
IRC | 66 |
Biology | 62 |
Astronomy | 62 |
Converters | 59 |
Communications | 59 |
X11 Fonts | 47 |
CAD | 44 |
X11 Servers | 42 |
X11 Clocks | 39 |
Palm | 34 |
cd /usr/ports
find * -prune -type d |
while read i
do
echo "$i `ls $i | wc -l`"
done |
sort -rn +1 |
head -40
Operating Environments
Environment | Number |
Web Environment | 15024 |
Win32 (MS Windows) | 12928 |
Console (Text Based) | 12676 |
X11 Applications | 12571 |
Other Environment | 5659 |
No Input/Output (Daemon) | 4058 |
Cocoa (MacOS X) | 1410 |
Handhelds/PDA's | 743 |
Operating System
OS | Number |
POSIX | 30953 |
OS Independent | 19363 |
Microsoft | 19289 |
MacOS | 3275 |
Other OS | 1032 |
PDA Systems | 723 |
BeOS | 426 |
OS/2 | 132 |
Language
Language | Number |
C++ | 12983 |
C | 12971 |
Java | 11470 |
PHP | 8617 |
Perl | 5389 |
Python | 3059 |
Visual Basic | 1771 |
JavaScript | 1641 |
Delphi/Kylix | 1407 |
Unix Shell | 1402 |
C# | 1316 |
PL/SQL | 942 |
Tcl | 788 |
Objective C | 485 |
ASP | 472 |
Lisp | 289 |
Ruby | 287 |
Pascal | 284 |
Object Pascal | 210 |
Assembly | 203 |
Scheme | 173 |
ML | 137 |
Cold Fusion | 119 |
Fortran | 113 |
Zope | 111 |
Prolog | 84 |
Ada | 79 |
Eiffel | 67 |
Forth | 51 |
Smalltalk | 50 |
XBasic | 28 |
Rexx | 28 |
Erlang | 26 |
PROGRESS | 20 |
Pike | 16 |
Other | 17 |
Logo | 15 |
REBOL | 13 |
APL | 12 |
Euphoria | 10 |
Modula | 5 |
System Software
Operating Systems
- The Linux kernel
- Linux distributions
- FreeBSD
- NetBSD
- OpenBSD
- DragonFly
- Mach
- Plan 9
- Hurd
- Microsoft Windows (if you are a government)
Databases
- mySQL
- PostgreSQL
- SQLite
- HSQLDB
Emulators
- Bochs X86 emulator
- Wine (Wine Is Not an Emulator)
- Samba
- Cygwin
Language Processors
- The GNU compiler collection
- Perl
- Python
- Ruby
- PHP
- Tcl/Tk
- Mono (.NET re-implementation)
- Shells
Graphics
Applications and Libraries
- Ghostscript
- PNG
- GD
- FreeType
- Gnuplot
- GraphViz
- GMT
- Gimp
- Xfig
- Mplayer
Environments
- X Window System
- KDE
- Gnome
Development Tools
- GNU binary and text tools
- GNU Emacs
- vim
- jEdit
- Eclipse
- KDevelop
- Dev-C++
- JUnit
- Boost C++ Libraries
- dOxygen
- autoconf
- bison and flex
- make / ant
- Bugzilla
- CVS
- Subversion
Text Processing
- TeX / LaTeX / MiKTeX
- Docbook
- groff
- aspell
- OpenOffice / KOffice/Abiword
- Expat XML Parser
Web and Application Servers
- Apache Web Server
- Jakarta Tomcat
- JetSpeed
- JBoss
Desktop Applications
- Mozilla
- Putty
- Xine
- Open Office
- Gnumeric
- Evolution (calendar, meeting, ...)
- FireFox
- Thunderbird
- Gaim IM
Open Source Repositories
Influence on Product Development
Advantages
- Many existing elements available for reuse (what)
- Flexible reuse granulariy (how)
- Easier porting (where)
- Improve, fix, support
Problems
- Divergent evolution
- Code bloat
- Inadvertently deep dependencies
- Dependency management
- Licensing
- Quality control
Development Process Advantages
- Adoption of sophisticated development platforms and tools
- operating systems: GNU/Linux and FreeBSD,
- databases: PostgreSQL and MySQL,
- application servers: JBoss,
- optimizing compilers: gcc,
- integrated development environments: Eclipse KDevelop,
- build managers: make and ant,
- version control management systems: CVS.
- Adoption of software engineering processes
- version control
- peer reviews,
- version control
- peer reviews
- issue tracking
- release engineering
- regression testing.
- Learn from the source
Development Process Problems
- Contribute to maintenance
- Forks: effort duplication and waste
- Integration of multiple developlemnt processes
- Less attention to
- strategic planning
- detailed requirement elicitation
- testing
- organized support.
License Distribution (Sourceforge)
License | Number |
GNU General Public License (GPL) | 35807 |
GNU Library or Lesser General Public License (LGPL) | 5447 |
BSD License | 3587 |
Artistic License | 1119 |
Apache Software License | 905 |
MIT License | 881 |
Mozilla Public License 1.1 (MPL 1.1) | 539 |
Common Public License | 265 |
Mozilla Public License 1.0 (MPL) | 260 |
zlib/libpng License | 245 |
Qt Public License (QPL) | 205 |
Open Software License | 184 |
Python License (CNRI Python License) | 159 |
Academic Free License (AFL) | 131 |
Python Software Foundation License | 80 |
IBM Public License | 70 |
PHP License | 49 |
Apple Public Source License | 44 |
Sun Industry Standards Source License (SISSL) | 43 |
Sun Public License | 38 |
Jabber Open Source License | 36 |
wxWindows Library Licence | 33 |
University of Illinois/NCSA Open Source License | 29 |
Zope Public License | 25 |
Nethack General Public License | 24 |
W3C License | 21 |
Intel Open Source License | 19 |
Open Group Test Suite License | 14 |
Sleepycat License | 13 |
Apache License V2.0 | 12 |
Eiffel Forum License | 10 |
Eiffel Forum License V2.0 | 10 |
Attribution Assurance License | 9 |
Reciprocal Public License | 7 |
Ricoh Source Code Public License | 6 |
Historical Permission Notice and Disclaimer | 6 |
Legal Exposure
- Proprietary code coexistsence with GPL
- Distribution of copyrights
- Assuming liability for all the code use
- Dynamic loading of code has is own licensing issues
- The BSD-like licenses allow for proprietary forks
- Packaging companies often offer value
Web sites
Further Reading
- J. Feller and
B. Fitzgerald.
Understanding Open Source Software Development.
Addison-Wesley, Reading, MA, 2001.
- E. Von Hippel.
Innovation by user communities: Learning from open source software.
Sloan Management Review, 42(4):82–86, Summer 2001.
- Brian W. Kernighan
and P. J. Plauger.
Software Tools.
Addison-Wesley, Reading, MA, 1976.
- John Lions.
Lions'
Commentary on Unix 6th Edition with Source Code.
Annabooks, Poway, CA, 1996.
- David G.
Messerschmitt and Clemens Szyperski.
Software Ecosystem—Understanding An Indispensable Technology and
Industry.
MIT Press, Cambridge, 2003.
- Eric S. Raymond.
The
Cathedral and the Bazaar: Musings on Linux and Open Source by an Accidental
Revolutionary.
O' Reilly and Associates, Sebastopol, CA, 2001.
- Eric S. Raymond.
The
Art Of Unix Programming.
Addison-Wesley, 2003.
- J. Sandred.
Managing Open Source Projects.
John Wiley and Sons, New York, 2001.
- Diomidis
Spinellis and Clements Szyperski.
How is open source affecting software development? ( http://www.spinellis.gr/pubs/jrnl/2004-IEEESW-OSS/html/ge-intro.html).
IEEE Software, 21(1):28–33, January/February 2004.