6ο StudentGuru Event – ASP.NET Extensions

Χθες, Σάββατο 15 Μαρτίου 2008, ολοκληρώθηκε το 6ο StudentGuru event. Για το session του Γιάννη (aka DjSolid) μπορείτε να βρείτε πληροφορίες εδώ. Το δικό μου session περιελάμβανε παρουσίαση για τα κάτωθι

  • ASP.NET Dynamic Data WebSites
  • ADO.NET Data Services
  • ASP.NET Silverlight Controls
  • ASP.NET Model View Controller

Γενικά, πιστεύω πως αυτά που παρουσιαστήκανε ήτανε αρκετά πιο advanced σε σχέση με ό,τι σας έχουμε συνηθίσει, ελπίζω όμως να πήρατε αρκετό “food for thought” μετά το πέρας αυτού του event.

Για περισσότερα, μπορείτε να δείτε τα εξής:

Επίσης, τον Fiddler (HTTP debugging proxy) μπορείτε να το κατεβάσετε από εδώ, πληροφορίες για το REST μπορείτε να δείτε εδώ και για το JSON εδώ, ενώ για το πολυαναμενόμενο Entity Framework μπορείτε να ενημερωθείτε από τη σελίδα του MSDN

Επισυνάπτω τα slides και τον κώδικα της παρουσίασης. Τα samples που έχουνε database “ζητάνε” μια βάση Northwind, attached σε ένα instance του SQL Server ονόματι SQL Express. Την Northwind μπορείτε να την κατεβάσετε από εδώ, και τον SQL Server 2005 Express Edition από εδώ

Ένα θερμό ευχαριστώ σε όσους ήρθανε και μας παρακολουθήσανε!

DinnerNow για το .ΝΕΤ 3.5 RΤΜ

Μετά από αρκετό καιρό ύστερα από την έκδοση για την Beta 2 του .ΝΕΤ 3.5, κυκλοφόρησε η έκδοση και για το .NET 3.5 RTM!! Όσοι δεν ξέρετε το DinnerNow, να αναφέρω ότι πρόκειται για μία sample εφαρμογή που περιλαμβάνει τεχνολογίες όπως

– LINQ to SQL
– WF/WCF integration
– IIS7 & Windows Activation Services (WAS) hosting for WCF services
– WCF 3.5 Syndication Services
– WCF on the .NET Compact Framework 3.5

Για περισσότερες πληροφορίες μπορείτε να δείτε εδώ, ενώ την εφαρμογή μπορείτε να την κατεβάσετε από το CodePlex εδώ

Windows Communication Foundation και .NET Compact Framework

Σήμερα, χρειάστηκε να αναζητήσω πληροφορίες για το υποσύνολο του WCF που υποστηρίζεται από το .NET Compact Framework 3.5. Βρήκα μια λίστα εδώ την οποία και αναγράφω στο τέλος αυτού του blog post.

Για τα καινούρια bindings του .ΝΕΤ 3.5 (όπως π.χ. το WSHttpContextBinding) ούτε καν γίνεται λόγος, οπότε φαντάζομαι ότι δεν θα υποστηρίζονται. Οπότε, ξεχνάμε CF clients για Workflow Services Sad

Επιπροσθέτως, για δημιουργία proxy κλάσεων για WCF θα χρειαστείτε το εργαλείο NetCFSvcUtil.exe, το οποίο μπορείτε να το βρείτε άμα κατεβάσετε τα Power Toys for .NET Compact Framework 3.5. Μαζί με αυτό θα βρείτε και διάφορα άλλα καλούδια για Compact Framework development, όπως έναν CF CLR profiler (παρόμοιο με τον desktop CLR profiler), τον NETCF Network Log Viewer κ.α.

Δυστυχώς, στη δικιά μου περίπτωση (services με WSHttpBinding) δεν τα κατάφερα, αφού το μήνυμα Error: .NET Compact Framework does not support any bindings offered by this serv ice. WSHttpBinding_IRadiology: .NET Compact Framework does not support the binding type 'System.ServiceModel.WSHttpBinding'. μόνο ευχάριστο δεν είναι, οπότε θα ακολουθήσω την εναλλακτική, να σηκώσω μαζί με τα WCF services και κάποια deprecated .asmx.

