Πέμπτη 18 Νοεμβρίου 2010

Uniform Server : Απλή και χρήσιμη εφαρμογή για local host server

Στα πλαίσια του μαθήματος Ανάπτυξη και Σχεδίαση Λογισμικού, ήρθα για πρώτη φορά αντιμέτωπος με το θέμα σχεδιασμού ιστοσελίδας. Για να μπορέσω να πάρω μια ιδέα για το πώς σχεδιάζεται μια ιστοσελίδα, βρήκα ένα βιβλίο σχετικό με την PhP γλώσσα, το οποίο ξεκίνησα να διαβάζω. Το πρώτο πράγμα που πρέπει να κάνεις για να ξεκινήσεις την διαδικασία δημιουργίας ιστοσελίδας, είναι η εγκατάσταση μιας εφαρμογής, η οποία βασικά δημιουργεί ένα εικονικό Server(Local Host), όπου θα είναι αποθηκευμένα τα .php αρχεία που αποτελούν τη συνολική εφαρμογή της ιστοσελίδας. Προσπάθησα να ακολουθήσω κατα βήμα τις οδηγίες για το πώς να εγκαταστήσω τα δύο απαιτούμενα προγράμματα, τον Apache Server και MySQL server. Για κακή μου τύχη, παρουσιάστηκαν κάποια προβλήματα τα οποία δεν σχολιάζονταν στις οδηγίες και δεν μπόρεσα να συνεχίσω. Αν και υπήρχε εναλλακτική εφαρμογή, επι μέρες προσπαθούσα να βρώ λύση στο πρόβλημα, αλλά τίποτα. Έτσι αναγκαστικά έπρεπε να ακολουθήσω την εναλλακτική επιλογή, η οποία αναφερόταν σε μια εφαρμογή, Uniform Server,η οποία παρείχε τόσο τον Apache όσο και τον MySQL server μαζί.
Είναι μια πολύ απλή εφαρμογή, η οποία εκτός των άλλων είναι και portable (δηλαδή δεν απαιτεί εγκατάσταση). Πιο κάτω παρουσιάζεται πως λειτουργεί και πώς πρέπει να χρησιμοποιηθεί ο Uniform Server ώστε ένας "πρωτάρης" να ξεκινήσει να προγραματίζει την δική του ιστοσελίδα.

1. Επιλέξτε το UniController.exe 


2. Όπως βλέπετε, μπορείτε να επιλέξετε Start Apache,Start MySQL. Εναλλακτικά μπορείτε να επιλέξετε Start All ώστε να ενεργοποιηθούν και τα δύο. O Z Drive είναι ένας εικονικός δίσκος ο οποίος αναπαριστά το χώρο δεδομένων του εικονικού Server. Αφού επιλέξετε Start All ο Apache και MySQL Server θα ενεργοποιηθούν (τα κόκκινα τετραγωνάκια θα γίνουν πράσινα)


3. Στο My Computer θα διαπιστώσετε πως έχει δημιουργηθεί ο εικονικός Δισκος Ζ:/ .


4. Επιλέξτε τον Δίσκο Ζ και όπως θα δείτε μέσα υπάρχουν διάφορα αρχεία. Στο φάκελο " www "
μπορείτε να δημιουργήσετε ένα φάκελο με το όνομα του project σας (στην περίπτωση αυτή eCommerceProject) και να τοποθετήσετε μέσα σε αυτόν τα αρχεία .php που απαρτίζουν την ιστοσελίδα σας.



5. Στον browser που χρησιμοποιείτε(πχ Firefox)  δώστε την διεύθυνση http://localhost/project_name
όπου project_name είναι το όνομα φακέλου που περιέχει τα .php αρχεία. Στα Windows7, αντί localhost χρησιμοποιήστε το ip 127.0.0.1 . Δηλαδή, στην συγκεκριμένη περίπτωση
http://127.0.0.1/eCommerceProject/ . Αυτό, θα κατεβάσει απο τον Server το αρχείο
Z:/www/eCommerceProject/index.php και θα το εμφανίσει στον browser.



