Author Archives: jerep6 - Page 2

Configuration pour rebond ssh (putty, winscp et .config linux)

Voici une configuration pour atteindre la machine B sachant que :

  • il n’existe pas d’accès direct à la machine B depuis l’extérieur
  • la machine B héberge un serveur ssh sur le port 22
  • la machine A dispose d’un accès sur l’extérieur via l’adresse public.no-ip.org
  • la machine A héberge un serveur ssh sur le port 443

rebonds_ssh

Putty

Dans le panel « session », le hostname est l’ip de la machine B vue depuis la machine A. De même pour le port qui est le port du serveur ssh vu depuis la machine A.

putty_session

Dans le panel proxy, le hostname est celui de la machine A vu depuis le client. Idem pour le port.
Commande dans l’input Telnet : C:\Program Files (x86)\PuTTY\plink.exe jerep6@%proxyhost -P %proxyport -agent -nc %host:%portputty_proxy

WinSCP

A l’instar de putty, le nom d’hôte et le port sont les configurations vues depuis la machine A.

winscp_session

Le panel proxy et identique à celui de putty, il représente la configuration de la machine A vue depuis le client.winscp_proxy

Commande dans l’input proxy local : C:\Program Files (x86)\PuTTY\plink.exe jerep6@%proxyhost -P %proxyport -agent -nc %host:%port

Linux

La solution retenue est d’utiliser ProxyCommand dans la configuration de SSH. Il faut que la machine hôte dispose de netcat.

Contenu du fichier ~/.ssh/config du poste client

Host machineA
  User jerep6
  Port 443
  HostName public.no-ip.org

Host machineB
  User jerep6
  ProxyCommand ssh -q svr nc -q0 %h 22

Commande de connexion : ssh machineB

XPEnology

 

Je viens de découvrir que l’OS de Synology est en partie open source. En effet, Synology met a disposition sur sourceforge les sources de ses NAS ainsi que le DSM tool chains. Grâce à cela une build alternative a vu le jour : XPEnology

Installation XPEnology

J’ai installé le DSM 4.3 sur une machine virtuelle (virtualbox). Je ne détaille pas l’installation du DSM car cette dernière est particulièrement bien décrite dans ces tutoriaux :

Néanmoins, voici quelques points importants :

Contenu de l’archive :

  • synoboot-trantor-4.3-3810-v1.0.img : image de boot émulant le hardware d’un NAS synology
  • XPEnology_trantor_v1.0_DSM_DS3612xs_3810.pat : fichier d’installation du DSM

Convertir le fichier .img de l’archive en format virtuelbox :

VBoxManage convertdd fichier.img fichier.vdi

Disque dur de la VM

Il ne faut pas oublier d’allouer un disque à la VM d’une taille supérieure à 5 GO. Ce disque servira à installer le DSM et tous les fichiers nécessaires à son fonctionnement.

Voici le partitionnement qui sera effectué par l’assistant d’installation.

ddgparted

Contenu de /dev/sdb1 (partition contenant le système)dddsmContenu de /dev/sdb3 (partition contenant les données)
dddonnees

 

Exemple de jsonp avec Jersey

Only code ;)

Pom.xml

<jersey.version>1.17.1</jersey.version>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-servlet</artifactId>
    <version>${jersey.version}</version>
</dependency>

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-json</artifactId>
    <version>${jersey.version}</version>
</dependency>

Webservice.java

    @GET
    @Produces("application/javascript; charset=UTF-8")
    public JSONWithPadding listAll(@QueryParam("callback") String callback) {
        Collection<RealProperty> properties = serviceRealProperty.listAll();

        Collection<RealPropertyTo> rpt = mapper.mapAsList(properties, RealPropertyTo.class);

        return new JSONWithPadding(rpt, callback);
    }

Le classpath

Le contenu de cet article est principalement issu de la présentation Le classpath n’est pas mort, mais presque de Alexis Hassler à Devoxx France 2013.

Pour commencer, il existe deux types de classes :

  • classes du JRE (String, Integer par exemple)
  • classes provenant de librairies externes ou du code de l’application

Une classe est identifiée par son nom et par son classloader. Pour toutes les classes n’étant pas dans le JRE, il faut indiquer au lancement de l’application le classpath à utiliser. Si le classpath est erroné deux exceptions peuvent être levées : NoClassDefFoundError et ClassNotFoundException.

Qu’est ce qu’un classloader

Un classloader est avant tout une classe qui est capable de charger une autre classe ou des ressources (properties, xml, images …)

Lorsque le runtime java a besoin de charger une nouvelle classe pour une application, il la recherche dans l’ordre suivant :

  1. Bootstrap classes via le bootstrap classloader : le cœur de la JRE (rt.jar), l’internationalisation (i18n.jar) et bien d’autres
  2. Installed extensions via l’extension classloader : classes présentes dans le dossier lib/ext de la JRE. A ne pas confondre avec le mécanisme d’endorced.
  3. System classes via le system classloader : classes de l’application ainsi que de ses librairies

