Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια

Microsoft plans to stop supporting the american economy by outsourcing more than 10000 jobs over 10 years to China

Microsoft is on track to outsource more than 1,000 jobs a year to China, according to blistering evidence released yesterday in Microsoft's increasingly nasty spat with Google over an employee who jumped ship in July.

In a revelation that highlights the complexity of China President Hu Jintao's visit to Seattle and Microsoft on Monday, legal filings detailed claims of how Microsoft had offended the Chinese government by not outsourcing as many jobs as promised to Chinese technology vendors.

http://seattletimes.nwsource.com/html/businesstechnology/2002468560_msftgoogle03.html

Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | 2 σχόλια
Δημοσίευση στην κατηγορία: ,

Μήπως τελικά η Google είναι Media Agency;

Η Google το μεγαλύρερο "interactive media agency", φαίνεται πως σκοπεύει να γίνει και το μεγαλύτερο "offline media agency".

Η Google ξεκίνησε να δραστηριοποιείται στο χώρο της offline διαφήμισης πουλώντας το διαφημιστικό χώρο εντύπων σε διαφημιζόμενους. Στο τελευταίο τεύχος της έντυπης έκδοσης του PC Magazine (τεύχος 06-Σεπτ-2005), η Google διέθεσε το διαφημιστικό χώρο του σε πελάτες της υπηρεσίας AdWords.

Απ' ότι φαίνεται η Google έχει ξεκινήσει να δημιουργεί ένα δίκτυο εντύπων (αρχικά το PC Magazine και Maximum PC) με στόχο να διαθέσει σε διαφημιζόμενους το διαφημιστικό τους χώρο.

