OVH Cloud OVH Cloud

Microsoft et Java

295 réponses
Avatar
Wykaaa
Microsoft semble reconnaître que Java permet de développer plus
rapidement que C# et qu'il y a moins de failles de sécurité dans Java
que dans .net :
http://dsi.silicon.fr/nouveautes/microsoft-java-forever%E2%80%A6-1366

10 réponses

Avatar
Tonton Th
On 06/19/2011 09:07 PM, Aéris wrote:

Si tu n'as pas de variable globale, je ne vois pas
comment l'intégralité du logiciel peut y avoir accès.



Inversion de contrôle avec Spring



Mais est-ce bien compatible avec le "Champ de distorsion
de la réalité" ?



--
Je cherche un nouveau travail...
http://tboudet.free.fr/cv-thierry-boudet.pdf
http://sigfood.dinorama.fr/
Avatar
Tonton Th
On 06/18/2011 09:43 PM, Aéris wrote:

class AVOutputStream {
}

class AVOutputStreamWithFilter extends AVOutputStream {
}



L'avantage de ce code est aussi que du coup dans mon code, j'ai accès
aux 2 : avec *et* sans les filtres.

Alors que toi tu n'as accès qu'à un seul : avec *ou* sans les filtres.



Si le but du "sans filtre" est de faire rentrer le code
dans une petite machine, le Java est mal barré...


--
Je cherche un nouveau travail...
http://tboudet.free.fr/cv-thierry-boudet.pdf
http://sigfood.dinorama.fr/
Avatar
Tonton Th
On 06/20/2011 12:13 AM, Aéris wrote:

On fait comment quand on a pas de "dns inverse" ?



On en invente un. fr.clown.bozo par exemple.



Qu'en pense le locataire de clown.fr ?

Mais généralement c'est l'url du site web de ta boite à l'envers.



On fait comment quand on a pas de "site web de la boite" ?

--
Je cherche un nouveau travail...
http://tboudet.free.fr/cv-thierry-boudet.pdf
http://sigfood.dinorama.fr/
Avatar
Aéris
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 20/06/2011 00:22, Tonton Th a écrit :
Mais est-ce bien compatible avec le "Champ de distorsion
de la réalité" ?



Peut-être =)
Si tu veux des explications sur ce qu'est l'IoC, n'hésite pas à
demander, ça te révolutionnera ta vie et tes programmes

- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJN/n4KAAoJEK8zQvxDY4P9Y2EIALesh4i6RZLS7JZ6ZMGyqIao
r7mT0sXyL/DOc3ylS5yFHtonah6wuN3R1i4rghbVTmhcODrgrCdGjpWlCLDiGxo0
EgLky+PRu6YSBRqIGcAs7vzcN5v05dvoRXzvo2WldsIkJZp8cniWyVFY6brJXh3k
MwOGuHwgKl0YUtupWSSsL1Y9SN/w01YrhAzUNNKaKoFheZOcwJABVXk10bxdrovS
G3ZxAHsFIKCCIHhs4zgL/F/zNUJZo2RdFoQ6bPSBpoHD3Y3x9ebaV2lV9uoS9MEZ
JLMtK5xIZvIE2/D8FhEg3Q7Y2FZhh967fz4qj/CzmLBJdXA5sd3t9j95be2SR4U ¡Gc
-----END PGP SIGNATURE-----
Avatar
Aéris
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 20/06/2011 00:37, Tonton Th a écrit :
Si le but du "sans filtre" est de faire rentrer le code
dans une petite machine, le Java est mal barré...



Et bien dans ce cas tu fais 2 jar, dont l'un est dépendance de l'autre
Mais je doute que quelques classes en plus te fasse exploser tes quotas.
Et au pire comme je te l'ai dis, tu peux virer les classes à la fin ou
ne pas les compiler du tout (profile Maven)

- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJN/n6YAAoJEK8zQvxDY4P9sNwH/1eqdPE3YHZxeCYLTlLx8VOG
Gbotek4CNO+hoe3NjYb0Hahs2UM9V3zVOG64fH1hVXiQgoZDcHgIxOc52mxsnl3r
vvlZC1NPlYpSUdmk8lnKRD6dyhS5wSGAYhGPXVOgSUd5VwDWAk39KeKo8NWFIYs+
raMV0K2BwxSvuoM50xrcDmUjvMB4d482h5MZ2+bagoiyhYPP+gbrhGrYJ73i92Sc
n14wAk8QvbVYMpcffcDc3p/MqUNeBtcvSQQubikMf0Em8f8OItC9aFno1KoGz4Gb
20pPGJtCnci+uvGs+Gpn9ML7yoZcXHyRPgOjtaCvZFb7Un8kzXwhd8fwVG0uGME =+wYG
-----END PGP SIGNATURE-----
Avatar
Aéris
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 20/06/2011 00:53, Tonton Th a écrit :
On fait comment quand on a pas de "site web de la boite" ?



