Εμφάνιση αναρτήσεων με ετικέτα java. Εμφάνιση όλων των αναρτήσεων
Εμφάνιση αναρτήσεων με ετικέτα java. Εμφάνιση όλων των αναρτήσεων

Πέμπτη 10 Σεπτεμβρίου 2009

Let's talk geek...

Οποιοσδήποτε ασχολείται με προγραμματισμό, εκτός απ' το αγαπημένο του IDE έχει κι έναν Advanced Text Editor για τα μικρά προγραμματάκια. Ε δε θ' ανοίξεις ένα NetBeans για να γράψεις κάτι μικρό ή να κάνεις διάφορες δοκιμές.

Σε Windows, με βόλεψε αφάνταστα ο TextPad (άσχετα αν τώρα χρησιμοποιώ NotePad++). Ο editor του είναι φανταστικός. Έχει κάποια features στον editor που (εμένα τουλάχιστον) με διευκόλυναν πολύ, τώρα αυτά τα features ψάχνω σε Text Editors στο Linux.

  1. Στο άνοιγμα αγκίστρου για το σώμα μεθόδου, να κλείνει το άγκιστρο σε νέα γραμμή.
  2. Αν δεν κλείνει αυτόματα το άγκιστρο σε νέα γραμμή, όταν φτάσω στο τέλος του σώματος μεθόδου και κλείσω το άγκιστρο, αυτόματα να το στοιχίσει στο σωστό indent.
  3. Αν δεν κλείνει αυτόματα το άγκιστρο σε νέα γραμμή, όταν πατάω enter για να μπώ στο σώμα της μεθόδου, να μεταφέρει το άγκιστρο σε νέα γραμμή.
  4. Όταν πατάω enter μετά το άγκιστρο και μπαίνω στο σώμα μεθόδου, ν' αυξάνει το indentation κατά ένα.

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

Ο gedit φτάνει μέχρι ένα σημείο. Μπαίνεις στο σώμα της μεθόδου με enter αλλά δεν αυξάνει το indentation. Ε δε θέλω να πατάω εκείνο το tab για να μπαίνω μέσα κατά ένα.

Ο emacs κι αυτός πηγαίνει μέχρι ένα σημείο. Αν ανοίξεις άγκιστρο και πατήσεις enter, θα σε πάει μεν στην αρχή της επόμενης γραμμής, μ' ένα tab όμως σε πάει αυτόματα στο σωστό indentation του σώματος της μεθόδου. Δεν κλείνει αυτόματα το άγκιστρο, όταν όμως το κλείσεις κλείνει στο σωστό indentation της γραμμής δήλωσης. Και πάλι όμως, έχουμε ένα επιπλέον tab.

---Εδώ να πώ ότι ο emacs είναι παραμετροποιήσιμος σε τρομακτικό βαθμό, έλα όμως που έχει και τρομακτικό σύστημα ρυθμίσεων. Άστο καλύτερα.

Βρήκα πάντως το πρόγραμμα που κάνει όλα τα παραπάνω. Δε χρειάζεται επιπλέον tab, κλείνει σωστά τ' άγκιστρα κι έχει και δυνατότητα collapse για τις μεθόδους...

Ο λόγος για το Geany. Πρόκειται για lightweight IDE αλλά όχι τόσο βαρύ όσο τα κλασικά IDEs. Με βόλεψε αφάνταστα, ακόμα και γι' αυτά τα απλά πράγματα. Έχει ρυθμίσεις σχεδόν για το κάθε τι, αναλυτικές κι εύκολες στην κατανόηση.

Κλασικά, σε Ubuntu sudo apt-get install geany για εγκατάσταση.

Αντί επιλόγου, θέλω να επισημάνω ότι οι παραπάνω απαιτήσεις βασίζονται στον τρόπο γραφής της Java. Σε άλλες γλώσσες δεν ξέρω τί παίζει ή αν βολεύουν τα παραπάνω features...

Σάββατο 4 Ιουλίου 2009

Ubuntu + Subversion + NetBeans

Τώρα που έφτιαξα το laptop όπως ήθελα με ξεχωριστά partitions, καιρός να βάλω το Subversion. Εντάξει, δεν έχω το repository σε server αλλά τοπικά στο pc μου.

Βρήκα λοιπόν 2 links για την όλη διαδικασία.

Δημιουργία τοπικού repo σε Ubuntu

