Ubuntu 20.04.1 : wifi instable

By , 20/09/2020

Lorsque le wifi est instable que la connexion ne fonctionne quelques secondes pour se perdre juste après et que la seule façon de retrouver une connexion est de redémarrer le module iwlwifi ou le service network. Si vous êtes en dual boot, il est possible que l’option Windows 10 de démarrage rapide en soit la cause. Essayer donc de désactiver l’option de démarrage rapide (fast startup).

Source : https://wireless.wiki.kernel.org/en/users/drivers/iwlwifi#about_dual-boot_with_windows_and_fast-boot_enabled

Une autre cause potentiel du problème : la gestion de l’énergie : https://forum.ubuntu-fr.org/viewtopic.php?id=2063349

Lister les streams d’un flux video

By , 18/09/2020

Pour lister les streams d'un fichier vidéo il faut utiliser la commande ffprobe :

ffprobe -i [filename]

Ubuntu 16.04 et WMP54G

By , 06/06/2017

Depuis la montée de version du dernier ubuntu j’avais des problèmes avec ma carte réseau Linksys WMP54G. Impossible de la faire fonctionner malgré la bonne détection des réseaux WIFI aux alentours.

Connaître le modèle de sa carte

Il existe plusieurs architectures de carte WMP54G. La mienne est une RT2561/RT61 :

xxxx@xxxx-desktop:~$ lspci | grep -i network
04:06.0 Network controller: Ralink corp. RT2561/RT61 802.11g PCI

J’ai compris que le problème venait de la gestion de l’optimisation de l’alimentation électrique : NetworkManager WiFi Power Saving.

Vérifier du paramètre d’alimentation électrique

Il existe 4 niveaux de gestion :

  • NM_SETTING_WIRELESS_POWERSAVE_DEFAULT (0): use the default value
  • NM_SETTING_WIRELESS_POWERSAVE_IGNORE (1): don't touch existing setting
  • NM_SETTING_WIRELESS_POWERSAVE_DISABLE (2): disable powersave
  • NM_SETTING_WIRELESS_POWERSAVE_ENABLE (3): enable powersave

Mon paramètre était positionné sur 3 par défaut. Je l’ai mis sur 0 et ma carte s’est de nouveau mise à fonctionner :

yan@yan-desktop:~$ cat /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf
[connection]
wifi.powersave = O

JSF2.2 – @Inject dans un FacesConverter

By , 09/09/2014

Si vous avez déjà développé un FacesConverter, vous avez certainement compris qu’il n’est pas possible d’utiliser l’injection CDI dans ce type d’objet. Je vais donc transformer le simple converter suivant pour permettre l’injection :

@FacesConverter(value="monConverter")
public class MonConverter implements Converter {

   @Override
   public Object getAsObject(FacesContext context, UIComponent component, String value) {
      // création d'un objet en fonction de la valeur à convertir
      return new MonObjet(value);
   }

   @Override
   public String getAsString(FacesContext context, UIComponent component, Object value) {
      // Exemple de version de l'objet en String
      return ((MonObjet) value).getValue();
   }

}

Tout d’abord, pour pouvoir injecter un objet et rendre le converter visible dans la vue XHTML, il faut remplacer l’annotation @FacesConverter par @Named. Puis Injecter l’objet souhaité :

//@FacesConverter(value="monConverter")
@Named
public class MonConverter implements Converter {

   // Injection possible dans ce cas
   @Inject private EntityManager em;

   @Override
   public Object getAsObject(FacesContext context, UIComponent component, String value) {
      // création d'un objet en fonction de la valeur à convertir
      return new MonObject(value);
   }

   @Override
   public String getAsString(FacesContext context, UIComponent component, Object value) {
      // Exemple de version de l'objet en String
      return ((MonObjet) value).getValue();
   }

}

Ensuite, une petite transformation de la vue est nécessaire pour faire appel à ce nouveau converter. On n’utilise plus l’identifiant du converter mais sa référence directement  :

<!-- Avant avec l'ID-->
<h:input... converter="monConverter" />
ou
<f:converter converterId="monConverter" />

<!-- Après avec l'objet directement -->
<h:input... converter="#{monConverter}" />
ou
<f:converter binding="#{monConverter}" />

Chrome – supprimer les onglets la barre des boutons et d’adresse

By , 08/09/2014

Il est possible de démarrer le navigateur Chrome (ou Chromium) en supprimant les éléments de menus propres au navigateur comme :

  • La barre d’adresse
  • La barre des boutons
  • Les onglets

Pour cela, il faut utiliser le switch --app. Par exemple la commande : chromium-browser --app=http://google.com ou chrome --app=http://google.com provoque l’ouverture de la fenêtre suivante :

Grâce à cela, il est possible de démarrer des applications web comme s’il s’agissait d’applications client lourd.

Ubuntu – numéro de version de la distribution

By , 04/09/2014

Un commande permet de connaître le numéro de version exact de sa distribution ubuntu : lsb_release -a.

terminal.png

JSF2.2 – Implémenter un logout

By , 05/08/2014

Pour implémenter une fonctionnalité de logout (déconnexion) à partir d’une interface JSF, il faut invalider la session en cours. Pour cela, un bouton va appeler une action d’un @Model. C’est-à-dire, coté JSF :

<h:form>
    <h:commandLink value="Logout" action="#{logoutBean.logout}" />
</h:form>

Coté Java, si on considère que le point d’entrée de l’application est /index.html :

public String logout() {
    ((HttpSession) FacesContext.getCurrentInstance().getExternalContext()
         .getSession(true)).invalidate();
     return "/index.html?faces-redirect=true";
}

Remarque, pour procéder à une redirection avec JSF2.2, il faut ajouter ce paramètre à l’URL choisie : ...?faces-redirect=true

Arquillian – Graphene et RichFaces

By , 29/07/2014

Richfaces 4.5.0.Alpha3 est sortie ! Avec cette version, une nouveauté, les fragments de page (pages-fragments). Il s’agit de classes qui permettent de développer des tests unitaires automatisés sur les applications utilisant RichFaces.

La configuration Maven pour utiliser ces fragements est la suivante :

<dependency>
    <groupId>org.richfaces</groupId>
    <artifactId>richfaces-page-fragments</artifactId>
    <version>4.5.0.Alpha3</version>
    <scope>test</scope>
</dependency>

Les sources sont disponibles sur GitHub : https://github.com/richfaces/richfaces/tree/master/build/page-fragments.

Pour plus d’informations sur Arquillian : http://slides.com/vineetreynolds/the-arquillian-universe.

Pour plus d’informations sur les tests d’application JSF : http://www.bleathem.ca/talks/2012-JavaOne/testing-jsf.html.

JBoss – Tracer les requêtes HTTP

By , 22/07/2014

En travaillant sur un test Graphene 2, je me suis rendu compte qu’il pouvait être très intéressant de tracer le contenu des requêtes HTTP attaquant une application web. Lorsque cette application est déployée sur un serveur JBoss, il suffit d’ajouter une ligne dans le fichier jboss-web.xml :

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
   <valve>
      <class-name>org.apache.catalina.valves.RequestDumperValve</class-name>
   </valve>
</jboss-web>

Remarque, je n’ai pas essayé sur WildFly, mais la technique devrait fonctionner de la même façon. Ce fichier doit être dans le répertoire WEB-INF de l’archive web.

JSF2.2 – Inclure une librairie Javascript

By , 16/07/2014

Il existe un composant standard pour inclure une librairie Javascript : h:outputScript. Pour que JSF trouve cette librairie, il faut quelle soit présente dans un répertoire de type resources :

  • Soit à la racine du contexte web : src/main/webapp/resources pour un projet Maven
  • Soit directement encapsulée dans un jar : META-INF/resources

A mon sens, les deux attributs les plus importants de ce composant sont :

  • library : Le chemin du répertoire où se trouve le fichier Javascript en prenant en compte le répertoire resources comme référence
  • name : Le nom du fichier Javascript

Par exemple pour inclure le fichier Javascript se trouvant dans src/main/webapp/resources/ma/librairie/lib.js ou bien dans META-INF/resources/ma/librairie/lib.js :

<h:outputScript library="ma/librairie" name="lib.js" />

Pour tester sur des cas réels, vous pouvez récupérer une des nombreuses librairies Javascript packagées dans un jar disponibles à cette adresse : http://www.webjars.org/. Pour vous facilité la tâche ces librairies sont disponibles sur Maven. Par exemple pour ajouter aux dépendances de votre projet la librairie amchart :

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>amcharts</artifactId>
    <version>3.10.0</version>
</dependency>

OfficeFolders theme by Themocracy