7 : - - PowerPoint PPT Presentation
7 : - - PowerPoint PPT Presentation
7 :
Ποιοι Είμαστε
Οι στόχοι μας
✔ Υλοποίηση Ιστοσελίδας
Όραμά μας
✔ Εισαγωγή σύγχρονης τεχνολογίας στο συνέδριο ✔ Δημιουργία ολοκληρωμένου λογισμικού για την
κάλυψη των αναγκών του συνεδρίου
✔ Παρακαταθήκη για τα επόμενα ΣΦΗΜΜΥ
Custom CMS
- Ομαδοποίηση λειτουργιών
- Ενσωμάτωση πολλών λειτουργιών στο sfhmmy.gr
- Αναγνώσιμος κώδικας
- Modularity
- Προσθήκη νέων λειτουργιών χωρίς την ανάγκη
τροποποιήσεων Προϋπόθεση: Ύπαρξη Web-Developers
www.sfhmmy
live.sfhmmy administrator.sfhmmy review.sfhmmy desk.sfhmmy
Βασική Διεπαφή
Dashboard
Administration
Administration Functionalities /1
Administration Functionalities /2
Chief Reviewer Panel
Review State
Desk & Live
User Requirements
Διαδικασία Καθορισμού Απαιτήσεων
- 1. Συναντήσεις της Οργανωτικής Επιτροπής
- 2. Συναντήσεις με κ. Χατζηλεοντιάδη
- 3. Επικοινωνία μέσω googlegroups
- 4. Ιδέες από ήδη υλοποιημένο λογισμικό
- http://www.insticc.org/Primoris/
- http://mc.manuscriptcentral.com/acm
Λάθη:
✗ Μη σαφής καθορισμός από την αρχή ✗ Νέες απαιτήσεις στην πορεία ✗ Έλλειψη εμπειρίας διοργάνωσης συνεδρίου
Hristopanagies per second (hpps)
Our Professional Documents
Frontend - design :
- Responsive design
Λειτουργίες : ( στο επίπεδο του διαχειριστή )
- usergroups : για επίπεδα πρόσβασης πχ
{ επιτροπή, moderators, διαχειριστές, super διαχειριστές }
- όλα τα αντίστοιχα του user
- εγγραφές χρηστών με πρόσβαση πχ
καθηγητών, μελών κτλπ
Αρχικές απαιτήσεις
Λειτουργίες : ( στο επίπεδο του χρήστη )
- News-announcements
- Registrations : στο συνέδριο
- Personal dashboard + request status
- Forms
- Calendar
- Events ( για τα activities πχ )
- Support / Contact
- Sponsors
- Live Streaming
- Οργανωτική Επιτροπή
- Επιστημονική Επιτροπή
- Πρόσβαση / Διαμονή
- translations : όλα τα περιεχόμενα του site
στατικά κ δυναμικά θα είναι μεταφρασμένα σε 2, γενικά n γλώσσες
- user friendly urls, seo friendly urls
index.php?controller=announcement&method= view&permalink=avbab /announcement/view/acbab
login
SelectFromMenu Dashboard submitPaper
<include> <extends>
register
<include>
announcements create/modify events support modifyUserRights userCheckIn reviewPaper finalSelection
<extends>
assignPaper
<extends> <extends>
activitiesRegistration
Χρήστες και Δυνατότητες
Η Βάση Δεδομένων
Τεχνολογίες που χρησιμοποιήθηκαν
LAMP stack
- Linux Apache MariaDB PHP
- MariaDB vs MySQL
– Truly Open Source – Speed Improvements
Site Architecture
- MVC
- REST
Front-end Framework
- Bootstrap (by Twitter)
PHP
- Based on CMS-X
Translations
- Home-brew tool
Mail Server
- Google Mail Server
- Google Mail Limitations
– 500 emails/day
Libraries
- Captcha
- Smarty
- Feedcreator – RSS
- jQuery
Optimization
- Memcached
- Some other things
Bootstrap
- CSS + some javascript
- Open Source
- Responsive by default, regardless of platform
- Grid System
- Ready-to-use components
- Great Design solution
- Easily customizable – heavy customization
Translations
- Bilinguality requirement
- Tool by Nohponex
- N-language
- Easy translation platform – no code required
- Automatic key detection
- Revisioning
Controller Model Viewer Database index
Server *.sfhmmy.gr
Browser
Client
HTTP Request HTTP Response Viewers :
- Site
- Administrator
- Reviewer
- Desk
- Maintenance
- Live
- raw
- json
Request data Viewer parameters
1) Get mode 2) Get controller 3) Get method 4) Include controller 5) Execute method
MVC – Architectural pattern
- Client–server
- Stateless
- Cacheable
- Layered system
- Uniform interface
– Identification of resources – Manipulation of resources through these representations – Self-descriptive messages – Hypermedia as the engine of application state
http://en.wikipedia.org/wiki/Representational_state_transfer
REST (representational state transfer)
service URI Method HTTP GET HTTP POST create View create new item form Create new item view View item update View update item form Update item listing List collection delete Delete item
- Example :
http://www.sfhmmy.gr/announcement/view/10
mode controller method
API Interface
‾ index.php ‾ config.php ‾ controllers/ ‾ administrator/ ‾ site/ ‾ home.php ‾ user.php ‾ models/ ‾ session.php ‾ database.php ‾ util.php ‾ site/ ‾ user.php ‾ administrator/ ‾ user.php ‾ viewers/ ‾ site/ ‾ site.php ‾ assets/ ‾ templates/ ‾ common/
Directory Tree
HTTP GET http://www.sfhmmy.gr/home/view mode : site controller : home method : view
HTTP Request
index
Request Example
<?php class homeController{ public static function view( $params ){ include( 'models/site/page.php' ); $page = page::view( 'home', $language ); View( array( 'title' => $page[ 'title' ], 'page' => $page ), 'home' ); } } ?> <?php class siteViewer { public static function view( $params = array(), $page ) { include ('templates/common/header.php'); include ('templates/' . $page. '.php'); include ('templates/common/footer.php'); } } ?>
Controller Viewer
Controller.php <div class="col-sm-2"> <h3> <?php ___( 'title' ); ?> : <?php echo $params[ 'page' ][ 'title' ]; ?> </h3> </div> <div class="col-sm-10"> <?php echo $params[ 'page'][ 'content' ]; ?> </div> home.php siteViewer.php
HTTP Response
Συνεργασία
- Λογισμικό μεγαλύτερο από οποιαδήποτε
εργασία στα πλαίσια της σχολής
- Συνεχής ανάπτυξη, από διαφορετικές
τοποθεσίες Ανάγκη για συντονισμό
Subversion (SVN)
- Κεντρικός έλεγχος εκδόσεων
(software versioning, revision control)
- Είχαμε ήδη στημένο server
Class Reference (ή κάτι τέτοιο)
Εύληπτο!! Φιλικό στον χρήστη!!
- Αναφορά στο τι πρέπει να
κάνει κάθε οντότητα και πως επικοινωνεί με τις υπόλοιπες
- Κάπως σπαρτιατική
υλοποίηση, χωρίς σχόλια και κείμενο
- Απολύτως απαραίτητο όταν
βασίζεσαι σε κώδικα που έχει γράψει άλλος
Αποσφαλμάτωση
- Έγινε απόπειρα χρήσης bug tool (Mantis) και
collaboration suite (Asana, Freedcamp κλπ)
- Τα αμελήσαμε – υποτιμήσαμε
- Το πληρώσαμε στο τέλος...
- Όλα αυτά απαιτούσαν χρόνο εξοικείωσης
- Βασικές λειτουργίες -> 20/12/2013
- Rapid Development Process
- Παράλληλη διαμόρφωση της εμφάνισης
- Πρώτη δημόσια εμφάνιση -> 29/1/2014!!
Αξιοπιστία
- Εικονικό μηχάνημα στο cloud του grnet
(Okeanos)
- Debian linux
- Χρόνος αδιάλειπτης λειτουργίας -> 173 μέρες,
13 ώρες, 41 λεπτά
Ασφάλεια, τι κάναμε
- Usergroups και ταυτοποίηση χρηστών στα http requests
- Έλεγχος και καθαρισμός των δεδομένων χρηστών
- Χρονικά και ποσοτικά όρια σε login attemps και reset
requests
- Καταγραφή αλλαγών σφαλμάτω, αλλαγών και
δραστηριότητας του server (επιτήρηση για πιθανές επιθέσεις)
- Hashing + Salting των κωδικών στη βάση
Ασφάλεια, πιθανά προβλήματα
- SSL μόνο στο admin κομμάτι => οι κωδικοί περνάν
από το δίκτυο σε μορφή κειμένου
- Ύπαρξη πολλών διαχειριστών
- Υλοιποίηση αυστηρά για apache
$model_listing = array( 'id' => array( 'fixed', 'view' => array( 'method' => 'update' ) ), 'published' => array( 'fixed', 'toogle'=> array( '1'=> 'Publish', '0' => 'Unpublish', 'method' => 'update' ) ), 'permalink' => array( 'view' => array( 'method' => 'update', 'index' => 'id' ) ), 'start_time' => array(), 'end_time' => array(), 'title' => array( 'view' => array( 'method' => 'update', 'index' => 'id' ) ), ); $model = array( 'table' => 'event', 'index' => 'id', 'translation_table' => 'event_translation', 'translation_index' => 'event_id', 'fields' => array( 'id' => array( 'type' => 'readonly' ), 'published' => array( 'title' => 'Published', 'type' => 'boolean', 'label' => 'Publish this item' ), 'permalink' => array( 'title' => 'Permalink', 'unique', 'required', 'type' => 'permalink', 'length' => 30 ), 'start_time' => array( 'required', 'type'=> 'datetime' ), 'end_time' => array( 'required', 'type'=> 'datetime' ), 'rateable' => array( 'type' => 'boolean' ) ), 'fields_translated' => array( 'title' => array( 'title'=> 'Title', 'type' => 'text', 'length' => 256 ), 'description' => array( 'title'=> 'Description', 'editor', 'type' => 'textarea', 'raw' ) ) );
Entity description models :
Administrator Design
event/listing event/update
Administrator Design /2
user
announcement
user page email activity event message module form console paper review checkin
rateable item
photo certificate
rss
Components
Component : Form
Component : Query Report
Optimization
- Heavy site
- Memcached
– queries saved on RAM, and not from DB – 1.1s → 0.01s
- File Minimizations
– CSS, js + apache caching – File combine – Unnecessary file removal (fonts) – Mobile elements
- Cdn.sfhmmy.gr
Bugs & Last minute errors
- Το λογισμικό έχει πάντα λάθη
- Ακόμα και κατά τη διάρκεια του συνεδρίου
βρέθηκαν bugs Testing
✗ Έλλειψη αυστηρής μεθοδολογίας
αποσφαλμάτωσης
Statistics and Numbers
Lines of Code
- Total Files: 880
- Total Lines of Code: 569208
- Developers: 4
Developer Statistics
Author Changes Lines of Code Lines per Change nohponex 2958 (87.9%) 579887 (99.2%) 196.0 adrian 183 (5.4%) 1928 (0.3%) 10.5 themis 149 (4.4%) 1919 (0.3%) 12.8 kostas 77 (2.3%) 897 (0.2%) 11.6 Total 3367 (100.0%) 584631 (100.0%) 173.6
Usage Statistics
SQL Stats
- MySQL Server Running: 173 days,
13 hours, 41 minutes and 35 seconds
- Total Queries: 2176022
528.38 per Hour
Analytics
- Προβολές σελίδας: 150.826
- Χρήστες συνολικά: 13.386
- Εγγεγραμμένοι Χρηστες: 2000
- Mails between us: 1111
Εκτίμηση Κόστους - Ωρών
➔ Γραμμές κώδικα (χωρίς κενά και libraries): 16000 ➔ Διάστημα Ανάπτυξης: 15/11/2013 – 15/4/2014
6 μήνες
Κόστος Έργου: 0 $
Number Total LoC Loc/Class Controllers 99 7500 76 Models 65 4000 61 Viewers 86 5754 67