Feature

Desktop WCF

Compact WCF

Bindings:    
· BasicHttpBinding Yes Yes
· CustomBinding Yes Yes
· WindowsMobileMailBinding N/A Yes
· ExchangeWebServiceMailBinding Yes, via NetCF install Yes
Formatters:    
· SoapFormatter Yes Yes
· BinaryFormatter Yes No
Encoders:    
· TextMessageEncoder Yes Yes
· BinaryMessageEncodingBindingElement Yes No
· MTOMEncoder Yes No
· GzipEncoder Sample available Sample available
Transports:    
· HttpTransportBindingElement Yes Yes
· HttpsTransportBindingElement Yes Yes
· MailTransportBindingElement Yes, via NetCF install Yes
· MsmqTransportBindingElement Yes No
· TcpTransportBindingElement Yes No
· (other transports) Yes No
XmlDictionaryReader/Writer Yes Yes; stub around XmlTextReader/Writer
DataContractSerializer Yes No; but can be wire-compatible with DCS via XmlSerializer
Service proxy generation Yes; via SvcUtil.exe Yes; via NetCFSvcUtil.exe, not integrated into VS2008
· Non-HTTP transports in generated proxies Yes Not built-in
· Custom headers in generated proxies Yes Not built-in
WS-Addressing Yes Yes
WS-Security message level security    
· X.509 Yes Yes
· Username/password Yes No
· SecurityAlgorithmSuite.Basic256Rsa15 Yes Yes
· SecurityAlgorithmSuite.Basic256 Yes No
WS-ReliableMessaging Yes No
Patterns    
· Service model Yes No
· Message layer programming Yes Yes
· Buffered messages Yes Yes
· Streaming messages Yes No
· Endpoint descriptions in .config files Yes No
Channel extensibility Yes Yes
Security channel extensibility Yes No

 

Υπολογισμός ακολουθίας Fibonacci

Ο Scott Hanselman έχει ένα πολύ ενδιαφέρον blog, στο οποίο κάθε τόσο ποστάρει διάφορα ενδιαφέροντα δείγματα κώδικα. Σε ένα από αυτά, ονόματι The Weekly Source Code 13 – Fibonacci Edition , έχει ποστάρει διάφορα τμήματα κώδικα για υπολογισμό του ν-οστού αριθμού Fibonacci (για όσους δεν θυμούνται, η ακολουθία Fibonacci είναι της μορφής an = an-1 + an-2)

Αρχικά, με C# 2.0 μπορούμε να κάνουμε το εξής

static int Fibonacci(int x)

{

if (x <= 1)

return x;

return Fibonacci(x – 1) + Fibonacci(x – 2);

}

Το οποίο, μπορεί να γραφτεί με το πολύ πιο όμορφο

static int Fibonacci(int x)

{

return x <= 1 ? x : Fibonacci(x – 1) + Fibonacci(x – 2);

}

 

Ιδιαίτερο ενδιαφέρον, παρουσιάζει ο υπολογισμός του με C# 3.0, ο οποίος γίνεται με το παρακάτω τμήμα κώδικα

Func<int, int> fib = null;

fib = n => n > 1 ? fib(n – 1) + fib(n – 2) : n;

Ίσως να αναρωτηθείτε, γιατί η δήλωση αρχικά ως null;; Δοκιμάστε να κάνετε compile το εξής:

Func<int, int> fib = n => n > 1 ? fib(n – 1) + fib(n – 2) : n;

Ο compiler διαμαρτύρεται ότι Error 1 Use of unassigned local variable ‘fib’ (δείτε ένα πολύ καλό blog post σχετικά με αυτό εδώ)

Ο compiler μας υποχρεώνει να έχουμε κάνει assign το fib, πριν μπορέσουμε να το χρησιμοποιήσουμε. Οπότε, ο “dirty” way για να το κάνουμε αυτό είναι να το δηλώσουμε ως null, οπότε και βγαίνει το παρακάτω, όπως πολύ σωστά έχει γράψει ο Scott

Func<int, int> fib = null;

fib = n => n > 1 ? fib(n – 1) + fib(n – 2) : n;