Υπάρχουν και είναι καλό να ψάχνουμε εφαρμογές οι οποίες μας παρέχουν ένα σύνολο απο λειτουργείες σε ένα πακέτο. Απο τη μια γίνεται εξοικονόμηση χρόνου όσο αφορά την εγκατάσταση πολλών εφαρμογών έναντι μιας, αλλά αποφεύγονται επίσης προβλήματα που παρουσιάζονται όταν αυτές οι εφαρμογές πρέπει να επικοινωνήσουν μεταξύ τους για να παράξουν το τελικό αποτέλεσμα. Διαφορετικές εκδόσεις προγραμμάτων μπορεί να παρουσιάσουν διαφορετικά προβλήματα, με αποτέλεσμα κάθε φορά να έρχεσε αντιμέτωπος με μια διαφορετική μέθοδο λύσης. Με τη χρήση τέτοιων εφαρμογών, συνήθως τέτοια προβλήματα δεν παρουσιάζονται.

Δευτέρα 15 Νοεμβρίου 2010

Μέθοδος για αναγνώριση θύρας(port) που χρησιμοποιείται απο κάθε διεργασία

Είναι γνωστό πως κάποια προγράματα χρησιμοποιούν το ίδιο Port Number, με αποτέλεσμα να μην μπορούν να τρέξουν και τα δύο ταυτόχρονα. Έαν το ένα απο αυτά τρέχει, το άλλο θα παρουσιάσει σφάλμα το οποίο θα λέει κάτι τέτοιο..


Σε τέτοιες περιπτώσεις, υπάρχουν δύο εναλλακτικές λύσεις. Η μία απο αυτές είναι να αλλάξουμε το Port Number που χρησιμοποιείται απο το δεύτερο πρόγραμμα ώστε να διαφέρει απο αυτό του άλλου που ήδη τρέχει (πχ. Εδώ ο MySQL server προσπαθεί να τρέξει στο Port 3306 το οποίο χρησιμοποιείται απο άλλη διεργασία). Αυτό, σε μερικά προγραμματα όπως είναι το Skype είναι εύκολο να γίνει, πηγαίνοντας στα Options του προγράματος και στο πεδίο Use Port βάζουμε ένα διαφορετικό αριθμό.
Σε πιο πολύπλοκα προγράμματα όπως είναι ο MySQL server, πολλές φορές δεν είναι και τόσο απλό να αλλάξουμε το Port Number που χρησιμοποιούν. Έτσι μπορούμε να ακολουθήσουμε μια εναλλακτική διαδικασία για να επιλύσουμε το πρόβλημα.
Αν και εδώ στο Error Message λέει πως το Port 3306 χρησιμοποιείται, δεν διευκρινίζει ποιά διεργασία το χρησιμοποιεί. Αυτό που παρουσιάζεται στο πιο κάτω video  είναι πως μπορούμε να βρούμε, ποια διεργασία χρησιμοποιεί το συγκεκριμένο Port 3306 ώστε να την τερματίσουμε και να μπορέσουμε να τρέξουμε τον MySQL server.
video link :   http://www.youtube.com/watch?v=w2DFbI2sJ-E

