Εμφάνιση αναρτήσεων με ετικέτα Προγραμματισμός. Εμφάνιση όλων των αναρτήσεων
Εμφάνιση αναρτήσεων με ετικέτα Προγραμματισμός. Εμφάνιση όλων των αναρτήσεων

Τετάρτη 4 Νοεμβρίου 2015

[PHP Snippet] Αλλαγή των URL συγκεκριμένων Link

Σε περίπτωση μαζικής αλλαγής links (πχ, μεταφορά blog), αν θέλουμε να αλλάξουμε όλα τα link, είναι δύσκολο να γίνει με το χέρι, ειδικά σε περιπτώσεις που έχουμε πάρα πολλούς εσωτερικούς συνδέσμους. Ένας εύκολος τρόπος, είναι χρησιμοποιώντας το παρακάτω snippet:
(πριν το snippet, να πω το κλασσικό οτι κατα πάσα πιθανότητα δεν δουλεύει σε ΟΛΕΣ τις περιπτώσεις, οπότε κάποια link θα σας ξεφύγουν. 100%. Μην πείτε οτι δεν σας προειδοποίησα! :P )


 $regexp = "<a\s[^>]*src=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";
 if(preg_match_all("/$regexp/siU", $postbody, $matches, PREG_SET_ORDER)) {
  foreach($matches as $match) {
   // $match[2] = το URL που βρέθηκε στο A tag
   // $match[3] = το κείμενο που βρέθηκε στο A tag
   $isin = strpos($match[2], "dimitrisp.eu/blog"); //Εδώ μπαίνει το αρχικό link
   if ($isin !== FALSE) {
    $thislink = str_replace("http://dimitrisp.eu/blog", "", $match[2]); //Κι εδώ μπαίνει το αρχικό link... Θα μπορούσαμε να το τρέξουμε κατευθείαν, αλλα σώζει πόρους σε περίπτωση εκατοντάδων συνδέσμων.
    $thislink = str_replace(".html", "", $thislink); //Όπου .html, βάζουμε την κατάλληξη που είχαμε στα αρχεία του blog. Αν δεν είχε κατάλληξη, τότε απλά κάνουμε σχόλιο αυτή τη γραμμή.
    //Internal link detected... Post's slug is: $thislink
    $thislink = "http://blog.dimitrisp.eu/" . $thislink; // Όπου http://blog.dimitrisp.eu/, μπαίνει το καινούριο URL.
    $postbody = str_replace($match[2], $thislink, $postbody);
   }
  }
 }

Και επειδή φαίνεται χάλια εδώ, δείτε το στο Github!

