Page 1 of 7

Daily Programming Thread

Posted: Tue Dec 03, 2013 9:49 pm
by LexTalionis
Λοιπόν,στόχος του thread :
Να μείνει alive και πάντα να βρίσκεται στα new posts :-)

Τι συζητάμε ; Project με τα οποία ασχολούμαστε,θέλουμε να ασχοληθούμε,κομμάτια κώδικα που μας μπέρδεψαν/μας έφαγαν χρόνο για χαζομάρα,ερωτήσεις σχετικά με προγραμματισμό , πράγματα που ανακαλύψαμε , απορίες κτλπ . Ίσως κάποιοι να θέλουν να ασχοληθούν περισσότερο με προγραμματισμό,αλλά να μην μπορούν να βρουν κάποια ωραία ιδέα , οπότε θα μπορούσαν να ρωτήσουν εδώ για ιδέες :)

Επίσης δεν θέλω κάποιος να φοβηθεί επειδή ίσως να ναι newb . Όλοι είμαστε/ήμασταν ,και αυτό εδώ μπορεί να μας βοηθήσει να ξεφύγουμε πιο γρήγορα και εύκολα από την "newbίστικη" κατάσταση μας .

Και αφού είπα λίγα σχετικά με το πως σκέφτομαι εγώ το thread,ήρθε η ώρα να μιλήσω πρώτος .
Η πιο κοντινή βλακεία που έκανα ,ήταν στο git να θέτω global.mail = kati@mail.com αντί για global.email = kati@mail.com . Μου κόστισε κοντά στις 3 ώρες να καταλάβω γιατί δεν μου εμφάνιζε στα commits του github το profile μου .
Εγώ στο κοντινό μέλλον(εντός 1-2 εβδομάδων) σκέφτομαι να φτιάξω custom ui σε android για ένα chat app . Ουσιαστικά θα μοιαζει πάρα πολύ με το ui που χει τώρα το facebook chat .

Στο μακρινό μέλλον θέλω να φτιάξω botaki για mmorpg . Ουσιαστικά σαν aimbot θα ναι ,και αν τελειώσει το project αυτό και φαρμάρει μηχανικά, ίσως να του φτιάξω ai για να κάνει περισσότερα πράγματα . :-D

Re: Daily Programming Thread

Posted: Tue Dec 03, 2013 10:02 pm
by Funk
Δεν είναι τόσο programming, αλλά σήμερα χάλασα και ξαναέστησα 3 φορές το wordpress μέχρι να καταλάβω πως μπορώ να αλλάξω τα permalinks.
Το όνομα του site είναι "Α noob's website" ...oh well...

Re: Daily Programming Thread

Posted: Tue Dec 03, 2013 11:22 pm
by Spongebobu
Ωραίο thread και μακάρι να συμμετάσχουν περισσότεροι (φοιτητές Πληροφορικής δεν είμαστε?).

On topic:
Επειδή τώρα τελευταία ασχολούμαι με functional programming και συγκεκριμένα με clojure, για πείτε την γνώμη σας κατα πόσο πιστεύετε αξίζει ο συναρτησιακός προγραμματισμός και αν σας έχει βοηθήσει πουθενά. Προσωπικά πιστεύω βοηθάει πολύ στο scalability και την καλύτερη σύνταξη προγραμμάτων και πολλές τεχνικές μπορούν να μεταφερθούν και σε OO/procedural γλώσσες (π.χ. immutability). Το κακό είναι οτι για πολλούς είναι "ξένη" μεθοδολογία και δεν βλέπουν το νόημα να εκφράζουν τα προγράμματα τους ως μαθηματική φόρμουλα, στο οποίο ως ενα βαθμό συμφωνώ.

Also, αν τον ενδιαφέρει κάποιον μπορούμε να κάνουμε κανένα code golf challenge. :-D

Re: Daily Programming Thread