Αυτό είναι ένα απο τα πολλά προβλήματα για τα οποία ο πιο εύκολος τρόπος να βρείς άμεση λύση είναι χρησιμοποιώντας το google. Εναλλακτική θα ήταν να βρείς το manual του προγράμματος και να ανακαλύψεις απο μόνος σου την λύση. Εδώ μπαίνει στο θέμα μας ο τρόπος με τον οποίο αντιμετωπίζουμε το πρόβλημα. Αρχικά έψαξα για "how to change port number of MySQL server". Μόλις είδα πως η λύση αυτή ήταν πολύπλοκη, είπα να δοκιμάσω εναλλακτική λύση. Αφού ήξερα ποιο Port ήταν σε χρήση, το μόνο που έμενε ήταν να βρώ ποια διεργασία το χρησιμοποιεί. Επομένως έψαξα για  "How to determine which program is using a given port" το οποίο μου επέστρεψε μια λύση την οποία θεωρούσα ευκολότερη να εφαρμόσω. Αυτό έπραξα και έδωσα λύση στο πρόβλημα.
Φυσικά, αργότερα, απο περιέργεια και μόνο δοκίμασα και την άλλη λύση η οποία δούλευε, αλλά μου πήρε αρκετό χρόνο.
Το μάθημα που πήρα ήταν, όταν παρουσιάζεται ένα πρόβλημα, εάν μια λύση που βρίσκεται αρχικά θεωρείται πολύπλοκη, να ψάχνουμε για κάποια εναλλακτική(πιο γενική). Εάν βρεθεί και είναι ευκολότερη, καλό είναι να ακολουθούμε αυτή. Δηλαδή, είναι ευκολότερο να τερματίσεις μια εφαρμογή που χρησιμοποιεί το ίδιο Port Number με μια άλλη, παρά να ψάχνεις κάθε φορά πώς να αλλάξεις το Port Number συγκεκριμένης εφαρμογής.
 

Κυριακή 14 Νοεμβρίου 2010

Xcas: Μια απο τις ιδιαιτερότητες του

Πάνε μέρες που έχω υλοποιήσει ένα αλγόριθμο στο Xcas (μαθηματικό εργαλείο με το οποίο ασχολούμαστε στο μάθημα Υπολογιστικής Άλγεβρας) αλλά δεν μπόρεσα να βρώ το πρόβλημα (bug) που είχε, μέχρι απόψε. Ενώ ο αλγόριθμος έτρεχε κανονικά για μικρό αριθμό επαναλήψεων (πχ 500 ), για μεγαλύτερο αριθμό το πρόγραμμα έμπαινε σε Not Responding mode και τερμάτιζε αυτόματα. Έψαχνα για αρκετή ώρα  στον κώδικα για να βρώ που μπορεί να είναι το λάθος, κάνοντας print τα ενδιάμεσα αποτελέσματα, return(Lists) κλπ. Όλα δούλευαν όπως έπρεπε, εκτός απο την συνάρτηση nuage_points(List) η οποία παίρνει σαν όρισμα μια List και εκτυπώνει σε γραφική τα σημεία (x,y) που εμπεριέχει η λίστα αυτή. Λέω εδώ είναι το πρόβλημα! Δεν μπορούσα όμως να κάνω κάτι σχετικά με αυτό ,έτσι σκέφτηκα να χρησιμοποιήσω μια εναλλακτική συνάρτηση, η οποία ενεργοποιεί τα pixels της οθόνης στη γραφική παράσταση,δίνοντας σαν όρισμα το σημείο pixel (pixon(x,y) ). Τρέχοντας το πρόγραμμα μου προέκυψε ένα κατεβατό απο warnings τα οποία, όλα αναφέρονταν σε μια ανάθεση η οποία αφορούσε μια πράξη με την σταθερά pi. Εκεί, χωρίς δεύτερη σκέψη κατάλαβα ότι έψαχνα σε λάθος σημείο. Πήγα και αντικατέστησα όπου pi =3.14159265359 και προσπάθησα να τρέξω ξανά το πρόγραμμα. Το αποτέλεσμα; Το πρόβλημα είχε λυθεί!
Δεν έχω καταλάβει ακριβώς ποιο ήταν το πρόβλημα, αλλά αυτό που μπορώ να σκεφτώ είναι πως το Xcas αντιμετώπιζε δυσκολία στο να κάνει πράξεις με την σταθερά pi ενώ με την προσεγγιστική τιμή του δεν υπήρχε κανένα απολύτως πρόβλημα.
Χρησιμοποιώντας διάφορα εργαλεία προγραμματισμού μπορούμε να διαπιστώσουμε τις ιδιαιτερότητες του καθενός. Συγκρίνοντας με την C, τέτοιες σταθερές δηλώνονται ως #define pi 3.1415
και έτσι χρησιμοποιείται το pi σαν ο αριθμός 3.1415. Αντιθέτως, στο Xcas to pi είναι δεσμευμένη λέξη και αντιστοιχίζεται σε αυτή κατευθείαν η τιμή της(συμβολική ή πραγματική). Το παράδοξο έιναι πως, επειδή το Xcas χρησιμοποιεί διαφορετικούς τρόπους επίλυσης πράξεων, μπορεί να προκύψουν "προβλήματα" όπως το πιο πάνω.