Εδώ λίγη προσοχή. Η εντολή κανονικά είναι svnadmin create /home/vaibhav/svnrepo

NetBeans + local Subversion repo

Απ' το να κρατάς απλά backup τα sources σε άλλο φάκελο, είναι χίλιες φορές προτιμότερο το subversion. Άντε αλλιώς να δεις τις αλλαγές στον κώδικα...

Ξέρω ότι τώρα τελευταία το Git παίζει πολύ περισσότερο, ας το πάρουμε όμως σιγά σιγά.

Τρίτη 12 Μαΐου 2009

Java EOF

Από μαλακία χθες, έχασα το 3 (μάξιμουμ) στην πρόοδο...

Η Java δεν έχει μέθοδο που ελέγχει αν έχουμε φτάσει στο τέλος του αρχείου (δε ξέρω αν είναι καλό ή κακό). Κάποιες τάξεις (η BufferedReader αν δεν κάνω λάθος) διαβάζουν αυτόματα μέχρι το τέλος του αρχείου. Επειδή εμάς μας είπε να χρησιμοποιήσουμε μόνο την ObjectInputStream για να διαβάσουμε, έπρεπε να διαβάζουμε κάθε επόμενο αντικείμενο αφού κάνουμε έλεγχο αν φτάσαμε στο τέλος του αρχείου.

Εκεί ήταν το πρόβλημά μου. Δε θυμόμουν πώς ελέγχεις αν έφτασες στο EOF. Τελικά είναι εξαιρετικά απλό. Η Java αν φτάσει στο τέλος του αρχείου, ρίχνει -1. Επομένως τσεκάρεις μόνο αυτό. Διαβάζεις κανονικά απ' το stream κι ελέγχεις αν είναι ίσο με -1. Αν είναι, βγαίνει απ' το loop.

Το έλυσα (τώρα δυστυχώς) μ' αυτόν τον τρόπο. Φυσικά βάζω int γιατί γράφαμε/διαβάζαμε ακεραίους.



Μάθημα λοιπόν, τώρα ξέρουμε τί να κάνουμε αν μας ζητούν συγκεκριμένες τάξεις...

Κυριακή 3 Μαΐου 2009

Please talk to me!!!

Ωραία. Μετά την αναβάθμιση σε 9.04, το NetBeans δεν ανοίγει. Έτσι απλά. Δείχνει να φορτώνει αλλά δε σηκώνει το πρόγραμμα. Άψογα...

Κυριακή 5 Απριλίου 2009

Creating the GUI...

Τελικά το NetBeans έχει απίστευτο GUI Builder. Μου πήρε βέβαια κανα 10λεπτο να βρώ πώς "δένεις" ένα component σε μια μέθοδο... τώρα είμαι εντάξει.

Το μόνο που πρέπει να βρώ τώρα, είναι πού θα βάζω τις βοηθητικές μεθόδους (τις οποίες π.χ. καλώ σε άλλη μέθοδο) και πού θα δημιουργώ τ' αντικείμενα που θα "τρέχουν" στο πρόγραμμα...

Έχω κανα 2 προγραμματάκια στο μυαλό μου οπότε θα φάω πολύ trial-and-error καταστάσεις...

Το κακό είναι ότι δεν έχω πολλή υπομονή και θέλω να βλέπω αποτελέσματα άμεσα (κακή τακτική και πρέπει να την αλλάξω), οπότε να κάτσω να διαβάσω οδηγούς ψιλο-αποκλείεται. Ειδικά τώρα που έχω να κάνω και 2 εργασίες για τη σχολή (η μία σε VB.NET που λέγαμε... μπλιαχ), kiss the tutorials goodbye!!!

Πέμπτη 12 Φεβρουαρίου 2009

NetBeans Starter Kit - Πολύ Quick Tour

ΟΚ παίδες, το δισκάκι είναι όλα τα λεφτά. Καλοφτιαγμένο κι εύκολο στην περιήγηση. Από βίντεο δεν έχει πολλά πράγματα αλλά τα βασικά, τα υπόλοιπα online. Οι οδηγοί, το documentation κλπ διαβάζονται μες απ' τον browser οπότε είναι πραγματικά όλα σ' ένα.

Ξεκινώντας το δισκάκι βλέπουμε αυτό:

Πάμε κατευθείαν για εγκατάσταση σε Windows, Linux, MacOS ή Solaris. Παράλληλη εγκατάσταση και του IDE για JavaFX.

Δεύτερη καρτέλα και βρισκόμαστε στη σελίδα των screencasts:

Όλα τα βίντεο έχουν δυνατότητα αναπαραγωγής μέσω του browser, δεν απαιτείται κάτι έξτρα:
Στην τρίτη καρτέλα "Learn" είναι για μένα το ζουμί της υπόθεσης. Όλο το documentation κι οι οδηγοί του πακέτου βρίσκονται εδώ. Java Programming with Passion!, Getting Started with the JPA, The Java Tutorial, API Documentation, IDE Learning Trails. Κατευθείαν μες απ' τον browser. Είναι λίγο μικρό βέβαια το visual μέρος του browser αλλά την κάνει τη δουλειά του.

Ορίστε πώς εμφανίζεται ο Java Programming with Passion! οδηγός:

Αυτά. Όλα σε ένα, νοικοκυρεμένα. Καλή δουλειά πιστεύω, τα μάζεψαν όλα μαζί ώστε να έχουμε οι νέοι προγραμματιστές τα πάντα μαζί μας. Αξίζει τον κόπο, ρίξτε του μια ματιά.

Τετάρτη 11 Φεβρουαρίου 2009

NetBeans IDE 6.5 ML DVD Starter Kit

Έπαθα την πλάκα μου μόλις είδα αυτή την είδηση. Επιτέλους ένα ολοκληρωμένο πακέτο με προγράμματα κι εργαλεία εκμάθησης της Java.

Ακόμα το κατεβάζω βέβαια, δε το έχω τσεκάρει ακόμα αλλά φαίνεται και γαμώ!!!

Software:
  • NetBeansTM IDE 6.5 ML (English, Simplified Chinese, Brazilian Portuguese, and Japanese)
  • NetBeansTM IDE 6.5 for JavaFX 1.0
  • JDK Update 6 Update 11
  • GlassFishTM V2 UR2 and v3 Prelude
  • Apache Tomcat 6.0.18

Documentation & Tutorials:

  • NetBeans IDE Documentation and Video (in English, Simplified Chinese, Brazilian Portuguese, Japanese and Russian)
  • "Java Programming with Passion!" course by Sang Shin based on NetBeans IDE 6.5
  • Java Platform API Specification
  • The Java Tutorials

Εντάξει ΟΚ, όλα αυτά μπορούν να βρεθούν κι online αλλά να τα έχεις όλα στο pc σου μαζεμένα είναι μεγάλη υπόθεση.

original post

Πέμπτη 13 Νοεμβρίου 2008

DZone Refcardz

Πριν λίγες βδομάδες, ανακάλυψα το DZone. Πολύ υλικό για developers, μπορείς να βρεις πολλά και ωραία πράγματα. Νέα links, προγράμματα, services κλπ που θα σε βοηθήσουν στο developing. Τέλος πάντων, γαμάτο site.

Αν πας από πάνω αριστερά στο DZone Network > Refcardz, βρίσκεσαι σε μια πολύ καλή υλοποίηση για εργαλεία developing.

Πρόκειται στην ουσία για "σκονάκια" ενός συγκεκριμένου θέματος, ένα pdf που μπορείς να έχεις συνεχώς μαζί σου με μαζεμένες διάφορες πληροφορίες.

Εγώ κατέβασα πρώτα πρώτα το RefCard για Core Java. Έχει σχεδόν τα πάντα. Κάνει ένα τάχιστο reference στη γλώσσα. Πάρτε λίγο μάτι.

Το παρακάτω screenshot έχει τα πακέτα της Java και μερικές πληροφορίες για τους πρωταρχικούς τύπους δεδομένων. Όχι κι άσχημο ε;

Το συγκεκριμένο RefCard, είναι τέλειο για τον αρχάριο developer που θέλει να έχει κάποια πράγματα μαζεμένα για όταν τα χρειαστεί.

Γυρνώντας στα RefCardz που έχουν φτιάξει, αναφέρω κάποια ακόμα που μου κίνησαν το ενδιαφέρον. Core CSS, Getting Started With MyEclipse, PHP, Core .NET, C#, Getting Started With Ajax, κι έχει ένα σωρό άλλα.

Το κατέβασμα των RefCardz είναι δωρεάν, μόνο που κατά τη διαδικασία εγγραφής θεωρούν ότι είσαι επαγγελματίας developer (δηλ. required fields) ζητώντας πληροφορίες για την εταιρία που δουλεύεις, τί θέση έχεις, πόσα άτομα απασχολεί η εταιρία κλπ.

