Ubuntu : Lire un DVD (protégé par CSS)

By , 19/05/2012

Les DVD du commerce sont souvent protégés contre les copies grâce au système CSS (Content Scrambling System). Le résultat de cette protection anti-copie c’est qu’un DVD devient souvent illisible dans certaines distributions Linux (dont Debian et Ubuntu).

Pour contourner ce système anti-copie et enfin réussir à lire le DVD acheté, il faut installer la bibliothèque libdvdcss en installant le package ubuntu-restricted-extras puis en lançant le script d’installation de libdvdcss :

sudo apt-get install ubuntu-restricted-extras
sudo sh /usr/share/doc/libdvdread4/install-css.sh

Une fois cette installation terminée, il faut redémarrer le lecteur de DVD (VLC par exemple).

Source : http://doc.ubuntu-fr.org/lire_un_dvd


Pour information :

La légalité du contournement du système anti-copie
En France, la loi DADVSI et le décret d’application du 23 décembre 2006 rendaient ambiguë la possibilité de lire un film sur DVD commercial en utilisant dans des systèmes d’exploitation libres, comme Ubuntu, puisque aucun logiciel officiel de déchiffrement n’était disponible. L’arrêt du Conseil d’État du 16 juillet 2008 lève l’ambiguïté, en confirmant notamment que l’utilisation d’un logiciel libre, interopérant avec une mesure technique à l’aide d’informations obtenues par décompilation des éléments logiciels de cette dernière, n’a rien d’illicite au regard de la loi DADVSI et de ce décret. (Plus d’informations)

Si en France le contournement d’une mesure technique de protection est légalement autorisée dans un but d’interopérabilité, il peut en être autrement dans d’autres pays. Nous vous recommandons de vous renseigner davantage à propos de la légalité du contournement des systèmes anti-copie dans un but d’interopérabilité dans votre pays avant d’appliquer l’une ou l’autre des méthodes exposées ci-dessous. Ubuntu-FR ne saurait être tenu responsable en cas de non-respect de la législation dans votre pays.

TinyMCE avec un ruban

By , 17/05/2012

“Ribbon” est un skin très intéressant pour l’éditeur WYSIWYG TinyMce. Il ressemble à la nouvelle version de word avec le ruban (ou interface à onglet), qui a été introduite avec Office 2007. Voici un aperçu :

Il est très simple à mettre en place :

<script type="text/javascript" src="js/tinymce/jscripts/tiny_mce/tiny_mce.js"></script>
<script type="text/javascript">
tinyMCE.init({
               mode : 'textareas',
               theme : 'ribbon',
               content_css : 'css/editor.css',
               height: 600,
               plugins : 'bestandsbeheer,tabfocus,advimagescale,loremipsum,image_tools,embed,tableextras,style,table,inlinepopups,searchreplace,contextmenu,paste,wordcount,advlist,autosave',
               inlinepopups_skin : 'ribbon_popup'

});

</script>

Source : http://tinymce.swis.nl/

JRebel gratuit !

By , 24/04/2012

Cette information date déjà de quelques mois, mais je viens de la découvrir : il existe une version gratuite de JRebel (https://social.jrebel.com). Ce logiciel permet aux développeurs Java d’éviter les redéploiements à répétition de leurs applications grâce à un système de synchronisation du code développé et du code déployé.

Bien entendu, il existe des contraintes :

  • Disponible uniquement pour les développements non commerciaux (impossible à utiliser en entreprise par exemple)
  • Publication mensuelle de statistiques sur Tweeter ou/et facebook

Compter le nombre de différences entre deux fichiers

By , 29/01/2012

La commande diff permet de visualiser la différence entre deux fichiers. Il est possible de l’utiliser avec la commande grep pour compter ce nombre de différences :

diff -C 0 fichier1 fichier2 | grep -c ‘^************$’

L’option -C 0 va insérer la ligne ************ entre chaque différence. grep -c va compteur le nombre de lignes séparatrices.

Bean Spring et java.util.List

By , 25/01/2012

Voici deux façons de déclarer une liste d’objet en tant que propriété d’un bean Spring :

  • A partir d’une liste de valeur
<bean name="name" class="Class">
      <property name="myList">
            <value>a</value>
            <value>b</value>
            <value>c</value>
      </property>
</bean>
  • A partir d’une valeur unique à décomposer en plusieurs valeurs (sorte de CSV)
<bean id="name" class="Class">
    <property name="myList">
        <bean class="org.springframework.util.CollectionUtils" factory-method="arrayToList">
            <constructor-arg type="java.lang.Object">
                <bean class="org.springframework.util.StringUtils" factory-method="tokenizeToStringArray">
                    <constructor-arg type="java.lang.String" value="a b c"/>
                    <constructor-arg type="java.lang.String" value=" "/>
                </bean>
            </constructor-arg>
        </bean>
    </property>
</bean>

Eclipse compiler & m2e

By , 24/01/2012

Récemment, j’ai appris que l’IDE eclipse n’utilisait pas le compilateur de la JDK (javac) pour transformer les fichiers Java en Class. C’est d’ailleurs pour cela qu’il est possible de développer et compiler du code sans avoir installer la JDK sur son ordinateur.

Par défaut, Maven utilise javac pour compiler les sources Java. Or, dans certains cas, le compilateur eclipse (JDT) accepte de compiler des classes là où javac sort en erreur. Par exemple, voici un code qui compile avec le JDT et pas avec javac :

package com.test;

public class GenericMethod {

    private Object value;

    @SuppressWarnings("unchecked")
    public <X> X getValue() {
        return (X) value;
        // le cast n'est obligatoire que pour que javac compile
        // avec le compilateur eclipse, il n'est pas nécessaire
    }

    public void setValue(Object value) {
        this.value = value;
    }
}

Voici la classe pour appeler la méthode :

package com.test;

public class GenericMethodTest {

    public static void main(String[] args) {
        GenericMethod method = new GenericMethod();
        method.setValue(3);

        int[] array = new int[] {1, 2};

        array[0] = method.getValue();
        System.out.println(array[0]);
    }
}

Avec javac, la ligne 11 de la classe GenericMethodTest provoque l’erreur suivante :

type parameters of <X>X cannot be determined;no unique maximal instance exists for type variable X with upper bounds int,java.lang.Object

Il peut donc être essentiel d’utiliser dans le processus de build un autre compilateur que javac. Il est possible de configurer le plugin maven-compiler-plugin afin d’utiliser un compilateur alternatif. Par exemple, pour utiliser le compilateur eclipse c’est très simple :

<project>
  [...]
  <build>
    [...]
    <plugins>
      [...]
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <compilerId>eclipse</compilerId>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>org.codehaus.plexus</groupId>
            <artifactId>plexus-compiler-eclipse</artifactId>
          </dependency>
        </dependencies>
      </plugin>
  [...]
</project>

Le build maven fonctionne parfaitement, en revanche l’utilisation du compilateur alternatif a des effets secondaires lorsqu’il est utilisé par le plugin eclipse m2e. La modification des fichiers .classpath et .project ne fonctionne plus correctement et cela provoque :

  • La nature java du projet n’est pas détectée,
  • Les dépendances ne sont plus récupérées,
  • Les répertoires sources (src/main/java, src/main/resources, etc.) ne sont plus référencés

Le problème du nouveau plugin m2e c’est qu’il ne reconnaît les projets maven en tant que projets java que lorsque le compilateur utilisé est javac. Pour configurer un projet eclipse utilisant le compilateur eclipse, il est donc nécessaire d’indiquer à m2e qu’il s’agit bien d’un projet Java :

<pluginManagement>
  <plugins>
    <plugin>
      <groupId>org.eclipse.m2e</groupId>
      <artifactId>lifecycle-mapping</artifactId>
      <version>1.0.0</version>
      <configuration>
        <lifecycleMappingMetadata>
          <pluginExecutions>
            <pluginExecution>
              <pluginExecutionFilter>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <versionRange>[2.0,)</versionRange>
                <goals>
                  <goal>compile</goal>
                  <goal>testCompile</goal>
                </goals>
              <parameters>
                <compilerId>eclipse</compilerId>
              </parameters>
             </pluginExecutionFilter>
             <action>
               <configurator>
                 <id>org.eclipse.m2e.jdt.javaConfigurator</id>
               </configurator>
             </action>
           </pluginExecution>
          </pluginExecutions>
        </lifecycleMappingMetadata>
      </configuration>
    </plugin>
  </plugins>
</pluginManagement>

Dès que m2e reconnaît le projet en tant que projet java, la fonction Update project configuration, configurera les répertoires sources et mettra à jour le classpath du projet.

Hibernate, JPA : DTYPE et requêtes JPQL (Java Persistence Query Language)

By , 22/12/2011

Avec JPA, il est possible de modéliser son modèle de données avec une notion d’héritage. Par exemple, ci-dessous, il existe deux entités Pomme et Poire qui héritent de l’entité Fruit :

Exemple d'une hérarchie d'entités JPA

La stratégie par défaut du lien d’héritage consiste à stocker dans une même table l’ensemble des données des objets et d’utiliser une colonne discriminante permettant de définir pour chaque ligne le type de la donnée (un Fruit, une Pomme ou une Poire).

Avec Hibernate, cette colonne s’appelle DTYPE. Par défaut, il n’y a aucune référence à cette colonne dans le code Java. Dans ces conditions, il existe plusieurs solutions pour utiliser cette colonne dans les requêtes JPQL :

  • Implicite : utiliser le type Fruit ou l’un des sous-types Pomme ou Poire pour filtrer sur le type du fruit :
from Fruit where ...

from Pomme where...

from Poire where ...
  • Explicite : ajouter une nouvelle variable d’instance neutre pour mapper la colonne DTYPE de la classe mère :
@Column(insertable = false, updatable = false)
private String dtype;
...
// Exemple d'un requête JPQL utilisant dtype pour ordonner les entités par type :
"from Fruit where ... order by dtype";

Windows shell : sc

By , 26/10/2011

Avec la ligne de commande du shell Windows, il est possible d’interagir sur les services d’une machine Windows locale ou distante. La commande est sc. La syntaxe à utiliser est la suivante :

sc [\\server] [command] [service_name] [Options]

Voici quelques exemples d’utilisation :

  • Créer un nouveau service : sc \\serveurDistant create NewService binpath=C:\…\monService.exe
  • Supprimer un service : sc \\serveurDistant delete ServiceName
  • Lister les services d’un ordinateur : sc \\serveurDistant query
  • Afficher un service en particulier : sc \\serveurDistant query ServiceName
  • Démarrer un service : sc \\serveurDistant start ServiceName
  • Arrêter un service : sc \\serveurDistant stop ServiceName

Pour un service en local il suffit de supprimer la référence au serveur distant. Pour plus d’information : http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/sc.mspx?mfr=true

Gnome : association des fichiers et des applications

By , 25/10/2011

En mettant à jour mon système Ubuntu j’ai remarqué qu’il modifiait le fichier qui décrit l’association par défaut des types de fichier avec les applications : /etc/gnome/defaults.list

Le format est assez simple lorsque l’on connaît le type du fichier à utiliser. Par exemple, pour associer les fichiers Excel avec l’application “Excel” de la suite bureautique libreoffice : application/msexcel=libreoffice-calc.desktop

Pour changer l’association par défaut pour un utilisateur uniquement, le fichier à modifier se trouve ici : ~/.local/share/applications/mimeapps.list

Eclipse et les proxies NTML

By , 23/10/2011

Mettre à jour  ou installer un plugin Eclipse c’est très simple lorsque l’IDE arrive à se connecter sur internet. Malheureusement, ce dernier n’est pas compatible avec tous les proxies. Par exemple, l’authentification sur les proxies NTML ne fonctionne pas. J’en ai fait les frais un certain temps. Je me suis d’ailleurs acharné sur le fichier eclipse.ini en suivant toujours les mêmes conseils (http://wiki.eclipse.org/ECF_Filetransfer_Support_for_NTLMv2_Proxies). Je suis même allez jusqu’à écouter le trafic du réseau pour vérifier que l’authentification posait bien problème.

La seule solution que j’ai trouvé c’est d’utiliser un proxy compatible avec l’authentification NTML entre mon IDE et le proxy à “contourner”. C’est cet intermédiaire qui va prendre en charge l’authentification à la place d’Eclipse.

CNTML me paraît être une bonne solution. Il s’installe sous windows en tant que service et il n’y a qu’un seul fichier de configuration pour lui indiquer le proxy pour aller sur internet.

OfficeFolders theme by Themocracy