WDScript 2.5.2, Premiers pas vers le Web 2.0... | Tanguy

WDScript 2.5.2, Premiers pas vers le Web 2.0...

La version linux et les sources sont disponibles sur SourceForge.

Après quelques jours de recherche et de tests divers supplémentaires sur différentes plateformes et serveurs web,
le mode FastCGI (Mode Server ou Backend) se dirige vers le mode d'utilisation Standard et recommandé de WDscript.

Les performances d'IIS 7.5 (Livré avec Windows Seven) sont impressionantes et semblent plus "fluides" qu'Apache 2.2

L'accès Natif MySQL Linux ne semble pas poser trop de soucis si l'on fait bien attention a fermer les requetes (HAnnuleDeclaration).

JSON

Donc cette version contient une fonction de Sérialisation JSON()

C'est un format d'échange plus compact que le XML et plus pratique à lire... Et surtout qui permet d'être transformé en objet par Javascript (votre Navigateur) en une seule ligne... eval(sData);

Je l'ai testé sur l'objet WDScript et semble fonctionner sur tous les cas que j'avais sous la main, comme PHP4WD qui est une classe avec héritage...
Tableaux d'objets, tableaux de structures, Classes avec Tableaux associatifs etc... Récursivement...

Demo d'affichage JSON depuis un wd-script disponible ici

Sinon je vous recommande ce site pour une meilleure lisibilité : (la partie de droite est interpretée par votre navigateur) http://json.parser.online.fr/

La Suite

Dans la prochaine version, je vais travailler sur le systeme de Cache en mode Serveur, qui peut etre bénéfique car en memoire :)
Meme si ce ne sera pas un module magique comme les modules développés pour PHP... On peut en tirer bénéfice pour des cas simples comme un bloc de page facon Drupal (le moteur de ce site) ou encore pour du Web 2.0 en conservant des jeux de résultats indexés par le texte de la requete et/ou un identifiant (de session, ou de produit par ex. selon les usages) que vous déterminerez dans le code.

En parlant de ca, je vais aussi pouvoir implémenter en mode Serveur, du code "apres transmission", déjà prévu depuis l'origine de WDScript (_OnClose) mais pas toujours efficace en mode CGI.

Dans notre cas, ceci peut permettre la préparation d'une liste de recherche (comme la doc en ligne de PCSoft) en fonction d'un contexte de page... Et le Cache (justement) pourrait conserver ce genre de requetes, ou le contenu des pages associées, pendant un temps déterminé... Soit en mémoire, soit sur le disque, soit....

Oui, il y a beaucoup à faire :) Je continuerai aussi à simplifier le code wdscript, déjà en retirant le code de la première tentative de mode Serveur...

Il restera aussi à implémenter un PHP4WD inversé pour WDScript afin de pouvoir interfacer WDScript avec un moteur de site comme Drupal ou Joomla.... Mais ce ne sont que des projets... WS4PHP ? :p

 
v2.5.2 (10-02-2010) - WD15 046f
 o JSON utilise maintenant la Serialisation Binaire (sans utilisation de XML donc, 10 fois plus rapide)
 + Le mode FastCGI conserve maintenant la connexion à la base de données entre deux requetes (pour le meme projet)
   et utilisation de la connexion Hxx par défaut pour la fonction HExecSQL
 + Ajout un flag pour forcer le FCGI à se fermer apres l'execution du script, CGI:bRestartFCGI
 + Ajout gestion Multitache et Temporisation sous Linux
 + Ajout paramètre -KILL pour terminer les processus wdscript (utilisé aussi avant la génération de l'executable)
 + Ajout Fonction XSendFile(CheminFichier) pour laisser le serveur web envoyer un fichier statique, binaire ou non.
   Attention les serveurs ne supportent pas cela par défaut : 
   Lighttpd : dans fastcgi.server ajouter : "allow-x-sendfile" => "enable"
   Apache (avec module) : XSendFile On et XSendFileAllowAbove On
 * Amélioration du contenu du log lors de messages d'erreurs non gérées
 * Amélioration de la fermeture du processus sous Linux en FastCGI
 
v2.5.1 (31-jan-2010) - WD15 039g
 + Ajout Fonction JSON() qui convertit tout type de variable/objet Windev au format JSON (pour future transmission Web 2.0)
 + Ajout Fonction SQLQuote() pour protèger une valeur chaine dans une requête SQL.
 + Ajout Fonction EnModeWDL()/InWDLMode()
 + Ajout Fonction HExecSQL(sRequete), en mode étendu HExecSQL(_sRequete [, _DataSource , _Connexion, _Options])
 + En mode "SECURE", GetToken() renvoie une chaine "" si la session n'a pas été créée correctement
 + GetTokenInfo(), ajout valeur par défaut
 * Correctif sur chemin relatif du répertoire de sessions (Token)
 * Correctif Caract(13) pour les fonctions Info/Erreur
 * Correctif CGI:REQUEST pour les URL
 * Correctif EnvoiFichier, 4e parametre comme SendBinary(), déterminé selon l'extension si le fichier est renseigné
 * En mode Serveur, le fichier message (wpm) est bien reactualisé en cas de modification (une fois par page)
 * Correctif POST Query avec caractères speciaux et Upload de fichiers en mode FastCGI (voir exemple)
 o Optimisation de la recherche et du chargement des options du projet (nom du dossier +".ini" par défaut)
 o Optimisation du code via Profiling (par ex. CRC16 calculé uniquement lors de l'utilisation de pages cryptées)

XSendFile : Voir http://www.xorax.info/blog/programmation/259-x-sendfile.html

Comments

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Classe cJSON

Bon, en fait je vais faire une classe spécialement pour ca...

La fonction JSON sera toujours accessible de la meme facon depuis un code WDScript... Mais je vais utiliser la sérialisation Binaire... J'ai presque terminé...

fonction json

Bonjour pourrais-je vous demander de faire une fonction qui sauve sur disque et lit sur disque du json.

puis-je aussi vous suggérez d'installer dans votre prochaine version la suite très complète sigma dans votre répertoire virtuel et donner les permissions apaches .

Il y a dans visualjs un ide pour faire des programmes qui combine javascript et des windgets web 2.0

il y a une application pour faire une construction de schema json.

il y a aussi une grille très complète qui est une application faite en sigma - javascript

ceci propulserait votre suite ews dans l'ère du web 2.0

J'attend votre futur version de EWS pour faire un demo de la grille avec wdscrit et une base hyperfile

Comment ca ?!?

?!?

fSauveTexte(<fichier>,JSON(Objet))
sTexte = fChargeTexte(<fichier>)

faire linverse de votre fonction json()

faire linverse de votre fonction json()

Bonjour,

Je vais probablement vous paraitre un peu insistant
mais ne serait-il pas possible de faire linverse de votre fonction json()
et faire une désérialisation en un objet dynamique comme fait la commande webdev jsonexecute()

on pourrait ainsi traiter les items jsons pour les manipuler du genre json_objet : ID

Merci

utilitsation de cette fonction jsonversobjet

utilitsation de cette fonction jsonversobjet

Jaimerais èclaircir ma demande,
le but de cette fonction est de permettre dutiliser le json texte provenant dune réponse envoyer du client en http/request

Jai travailler avec de nombreuses bibliotheques web 2.0 ecrites en javascript et il serait très intéressant de pouvoir manipuler dune facon programmation les communications qui sont recu de la par des API javascript , sinon je ne vois pas comment nous pouvons avoir accès aux items qui sont dans un texte json.

Serait-il possible de mettre a notre disposition le code wdscript sauver en texte ansi car je ne peut pas avoir accès aux code sauver en windev15 ?

merci

non, je ne crois pas qu'il

non, je ne crois pas qu'il soit possible de créer des objets dynamiquement (définition de structures complexes) en wlangage,

ca serait peut etre possible mais ca necessite de declarer des structures en cascade qui deviennent chacune permanentes dans un executable windev une fois déclarées... (donc non libérée ensuite) .... trop compliqué à gérer pour le besoin actuel

il est certainement plus simple de n'envoyer que ce que l'on a besoin...

ajax

Japprécie les effort pour aller vers le web 2.0 mais la petite bibliotheque ne semble qua un stade embryonnaire.

La bibliotheque et les ide,api,grille sigma sont beaucoup plus conviviale et evoluer

ok sa manque de "bels and wisle" mais de base on y retrouve lessentiel pour faire un client-browser
avec le quel on peut faire des applications-web

Merci pour la mise a jour de ews 2.6

en ce qui concerne fast-cgi japprécirais une petit document sur comment lutiliser car je ne suis pas un pro et je ne pense pas meubler mes soirers a lire de la doc technique.

merci

librairies web 2.0

Pour les librairies "graphiques" web 2.0... Je ne peux pas les intégrer, ils sont énormes et souvent avec une licence...

YUI est gratuit, mais encore trop jeune et trop lent pour les grid...

J'attends donc encore un peu... et je vais certainement créer ou attendre un gestionnaire comme celui présent dans Symfony (sfDynamics) qui charge uniquement ce que l'on a besoin automatiquement...

pour le FastCGI... il n'y a rien de spécial à faire, c'est deja configuré dans EWS... c'est juste un moyen d'augmenter la vitesse de WDSCRIPT...... La fenetre de debugage est principalement utile pour débugguer wdscript (avec windev)

le principe de fonctionnement est expliqué sur cette page.... http://tanguy.ath.cx/index.php?q=fr/FastCGI

PS: Il y a un forum pour ce genre de questions.... ca permet aux autres de retrouver les infos ensuite...

code c++ pour conversion json vers objet wdscript

Bonjour,

jai fais un programme qui converti le texte json en variable wdlanguage en c++

il ne reste plus qu'a désérialiser pour avoir accès aux donnée.

je me demandais si vous pouviez l'inclure dans votre system ews

si oui, dite moi ou aller déposer le code

Envoyez moi un email,

Envoyez moi un email, tanguy.pruvot sur gmail.com

Bonjour , Jai fait de petits

Bonjour ,

Jai fait de petits scripts .wlf pour faire de lextraction de valeur a partir dune chaine de données JSON

jespere que vous le testerer et lincorporier dans une de vos prochaines versions de wdscript

merci

Bonjour voici quelques

Bonjour voici quelques fonctions améliorées pour gérer le format Json

PROCEDURE JsonTrouveVariant(json, rech est une chaine )
   pos,posd,posf,grandeur,gr sont entier
 
   rech = """" + rech + """:" 
   gr = Taille(rech)
   pos=Position(json, rech)
   posd= pos + gr
   posf=Position(json,[",","}"],posd)
   grandeur = posf - posd
RENVOYER  Milieu(json,posd,grandeur)
   
=======================================================================================
   
PROCEDURE JsonTrouveTabstruct( json, NomTabRech, NomVarRech est une chaine, tabx est un entier )   
   machaine est une chaine
   pos,posd,posf,grandeur,gr sont entier
   
   json = GetFormField("json")
   NomTabRech = """" + NomTabRech + """:[{" 
   gr = Taille(NomTabRech)
   pos=Position(json, NomTabRech)
   posd= pos + gr + 1
   posf=Position(json,"}]",posd)
   grandeur = posf - posd 
   machaine = Milieu(json,posd,grandeur)
RENVOYER  JsonTrouveVariant( ExtraitChaîne(machaine, tabx, "},{"),NomVarRech )  
   
=======================================================================================   
   
PROCEDURE JsonCorrect ( json est une chaine )
  drapeau est une chaine = "correct"
  gr est un entier = Taille(json)
  json=SansEspace(json)
 
  Position(json,"{",DepuisDébut) <> 1 ? drapeau = "incorrect"
  Position(json,"}",DepuisFin) <> gr ? drapeau = "incorrect"
  Position(json,""":") = 0 ? drapeau = "incorrect"
  (CompteCaractere(json,"""") modulo 2) <> 0 ?  drapeau = "incorrect"
  CompteCaractere(json,"[") <> CompteCaractere(json,"]") ?  drapeau = "incorrect"
  CompteCaractere(json,"{") <> CompteCaractere(json,"}") ?  drapeau = "incorrect"
  CompteCaractere(json,""":") <> CompteCaractere(json,",") + 1 ?  drapeau = "incorrect"
RENVOYER drapeau
 
======================================================================================
 
PROCEDURE CompteCaractere ( machaine, rech est une chaine )
  x=1,total sont entier
 
  TANTQUE x < Taille(machaine)
     machaine[[x]] = rech ? total++
     x++
  FIN
RENVOYER total
 
=======================================================================================   
   
PROCEDURE JsonTrouveTableau( json, rech est une chaine,tabx est un entier )   
   machaine est une chaine
   pos,posd,posf,grandeur,gr sont entier 
 
   rech = """" + rech + """:[" 
   gr = Taille(rech)
   pos=Position(json, rech)
   posd= pos + gr + 1
   posf=Position(json,"]",posd)
   grandeur = posf - posd 
   machaine = Milieu(json,posd,grandeur)
RENVOYER ExtraitChaîne(machaine, tabx, ",")

Bonjour, merci pour ces

Bonjour, merci pour ces fonctions..

Concernant votre procédure CompteCaractere, vous pouvez utiliser ChaineOccurrence()