Διαβάστε το post sto blog του BUZZ (http://www.anemone.gr/buzz/):

Μήπως τελικά η Google είναι Media Agency;

 

Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | (Χωρίς Σχόλια)
Δημοσίευση στην κατηγορία:

Οι στρουθοκάμηλοι της πληροφορικής

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

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

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

Και εδώ έρχεται το κόλλημα που έχουν πολλοί. Σκέφτεται ο πληροφορικάριος που έχει φάει 2-3 χρόνια τουλάχιστον σε εταιρία πληροφορικής "τι δουλειά έχω εγώ μέσα στα σαλάμια;". Να σας πω την άποψή μου:

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

Γιατί όμως στους άλλους χώρους οι μισθοί των πληροφορικάριων είναι μεγαλύτεροι; Πάρ' το λογικά. Πες ότι σε μια εταιρία πληροφορικής χάλασε ένας εκτυπωτής. Σιγά τα λάχανα γιατί: α) Και η κουτσή Μαρία εκεί μέσα ξέρει να το φτιάξει, β) και να το φτιάξεις εσύ δεν υπάρχει σοβαρό credit λόγω του α, και γ) αν η εταιρία πληροφορικής είναι μικρότερη από την εταιρία εκτός πληροφορικής με την οποία κάνουμε τη σύγκριση, τότε η ζημία που παθαίνει από τον χαλασμένο υπολογιστή είναι κατά πολύ μικρότερη.

Ιδιαίτερα το τελευταίο, που εμπλέκει μέσα και το μέγεθος της εταιρίας έχει πολύ νόημα. Ας το δούμε με περισσότερα νούμερα: Η εταιρία Α έχει 200 άτομα προσωπικό και η εταιρία Β έχει 20 άτομα προσωπικό. Το δίκτυο πέφτει και σκοτώνεται. Κάθε λεπτό που περνάει, η εταιρία Α χάνει 10 φορές περισσότερα λεφτά από την εταιρία Β. Την ώρα που καίγεται λοιπόν, η εταιρία Α έχει 10 φορές μεγαλύτερο περιθώριο στην αμοιβή του "σωτήρα" που θα επισκευάσει το δίκτυο.

Έχουμε και λέμε λοιπόν:

  1. Αν κάποια από τις εταιρίες είναι εταιρία πληροφορικής, η αμοιβή του σωτήρα μειώνεται δραματικά γιατί ο ανταγωνισμός είναι μεγάλος (οι δυνητικοί σωτήρες είναι περισσότεροι).
  2. Οι πιθανότητες να προσληφθείς σε μεγάλη εταιρία πληροφορικής είναι μικρότερες από το να προσληφθείς σε μεγάλη εταιρία εκτός πληροφορικής.

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

Την επόμενη φορά λοιπόν που κάποιος θα σας πει ότι μισθός των 1500 καθαρών δεν παίζει στην αγορά, να του πείτε να πάει να κοιταχτεί. Και 1500 καθαρά παίζουνε, και 1800 καθαρά παίζουνε και 3000 καθαρά παίζουνε. Και μπορεί αυτό που νομίζετε ότι θα κάνετε σε μια εταιρία με "σαλάμια" να είναι χαζό, όμως στο χέρι σας είναι να πιάσετε τα "σαλάμια" από το χέρι και να στήσετε μέσα ένα ζηλευτό infrastructure, βοηθώντας τον "σαλαμά" να βγάλει λεφτά και βάζοντας χέρι σε αυτά τα λεφτά. Κάντε μια δοκιμή και γράφτε στα *α*α**α σας τον κάθε βλάκα που σας προτείνει επταήμερη δωδεκάωρη απασχόληση με προοπτικές και 800 ευρώ μικτά.

Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | 5 σχόλια
Δημοσίευση στην κατηγορία:

Ρουτίνες ελέγχου και δημιουργίας αριθμών IBAN

'Εβαλα ένα νέο αρθράκι με κώδικα για τον έλεγχο εγκυρότητας και για δημιουργία αριθμών IBAN. Θα το βρείτε εδώ:

IBAN number processing

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

Ο κώδικας έχει γραφτεί ακολουθώντας τις οδηγίες του European Commmittee for Banking Standards (ECBS) (EBS204 V3.2 - August 2003)

Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | (Χωρίς Σχόλια)
Δημοσίευση στην κατηγορία:

The Smart Client Dilemma

Originally posted in Greek here.

I've build a smart client application for the management of a database table with the classic smart client architecture: The data access layer gets data from the database, wrap it up in a dataset and push it through a web service to the client application. The client caches data between sessions, updates those data when they're changed on the database, sends updates back when requested etc.

This application is a very simple address book (consisting of only one table for this example simplicity). The authorization schema is flat simple, all users have access to all the data and the application is going to be released commercially. That means that the use of the application will vary among the different users: One will use the address book to hold the 100 contacts that used to manage in outlook, one other will use it for the 1,000 contacts of his small company and a third, a big multi-national company, will use it to hold the contact info of it's 1,000,000 clients.

By reading Microsoft examples and anything else I could possible find on the web, I understand that they’re dealing with totally simplistic scenarios, expecting that the users of the smart clients will manage a quite small amount of data. TaskVision, for example, downloads all the data that interests the user in one piece. In my example this is possible only in the cases of 100 or 1,000 contacts. When it comes to the 1,000,000 contacts we face quite a problem, because you can't transfer it in logical time and you can't handle it efficiently on the client altogether.

So, I realize that despite the fact that the application stays exactly the same, the volume of data in the datatable is the factor that specifies the caching and synchronization policy I must follow. I'm thinking that the application must have pre-implemented scenarios which will be activated either by the user, or automatically based on the size of the data table.

I'll try to examine possible scenarios, based on the volume of data that will be transferred in each request:

  1. All: The Microsoft way. Perfect solution for small amount of data.
  2. One: If I get only the data row that the client requested each time, I've continuous delays on each request. Furthermore, the added delay for the roundtrip of the request through the web service and back, will give an awful experience to the users. This is the worst case scenario.
  3. X: How much X? Here I go for some ideas:
    • Relevant data. We have to dig in our data and to the business intelligence behind the data. Maybe I should get all contacts from the same category (e.g. clients). Maybe in some cases the user will benefit from this prediction. But what about all the other cases? What about a use scenario that doesn’t use categories to organize contacts?
    • Commonly used data. I fill up each data row with usage statistics. So when the client requests a row, the web service will return this row along with others that are commonly requested and the client doesn’t have them.
    • What else could exist? You have to swim in the usage stats to figure out a way to predict the next move of the user.

So, by examining this point of view, I come up with the conclusion that the smart client tricks can be effective only when I have a small amount of data.

Let's examine it from another point of view: How much and what data will I cache on the client?

  1. All: For a small amount of data, this is perfect. I can also output my dataset to an xml file on the user’s hard disk and everybody is happy.
  2. None: I loose any performance enhancement.
  3. Y: How much Y? Let's try my head for one more time:
    • Commonly used data. Yeap, maybe in some cases it will help. But with others...
    • Last Y requested. Maybe this in combination with (a) is a little better. But I can still think a lot of common uses that fail to be benefited from tricks like that.
    • What else can you think?

From what I can see, this point of view does not help with large amount of data either.

I sum up, and this is my conclusion:

  1. When I have a low data scenario, I transfer all the data to the client and cache it all locally.
  2. When I have a high data scenario, I do one or two tricks that I can think of, and leave all other matters to the mercy of user's bandwidth.

As for the point that separates the "few" data from the "many" data, it may be possible to distinguish it from what I just wrote. Measure the download speed of the client and decide a real time limit.

My real word scenarios are two:

  1. A web based content management system with categories, articles, products, users, files, images. It's already in the market and quite different usage scenarios have been observed: A user uses it to handle 10 categories, 30 products and 2 users, and another uses it to handle 20 categories, 20,000 products and 10 users.
  2. The second case is a portfolio application for an insurance company. A user uses it to handle his 150 clients and their contracts, another uses it to handle 5,000 contracts.

As I have understood, the "smart client" slogan is very catchy, but in real world scenarios is quite inapplicable. Even with Microsoft Task Vision, if you sell it to a client that uses it to manage 10,000 tasks, you'll have a lot of problems. From the other hand, if you try to develop a solution that will handle those cases, you end up questioning like me.

Maybe I've not understand something well? Is there anybody who can come up with more and better ideas?

Comment me please...

Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | (Χωρίς Σχόλια)

Όταν σε χτυπάει η μοίρα....

Τελικά όταν σε χτυπάει η μοίρα σε χτυπάει μαζικά και αλύπητα...

Χτες έβαψα το computer room και άλλαξα τους διακόπτες στους τοίχους. Και οι παλιοί και οι καινούργιοι είναι Legrand. Φοβερή ποιότητα για κάτι σκατουλάκια των 5-8 ευρώ. Σχεδόν δεν βιδώνεις. Εγώ είχα μείνει στις βλακείες με το λαστιχάκι που σου σπάγανε τα νεύρα. Τους βάζω λοιπόν στον τοίχο, κλείνω τα καπάκια, το φως δούλευε μια χαρά. Σήμερα το πρωί πάω να ανάψω και ...τζίφος. Η λάμπα είναι ok,η συνδεσμολογία στους διακόπτες ok, τι να φταίει άραγε... μέχρι αύριο που θα το ψάξω παραπάνω γράφω στα σκοτεινά.

Σήμερα το πρωί πάω στη δουλειά Το pc κλειστό. Ότι άρχισα να τα χώνω στην καθαρίστρια όταν βγήκε το login screen των windows με κάτι χρώματα περίεργα και artifacts από δω κι από κει... Μετά από ψάξιμο και δοκιμές ο ένοχος αποδείχθηκε η κάρτα γραφικών. Με κρέμασε 2-3 ώρες μέχρι να βρεθεί προσωρινή αντικαταστάτρια...

Επιστρέφω σπίτι, προσπαθώ να ανοίξω το pc, τίποτα. Ούτε φωνή ούτε ακρόαση. Υποψιάζομαι το τροφοδοτικό, τίποτα. Βάλε βγάλε ξαναβάλε καταλήγω στον καλό μου δίσκο τον 120άρη. Primary δίσκος πάνω στον οποίο δούλευα όλων των ειδών τα projects. Μόλις τον βάζεις στο ρεύμα κάνει ένα psiiiiiffff και ρίχνει μαζί και το τροφοδοτικό.

Και κάθομαι λοιπόν στα σκοτεινά, μπροστά στο laptop και προσπαθώ να θυμηθώ τι μπορεί να είχα μέσα στο δίσκο που να μην το έχω αλλού και να πάθω εγκεφαλικά μόλις το θυμηθώ. Και όσο και να στίβω το μυαλό μου δεν μπορώ να θυμηθώ τίποτα. Μήπως κώδικα ή άλλα source αρχεία; μπα...είναι ασφάλη στο source safe και σε backup cd. Μήπως documents ή άλλου είδους projects; μπα.... αυτά γίνονται sync με άλλα δύο μηχανήματα, το ένα στο γραφείο. Μήπως e-mails, contacts, tasks; μπα... αυτά είναι on-line και στο laptop... Ούτε καν τα bookmarks του ΙΕ...

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

Από την άλλη πάλι, τι σκ*τά είχα μέσα σε 120 Gb;

Θα ξεκινήσω μια λίστα εδώ και θα επανέλθω με πράγματα που έχασα, όταν συνειδητοποιήσω ότι τα έχασα:

  1. [8/9/05] Είχα αφήσει μερικά αρχεία checked out. 4-5 ώρες δουλιά. False alarm τα βρήκα...

Update 30/8/05: Το φως το έφτιαξα. Είχα κάνει λάθος σύνδεση στους διακόπτες. Απογοητεύτηκα που δεν βρήκα αναλυτικές οδηγίες στο site της Legrand, αλλά βρήκα το HomeTips που είναι πολύ καλό.

Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | 1 σχόλια
Δημοσίευση στην κατηγορία:

Ελληνικό spell check στο GMail !

Μέχρι σήμερα χρησιμοποιούσα το spell check του gmail για τα αγγλικά μου, μου ερχόταν πιο γρήγορο από του word. Σήμερα όμως έριξα μέσα ένα post μου για να ελέγξω την ορθογραφία των αγγλικών λέξεων και γλουπ !!!! οι ελληνικές λέξεις δεν κιτρίνισαν... Γράφω μια λέξη λάθος... κιτρινίζει... κάνω κλικ.... οοοοπ, προτεινόμενες διορθώσεις.....

Κοίτα να δεις πόσο γρήγορα υποστηρίζουν κάποιοι την ελλαδίτσα....

Πι ες: μπλέκει λίγο τα πράγματα όταν είναι ανάμικτα ελληνικά και αγγλικά...

Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | (Χωρίς Σχόλια)
Δημοσίευση στην κατηγορία:

Η διαφορά του DotNetZone

Πολλές από τις διαφορές του να έχω blog στο dotnetzone ήταν προφανείς και πριν μεταφέρω το blog μου εδώ. Αυτό που δεν περίμενα σε καμία περίπτωση ήταν η τεραστίων διαστάσεων διαφορά που κάνει στο ranking του google. Προφανώς, πολύ περισσότερα links οδηγούν εδώ από το blogs.gr που ήμουν, προφανώς οι γύρω σελίδες είναι πολύ πιο σχετικές αλλά και έτσι δεν το περίμενα.

Τα περισσότερα posts μου βγαίνουν σε πολύ ψηλές θέσεις στο google για αρκετά γενικά keywords. Αποκορύφωμα: Ψάχνω για "resize a bitmap", κάτι που μου φαινόταν τόσο γενικόλογο και τόσο πολυπαιγμένο, που δεν υπήρχε περίπτωση να εμφανιστεί μέσα στις πρώτες σελίδες, και μάλιστα με ηλικία μικρότερη της μίας εβδομάδας... Πρώτο αποτέλεσμα κυρίες και κύριοι....

Πολύ θα ήθελα να δω αναλυτικά στατιστικά του dotnetzone....

Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | 2 σχόλια
Δημοσίευση στην κατηγορία:

Έλεγχος εγκυρότητας ΑΦΜ

Η κλασσική ρουτίνα, που μάλλον οι περισσότεροι έχουν... Αν κάποιος δεν την έχει μπορεί να τη βρει εδώ:

Έλεγχος εγκυρότητας ΑΦΜ

Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | (Χωρίς Σχόλια)

Resize a bitmap and get Jpeg Memory String

Έβαλα δυο νέα functions, το πρώτο δέχεται ένα bitmap και maximum διαστάσεις και κάνει resize το bitmap χωρίς να το strechάρει, χρήσιμο για thumnails. Το δεύτερο δέχεται ένα bitmap και jpeg quality rate και επιστρέφει ένα memory string με το jpeg.

Θα τα βρείτε εδώ:

Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | (Χωρίς Σχόλια)
Δημοσίευση στην κατηγορία:

Διλήμματα με smart clients

Σχετικά: Smart clients over large db schema

Έχω ένα smart client, το οποίο διαχειρίζεται έναν πίνακα σε μια βάση δεδομένων με τη γνωστή αρχιτεκτονική:
Το dal βουτάει τα δεδομένα από τη βάση, τα χώνει σε ένα dataset και τα πασάρει μέσω ενός web service στον client. Ο client cachάρει κάποια  δεδομένα μεταξύ των sessions, ενημερώνει και ενημερώνεται για αλλαγές κλπ κλπ.

Η εφαρμογή αυτή είναι ένα address book (του ενός πίνακα, χάρης απλότητας του παραδείγματος), το authorization είναι απλοϊκό, όλοι οι χρήστες έχουν πρόσβαση σε όλα τα δεδομένα) και θα διατεθεί εμπορικά. Αυτό σημαίνει ότι η χρήση θα είναι διαφορετική από διαφορετικούς χρήστες. Πχ, ένας χρήστης θα την πάρει και θα κρατάει μέσα τις 100 επαφές που έχει στο outlook. Άλλος χρήστης θα την πάρει και θα κρατάει μέσα τις 1000 επαφές της επιχείρισής του. Ένας τρίτος χρήστης, μια πολυεθνική, θα κρατήσει μέσα τα στοιχεία του 1.000.000 πελατών της.