Tu mets le code de ton pays suivi du nom de ta boite.
Le but est uniquement de choisir un groupId unique au monde pour tes
projets.

- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJN/n9oAAoJEK8zQvxDY4P94XAIAI49/mYYJvc1RESh6irCQQYQ
LFTv97B9WEOxKEF7WOQGFKdZqOHjpsTc7vhNsYwxXExbeyr0daXMIPSfE2YuTGY1
aKnUQ7c0eqvtmTJ0Z23/9TtJrfIgfZBsQa071LpFnxQU2OFrdl6XQyge816FeStD
unJYKakKRRsii5P/dkGArhpBZlVOvAP/eo1EQ+f17xv3Ga4U/4Y4xHPRbFqdzlwX
1jxQ9zp1MNwkh2WQ2EjkK2qecvZBslx5fja9g8WoMvPzMP32rjJuMPUQqplRxWOh
JNsjFLxE5oT3FrVtRxtdvGmWzszJGg6YFNy09vFFXsvCt6UdvnceSMvd/6k3kEs =P6p1
-----END PGP SIGNATURE-----
Avatar
Yliur
> Mais généralement c'est l'url du site web de ta boite à l'envers.

On fait comment quand on a pas de "site web de la boite" ?



Si c'est perso, tu mets ton nom :) .
Avatar
Nicolas George
Aéris , dans le message <4dfe744c$0$1425$, a
écrit :
Non, la maintenance est très simple et totalement gérée par Maven.



Lire ça écrit sérieusement, ça fait vraiment peur.
Avatar
JKB
Le Sun, 19 Jun 2011 22:35:26 +0200,
Aéris écrivait :

Le 19/06/2011 21:59, Tonton Th a écrit :
Je parlais du cas où la machine cible est distante.



Ça change quoi ?
Java étant (et devant) être portable,



Merci pour cette tranche de rigolade matinale. Java doit être
portable... Ça, c'est la théorie parce qu'il faut porter la JVM. Tu
me diras, ce n'est plus aux devs d'écrire des choses portables, mais
ça ne fait que repousser le problème un peu plus loin.

tu peux très bien compiler sur ta
machine et transférer le jar obtenu uniquement.
Et même si l'appli embarque du natif (cas de SWT par exemple) et donc
est plate-forme dépendante, un coup de profil Maven et tu
«cross-compile» en local (en réalité tu inclus juste des jar win32 au
lieu de x86 par exemple)



Et tu exécutes le tout sous J9 et ça se bauge lamentablement.

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
JKB
Le Sun, 19 Jun 2011 23:10:44 +0200,
Yliur écrivait :

>> Non. Va jusqu'au bout de ton raisonnement. Cela implique de
>> récupérer le code d'erreur localement, puis de traiter ce
>> qu'il faut localement,
>
> En général on ne sait pas quoi faire localement.

Si, libérer les ressources utilisées dans la fonction dans
laquelle la fonction fautive a été appelée. Et il faut le faire
récursivement jusqu'à la fonction dans laquelle on peut traiter
l'erreur. Si tu ne fais pas ça, tu risques fort d'avoir des fuites de
mémoire un peu partout (voire pire).



Et donc en général en Java ça se résume à rien, parce qu'on ne libère
pas la mémoire explicitement. La plupart des fonctions n'ont pas
d'autres ressources à libérer (connexions, fichiers, ...), et donc on ne
fait quelque chose que dans ces fonctions.



Ça, c'est parce que tu n'en as rien à faire. Appelle un peu le GC à
la main sur une application serveur écrite en Java, et tu vas voir
qu'il est particulièrement inefficace.

>> puis de remonter l'erreur (soit avec un code
>> d'erreur, soit avec une exception et un magnifique throw)
>
> S'il n'y a pas de catch mais seulement un finally, il n'y a même pas
> besoin de propager l'exception : le code de nettoyage dans le bloc
> finally est exécuté puis l'exception est automatiquement propagée.