[Web Dev Issues #1] CommunityServer... Γιατι;

Ανέλαβα πρόσφατα να μεταφέρω 2 blogs απο Microsoft Telligent CommunityServer σε Wordpress. Το CommunityServer είναι μια πλατφόρμα φτιαγμένη σε ASP.net, C# & SQL Server με πάρα πολλές λειτουργίες, όπως πχ Blog, Wiki, Forum, Media Gallery... Τα 2 blog είναι βασισμένα στο blog κομμάτι του CommunityServer, και επειδή είναι πολύ παλιά έκδοση που δεν έχει export σε Blogml, έπρεπε να κάνω αλχημείες.

Αρχικά έπρεπε να εντοπίσω τον πίνακα που εχει όλες τις αναρτήσεις.... Κάτσε, το βρήκα! Είναι ο cs_Posts! Ναι αλλα γιατί έχει 3500 εγγραφές; Το blog έχει μόλις 1000 αναρτήσεις... Ω ναι, τα σχόλια αποθηκεύονται στον ίδιο πίνακα με τις υπολοιπες αναρτήσεις. Ναι αλλα ο άνθρωπος μου ζήτησε να του μεταφέρω και τα trackback. Που αποθηκεύονται αυτά; Καλά μαντέψατε, στον ίδιο πίνακα!

Πως διαφοροποιούνται; Έλα ντε... Κάτσε να δω... Υπάρχουν 1 πεδίο το οποίο στα entries -μεταξύ άλλων- trackbackName.. Χμ... Submittedusername... titleUrl... και λοιπά άλλα ωραία πραγματάκια τα οποία είναι χωρισμένα με ":". Οκ, αλλά τι είναι οι αριθμοί που έχει; τι πάει να πει "trackbackName:S:0:22:urlTitle:S:23:10"; Και που είναι τα λοιπά στοιχεία;

Μετά απο λίγο, παρατήρησα το επόμενο πεδίο στο οποίο τα entries ήταν της μορφής "http://www.url.url/urlDimitris P", και όλα ήταν ξεκάθαρα!
trackbackName:S:0:22 σημαίνει οτι στο πεδίο που αποθηκεύονται τα λοιπά στοιχεία, το string απο την θέση 0 και για 22 θέσεις ακόμα, είναι το URL.
urlTitle:S:23:10 απο την θέση 23 και για 10 θέσεις ακόμα είναι ο τίτλος της σελίδας.

Άρα είχα τον τρόπο για να εξάγω τις αναρτήσεις, τα σχόλια και τα trackbacks ξεχωριστά. Το έκανα. strpos, substr και Άγιος ο Θεός.

Γιατί ρε παιδιά; Το Wordpress μια χαρά τα έχει ταξινομημένα σε διαφορετικούς πίνακες... Οι αναρτήσεις και οι στατικές σελίδες είναι στον πίνακα wp_posts, και τα σχόλια μαζί με τα trackbacks είναι στον πίνακα wp_comments.

Το άλλο που δε μπορώ να καταλάβω στο CommunityServer είναι το εξής... Γιατί ονομάζεις τις κατηγορίες, tags? Και λέει κιόλας στο CommunityServer...

Below or keywords (tags) that you have used to categorize your posts.

Να γίνω και λίγο πιο κακός.. "Below or keywords..." Προφανώς εννοεί "Below are keywords..."

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

Παρασκευή 30 Οκτωβρίου 2015

[Android Dev Issues #1] "Συγχρονισμός" εγγραφών βάσης δεδομένων

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

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

Πρόβλημα #1: Αποστολή των επισκέψεων σε απομακρυσμένο διακομιστή, ωστε να τα βλέπει η εταιρεία.
- Δημιουργησα ένα απλό backend, το οποίο δέχεται την κάθε επίσκεψη με τις λεπτομέρειες που συμπλήρωσε ο πωλητής ως CSV string. Αφού λάβει το CSV string, το διαχωρίζει στις επιμέρους μεταβλητές του και το αποθηκεύει σε βάση δεδομένων. Το πρόβλημα λύθηκε.

Πρόβλημα #2: Αποστολή της ημερήσιας κατάστασης.
- Θα πρέπει να στείλω τα χιλιόμετρα έναρξης/λήξης. Δεν έχει σημασία αν θα έχουν φύγει όλες οι επισκέψεις. Το θέμα είναι οτι πρέπει να ενημερώνεται ο χειριστής στην εταιρεία με μήνυμα τύπου "ενδέχεται να μην έχουν σταλεί όλες οι επισκέψεις".

Πρόβλημα #3: Απολύσεις!
- Όπως σε όλες τις επιχειρήσεις αυτό τον καιρό, ο κάθε εργαζόμενος μπορεί να απολυθεί την οποιαδήποτε στιγμή. Θα πρέπει λοιπόν, να μην του δίνεται πρόσβαση εφ'όσον απολυθεί. Πρέπει να βάλω κάποιου είδους authentication, με το ID της συσκευής.

Global Πρόβλημα #1: Αναβαθμίσεις!
- Δεν είναι η μόνη εφαρμογή που φτιάχνω για την εταιρεία, οπότε θα πρέπει να κάνω και μια εφαρμογή-updater που να τρέχει στο background και να ελέγχει για updates. Επίσης θα πρέπει σε περίπτωση που απεγκατασταθεί η εφαρμογή απο τον πωλητή, να ενημερώνει την εταιρεία.

Θα επανέλθω με περισσότερες σκέψεις σε άλλο post.