Με ένα

Console.WriteLine(fib(15));

βλέπουμε ότι το αποτέλεσμα είναι 610, οπότε ο υπολογισμός μας είναι σωστός.

Μπορεί να αναρωτηθείτε αν ο υπολογισμός όντως γίνεται αναδρομικά. Ισχύει, απλά δεν γίνεται ακριβώς αναδρομική κλήση συνάρτησης. Όπως θα δείτε στο εξαιρετικό blog post του Wes Dyer (πολλά thanx στον Palladin, μέσω του blog του οποίου γνώρισα το blog του Wes Dyer), αναφέρεται

But our C# workaround doesn’t really use recursion.  Recursion requires that a function calls itself.  The fib function really just invokes the delegate that the local variable fib references.  It may seem that this is just nit picking about words, but there is a difference.

Το οποίο μπορείτε να το διαπιστώσετε άμα εκτελέσετε τον κώδικα που έχει ακριβώς από κάτω από το παραπάνω

Func<int, int> fib = null;
fib = n => n > 1 ? fib(n – 1) + fib(n – 2) : n;
Func<int, int> fibCopy = fib;
Console.WriteLine(fib(6));                        // displays 8
Console.WriteLine(fibCopy(6));                    // displays 8
fib = n => n * 2;
Console.WriteLine(fib(6));                        // displays 12
Console.WriteLine(fibCopy(6));                    // displays 18

Γιατί θα αποτύχει το παραπάνω; Το fib στην 6η γραμμή μας γυρνάει n * 2. Οπότε, πολύ σωστά, το fib(6) στην 7η γραμμή θα δώσει 12. Στην 8η γραμμή, όμως, το fibCopy δείχνει στο “παλιό” fib, στη 2η γραμμή. Όμως, το fib εκεί πλέον γυρνάει n * 2!! Άρα το fibCopy πλέον θα είναι

fibCopy(n) = n => n > 1 ? (n-1) * 2 + (n-2) * 2 : n;

Και εφόσον το n είναι 6, η fibCopy θα μας γυρίσει (6-1) * 2 + (6-2) * 2, δηλαδή 18, όπως έχει γράψει και ο Wes παραπάνω.Για όσους ενδιαφέρονται, στο blog post του Wes υπάρχει μια ιδανική υλοποίηση “ανώνυμης” αναδρομής.

Συνεχίζοντας με το post του Mark, εξίσου ενδιαφέρουσα είναι και η F# υλοποίηση

let rec fib n = if n < 2 then 1 else fib (n-2) + fib(n-1)

Μικρούλι, έτσι; Με την λέξη let στην F# δηλώνουμε έναν “τύπο”, με το rec του λέμε ότι είναι αναδρομικός, και μετά είναι το απλό if/else syntax.

Τέλος, μπορείτε να δείτε υπολογισμό Fibonacci όρων με χρήση της ThreadPool εδώ αλλά και να διαβάσετε τα comments στο post του Mark, θα δείτε και άλλες υλοποιήσεις με διάφορες μεθόδους και γλώσσες!!

Πώς να κάνετε resize ένα vmware image

Χρησιμοποιώ συχνά virtual machines με το Vmware, είτε για να δοκιμάσω alpha/beta tools, είτε για να μην πειράξω υπάρχοντα working boxes. Σήμερα, εγκατέστησα ένα Windows Server 2003 R2 σε ένα virtual machine, αλλά από βιασύνη του έβαλα μόνο 10GB χωρητικότητα. Κατάλαβα το λάθος μου όταν έκανα windows update και είδα αποτυχία στο download του Service Pack 1 για το Visual Studio 2005 και στο Service Pack 2 του SQL Server 2005. Στα GUI εργαλεία του Vmware Workstation, όσο και αν έψαξα, δεν βρήκα κάτι. Με λίγη αναζήτηση όμως, ήμουνα τυχερός. Βρήκα τη λύση σε αυτό το blog.

Είναι πανεύκολο, αρκεί από command να δώσετε την εντολή

vmware-vdiskmanager -x sizeGB path_to_file.vmdk

όπου size το καινούριο μέγεθος σε GB που θέλετε να δώσετε στο image σας

Το συγκεκριμένο utility έχει και διάφορες άλλες επιλογές, τις οποίες μπορείτε να δείτε εδώ

D:Program FilesVMwareVMware Workstation>vmware-vdiskmanager
VMware Virtual Disk Manager – build 59824.
Usage: vmware-vdiskmanager.exe OPTIONS <disk-name> | <mount-point>
Offline disk manipulation utility
  Options:
     -c                   : create disk; need to specify other create options
     -d                   : defragment the specified virtual disk
     -k                   : shrink the specified virtual disk
     -n <source-disk>     : rename the specified virtual disk; need to
                            specify destination disk-name
     -p                   : prepare the mounted virtual disk specified by
                            the drive-letter for shrinking
     -q                   : do not log messages
     -r <source-disk>     : convert the specified disk; need to specify
                            destination disk-type
     -x <new-capacity>    : expand the disk to the specified capacity

     Additional options for create and convert:
        -a <adapter>      : (for use with -c only) adapter type (ide, buslogic or lsilogic)
        -s <size>         : capacity of the virtual disk
        -t <disk-type>    : disk type id

     Disk types:
        0                 : single growable virtual disk
        1                 : growable virtual disk split in 2Gb files
        2                 : preallocated virtual disk
        3                 : preallocated virtual disk split in 2Gb files

     The capacity can be specified in sectors, Kb, Mb or Gb.
     The acceptable ranges:
                           ide adapter : [100.0Mb, 950.0Gb]
                           scsi adapter: [100.0Mb, 950.0Gb]
        ex 1: vmware-vdiskmanager.exe -c -s 850Mb -a ide -t 0 myIdeDisk.vmdk
        ex 2: vmware-vdiskmanager.exe -d myDisk.vmdk
        ex 3: vmware-vdiskmanager.exe -r sourceDisk.vmdk -t 0 destinationDisk.vmdk
        ex 4: vmware-vdiskmanager.exe -x 36Gb myDisk.vmdk
        ex 5: vmware-vdiskmanager.exe -n sourceName.vmdk destinationName.vmdk
        ex 6: vmware-vdiskmanager.exe -k myDisk.vmdk
        ex 7: vmware-vdiskmanager.exe -p <mount-point>
              (A virtual disk first needs to be mounted at <mount-point>)

 

Όπως μπορείτε να δείτε, το αποτέλεσμα ήταν επιτυχές!!

image

Βέβαια, με αυτό τον τρόπο δεν αυξάνεται το μέγεθος του primary partition του virtual machine, αλλά προστίθεται ένα unassigned partition σε αυτό. Με τη χρήση του diskpart utility του λειτουργικού μπορείτε να το κάνετε format και assign σε ένα drive letter, και με τη χρήση εξειδικευμένων προγραμμάτων partitioning, μπορείτε να κάνετε merge τα δύο partitions (το primary που είχατε πριν με αυτό που δημιουργήσαμε πριν λίγο).

Οι συμμετοχές μου στο GadgetCompetition

Το post αυτό αναφέρεται στο γεγονός ότι έκλεισα τα 24 μου χρόνια (κλαψ γερνάμε κ.λ.π. Stick out tongue) αλλά και στις συμμετοχές μου στο διαγωνισμό της Microsoft Hellas για Vista GadgetsSmile

 