Impossible à faire dans le cas général.



Pourquoi ? Si l'exception doit être traitée explicitement (IOException
par exemple), c'est vrai, mais on l'emballe dans une exception propre à
l'appli qui n'est pas vérifiée par exemple, qui remontera facilement la
pile d'appels.



Toi, il y a longtemps que tu n'as pas vu un vrai code qui doit être
prêt pour la semaine dernière. Le dev java, quand il est à la
bourre, il ne _fait_ pas ça. Il te colle d'emblée un gros
gestionnaire d'exception bien sale qui récupère tout pour ne pas
s'emmerder lors du développement.

>> à la
>> fonction appelante, et ainsi récursivement jusqu'à un point où tu
>> peux prendre ta décision sur le traitement à apporter. Je n'ai
>> _jamais_ vu un code Java (ou C++ d'ailleurs) fonctionner comme ça.
>> Je ne dis pas que ça n'existe pas, simplement que je n'en ai
>> jamais vu. La plupart du temps, tu as un try/catch avec un gros
>> machin pas net dedans qui récupère toutes les exceptions qui
>> passent, se contrefichant éperdument de tout ce qu'il faudrait
>> récupérer correctement.
>
> En Java, la plupart du temps il n'y a rien à récupérer
> "correctement".

Ah ? Enfin, tout est dans le 'la plupart du temps'...



Et donc ? C'est juste beaucoup plus simple et ça explique pourquoi il
n'y a pas besoin de coller des traitements partout, donc de traiter
l'erreur dans toute la pile d'appels. On met juste un try/finally là où
il y a des ressources qui ont vraiment besoin d'être libérées.



Écoute, tu peux être convaincu que les exceptions sont le meilleur
traitement possible d'une erreur. C'est ton droit. Je pense pour ma
part que ce truc est le pire des traitements d'erreur parce qu'il
s'appuie sur tout un tas de choses y compris le GC. C'est une
aberration totale parce qu'on n'a pas envie que le développe sache
(faire) une gestion propre et efficace qui est un peu plus complexe.
J'ai sous le coude une application Java, à peu près écrite
correctement qui fonctionne sur une architecture trois tiers en
réseau. À chaque fois qu'il y a un paquet qui passe à la trappe ou
une session utilisateur qui se bauge, les erreurs sont récupérées,
mais il faut un temps certain pour que le GC libère la mémoire
associée et un appel à la main peu libérer plusieurs centaines de
Mo ! Résultat des courses, toutes les erreurs sont gérés à la C,
proprement, car la gestion par exception faisait juste planter la
JVM sur un 'out of memory exception' ! Les exceptions, c'est bien
lorsque tu as un petit programme dans un coin. Lorsque tu as un truc
énorme, c'est une monumentale connerie.

> Seulement de la mémoire, mais tout ce qui a été alloué dans la
> fonction et stocké dans des variables locales n'a pas besoin d'être
> récupéré (comme dans le cas d'une fin normale de la fonction, c'est
> le collecteur de mémoire qui s'en occupe).
>
> Dans le cas où il a des choses à récupérer (fichiers, ...), en
> général il y a une exception à gérer explicitement
> (IOException, ...). Donc l'obligation de réfléchir à ce qu'il faut
> en faire (moins facile à oublier qu'un code d'erreur).

Sauf que c'est très con. Parce que ton exception peut être
récupérée tout à fait ailleurs



Comment ça ? La méthode qui fait l'appel concerné est obligée de
traiter l'exception localement ou de la laisser passer explicitement.
L'exception n'apparaît pas miraculeusement ailleurs.



Tu n'as pas l'impression de te prendre les pieds dans le tapis ?
Tu disais plus haut qu'on ne savait pas localement comment prendre
une décision et qu'il fallait que ça remonte. Il y a une
contradiction dans les termes.

et de façon totalement dégueulasse.



Tu peux définir techniquement "totalement dégueulasse" ?



Récupérer à l'endroit où on peut réellement traiter l'erreur (soit
beaucoup plus haut dans la pile) une exception générique. C'est
idiot et la syntaxe java consiste à mettre des gestionnaires
d'exception un peu partout, renvoyer l'exception au père, grand'père
ou arrière-grand'père voire pire par un throw. Le seul moyen de gérer
correctement une erreur est de la remonter le long de la pile en la
gérant à chaque appel de fonction.

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr