Sviluppo4d.it
Sito indipendente di informazioni tecniche per sviluppatori 4th Dimension italiani  

Pubblicità



4d logo

Home

Titolo: Appunti dal 4D Summit - giorno 13/10/2011

Ultimo Aggiornamento: 27/10/11 11:27:30

Inizio conferenza (13/10/11)
• Nuovo Web Server
• 4D http
• 4D Widgets
• 4D HTML Tags
• 4D Optimization

Intervento di Laurent Ribardiere, alla Q&A di Thibaud


Nuovo Web Server
• iniziamo con i benchmark del nuovo web server v12 vs v13, 4 volte più veloce
• Unicode, Carbon free su Mac, preemptive, IPV6, RFC compliance, etc
• è un progetto custom 'tailored' e che mantiene le caratteristiche di essere semplice da installare e quasi zero configurazione, integrato e performante
• il nuovo network layer è tcp/ip basato solo su POSIX sockets (prima c'era anche appletalk, etc)
• sulla v12 i processi web stavano su una sola cpu, adesso vengono distribuite in modalità multithread
• confronto nella distribuzione delle pagine statiche: v12 indice: 41 -> v13 indice: 169 (cioè 4x) su 2 core -> v13 indice: 482 (12x) su 4 core
• 482 richieste al secondo contro 41
• il comando PROCESS HTML TAGS è usabile anche al di fuori del web ed è estremamente veloce, adesso è chiamato PROCESS 4D TAGS
• demo pratica su come implementare template per fare siti web
• per sfruttare la potenza delle pagine statiche può valere la pena di crearle con PROCESS 4D TAGS con i contenuti dinamici
• nuovi comandi WEB get body part counts e WEB GET BODY PART
• demo uploading tre file, in on web connection li estrae con due righe di codice
• gestione delle sessioni, fanno vedere il classico codice di gestione dei cookie
• nuovo comando WEB get current session ID che fa tutto
• sessioni automatiche (ma comunque configurabili con web get/set option)
• prima applicazione del nuovo web server della v13.. la nuova Knowledge Base, demo super veloce
• demo della stessa Knowledge Base ottimizzata su iPad
• Nuovo HTTP client : nuovo comando $response:=HTTP Get($url;$result)
• nuovo comando "HTTP Request" per Post, Get, Delete, etc
• gestione dell'Authentication
• demo di integrazione lanciando comandi verso twitter
• demo sullo scambio dei dati fra due 4d application
• demo di scambio di testo, blob, immagini

4D HTTP
• protocollo di comunicazione, iniziato da un client, non ha uno stato sul server (stateless)
• Session management serve a tracciare cosa è successo, mantenere il risultato delle azioni precedenti, accessibile per un periodo di tempo predefinito, dovrebbe ridurre il numero di task ridondanti
• dopo la teoria, ecco le caratteristiche del nuovo server v13, gestione automatica della sessione e dei tempi di timeout
• come nella v12 se c'è già un processo web disponibile lo riutilizza
• un cookie 4D con l'id del processo
• se il cookie esiste già cerca lo stesso processo già usato prima
• in pratica puoi tenere lo stesso processo web per ogni utente, tutto in automatico
• timeout di sessione 24 ore di default, timeout fra chiamate 2 minuti, modificabili con il comando WEB SET OPTION
• la gestione automatica delle sessioni è disabilitata di default, la si deve attivare se serve con il solito WEB SET OPTION
• numero massimo di sessioni 20 per default, chiuse automaticamente per timeout o per comando WEB CLOSE SESSION
• demo di lista record, clicca su un record e poi fa il precedente-successivo che chiamano soltanto i comandi PREVIOUS RECORD / NEXT RECORD di 4d
• quando un processo viene chiuso viene chiamato in automatico un nuovo metodo di database "On Web Session Suspend" dove puoi salvare le tue variabili, selezione, stato corrente
• poi quando c'è un nuovo processo puoi fare il ripristino usando il WEB Get Current Session ID
• demo, conserva la selezione in un array e il record corrente in un blob
• demo, e ripristina la connessione dopo aver chiuso il processo

4D Widgets
• una sessione con Keisuke, sui widget e su come crearne di personalizzati
• Link al materiale di Keisuke:
Summit2011 – Magic of Miyako
http://sources.4d.com/trac/4d_keisuke/wiki/Summit2011
• mostra i widget inclusi in 4d, tipo il calendario
• adesso una demo di un custom widget che mostra un orologio analogico che cambia cambiando il valore nel campo
• sposta le lancette dell'orologio.. questo cambia il campo
• drag and drop di un altro custom widget che mostra un alert per un campo obbligatorio, o un messaggio se una mail non è corretta, o se la lunghezza del campo eccede un limite.. solo draggando il widget e dandogli il nome della variabile
• mette un widget con delle bandiere, cliccando cambia localizzazione dei messaggi degli altri widget
• in pratica sono dei form che vengono inclusi, che si portano dietro il loro codice
• altri widget, uno per cercare clienti, un altro che mostra la lista delle fatture, utili da soli e automaticamente collegati dopo averli droppati in una form
• tre widget che si aggiornano a cascata, e messi al contrario fanno il giro inverso (cliente -> fatture -> prodotto e poi prodotto -> fatture -> clienti)
• la documentazione di 4D spiega tutto nella voce del Design Reference sui Subforms
4D Doc Center : Subforms and widgets
http://doc.4d.com/4D-Design-Reference-12.1/Subforms-and-widgets.200-558233.en.html
• shift-control quando si va col mouse su un oggetto per avere una tooltip con info (funziona anche sulla v11)
• una parte della magia è il comando EXECUTE METHOD IN SUBFORM, per fare in modo da eseguirlo nel contesto diverso (la subform contiene un form che ha i suoi eventi, oggetti, variabili)
• bisogna stare attenti alla sequenza degli eventi, ad esempio parte l'on load dell'oggetto interno, poi on load del contenitore e poi on load del form padre

4D HTML Tags
• non solo per il web
• permettono Inserimento dei dati, Esecuzione di codice, Uso di espressioni logiche, ripetizione di dati usando i Loop
• 4DTEXT (era 4DVAR), 4DHTML (era (4DHTMLVAR), 4DIF, 4DElse, 4DENDIF, 4DLOOP, 4DENDLOOP, 4DINCLUDE, 4DSCRIPT
• i comandi che li usano sono SEND HTML FILE e PROCESS 4D TAGS
• PROCESS 4D TAGS elabora testi o blob, il risultato può essere inviato su web, mostrato in web area, salvato su disco
• 4DSCRIPT/metodo eseguito in modalità sincrona può servire a creare degli script: tipo 4DSCRIPT/backuppa, 4DSCRIPT/aggiornathumbnail, 4DSCRIPT/puliscilog
• nuovi tag nella v13.. 4DBASE che modifica la cartella corrente da usare prima dei 4DINCLUDE e finalmente 4DElseIF
• per scrivere una QUERY o un RELATE MANY direttamente nel codice HTML usa :
4DIf (QUERY([Tabella];[Tabella]campo=x)) seguito da 4DENDIF

4D Optimization
• running faster -> non vuol dire sviluppare veloce, né avere il migliore schema di db, né mantenere il codice.. e serve anche con le versioni precedenti alla v13
• la migliore ottimizzazione è (forse) non ottimizzare, perché il codice non ottimizzato che funziona è più facile e veloce da mantenere
• principio di Pareto.. 80/20 80% del tempo per il 20% del code
• evita di ottimizzare se non c'è bisogno, rischi di perdere ore per guadagnare qualche secondo
• la più facile è Compilare
• la seconda è aggiornare l'hardware
• cita i benchmark che si trovano sul sito.. senza scrivere una riga di codice " once the cache is full (all records in
the 64-bit version, only part of all records in the 32-bit version),
the difference between 32- and 64-bit versions is huge: The 64-bit
version is 26 times faster"
Resources | 4D
http://www.4d.com/support/resources.html
• anche con l'order by su 7,5 milioni di record è 8 volte più veloce, da 839 secondi a 168 secondi
• confronto fra stringhe, mostra il classico codice che confronta il character code con un ciclo
• confronto fra stringhe, li mette in due blob e stesso ciclo, in alcuni benchmark anche 10 volte più veloce
• confronto fra stringhe, terza via con Position($1;$2;*) con l'asterisco 4D fa direttamente un confronto via libreria ICU
• leggete il manuale, ci sono molte informazioni e funzionalità che non si conoscono normalmente
• trigger devono contenere poco codice e molto ottimizzato, vengono eseguiti in cooperative mode su un solo processore
• la programmazione difensiva, con verifica puntuale dei parametri ha dei costi (parliamo di millisecondi, hanno effetto in procedure chiamate molte volte o dentro i trigger)
• il parametro //%R- messo prima di un ciclo non fa il controllo del range (cioè che gli array contengano l'elemento richiesto); va messo dopo aver controllato gli array prima del ciclo e ricordatevi di rimetterlo attivo dopo //%R+
• il parametro range checking su miliardi di cicli può essere 40% più veloce, altrimenti sono solo alcuni millisecondi di differenza
• cache function results.. se in un ciclo si usa una funzione (tipo size of array) che avrà lo stesso risultato per ogni ciclo basta mettere il valore in una variabile (2x interpretato, anche 150x compilato!)
• inlining, piuttosto che chiamare un metodo in un loop scrivilo dentro (certo, così vai contro il codice generico)
• pulisci il codice, soprattutto se hai una applicazione vecchia o codice generiche che usavano tanti load record. Ci sono nuovi comandi molto ottimizzati
• se il database è stato aggiornato dalla 2004, bisogna proprio passare in Unicode mode
• esempio con bubble sort, benchmark 19 secondi in interpretato 8,5 in compilato, ma solo attivando il flag Unicode si passa a 1.9 secondi interpretato e meno di 1 secondo compilato
• richieste inutili inviate al server.. Load Record, First Record sono sempre necessari?
• l'indicizzazione può rallentare un'applicazione, sia per elaborazione che per scambio dati col disco.. meglio scegliere bene i campi da indicizzare.
• ad esempio ordinando su due campi non usa gli indici
• nella sezione Domande e Risposte interviene Ribardiere a specificare come funziona il lazy loading dei record; altra cosa in linea generale il consiglio è avere blob e immagini fuori dalla struttura con la nuova opzione


L'italian team addosso a Keysuke Miyako, il mago



Il keynote è al 15esimo piano.. notare che nell'ascensore sono missing sia il 15 che il 13 :D



Inviato da: Umberto Migliore

Accesso

User: Nuovo
Pass: Accedi



Crediti

Dominio registrato da ZetaNet
Sito realizzato da Nexus srl
4D SQL 11.9.0 offerto da 4D & Italsoftware
Icone di FAMFAMFAM
Moderato da Umberto Migliore
262 utenti registrati

Pagina servita il 28/03/17 alle 14:00:24 Valid HTML 4.01! Valid CSS!

Mutuo Facile, Serie Filmcards, Serie Singloids e altre app di Nexus srl per iPhone e iPad

Cidroid, distributore italiano lettori barcode per Apple iPhone, iPod, iPad della IPC