Posted: Tue Dec 03, 2013 11:58 pm
by michalis
(please delete)

Re: Daily Programming Thread

Posted: Wed Dec 04, 2013 1:29 am
by Anemos
Spongebobu wrote:Ωραίο thread και μακάρι να συμμετάσχουν περισσότεροι (φοιτητές Πληροφορικής δεν είμαστε?).

On topic:
Επειδή τώρα τελευταία ασχολούμαι με functional programming και συγκεκριμένα με clojure, για πείτε την γνώμη σας κατα πόσο πιστεύετε αξίζει ο συναρτησιακός προγραμματισμός και αν σας έχει βοηθήσει πουθενά. Προσωπικά πιστεύω βοηθάει πολύ στο scalability και την καλύτερη σύνταξη προγραμμάτων και πολλές τεχνικές μπορούν να μεταφερθούν και σε OO/procedural γλώσσες (π.χ. immutability). Το κακό είναι οτι για πολλούς είναι "ξένη" μεθοδολογία και δεν βλέπουν το νόημα να εκφράζουν τα προγράμματα τους ως μαθηματική φόρμουλα, στο οποίο ως ενα βαθμό συμφωνώ.

Also, αν τον ενδιαφέρει κάποιον μπορούμε να κάνουμε κανένα code golf challenge. :-D
Νομίζω ότι αξίζει. Πλέον όλες οι σύγχρονες γλώσσες έχουν αποκτήσει χαρακτηριστικά συναρτησιακών γλωσσών προγραμματισμού. Για παράδειγμα, όλες οι γλώσσες (βλ. C#, Ruby, Python, C++11, σε λίγο καιρό ΚΑΙ η Java) υποστηρίζουν lambda expressions, ένας μηχανισμός ο οποίος υλοποιήθηκε αρχικά στη Lisp και προήλθε από τον λ-λογισμό και τα μαθηματικά. Και φυσικά δεν είναι μόνο αυτό. Immutability, lazy evaluation, currying, closures...... Άσε που τα τελευταία χρόνια όλο και περισσότερες γλώσσες δημιουργούνται που τρέχουν στη JVM και εννοείται πως έχουν full access σε ολες τις βιβλιοθήκες της Java. Φαίνεται πως υπάρχει μία τάση σύγκλισης declarative και imperative style.

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

Τον τελευταίο καιρό, όταν έχω λίγο χρόνο ξεφυλλίζω το Real World Haskell.

Re: Daily Programming Thread

Posted: Wed Dec 04, 2013 10:05 am
by X-ray
Εγώ τον τελευταίο καιρό ασχολούμαι με Drupal / PHP / mySQL.
Μια χαρά μου φαίνεται so far, αν και η μετάβαση από .NET / C# / Oracle ήταν κάπως σκληρή :razz:
Ασχολείται κανένας άλλος με drupal;

Re: Daily Programming Thread

Posted: Wed Dec 04, 2013 10:11 am
by ja_the_invincible
Python κυρίως πάνω σε flask με βάση mongodb και background task running με celery.Πολλές πολλές δυνατότητες και πιστεύω θα τα δούμε πιο πολύ στο μέλλον.Θα πρότεινα όποιος ασχολείται με web να τα κοιτάξει σαν κάτι εναλλακτικό που αποκτά πολύ hype τελευταία.

Re: Daily Programming Thread

Posted: Wed Dec 04, 2013 1:49 pm
by ThOdOr1s
Εγω χθες αργα το βραδυ καθησα και διαβασα αυτο.

Δεν εγραψα κωδικα, αυτο θα γινει μετα το μπουγιο εργασιων που εχουμε τωρα. Αλλα κατι καταλαβα τουλαχιστον... Δεν ειναι τοσο τραγικα τα πραγματα οσο τα περιγραφει ο moodie... :smt005

Re: Daily Programming Thread

Posted: Thu Dec 05, 2013 11:47 am
by m4ver1ck
Λοιπόν η φάση έχει ως εξής:

Ξαδελφός μου, πιτσιρικάς (μόλις μπήκε στο γυμνάσιο), με τραβολογάει να του μάθω προγραμματισμό. Το ζήτημα είναι το εξής: Σε ποια γλώσσα να του δείξω, μιας και αμφιταλαντεύομαι μεταξύ python και java, με την πλάστιγγα να γέρνει πιο πολύ προς την πρώτη κυρίως λόγω της απλότητας του συντακτικού της και αφου μιλάμε για πιτσιρίκι, δεν θα γλαρώσει τόσο εύκολα. Αλλά από την άλλη δεν θα μπορεί να εξοικιωθει με βασικές έννοιες προγραμματισμού και θα αποκτήσει κακές συνήθειες στο "γράψιμο".

Εσείς τι θα διαλέγατε σε μια τέτοια περίπτωση?

Re: Daily Programming Thread

Posted: Thu Dec 05, 2013 11:55 am
by ja_the_invincible
Αν και εξελίσσομαι σε fan της python δεν θα την πρότεινα για πρώτη γλώσσα.Κατά την γνώμη μου καλύτερα κάποιος όταν ξεκινάει προγραμματισμό να ασχοληθεί με type strict γλώσσες, να καταλάβει πώς δουλεύει αυτό το πράγμα στην μνήμη , να μάθει πώς δουλεύουν οι pointers, κλπ.Η python παρέχει πολλές ευκολίες σίγουρα για ένα developer που έχει κάνει c/c++/java ωστόσο για ένα πρωτάρη σκιπάρει πολύ βασικά πράγματα τα οποία είναι ανορθόδοξο να τα καλύψει μετά.Καλύτερα java & στην αρχή το concept να είναι functional και μόνο.Ακόμα καλύτερα c/c++.

Re: Daily Programming Thread

Posted: Thu Dec 05, 2013 11:57 am
by cypher
Κατ'εμε C με πολύ βασικά παραδείγματα και μικρά προβληματάκια που θα λύvει. Το http://www.mgiurdas.gr/book-209.aspx εχει ενα σωρό εύκολα παραδειγματάκια/ασκήσεις και έχει και cd με κώδικα για να τσεκάρει. Θα πάρει ίσως 1-2 εβδομάδες παραπάνω διάβασμα αλλα αξίζει. Python είναι υπεραπλουστευμένη και δεν θα είναι αρκετά challenging, και η java έχει αρκετές ιδιαιτερότητες και libs που θα τον κουράζουν και δεν θα έχουν σχέση με τα προβληματακια που θα πρέπει να λύσει (π.χ. συνεχή conversions ανάμεσα σε data types).

Re: Daily Programming Thread

Posted: Thu Dec 05, 2013 2:50 pm
by nachos
Θα σου πρότεινα να παίξεις με Visual Basic .NEΤ. Είναι ψηλά-χαμηλά το ίδιο πράμα με Java, αλλά έχει το εξής καλό: εκτός από κλάσεις, μπορείς να γράφεις και modules (όπου όλα τα methods είναι εξ' ορισμού static, οπότε δεν μπλέκεις με το να εξηγείς εξαρχής τι είναι το static κλπ). Επίσης, το συντακτικό της VB αν και λίγο φλύαρο, θεωρώ ότι βοηθάει εξαιρετικά στην εκμάθηση ένα πρωτάρη. Σκέψου ότι πρακτικά η ψευδογλώσσα που κάναμε στο λύκειο, ήταν VB 6 μεταφρασμένη στα ελληνικά, με ελάχιστες παραλλαγές.

Δες ένα παράδειγμα με το κλασσικό hello world, όπως θα το έγραφες με το καλημέρα σε visual studio 2010:

Code: Select all

Module Module1

    Sub Main()
        Console.WriteLine("Hello world!")
    End Sub

End Module

Re: Daily Programming Thread

Posted: Thu Dec 05, 2013 10:56 pm
by LexTalionis
Μιας και μόλις μπήκε γυμνάσιο,συμφωνώ με τον nachos ,καθώς θα θέλει άμεσα αποτελέσματα (και ui σχετικά γρήγορα), και επίσης θα βρει πιο χρήσιμα tutorials (δλδ να εξηγούν το παραμικρό ξανά και ξανά ) .
Με αυτό δεδομένο,στην σύγκριση visual studio vs python,διαλέγω python .

Βέβαια καλό θα ταν να άρχιζε από c,αλλά πραγματικά,εδώ συμφοιτητές μας δεν έχουν την υπομονή να την μάθουν,θα χε ένα παιδί 1ης γυμνασίου ;

Re: Daily Programming Thread

Posted: Fri Dec 06, 2013 1:50 am
by rexes
Πολυ ωραίο thread!

Ήθελα να ρωτήσω κάτι σχετικά με App Engine και γενικότερα τεχνολογίες Cloud της Google.

Έχει ασχοληθεί κανείς;; Εχω μια απορία πάνω σε Projects για το App Engine αν εχει ασχοληθει κανεις πολυ!

Re: Daily Programming Thread

Posted: Fri Dec 06, 2013 12:48 pm
by PatrickFTW
Παιδιά για να χρησιμοποιήσω το Android SDK πρέπει οπωσδήποτε να έχω Java 6 ή μπορώ και με με Java 7 ?

Re: Daily Programming Thread

Posted: Fri Dec 06, 2013 12:56 pm
by cypher
Με eclipse + adt δεν ειναι compatible οχι. Με android studio μπορείς να το ρυθμίσεις να παίζει απλά μερικά καινούργια features της γλώσσας δεν θα λειτουργουν. Δες εδώ http://stackoverflow.com/questions/7153 ... th-android

Re: Daily Programming Thread

Posted: Fri Dec 06, 2013 1:05 pm
by nachos
cypher wrote:Με eclipse + adt δεν ειναι compatible οχι. Με android studio μπορείς να το ρυθμίσεις να παίζει απλά μερικά καινούργια features της γλώσσας δεν θα λειτουργουν. Δες εδώ http://stackoverflow.com/questions/7153 ... th-android
Νομίζω ότι μπορεί να παίξει με την έννοια ότι μπορείς να θέσεις το runtime compatibility σε 1.6. Οπότε αν έχεις ήδη εγκατεστημένo τo 1.7 να μη χρειάζεσαι installation του 1.6 sdk.

Re: Daily Programming Thread

Posted: Sun Dec 08, 2013 2:27 am
by 001

Code: Select all

import java.awt.event.*;
import acm.program.*;
import acm.graphics.*;

public class mouse extends GraphicsProgram {
	public void run(){ 
		
		GRect rect=new GRect(getWidth()/2,getHeight()/2,100,80); 
		rect.setFilled(true);
		add (rect); 
		
		while(true){
			rect.move(dx,dy);
			pause(10);
		}
	}
	public void keyPressed(KeyEvent e) {
        int key = e.getKeyCode();

        if (key == KeyEvent.VK_LEFT) {
            dx = -1;
        }

        if (key == KeyEvent.VK_RIGHT) {       
            dx = 1;
        }

        if (key == KeyEvent.VK_UP) {        
            dy = -1;
        }

        if (key == KeyEvent.VK_DOWN) {
            dy = 1;
        }
	}
	private int dx;
	private int dy;
}
Μπορεί κάποιος να μου εξηγήσει τι κάνει αυτός ο κώδικας?
Προσπαθώ να καταλάβω πως να χρησιμοποιώ το πληκτρόλογιο ως ακροατή συμβάντων.
Ευχαριστώ :-)

Re: Daily Programming Thread

Posted: Sun Dec 08, 2013 5:33 pm
by rexes
001 wrote:

Code: Select all

import java.awt.event.*;
import acm.program.*;
import acm.graphics.*;

public class mouse extends GraphicsProgram {
	public void run(){ 
		
		GRect rect=new GRect(getWidth()/2,getHeight()/2,100,80); 
		rect.setFilled(true);
		add (rect); 
		
		while(true){
			rect.move(dx,dy);
			pause(10);
		}
	}
	public void keyPressed(KeyEvent e) {
        int key = e.getKeyCode();

        if (key == KeyEvent.VK_LEFT) {
            dx = -1;
        }

        if (key == KeyEvent.VK_RIGHT) {       
            dx = 1;
        }

        if (key == KeyEvent.VK_UP) {        
            dy = -1;
        }

        if (key == KeyEvent.VK_DOWN) {
            dy = 1;
        }
	}
	private int dx;
	private int dy;
}
Μπορεί κάποιος να μου εξηγήσει τι κάνει αυτός ο κώδικας?
Προσπαθώ να καταλάβω πως να χρησιμοποιώ το πληκτρόλογιο ως ακροατή συμβάντων.
Ευχαριστώ :-)
Την keyPressed δεν καταλαβαίνεις;

Re: Daily Programming Thread

Posted: Sun Dec 08, 2013 5:50 pm
by nachos
Μέσα στην run, κατασκευάζεται ένα ορθογώνιο σχήμα, και τοποθετείται μέσα στον καμβά της GraphicsProgram. Έπειτα, η άπειρη επανάληψη, προκαλεί σε κάθε βήμα μετακίνηση του ορθογωνίου κατά χ και ψ, ίση με τις ποσότητες dx και dy αντίστοιχα. Οι ποσότητες αυτές όπως παρατηρείς είναι δηλωμένες στην κλάση GraphicsProgram, και όταν ξεκινάει το πρόγραμμα είναι ίσες με 0 (άρα αρχικά το ορθογώνιο παραμένει ακίνητο).

Εδώ έρχεται να μπεί στο παιχνίδι η μέθοδος keyPressed. Για λόγους που δεν είναι επί της παρούσης να σου εξηγηθεί, η keyPressed έχει ιδιαίτερη ερμηνεία στην κλάση GraphicsProgram, και ουσιαστικά καλείται κάθε φορά που χρήστης θα πατήσει οποιοδήποτε πλήκτρο από το πληκτρολόγιο. Όπως παρατηρείς, στην πρώτη της γραμμη, ο κώδικας αναθέτει σε μια μεταβλητή τον κωδικό του πλήκτρου που πατήθηκε. Έπειτα, εξετάζει αν είναι κάποιο από τα τέσσερα βέλη του πληκτρολογίου (αριστερά, δεξιά, πάνω, κάτω), και ανά περίπτωση ενημερώνει την αντίστοιχη μεταβλητή μετατόπισης (dx, dy).

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

Re: Daily Programming Thread

Posted: Mon Dec 09, 2013 4:32 pm
by 001
001 wrote:
rexes wrote:
001 wrote:

Code: Select all

import java.awt.event.*;
import acm.program.*;
import acm.graphics.*;

public class mouse extends GraphicsProgram {
	public void run(){ 
		
		GRect rect=new GRect(getWidth()/2,getHeight()/2,100,80); 
		rect.setFilled(true);
		add (rect); 
		
		while(true){
			rect.move(dx,dy);
			pause(10);
		}
	}
	public void keyPressed(KeyEvent e) {
        int key = e.getKeyCode();

        if (key == KeyEvent.VK_LEFT) {
            dx = -1;
        }

        if (key == KeyEvent.VK_RIGHT) {       
            dx = 1;
        }

        if (key == KeyEvent.VK_UP) {        
            dy = -1;
        }

        if (key == KeyEvent.VK_DOWN) {
            dy = 1;
        }
	}
	private int dx;
	private int dy;
}
Μπορεί κάποιος να μου εξηγήσει τι κάνει αυτός ο κώδικας?
Προσπαθώ να καταλάβω πως να χρησιμοποιώ το πληκτρόλογιο ως ακροατή συμβάντων.
Ευχαριστώ :-)
Την keyPressed δεν καταλαβαίνεις;
Ναι.... :smt013
και βασικά γιατι δεν δουλεύει ο κώδικας ...
-------
nachos wrote:Μέσα στην run, κατασκευάζεται ένα ορθογώνιο σχήμα, και τοποθετείται μέσα στον καμβά της GraphicsProgram. Έπειτα, η άπειρη επανάληψη, προκαλεί σε κάθε βήμα μετακίνηση του ορθογωνίου κατά χ και ψ, ίση με τις ποσότητες dx και dy αντίστοιχα. Οι ποσότητες αυτές όπως παρατηρείς είναι δηλωμένες στην κλάση GraphicsProgram, και όταν ξεκινάει το πρόγραμμα είναι ίσες με 0 (άρα αρχικά το ορθογώνιο παραμένει ακίνητο).