Tous les classloader (sauf le bootstrap) possède un parent.
Pour connaitre le classloader d’une classe :

MaClasse.class.getClassLoader() // sun.misc.Launcher$AppClassLoader
String.class.getClassLoader() // null

Le classloader des classes du JRE (bootstrap classloader) n’est pas un composant java. Si le bootstrap classloader était un objet Java, il lui faudrait un classloader à qui il faudrait également un classloader …
Le bootstrap classloader est donc un bout de code natif. Lire la suite »

Vue de la Dordogne depuis Castelnaud

Vue depuis le château de Castelnaud en Dordogne.

Vue Chateau Castelnaud

Licence Creative Commons  NC-BY-NC

URL, URN, URI quelles différences ?

Commençons pas la définition officielle de la RFC 3986 :

A URI can be further classified as a locator, a name, or both. The term « Uniform Resource Locator » (URL) refers to the subset of URIs that, in addition to identifying a resource, provide a means of locating the resource by describing its primary access mechanism (e.g., its network « location »). The term « Uniform Resource Name » (URN) has been used historically to refer to both URIs under the « urn » scheme [RFC2141], which are required to remain globally unique and persistent even when the resource ceases to exist or becomes unavailable, and to any other URI with the properties of a name.

URI_Euler_Diagram_no_lone_URIs.svgURI : Une URI identifie une ressource soit par son nom, soit pas sa localisation soit par les deux. Il existe deux types d’URI :
- URL : Uniform Resource Locator
- URN : Uniform Resource Name

 

URL : une URL est un sous ensemble des URI qui spécifie la localisation d’une ressource et comment la récupérer grâce au schéma : http, ftp, smb, file, …

URN : l’URN n’implique pas de disponibilité de la ressource, elle identifie juste de manière unique cette dite ressource sans décrire ni comment ni où la trouver. Elle se représente obligatoirement via le schéma URN.

Exemples d’URL :
mailto:someone@example.com
http://www.google.fr/
file:///home/someuser/somefile.txt

Exemples d’URN :
urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C
urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66

Je n’ai malheureusement pas trouvé d’exemple d’URI étant à la fois URL et URN.

Explication par analogie

Pour expliquer de façon concrète, je vais m’appuyer sur la réponse Roger Pate sur stackoverflow.

De manière générale, une URI identifie et une URL localise. Ces deux notions ne sont pas antinomiques puisque localiser revient à identifier, mais identifier n’est pas forcément localiser. C’est pour cela qu’une URL est une URI, mais que toutes les URI ne sont pas des URL.

Exemple

Roger Pate

Ces quelques lettres représentent un nom qui par définition permet d’identifier une personne. Cela ne peut pas s’apparenter à une URL car il ne véhicule aucune information permettant de localiser ou de contacter la personne.

On pourrait le rapprocher d’une URN. En effet, une URN peut être employée pour parler d’une ressource sans que cela ne préjuge de son emplacement ou de la manière de la référencer. Elle est toutefois très restrictive au sujet de l’unicité dans le temps et dans l’espace. Pour continuer avec l’exemple précédent, dans le monde, plusieurs personnes peuvent s’appeler Roger Pate. Quand bien même il n’existe qu’un seul Roger Pate sur Terre, d’autres Roger Pate ont sûrement existé avant lui. Et si ce n’est pas le cas, rien n’enpêche Roger Pate de transmettre à un de ses descendants sont nom et prénom. Le nom n’est pas unique dans le temps ni dans l’espace, cela ne fait donc pas une bonne URN.

 

4914 West Bay Street, Nassau, Bahamas

Ceci est une adresse qui permet de localiser un lieu. On peut l’apparenter à une URL car elle identifie (indirectement) Roger Pate tant que « résident de … »

 

Syntaxe des URI