Οι συμμετοχές μου, λοιπόν, είναι:

  • StudentGuru News
    • Πρόσβαση στα τελευταία νέα της καλύτερης φοιτητικής κοινότητας στην Ελλάδα, του www.studentguru.gr. Προβολή των νέων (που ανανεώνονται καθημερινά) είτε σε νέο παράθυρο είτε σε flyout!!
  • SteelFm Player
    • Player για τον καλύτερο ελληνικό ραδιοφωνικό σταθμό, τον SteelFM
      Στο συγκεκριμένο gadget υπάρχει ένα known issue (sic! :P) με τον player, καθώς, για άγνωστο μέχρι στιγμής λόγο, δεν δουλεύουν τα buttons του player. Ελπίζω σύντομα να βγάλω άκρη και να διορθωθεί. Παρόλα αυτά, με δεξί κλικ στον player, όλες οι επιλογές είναι διαθέσιμες και παίζουν μια χαρά! Το συγκεκριμένο bug διορθώθηκε (πολλά thanx στον Γιάννη για τις πολλές ώρες που έφαγε), αλλά η ομάδα του Gallery δεν το έχει κάνει approve ώστε να είναι διαθέσιμο για download από το www.gadgetcompetion.gr Μέχρι να γίνει αυτό, μπορείτε να το κατεβάσετε από εδώ (πάλι πολλά thanx στον Γιάννη)
      Με το συγκεκριμένο gadget έχετε τη δυνατότητα για απευθείας πρόσβαση στο blog του εκάστοτε παραγωγού, αλλά και στους στίχους του κάθε κομματιού που παίζει live!!!
  • Imagine Cup Forum
    • Πρόσβαση στα τελευταία threads του επίσημου φόρουμ του φοιτητικού διαγωνισμού της Microsoft! Προβολή σε flyout του περιεχομένου του πρώτου post του κάθε thread, και εύκολη πλοήγηση στις απαντήσεις του!!

 

Όσοι συμμετάσχετε (ψηφίζοντας) στο διαγωνισμό, έχετε την ευκαιρία να κερδίσετε μερικά ωραία δωράκια. Αντιγράφοντας από τη σελίδα

http://www.gadgetcompetition.gr/gr/el/Prizes.aspx

Βραβείο 1 – 5: Μια Microsoft LifeCam VX-6000 για να ανακαλύψετε ένα νέο και απλό τρόπο επικοινωνίας με την οικογένεια και τους φίλους σας

Βραβείο 6 – 10: Ένα Microsoft LifeChat ZX 6000, ένα εξελιγμένο headset με το οποίο μπορείτε να κάνετε άνετα τις τηλεφωνικές ή video κλήσεις σας μέσω του Internet

Βραβείο 11 – 15: Ένα Microsoft Wireless Notebook Presenter Mouse 8000 το 3-σε-1 ποντίκι που αποτελεί ένα ισχυρό εργαλείο παρουσιάσεων, δείκτη laser και χειριστήριο πολυμέσων

 

Χρήση του BackgroundWorker

Πολλές φορές, όταν φτιάχνουμε μια Windows Forms εφαρμογή, χρειάζεται να εκτελέσουμε κάτι χρονοβόρο (π.χ. “τράβηγμα” πολλών στοιχείων από μια βάση δεδομένων). Σε αυτές τις περιπτώσεις, αν εκτελέσουμε τη χρονοβόρα διαδικασία σύγχρονα (δηλαδή από το ίδιο thread στο οποίο είναι η εφαρμογή μας) τότε παρατηρούμε ότι το παράθυρο “κολλάει” (Not Responding). Η λύση για αυτό το πρόβλημα είναι η εκτέλεση της χρονοβόρας διαδικασίας από διαφορετικό Thread.

Ενώ κάλλιστα μπορούμε να είτε να δημιουργήσουμε ένα καινούριο Thread είτε να χρησιμοποιήσουμε την ThreadPool (*), μια πολύ καλή μέθοδος για Windows Forms εφαρμογές είναι να χρησιμοποιήσουμε το BackgroundWorker component, το οποίο βρίσκεται στο namespace System.ComponentModel.

(*): Σε τέτοιες περιπτώσεις, καλό είναι να θυμόμαστε ότι τη φόρμα πρέπει να την πειράζουμε μόνο από το Thread στο οποίο εκτελείται. Περισσότερα για αυτό σε επόμενο blog post.

Αρχικά, κατασκευάζουμε μια Windows Forms εφαρμογή. Κατόπιν, κάνουμε drag drop έναν BackgroundWorker πάνω στη φόρμα

image

και βλέπουμε ότι δημιουργείται ένα instance του (με το default όνομα backgroundWorker1) στο κάτω μέρος του Windows Forms designer.

Στη συνέχεια, επειδή θέλουμε ο BackgroundWorker μας να υποστηρίζει και ακύρωση αλλά και να μας αναφέρει την πρόοδο της διαδικασίας που εκτελεί, πάμε στα properties του, και κάνουμε set σε true τα properties WorkerReportsProgress και WorkerReportsCancellation