Εδώ έρχεται να μπεί στο παιχνίδι η μέθοδος keyPressed. Για λόγους που δεν είναι επί της παρούσης να σου εξηγηθεί, η keyPressed έχει ιδιαίτερη ερμηνεία στην κλάση GraphicsProgram, και ουσιαστικά καλείται κάθε φορά που χρήστης θα πατήσει οποιοδήποτε πλήκτρο από το πληκτρολόγιο. Όπως παρατηρείς, στην πρώτη της γραμμη, ο κώδικας αναθέτει σε μια μεταβλητή τον κωδικό του πλήκτρου που πατήθηκε. Έπειτα, εξετάζει αν είναι κάποιο από τα τέσσερα βέλη του πληκτρολογίου (αριστερά, δεξιά, πάνω, κάτω), και ανά περίπτωση ενημερώνει την αντίστοιχη μεταβλητή μετατόπισης (dx, dy).

Με αυτόν τον τρόπο, αν ο χρήστης πατήσει ένα οποιοδήποτε βέλος, θα προκαλέσει (στην επόμενη επανάληψη) αντίστοιχη μετατόπιση στο ορθογώνιο. Παρατήρησε επίσης ότι με τον τρόπο που είναι γραμμένος ο κώδικας, αρκεί να πατήσει κανείς μια φορά μόνο ένα βέλος, και μετά το ορθογώνιο θα συνεχίσει να κινείται προς αυτή την κατεύθυνση, μέχρις ότου ο χρήστης να αποφασίσει να διατάξει να κινηθεί προς την αντίθετη.
1ον) Τον κώδικα τον έγραψα εγώ... αφού είδα τους κωδικούς απο τα βελάκια...
2ον) το keyPressed δεν καταλαβαίνω.
3ον) Συμφωνώ απόλυτα...οτι έτσι δουλεύει το πρόγραμμα,αλλά στην πράξη δεν τρέχει όταν πατάω βελάκι.Το object μένει ακίνητο.
4ον)Επειδή είναι η πρώτη μου επαφή με keyPressed είναι σίγουρα σωστά γραμμένος ο κώδικας?
5ον) Ευχαριστώ πολύ :)

Re: Daily Programming Thread

Posted: Mon Dec 09, 2013 4:47 pm
by nachos
Α οκ, νόμιζα ότι ήταν sample κώδικας και ότι έπαιζε σωστά (άρα ότι υπήρχε και η κατάλληλη υποδομή για να παίξει).

EDIT:

Μόλις πρόσεξα αυτή τη μέθοδο:

Code: Select all

addKeyListeners()
Θα πρέπει να την καλέσεις στην run στον κώδικα που ήδη έχεις (πριν το άπειρο while), ώστε να καλείται καταληκτικά η keyPressed όταν πρέπει.