Anyway, ρίξτε μια ματιά γιατί μπορεί να βρείτε κάτι που θέλετε.

Τετάρτη 12 Νοεμβρίου 2008

GUI Building

Κι εκεί που ετοιμαζόμουν ν' ακολουθήσω τυφλά τη Java στη δημιουργία GUI, μου πέφτει η ιδέα ν' ασχοληθώ με κάποια άλλη γλώσσα, .NET συγκεκριμένα.

Όπως και να το κάνουμε, το .NET χρησιμοποιείται ολοένα και περισσότερο. Γιατί λοιπόν να μην ασχοληθώ με τέτοια γλώσσα; Ναι ΟΚ, το Java Swing είναι cross-platform κλπ, στην τελική τί με νοιάζει;

Όταν θα βγώ να δουλέψω (ελπίζω δηλαδή), τον άλλο δε θα τον ενδιαφέρει αν η εφαρμογή που θα του κάνω τρέχει και σ' άλλες πλατφόρμες. Σίγουρα η εφαρμογή θα είναι για Windows. Γιατί λοιπόν να χρησιμοποιήσω Java κι όχι κάτι μου θα μου δώσει το εκτελέσιμο πρόγραμμα στο άψε σβήσε χωρίς πολλά φρου-φρου κι αρώματα. Αυτό είναι άλλωστε το ζητούμενο.

Στην τελική εντάξει, για δική μου τρέλα κάνω το GUI και σε Java, δε με εμποδίζει κανείς.

Και μην ξεχνάμε ότι η C# (αυτήν επέλεξα για .NET γλώσσα) έχει δανειστεί πολλά από Java και C++, επομένως θα μου είναι πιο εύκολη στην εκμάθηση.

Θέλω πάντως να συγκρίνω το GUI building σ' αυτές τις δύο γλώσσες. Έχω την εντύπωση (ακόμα κι από τώρα) ότι η C# είναι πιο rapid κατάσταση, σ' αντίθεση με τη Java που ναι μεν έχω κάποια εμπειρία, έχει χίλια-δυο πράγματα που σιγά μη χρησιμοποιήσω ποτέ.

Αυτό το MSDN ρε παιδί, τί γαμάτο που είναι! Έχει τα πάντα. Κατέβασα μόνο την έκδοση για C# αλλά είναι και γαμώ! Έχει τα πάντα που χρειάζεται κάποιος. Ένα γρήγορο οδηγό, διάφορες πληροφορίες για το Visual C# Studio, το C# Reference, to .NET Framework... Θησαυρός λέμε!

Άντε να δούμε, θα κάνω κανα προγραμματάκι μέχρι τα Χριστούγεννα ή όλο μαλακίες λέω;

Μην απαντήσετε στο τελευταίο :P

Δευτέρα 5 Μαΐου 2008

Packages

Δε μπορώ να καταλάβω γιατί δε χρησιμοποιώ πακέτα για να οργανώνω τα source αρχεία μου. Είναι πιο λογικό να έχω 2-3 φακέλους με διάφορα αρχεία και να ψάχνω κάθε φορά ποιό θ' ανοίξω; Αυτό που κάνω είναι το λιγότερο μαζοχιστικό. Και να πώ ότι μ' αρέσει; Δε μ' αρέσει.

Βέβαια η αλήθεια είναι ότι δε δουλέψαμε και πολύ με πακέτα. Μας τα έδειξαν σ' ένα μάθημα, όταν πια μάθαμε(;) να ετοιμάζουμε τον κώδικα. Απ' την άλλη βλέπεις είναι πιο εύκολο να δουλεύεις χωρίς πακέτα, απ' τη στιγμή που μπορείς να δημιουργήσεις το φάκελο του εκάστοτε εργαστηρίου στη σχολή (πχ Lab5) κι εκεί μέσα να βάλεις τ' αρχεία που χρειάζεσαι μ' έν' απλό drag'n'drop απ' τους άλλους φακέλους. Ο compiler μετά θα κάνει τη δουλειά του. Κι εσύ θα την κάνεις, προς το παρόν τουλάχιστον.

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

Ποιά είναι η απλή λύση; Τα πακέτα όπως είπα και πιο πάνω.

Κάνεις σ' ένα IDE ένα καινούργιο project πχ DataStructures. Έχεις μετά ένα πακέτο TheoryCode για τον κώδικα που δίνουν οι σημειώσεις της θεωρίας. Κάτω απ' αυτό, κάνεις ένα TheoryCodeTest για να τεστάρεις τον κώδικα.

Απ' τη στιγμή που χρησιμοποιούμε το πολύ 5-6 interfaces, κάνεις ένα πακέτο Interfaces και τα βάζεις όλα εκεί. Τις τάξεις με τα exceptions το ίδιο. Όταν χρειαστείς κάποια τάξη την κάνεις απλά import, δεν ανοίγεις σ' άλλο text editor το αρχείο. Κι έτσι αν χρειαστεί ν' αλλάξεις κάτι στον κώδικα, αλλάζεις εννοείται μόνο ένα αρχείο.

Καλά όλ' αυτά, απλά δε μας έδειξε κανείς πώς να δουλεύουμε σε ολοκληρωμένα περιβάλλοντα (σωστός κι αυτός που θα πεί "καλά ρε μεγάλε, δύσκολο να το καταλάβεις; Κάτσε ένα δίωρο κι είσαι μια χαρά") ή με πακέτα.

Πλάκα πλάκα, θα κάτσω να το κάνω μάλλον σήμερα το απόγευμα. Έχουμε άλλα 5 ακόμα εργαστήρια και θα συσσωρευτούν αρχεία.

Α ναι, πρέπει να βάζω σωστά comments στις τάξεις μου. Με το JavaDoc μετά, βγαίνει ένα documentation μούρλια!

Τετάρτη 23 Απριλίου 2008

NetBeans IDE 6.1

Δεν πέρασε πολύς καιρός απ' την αναβάθμιση σε 6.0.1 κι η έκδοση 6.1 βρίσκεται σε Release Candidate στάδιο.

Κάποια features μπορείτε να δείτε εδώ. Δε μπορώ να εκφέρω γνώμη μιας και δεν το έχω δουλέψει πολύ το πρόγραμμα, τουλάχιστον όμως η διαφορά στις επιδόσεις φαίνεται σημαντική.

Ελπίζω τώρα που θα βγει η καινούργια έκδοση, να κάτσω να το δουλέψω λίγο και να κάνω καμιά απλή εφαρμογή γιατί αλλιώς δε με βλέπω καλά. Δουλεύοντας με JCreator στη σχολή δε γίνεται και τίποτα. Όχι τίποτα, πήρα και βιβλίο για το NetBeans κι είναι ευκαιρία ν' ασχοληθώ. Άντε γιατί εδώ και 2 εξάμηνα λέω θα δουλέψω με IDE.

Δευτέρα 18 Φεβρουαρίου 2008

Προγραμματισμός ΙΙ No More!!!!

Τελικά η ενασχόλησή μου με τη Java σ' αυτό το εξάμηνο απέδωσε και πολύ καλά μάλιστα.

Στην εξεταστική έγραψα ένα 7.3 και ησύχασα. Βέβαια ο καθηγητής δίνει κι ένα μπόνους οπότε ο βαθμός έγινε 8.4.

Λίγο μ' ενδιαφέρει γιατί επιτέλους πέρασα το μάθημα. Μπορώ τώρα να συνεχίσω με την αλυσίδα, που κακά τα ψέματα έχω μείνει πίσω.

Φυσικά και δεν πρόκειται να παρατήσω τη Java τώρα που πέρασα το μάθημα. Έχω βάλει σκοπό ν' ασχοληθώ πολύ περισσότερο και να κάνω κανα πρόγραμμα της προκοπής. Έχω βάλει στο μάτι εδώ και καιρό ένα βιβλίο για το NetBeans 6.0 αλλά δυστυχώς δεν έχει κυκλοφορήσει ακόμα. Άντε να βγει για να φτιάχνω και γραφικό περιβάλλον.

Και στα δικά σας!

Κυριακή 10 Φεβρουαρίου 2008

Mind Compilation

Το κακό με το να δίνεις εξετάσεις για προγραμματισμό στο χαρτί, είναι ότι δε μπορείς να δοκιμάσεις αν το πρόγραμμα που έγραψες ή η μέθοδος που κατασκεύασες δουλεύει σωστά.

Σ' ένα ερώτημα την Παρασκευή, την πάτησα σαν εντελώς αρχάριος. Έκατσα να κάνω τις εξετάσεις πριν λίγο, με την ησυχία μου, κι είδα ότι έκανα κάποια τραγικά λάθη που φυσικά δεν έπρεπε να κάνω.

Μας λέει να κάνουμε αναδρομική μέθοδο που αυξάνει τα πεδία ενός πίνακα με μια συγκεκριμένη τιμή, ξεκινώντας από συγκεκριμένη θέση.

Αυτό που έκανα ήταν το εξής και ήταν λάθος φυσικά:

public static void plus(int[] array, int start, int amount){

   array[start] += amount;

   plus(array,start+1,amount);

}

Έτσι, η μέθοδος δεν τερματίζει πουθενά με αποτέλεσμα να βγάζει εξαίρεση ArrayIndexOutOfBounds επειδή συνεχίζει και μετά το τέλος του πίνακα...

Οπότε τι γίνεται; Βάζεις απλά κι ένα ακόμα όρισμα πχ. counter (το οποίο μηδενίζεις στη main) που θα ελέγχει για το μήκος του πίνακα. Άρα:

public static void plus(int[] array, int start, int amount, int counter){

   counter += 1;

   if(counter < array.length){

      array[start] += amount;

      plus(array,start,amount,counter);

   }

}

Την πάτησα σαν εντελώς πρωτάρης. Ήταν εντελώς ηλίθιο αυτό που έκανα. Βέβαια θα 'πρεπε να το ξέρουμε αλλά όταν μαθαίνεις μηχανικά να προγραμματίζεις, λογικό είναι να μη μπορείς να κάνεις κάποια εύκολα πράγματα... Κι ένα δεύτερο.

Σε άλλο υποερώτημα είχε το εξής (μεταξύ άλλων τάξεων):

abstract class Being{

   void prog2(){};

}

Κι έπρεπε να δούμε αν το πρόγραμμα περνάει το compile, να διορθώσουμε τυχόν λάθη και να βγάλουμε την έξοδο. Εντάξει, την έξοδο την έβγαλα σωστά, δε πρόσεξα όμως το λάθος στην παραπάνω τάξη!

ΓΙΑ ΤΟ ΘΕΟ! Σε abstract τάξη, οι μέθοδοι ή πρέπει να οριστούν abstract (και να μην έχουν σώμα δηλ.{}) και να έχουν ερωτηματικό, ή να έχουν σώμα, να μην οριστούν φυσικά abstract και να μην έχουν ερωτηματικό. Και τα δύο δε γίνεται...

Τρίτη 22 Ιανουαρίου 2008

Δε γουστάρω αναδρομή! Πάει και τελείωσε!!!

Βλέπω ότι το πρώτο και τελευταίο post που είχα κάνει για την Prolog ήταν εδώ.

Μιας και γράφω αύριο εργαστήριο (μεταξύ μας δε νομίζω να περάσω) είπα να τα χώσω πάλι σ' αυτή τη γλώσσα.

Ναι ξέρω ότι η Prolog δε χρησιμοποιείται για κλασικά προγράμματα. Ναι ξέρω ότι είναι εντελώς αόριστη και "φλου" αφού είναι για τεχνητή νοημοσύνη.

Δε την πάω καθόλου όμως. Έχω συνηθίσει ρε παιδί μου με τον κλασικό προγραμματισμό και στην προκειμένη Java. Δε μπορώ να μπώ στον τρόπο σκέψης αυτής της γλώσσας. Περιγράφεις το πρόβλημα και σου απαντά. Ε νευριάζω όμως. Όταν για 2 (τυπικά) εξάμηνα κάνεις Java (κι ενδεχομένως ασχολείσαι και μόνος σου) και μαθαίνεις τον τρόπο προγραμματισμού σε κλασικές γλώσσες, δεν είναι εύκολο να μπεις σ' έναν εντελώς διαφορετικό προγραμματιστικό κόσμο.

Τί κι αν τα προγράμματα στην Prolog είναι μερικές γραμμές; Εγώ γουστάρω να γράφω κώδικα! Θέλω να γράφω εκατοντάδες γραμμές και να ελέγχω ακόμα και την μικρότερη λεπτομέρεια. Αυτό δε γίνεται στην Prolog.

Σίγουρα έχει κάποια πλεονεκτήματα έναντι του κλασικού προγραμματισμού. Μπορείς για παράδειγμα να δώσεις την έξοδο μιας λογικής πύλης (AND, OR, XOR κλπ) και να σου δώσει τις εισόδους! Αυτό είναι εξαιρετικά δύσκολο να γίνει (απ' όσο μας είπαν) στον κλασικό προγραμματισμό.

Ακόμα κι έτσι όμως δε χωνεύω αυτή τη γλώσσα. Και το χειρότερο είναι η αναδρομή που χρησιμοποιείται πάρα πολύ στις λίστες. Δε μπορώ να σταματήσω να σκέφτομαι τις λίστες να δουλεύουν όπως οι πίνακες στη Java. Που δε λειτουργούν με τον ίδιο τρόπο. Δε μπορώ να σταματήσω να σκέφτομαι το πρόγραμμα όπως θα το έλυνα με Java.

Γι' αυτό μάλλον θα κοπώ αύριο. Αλλά ευτυχώς έχουμε και δεύτερη εξεταστική. Thank Odin!

Σάββατο 29 Δεκεμβρίου 2007

1η απόπειρα ολοκληρωμένου προγράμματος

Τώρα είναι που η Eri θα πέσει σε λήθαργο αλλά μπορεί να κάνει μερικά σχόλια και προτάσεις στο θέμα :)

Είπα να ξεκινήσω ένα project που γυροφέρνω πολύ καιρό στο μυαλό μου. Θέλω λοιπόν να κάνω ένα πρόγραμμα που καταγράφω τα άλμπουμ στη δισκοθήκη μου. Απλό ακούγεται και πιστεύω πως είναι απλό. Ξεκίνησα χθες τη σχεδίαση των τάξεων που θα χρησιμοποιηθούν στο χαρτί και πριν λίγο άρχισα να γράφω τον κώδικα.

Η κύρια ιδέα είναι να έχω σαν αντικείμενο το άλμπουμ, το δισκάκι. Οπότε θα γράφω όλες τις πληροφορίες που έχει για παράδειγμα όνομα συγκροτήματος, τίτλος άλμπουμ, αριθμός κομματιών, ονόματα κομματιών, είδος κλπ.

Αρχίζω με σχόλια πάνω στις τάξεις που έχω σκεφτεί.

Artist...
Το όνομα - φυσικά - του συγκροτήματος. Επίσης θα έχω δύο πίνακες, names & instruments όπου θα κρατάω τα ονόματα των μελών του συγκροτήματος΄και τί παίζουν (κιθάρα, μπάσο κλπ).

Genre...
Σ' ένα String θα κρατάω το είδος του άλμπουμ πχ black, thrash, power.

Title...
Το όνομα του άλμπουμ που θα καταχωρείται σ' ένα String. Σκέφτομαι να μη το κάνω ξεχωριστή τάξη αλλά απ' την άλλη έτσι μου φαίνεται πιο σωστό. Θα δείξει.

Track...
Εδώ θα έχω πληροφορίες για το κάθε τραγούδι δηλαδή τον τίτλο του και τη διάρκειά του.

Album...
Η σημαντικότερη τάξη. Θα έχει τα εξής πεδία: artist, title, genre, numOfSongs, yearOfRelease, tracks. To tracks θα είναι πίνακας τύπου Track.

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

Η ενέργειες που θέλω να κάνω είναι:
  • Εισαγωγή νέου άλμπουμ
  • Ταξινόμηση κατά τίτλο άλμπουμ/συγκρότημα/χρονιά
  • Εύρεση κι εμφάνιση στοιχείων άλμπουμ

Όταν ασχοληθώ και με streams, θα μπορέσω να κάνω ανάγνωση/εγγραφή από/σε αρχείο. Μέχρι στιγμής δεν έχω αυτή τη δυνατότητα.

Επίσης, το πρόγραμμα δε μπορεί να έχει γραφικό περιβάλλον αφού ουδέποτε στη σχολή ασχοληθήκαμε με κατασκευή GUI. Οπότε κι αυτό θα ολοκληρωθεί αργότερα.

Το πρόγραμμα ξεκίνησα να το γράφω σε NetBeans ούτως ώστε να είναι εύκολο το πακετάρισμα σε jar.

Αυτά μέχρι στιγμής. Αν διαβάσατε όλο το post κι έχετε κάποια σχόλια ή προτάσεις, καλοδεχούμενα είναι.

Δευτέρα 24 Δεκεμβρίου 2007

Java Java Java

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

Code Conventions (pdf): Το αρχείο αυτό μου το έστειλε ο Πάρις Αποστολόπουλος (blog) σε κάποια email που είχαμε ανταλλάξει. Πολύ ενδιαφέρον κείμενο μιας κι αναφέρονται όλες οι συμβάσεις που χρησιμοποιούνται στον κώδικα της Java.

Code of Ethics (pdf): Αυτό το αρχείο το είχε ανεβάσει ο καθηγητής μου στη σχολή στη σελίδα του και είπα να το κατεβάσω. Αν και δε το 'χω διαβάσει ακόμα (σκοπεύω να το κάνω αυτές τις μέρες), είναι καλή ενημέρωση για τα... μελλούμενα.

Thinking In Java, 3rd Edition (free e-book/zip): Κι αυτό απ' τη σελίδα του καθηγητή μου, μνημονεύεται από πολλούς ως έναν απ' τους καλύτερους οδηγούς για εκμάθηση της Java.

Λογισμικό Προσομείωσης και Δομών Δεδομένων (jar): Ένα πολύ ωραίο πρόγραμμα γραμμένο σε Java (φυσικά) που δείχνει με γραφικό τρόπο διάφορους αλγορίθμους. Μέχρι στιγμής ο καθηγητής μας μας έδειξε τις Μεθόδους Ταξινόμησης αλλά το πρόγραμμα έχει πολλέεεεεες άλλες δυνατότητες.

Advanced Programming for the Java2 Platform (free e-book/zip): Δεν το έχω τσεκάρει καθόλου αλλά σίγουρα θ' αξίζει. Νομίζω πως τέτοιοι οδηγοί δεν πρέπει να πηγαίνουν χαμένοι.

Όλα τα παραπάνω αρχεία, τα έχω ανεβάσει στο λογαριασμό μου στο Box.net για εύκολο μοίρασμα. Μπορείτε να τα τσεκάρετε από το link δεξιά (Misc Files).

Δίνω και το link του καθηγητή μου για να τηρήσω τα credits. Link.

Δευτέρα 29 Οκτωβρίου 2007

Prolog sucks...

Ε ναι. Εντάξει, είναι γλώσσα προγραμματισμού που χρησιμοποιείται στη Τεχνητή Νοημοσύνη, αλλά είναι ΤΟΣΟ διαφορετική απ' τις γλώσσες που κάναμε ως τώρα, που είναι αρκετά δύσκολο να συνηθίσεις. Για παράδειγμα, ένα "πρόγραμμα" σε Prolog μπορεί να είναι το εξής:

father(cronus,zeus).

Και μετά κάνεις την ερώτηση "Ποιός είναι ο πατέρας του Δία;" γράφοντας : ?- father(X,zeus)..

Και το δύσκολο είναι στις συσχετίσεις ανάμεσα στ' αντικείμενα όπως zeus, cronus, hera, hestia κλπ. Λόγω του ότι δεν έχει μεθόδους όπως η Java, C++ κλπ πρέπει να φτιάξεις κανόνες για τις συσχετίσεις μεταξύ των αντικειμένων. Για να κάνεις τον κανόνα του grandparent(Χ,Υ) για παράδειγμα, πρέπει να βάλεις στο παιχνίδι και μι' άλλη μεταβλητή. Αστα να πάνε.

Κατεβάζεις το SWI-Prolog που έχει ενσωματωμένο compiler. Το μόνο που έχεις να κάνεις είναι ν' αποθηκεύσεις τον κώδικα με κατάληξη .pl και μετά διπλοκλικάρεις το αρχείο, κάνει compile και τρέχει. Το καλό είναι ότι η γλώσσα δουλεύει και σε Vista.

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

Πάντως απ' την πρώτη ματιά δε μου πολυαρέσει αυτός ο τρόπος προγραμματισμού. Εγώ θέλω να ξεκινάω έτσι:

import java.io.*;
class Metal {
   public static void main(String args[]) throws IOException {
      BufferedReader input = new BufferedReader(new InputStreamReader(System.in); 
      System.out.println("Heavy Metal is the Law!!!");
      System.out.println("Dwse symvoloseira: ");
      String var = input.readLine();
      System.out.println(var);
   }
}

Αυτό μάλιστα. Απλό πρόγραμμα Java. Και τις κλάσεις μου έχω, σύνθεση χρησιμοποιώ, κληρονομικότητα...