image

Στη συνέχεια, ας δημιουργήσουμε event handlers για τα παρακάτω events

image

Για να δείξουμε τη λειτουργία του BackgroundWorker, θα κάνουμε drag drop στη φόρμα δύο buttons (startBtn, cancelBtn), ένα Listbox (listbox1) και ένα ProgressBar (progressBar1). Στο cancelBtn κάνουμε set το Enabled σε false, ώστε αρχικά να μην είναι δυνατό το “κλικ” σε αυτό. Οπότε, η φόρμα μας θα μοιάζει κάπως έτσι

image

Αφού κάνουμε διπλό κλικ στα startBtn και cancelBtn (ώστε να δημιουργηθούν οι απαραίτητοι event handlers), πάμε στον κώδικα της φόρμας

Καταρχάς, στο handler για το κλικ του startBtn γράφουμε τα εξής

image

 

Κάνουμε set σε null το datasource του listbox, ώστε να είναι τελείως άδειο.

Στη συνέχεια, κάνουμε enable και disable αντίστοιχα τα startBtn και cancelBtn. Στη συνέχεια, για να ξεκινήσει η χρονοβόρα διαδικασία, τρέχουμε τη μέθοδο RunWorkerAsync() στο backgroundWorker1.

Στον handler για το cancelBtn.Click γράφουμε τα εξής

image

με την μέθοδο CancelAsync ζητάμε ακύρωση της χρονοβόρας διαδικασίας.

Στη συνέχεια, στη μέθοδο backgroundWorker1_DoWork γράφουμε τα εξής

image

Η συγκεκριμένη μέθοδος καλείται όταν τρέξουμε τη μέθοδο RunWorkerAsync. Ας υποθέσουμε ότι η χρονοβόρα διαδικασία είναι η δημιουργία μερικών strings. Όταν αυτή τελειώσει, τότε τα δημιουργηθέντα strings θα εμφανιστούν στο listbox.

Να σημειωθεί ότι από αυτή τη συνάρτηση ΔΕΝ μπορούμε να πειράξουμε το user interface.

Αρχικά, γίνεται ένα new στο αντικείμενο e.Result. Αυτό είναι ένα αντικείμενο το οποίο είναι διαθέσιμο στους event handlers του backgroundWorker. Σε αυτό το αντικείμενο τοποθετούμε τη λίστα με τα strings που θα κατασκευάσουμε.

Το κάνουμε initialize σε List<string>, στη συνέχεια ξεκινάμε την επανάληψη, από 1 μέχρι 100 (έστω ότι θέλουμε 100 strings). Αρχικά, ελέγχουμε αν έχει γίνει αίτηση για cancellation του asynchronous task του background worker, και αν είναι έτσι, κάνουμε break από το loop. Ειδάλλως, δημιουργούμε ένα καινούριο Guid (επέλεγα αυτό τον τρόπο για τη δημιουργία τυχαίων strings), καλούμε την ToString() του, και το προσθέτουμε στην e.Result. Τέλος, καλούμε την ReportProgress, και της δίνουμε σαν παράμετρο το i.

Στη συνέχεια, παραθέτω τον κώδικα για τον ProgressChanged handler. Ναι, σωστά σκεφτήκατε! Το συγκεκριμένο event γίνεται raise όταν καλέσουμε την ReportProgress στο instance του BackgroundWorker.

image

Τι έχουμε εδώ;  Από αυτή τη συνάρτηση, μπορούμε να πειράξουμε το user interface, και αυτό ακριβώς κάνουμε, κάνοντας set το value του progressbar. Τι τιμές παίρνει αυτό; Το κάθε progressbar control έχει δύο properties που αντιπροσωπεύουν τη minimum και τη maximum τιμή του, δηλαδή τα values που έχει το progressbar όταν η μπάρα είναι άδεια και όταν είναι γεμάτη, αντίστοιχα.

image

Όπως βλέπουμε, αυτά τα έχουμε αφήσει στις default τιμές τους, 0 και 100.

Το τελευταίο κομμάτι κώδικα που θα δείξουμε είναι το παρακάτω

image

Το συγκεκριμένο κομμάτι κώδικα εκτελείται όταν τερματίσει η εκτέλεση της DoWork, είτε αυτή ολοκληρώθηκε κανονικά, είτε διακόπηκε από αίτημα για ακύρωση. Βάλαμε ένα “εικονικό” if statement, ώστε να δείξουμε ότι υπάρχει ενημέρωση για το αν έγινε ακύρωση της DoWork ή κανονική ολοκλήρωση. Μετά από αυτό, απλά κάνουμε bind το e.Result (που περιέχει τη λίστα με τα strings μας) στο listbox, και κάνουμε enable και disable τα startBtn και cancelBtn, αντίστοιχα, ώστε αν θέλουμε να ξαναξεκινήσει η διαδικασία. Υπ’όψιν ότι, έτσι όπως είναι ο κώδικας, η εμφάνιση των strings στο listbox θα γίνει, είτε ακυρωθεί η DoWork είτε τερματίσει κανονικά.

Ο κώδικας για την εφαρμογή είναι συννημένος στο παρόν blog post.

Videos από το 5ο StudentGuru Event

Μόλις τελειώσα το uploading των videos από το 5ο StudentGuru Event!!!
Πληροφορίες για το πρώτο μέρος του event μπορείτε να δείτε εδώ, και για το δεύτερο εδώ

Τα ανεβασμένα videos του event (καθώς και videos από άλλες παρουσιάσεις) μπορείτε να τα βρείτε εδώ

Αν θέλετε direct links, από το πρώτο μέρος, μπορείτε να δείτε τα

  1. Η πρώτη μας Windows Form
  2. Πώς γράφουμε events στη C#
  3. Περιήγηση του Windows Forms designer και εξερεύνηση των generated αρχείων
  4. Layout στα Windows Forms (anchoring, docking, groupbox, splitcontainer, tabcontrol)
  5. Menu controls στα Windows Forms (menustrip, contextmenustrip)
  6. Multiple Document Interface (MDI) εφαρμογές στα Windows Forms
  7. Visual Inheritance στα Windows Forms
  8. Εκτύπωση στα Windows Forms
  9. OpenFileDialog, SaveFileDialog, FontDialog, ColorDialog
  10. Επικοινωνία μεταξύ δύο Windows Forms
  11. Τεχνικές για “καλά” user interface, demo HawkEye και Fingerprint Reader, Περίληψη

Για το δεύτερο μέρος του event (κατασκευή μιας ηλεκτρονικής ατζέντας με δυνατότητα αποστολής SMS), μπορείτε να δείτε τα

  1. Part 1 (listbox, BindingList<T>, Serializable attribute)
  2. Part 2 (simple databinding, menustrip, AboutForm)
  3. Part 3 (επεξεργασία Person)
  4. Part 4 (προσπέλαση BindingList, xml serialization, xml deserialization, FormClosing event, try catch)
  5. Part 5 (MessageBox, Regular Expressions, SendSMS form, περιήγηση του ISendSMS plugin)
  6. Part 6 (περιήγηση του ISendSMS plugin, εικόνα σε Button, αποστολή SMS)

Σας ευχαριστούμε πολύ!!!!!!

Πέμπτο StudentGuru Event, Σάββατο, 12 Ιανουαρίου 2008, Μέρος Πρώτο

edit: Για πληροφορίες σχετικά με τα video από το event, πλοηγηθείτε εδώ 

Το Σάββατο, 12 Ιανουαρίου 2008, πραγματοποιήθηκε το πέμπτο StudentGuru event. Ήταν η πρώτη φορά που ένα StudentGuru event διεξήχθη Σάββατο μεσημέρι (σε αντίθεση με τα πρηγούμενα που γινόντουσαν Παρασκευή), και, κρίνοντας από το σύνολο των παρευρισκομένων (περίπου 40), κατά πάσα πιθανότητα θα καθιερώσουμε το Σάββατο ως μέρα που θα γίνονται τα events μας. Το event είχε τίτλο “Εισαγωγή στα Windows Forms”, και, προφανώς, τα περιεχόμενά του αφορούσαν την συγκεκριμένη τεχνολογία

Στα του event: Παρουσίασα το πρώτο μέρος (εδώ μπορείτε να δείτε πληροφορίες για το δεύτερο), και πιο συγκεκριμένα, έδειξα πληροφορίες σχετικά με τα παρακάτω

  • Εισαγωγή στα Windows Forms
  • C# Events
  • Layout
  • Menus
  • MDI
  • Visual Inheritance
  • Printing
  • File Dialogs
  • More Dialogs
  • Form Communication
  • “Κανόνες” για ωραία user interfaces
  • Ένα εργαλείο για debugging Windows Forms, το HawkEye
  • Εφαρμογή για ταυτοποίηση δακτυλικού αποτυπώματος, με χρήση του Microsoft Fingerprint Reader

Μπορείτε να πλοηγηθείτε εδώ για να κατεβάσετε τα slides και τα demos. Η όλη παρουσίαση έγινε capture με τη χρήση του Camtasia, σύντομα τα videos θα είναι διαθέσιμα online, οπότε και θα ενημερωθείτε από αυτό το blog.

Σας ευχαριστούμε!!!!!!!

ΥΓ. Πολλά συγχαρητήρια στον Κώστα που κέρδισε το φλουρί!!!!!!!

Εισαγωγή στο .NET Framework και στη C#, part 2, τμήμα Πληροφορικής και Τηλεπικοινωνιών Αθήνας

Σήμερα, 8 Ιανουαρίου 2008, στο τμήμα Πληροφορικής και Τηλεπικοινωνιών του Πανεπιστημίου Αθηνών, έγινε η δεύτερη παρουσίαση της C# και του .NET Framework σε συνέχεια της πρώτης (πληροφορίες για την οποία μπορείτε να βρείτε εδώ), στα πλαίσια του μαθήματος “Αντικειμενοστραφής Προγραμματισμός”. Ευχαριστώ ιδιαίτερα την κ. Ιζαμπώ Καράλη, επίκουρο καθηγήτρια του τμήματος Πληροφορικής, για την ευγενική της άδεια για την πραγματοποίηση της σημερινής παρουσίασης αλλά και της προηγούμενης, αλλά και τα περίπου 30 άτομα που ήταν παρόντα σήμερα.

Συνοπτικά, τα θέματα που παρουσιάστηκαν ήταν τα εξής

  • Επανάληψη των εννοιών της πρώτης παρουσίασης για το Common Language Runtime και τη διαδικασία εκτέλεσης, αλλά και για τα βασικά χαρακτηριστικά της C#
  • Περισσότερα χαρακτηριστικά της γλώσσας, όπως foreach για iterations, Generics, Exceptions, Inheritance / Polymorphism, Garbage Collection, Delegates, Events κ.α.
  • διάφορα samples σχετικά με Windows Forms, Windows Presentation Foundation, ASP .NET και AJAX, Compact Framework Development και XNA

Δυστυχώς, το καταραμένο F10 που πάτησα εκείνη την ώρα, αντί να γίνει capture από το Visual Studio έγινε capture από το Camtasia, οπότε και απέτυχε η προσπάθειά για video capturing Angry

Αν έχετε οποιαδήποτε απορία σχετικά με αυτά που παρουσιάστηκαν σήμερα, μπορείτε να επικοινωνήσετε μαζί μου μέσω προσωπικού μηνύματος είτε στο StudentGuru.gr, είτε στο lists.di.uoa.gr, είτε στο di.forums.gr, αλλά και στο MSN, στο dt008 – at – hotmail.com

Μπορείτε να κατεβάσετε τις διαφάνειες καθώς και τον κώδικα που παρουσιάστηκε σήμερα από εδώ. Στο ίδιο αρχείο θα βρείτε και το demo program με επίδειξη των νέων χαρακτηριστικών της C# 3.0, που σας υποσχέθηκα. Και πάλι ευχαριστώ!!

 ΥΓ. Κάποιος με ρώτησε για πρόγραμμα για συγγραφή κώδικα σε Windows Mobile. Μπορείτε να δείτε αυτό. Επίσης, κάποιος μου ζήτησε ένα εισαγωγικό βιβλίο για C#, που να έχει και έννοιες αντικειμενοστρεφούς προγραμματισμού. Δείτε αυτό