Au taff, on a eu un dilemme sur le choix de la base de donnée libre à utiliser pour un projet de régionalisation des donnés du centre d'appel (un gros truc quoi). Et là deux choix sérieux: Postgres ou Mysql. Postgres est effectivement beaucoup + mammouth que Mysql (quoique l'écart se ressert) mais peut-être trop mammouth en fait:
- pour faire tourner un Mysql, on l'installe, on le démarre, on utilise un des nombreux gui (PhpMyAdmin, Mysql Browser, Sql Yog, MysqlFront, ...) on se connecte avec root sans mdp et on commence
- pour PG, on installe d'abord un linux (plus maintenant heureusement), on installe l'appli, on configure les droits d'accès dans les fichiers de config (pg_hba.conf) , on cherche un gui sur le net, on en trouve que très peu (PhpMyAdmin, PGAdmin, ...), on tente de se connecter, on essaie de comprendre la notion de schéma, ... bref pour quelqu'un qui s'y connait peu, on galère.
Postgres mérite effectivement d'être connu mais souffre d'être trop bien (c'est tout de même incroyable, pour une fois qu'un soft libre est aussi abouti !!!) et dans une équipe de développement où tout le monde n'a pas la compétence dba, il faut essayer de faire simple et efficace. Et là, on tombe totalement dans le crénau de Mysql.
Mais c'est promis, on va faire des essais sur ce sgbd pour notre prochaine maquette ;-)
Posté par Jay .
En réponse au journal Topcoder.
Évalué à 1.
Il est clair qu'un certain nombre de trucs du codeurs sont des mauvais trucs à utiliser dans la programmation courante (nommage succints des variables, variables globales à tout va, ...)
Effectivement, sur un vrai gros projet au sein d'une équipe, c'est pas jouable de programmer avec des variables de 2 caractères ;-) mais je suppose que c'est en participant à des concours comme ca qu'on arrive à écrire le code DeCSS le plus court du monde ;-)
Si on commence a faire la liste des sites non conformes ... moi je suis resté bloqué sur www.seatfrance.com. Page d'accueil OK mais dès qu'on consulte les détails d'une voiture, on n'a qu'une vague moitié de l'écran et une mise en page tout boulversifiée ;-(
Belle initiative de leur écrire, peut-être que si on est beaucoup à le faire, ca fera bouger les choses + vite :-)
Il y a beaucoup de propos intéressants sur cette page ... et beaucoup de langages aussi (Caml, B, ... ca me rappelle l'école). Mais je suis de l'avis de woopla (eux aussi d'ailleurs ;-p http://www.thinkgeek.com/tshirts/sysadmin/6692/):(...)
Le problème se situe entre la chaise et le clavier.
au moins pour 80% des cas! Le langage n'est que secondaire.
** Constatations **
Les langages actuels sont certes insuffisants pour exprimer la richesse du monde mais la source primaire des bugs (AMHA) ce sont les personnes travaillant sur le projet. N'est pas développeur de logiciels qui veut. Si, me direz-vous, avec des outils style VB (malheureusement :-(). Je n'ai rien contre ceux qui travaillent avec VB, j'en fait d'ailleurs occasionnellement partie de par mon travail, mais VB vulgarise un peu trop à mon goût le développement d'applications. Pour qu'un programme soit fiable (sans bug ou presque), il faut de bon concepteurs (c'est-à-dire des gens qui réfléchissent à ce qu'il faut réellement faire et comment le faire), des analystes expérimentés qui proposent des solutions techniques (environnement, langages, ...), de bon pisseurs de lignes (qui codent rigoureusement en commentant leurs sources) et enfin de bons testeurs (en unitaire et en intégration). Ca ne résoud pas 100% des bugs mais devrait déjà faire avancer pas mal le schimilibilibilick.
Allons plus loin, la source de la source, c'est l'argent. Pour être compétent, un développeur/analyste/testeur/pisseur doit avoir étudié la théorie (les maths, le paradigme objet, ...) et doit avoir de l'expérience ... donc va coûter cher à l'entreprise. Et généralement, un DSI préfère prendre un BAC+2 sorti de la fac, le former sur le tas et le payer à coups de bambous, quitte à ce que son boulot ne soit pas « top moumoute » mais qu'il arrive rapidement sur le marché (tant pis, on sortira un service pack ;-)) que de prendre des gens compétents (mais qui vont prendre plus de temps à produire et vont coûter + cher).
[digression philosphique]
Pour aller encore plus loin, la source de la source de la source, c'est l'homme: avide d'argent et de technologie pour le conforter dans sa paresse intellectuelle, il en veut toujours plus et contraint le système à aller vite, trop vite pour bien faire.
[/digression philosphique]
** Conclusion **
A « comment réduire le nombre de bug ? », je répondrais donc « en ayant la volonté de le faire ! ».
** Conclusion : la vraie **
Non je déconne, le problème n'est pas aussi simple. Il est vrai qu'il y a encore beaucoup de travail pour améliorer les langages actuels : l'absence de typage strict des variables en PHP ou Javascript, la possibilité d'omettre la déclaration des variables en VB, le non typage des Objects d'un tableau en Java pre-1.5, l'absence d'assertions natives dans de nombreux langages.
A ce titre, je proposerai un nouveau langage à la liste déjà longue évoquée ici: Eiffel (et son compilo GNU http://smalleiffel.loria.fr/).(...) On y trouve une implémentation du paradigme objet + poussée qu'en Java, un système de pré et post conditions sur les fonctions, ... des concepts très intéressant permettant une vérification accrue du code à la compil et à son exécution. Pas encore suffisant objecterez-vous, certes mais c'est un petit pas pour l'homme :-)
Pour conclure, tout est affaire de perte acceptable: puis-je me permettre d'aller vite au détriment de la stabilité (pour des raisons commerciales le + souvent) (Mysql 5.0, Tomb Raider 1 à 6) ou est-ce que je dois prendre mon temps et limiter les bugs au maximum (A380)?
Sur ce ...
à non j'oubliais!
la gestion des exceptions (ndr :les contrats)
Les contrats n'ont, sauf erreur de ma part due au temps écoulé depuis mes cours de théorie OO, rien à voir avec les exceptions. Un contrat défini un ensemble de règles qu'un client doit respecter. En Java comme en IDL, c'est décrit par des interfaces qui énumèrent les méthodes que doit implémenter une classe cliente (le contrat qu'elle doit respecter).
Ouais, plus ou moins. Un outil genre Visual traceroute devrait pouvoir le faire partiellement (http://visualroute.visualware.com/).(...) Par contre, j'en connais pas d'open source. Le problème vient du fait que ces programmes fonctionnent avec une base de donnée "remplie à la main" pour faire correspondre ip <--> emplacement physique et de telles bases sont très longue à constituer et peuvent changer souvent.
Essai l'attribut "display" qui permet de spécifier comment un élement s'insère dans le flux du document (en gros, si l'élement provoque ou non un saut de page avant ou après lui).
Autant pour moi (et merci pour ces présicions). Je n'ai d'ailleurs pas vu le problème puisque j'affiche le nom de fichier avant le test. L'expression atoi(&file[4]), quand elle est vraie, empêche le remplacement de '\0' par '_' ;-( car jamais évalué!
Avec une variable de plus, on devrait pouvoir faire (non testé!):
int isnum;
if(length==12 && !strncmp(file,"FFF_",4) &&
!strncmp(&file[length-4],"_tmp", 4) &&
!( *(file+length-4)=0 ) &&
(isnum=atoi(&file[4]) || 1) &&
( *(file+length-4)='_' ) && isnum) {
// traitement sur le fichier ici ...
(isnum=atoi(&file[4]) || 1) est toujours vraie et remplit isnum avec 1 si la séquence est un nombre, ( *(file+length-4)='_' ) remplace le '\0' par le '_' et renvoie toujours vrai et le teste se termine avec isnum.
Voilà :-)
/!\ si la séquence peut valoir 0000, le test échoue alors que le nom de fichier est valide, il faut rajouter un bout de test du genre ($file[length-5] == '0' || ...)
en C y'a pas vraiment de booléens, juste 0 pour false et tout le reste pour true
toute affectation "retourne" une valeur, celle qui a été affectée à la variable à gauche de l'expression, ainsi (i=6) vaut 6, ce qui autorise a=(b=6) pour donner a=6 et b=6
l'expression suivant un && n'est évaluée que si l'expression située avant est true (!= 0)
l'expression suivant un || est évaluée quelque soit la valeur de l'expression située avant
Ainsi:
!( *(file+length-4)=0 ) remplace le dernier '_' par '\0' et renvoie !0 donc true, atoi(&file[4]) renvoie true uniquement si la séquence est un chiffre non nul, et !( *(file+length-4)='_' ) remet en place le '_' en renvoyant false pour ne pas interférer dans le résultat de atoi().
A+, Jay
mysql> select * from produit;
+----+------+
| id | nom |
+----+------+
| 1 | p1 |
| 2 | p2 |
| 3 | p3 |
+----+------+
Et pour deux produit d'id n et m, tu veux échanger n et m, ce qui revient à laisser n et m à leur place et à échanger toutes les autres valeurs des deux lignes de données. Moi je ferai un truc du genre:
- duplication du premier produit
- mettre à jour le premier produit avec les valeurs du second
- mettre à jour le second avec les données de la copie
- suppression de la copie
en pseudo-sql, ca donnerai ca:
- insert into produit(nom) select nom from produit where id=n;
- p = select last_insert_id()
- update produit p1, produit p2 set p1.nom=p2.nom where p2.id=m and p1.id=n;
- update produit p1, produit p2 set p1.nom=p2.nom where p2.id=p and p1.id=m;
- delete from produit where id=p;
Je pense pas qu'on puisse le faire en moins d'opérations ?!? Mais pourquoi vouloir échanger deux id de produits ? En as-tu vraaaaiiiiiiment besoin ?
A+,
Jay
Pour insérer une image (ou plus généralement des données binaires) dans une table, il te faut une colonne de type blob (Binary Large OBject), plus précisemment une colonne de type mediumblob ou largeblob en fonction de la taille de tes images (http://dev.mysql.com/doc/mysql/en/blob.html).(...)
Ensuite, tu récupère les données depuis une JSP avec la méthode getBlob() d'un objet Resultset, comme n'importe quel autre champ (http://java.sun.com/j2se/1.4.2/docs/api/java/sql/ResultSet.html#get(...) Le « problème », c'est que tu va obtenir un objet Java de type Blob (un tableau de byte). Tu veux en faire quoi après de ton image ?
Petit conseil, une base de données n'est « pas faite » pour stocker de grosses quantités de données binaires. Si tu as beaucoup d'images, le mieux est de les stocker sur un simple système de fichier, quitte à les référencer dans une table de la base (pour ce qui concerne les méta-données de l'image: format, taille, description, ...).
Non! Mysql conserve dans ses tables système (mysql.user) le md5 du mot de passe, en revanche, linux conserve dans /etc/shadow un md5 du crypt du mot de passe (cf le man de crypt :[...] crypt is the password encryption function. It is based on the Data Encryption Standard algorithm with variations intended[...]). Il me parait donc difficile de synchroniser les deux. Pour info, Mysql dispose de la fonction ENCRYPT(str[,salt]) qui devrait t'être plus utile ;-P.
En revanche, tu peux éviter la synchro en utilisant un module pam (genre http://sourceforge.net/projects/pam-mysql/(...) ;-)) pour réaliser l'authentification linux directement sur le serveur mysql :-) Moi je le fait avec le module pam-lda, ca marche bien et ca soulage beaucoup la gestion des utilisateurs (va voir sur mon blog pour un tuto, à adapter pour mysql).
Cette valeur, je la récupère à chaque chargement d'une page du site..
Si tu ne la calcules que sur une page du site, je pense que tu peux te permettre de bloquer la sortie de la page tant que tu n'as pas de valeur. Fais une petite anim javascript pour faire patienter les gens qui viennent te voir :-p. Ensuite, la valeur obtenue, tu la mets dans la session pour éviter de la recalculer deux fois pour un même client!
Au fait, si c'est pas "indiscret", t'en as besoin pour quoi de ton identifiant unique? un identifiant de session ne suffit te pas?
je n'ai accès à cette méthode que deux secondes après le chargement de la page
Pour s'exécuter, l'applet (si rikiki soit-elle) a besoin d'un environnement Java complet: le navigateur recevant l'applet appelle donc le plugin qui lui même instancie une JVM, ce qui est relativement long (que ce soit pour une applet ou un programme « byte-compilé»). Je pense que c'est cette étape qui est la plus pénalisante dans le chargement et tu ne pourra pas y faire grand chose. Les même symptômes se retrouvent sous Wind*ws/IE (je sais, c'est pas une référence mais quand même).
Si tu fais un refresh de la page, ca prend autant de temps ? (la jvm devrait déjà être en mémoire et ça devrait donc aller plus vite!).
J'essaye d'accéder à une méthode d'une applet
Depuis du javascript ? C'est vraiement génânt que ca prenne deux secondes ?
Pour info, SSH (Secure SHell) permet principalement d'obtenir un shell sur une machine distante. Par extension, on peut aussi faire du transfert de fichier par SSH (FileZilla le fait, Putty aussi avec pscp) mais uniquement de serveur SSH à client SSH.
Voila un exemple de configuration qui devrait te convenir (à adapter à ta config). J'ai pris un serveur sur un réseau privé (192.168.xxx.xxx) sans nom DNS, je suppose que tu as tout ce qu'il faut au niveau certificat (Note que c'est les fichiers de conf win32 que j'ai adapté (pas de deb sous la main), sous debian la conf se trouve dans /etc/apache2 dans plusieurs fichiers) :
[ssl.conf]
# configuration du générateur aléatoire
# sous win32, seul builtin est dispo
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
# l'endroit (fichier) ou stocker le cache ssl, cf
# http://httpd.apache.org/docs-2.0/mod/mod_ssl.html(...)
# pour les autres options disponibles
SSLSessionCache dbm:/chemin/vers/ssl_cache
<IfDefine SSL>
# où apache doit ecouter? par défaut toutes les
# interfaces sur le port 443 (https)
# /!\ complémentaire de ServerName qui donne
# seulement le nom du serveur !
# Listen 443
Listen 192.168.0.1:443
# définit les types mimes nécessaires
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
# cf doc ...
SSLPassPhraseDialog builtin
SSLSessionCacheTimeout 300
SSLMutex default
# création d'un hôte virtuel par IP
# /!\ rechercher sur google.com pour
# la différence entre hôte par ip et
# par nom et l'impact au niveau certificat
<VirtualHost 165.5.12.241:443>
ServerName 192.168.0.1:443
ServerAdmin admin@localhost.localdomain
# la racine des documents
DocumentRoot /var/www
#configuration du log
CustomLog /var/log/Apache2/access.log common
ErrorLog /var/log/apache2/error.log
LogLevel warn
#configuration SSL
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
# où trouver les certificats ?
SSLCertificateFile "conf/ssl/192.168.0.1.crt"
SSLCertificateKeyFile "conf/ssl/192.168.0.1.key"
SSLCertificateChainFile "conf/ssl/ca.crt"
# workaround pour les browser mal foutus ;-)
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
< /VirtualHost>
< /IfDefine>
# EOF
Quelques précisions:
- consulte la doc sur le site apache pour toutes les options dispo (je sais c'est en anglais mais au moins y'a tout sans erreur de traduction!)
- ta clé privée ne doit pas être cryptée ou tu dois ajouter une option (SSLPassPhraseDialog) pour indiquer à apache la clé de déchiffrage au démarrage d'apache
- le DocumentRoot du serveur principal et de l'hôte virtuel doivent pointer sur le même répertoire (pour avoir le même contenu :-P)
Voilà, ca devrait marcher comme çà!
Bonne chance,
Jay
Bon après ca dépent pas mal si tu utilises des VirtualHost ...
Ben en fait t'as pas trop le choix: pour faire du SSL, y'a que deux possibilités: soit activer le module dans la section principale de la configuration (et dans ce cas c'est tout le serveur qui tournera en ssl!), soit créer un virtual host sur le port 443 (cf doc d'apache pour la directive SSLEngine http://httpd.apache.org/docs-2.0/mod/mod_ssl.html#sslengine(...) : context: server config, virtual host
que chaque page soit accessible ou non avec SSL, au choix...
# C'est aussi une question de compétences ...
Posté par Jay . En réponse au journal PostgreSQL: mais que reste-t'il aux grandes ?. Évalué à 2.
- pour faire tourner un Mysql, on l'installe, on le démarre, on utilise un des nombreux gui (PhpMyAdmin, Mysql Browser, Sql Yog, MysqlFront, ...) on se connecte avec root sans mdp et on commence
- pour PG, on installe d'abord un linux (plus maintenant heureusement), on installe l'appli, on configure les droits d'accès dans les fichiers de config (pg_hba.conf) , on cherche un gui sur le net, on en trouve que très peu (PhpMyAdmin, PGAdmin, ...), on tente de se connecter, on essaie de comprendre la notion de schéma, ... bref pour quelqu'un qui s'y connait peu, on galère.
Postgres mérite effectivement d'être connu mais souffre d'être trop bien (c'est tout de même incroyable, pour une fois qu'un soft libre est aussi abouti !!!) et dans une équipe de développement où tout le monde n'a pas la compétence dba, il faut essayer de faire simple et efficace. Et là, on tombe totalement dans le crénau de Mysql.
Mais c'est promis, on va faire des essais sur ce sgbd pour notre prochaine maquette ;-)
# not in real life
Posté par Jay . En réponse au journal Topcoder. Évalué à 1.
Effectivement, sur un vrai gros projet au sein d'une équipe, c'est pas jouable de programmer avec des variables de 2 caractères ;-) mais je suppose que c'est en participant à des concours comme ca qu'on arrive à écrire le code DeCSS le plus court du monde ;-)
http://www.cs.cmu.edu/~dst/DeCSS/Gallery/hannum-efdtt-source(...)
J'vais aller tenter un ou deux challenges moi ... et peut-être qu'un jour on m'appelera « DVD Jay » ;-)
# Si il n'y avait qu'arte ...
Posté par Jay . En réponse au journal Arte et DRM : pareil que les autres. Évalué à 1.
Belle initiative de leur écrire, peut-être que si on est beaucoup à le faire, ca fera bouger les choses + vite :-)
[^] # Re: Mon avis de moi
Posté par Jay . En réponse au journal Repenser les langages et le développement logiciel. Évalué à 2.
# Mon avis de moi
Posté par Jay . En réponse au journal Repenser les langages et le développement logiciel. Évalué à 10.
au moins pour 80% des cas! Le langage n'est que secondaire.
** Constatations **
Les langages actuels sont certes insuffisants pour exprimer la richesse du monde mais la source primaire des bugs (AMHA) ce sont les personnes travaillant sur le projet. N'est pas développeur de logiciels qui veut. Si, me direz-vous, avec des outils style VB (malheureusement :-(). Je n'ai rien contre ceux qui travaillent avec VB, j'en fait d'ailleurs occasionnellement partie de par mon travail, mais VB vulgarise un peu trop à mon goût le développement d'applications. Pour qu'un programme soit fiable (sans bug ou presque), il faut de bon concepteurs (c'est-à-dire des gens qui réfléchissent à ce qu'il faut réellement faire et comment le faire), des analystes expérimentés qui proposent des solutions techniques (environnement, langages, ...), de bon pisseurs de lignes (qui codent rigoureusement en commentant leurs sources) et enfin de bons testeurs (en unitaire et en intégration). Ca ne résoud pas 100% des bugs mais devrait déjà faire avancer pas mal le schimilibilibilick.
Allons plus loin, la source de la source, c'est l'argent. Pour être compétent, un développeur/analyste/testeur/pisseur doit avoir étudié la théorie (les maths, le paradigme objet, ...) et doit avoir de l'expérience ... donc va coûter cher à l'entreprise. Et généralement, un DSI préfère prendre un BAC+2 sorti de la fac, le former sur le tas et le payer à coups de bambous, quitte à ce que son boulot ne soit pas « top moumoute » mais qu'il arrive rapidement sur le marché (tant pis, on sortira un service pack ;-)) que de prendre des gens compétents (mais qui vont prendre plus de temps à produire et vont coûter + cher).
[digression philosphique]
Pour aller encore plus loin, la source de la source de la source, c'est l'homme: avide d'argent et de technologie pour le conforter dans sa paresse intellectuelle, il en veut toujours plus et contraint le système à aller vite, trop vite pour bien faire.
[/digression philosphique]
** Conclusion **
A « comment réduire le nombre de bug ? », je répondrais donc « en ayant la volonté de le faire ! ».
** Conclusion : la vraie **
Non je déconne, le problème n'est pas aussi simple. Il est vrai qu'il y a encore beaucoup de travail pour améliorer les langages actuels : l'absence de typage strict des variables en PHP ou Javascript, la possibilité d'omettre la déclaration des variables en VB, le non typage des Objects d'un tableau en Java pre-1.5, l'absence d'assertions natives dans de nombreux langages.
A ce titre, je proposerai un nouveau langage à la liste déjà longue évoquée ici: Eiffel (et son compilo GNU http://smalleiffel.loria.fr/).(...) On y trouve une implémentation du paradigme objet + poussée qu'en Java, un système de pré et post conditions sur les fonctions, ... des concepts très intéressant permettant une vérification accrue du code à la compil et à son exécution. Pas encore suffisant objecterez-vous, certes mais c'est un petit pas pour l'homme :-)
Pour conclure, tout est affaire de perte acceptable: puis-je me permettre d'aller vite au détriment de la stabilité (pour des raisons commerciales le + souvent) (Mysql 5.0, Tomb Raider 1 à 6) ou est-ce que je dois prendre mon temps et limiter les bugs au maximum (A380)?
Sur ce ...
à non j'oubliais!
la gestion des exceptions (ndr :les contrats)
Les contrats n'ont, sauf erreur de ma part due au temps écoulé depuis mes cours de théorie OO, rien à voir avec les exceptions. Un contrat défini un ensemble de règles qu'un client doit respecter. En Java comme en IDL, c'est décrit par des interfaces qui énumèrent les méthodes que doit implémenter une classe cliente (le contrat qu'elle doit respecter).
[^] # Re: Surement
Posté par Jay . En réponse au message Localisation Géographique d'un serveur. Évalué à 1.
Bon courage quand même
[^] # Re: float: left
Posté par Jay . En réponse au message des DIV dans un DIV. Évalué à 1.
Voir http://openweb.eu.org/articles/initiation_display/(...) pour plus d'infos.
.item {
/*float:left;*/
position:relative;
width:100px;
display: inline; }
Testé dans IE6 et dans FF :-)
A+,
Jay
[^] # Re: C
Posté par Jay . En réponse au message traitement selon le nom du fichier. Évalué à 1.
# C
Posté par Jay . En réponse au message traitement selon le nom du fichier. Évalué à 1.
- en C y'a pas vraiment de booléens, juste 0 pour false et tout le reste pour true
- toute affectation "retourne" une valeur, celle qui a été affectée à la variable à gauche de l'expression, ainsi (i=6) vaut 6, ce qui autorise a=(b=6) pour donner a=6 et b=6
- l'expression suivant un && n'est évaluée que si l'expression située avant est true (!= 0)
- l'expression suivant un || est évaluée quelque soit la valeur de l'expression située avant
Ainsi: !( *(file+length-4)=0 ) remplace le dernier '_' par '\0' et renvoie !0 donc true, atoi(&file[4]) renvoie true uniquement si la séquence est un chiffre non nul, et !( *(file+length-4)='_' ) remet en place le '_' en renvoyant false pour ne pas interférer dans le résultat de atoi(). A+, Jay# Insert, Update, Delete
Posté par Jay . En réponse au message MySQL : échanger deux valeurs (clé primaire). Évalué à 1.
# /proc
Posté par Jay . En réponse au message Ressource ordinateur. Évalué à 1.
Une première piste pour la mémoire ...
% cat /proc/meminfo
MemTotal: 516596 kB
MemFree: 5704 kB
Buffers: 104808 kB
Cached: 174800 kB
SwapCached: 0 kB
Active: 203908 kB
...
JAY
# Blob
Posté par Jay . En réponse au message Inserer et recuperer une image à partir d'une base mysql dans une jsp. Évalué à 1.
Pour insérer une image (ou plus généralement des données binaires) dans une table, il te faut une colonne de type blob (Binary Large OBject), plus précisemment une colonne de type mediumblob ou largeblob en fonction de la taille de tes images (http://dev.mysql.com/doc/mysql/en/blob.html).(...)
Ensuite, tu récupère les données depuis une JSP avec la méthode getBlob() d'un objet Resultset, comme n'importe quel autre champ (http://java.sun.com/j2se/1.4.2/docs/api/java/sql/ResultSet.html#get(...) Le « problème », c'est que tu va obtenir un objet Java de type Blob (un tableau de byte). Tu veux en faire quoi après de ton image ?
Petit conseil, une base de données n'est « pas faite » pour stocker de grosses quantités de données binaires. Si tu as beaucoup d'images, le mieux est de les stocker sur un simple système de fichier, quitte à les référencer dans une table de la base (pour ce qui concerne les méta-données de l'image: format, taille, description, ...).
Sur ce ... bonne continuation
JAY
# Pourquoi faire compliqué quand ....
Posté par Jay . En réponse au message Des Chiffres et des Lettres. Évalué à 1.
En quoi cette méthode ne te satisfait pas ?
# Pas possible ?
Posté par Jay . En réponse au message Mot de passes md5 MySQL vs /etc/shadow. Évalué à 4.
Non! Mysql conserve dans ses tables système (mysql.user) le md5 du mot de passe, en revanche, linux conserve dans /etc/shadow un md5 du crypt du mot de passe (cf le man de crypt :[...] crypt is the password encryption function. It is based on the Data Encryption Standard algorithm with variations intended[...]). Il me parait donc difficile de synchroniser les deux. Pour info, Mysql dispose de la fonction ENCRYPT(str[,salt]) qui devrait t'être plus utile ;-P.
En revanche, tu peux éviter la synchro en utilisant un module pam (genre http://sourceforge.net/projects/pam-mysql/(...) ;-)) pour réaliser l'authentification linux directement sur le serveur mysql :-) Moi je le fait avec le module pam-lda, ca marche bien et ca soulage beaucoup la gestion des utilisateurs (va voir sur mon blog pour un tuto, à adapter pour mysql).
Jay
[^] # Re: Chargement de la JVM en mémoire
Posté par Jay . En réponse au message [applet] temps de chargement. Évalué à 1.
Pour ce qui est de zindoze, moi j'ai un temps de latence au chargement d'une applet (avec ff ou ie!). Je ne pourrai donc pas te répondre, désolé ;-(
Mais t'as vraiment besoin d'autant de sécurité sur ton site ? si oui, passes en SSL!
Jay
[^] # Re: Chargement de la JVM en mémoire
Posté par Jay . En réponse au message [applet] temps de chargement. Évalué à 1.
Si tu ne la calcules que sur une page du site, je pense que tu peux te permettre de bloquer la sortie de la page tant que tu n'as pas de valeur. Fais une petite anim javascript pour faire patienter les gens qui viennent te voir :-p. Ensuite, la valeur obtenue, tu la mets dans la session pour éviter de la recalculer deux fois pour un même client!
Au fait, si c'est pas "indiscret", t'en as besoin pour quoi de ton identifiant unique? un identifiant de session ne suffit te pas?
A+
# Chargement de la JVM en mémoire
Posté par Jay . En réponse au message [applet] temps de chargement. Évalué à 1.
Pour s'exécuter, l'applet (si rikiki soit-elle) a besoin d'un environnement Java complet: le navigateur recevant l'applet appelle donc le plugin qui lui même instancie une JVM, ce qui est relativement long (que ce soit pour une applet ou un programme « byte-compilé»). Je pense que c'est cette étape qui est la plus pénalisante dans le chargement et tu ne pourra pas y faire grand chose. Les même symptômes se retrouvent sous Wind*ws/IE (je sais, c'est pas une référence mais quand même).
Si tu fais un refresh de la page, ca prend autant de temps ? (la jvm devrait déjà être en mémoire et ça devrait donc aller plus vite!).
Depuis du javascript ? C'est vraiement génânt que ca prenne deux secondes ?
A+,
Jay
# goooooogle.com
Posté par Jay . En réponse au message Server SSH ou FTP ?. Évalué à 1.
Pour info, SSH (Secure SHell) permet principalement d'obtenir un shell sur une machine distante. Par extension, on peut aussi faire du transfert de fichier par SSH (FileZilla le fait, Putty aussi avec pscp) mais uniquement de serveur SSH à client SSH.
Bonne chance,
Jay
# Exemple
Posté par Jay . En réponse au message Config apache2 identique avec ou sans SSL. Évalué à 1.
[^] # Re: Avec des NameVirtualHost
Posté par Jay . En réponse au message Config apache2 identique avec ou sans SSL. Évalué à 1.
Ben en fait t'as pas trop le choix: pour faire du SSL, y'a que deux possibilités: soit activer le module dans la section principale de la configuration (et dans ce cas c'est tout le serveur qui tournera en ssl!), soit créer un virtual host sur le port 443 (cf doc d'apache pour la directive SSLEngine http://httpd.apache.org/docs-2.0/mod/mod_ssl.html#sslengine(...) : context: server config, virtual host
que chaque page soit accessible ou non avec SSL, au choix...
Un peu comme cet excellent site --> https://linuxfr.org(...) ;-P
# http://dev.mysql.com
Posté par Jay . En réponse au message Petite question MySQL. Évalué à 1.
Tu peux aussi utiliser CONCAT() pour reconstituer une date au format ISO avant d'insérer ça dans un champs de type DATE.
Bonne continuation :-)