Toutes les URIs sont formées de la sorte :
<scheme name> : <hierarchical part> [ ? <query> ] [ # <fragment> ]
Pour les détails, voir la page wikipedia

Toutefois, les exemples suivants sont également des URI ; plus précisément des références d’URI :
- relative/path/to/resource.txt
- /../../resource.txt
- /resource.txt#frag01

 

Sources
http://stackoverflow.com/questions/176264/whats-the-difference-between-a-uri-and-a-url
http://stackoverflow.com/questions/4913343/what-is-the-difference-between-uri-url-and-urn
http://damnhandy.com/2011/01/18/url-vs-uri-vs-urn-the-confusion-continues/ http://en.wikipedia.org/wiki/Uniform_Resource_Identifier

wrtip : une extension firefox utilisant WordReference

MAJ 02/10/2014 :
FR
: La version actuelle (1.5.0) ne fonctionne plus en raison d’un bug de l’API WordReference. En attendant, la validation de Mozilla, la version suivante (1.6.1) est disponible à cette adresse : https://addons.mozilla.org/fr/firefox/addon/wordreference-translate-inpage/versions/?page=1#version-1.6.1
EN : Curent version (1.5.0) doesn’t work (bug in WordReference API). Pending Mozilla’s review, next version (1.6.1) is available here https://addons.mozilla.org/fr/firefox/addon/wordreference-translate-inpage/versions/?page=1#version-1.6.1

 

Article original :
Lisant beaucoup d’articles informatiques en anglais, j’ai souvent recours à WordReference pour traduire les mots dont le sens m’échappe. J’avais déjà proposé une solution pour créer un raccourci de recherche mais cela nécessite de renseigner la lettre du moteur de recherche (w dans mon cas), puis de coller le mot dans la barre d’adresse. Niveau rapidité et praticité, on peut faire mieux.

WordReference propose une extension pour Firefox mais elle ouvre un nouvel onglet, ce qui, je trouve, casse le flux de lecture.

J’ai donc créé une petite extension sans prétention pour Firefox 18 et plus : wrtip (WordReference Translate In Page). Elle permet de traduire au sein même de la page courante un mot en utilisant le dictionnaire WordReference. Pour cela il suffit de sélectionner le mot à traduire, puis d’effectuer une des actions suivantes :

  • clic droit –> Traduire avec wrtip
  • clic gauche sur l’icône dans la barre d’extension en bas du navigateur.

Un panel s’ouvrira et proposera les traductions correspondant à la sélection.

wrtip1        wrtip2

Au niveau de la traduction, les limitations sont celles de l’API exposée par WordReference. La principale étant que l’anglais doit se trouver en tant que langue source ou destination. Il est par exemple impossible de traduire directement de l’espagnol vers le français.

Installer wrtip (Wordreference Translate In Page)

Java SE, Java EE, JDK, JRE, OpenJDK quelles différences ?

Java SE

Java SE est une spécification dont l’implémentation la plus connnue est le JDK d’Oracle. Java SE contient les classes et concepts de bases de la plateforme Java. Chaque version du JSE contient :

JavaSE_Software_ArchitectureImage provenant de Wikipedia.

Java EE

Java EE (Enterprise Edition) est une spécification. Elle comprend entre autres :

  • Servlet
  • JSTL,
  • JPA
  • JMX
  • JSF
  • EJB
  • JTA
  • JAX-RS

Les serveurs d’applications (Glassfish, JBoss, Tomcat …) sont les implémentation concrètes de cette spécification.

BalusC de stackowerflow :

Your Glassfish server is the concrete Java EE implementation. Note that OpenJDK is
a concrete Java SE implementation. Also note that whenever you download Java EE
from Oracle site, basically all you get is Glassfish along with a bunch of
documents and examples.

Lire la suite »

JPA et @Transactional readonly (spring)

Petite subtilité avec l’attribut readonly de l’annotation @Transactional de Spring lors de l’utilisation de JPA.

@Transactional(readOnly = true)
    public void save(T bo) {
        entityManager.persist(bo);
    }

Lorsque vous utilisez JPA, deux possibilités lors de l’exécution de ce code :

  1. L’insertion en base s’effectue malgré le flag readonly
  2. Rien ne se produit (même pas une exception)

Le premier cas se produit lorsque la clé technique de l’entité à persister est générée automatiquement. Le deuxième cas intervient quand la clé technique de l’entité à persister est assignée par l’application.

Pour les explications vous pouvez consulter le lien suivant : http://www.ibm.com/developerworks/java/library/j-ts1/index.html#N101B1

 

www or not www

Petits tour d’horizon des arguments pour et contre l’utilisation du www dans l’url :

Pour :

  • Le www est le sous domaine standard du domaine principale. Comme tout sous-domaine, il peut bénéficier d’une entrée DNS. Qui dit IP différente dit potentiellement serveurs différents.
  • Permet de distinguer les différents sous domaines (www, mail, ftp, blog, …)
  • Symétrie visuelle de l’url (www.XXX.com)
  • Visibilité des cookies : positionner un cookie sur le domaine racine fera qu’il sera visible sur tous les autres sous domaines.

Contre :

  • Les sous domaines ne sont pas obligatoires
  • Difficulté de prononciation du www
  • Rallonge l’url

Dans tous les cas, il est fortement conseillé de faire une redirection propre (301) pour n’autoriser qu’une forme d’URL (problématique SEO). Exemple pour supprimer le www de l’url :

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.jerep6\.fr$
RewriteRule (.*) http://jerep6.fr/$1 [L,R=301]

Sources :
http://stackoverflow.com/questions/1109356/www-or-not-www-what-to-choose-as-primary-site-name
http://www.codinghorror.com/blog/2008/04/the-great-dub-dub-dub-debate.html
http://computer.howstuffworks.com/internet/basics/question180.htm
http://creativebriefing.com/how-to-brand-your-websites-url-part-1-to-www-or-not-to-www/
http://no-www.org/