Βλέποντας τα παραδείγματα της microsoft καθώς και ότι μπόρεσα να βρω στο web, καταλαβαίνω ότι πραγματεύονται τελείως απλοϊκές καταστάσεις, περιμένοντας ότι οι χρήστες του smart client θα διαχειρίζονται μικρό όγκο δεδομένων. Πχ, το taskvision κατεβάζει μονοκόμματα όλα τα δεδομένα που αφορούν τον χρήστη για να μπορεί να δουλέψει και disconnected. Αυτό στην περίπτωσή μου είναι εφικτό μόνο στα σενάρια με τα λίγα δεδομένα, πχ με 100 ή 1.000 επαφές. Δεν είναι εφικτό όμως για την χρήση με τις 1.000.000 εγγραφές γιατί ούτε τα μεταφέρεις, ούτε τα διαχειρίζεσαι εύκολα.

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

Ας εξετάσω πιθανές κατηγορίες σεναρίων, ανάλογα με το πόσα δεδομένα φέρνω σε κάθε request:

  1. Όλα
    Ξενικάω από τα εύκολα: Αλά Microsoft, όλα σε ένα κουβά, μένουν στον client μεταξύ των sessions. Για λίγα δεδομένα είναι συγκλονιστικά καλό. Άπαιχτο performance.
  2. Ένα
    Το ότι κάθε φορά φέρνω αυτό που μου ζητήθηκε σημαίνει ότι θα τρελαίνω τον server στα request. Επί πλέον το πηγαινέλα-time θα τρελαίνει τον χρήστη στο περίμενε. Πρέπει να μείνω όσο το δυνατόν πιο μακριά από αυτό το σενάριο.
  3. Χ;
    Ποια είναι αυτά τα X;
    Εδώ κατεβάζουμε ιδέες:
    • Παραπλήσια δεδομένα. Βουτάμε μέσα στα δεδομένα και στο business intelligense που κουβαλάνε. Πχ. επαφές της ίδιας κατηγορίας; ενδέχεται όντως σε κάποιες χρήσεις αυτό να ισχύει. Οι άλλοι γιατί να περιμένουν να έρθουν πράγματα που δεν θα χρησιμοποιήσουν;
    • Συχνά χρησιμοποιούμενα δεδομένα
      Μαρκάρω κάθε δεδομένο με στατιστικά, να ξέρω κάθε πότε χρησιμοποιείται για να ξέρω πόσο αξίζει ή όχι να το  φέρω ακόμα και αν δεν ζητήθηκε.
    • Τι άλλο μπορεί να υπάρχει; Αναγκαστικά πρέπει να κολυμπήσεις μέσα σε στατιστικά χρήσης μπας και μπορέσεις να βρεις τρόπους πρόβλεψης των δεδομένων που πρόκειται να ζητήσει ο χρήστης.