(στην εικόνα πιο κάτω φαίνονται οι δύο διαφορετικές μορφές που αναπαριστάται το pi )


Μετά απο αρκετή ώρα σπαζοκεφαλίας, κατάλαβα πως ειδικά στον προγραμματισμό, ένα "λάθος" μπορεί να είναι πολύ καλά κρυμμένο. Ενώ αλλού φαινόταν αρχικά να υπάρχει το πρόβλημα, αλλού βρέθηκε. Η ανακάλυψη του βέβαια έγινε με λίγη δόση τύχης αλλά και επιμονής. Αν δεν χρησιμοποιούσα την εναλλακτική επιλογή ( pixon() ), το πιο πιθανό είναι πως ακόμα θα έψαχνα. Χρησιμοποιώντας εναλλακτικές επιλόγές για debugging είναι πολύ ευκολότερο να καταλήξουμε στο σφάλμα (το λογικό και όχι το συντακτικό) γιατί κάθε μέθοδος αποκαλύπτει το "πρόβλημα",εάν υπάρχει, απο διαφορετική οπτική γωνία.

Πέμπτη 11 Νοεμβρίου 2010

Προβολή αρχείου .docx χωρίς την χρήση Microsoft Office 2007

Ένα πρόβλημα που έχω ξανα παρατηρήσει αλλά δεν μπήκα ποτέ στο κόπο να ασχολήθω γιατί δεν με αφορούσε άμεσα εκείνη τη στιγμή, είναι η αδυναμία προβολής .docx αρχείων με εκδόσεις Microsoft Office πριν απο το 2007.
Χθές έπρεπε να στείλω ένα .docx αρχείο σε ένα φίλο ο οποίος δεν διαθέτει τα Office 2007. Σαφώς θα μπορούσα προηγουμένως να το αποθηκεύσω ως .doc και να μην υπάρχει τέτοιο πρόβλημα. Για δική μου τύχη, το αρχείο το είχα στείλει στο gmail.  Το αρχείο αφού κατέβηκε, δεν μπορούσε να γίνει open . Κατα λάθος, το παιδί πρόσεξε πως μέσω του gmail , μπορείς να κάνεις προβολή .docx αρχείων χωρίς να έχεις εγκατεστημένο το Office2007. Έτσι έμαθα και εγώ πως υπάρχει αυτή η δυνατότητα.
Το έψαξα λίγο αργότερα περισσότερο και βρήκα πως υπάρχει και το google docs όπου μπορείς να ανεβάσεις αρχεία, έστω .docx τα οποία μπορείς να τα διαβάσεις απο εκεί.

Ένα μαθησιακό γεγονός μπορεί να προκύψει χωρίς την θέληση μας. Μερικές φορές μαθαίνουμε πράγματα απο τυχαία γεγονότα, όπως το πιο πάνω. Καλό είναι να ψάχνουμε και εναλλακτικούς τρόπους αντιμετώπισης συγκεκριμένων προβλημάτων ώστε αργότερα  να έχουμε ευελιξία στις επιλογές μας.

Δευτέρα 8 Νοεμβρίου 2010

Windows can speak!

Έτυχε μια μέρα καθώς καθόμασταν παρέα στο σπίτι να ακούσω τον υπολογιστή να μιλά! Λέω κάποιος θα πειραματίζεται και πηγαίνω προς τον υπολογιστή. Καθόταν ένα παιδί απο την παρέα και ό,τι έδινε σαν input σε μία ιστοσελίδα, ακουγόταν απο το ηχεία. Έβαζε κατι biiib biiib και το μόνο που κάναμε ήταν να γελάμε. Κανείς δεν είχε δώσει σημασία σε πιο site πειραματιζόταν.
Τυχαία διάβαζα ψες για διάφορες λειτουργείες που παρέχουν τα windows, που ως συνήθως δεν γνωρίζουμε.( Προσωπικά δεν ασχολούμε περισσότερο  απο ο,τι χρειαζομαι για να φέρω εις πέρας αυτό που θέλω να κάνω την συγκεκριμένη στιγμή). Ούτως παραδόξως, έπεσε στο μάτι μου "make your pc to speak" και λόγω του γεγονότως που είχε συμβεί, πήγα κατευθείαν να το διαβάσω.

Είναι υπερβολικά εύκολο να γίνει ακολουθώντας τα πιο κάτω βήματα
1. Δημιουργήστε ένα νεό αρχείο .txt και copy-paste μέσα σε αυτό το πιο κάτω κείμενο

Dim message, sapi
message=InputBox("What do you want me to say?","Speak to Me")
Set sapi=CreateObject("sapi.spvoice")
sapi.Speak message




2.Κάντε save as.. το αρχείο αυτό με το όνομα speak.vbs



3. Ανοίξτε το αρχείο speak.vbs που μόλις δημιουργήσατε και γράψτε το κείμενο που θέλετε να ακούσετε. Επιλέξτε  ΟΚ.


Όσο και αν φαίνεται παράξενο κάποια πράγματα που ξεκινούν απο αστείο μπορεί να καταλήξουν σε γεγονότα μάθησης.Αν δεν τύγχαινε το γεγονός εκείνο το βράδυ,δηλαδή να καθήσουμε και να γελάσουμε με τον υπολογιστή που μιλούσε,το "make your pc to speak" είμαι σίγουρος πως θα το προσπερνούσα. Αν και εδώ το γεγονός μάθησης δεν είναι απο μόνο του σημαντικό μπορεί και μή ενδιαφέρον,έχω καταλάβει πώς και τα καθημερινά αστεία μπορεί να μας οδηγήσουν στην γνώση.

Σάββατο 6 Νοεμβρίου 2010

"Steganography " Απόκρυψη κειμένου σε εικόνα

Σε συζήτηση που είχα με ένα φίλο σχετικά με την ασφάλεια δεδομένων που υπάρχει, ή καλύτερα που δεν υπάρχει στο διαδίκτυο, λέγαμε διαφορους τρόπους με τους οποίους μπορείς να στείλεις σε κάποιο άτομο δεδομένα τα οποία να μην είναι προσβάσιμα απο τρίτο πρόσωπο. Σαφώς μπορείς να βάλεις τα δεδομένα σε ένα .rar αρχείο και να το κλειδώσεις με ένα κωδικό. Αυτό όμως ,εύκολα ή δύσκολα μπορεί να σπάσει.
Στα διάφορα που λέγαμε,  άκουσα για "Stenography". Είχα ξανακούσει την συγκεκριμένη λέξη αλλά δεν έμαθα ποτέ τι σήμαινε. Οταν επέστρεψα σπίτι το έψαξα λίγο περισσότερο.. Stenography είναι η απόκρυψη κειμένου (text), σε φωτογραφίες. Αυτό που την κάνει να διαφέρει απο άλλου είδους κρυπτογραφίας κατα τη γνώμη μου είναι ο αντιπερισπασμός. Αν κάποιος καταφέρει να υποκλέψει το αρχείο και δεί πως είναι απλά μια εικόνα, δεν θα καθίσει να ασχοληθεί περεταίρω!
Εχω βρεί ένα προγραμματάκι πολύ απλό στη χρήση το οποίο έχει την δυνατότητα να κάνει αυτού του είδους την κρυπτογραφία. Ονομάζεται  ImageHide και είναι freeware οπότε δοκιμάστε το ελεύθερα!

Ακολουθούν screenshots τα οποία δείχνουν την απλή λειτουργεία του.

1. Ανοίξτε το  ImageHide.exe και επιλέξτε Load Image.



2. Η εικόνα της επιλογής σας θα εμφανιστεί στο πρόγραμμα και κάτω απο αυτή μπορείτε να γράψετε το κείμενο το οποίο επιθυμείτε να κρυπτογραφηθεί μέσα σε αυτή.

  
3. Αφού το κάνετε,επιλέξτε Write Data ώστε το κείμενο να αποθηκευτεί. Κάτω αριστερά πρέπει να γράφει Data written to image OK!




4. Επιλέξτε Save Image και αποθηκεύστε το σαν .bpm ή .png



5. Εάν ανοίξετε το αρχείο που μόλις αποθηκεύσατε με το ImageHide και επιλέξετε Read Data, το κείμενο που αποθηκεύσατε θα εμφανιστεί!



Με τέτοια είκονα σίγουρα θα έχω κινήσει το ενδιαφέρον :) Πού να φανταστεί ο άλλος πως κρύβει μηνύματα!
Προυπόθεση για να μπορέσουν να επικοινωνήσουν 2 άτομα με τέτοιου είδους "μηνύματα" είναι να χρησιμοποιούν και οι 2 αυτό το προγραμματάκι.
 
Το μάθημα που πήρα ήταν να ψάχνω  περισσότερο πράγματα τα οποία ακούω και να μην τα προσπερνώ. Πολλές φορές λέμε δεν βαριέσε..κι όμως,πολλά είναι αυτά που μπορούμε να μάθουμε αν κάθε τι άγνωστο που ακούμε,το ψάχνουμε έστω και λίγο.

Δευτέρα 1 Νοεμβρίου 2010

Αποκάλυψη οποιουδήποτε κωδικού στο Login μιας ιστοσελιδας

Ένας απλός τρόπος για να αποκαλύψετε τον κωδικό που παρουσιάζεται με αστερακια * στο login ενός site είναι ο εξής:

Ανοίξτε τον browser και επιλέξτε μια σελίδα, πχ το hotmail. Στο Login, θα δείτε συμπληρωμένο το user  και password  (εάν έχετε ενεργοποιημένο το option ο κωδικός σας να φυλάσεται). Εάν τώρα στο link της σελίδας κάνετε copy paste το πιο κάτω java script και πατήσετε Enter, τότε θα αποκαλυφθεί ο κωδικός σας!

java script


javascript:(function(){var%20s,F,j,f,i;%20s%20=%20%22%22;
%20F%20=%20document.forms;%20for(j=0;%20j<F.length;%20++j)
%20{%20f%20=%20F[j];%20for%20(i=0;%20i<f.length;%20++i)
%20{%20if%20(f[i].type.toLowerCase()%20==%20%22password%22)
%20s%20+=%20f[i].value%20+%20%22\n%22;%20}%20}%20if
%20(s)%20alert(%22Passwords%20in%20forms%20on%20this
%20page:\n\n%22%20+%20s);%20else%20alert(%22There%20are
%20no%20passwords%20in%20forms%20on%20this
%20page.%22);})();

Εάν έχετε συμπληρωμένο το password σας σε μια ιστοσελίδα αλλά δεν θυμάστε πιο είναι και θέλετε να το βρείτε, απλα χρησιμοποιείτε αυτό το script. Υπάρχουν και προγραμματακια τα οποία κάνουν αυτή τη δουλεία αλλά κατα τη γνώμη μου αυτό είναι αρκετό. Σαφώς αυτό το βρήκα μετά απο ψάξιμο στο google γιατί ενώ είχα αποθηκευμένα τα στοιχεία και έκανα login κανονικά στην σελίδα, δεν θυμώμουν το password. Σε περίπτωση δηλαδή που θα έπρεπε να συμπληρώσω τον κωδικό εγώ ο ίδιος, δεν θα τον ήξερα..
Μπορεί και να χρησιμοποιηθεί και με κακόβουλες προθέσεις απο δεύτερο άτομο που έχει πρόσβαση στον υπολογιστή γι'αυτό ας προσέχουμε λίγο :)

HowTo video: