﻿<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
> <channel><title>GreekTuts &#187; Προγραμματισμός</title> <atom:link href="http://greektuts.net/category/programming/feed/" rel="self" type="application/rss+xml" /><link>http://greektuts.net</link> <description>Ελληνικά Βοηθήματα</description> <lastBuildDate>Mon, 30 Jan 2012 13:52:21 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>Οι Κλάσεις στην Ruby</title><link>http://greektuts.net/classes-in-ruby/</link> <comments>http://greektuts.net/classes-in-ruby/#comments</comments> <pubDate>Mon, 12 Dec 2011 17:33:08 +0000</pubDate> <dc:creator>kkostopoulos</dc:creator> <category><![CDATA[Ruby]]></category> <category><![CDATA[classes]]></category> <category><![CDATA[classes in ruby κλάσεις στην ruby]]></category> <category><![CDATA[ruby]]></category> <category><![CDATA[ruby class]]></category> <guid
isPermaLink="false">http://greektuts.net/?p=5600</guid> <description><![CDATA[Έχουμε ήδη δει τα βασικά στοιχεία της Ruby όπως τη σύνταξη, τις βασικές  μεθόδους και πως φτιάχνουμε τις δικές μας μεθόδους. Αυτό που σίγουρα ακούει κανείς  στη Ruby είναι ότι όλα είναι κλάσεις. Πράγματι, όπως έχουμε δει,  ακόμα και η εκτέλεση ενός προγράμματος γίνεται μέσα από μία κλάση.]]></description> <content:encoded><![CDATA[<h1>Εισαγωγή</h1><p>Αν δώσετε για παράδειγμα την εντολή puts self.class (είτε σε irb είτε φτιάξτε ένα αρχείο .rb μόνο με αυτή την εντολή) θα πάρετε ως έξοδο:</p><pre>puts self.class
=&gt;Object</pre><p>Δηλαδή ακόμα και όταν απλά ξεκινάμε ένα πρόγραμμα είμαστε μέσα στην κλάση Object. Αυτό σημαίνει πρακτικά ότι χωρίς καν να ορίσουμε κάποια δική μας κλάση μπορούμε να καλέσουμε όλες τις μεθόδους τις Object.</p><p>Πριν προχωρήσω να υπενθυμίσω  ότι $x σημαίνει global μεταβλητή, @x σημαίνει ιδιότητα κάποιας κλάσης και @@x σημαίνει αντικείμενο του τύπου της κλάσης που ορίσαμε.</p><p>Σε αυτό το σημείο θα ήθελα επίσης να επισημάνω οτι στο σημερινό tutorial θεωρούνται ως γνωστές απο τον αναγνώστη οι τις βασικές αρχές του αντικειμενοστραφούς προγραμματισμού (κλάσεις,μέθοδοι,κληρονομικότητα). Διαφορετικά, θα σας πρότεινα  πρώτα να ψάξετε λίγο αυτές τις έννοιες.</p><p><strong>Ιεραρχία κλάσεων</strong></p><p>Αξίζει τον κόπο να δούμε το πως ιεραρχούνται οι κλάσεις στη Ruby.  Να σημειώσουμε ότι η ιεραρχία των κλάσεων που παρουσιάζεται σε αυτό το tutorial αφορά την έκδοση Ruby 1.8.7. Στις τελευταίες εκδόσεις της Ruby υπάρχει μια μικρή αλλαγή στην ιεραρχία αυτή, οπότε σε περίπτωση που χρησιμοποιείτε κάποια άλλη έκδοση μπορείτε να το ψάξετε.</p><p>Ανεξάρτητα όμως από την έκδοση που χρησιμοποιείται δοκιμάστε την εντολή superclass για να βρείτε τον γονέα parent class της κλάσης που σας ενδιαφέρει, φτάνοντας μέχρι την κορυφή. Σε αυτή την κορυφή θα βρείτε την κλάση Object. Εάν δώσετε :</p><pre>puts Object.superclass
=&gt;nil</pre><p>Θα λάβετε ως απάντηση nil ακριβώς επειδή είναι στην κορυφή της ιεραρχίας. Αυτό σημαίνει ότι όλες οι κλάσεις την κληρονομούν. Δείτε το παράδειγμα στο αρχείο classes.rb :</p><pre>puts self.class
puts Object.superclass
puts Class.superclass
puts Module.superclass
=&gt;</pre><p>Object<br
/> nil<br
/> Module<br
/> Object</p><p>Από τα αποτελέσματα μπορούμε να καταλάβουμε ότι με την εκκίνηση ενός προγράμματος είμαστε στην Object που είναι και η κορυφή της ιεραρχίας. Επίσης υπάρχει μία κλάση Class που κάνει δουλειά για μας χωρίς να μας μπερδεύει και έχει ως υπερκλάση της, γονέα δηλαδή, την κλάση Module. Ομοίως η κλάση Module βρίσκεται κάτω από την κλάση Object, που είναι ο γονέας της Module.</p><h2>Modules και Classes</h2><p>Ποίες είναι όμως οι διαφορές module και class;</p><ul><li>Τα modules είναι συλλογές μεθόδων και σταθερών<a
title="" href="#ss1">[1]</a>. Δεν μπορούν να έχουν αντικείμενα δηλαδή instances. Αντίθετα οι κλάσεις έχουν αντικείμενα (instances), και έχουν το λεγόμενο per-instance state (instance variables) δηλαδή κάθε αντικείμενο μπορεί να έχει τις δικές τους τιμές μεταβλητών και να βρίσκεται σε διαφορετική κατάσταση από άλλα αντικείμενα.</li><li>Τα modules μπορούν να αναμειχθούν με classes και άλλα modules. Με αυτόν τον τρόπο, οι μέθοδοι και οι σταθερές ενός  module προστίθεται σε αυτά άλλων module ή άλλων κλάσεων επεκτείνοντας τη λειτουργία τους. Οι κλάσεις, αν και μπορούν να κληρονομηθούν, δεν αναμειγνύονται κατά αυτόν τον τρόπο.</li><li>Μία κλάση μπορεί να κληρονομήσει από μία άλλη κλάση αλλά όχι από κάποιο module.</li><li>Ένα module δεν μπορεί να κληρονομήσει ούτε από κάποια κλάση ούτε από κάποιο άλλο module.</li></ul><p>Εδώ να σημειώσουμε ότι άλλο κληρονομώ π.χ. μία κλάση από μία άλλη κλάση και άλλο αναμειγνύω modules. Στα modules δηλαδή δεν έχουμε κληρονομικότητα. Πως όμως τότε μία κλάση ενσωματώνει ένα module και επεκτείνει τη λειτουργικότητά του;</p><p>Ας δούμε ένα παράδειγμα ανάμειξης κλάσης και module. Καταρχήν να αναφέρουμεότι το σώμα μίας κλάσης ορίζεται από ένα block κώδικα της μορφής:</p><pre>class &lt;classname&gt;
end</pre><p>Έχουμε τη δυνατότητα να ορίσουμε μεθόδους τύπου public, private και protected. Η δήλωση αυτή μπορεί να γίνει με δύο τρόπους.</p><p><strong><span
style="text-decoration: underline;">1ος τρόπος</span></strong></p><pre>class &lt;classname&gt;
protected
def my_protected method
...
end
…
private
def my_private method
…
end
…
public
def my_public method
…
end
...
end</pre><p><strong><span
style="text-decoration: underline;">2ος τρόπος</span></strong></p><pre>class &lt;classname&gt;
def my_protected method
...
end
…
def my_private method
…
end
…
def my_public method
…
end
…
public :my_public_method , …
protected :my_protected_method , …
private  :my_private_method , …
end</pre><p>Φυσικά είναι καθαρά θέμα ευκολίας, καλό είναι όμως να το έχετε υπόψη σας σε περίπτωση που πάρετε κώδικα από τρίτο άτομο.</p><p>Θεωρώ ότι είναι αρκετά απλό για να σχολιαστεί παραπάνω. Επιστρέφω λοιπόν στο παράδειγμα. Θα ορίσουμε μία δική μας κλάση Animal και θα αξιοποιήσουμε το έτοιμο module της Ruby Comperable. Όπως καταλαβαίνετε και από το όνομα, αυτό αξιοποιείται από την ίδια τη γλώσσα για να συγκρίνει τιμές. Είναι κλασικό παράδειγμα που δίνεται για τη Ruby. Στην κλάση μας θα ορίσουμε δύο μεταβλητές, ένα όνομα και  τον αριθμό των ποδιών για κάθε ζώο και θα δούμε πως μπορούμε εύκολα να κάνουμε ταξινόμηση των ζώων βάση του αριθμού ποδιών.</p><p>Γράφουμε λοιπόν:</p><pre>class Animal
include Comparable# δηλώνουμε ότι χρειαζόμαστε το συγκεκριμένο module
attr :legs #χρειάζεται, με αυτήν δίνουμε οδηγία ότι θα αξιοποιήσουμε τη
#μεταβλητή legs για τη σύγκριση
def initialize(name, legs) # η μέθοδος αυτή καλείται όταν καλούμε τη μέθοδο
#Animal.new και αρχικοποιεί τις μεταβλητές του
#αντικειμένου
@name, @legs = name, legs
end
def &lt;=&gt;(o) #η μέθοδος αυτή αξιοποιεί το module Comperable κάνοντας στην
#ουσία overload τους συγκεκριμένους τελεστές σύγκρισης που θα
#συναντήσουμε και στο module
return @legs &lt;=&gt; o.legs #εξηγούμε πως να γίνει η σύγκριση
end
def name #απλώς επιστρέφουμε τα αποτελέσματα
return @name
end
end
#δημιουργούμε 3 αντικείμενα-ζώα
c = Animal .new('cat', 4)
s = Animal .new('snake', 0)
p = Animal .new('parrot', 2)
#σύγκριση τιμών βάση της ιδιότητας legs
puts c &lt; s
puts s &lt; c
puts p &gt;= s
#ρωτάμε εάν η τιμή p.legs είναι ανάμεσα στις τιμές s.legs και c.legs
puts p.between?(s, c)
#κάνουμε ταξινόμηση
sorted = [p, s, c].sort
sorted.each{ |obj|  puts obj.name}
=&gt;false
true
true
true
snake
parrot
cat</pre><p>Όπως βλέπουμε, χωρίς να παιδευτούμε γράφοντας πολλές γραμμές κώδικα (μόλις 5) ενσωματώσαμε το module και δώσαμε στην κλάσης μας τη δυνατότητα να κάνει συγκρίσεις και ταξινόμηση αντικειμένων τύπου Animal. Με αυτόν τον τρόπο μπορούμε να γράφουμε γενικές μεθόδους σε modules και να χρησιμοποιούμε τον ίδιο κώδικα σε όποιες κλάσεις τον χρειαζόμαστε, αυτό δηλαδή που αποκαλούμε reusable code.</p><p>Στο σημείο αυτό οφείλουμε να εξηγήσουμε ότι η μέθοδος intialize μίας κλάσης καλείται όταν καλούμε τη μέθοδο new προκειμένου να δημιουργήσουμε ένα νέα αντικείμενο αυτής της κλάσης.</p><p>Επιπρόσθετα, αξίζει να αναφέρουμε ότι εάν θέλουμε να φτιάξουμε δικά μας modules πρέπει να θυμόμαστε φυσικά ότι γράφουμε μόνο μεθόδους και σταθερές. Η δήλωση του module είναι παρόμοια με αυτή μίας κλάσης, δηλαδή :</p><pre>module &lt;module_name&gt;
...
end</pre><h2>Κληρονομικότητα</h2><p>Φυσικά εκτός από τα modules μπορούμε να προσθέσουμε λειτουργικότητα στην κλάση μας κληρονομώντας κάποια άλλη κλάση. Ισχύουν και εδώ όσα ξέρετε για την κληρονομικότητα και από άλλες γλώσσες. Έτσι οι private μέθοδοι δεν κληρομούνται ενώ οι public μέθοδοι ναι. Για παράδειγμα εάν θέλαμε στην κλάση του προηγούμενου παραδείγματος η κλάση μας Animal να κληρονομήσει την κλάση ActiveRecords::Base, που χρησιμοποιείται συχνά με την Ruby on Rails, και μας επιτρέπει να επικοινωνούμε με βάσεις δεδομένων όπως η MySQL με πολύ απλό και βολικό τρόπο, τόσο βολικό που πρακτικά δε γράφουμε SQL. Αλλά αυτό ξεφεύγει από τα πλαίσια των όσων λέμε εδώ. Εμείς κρατάμε το ότι πρόκειται για μία κλάση που μας προσφέρει ότι χρειαζόμαστε για να επικοινωνήσουμε με μία βάση δεδομένων. Για το σκοπό αυτό δεν έχουμε παρά να γράψουμε:</p><pre>def Animal &lt; ActiveRecord::Base
…
end</pre><p>Σε αυτό το σημείο λογικά τίθεται το ερώτημα: “Μπορεί μία κλάση να κληρονομήσει από πολλαπλές κλάσεις;”. Δυστυχώς, η Ruby δεν το υποστηρίζει αυτό. Υπάρχει όμως λόγος. Η λογική είναι ότι εάν θέλουμε πολλές κλάσεις να έχουν τις ίδιες κοινές μεθόδους είναι πιο απλό να φτιάξουμε κάποιο module και να τις χειριζόμαστε από ένα κεντρικό σημείο δηλαδή μέσω του module.</p><h2>Προσοχή στα ονόματα κλάσεων και module</h2><p>Ας υποθέσουμε ότι θέλετε να φτιάξετε μία κλάση που να αφορά πίνακες αλλά δε θέλετε να έχει σχέση με την κλάση Arrays της Ruby γιατί μπορεί να θέλετε να έχει άλλα χαρακτηριστικά ή δομή. Συστήνεται να είστε προσεκτικοί στο πως θα την ονομάσετε. Αν π.χ. την ονομάσετε Array τι γίνεται; Ή τι γίνεται γενικότερα εάν βαφτίσω μία κλάση μου με το ίδιο όνομα με μία κλάση της Ruby;</p><p>Η απάντηση είναι ότι δεν ακυρώνετε την κλάση Array ή την αντίστοιχη άλλη της Ruby. Αλλά την επεκτείνετε. Εάν π.χ. γράψετε:</p><pre>class Array
def a_new_method
….
end
end</pre><p>προσθέτετε στον κώδικα της Array άλλη μία μέθοδο. Ακόμη έχω τη δυνατότητα να ορίσω μία υπάρχουσα μέθοδο της Array. Πρακτικά είναι σαν την κάνετε overload μόνο για το πρόγραμμά σας κάτι που ίσως να είναι επιθυμητό κάποιες φορές.</p><p>Γενικά, εάν δεν είστε σίγουροι πειραματιστείτε, ψάξτε και διαβάστε. Με αυτόν τον τρόπο θα μάθετε πως να φέρετε τη Ruby στα μέτρα σας και να μη σας φέρει εκείνη στα δικά της.</p><h2>Επίλογος</h2><p>Η Ruby είναι πράγματι μία αντικειμενοστραφής γλώσσα προγραμματισμού. Εφόσον είστε εξοικειωμένοι με τον αντικειμενοστραφή προγραμματισμό δε θα δυσκολευτείτε. Πειραματιστείτε και θα γοητευθείτε από το γεγονός ότι όλα στη Ruby είναι κλάσεις, ακόμα και η εκτέλεση του κώδικά σας γίνετε όπως είδαμε μέσω της κλάσης Object.</p><div><br
clear="all" /></p><hr
align="left" size="1" width="33%" /><div><a
title="" name="ss1">[1]</a> Θυμίζουν λίγο τα interfaces που συναντάμε σε άλλες γλώσσες όπως π.χ. java.</div></div> ]]></content:encoded> <wfw:commentRss>http://greektuts.net/classes-in-ruby/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Εντολές ελέγχου και συναρτήσεις στη Ruby</title><link>http://greektuts.net/diving-into-ruby-control-commands-and-functions/</link> <comments>http://greektuts.net/diving-into-ruby-control-commands-and-functions/#comments</comments> <pubDate>Mon, 14 Nov 2011 15:48:41 +0000</pubDate> <dc:creator>kkostopoulos</dc:creator> <category><![CDATA[Ruby]]></category> <category><![CDATA[control]]></category> <category><![CDATA[functions]]></category> <category><![CDATA[ruby]]></category> <category><![CDATA[ruby on rails]]></category> <category><![CDATA[ruby tutorial]]></category> <category><![CDATA[ruby tutς]]></category> <category><![CDATA[βοήθημα ruby]]></category> <category><![CDATA[εισαγωγή στην ruby]]></category> <category><![CDATA[εντολές ελέγχου]]></category> <category><![CDATA[κωσταντίνο κωστόπουλος]]></category> <category><![CDATA[συναρτήσεις]]></category> <guid
isPermaLink="false">http://greektuts.net/?p=5574</guid> <description><![CDATA[Στο προηγούμενο μάθημα παρουσιάσαμε  τα γενικά χαρακτηριστικά της Ruby και ασχοληθήκαμε με  την irb (ακόμα και για την online έκδοση). Είδαμε το πόσο εύκολα εγκαθίσταται η Ruby, μιλήσαμε για τους τελεστές της, τα ruby gems καθώς επίσης για  πως κάνουμε απλά loops και για την εντολή if. Αυτή τη φορά θα ασχοληθούμε με άλλες εντολές ελέγχου και βρόγχου καθώς και με το πως γράφουμε δικές μας συναρτήσεις. Εάν γνωρίζετε κάποια άλλη γλώσσα προγραμματισμού δε θα δυσκολευτείτε καθόλου από όσα θα δούμε σήμερα.]]></description> <content:encoded><![CDATA[<h1>Εντολές ελέγχου και βρόχων επανάληψης</h1><h2>Τελεστής ? :</h2><p>Έχουμε ήδη μιλήσει για την εντολή if στη Ruby,  πριν όμως προχωρήσουμε αξίζει να αναφέρουμε ότι στη Ruby θα βρείτε τον τελεστή που συναντάμε και στη C/C++  “συνθήκη <strong>?</strong> εντολή εάν ισχύει η συνθήκη <strong>:</strong> εντολή εάν ΔΕΝ ισχύει η συνθήκη”. Δηλαδή εάν ισχύει η συνθήκη εκτελείται η πρώτη εντολή, αλλιώς η δεύτερη.</p><p>Δοκιμάστε το εξής αρχείο (if_operator.rb) που περιέχει κώδικα από το επίσημο wiki books της Ruby (<a
href="http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Control_Structures">http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Control_Structures</a> , στο οποίο μπορείτε να βρείτε πρόσθετο υλικό για μελέτη):</p><pre>
a = 5
plus_or_minus = '+'
print "The number #{a}#{plus_or_minus}1 is: " + (plus_or_minus == '+' ? (a+1).to_s : (a-1).to_s)<strong>+</strong> "."
=&gt;The number 5+1 is: 6.
</pre><p>Το #{} και τη μέθοδο to_s τα αναφέραμε την προηγούμενη φορά.  Η print χρησιμοποιείται εδώ στη θέση της puts. Εν συντομία, ο τελεστής ελέγχει εάν θέλουμε να κάνουμε πρόσθεση ή αφαίρεση και εκτελεί την αντίστοιχη πράξη. Δοκιμάστε να αλλάξετε το plus_or_minus σε &#8216;-&#8217;. Επίσης σημειώστε ότι τα + που είναι υπογραμμισμένα χρησιμοποιούνται για να προσθέσουν Strings , πρακτικά “κολλάνε” το κείμενο με τις επεξηγήσεις με το αποτέλεσμα του τελεστή ? :.</p><h2>.times</h2><p>Έχουμε ήδη δει την 1.upto(5). Στη Ruby υπάρχει ένας ακόμα απλός τρόπος για τη δημιουργία loops. Δείτε τον παρακάτω κώδικα (αρχείο times.rb):</p><pre>
6.times{puts "This is a simple loop"}
puts ""
5.times do
puts "And this is a way to write a loop with more than one instructions"
end
=&gt;
</pre><blockquote><p> This is a simple loop<br
/> This is a simple loop<br
/> This is a simple loop<br
/> This is a simple loop<br
/> This is a simple loop<br
/> This is a simple loop<br
/> &nbsp;<br
/> And this is a way to write a loop with more than one instructions<br
/> And this is a way to write a loop with more than one instructions<br
/> And this is a way to write a loop with more than one instructions<br
/> And this is a way to write a loop with more than one instructions<br
/> And this is a way to write a loop with more than one instructions</p></blockquote><p>Είναι εύκολο να καταλάβουμε ότι η times είναι ιδιαίτερα βολική για απλά loops στα οποία ξέρουμε πόσες επαναλήψεις θέλουμε. Επίσης, σημειώστε ότι γενικά στη Ruby μπορούμε να έχουμε {} με μία εντολή μέσα τους ή να χρησιμοποιήσουμε τη δομή do-end ώστε να ορίσουμε ένα block εντολών.</p><h2>unless</h2><p>Συνεχίζουμε με την εντολή unless.  Από το όνομα και μόνο μπορείτε να καταλάβετε γιατί μιλάμε. Δοκιμάστε να τρέξετε τον παρακάτω κώδικα (unless.rb)</p><pre>
1.upto(5) do |x|
unless x!=3#αντί δηλαδή του if x==3
x=-3
end
puts x
end
=&gt;
</pre><blockquote><p> 1<br
/> 2<br
/> -3<br
/> 4<br
/> 5</p></blockquote><p>Όπως παρατηρείτε,  πρόκειται για την αντίθετη ή καλύτερα δυϊκή της if. Δηλαδή η εντολή ή οι εντολές μέσα στο block unless-end εκτελείται/εκτελούνται όταν δεν ισχύει η συνθήκη ελέγχου. Δοκιμάστε για παράδειγμα να αλλάξετε τον έλεγχο από x!=3 σε x==3. Τι παρατηρείτε;</p><h2>case</h2><p>Όπως σχεδόν σε όλες τις γλώσσες έτσι και εδώ με την case ελέγχουμε την τιμή μίας μεταβλητής χωρίς να βάλουμε πολλαπλά if  ή if-else. Ας δούμε ένα παράδειγμα όπου ελέγχουμε την τιμή ενός αριθμού (αρχείο case.rb):</p><pre>
number = 20
puts case number
when 0..100 then "#{number} is less than 100"
when 100..200 then "#{number} is greater than 100 and less than 200"
when 200..300 then "#{number} is greater than 200 and less than 300"
else "#{number} out of range.Please try again with different number."
end
=&gt;20 is less than 100
&nbsp;
</pre><p>Όπως είναι φανερό η δομή της εντολής είναι:</p><p>case τιμή για έλεγχο</p><pre>
when τιμή then …
when τιμή then …
else #προληπτικά, εκτελείται εφόσον δεν ισχύει καμία από τις παραπάνω συνθήκες
end
</pre><p>Με τη βοήθεια της κλάσης Range, που είδαμε και την προηγούμενη φορά, μπορούμε να ελέγξουμε όχι μόνο εάν η μεταβλητή number έχει μία συγκεκριμένη τιμή, όπως π.χ. σε άλλες γλώσσες, αλλά ακόμα και αν ανήκει σε συγκεκριμένο εύρος τιμών.</p><p>Επίσης, μπορούμε να βάλουμε την εντολή puts πριν την case. Σε αυτή την περίπτωση η case δίνει ως έξοδο το κείμενο που είναι να εμφανιστεί κατά περίπτωση και η puts το δέχεται ως παράμετρο. Δηλαδή το αποτέλεσμα της μίας εντολής (εδώ της case) είναι είσοδος της άλλης (εν προκειμένω της puts). Εναλλακτικά μπορούμε να γράψουμε την εντολή puts σε κάθε μία περίπτωση (when then) του case. Δηλαδή ο παραπάνω κώδικας θα μπορούσε να γραφεί και ως :</p><pre>
number = 20
case number
when 0..100 then puts "#{number} is less than 100"
when 100..200 then puts "#{number} is greater than 100 and less than 200"
when 200..300 then puts "#{number} is greater than 200 and less than 300"
else puts "#{number} out of range.Please try again with different number."
end
=&gt;20 is less than 100
</pre><p>Εννοείται ότι μπορείτε να χρησιμοποιείτε όποιον τρόπο θέλετε καθώς δεν έχουν κάποια ιδιαίτερη διαφορά.</p><h2>while</h2><p>Δε θα μπορούσε φυσικά να λείπει η while. Η μορφή της είναι :</p><pre>
while συνθήκη
...
end
</pre><p>Ένα απλό παράδειγμα χρήσης της μπορείτε να βρείτε στο αρχείο while.rb :</p><pre>
number = 5#πρέπει να είναι &gt;=1
result = 1
while number!=1
result*=number
number-=1
end
puts result
=&gt;120
</pre><p>Η λογική είναι πολύ απλή. Στην πράξη με αυτό το while υπολογίζουμε το παραγοντικό του αριθμού number. Να σημειώσουμε βέβαια ότι όπως είναι γραμμένος ο κώδικας πρέπει number&gt;=1 διαφορετικά θα λαμβάνουμε ως αποτέλεσμα το 1-αρχική τιμή της result- επ’ αόριστον. Για αυτό, όπως σε όλες τις γλώσσες προγραμματισμού πρέπει να φροντίσουμε να ισχύσει κάποτε η συνθήκη τερματισμού του βρόχου.</p><h2>until</h2><p>Πρόκειται για άλλον έναν τρόπο δημιουργίας loops. Η γενική μορφή σύνταξης είναι:</p><pre>
until  συνθήκη
....
end
</pre><p>Δηλαδή έως ότου να ικανοποιηθεί η συνθήκη ο κώδικας μέσα στο block (until – end) θα εκτελείται. Φυσικά πρέπει να φροντίσουμε ώστε η συνθήκη κάποτε να ικανοποιηθεί για να μην έχουμε ατέρμονα βρόχο.</p><p>Δείτε για παράδειγμα τον παρακάτω κώδικα (αρχείο until.rb):</p><pre>
number = 5
result = 1
until number==1
result*=number
number-=1
end
puts result
=&gt;120
</pre><p>Όπως είναι φανερό μπορούμε να αντικαταστήσουμε το while number!=1 με το until number==1 χωρίς να αλλάξει το αποτέλεσμα. Το ποια εντολή θα χρησιμοποιήσουμε είναι καθαρά θέμα του τι θέλουμε να κάνουμε αλλά και θέμα ευκολίας.</p><p>Θα ήθελα να σας μιλήσω και για την εντολή yield αλλά πριν θα ήταν καλό να μιλήσουμε για το πως φτιάχνουμε συναρτήσεις στη Ruby.</p><h1>Δημιουργία συναρτήσεων</h1><p>Για όσους έχετε ασχοληθεί με Python, μία γλώσσα που προσωπικά θεωρώ αρκετά αξιόλογη, θα έχετε ήδη διαπιστώσει πως η Ruby έχει αρκετά κοινά στοιχεία  με την Python (ευτυχώς για μένα δεν κράτησε τον πονοκέφαλο των κενών). Άλλωστε το είχαμε πει και στο εισαγωγικό μάθημα η Ruby κράτησε τα καλύτερα στοιχεία πολλών γλωσσών όπως π.χ. Python, Small Talk κ.ά..  Έτσι, λοιπόν, εάν γνωρίζετε πως να ορίζετε συναρτήσεις στην Python δε θα δείτε κάποια διαφορά., καθώς χρησιμοποιείται και εδώ η δομή def-end.</p><p>Π.χ. έστω ότι θέλουμε να γράψουμε τη συνάρτηση min. Βέβαια, θα μπορούσαμε να το κάνουμε με τη βοήθεια του τελεστή ?: σε μία γραμμή ( αρχείο min.rb):</p><pre>
a=2
b=3
puts (a&lt;b) ? a : b
=&gt;2
&nbsp;
</pre><p>Για να πειραματιστούμε όμως, θα την κάνουμε  και συνάρτηση. Έτσι έχουμε (αρχείο min_fun):</p><pre>
def minimum a,b
(a&lt;b) ? a : b# μπορούμε να γράψουμε και return (a&lt;b) ? a : b
end
puts minimum(2,3)
=&gt;2
</pre><p>Καταρχήν παρατηρείστε ότι στο ίδιο αρχείο που ορίζουμε τη συνάρτηση μπορούμε να κάνουμε και την κλήση της συνάρτησης. Ακόμη, δεν δηλώσαμε τον επιστρεφόμενο τύπο (π.χ. void, int, string) όπως γίνεται σε άλλες γλώσσες. Επίσης, παρατηρήστε ότι στη Ruby υπάρχει η εντολή return την οποία μπορείτε να χρησιμοποιήσετε κατά τα γνωστά για να σας επιστρέψει το αποτέλεσμα τις συνάρτησης ∙ αλλά στην προκειμένη περίπτωση εσκεμμένα δε χρησιμοποιήθηκε. Και αυτό έγινε για να έχετε υπόψη σας ότι η Ruby εάν δεν δει return μέσα σε μία συνάρτηση επιστρέφει το αποτέλεσμα της τελευταίας εντολής εντός της συνάρτησης που εκτελέστηκε. Και σε περίπτωση που δεν υπάρχει κάποιο αποτέλεσμα να επιστρέψει τότε θα λάβετε nil.  Αν το ξεχάσετε  μπορεί να βρεθείτε σε δυσάρεστες καταστάσεις ή να ξοδέψετε πολύτιμο χρόνο προσπαθώντας να καταλάβετε γιατί συμβαίνει αυτό.</p><h1>yield</h1><p>Μία εντολή της Ruby που ξενίζει και παίδεψε ομολογουμένως και τον γράφων μέχρι να εξοικειωθεί μαζί της, είναι η yield. Αξίζει να ασχοληθείτε μαζί της καθώς κατανοώντας την μπορείτε να κάνετε σύντομα και κομψά αυτό που θέλετε.  Για να το πετύχετε αυτό θα πρέπει να πειραματιστείτε.</p><p>Για τη yield έχετε υπόψη σας πως όταν τη χρησιμοποιείτε λαμβάνει ως είσοδο ένα κομμάτι κώδικα και το εκτελεί. Το πιο χαρακτηριστικό παράδειγμα που δίνεται συχνά για να γίνει αυτό κατανοητό είναι το παρακάτω (αρχείο yield.rb):</p><pre>
def do3times
yield
yield
yield
end
&nbsp;
do3times { puts "yielding..." }#δοκιμάστε να αλλάξετε το κείμενο αυτό
yield puts 4+5#δοκιμάστε να αλλάξετε το κείμενο αυτό
=&gt;
</pre><blockquote><p> yielding&#8230;<br
/> yielding&#8230;<br
/> yielding&#8230;</p><p>9</p></blockquote><p>Δηλαδή, στέλνοντας ως είσοδο στη συνάρτηση do3times το κομμάτι κώδικα «puts &#8220;yielding&#8230;&#8221;» αυτό το δέχονται οι 3 yield εντός της do3times ως είσοδο και το εκτελούν. Ομοίως και στην τελευταία εντολή η yield δέχεται ως είσοδο το κομμάτι κώδικα «puts 4+5» και το εκτελεί.</p><p>Στο βιβλίο <a
href="http://pragprog.com/book/ruby/programming-ruby">http://pragprog.com/book/ruby/programming-ruby</a> θα βρείτε ένα πολύ όμορφο παράδειγμα για τη yield που επίσης δίνεται συχνά για να εξηγηθεί η yield. Πρόκειται για τον υπολογισμό της ακολουθίας Fibonacci. Η ακολουθία δηλαδή όπου κάθε όρος είναι το άθροισμα των δύο προηγούμενων ξεκινώντας από το ένα. Δηλαδή οι αριθμοί 1,1,2,3,5,8,13,21&#8230; Χάρη στη yield αυτή η ακολουθία υπολογίζεται πολύ εύκολα (αρχείο yield_fibonacci):</p><pre>
def fibonacci(till_number)
i1, i2 = 1,1 #παράλληλη ανάθεση τιμών (i1=1 και i2=1)
while i1&lt;till_number
yield i1
i1, i2 = i2, i1+i2
end
end
fibonacci(1000) {|f| print f, " "}#εάν δοκιμάστε να καλέστε απλώς fibonacci(1000)
# θα πάρετε μήνυμα λάθους
#yield_fibonacci.rb:5:in `fibonacci': no block given #(yield) (LocalJumpError)
#from yield_fibonacci.rb:9:in `&lt;main&gt;'
=&gt;
</pre><blockquote><p> 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987</p></blockquote><p>Καταρχήν να εξηγήσουμε  τα απλά, δηλαδή την παράλληλη ανάθεση, η οποία μας βοηθάει να αρχικοποιήσουμε τα  i1 , i2=1,1 με μία εντολή αλλά και να υπολογίσουμε τον επόμενο όρο με την εντολή i1 , i2 = i2, i1+i2. Ένα άλλο απλό πραγματάκι που πρέπει να επισημάνουμε είναι ότι λόγω της yield εάν γράφαμε απλώς fibonacci(1000) θα παίρναμε το μήνυμα λάθους που αναγράφετε στα σχόλια, δηλαδή η yield περιμένει κάτι ως είσοδο και δεν το λαμβάνει. Στη συγκεκριμένη περίπτωση η εντολή yield i1 επειδή είπαμε {|f| print f, &#8221; &#8220;} εμφανίζει στην κονσόλα τα αποτελέσματα, δηλαδή την ακολουθία Fibonacci μέχρι τον αριθμό 1000.</p><h1>Επίλογος</h1><p>Κάπου εδώ θα σας αφήσω και πάλι για να πειραματιστείτε. Εάν ξέρετε ήδη κάποια γλώσσα προγραμματισμού θα είδατε πως οι βασικές εντολές είναι ίδιες, όπως άλλωστε είναι αναμενόμενο. Από εκεί και πέρα υπάρχουν και κάποια πρόσθετα στοιχεία όπως η πολύ ενδιαφέρουσα yield.</p><p>Μέχρι την επόμενη φορά καλό πειραματισμό!</p><blockquote><p
style="text-align: center;"><em><strong>Μπορείτε να κατεβάσετε τα    αρχεία του βοηθήματος εδώ</strong></em></p><p
style="text-align: center;"><a
href="http://static.greektuts.net/uploads/2011/11/ruby-part2.zip"><img
width="200" height="200" alt="download" src="../wp-content/uploads/2009/10/membersdownload1.png" class="aligncenter"></a></p></blockquote> ]]></content:encoded> <wfw:commentRss>http://greektuts.net/diving-into-ruby-control-commands-and-functions/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Ανάπτυξη Εφαρμογής για iPhone στο XCode Μέρος 2ο</title><link>http://greektuts.net/iphone-xcode-app-development-part2/</link> <comments>http://greektuts.net/iphone-xcode-app-development-part2/#comments</comments> <pubDate>Sat, 22 Oct 2011 07:00:10 +0000</pubDate> <dc:creator>g.termentzoglou</dc:creator> <category><![CDATA[App Development]]></category> <category><![CDATA[Κινητά Τηλέφωνα]]></category> <category><![CDATA[app]]></category> <category><![CDATA[app development]]></category> <category><![CDATA[development]]></category> <category><![CDATA[iphne development]]></category> <category><![CDATA[iphone]]></category> <category><![CDATA[iphone app]]></category> <category><![CDATA[xcode]]></category> <category><![CDATA[ανάπτυξη εφαρμογής]]></category> <category><![CDATA[γιώργος τερμετζόγλου]]></category> <category><![CDATA[κινητά τηλέφωνα]]></category> <guid
isPermaLink="false">http://greektuts.net/?p=5473</guid> <description><![CDATA[Στο δεύτερο μέρος οδηγών για την ανάπτυξη iPhone και iPad applications, ο Γιώργος Τερμετζόγλου θα μας προχωρήσει πιο βαθεία στο πρόγραμμα xCode, και θα μας αναλύσει την χρήση των κουμπιών και των actions, μέσα από παραδείγματα. Δείτε το video βοήθημα]]></description> <content:encoded><![CDATA[<p><iframe
src="http://blip.tv/play/AYLY8HQA.html" width="600" height="480" frameborder="0" allowfullscreen></iframe><embed
type="application/x-shockwave-flash" src="http://a.blip.tv/api.swf#AYLY8HQA" style="display:none"></embed></p> ]]></content:encoded> <wfw:commentRss>http://greektuts.net/iphone-xcode-app-development-part2/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Εισαγωγή στην Ruby</title><link>http://greektuts.net/diving-into-ruby-introduction/</link> <comments>http://greektuts.net/diving-into-ruby-introduction/#comments</comments> <pubDate>Wed, 19 Oct 2011 09:53:27 +0000</pubDate> <dc:creator>kkostopoulos</dc:creator> <category><![CDATA[Ruby]]></category> <category><![CDATA[ruby]]></category> <category><![CDATA[ruby on rails]]></category> <category><![CDATA[ruby tutorial]]></category> <category><![CDATA[ruby tutς]]></category> <category><![CDATA[βοήθημα ruby]]></category> <category><![CDATA[εισαγωγή στην ruby]]></category> <category><![CDATA[κωσταντίνο κωστόπουλος]]></category> <guid
isPermaLink="false">http://greektuts.net/?p=5449</guid> <description><![CDATA[Καλωσορίσατε στην Ruby! Σε αυτό το τεράστιο εισαγωγικό βοήθημα, ο Κωσταντίνος Κωστόπουλος, θα μας δείξει όλα όσα πρέπει να γνωρίζουμε για την γλώσσα προγραμματισμού Ruby, και θα μας βοηθήσει στα πρώτα μας βήματα στην απίθανη αυτή γλώσσα, που μέρα με την μέρα κερδίζει όλο και περισσότερους χρήστες.]]></description> <content:encoded><![CDATA[<h1>Εισαγωγή</h1><p>Η Ruby σχεδιάστηκε από τον Yukihiro &#8220;Matz&#8221; Matsumoto στην Ιαπωνία περίπου το 1995. Σκοπός του Yukihiro ήταν η δημιουργία μίας γλώσσας προγραμματισμού που θα διευκόλυνε τον προγραμματιστή να επικεντρώνεται κυρίως στη συγγραφή κώδικα και όχι στην επίλυση παράπλευρων προβλημάτων που συχνά προέκυπταν από την ίδια τη φύση της γλώσσας. Έτσι δανείστηκε τα δυνατά γνωρίσματα άλλων γλωσσών όπως π.χ. Python, Perl, Smalltalk, Eiffel και Lisp. Πλέον η γλώσσα εξελίχτηκε αρκετά και έχει κερδίσει αρκετούς προγραμματιστές. Αυτή τη στιγμή βρίσκεται στην έκδοση 1.9.3.</p><p>Η επίσημη ιστοσελίδα είναι η <a
href="http://www.ruby-lang.org/en/">http://www.ruby-lang.org/en/</a>, όπου μπορείτε να δείτε και προτεινόμενη βιβλιογραφία. Επίσης καλό είναι να επισκεφτείται τη <a
href="http://tryruby.org/levels/1/challenges/0">http://tryruby.org/levels/1/challenges/0</a> όπου, χωρίς να εγκαταστήσετε τοπικά τη Ruby, μπορείται να τρέξετε online κάποια παραδείγματα μέσω irb (Interactive Ruby). Η  irb δεν είναι τίποτα άλλο παρά μία διαδραστική , όπως λέει και το όνομά της, κονσόλα της Ruby. Σύνηθης τακτική είναι εκτός από τον αγαπημένο text editor να έχουμε ανοιχτή και την irb (εγκαθίσταται μαζί με τη Ruby) για γρήγορα πειράματα. Τα ίδια ακριβώς αποτελέσματα θα παίρναμε και αν είχαμε σώσει τον κώδικά μας σε ένα αρχείο με κατάληξη .rb ή .rbw και εκτελούσαμε το αρχείο (προτιμήστε το αρχείο να είναι σε utf8-ρυθμίστε το μέσω του text editor που χρησιμοποιείτε-).</p><hr
/><h1>Γενικά χαρακτηριστικά</h1><p>Το πρώτο που ακούει κανείς στην πρώτη επαφή με τη γλώσσα είναι ότι στη Ruby τα πάντα είναι  αντικείμενα. Και αυτό είναι αλήθεια. Ακόμα και το κύριο πρόγραμμα της Ruby (η main θα λέγαμε) είναι ένα αντικείμενο. Σε αυτό το γεγονός έγκειται κατά ένα μεγάλο βαθμό η «δύναμη» της Ruby.</p><p>Ακόμη, η Ruby επιρεασμένη από τη small talk προσφέρεται για τη συγγραφή συμπυκνωμένου κώδικα. Αυτό θα φανεί παρακάτω στα παραδείγματα που ακολουθούν.</p><p>Επίσης η Ruby είναι cross-platform (Linux, Mac OS, Windows). Δε χρειάζεται κάποιο σύμβολο στο τέλος των εντολών, ούτε εξαρτάται από των αριθμό των κενών όπως π.χ. η Python. Η στοίχιση του κώδικα γίνεται με τον κλασικό τρόπο καθαρά για θέμα αναγνωσιμότητας. Εδώ η Ruby έχει ένα ακόμα δυνατό σημείο. Οι συναρτήσεις που δεν δέχονται ορίσματα μπορούν να κληθούν και χωρίς τις παρενθέσεις π.χ. δοκιμάστε στη σελίδα <a
href="http://tryruby.org/levels/1/challenges/0">http://tryruby.org/levels/1/challenges/0</a> την εντολή «1.class», χωρίς τα εισαγωγικά και την «1.class()»</p><p>Ναι, όπως είπαμε τα πάντα είναι κλάσεις. Οπότε ακόμα και οι σταθεροί αριθμοί είναι αντικείμενα. Όπως βλέπουμε η τελεία μας επιτρέπει να καλέσουμε μεθόδους όπως και σε άλλες γλώσσες. Η μέθοδος class() ή class μας επιστρέφει τον τύπο της κλάσης.</p><p>Στην irb λοιπόν θα δείτε το:</p><pre name="code" class="html">
Interactive ruby ready.
&gt; 1.class
=&gt; Fixnum
&gt; 1.class()
=&gt; Fixnum
</pre><p>Με το σύμβολο =&gt; συμβολίζεται η έξοδος της κονσόλας.  Οι σταθεροί αριθμοί, λοιπόν, όπως το 1 είναι αντικείμενο τύπου Fixnum. Προσέξτε ότι είτε γράψουμε είτε παραλείψουμε τις παρενθέσεις το αποτέλεσμα είναι ίδιο. <span
style="text-decoration: underline;">ΠΡΟΣΟΧΗ! Οι παρενθέσεις μπορούν να παραληφθούν ΜΟΝΟ για τις μεθόδους που δε δέχονται όρισμα</span>. Αυτή η απαλοιφή των παρενθέσεων οδηγεί σε κώδικα με λιγότερα σύμβολα και περισσότερα γράμματα, με αποτέλεσμα ο κώδικας να μοιάζει πιο πολύ με κείμενο παρά με κώδικα. Αυτό βοηθά ώστε ο κώδικας να είναι γενικά πιο ευανάγνωστος και ευκολονόητος, ακόμα και σε περιπτώσεις που πρόκειται για κώδικα τρίτου ατόμου.</p><p>Εάν δοκιμάσετε</p><pre name="code" class="html">&gt; (2.0).clas­s
=&gt; Float</pre><p>Άρα η Ruby τους δεκαδικούς τους έχει ως αντικείμενα τύπου Float.<br
/> Ο pointer this που συναντάμε σε άλλες γλώσσες π.χ. C++,C#, Java, PHP κτλ. στη Ruby γίνεται self. Δοκιμάστε το :</p><pre name="code" class="html">&gt; self.class­
=&gt; Object</pre><p>Εδώ , λοιπόν, κρύβεται αυτό που προαναφέραμε. Ότι ακόμα και όταν ξεκινάμε το πρόγραμμα (απλά ανοίξαμε την irb) βρισκόμαστε μέσα σε ένα αντικείμενο τύπου Object!</p><p>Με την ίδια λογική, στη Ruby δεν υπάρχει η τιμή null που συναντάμαι σε πολλές γλώσσες, αλλά το αντικείμενο nil. Δοκιμάστε το εξής:</p><pre name="code" class="html">&gt; nil.class
=&gt; NilClass</pre><p>Το αντικείμενο αυτό, λοιπόν, είναι τύπου NilClass.</p><p>Δοκιμάστε τώρα το :</p><pre name="code" class="html">NilClass.m­ethods
=&gt; [:allocate, :superclass, :const_get, :public_instance_methods, :autoload?, :freeze, :const_missing, :included_modules, :==, :class_exec, :instance_method, :public_class_method, :ancestors, :&lt;, :protected_method_defined?, :&gt;, :===, :private_instance_methods, :hash, :class_variables, :&lt;=, :method_defined?, :instance_methods, :class_variable_defined?, :name, :private_method_defined?, :const_set, :autoload, :include?, :protected_instance_methods, :module_eval, :module_exec, :&lt;=&gt;, :private_class_method, :constants, :to_s, :public_method_defined?, :class_eval, :&gt;=, :const_defined?, :puts, :methods, :nil?, :=~, :protected_methods, :inspect, :tainted?, :is_a?, :instance_variable_get, :instance_variable_defined?, :frozen?, :respond_to?, :instance_variable_set, :untaint, :respond_to_missing?, :clone, :send, :private_methods, :singleton_methods, :eql?, :type, :dup, :kind_of?, :instance_of?, :taint, :class, :instance_variables, :public_methods, :instance_exec, :__send__, :instance_eval, :equal?, :!, :!=]</pre><p>Η συνάρτηση methods θα σας φανεί αρκετά χρήσιμη καθώς σας επιστρέφει όλες τις μεθόδους μίας κλάσης και μπορείτε να το χρησιμοποιήσετε ως πρόχειρο και γρήγορο ευρετήριο. Δοκιμάστε να βρείτε τις μεθόδους του nil με την εντολή nil.methods. Μην τρομάξετε. Δεν κάνατε κάτι λάθος. Απλά για να εξηγήσουμε το γιατί συμβαίνει αυτό θα πρέπει να εξηγήσουμε και κάποια άλλα πραγματάκια οπότε προς το παρόν ας το αφήσουμε στην άκρη.</p><p>Τέλος, τα σχόλια μίας γραμμής στη Ruby ξεκινούν μετο σύμβολο #.</p><hr
/><h1>Κατηγορίες μεταβλητών στη Ruby</h1><p>Καταρχήν, στη Ruby δε χρειάζεται να δηλώσετε τύπο μεταβλητής. Θα δείτε όμως κάποια σύμβολα όπως $ και @ οπότε καλό είναι να γνωρίζετε τι σημαίνουν.</p><p>Κοιτάξτε τις 3 παρακάτω εντολές (έχετε υπόψη ότι οι μεταβλητές στη Ruby ξεκινούν με πεζό γράμμα και οι κλάσεις με κεφαλαίο):</p><pre name="code" class="html">max = 3
$max = 3
@@max = 3
@max</pre><p>Στην πρώτη περίπτωση, η μεταβλητή «max» είναι τοπική. Η εμβέλειά της αφορά το τμήμα κώδικα στο οποίο είναι εμφωλιασμένη. Όπως π.χ. έχουμε τις τοπικές μεταβλητές μέσα σε μπλοκ κώδικα σε άλλες γλώσσες προγραμματισμού.</p><p>Η μεταβλητή $max είναι global, δηλαδή ορατή από παντού μέσα στο πρόγραμμα. Γενικά global μεταβλητές στη Ruby δε συνηθίζοντα και θα χρησιμοποιηθούν για τις μεταβλητές που εκφράζουν κάτι που είναι πράγματι global.</p><p>Τέλος, η μεταβλητή «@@max» δηλώνει ιδιότητα κλάσης. Έτσι δε θα τη δείτε ποτέ μόνη της αλλά μέσα στη δήλωση μίας κλάσης. Δηλαδή:</p><pre name="code" class="html">def Maxclass
@@max = 3
end</pre><p>Η πρώτη και τρίτη εντολή ορίζουν μία κλάση με το όνομα «Maxclass». Η «@max» είναι ιδιότητα,μεταβλητή δηλαδή της Myclass.</p><p>Τέλος η «@max» είναι instance variable. Εάν για παράδειγμα έχουμε 2 αντικείμενα της ίδιας κλάσης:</p><pre name="code" class="html">def Maxclass
@max = 3
end</pre><p>και η τιμή της @max αλλάξει σε ένα τότε στο άλλο δεν αλλάζει. Δηλαδή οι μεταβλητές που ξεκινούν με ένα @ αφορούν μία και μόνο instance της κλάσης για αυτό και λέγονται instance variables.  Μπορείτε να τη φανταστείτε ως το ανάποδο της static της Java.Περισσότερα για αυτό θα πούμε στο επόμενο μάθημα όπου θα μιλήσουμε και για κλάσεις.</p><hr
/><h1>Τελεστές της Ruby</h1><p>Στη Ruby θα βρείτε τους γνωστούς τελεστές +-*/ φυσικά. Έχετε υπόψη ότι όταν κάνετε πράξεις μεταξύ αριθμών στη Ruby δε χρειάζεται να κάνετε typecasting , καθώς αυτό το αναλαμβάνει η ίδια η γλώσσα. Π.χ. στη C/C++ το αποτέλεσμα της διαίρεσης ακεραίων πρέπει να αποθηκευτεί σε αριθμό double ή float. Στη Ruby η αλλαγή γίνεται από τη μηχανή της ίδιας της γλώσσας.</p><p>Στη Ruby δε θα βρείτε τα ++ και – αλλά τα +=, -=, *=,/=. Αυτό οφείλεται στο ότι στη Ruby όλα είναι αντικείμενα, οπότε τα σύμβολα +,- [] κτλ. είναι μέθοδοι. Επομένως, η γραφή ++ και – δε συμβαδίζει με αυτή τη λογική.</p><p>&#8220;Εξαίρεση&#8221;, θα μπορούσε κανείς να θεωρήσει, είναι η ύψωση στη δύναμη που συμβολίζεται ως **.  Βέβαια, σε αυτή την περίπτωση όμως το ** είναι πάλι μία μέθοδος που αναλαμβάνει την ύψωση σε δύναμη, άρα σε τελική ανάλυση δεν είναι πραγματικά εξαίρεση.</p><p>Τελειώνοντας με τους τελεστές να πούμε ότι όπως και σε άλλες γλώσσες προγραμματισμού έτσι και εδώ οι τελεστές μπορούν να γίνουν overload. Για παράδειγμα, το σύμβολο της αφαίρεσης μπορεί να χρησιμοποιηθεί σε πίνακες. Έτσι π.χ. δοκιμάστε τον κώδικα που προτείνεται και στην επίσημη σελίδα της Ruby ως παράδειγμα (αρχείο subtrack_arrays.rb):</p><pre name="code" class="html"># Ruby knows what you
# mean, even if you
# want to do math on
# an entire Array
cities  = %w[ London
Oslo
Paris
Amsterdam
Berlin ]
visited = %w[Berlin Oslo]
puts "I still need " +
"to visit the " +
"following cities:",
cities - visited</pre><p>Θα δείτε ως αποτέλεσμα:</p><blockquote><p>I still need to visit the following cities:</p><p>London<br
/> Paris<br
/> Amsterdam</p></blockquote><p>Όπως βλέπετε έγινε αφαίρεση πινάκων γιατί για την κλάση Array έχει γίνει overload η μέθοδος  -. Είπαμε ότι δεν είναι απλά σύμβολο αλλά στην πραγματικότητα μέθοδος.</p><hr
/><h1>Εγκατάσταση της Ruby</h1><p>Όπως θα έχετε παρατηρήσει, έχουμε μιλήσει για τη Ruby και τρέξει παραδείγματα, χωρίς καν να την εγκαταστήσουμε. Αυτό χάρη στην online έκδοση της irb. Στη σελίδα <a
href="http://www.ruby-lang.org/en/downloads/">http://www.ruby-lang.org/en/downloads/</a> μπορείτε να κατεβάσετε τη Ruby ή να την εγκαταστήσετε κατευθείαν από την κονσόλα στην περίπτωση που έχετε κάποιο unixοειδές λειτουργικό. Εάν θα δουλέψετε σε windows κατεβάστε την προτεινόμενη έκδοση. Η εγκατάσταση σε κάθε περίπτωση διαρκεί λίγα λεπτά, ανάλογα με το σύστημά σας και δεν παρουσιάζει ιδιαίτερη δυσκολία. Απλά πατάτε επόμενο.</p><p>Όπως θα δείτε, στο τέλος θα έχετε στο μηχάνημά σας τη μηχανή (engine) της Ruby μέσω της οποίας μπορείτε να τρέχετε τα προγράμματά σας, την irb που μπορείτε να την εκμεταλευτείτε για γρήγορους πειραματισμούς. Επίσης στα windows θα δείτε και τα «Start Command Prompt with Ruby» και «Ruby Gems Documentation Server». Το πρώτο είναι ένα κέλυφος (shell) μέσω της Ruby και προς το παρόν τουλάχιστον δε θα μας χρειαστεί. Το τελευταίο είναι ένας τοπικός server που μπορείτε να χρησιμοποιήσετε για να δείτε πληροφορίες για τα gems.</p><p>Πριν περάσουμε στα gems στην επόμενη ενότητα να πούμε ότι τώρα που έχετε τη Ruby στο σύστημά σας μπορείτε να τρέξετε τα αρχεία .rb και .rbw είτε με διπλό κλικ είτε ανοίγοντας την κονσόλα στο φάκελο που βρίσκεται το αρχείο (π.χ. hello_world.rb) και , ανεξαρτήτως του λειτουργικού συστήματος που έχετε, δώστε την εντολή «ruby hello_world.rb», χωρίς τα εισαγωγικά. Εάν το πρόγραμμά σας δέχεται και παραμέτρους  τότε φυσικά με διπλό κλικ θα λάβετε μήνυμα λάθους, αφού δεν ορίζετε τις παραμέτρους. Έτσι καταφύγετε στην κονσόλα και γράψτε «ruby hello_world parameter1 parameter2» χωρίς τα εισαγωγικά και όπου parameter1 parameter2 τις κατάλληλες τιμές, προσέχοντας ταυτόχρονα τη σειρά και το πλήθος των παραμέτρων.</p><hr
/><h1>(Πολύ)Λίγα λόγια για τα Ruby Gems</h1><p>Με τα Ruby gems προς το παρόν δε θα ασχοληθούμε. Θα σας πω μόνο ότι είναι οι βιβλιοθήκες της Ruby. Μπορείτε και σεις να φτιάξετε τη δική σας. Η κύρια σελίδα όπου μπορείτε να βρείτε gems είναι η <a
href="http://rubygems.org/">http://rubygems.org/</a> . Ο τρόπος εγκατάστασης και η διαχείρησή τους θυμίζει linux. Π.χ. ανοίξτε το «Start Command Prompt with Ruby» που είδαμε προηγουμένως (σε unixοειδή λειτουργικά δε θα σας χρειαστεί) γράφοντας «gem install the_gem» εγκαθιστάται το gem με όνομα the_gem. Με την εντολή «gem list» μπορείτε να δείτε ποια gems έχετε αυτή τη στιγμή στο μηχάνημά σας. Μάλιστα μπορείτε να έχετε και πολλαπλές εκδόσεις του ίδιου gem.</p><p>Η ενσωμάτωση των gem στον κώδικά σας γίνεται με τις εξής 2 εντολές στην αρχή του αντίστοιχου αρχείου:</p><pre name="code" class="html">require 'rubygems'
require 'the_gem'</pre><p>Η πρώτη εντολή λέει ότι θα χρειαστούμε gem και η δεύτερη ποιο ακριβώς. Υπόψη, ότι και το “ rubygems’” είναι ένα gem που αναλαμβάνει τη διαχείριση των gems!</p><p>Ακόμη, έχετε τη δυνατότητα να θέσετε κριτήρια για την έκδοση. Π.χ.</p><pre name="code" class="html">require 'rubygems'
gem 'activerecord', '&gt;= 1.4.0'
gem 'actionpack', '&lt;= 1.2.0'
gem 'actionmailer', '= 0.5.0'
gem 'rails', '= 0.9.3'</pre><p>Έτσι, η Ruby θα ελένξει εάν το σύστημα στο οποίο τρέχει ο κώδικας έχει όχι μόνο τα συγκεκριμένα gems αλλά και κάποια έκδοση που να ικανοποιεί αυτά τα κριτήρια. Έτσι, εάν για κάποιο λόγο χρησιμοποιείτε συγκεκριμένη έκδοση gem ενώ π.χ. η επόμενη δημιουργεί λάθη στο πρόγραμμα (λόγω π.χ. αλλαγών στο gem) ορίστε την έκδοση που θέλετε και ξενοιάστε.</p><p>Εάν σας ενδιαφέρει η Ruby ασχοληθείτε και με τα gems, άλλωστε θα το κάνετε αργά ή γρήγορα.</p><hr
/><h1>Loops στη Ruby</h1><p>Στη Ruby εάν πηγαίνετε να γράψετε loop μην το κάνετε με τη λέξη «for»! Υπάρχει πιο κομψός τρόπος!</p><p>Καταρχήν στη Ruby θα βρείτε τη μέθοδο each. Π.χ. δοκιμάστε τον κώδικα (αρχείο ranges.rb)</p><pre name="code" class="html">puts "first instruction"
puts (1..5).class
puts "second instruction"
(1..5).each {|x| puts x}
puts "third instruction"
(1...5).each {|x| puts {x}}
puts "fourth instruction"
(1..5).each {|x| puts " #{x}"}</pre><p>Στην έξοδο θα πάρετε:</p><blockquote><p>first instruction<br
/> Range<br
/> second instruction<br
/> 1<br
/> 2<br
/> 3<br
/> 4<br
/> 5<br
/> third instruction<br
/> 1<br
/> 2<br
/> 3<br
/> 4<br
/> fourth instruction<br
/> 1<br
/> 2<br
/> 3<br
/> 4<br
/> 5</p></blockquote><p>Με αυτόν τον κώδικα σας μπλέκω με περισσότερα από ένα πράγματα οπότε ας τα πάρουμε με τη σειρά.</p><p>Καταρχήν, η εντολή puts εκτυπώνει στην κονσόλα πληροφορίες, είναι δηλαδή η αντίστοιχη της printf της C/C++ ή η System.out.println της Java κτλ. Προφανώς στη Ruby όπως και σε άλλες γλώσσες ότι είναι ανάμεσα σε διπλά ή απλά εισαγωγικά είναι String (επίσης κλάση στη Ruby).</p><p>Δεύτερον, θα μιλήσουμε για την κλάση Range και τους τελεστές «..» και «&#8230;».  Δείτε την εντολή «puts (1..5).class». Η κλάση Range όπως παρατηρείτε είναι μία κλάση που δηλώνει εύρος ακεραίων από μία ελάχιστη έως μία μέγιστη τιμή. Οι τελεστές 2 και 3 τελείες μπορούν να χρησιμοποιηθούν για τη δημιουργία αντικειμένων τύπου Range. Έτσι π.χ. το 1..5 σημαίνει από 1 έως 5 (δηλαδή 1&lt;=x&lt;=5) ενώ το 1&#8230;5 από 1 έως 4 (δηλαδή 1&lt;=x&lt;5).</p><p>Τρίτον, παρατηρείστε την εντολή (1..5).each {|x| puts x}. Χρησιμοποιούμε δηλαδή τις δύο κάθετες γραμμές || για να δηλώσουμε πως το κάθε στοιχείο θα το συμβολίζουμε με x και μετά ζητάμε την εκτύπωση «puts x». Σε μία δηλαδή γραμμή φτιάχνουμε το Range object και λέμε για κάθε ένα στοιχείο του εκτύπωσε την τιμή του.</p><p>Παρατηρήστε τώρα το αποτέλεσμα των εντολών «(1..5).each {|x| puts x}» και «(1&#8230;5).each {|x| puts x}».</p><p>Τέταρτον, ας δούμε την εντολή (1..5).each {|x| puts &#8221; #{x}&#8221;}. Εάν καταλάβατε τα παραπάνω τότε μπορούμε να επικεντρωθούμε στο &#8221; #{x}&#8221;. Είπαμε ότι το # δηλώνει σχόλιο μίας γραμμής. Έχει όμως και έναν ακόμη ρόλο. Όπως παρατηρείτε γράφουμε μέσα σε διπλά εισαγωγικά το σύμβολο # και για την ακρίβεια γράφουμε &#8220;#{x}&#8221;. Με αυτόν τον τρόπο κάνουμε γρήγορα μετατροπή ενός αριθμού, εδώ του x, σε String. Εάν και εδώ δε φαίνεται να έχει κάποια μεγάλη διαφορά, φανταστείτε τι θα πρέπει να γράψουμε εάν θέλαμε να γράψουμε στην κονσόλα με μία εντολή πολλές διαφορετικές μεταβλητές. Άλλες String, άλλες Fixnum κτλ. Θα μπορούσαμε να γράψουμε π.χ. puts x.to_s. Η to_s είναι η μέθοδος της Ruby αντίστοιχη της To_String που συναντάμε σε άλλες γλώσσες. Μπορούμε εναλλακτικά να χρησιμοποιήσουμε όμως τη μορφή &#8221; #{}&#8221; που είναι πιο συμπυκνωμένη.</p><p>Ας μην επεκταθώ άλλο. Μιλάμε για loops. Ένας λοιπόν τρόπος είναι η μέθοδος each που μπορούμε να τη χρησιμοποιήσουμε σε Ranges και Arrays. Υπάρχει όμως και ένας άλλος τρόπος. Δείτε τον κώδικα του αρχείου (for_in_ruby.rb):</p><pre name="code" class="html">#μετράμε από ένα εώς 5
1.upto(5) do |x|
puts x
end
#μετράμε από 5 έως 1
5.downto(1) do |x|
puts x
end</pre><p>και την έξοδο:</p><blockquote><p>1<br
/> 2<br
/> 3<br
/> 4<br
/> 5<br
/> 5<br
/> 4<br
/> 3<br
/> 2<br
/> 1</p></blockquote><p>Όπως είπαμε το 1 είναι αντικείμενο τύπου Fixnum, όπως και κάθε άλλος σταθερός αριθμός στη Ruby. Η κλάση αυτή έχει μεταξύ των άλλων και δύο μεθόδους την upto και την downto. Με αυτές μπορούμε να δημιουργούμε τους βρόχους επανάληψης for που συναντάμε σε άλλες γλώσσες. Παρατηρήστε ότι χρησιμοποιούμε τις λέξεις κλειδιά do και end. Εάν έχουμε πολλές εντολές μέσα στο βρόχο χρησιμοποιούμε αυτή τη δομή. Διαφορετικά μπορούμε να χρησιμοποιήσουμε και τις αγκύλες {} όπως κάναμε προηγουμένως με την εντολή each.</p><hr
/><h1>Η εντολή ελέγχου if</h1><p>Στη Ruby θα συναντήσετε και την εντολή ελέγχου if. Η μορφή της είναι</p><pre name="code" class="html">if συνθήκη then
...
else
...
end</pre><p>Δείτε τώρα τον κώδικα του αρχείου if.rb</p><pre name="code" class="html">a=3
b=4
if a==b then
puts true
else
puts false
end
puts true if a==b</pre><p>Αρχικά ορίζουμε 2 μεταβλητές και εφόσον είναι ίσες εκτυπώνουμε true αλλιώς false. Σημειώστε ότι οι λέξεις true , false είναι επίσης αντικείμενα (δώστε την εντολή true.class ή false.class και βρείτε την κλάση <img
src='http://greektuts.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ) .</p><p>Όπως βλέπετε η if είναι η γνωστή μας if από άλλες γλώσσες. Στη Ruby όμως έχει μία ακόμα ιδιαιτερότητα. Βλέπετε ο Ασιάτης δημιουργός της Ruby παρατήρησε ότι πολύ συχνά σε προγράμματα θέλουμε να εκτελέσουμε μία μόνο εντολή εάν ισχύει μία συνθήκη. Έτσι έδωσε στην if και έναν δεύτερο τρόπο γραφής. Παρατηρήστε την τελευταία εντολή «puts true if a==b». Δηλαδή σε αυτή και μόνο σε αυτή την περίπτωση μπορούμε να γράψουμε πιο συμμαζεμένα τον κώδικά μας. Γράφουμε πρώτα το τι θέλουμε να γίνει «puts true» και μετά τη συνθήκη «if a==b». Έτσι οι 3 γραμμές γίνονται μία γραμμή κώδικα.</p><hr
/><h1>Επίλογος</h1><p>Κάπου εδώ θα σας αφήσω για να πειραματιστείτε. Ακόμα και αν δε θέλετε να εγκαταστήσετε τη Ruby δοκιμάστε την online irb για τα πειράματά σας. Στο επόμενο μάθημα θα μιλήσουμε για τις υπόλοιπες εντολές ελέγχου της Ruby καθώς επίσης και για το πως φτιάχνουμε συναρτήσεις.</p><p>Όπως βλέπετε η Ruby έχει κρατήσει τα καλύτερα χαρακτηριστικά από διάφορες γλώσσες προγραμματισμού μα το κυριότερο ότι στοχεύει στο να βοηθάει τον προγραμματιστή να γράφει όσον το δυνατό πιο συμμαζεμένο κώδικα. Έτσι στη Ruby είναι πιο εύκολο, σε σύγκριση με άλλες γλώσσες προγραμματισμού, να κατανοήσετε τον κώδικα τρίτων ανθρώπων.</p><hr
/><blockquote
style="text-align: center;"><p><strong>Μπορείτε να κατεβάσετε τα αρχεία του βοηθήματος εδώ</strong><br
/> <a
href="http://static.greektuts.net/uploads3/2011/10/GreekTuts_Ruby_Introduction_Files.zip"><img
src="http://static.greektuts.net/uploads/2009/10/membersdownload1.png" alt="" /></a></p></blockquote> ]]></content:encoded> <wfw:commentRss>http://greektuts.net/diving-into-ruby-introduction/feed/</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>Ανάπτυξη Εφαρμογής για iPhone στο XCode Μέρος 1ο</title><link>http://greektuts.net/iphone-xcode-app-development-part1/</link> <comments>http://greektuts.net/iphone-xcode-app-development-part1/#comments</comments> <pubDate>Mon, 03 Oct 2011 06:00:27 +0000</pubDate> <dc:creator>g.termentzoglou</dc:creator> <category><![CDATA[App Development]]></category> <category><![CDATA[Κινητά Τηλέφωνα]]></category> <category><![CDATA[app]]></category> <category><![CDATA[development]]></category> <category><![CDATA[iphne development]]></category> <category><![CDATA[iphone]]></category> <category><![CDATA[iphone app]]></category> <category><![CDATA[xcode]]></category> <category><![CDATA[ανάπτυξη εφαρμογής]]></category> <category><![CDATA[γιώργος τερμετζόγλου]]></category> <guid
isPermaLink="false">http://greektuts.net/?p=5409</guid> <description><![CDATA[Σε αυτό το βίντεο βοήθημα του Γιώργου Τερμετζόγλου, το πρώτο από μια σειρά βοηθημάτων για το iPhone και το iPad, θα κάνουμε μια πρώτη γνωριμία με το XCode, το βασικό πρόγραμμα που χρησιμοποιείται από όλους τους προγραμματιστές που αναπτύσουν εφαρμογές για το iPhone και το iPad.]]></description> <content:encoded><![CDATA[<p><iframe
src="http://blip.tv/play/AYLWjjcA.html" width="680" height="460" frameborder="0" allowfullscreen></iframe><embed
type="application/x-shockwave-flash" src="http://a.blip.tv/api.swf#AYLWjjcA" style="display:none"></embed></p><hr/><h1>Χρήσιμοι σύνδεσμοι</h1><ul><li><a
href="http://developer.apple.com/xcode/" title="Apple XCode" target="_blank">Apple XCode</a></li><li><a
href="http://developer.apple.com/devcenter/ios/index.action" title="Apple Developers Center" target="_blank">Apple Developers</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://greektuts.net/iphone-xcode-app-development-part1/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>HTML5 Canvas</title><link>http://greektuts.net/html5-canvas/</link> <comments>http://greektuts.net/html5-canvas/#comments</comments> <pubDate>Wed, 28 Sep 2011 09:15:04 +0000</pubDate> <dc:creator>Pantso</dc:creator> <category><![CDATA[HTML5]]></category> <category><![CDATA[Web Building]]></category> <category><![CDATA[canvas]]></category> <category><![CDATA[html 5]]></category> <category><![CDATA[html canvas]]></category> <category><![CDATA[html5 canvas]]></category> <category><![CDATA[Javascript]]></category> <category><![CDATA[ζωγραφική]]></category> <category><![CDATA[ζωγραφική canvas]]></category> <guid
isPermaLink="false">http://greektuts.net/?p=5369</guid> <description><![CDATA[Σε αυτό το βοήθημα, θα δούμε πως θα χρησιμοποιήσουμε το νέο στοιχείο της HTML5 που μας επιτρέπει να "ζωραφίζουμε" διάφορα γραφικά και εικόνες στην ιστοσελίδα μας. Μιλάμε φυσικά για το στοιχείο canvas που έχει γίνει πλέον πολύ διαδεδομένο ανάμεσα στους developers ιστοσελίδων.]]></description> <content:encoded><![CDATA[<p>Ας ξεκινήσουμε με μια μικρή αναδρομή στην ιστορία του στοιχείου <strong>canvas</strong>. H Apple είχε πρώτοεμφανίσει το στοιχείο canvas για χρήση στο OSX Dashboard αρκετά χρόνια πρίν, και σιγά σιγά οι browsers άρχισαν να το υποστηρίζουν σαν χαρακτηριστικό, όταν το ενσωμάτωσε στον Safari. Πλέον το στοιχείο canvas υποστηρίζεται πλήρως από τους περισσότερους browsers (για την ακρίβεια από όλους τους νέους browsers) και είναι πλέον στα επίσημα χαρακτηριστικά της HTML5.</p><hr/><h1>Δημιουργούμε τον καμβά μας</h1><p>Ανοίγουμε τον αγαπημένο μας text editor (για παράδειγμα το Notepad++) και δημιουργούμε ένα νέο αρχείο HTML. Γράφουμε μέσα στο body τον παρακάτω κώδικα:</p><pre name="code" class="html">
<canvas id="MyCanvas" width="400" height="225">
  
</canvas>
</pre><p>Αφού σώσουμε την σελίδα ώς <strong>index.html</strong> για παράδειγμα, έχουμε δημιουργήσει το περιβάλλον στο οποίο θα βρίσκεται ο καμβάς μας. Συνεχίζουμε γράφοντας μέσα στο head της σελίδας μας τον παρακάτω κώδικα:</p><pre name="code" class="js">%MINIFYHTMLf8a7448bc482020b57020446a997da930%%MINIFYHTMLf8a7448bc482020b57020446a997da931%</pre><p>Έτσι εισάγουμε την jQuery στην σελίδα μας, και &#8220;καλούμε&#8221; το στοιχείο canvas που δημιουργήσαμε μέσα από την βιβλιοθήκη. Προσοχή, ο javascript κώδικας που γράψαμε στο head, χρειάζεται οπωσδήποτε το στοιχείο canvas που γράψαμε στο body, για να δουλέψει. Από μόνος του δεν κάνει τίποτα.</p><hr/><h1>Ας ζωγραφίσουμε</h1><p>Στο head μας, αλλάζουμε τον κώδικα στον παρακάτω κώδικα</p><pre name="code" class="js">
var ctx = canvas.getContext("2d");
	// Ζωγραφίζουμε τον σταυρό
	ctx.fillStyle = "#0873a5";
	ctx.fillRect(0, 0, 50, 50);
	ctx.fillStyle = "white";
	ctx.fillRect(50, 0, 25, 50);
	ctx.fillStyle = "#0873a5";
	ctx.fillRect(75, 0, 50, 50);
	ctx.fillStyle = "white";
	ctx.fillRect(0, 50, 125, 25);
	ctx.fillStyle = "#0873a5";
	ctx.fillRect(0, 75, 50, 50);
	ctx.fillStyle = "white";
	ctx.fillRect(50, 75, 25, 50);
	ctx.fillStyle = "#0873a5";
	ctx.fillRect(75, 75, 50, 50);
	// Ζωγραφίζουμε τις ρίγες
	ctx.fillStyle = "#0873a5";
	ctx.fillRect(125, 0, 280, 25);
	ctx.fillStyle = "white";
	ctx.fillRect(125, 25, 280, 25);
	ctx.fillStyle = "#0873a5";
	ctx.fillRect(125, 50, 280, 25);
	ctx.fillStyle = "white";
	ctx.fillRect(125, 75, 280, 25);
	ctx.fillStyle = "#0873a5";
	ctx.fillRect(125, 100, 280, 25);
	ctx.fillStyle = "white";
	ctx.fillRect(0, 125, 400, 25);
	ctx.fillStyle = "#0873a5";
	ctx.fillRect(0, 150, 400, 25);
	ctx.fillStyle = "white";
	ctx.fillRect(0, 175, 400, 25);
	ctx.fillStyle = "#0873a5";
	ctx.fillRect(0, 200, 400, 25);
});
</pre><p>O παραπάνω κώδικας μας δίνει το εξής αποτέλεσμα</p><blockquote><p><img
src="http://static.greektuts.net/uploads3/2011/09/greek-flag1.jpg" alt="" title="greek-flag" width="680" height="450" class="aligncenter size-full wp-image-5385" /></p></blockquote><p>Ας δούμε λοιπόν τι ακριβώς γίνεται στον παραπάνω κώδικα.</p><p>Για να ζωγραφίσουμε παραλληλόγραμμα χρησιμοποιούμε την εντολή:</p><pre name="code" class="js">
fillRect(x,y,width,height)
</pre><p>Στην παραπάνω εντολή το <strong>χ</strong> και το <strong>ψ</strong> αντιπροσωπεύουν την αρχή του παραλληλόγραμμου, και ώς σημείο 0,0 θεωρούμε την πάνω αριστερή γωνία του παραθύρου μας.</p><hr/><p>Για να ορίσουμε το χρώμα του παραλληλογράμμου που θα σχεδιάσουμε, ακριβώς στην γραμμή πρίν το σχεδιάσουμε χρησιμοποιούμε την εντολή:</p><pre name="code" class="js">
ctx.fillStyle = "#0873a5"
</pre><p>στην οποία δίνουμε σε δεκαεξαδική ή rgb μορφή τον κωδικό του χρώματος.</p><hr/><p>Τέλος αν θέλουμε να προσθέσουμε και περίγραμμα γύρω από το παραλληλόγραμμο μας χρησιμοποιούμε την εντολή:</p><pre name="code" class="js">
strokeRect(x,y,width,height)
</pre><p>με την οποία δίνουμε συντεταγμένες για το που ακριβώς θα ζωγραφιστεί το border.</p><hr/><p>Χρησιμοποιώντας και επιπλέον εντολές όπως στην λίστα παρακάτω μπορούμε να δημιουργήσουμε rounded corners στα borders μας, με διαφορετικό χρώμα, και διαφορετικό πάχος.</p><pre name="code" class="js">
  var rectX = 10;
  var rectY = 10;
  var rectWidth = 100;
  var rectHeight = 100;
  var cornerRadius = 15;
  context.lineJoin = "round";
  context.lineWidth = cornerRadius;
  context.strokeStyle = "rgb(0, 128, 0)";
  context.strokeRect(rectX+(cornerRadius/2), rectY+(cornerRadius/2),
  rectWidth-cornerRadius, rectHeight-cornerRadius);