Άρα με βάση το πόσα δεδομένα φέρνω, τα smart client κόλπα με βοηθάνε μόνο για λίγα δεδομένα στις γενικές περιπτώσεις.

Ας εξετάσω πιθανές κατηγορίες από την άλλη πλευρά, στο πόσα δεδομένα cachάρω στον client.

  1. Όλα
    Ναι, για λίγα δεδομένα είναι μια χαρά, ρίχνω το dataset μου σε ένα xml στον δίσκο και everybody is happy.
  2. Κανένα
    Άντε γεια...
  3. Ψ;
    Πάμε πάλι ιδέες:
    • Συχνά χρησιμοποιούμενα δεδομένα
      Μμμμμ, ίσως να βολέψει μερικές καταστάσεις
    • Τελευταία Ψ...
      Και αυτό ίσως κάτι να κάνει. Ίσως ένας συνδυασμός με το προηγούμενο να έλεγε κάτι παραπάνω
    • Πάλι κολλάει το μυαλό μου.

Άρα, με βάση τα δεδομένα που κρατάω στον client, τα smart client κόλπα πάλι δεν μου προσφέρουν πολλά για μεγάλο όγκο δεδομένων.

Καταλήγω λοιπόν στα εξής συμπεράσματα:

  1. Όταν τα δεδομένα είναι λίγα (μπορούν να κατέβουν σε αποδεκτό χρόνο και να τα διαχειρίζεται αποτελεσματικά ο client) τα φέρνω όλα και τα cachάρω όλα
  2. Όταν τα δεδομένα είναι πολλά, κάνω κάνα δυο πατεντίτσες που μπορώ να σκεφτώ και τα αφήνω στο έλεος του δικτύου...

Τώρα, για το που τελειώνει το λίγο και αρχίζει το πολλά, μάλλον βγαίνει από αυτό που έγραψα: Βλέπω πόσο γρήγορα κατεβάζει ο client και τι resources έχει, και αποφασίζω πιο μοντέλο θα ακολουθήσω realtime.

Τα πραγματικά σενάρια που παίζω είναι δύο.

  • Το πρώτο είναι ένα CMS με κατηγορίες, άρθρα, προϊόντα, αρχεία, εικόνες. Είναι ήδη στην αγορά και υπάρχουν τελείως διαφορετικά σενάρια χρήσης. Άλλος έχει περασμένες 10 κατηγορίες, 30 προϊόντα και 2 χρήστες, άλλος έχει 20 κατηγορίες, 20.000 προϊόντα και 10 χρήστες.
  • Το δεύτερο είναι μια ασφαλιστική εφαρμογή. Και εδώ τα σενάρια τρελαίνονται. Ο ένας ασφαλιστής έχει 150 πελάτες και τα συμβόλαιά τους, ο άλλος έχει ολόκληρο γραφείο και έχει 5.000 πελάτες και συμβόλαια.

Οδηγούμαι λοιπόν στο συμπέρασμα, ότι ωραίο ακούγεται το slogan "smart client" αλλά στην πράξη είναι ανεφάρμοστο. Ακόμα και με το task vision την MS δηλαδή, αν το πουλήσεις σαν προϊόν και ο άλλος πάει και περάσει μέσα 10.000 tasks, το προϊόν πάει περίπατο. Από την άλλη αν πας να το σχεδιάσεις ώστε να υποστηρίζει και τέτοιες περιπτώσεις, τρως τα μούτρα σου με διλήμματα σαν τα δικά μου....

Μήπως κάτι δεν έχω καταλάβει καλά; Υπάρχει κάποιος που κατεβάζει ποιο πολλές ιδέες και διαβάζει αυτό το blog;

Για πείτε κάνα σχόλιο...

 

Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | 2 σχόλια
Δημοσίευση στην κατηγορία:

Μετατροπή HTML σε RTF (HtmlToRtf Converter)

Μια απλή ρουτινούλα που μετατρέπει html με τα πολύ βασικά tags (b, i, u. strong, em, p) και ελληνικούς χαρακτήρες σε RTF.

Την έγραψα για να μετατρέπω κείμενα που έχω σε εφαρμογές μου σε html όταν θέλω να τα περάσω σε crystal reports (την έκδοση που δίνουν με το VS 2003) αφού δεν υποστηρίζει parsing από html.

Ίσως να φανεί χρήσιμη και σε κάποιον άλλο.

Θα το βρείτε εδώ: "Convert HTML to RTF (HtmlToRtf Converter)"

PS. Τα σχόλια πάνω στο άρθρο είναι στα αγγλικά. Γενικά γράφω τα αρθράκια μου στα αγγλικά αν μπορούν να χρησιμοποιηθούν και από μη γνωρίζοντες την ελληνική...

Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | (Χωρίς Σχόλια)
Δημοσίευση στην κατηγορία:

Μετατροπή ελληνικών strings σε λατινικά (greenglish)

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

Θα το βρείτε στα αρθράκια μου εδώ: "Μετατροπή ελληνικών strings σε λατινικά (greenglish)"

Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | 1 σχόλια
Δημοσίευση στην κατηγορία:

Δημιουργία ελληνικού λεκτικού για ποσά σε ευρώ

Έβαλα το "Δημιουργία ελληνικού λεκτικού για ποσά σε ευρώ" στην κατηγορία Algorithms. Τον κώδικα τον είχα δημοσιεύσει και παλαιότερα σε κάποιο thread, το βάζω και εδώ για λόγους οργάνωσης.

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

Σχόλια σχετικά με τον κώδικα παρακαλώ να γίνουν στο ίδιο το άρθρο.

Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | (Χωρίς Σχόλια)
Δημοσίευση στην κατηγορία:

GMail στα Ελληνικά

Ναι, είναι γεγονός, σήμερα το πρωί άρχισε να παίζει με ελληνικά. Στα μηχανήματα που έμπαινα μέχρι τώρα είχα κάποια προβλήματα, από καθαρό μηχάνημα όμως συνδέθηκα κανονικά. Ίσως κάτι να μπλέξανε με τα cookies, θα δοκιμάσω να τα σβήσω.

Πάντως, το gmail δεν εμφανίζεται στο "Google in your language" με εθελοντική μετάφραση, παρόλο που το είχα ψάξει και παλαιότερα, οπότε απορώ που βρήκανε μεταφραστή που κάνει μετάφραση του επιπέδου "να θυμασε εμενα σε αυτον τον υπολογιστη".

Να και η επίσημη ανακοίνωση: http://mail.google.com/mail/help/whatsnew.html

Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | 2 σχόλια

GMail - After 2 Months

Παρ' όλες τις ανησυχίες για τα προσωπικά δεδομένα μου, το γύρισα πλήρως σε gmail. Όλα μου τα accounts (εταιρικά και μη) κάνουν forward στο gmail και τα replies γίνονται όλα από εκεί. Η ευκολία που προσφέρει στο να έχω όλη μου την επικοινωνία πάντα on-line είναι φοβερή. Το outlook στο laptop μου έπεσε σε πλήρη αχρηστία, συνεχίζει να παίρνει τα e-mail, χωρίς να τα κοιτάω όμως, κυρίως για να κάνει το handling των task requests και να τα κάνει sync με το κινητό μου απ' όπου γίνεται και η διαχείρισή τους.

Σταδιακά έκλεισα όλα τα anti-spam μου. Το gmail κάνει αρκετά καλή δουλειά. Περνάει μόνο ένα 8% απ' όσο το υπολόγισα, ενώ τα false positives ήταν μόνο δύο (τουλάχιστον 2 πήρα χαμπάρι). Τα spams δεν τα σβήνω, αφήνω να τα σουτάρουν μόνοι τους μετά τον ένα μήνα. Έχει σταθεροποιηθεί κάπου στα 7000 μηνύματα τώρα, άρα τόσα παίρνω το μήνα αν εξαιρέσεις αυτά που κόβουν τα anti-spam που κάθονται πάνω στους mail servers και κόβουν τα χοντρά χοντρά (πριν βάλει anti-spam η otenet, έπαιρνα εκεί γύρω στα 1000-1500 ανά ημέρα).

Επίσης κατάλαβα ότι αν θες να έχεις συγυρισμένο inbox, πρέπει να ξαλαφρώσεις τη διαδικασία του συγυρίσματος. That means, τέρμα οι 500 κατηγορίες, 4-5 είναι αρκετές (και στις μισές από αυτές να δουλεύουν φίλτρα). Βέβαια για να μπορείς μετά να βρεις αυτό που ψάχνεις, θες ένα search επιπέδου Google = gmail.

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

Κι αν κλείσει το Google τι κάνω; Φτου φτου φτου... μη λέω τέτοια πράγματα χρονιάρες μέρες...

Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | (Χωρίς Σχόλια)
Δημοσίευση στην κατηγορία: ,

Ψάχνω για RSS reader...

  • Θέλω να υπάρχει version και για desktop και για το PDA μου.
  • Θέλω στο PDA να μπορεί να κατεβάσει τα feeds και το περιεχόμενό τους και να τα διαβάσω off-line.
  • Θέλω όταν διαβάζω ένα post στο PDA και μετά κάνω activesync να ενημερώνονται και οι versions που έχω στα desktop μηχανήματά μου ότι το post έχει διαβαστεί.
  • Θέλω όταν μαρκάρω ένα post στο ένα μηχάνημα, να μαρκάρεται και στο άλλο.

Ξέρετε κάποιο;

Εν το μεταξύ, συνεχίζω το ψάξιμο...

Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | (Χωρίς Σχόλια)
Δημοσίευση στην κατηγορία:

Καλωσήλθα !

Το πρώτο post στο νέο CS... σιγά σιγά θα μεταφέρω όλο το blog μου εδώ μέσα... Μάλλον κολάω πιο πολύ από εκεί που είμαι τώρα...

Για όσους βιάζονται, το παλιό είναι στο http://blogs.gr/equilibrium

 

Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | 1 σχόλια
Δημοσίευση στην κατηγορία:

YouSendIt.com - Αποκομμιδή ογκώδους αλληλογραφίας

Θέλετε να στείλετε ένα αρχείο αλλά είναι πολύ μεγάλο για να χωρέσει σε ένα e-mail;
http://www.yousendit.com/

Θέλετε να στείλετε μερικές φωτογραφίες αλλά είναι πολλές για να χωρέσουν όλες μαζί σε ένα e-mail;
http://photos.yousendit.com/

Θέλετε οι επισκέπτες του web site σας να μπορούν να σας στέλνουν αρχεία χωρίς να φτιάξετε περίπλοκες φόρμες επικοινωνίας;
http://www.yousendit.com/solutions_filelink.aspx

Εγώ το βρήκα στο wired.

Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | (Χωρίς Σχόλια)
Δημοσίευση στην κατηγορία:

Order of Insert, Update, Delete when updating a database using a dataset with multiple related tables

There are two cases that uniquely specify the order of actions that must be performed:

  1. Deletion of records must occur before inserts
    Why: If a table has a column with unique values, and in the dataset you delete a row and then reinsert it with the same value for the unique column, then the new row cannot be inserted without deleting first the old row.
  2. Modification of existing records must occur after inserts
    Why: If in the dataset you insert a new row in a parent table and then update a record from a child table to refer to the newly inserted parent row, you cannot update the child row in the database if the parent row not yet exists.

Conclusion:

The only possible order of actions (generally speaking, if we want to allow all types of actions when updating the dataset) is:

  1. Delete (starting with children tables first, continuing up to the parent tables)
  2. Insert (starting with the parent tables first, continuing down to the children tables)
  3. Update (starting with the parent tables first, continuing down to the children tables)

Related: How to update a dataset with related tables and identity columns from a Windows Forms application by using a Web service in Visual Basic .NET

Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | (Χωρίς Σχόλια)
Δημοσίευση στην κατηγορία: ,

LinkedIn: Η άλλη διάσταση στις επαγγελματικές σχέσεις

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

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

Best of:

  1. Συστατικές επιστολές (endorsments): Έχετε online το βιογραφικό σας το οποίο αναφέρει ότι εργαζόσασταν για την Coca Cola. Το βλέπει κάποιος παλιός σας συνάδελφος που ξέρει τι καλή δουλειά που κάνατε εκεί και προσθέτει από κάτω το σχόλιο του: "Ο Κώστας ήταν συγκλονιστικός επαγγελματίας, είναι πραγματικά μοναδικός στο είδος του". Μαζεύονται λοιπόν κάτω από το κάθε σημείο της καριέρας σας, συστάσεις από άτομα που ξέρουν τη δουλειά σας. Κάποιος που ψάχνει να συνεργαστεί μαζί σας, όχι μόνο βλέπει αυτά τα σχόλια, αλλά μπορεί να δει και το ποιόν του ανθρώπου που τα έκανε. Έτσι έχετε ένα ζωντανό βιογραφικό που μετράει σε οποιαδήποτε επαγγελματική σας σχέση.
  2. Conne: Θέλω να επικοινωνήσω με τον Μπούσσια από την Boussias Communications για μια δουλειά, αλλά φαντάζει αδύνατο να συναντηθώ ή να επικοινωνήσω μαζί του. Κάνω ένα search στο LinkedIn και βλέπω ότι ο κολλητός μου ο Γιάννης έχει έναν συνεργάτη που γνωρίζει προσωπικά τον Μπούσσια. Οπότε ζητάω με αυτοματοποιημένο τρόπο από τον Γιάννη να με φέρει σε επαφή.
  3. Συνεργάτες: Θέλω να βρω έναν καλό τυπογράφο, να μου κάνει καλή δουλιά και να μου κάνει μια καλή τιμή. Ψάχνω για τυπογράφους στο LinkedIn και του λέω να τους κατατάξει σε σειρά απόστασης από εμένα (όσον αφορά τους γνωστούς μου). Και μου βρίσκει όντως έναν τυπογράφο ο οποίος είναι συνεργάτης του φίλου μου του Νίκου. Και τυπογράφο βρήκα, και σχόλια για τη δουλειά του μπορώ να δω, και μπορώ να ρωτήσω και το φίλο μου το Νίκο να μου πει την άποψή του.

Σας το συστήνω ανεπιφύλακτα. Να συμπληρώσω επίσης τα ευκόλως εννοούμενα: Τα στοιχεία επικοινωνίας σας δεν μπορεί να τα δει κανείς εκτός από αυτούς που ήδη τα ξέρουν. Έτσι ούτε spam θα λάβετε, ούτε θα σας πρήζει ο κάθε μαλ*κας. Πχ. Για να έρθει σε επαφή μαζί μου ο Μπούσιας, θα πρέπει να το ζητήσει από τον συνεργάτη του Γιάννη, ο οποίος μετά θα πρέπει να το ζητήσει με τη σειρά του τον Γιάννη και ο Γιάννης να το πει σε εμένα. Αλλά ο Γιάννης είναι κολλητός μου τον οποίο εμπιστεύομαι και ξέρει μέσες άκρες αν εγώ ενδιαφέρομαι να μιλήσω με τον Μπούσσια ή όχι.

Url: http://www.linkedin.com

P.S.: Η Coca Cola είναι η Coca Cola και o Μπούσσιας είναι ένα παράδειγμα υπαρκτού γνωστού (για τα ελληνικά δεδομένα) το οποίο μπορείτε να ψάξετε όταν γραφτείτε.

P.S. 2: Μπορείτε μαζί με τις προσκλήσεις στους γνωστούς σας να στέλνετε και το url αυτού του post για να καταλαβαίνουν καλύτερα περί τίνος πρόκειται...

Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | 1 σχόλια
Δημοσίευση στην κατηγορία: ,

Θησαυρός γνώσεων του VSS

http://www.michaelis.net/sourcesafe/faq.htm
Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | (Χωρίς Σχόλια)
Δημοσίευση στην κατηγορία:

Visual Studio Beta 2 Desktop Wallpaper

Έφτιαξα ένα πρόχειρο wallpaper, δεν μπόρεσα να βρώ κάτι έτοιμο.

Μπορείτε να το δείτε και να το κατεβάσετε από εδώ:

http://www.dotnetzone.gr/cs/photos/equilibrium/images/4250/original.aspx

Είναι σε διαστάσεις 1280x1024

Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | (Χωρίς Σχόλια)
Δημοσίευση στην κατηγορία:

Smart clients over large db schema

Στο concept των smart clients, τα δεδομένα του χρήστη μένουν αποθηκευμένα στο μηχάνημά του ώστε να μπορεί να δουλεύει και off-line. Σύμφωνα με όσα έχω καταλάβει από τα παραδείγματα της Microsoft και από όσα έχω βρει περιοδικά στο web, χρησιμοποιείται ένα dataset για να κράταει όλα τα δεδομένα το οποίο ο client το γεμίζει και το ενημερώνει σε κάθε ευκαιρία, ενώ το χρησιμοποιεί σαν off line database όσο είναι offline (αποθηκεύοντάς στο πιθανώς και στο δίσκο μεταξύ των sessions).

Όταν έχουμε περιπτώσεις μεγάλων βάσεων όμως τι κάνουμε (με το μεγάλες αναφέρομαι στο schema, μεγάλο αριθμό πινάκων κλπ); Σίγουρα ξεχωρίζουμε τα readonly reference data τα οποία τα διαχειριζόμαστε ξεχωριστά. Αν τα transient data όμως παραμένουν πολλά, υπάρχει κάποιο best practice που υπάρχει για τη διαχείρισή τους; Πρέπει να βάλουμε τους πίνακες αυτούς σε ένα τεράστιο dataset, μαζί με τις αλληλοσυνδέσεις τους; Το σπάμε σε κομμάτια; Τι γίνεται με τα references μεταξύ διαφορετικών κομματιών;

Επίσης, τι γίνεται στην περίπτωση που χρειάζομαι δεδομένα από 10 διαφορετικούς πίνακες; Σε άλλες καταστάσεις ενδέχεται να έφτιαχνα ένα view στην db που να τα μαζεύει. Λόγω της δομής που πρέπει να κρατήσω με ένα μεγάλο dataset, πρέπει να τραβήξω 10 selects, σε κάθε έναν από τους πίνακες για να γεμίσω "μερικώς" (ίσως enforce constrains = false) το dataset και να το στείλω στον client. Πως επηρεάζει αυτό τον sql server μου;

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

Ότι παράδειγμα έχω βρει μέχρι τώρα, έχει τελείως απλοικές καταστάσεις με πολύ απλά datasets...

Όποιος ξέρει απαντήσεις ή έχει βρει κάτι καλύτερο στο web, ας πει κάτι...

PS:

  • Από datasets δεν ξεκολάει η κατάσταση
  • Performance μεταφοράς δεδομένων έχει εξεταστεί, πέφτει συμπίεση.
  • Όλο το handling για τα readonly (ή σπανίως ενημερώσημα) δεδομένα είναι ήδη υλοποιημένο με αρκετά αποδοτικό τρόπο, εκτενές caching και συμπίεση.
Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | 1 σχόλια
Δημοσίευση στην κατηγορία: ,

Enterprise policies causing slow performance of Visual Studio 2003

We've experienced some really slow performance while opening and working with the IDE on large solutions (32 projects, lots of code, typed datasets, reports etc.) VS was causing high CPU usage for 10-20 minutes after opening the solution and most of the times caused the VB compiler to hang up while checking the code references.

It seems that Enterprise Policies where causing trouble. All the problems got away when we completely removed the policies from the project files.

Δημοσιεύτηκε στις από το μέλος Χρήστος Γεωργακόπουλος | (Χωρίς Σχόλια)
Δημοσίευση στην κατηγορία: ,
Περισσότερες Δημοσιεύσεις « Προηγούμενη - Επόμενη »