</pre><p>Διαβάστε περισσότερα για το στοιχείου canvas σε μια από τις καλύτερες ιστοσελίδες για τεχνικά θέματα της HTML5, το <a
href="http://diveintohtml5.org/canvas.html" title="Dive Into HTML5" target="_blank">DiveIntoHTML5</a></p><hr/><p><a
href="http://demo.greektuts.net/html5/canvas/"><img
src="http://static.greektuts.net/uploads3/2011/09/live-demo.png" alt="" title="Live Demo" width="680" height="69" class="aligncenter size-full wp-image-5398" /></a></p><hr/><p>Εσείς τι μπορείτε να σχεδιάσετε με το στοιχείο canvas; Περιμένουμε στα σχόλια να δούμε τις δικές σας δοκιμές.</p> ]]></content:encoded> <wfw:commentRss>http://greektuts.net/html5-canvas/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Σχετικά Με Τα Νέα Πεδία Φόρμας Στην HTML5</title><link>http://greektuts.net/about-new-form-fields-in-html5/</link> <comments>http://greektuts.net/about-new-form-fields-in-html5/#comments</comments> <pubDate>Wed, 06 Jul 2011 06:05:27 +0000</pubDate> <dc:creator>prince.gr</dc:creator> <category><![CDATA[CSS]]></category> <category><![CDATA[HTML5]]></category> <category><![CDATA[HTML]]></category> <category><![CDATA[input]]></category> <category><![CDATA[input fields]]></category> <category><![CDATA[new inputs]]></category> <category><![CDATA[prince.gr]]></category> <category><![CDATA[νέα πεδία]]></category> <category><![CDATA[παναγιώτης βελισαράκος]]></category> <category><![CDATA[φόρμα]]></category> <guid
isPermaLink="false">http://greektuts.net/?p=5199</guid> <description><![CDATA[Σε αυτό το πρώτο guest άρθρο από τον Παναγιώτη Βελισαράκο, θα μάθουμε για τα νέα πεδία φόρμας που προστίθενται με τον ερχομό της HTML5 και θα δούμε κάποια ζητήματα που αφορούν στο στυλ των νέων πεδίων και τις διαφορές μεταξύ των browsers, κάτι που απασχολεί ιδιαίτερα όσους θέλουν (ή απαιτείται) τα site τους να εμφανίζονται ίδια σε κάθε browser.]]></description> <content:encoded><![CDATA[<p>Η <abbr
title="HyperText Markup Language" style="text-decoration:underline;cursor:help;">HTML</abbr>5 αναβαθμίζει αρκετά τις φόρμες, κάτι που έπρεπε να έχει συμβεί από καιρό. Στο <a
href="http://diveintohtml5.org/forms.html">Dive into HTML5</a> μπορείτε να δείτε μια παρουσίαση / ανάλυση των νέων πεδίων που έχουμε ήδη στη διάθεσή μας κι εγώ θα συμπληρώσω αυτές τις πληροφορίες με διάφορα ζητήματα που αφορούν στο στυλ των νέων πεδίων και τις διαφορές μεταξύ των browsers, κάτι που απασχολεί ιδιαίτερα όσους θέλουν (ή απαιτείται) τα site τους να εμφανίζονται ίδια σε κάθε browser.</p><hr/><h2>type=&#8221;email&#8221; και type=&#8221;url&#8221;</h2><p>Το πεδίο αυτό<br
/> <input
type="email" /> είναι το email που, όπως όλα τα καινούργια <code>input</code>s συμπεριφέρεται σαν <code>type="text"</code>σε όσους browsers δεν υποστηρίζεται. Θα δοκιμάσουμε να δώσουμε το παρακάτω (όχι πολύ όμορφο!) στυλ και θα περιμένουμε να αποκτήσει ένα εκτυφλωτικό πράσινο border σε όλους τους σύγχρονους browsers.</p><pre name="code" class="html">
input[type="text"]	{ border:1px solid #f00; }
input[type="email"],
input[type="number"],
input[type="range"],
input[type="search"],
input[type="url"]	{ border:1px solid #0f0; }
</pre><blockquote><p> <a
href="http://static.greektuts.net/uploads3/2011/07/html5inputs.png"><img
class="size-full wp-image-5212 aligncenter" title="html5inputs" src="http://static.greektuts.net/uploads3/2011/07/html5inputs.png" alt="" width="680" height="302" /></a></pre></blockquote><p><strong>Firefox</strong> 4–5, <strong>Chrome</strong> 12, <strong>Opera</strong> 11, <strong>Internet Explorer</strong> 9 και -περιέργως- 8 μια χαρά, στον Internet Explorer 7 το border είναι κόκκινο. Δουλεύει περίπου όπως μας υποσχέθηκαν! Θα περίμενα να εμφανιστεί το κόκκινο border και στον IE 8 αλλά, φαίνεται πως ναι μεν δεν αναγνωρίζει το <em>attribute</em> <code>type="email"</code> αλλά του δίνει το κατάλληλο στυλ. Ο IE 7 «δημιουργεί» ένα <code>type="text"</code> attribute που είναι το default <code>type</code> για τα <code>input</code>s και του δίνει τα αντίστοιχα στυλ.</p><p>Το ίδιο συμβαίνει και στο πεδίο <code>url</code>:<br
/> <input
type="url" /><hr/><h2>type="number"</h2><p>Το <code>number</code><br
/> <input
type="number" /> συμπεριφέρεται με τον ίδιο τρόπο — πράσινο border σε όλους τους browsers, κόκκινο στον IE 7. Ο Chrome και ο Opera προσθέτουν 2 <em>άσχημα μικρά κουμπιά-βελάκια</em> στην δεξιά άκρη του πεδίου για τον έλεγχο της τιμής του, ενώ μπορoύμε α αλλάξουμε αυτή την τιμή και με τα βελάκια του πληκτρολογίου· αυτά όμως είναι <a
href="http://diveintohtml5.org/forms.html#type-number">ήδη καταγεγραμμένα</a>, δεν έχει μείνει κάτι να προσθέσω!</p><hr/><h2>type="range"</h2> <input
type="range" value="5" /> Εδώ έχουμε πρόβλημα! Το πεδίο αυτό εμφανίζεται με πολύ διαφορετικό τρόπο σε Chrome / Opera και σε οποιοδήποτε άλλο browser και αυτό δεν είναι πολύ… χρήσιμο αφού, π.χ. για να δω την τιμή που έχω επιλέξει πρέπει να χρησιμοποιήσω Javascript. Θα δοκιμάσω μερικά στυλ να δω τι θα γίνει:</p><pre name="code" class="html">
input[type="range"] {
	border:0 none;
	background-color:#009;
	color:#fff;
	width:60px;
	height:16px;
}
</pre><p>Το <code>border</code> δεν το χρειαζόμαστε — άλλωστε δεν εμφανίζεται καν σε Chrome και μάλλον είναι καλύτερα έτσι. Το <code>background-color</code> αγνοείται από τους browsers που σχεδιάζουν <em>sliders</em> αντί για <code>input</code>s, όπως επίσης και το <code>color</code>, αφού δεν υπάρχει κείμενο να πάρει χρώμα. Οι περισσότεροι browsers σέβονται τις διαστάσεις που ζήτησα εκτός από τον Chrome που αδιαφορεί για το ύψος. Στον Opera βέβαια το ύψος ενδέχεται να δημιουργήσει πρόβλημα αφού μπορεί το χειριστήριο να γίνει τόσο μικρό που να είναι άχρηστο! Η γνώμη μου είναι -ντρέπομαι που το λέω- να χρησιμοποιήσετε jQuery UI για αυτή τη δουλειά (ή κάποιο άλλο Javascript) αφού οι διαφορές δεν είναι μόνο οπτικές αλλά και λειτουργικές.</p><hr/><h2>type="date"</h2><p>Για την ακρίβεια, όχι μόνο <code>date</code> αλλά και <a
href="http://diveintohtml5.org/forms.html#type-date">διάφορες παραλλαγές ημερομηνίας και ώρας</a>. Ξεχάστε το καλύτερα, μόνο ο Opera κάνει κάτι χρήσιμο με αυτά τα πεδία ενώ ο Chrome εμφανίζει τα άσχημα μικρά βελάκια του <code>number</code> που δεν βοηθούν καθόλου στη συμπλήρωση του πεδίου. Καλύτερα να μείνουμε στην Javascript για λίγο ακόμα.</p><hr/><h2>type="search"</h2><p>Το <code>search</code><br
/> <input
type="search" /> δεν έχει κάποια ιδιαιτερότητα εκτός από το <strong>x</strong> που εμφανίζεται στην δεξιά μεριά σε Webkit browsers και μου επιτρέπει να καθαρίσω το πεδίο.</p><hr/><h2>type="color"</h2> <input
type="color" /> Color; Αλήθεια; Give me a break!</p><hr/><h2>Επίλογος</h2><p>Μπορούμε από τώρα, άφοβα, να εντάξουμε τα <code>email</code>, <code>url</code>, <code>number</code> και <code>search</code> στον κώδικά μας αφού είναι σίγουρο πως οι browsers σιγά-σιγά θα χρησιμοποιήσουν αυτά τα πεδία για να διευκολύνουν τον χρήστη, όπως π.χ. κάνει το iOS με τα <code>email</code>, <code>url</code> και <code>number</code>, ενώ δεν δημιουργούν προβλήματα σε παλιότερους browsers. Χρειάζεται λίγες γραμμές παραπάνω CSS αλλά αυτό δεν είναι πρόβλημα. Για τα υπόλοιπα πεδία, <code>range</code>, <code>date</code> (και παραλλαγές) και <code>color</code>, εγώ δηλώνω μάλλον επιφυλακτικός αφού η εμφάνιση διαφέρει πολύ από browser σε browser και ίσως τελικά να χρειαστείτε περισσότερη Javascript. Ίσως να είναι νωρίς ακόμα, θα δούμε!</p> ]]></content:encoded> <wfw:commentRss>http://greektuts.net/about-new-form-fields-in-html5/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>GreekTuts CSS Awards Αποτελέσματα</title><link>http://greektuts.net/greektuts-css-awards-2011-results/</link> <comments>http://greektuts.net/greektuts-css-awards-2011-results/#comments</comments> <pubDate>Thu, 30 Jun 2011 15:10:11 +0000</pubDate> <dc:creator>Pantso</dc:creator> <category><![CDATA[CSS]]></category> <category><![CDATA[Διαγωνισμοί]]></category> <category><![CDATA[awards]]></category> <category><![CDATA[css awards]]></category> <category><![CDATA[results]]></category> <category><![CDATA[βραβεία]]></category> <category><![CDATA[διαγωνισμοί]]></category> <category><![CDATA[Νέα]]></category> <guid
isPermaLink="false">http://greektuts.net/?p=5139</guid> <description><![CDATA[Τα GreekTuts CSS Awards έφτασαν στο τέλος τους και ανακοινώθηκαν οι 10 καλύτερες ιστοσελίδες, όπως εσείς τις ψηφίσατε, αλλά και όλοι οι νικητές και τα δώρα τους. Διαβάστε περισσότερα, και δείτε ποιές είναι οι καλύτερες ιστοσελίδες για το 2011.]]></description> <content:encoded><![CDATA[<h1>Oι 10 Καλύτερες Ιστοσελίδες</h1><blockquote><p><a
href="http://www.ntamakoupa.com/"><img
class="size-full wp-image-5141 aligncenter" title="1st" src="http://static.greektuts.net/uploads3/2011/06/1st.png" alt="" width="680" height="450" /></a></p></blockquote><hr
/><blockquote><p><strong><a
href="http://designdots.gr/"><img
class="size-full wp-image-5143 aligncenter" title="2nd" src="http://static.greektuts.net/uploads3/2011/06/2nd.png" alt="" width="680" height="450" /></a><br
/> </strong></p></blockquote><hr
/><blockquote><p><strong><a
href="http://www.plakamaskaneis.gr/"><img
class="size-full wp-image-5144 aligncenter" title="3rd" src="http://static.greektuts.net/uploads3/2011/06/3rd.png" alt="" width="680" height="450" /></a><br
/> </strong></p></blockquote><hr
/><blockquote><p><strong><a
href="http://www.judo.com.gr/"><img
class="size-full wp-image-5144 aligncenter" title="4th" src="http://static.greektuts.net/uploads3/2011/06/4th.png" alt="" width="680" height="257" /></a><br
/> </strong></p></blockquote><hr
/><blockquote><p><strong><a
href="http://www.creativeg.gr/"><img
class="size-full wp-image-5144 aligncenter" title="5th" src="http://static.greektuts.net/uploads3/2011/06/5th.png" alt="" width="680" height="257" /></a><br
/> </strong></p></blockquote><hr
/><blockquote><p><strong><a
href="http://kim.dom.gr/"><img
class="size-full wp-image-5144 aligncenter" title="6th" src="http://static.greektuts.net/uploads3/2011/06/6th.png" alt="" width="680" height="257" /></a><br
/> </strong></p></blockquote><hr
/><blockquote><p><strong><a
href="http://www.ladieswall.com/"><img
class="size-full wp-image-5144 aligncenter" title="7th" src="http://static.greektuts.net/uploads3/2011/06/7th.png" alt="" width="680" height="257" /></a><br
/> </strong></p></blockquote><hr
/><blockquote><p><strong><a
href="http://mmafight.gr/"><img
class="size-full wp-image-5144 aligncenter" title="8th" src="http://static.greektuts.net/uploads3/2011/06/8th.png" alt="" width="680" height="257" /></a><br
/> </strong></p></blockquote><hr
/><blockquote><p><strong><a
href="http://www.ituts.gr/"><img
class="size-full wp-image-5144 aligncenter" title="9th" src="http://static.greektuts.net/uploads3/2011/06/9th.png" alt="" width="680" height="257" /></a><br
/> </strong></p></blockquote><hr
/><blockquote><p><strong><a
href="http://www.techcommunity.gr/"><img
class="size-full wp-image-5144 aligncenter" title="10th" src="http://static.greektuts.net/uploads3/2011/06/10th.png" alt="" width="680" height="257" /></a><br
/> </strong></p></blockquote><hr
/><p><strong>Αναλυτικότερα</strong></p><p>Από τα 228 σχόλια που έγιναν συνολικά, τα 173 ήταν έγκυρα και καταμετρήθηκαν.<br
/> Οι ψήφοι αναλυτικά:</p><ul><li><strong>64</strong> για το <strong>ΝtamaΚoupa</strong></li><li><strong>59</strong> για το <strong>DesignDots</strong></li><li><strong>17</strong> για το <strong>Plakamaskaneis</strong></li></ul><p>Για τις υπόλοιπες ιστοσελίδες οι ψήφοι κυμαίνονταν από 2 εώς 6 ψήφους.</p><hr
/><h1>Οι Νικητές</h1><p>Αναλυτικότερα τα δώρα που κερδίζουν οι 173 συμμετέχοντες:</p><p><strong>5 πακέτα Web Hosting από την TopHost.gr: </strong><br
/> <strong>1 PLATINUM</strong></p><ul><li>Nina</li></ul><p><strong>2 DELUXE</strong></p><ul><li>Znikos</li><li>CJ</li></ul><p><strong>3 ECONOMY</strong></p><ul><li>ΚΙΚΗ ΟΙΚΟΝΟΜΙΔΟΥ</li><li>Alextsits</li><li>stefanos</li></ul><hr
/><p><strong>20 κουπόνια δωρεάν κατοχύρωσης .EU domains από την TopHost.gr</strong></p><ul><li>Stefaniespyro</li><li>nikos</li><li>Faidra1997</li><li>Mike the great</li><li>Johnmast</li><li>Katia 2105</li><li>Kostastsats</li><li>Bombο</li><li>eevi66</li><li>aetios</li><li>Krmaria</li><li>Highlanderi</li><li>Labros66s</li><li>pinelopi</li><li>Georgia</li><li>Zachosgeorge03</li><li>Rodoula4ever97</li><li>Dinos</li><li>Johnb</li><li>Terrys Lalos</li></ul><hr
/><p><strong>2 Assassin’s Creed Brotherhood για PC</strong></p><ul><li>A-ni-ka</li><li>conn_art</li></ul><hr
/><p><strong>3 Συνδρομές στο ElegantThemes.com</strong></p><ul><li>Marinaki_b</li><li>Paoktsis17</li><li>Tsoutsas7</li></ul><hr
/><p><strong>20 Δωρεάν συνδρομές, διάρκειας 1 μήνα, για το GreekTuts</strong></p><ul><li>GeoPas</li><li>Makriefi</li><li>Frank</li><li>Yayastam</li><li>MiKe-Dee</li><li>ΜΙΧΑΛΗΣ ΦΙΛΟΣ</li><li>Dr Melenios</li><li>Amalia</li><li>Vikaki_kok</li><li>Thanos</li><li>Ulq</li><li>E X Core</li><li>Nikos</li><li>geo zachos</li><li>Romaninho A</li><li>Ren</li><li>Kouklara89</li><li>AnaC</li><li>code_red</li><li>Ice George</li></ul><hr
/><p><strong>5 Δωρεάν συνδρομές, διάρκειας 6 μηνών, για το GreekTuts</strong></p><ul><li>Fotis</li><li>Alicerapti7</li><li>Vagelis</li><li>Natasadim8</li><li>Costasthecook</li></ul><hr
/><p>Οι νικητές θα ενημερωθούν μέσα στις επόμενες ημέρες για την παραλαβή των δώρων τους.</p><p>ΠΡΟΣΟΧΗ: Τα κουπόνια κατοχύρωσης domain ισχύουν μέχρι σήμερα (30/6/2011) στις 24:00 ! Επίσης οι 25 νικητές των συνδρομών για το GreekTuts πρέπει να επικοινωνήσουν μαζί μας για να δημιουργήσουμε τους λογαριασμούς τους.</p><p>Οι νικήτριες ιστοσελίδες θα ενημερωθούν σύντομα για το πώς μπορούν να βάλουν το αντίστοιχο badge που τους αντιστοιχεί σύμφωνα με την κατάταξη τους, αν το επιθυμούν, αλλά και για τις παραιτέρω διαδικασίες που τους εξασφάλισε ή εκάστοτε θέση τους στον διαγωνισμό.</p><p>Θέλουμε να σας ευχαριστήσουμε όλους για την συμμετοχή σας στα φετινά CSS Awards, και να δώσουμε συγχαρητήρια στις 10 καλύτερες ιστοσελίδες για φέτος ! Ραντεβού ξανά τον Ιανουάριο για τα <strong>GreekTuts CSS Awards 2012</strong> !</p><p>Επίσης θέλουμε να ευχαριστήσουμε τους χορηγούς μας για τα πλούσια δώρα !</p> ]]></content:encoded> <wfw:commentRss>http://greektuts.net/greektuts-css-awards-2011-results/feed/</wfw:commentRss> <slash:comments>16</slash:comments> </item> <item><title>Απαραίτητα Εργαλεία για Web Development</title><link>http://greektuts.net/essential-tools-for-web-development/</link> <comments>http://greektuts.net/essential-tools-for-web-development/#comments</comments> <pubDate>Wed, 29 Jun 2011 06:40:46 +0000</pubDate> <dc:creator>Pantso</dc:creator> <category><![CDATA[Web Building]]></category> <category><![CDATA[Προγραμματισμός]]></category> <category><![CDATA[dust me selectors]]></category> <category><![CDATA[firebug]]></category> <category><![CDATA[firefox plugins]]></category> <category><![CDATA[mozilla]]></category> <category><![CDATA[Screencast]]></category> <category><![CDATA[Tools]]></category> <category><![CDATA[web design]]></category> <category><![CDATA[web developer toolbar]]></category> <category><![CDATA[web development]]></category> <category><![CDATA[yslow]]></category> <category><![CDATA[εργαλεία]]></category> <category><![CDATA[εργαλεία για web developers]]></category> <category><![CDATA[πρόσθετα]]></category> <guid
isPermaLink="false">http://greektuts.net/?p=5123</guid> <description><![CDATA[H ζωή ενός developer είναι ομολογουμένως αρκετά δύσκολή. Όχι ότι σκάβει ή σπάει πέτρες, αλλά το να γράφεις χιλιάδες γραμμές κώδικα από το μηδέν δεν είναι και εύκολο πράγμα. Ευτυχώς, υπάρχουν πολλές λύσεις που μπορούν να μας βοηθήσουν και να μας κάνουν την ζωή λίγο πιο εύκολη (ή την δουλειά μας λίγο πιο γρήγορη). Δείτε ένα σύντομο screencast για τα απαραίτητα εργαλεία που χρειάζεται ένας web developer.]]></description> <content:encoded><![CDATA[<blockquote><p><object
classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="650" height="396" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0"><param
name="movie" value="http://cdn.screenr.com/public/1.2/flash/screenr.swf" /><param
name="flashvars" value="i=258685&amp;h=t&amp;svr=http://www.screenr.com/&amp;vEmbed=&lt;iframe src=&quot;http://www.screenr.com/embed/mpNs&quot; width=&quot;650&quot; height=&quot;396&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;" /><param
name="allowFullScreen" value="true" /><param
name="wmode" value="opaque" /><embed
width="650" height="396" src="http://cdn.screenr.com/public/1.2/flash/screenr.swf" wmode="opaque" flashvars="i=258685&amp;h=t&amp;svr=http://www.screenr.com/&amp;vEmbed=&lt;iframe src=&quot;http://www.screenr.com/embed/mpNs&quot; width=&quot;650&quot; height=&quot;396&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;" allowfullscreen="true" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></object></p></blockquote><h1>Χρήσιμα links</h1><p>Κατεβάστε και εσείς τα παραπάνω tools και plugins και κάντε την δουλειά σας πιο εύκολα</p><p><strong>Firebug</strong></p><p><a
href="http://getfirebug.com/" target="_blank">http://getfirebug.com/</a></p><p><strong>Web Developer ToolBar</strong></p><p><a
href="https://addons.mozilla.org/en-US/firefox/addon/web-developer/" target="_blank">https://addons.mozilla.org/en-US/firefox/addon/web-developer/</a></p><p><strong>Dust-Me Selector</strong></p><p><a
href="https://addons.mozilla.org/en-us/firefox/addon/dust-me-selectors/" target="_blank">https://addons.mozilla.org/en-us/firefox/addon/dust-me-selectors/</a></p><p><strong>YSlow</strong></p><p><a
href="https://addons.mozilla.org/en-US/firefox/addon/yslow/" target="_blank">https://addons.mozilla.org/en-US/firefox/addon/yslow/</a></p> ]]></content:encoded> <wfw:commentRss>http://greektuts.net/essential-tools-for-web-development/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>GreekTuts Sessions</title><link>http://greektuts.net/greektuts-sessions-description/</link> <comments>http://greektuts.net/greektuts-sessions-description/#comments</comments> <pubDate>Fri, 24 Jun 2011 10:12:56 +0000</pubDate> <dc:creator>Pantso</dc:creator> <category><![CDATA[+]]></category> <category><![CDATA[CSS]]></category> <category><![CDATA[HTML]]></category> <category><![CDATA[Illustrator]]></category> <category><![CDATA[Internet]]></category> <category><![CDATA[Javascript]]></category> <category><![CDATA[jQuery]]></category> <category><![CDATA[Photoshop]]></category> <category><![CDATA[SEO]]></category> <category><![CDATA[Web Building]]></category> <category><![CDATA[Wordpress]]></category> <category><![CDATA[front end design]]></category> <category><![CDATA[Google]]></category> <category><![CDATA[greektuts sessions]]></category> <category><![CDATA[online lessons]]></category> <category><![CDATA[private lessons]]></category> <category><![CDATA[seo]]></category> <category><![CDATA[sessions]]></category> <category><![CDATA[web design lessons]]></category> <category><![CDATA[Μαθήματα online]]></category> <category><![CDATA[μαθήματα web design]]></category> <category><![CDATA[μαθήματα υπολογιστών]]></category> <category><![CDATA[σεμινάρια υπολογιστών]]></category> <guid
isPermaLink="false">http://greektuts.net/?p=5091</guid> <description><![CDATA[Μετά από 6 μήνες προετοιμασίας, βρισκόμαστε επιτέλους στην ευχάριστη θέση να ανακοινώσουμε την νέα μας προσφορά. Σε μια σειρά προσωπικών Online Εκπαίδευσεων που θα ξεκινήσει τον Σεπτέμβριο, μπορείτε να μπείτε και εσείς στον κόσμο του Web Design και να μάθετε πως να δημιουργείτε ιστοσελίδες σαν επαγγελματίας. Το μόνο εργαλείο που θα χρειαστείτε είναι ο browser σας και όρεξη για μάθηση. Διαβάστε περισσότερα]]></description> <content:encoded><![CDATA[<p>Βρισκόμαστε σε μια εποχή που πλέον κατακλύζεται από ιστοσελίδες και web designers, και όπου πολλοί νέοι επιλέγουν αυτόν τον τομέα για τις σπουδές τους και την επαγγελματική τους κατάρτιση. Υπάρχουν επίσης πολλές περιπτώσεις στις οποίες η κατασκευή μιας ιστοσελίδας παρεξηγείται σαν έννοια, και το τελικό αποτέλεσμα δεν είναι το αναμενόμενο.</p><p>Σε μια προσπάθεια να κάνουμε πιο κατανοητά και διακριτά τα βήματα που χρειάζεται να ακολουθηθούν, αλλά και τις γνώσεις που χρειάζονται, για την δημιουργία μιας ιστοσελίδας, από την σκέψη μέχρι την υλοποίηση και την συντήρηση, προσφέρουμε σε όλους τους επισκέπτες μας μια σειρά από προσωπικούς online εκπαιδευτικούς οδηγούς που θα ξεκινήσει τον Σεπτέμβριο.</p><p>Αν ενδιαφέρεστε να συμμετάσχετε στις εκπαιδεύσεις και να μάθετε και εσείς πως να δημιουργείτε ιστοσελίδες με τον σωστό τρόπο, διαβάστε περισσότερες πληροφορίες παρακάτω.</p><hr
/><blockquote><p><a
href="#form"><img
class="size-full wp-image-5096 aligncenter" title="gts-big2" src="http://static.greektuts.net/uploads3/2011/06/gts-big2.png" alt="" width="680" height="450" /></a></p></blockquote><hr
/><h1>Τι είναι τα GreekTuts Sessions</h1><p>Τα GreekTuts Sessions είναι μια σειρά από <strong>προσωπικούς online εκπαιδευτικούς οδηγούς</strong> που θα ξεκινήσουν από τον Σεπτέμβριο. H διεξαγωγή αυτών των οδηγών θα γίνει μέσω μιας online πλατφόρμας e-learning, που σας προσφέρει δυνατότητα αλληλεπίδρασης με τον παρουσιαστή σας. Οι εκπαιδεύσεις είναι <strong>προσωπικές</strong>, πράγμα που σημαίνει ότι έχετε την δυνατότητα να μάθετε όλα όσα χρειάζεστε από το σπίτι σας, τις ώρες και μέρες που σας βολέυουν.</p><p>Κατά την παρουσίαση, θα μπορείτε να δείτε σε <strong>video</strong> την εκπαίδευση και να κάνετε ερωτήσεις όσο συχνά χρειαστεί. Το μόνο εργαλείο που θα χρειαστείτε είναι <strong>ο αγαπημένος σας browser</strong>, και <strong>πολύ όρεξη για μάθηση</strong>.</p><p>Επίσης, μετά την ολοκλήρωση των εκπαιδεύσεων, θα μπορείτε να έχετε πλήρη πρόσβαση στα video αλλά και σε όλο το εκπαιδευτικό υλικό, με τους κωδικούς σας <strong>για πάντα</strong>.</p><hr
/><h1>Πακέτα Εκπαιδεύσεων</h1><p>Σας προσφέρουμε 2 διαφορετικά πακέτα συμμετοχής στις εκπαιδεύσεις, για να διαλέξετε αυτό που σας συμφαίρει και σας βολέυει.</p><ul><li><strong>Πλήρες Πακέτο &#8211; Για παρακολούθηση όλης της σειράς </strong></li><li><strong>Συγκεκριμένο Κεφάλαιο &#8211; Για παρακολούθηση ενός συγκεκριμένου κεφαλαίου</strong></li></ul><p><em>* Οι τιμές των 2 πακέτων θα ανακοινωθούν σύντομα.</em></p><hr
/><h1>Περιεχόμενα Online Εκπαιδεύσης</h1><p><strong>Κεφάλαιο 1 &#8211; HTML &amp; CSS</strong></p><p>Σε αυτό το κεφάλαιο θα καλύψουμε όλες τις βασικές έννοιες για την γλώσσας προγραμματισμού του internet, την HTML, και θα δούμε όλα όσα χρειάζεται για το πώς μπορούμε να δώσουμε μορφοποίηση και στύλ στις σελίδες μας, με την χρήση των CSS.</p><p><strong>Κεφάλαιο 2 &#8211; Javascript &amp; jQuery</strong></p><p>Σε αυτό το κεφάλαιο θα καλύψουμε όλες τις βασικές λειτουργίες για την Javascript και θα δούμε πως μπορούμε έυκολα και γρήγορα να κάνουμε το περιεχόμενο της ιστοσελίδας μας πιο ενδιαφέρον και διαδραστικό για τον χρήστη. Επίσης θα δούμε τα πάντα για την διάσημη βιβλιοθήκη jQuery</p><p><strong>Κεφάλαιο 3 &#8211; Front End Design</strong></p><p>Σε αυτό το κεφάλαιο θα δούμε όλες τις βασικές αρχές που πρέπει να ακολουθούμε κατά την διάρκεια σχεδιασμού μιας ιστοσελίδας, και ποιά είναι τα λάθη που πρέπει να αποφέυγουμε. Επίσης θα δούμε και θα αναλύσουμε ποιά είναι τα διάφορα styles και trends που ακολουθούνται από designers σε όλο τον κόσμο.</p><p><strong>Κεφάλαιο 4 &#8211; WordPress</strong></p><p>Σε αυτό το κεφάλαιο θα μάθουμε για πάντα για το WordPress. Από το πως θα στήσουμε ένα δικό μας απλό blog, μέχρι πως θα δημιουργήσουμε μια κομψή και περίπλοκη ιστοσελίδα χρησιμοποιώντας το WordPress. Τέλος θα δούμε την δομή ενός θέματος και ενός plugin και θα μάθουμε τα βασικά για την δημιουργία του δικού σας θέματος και του δικού σας Plugin.</p><p><strong>Κεφάλαιο 5 &#8211; SEO &amp; Promotion</strong></p><p>Σε αυτό το κεφάλαιο θα μιλήσουμε για τις μηχανές αναζήτησεις και για το πώς μπορούμε να ανεβάσουμε την ιστοσελίδα μας ψηλά στις λίστες αποτελεσμάτων. Θα δούμε διάφορες τεχνικές προαγωγής της σελίδας μας, και όλα όσα πρέπει να αποφύγουμε κατά την προσπάθεια του Search Engine Optimization.</p><hr
/><h1 id="form"><strong>Φόρμα Εκδήλωσης Ενδιαφέροντος</strong></h1><p>Μπορείτε να συμπληρώσετε την φόρμα εκδήλωσης ενδιαφέροντος που ακολουθεί, και εμείς θα επικοινωνήσουμε μαζί σας για να συζητήσουμε τις μέρες και τις ώρες που θα γίνονται οι εκπαιδεύσεις, αλλά και να σας λύσουμε τυχόν απορίες που μπορεί να έχετε για το πρόγραμμα των εκπαιδεύσεων.</p><blockquote><p><strong>[contact-form-7]<br
/> </strong></p></blockquote> ]]></content:encoded> <wfw:commentRss>http://greektuts.net/greektuts-sessions-description/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
