Posts by morgan

Création d’une application pour ubuntu touch – jour 3

Création d’une application pour ubuntu touch – jour 3

Utilisation du toolkit de démonstration d’ubuntu touch Bonjour à tous. Après avoir passez les deux étapes préliminaires, nous allons tout doucement passez au cœurs du développement de l’application. Mais avant de commencer le développement à proprement parlé, je vous invite à vous familiarisé avec les conventions de design sous ubuntu touch en découvrant le kit de d’utilisation (toolkit) d’ubuntu ui (user interface) . Ubuntu ui – toolkit Lorsque vous avez installé le sdk ubuntu, vous avez aussi installé de petit exemples d’utilisations des composants ubuntu. Dans ce bref tutoriel, nous allons nous intéresser aux différents composants existant pour ubuntu touch.   Ouverture du toolkit Le projet est situé dans le répertoire « /usr/lib/ubuntu-ui-toolkit/examples/ » Dans Qt, faire CTRL + o pour ouvrir un nouveau projet, puis collez /usr/lib/ubuntu-ui-toolkit/examples/ dans la barre de location, comme dans l’exemple ci-dessous :   Ensuite, presser la touche entrer, vous devriez atterrir dans le répertoire choisi : Vous avez comme projet de démonstration une calculatrice et une application de conversion d’unité. Je vous laisserais avoir la curiosité d’aller regardé ces applications. Ici, l’application qui nous intéresseras seras la galerie de toolkit (ubuntu-ui-toolkit-gallery). Double clickez sur le répertoire « ubuntu-ui-toolkit-gallery » et choisissez le fichier « ubuntu-ui-toolkit-gallery.qmlproject » : Ensuite vous pouvez lancer l’application de démonstration des composants ubuntu en cliquant sur CTRL + R : Nous allons voir comment utilisez la navigation dans le prochain...

Read More

Ubuntu touch – Comment parser une API JSON dans un ListView

Ubuntu touch – Comment parser une API JSON dans un ListView

Bonjour à tous, Dans ce petit tutoriel rapide on va voir comment récupérer les données d’une API JSON et de les afficher dans un ListView. Voici un petit exemple du résultat final : Qt fournis déjà une petite feature l XMLListModel qui permet de paser aisément du XML. Malheureusement aucun component ne permet de le faire en JSON. Un peut partout sur le net on trouve des petites bidouilles pour le faire via du javascript. L’utilisation du javascript pure est simple et efficace. Le seul bémol c’est lorsqu’on commence à avoir une API un petit peut compliqué, le code deviens très vite désorganisé. Heureusement, la nature ayant horreur du vide. Un grand merci à  Romain Pokrzywka qui nous à préparer un petit component pour parser du JSON : JSONListModel. C’est beaucoup plus propre que d’utiliser du javascript pure. Il suffit de télécharger les fichier JSONListModel.qml et jsonpath.js. Insérer les dans votre projet et le tour est joué. Voici une petite démo d’utilisation: JavaScript import QtQuick 2.0 import Ubuntu.Components 1.1 import Ubuntu.Components.ListItems 1.0 as ListItem /*! \brief MainView with a Label and Button elements. */ MainView { // objectName for functional testing purposes (autopilot-qt5) objectName: "mainView" // Note! applicationName needs to match the "name" field of the click manifest applicationName: "com.ubuntu.developer.username.newapp" /* This property enables the application to change orientation when the device is rotated. The default is false. */ //automaticOrientation: true // Removes the old toolbar and enables new features of the new header. useDeprecatedToolbar: false width: units.gu(100) height: units.gu(75) Page { title: i18n.tr("Morgan Blog - demo") ListView { id: redditList anchors.fill: parent JSONListModel { id: redditFeed source: "http://www.reddit.com/r/Ubuntufr/hot.json" query: "$.data.children[*]" } model: redditFeed.model delegate: ListItem.Subtitled { Component.onCompleted: console.log(model.data.title+"\n"); iconSource: model.data.thumbnail Text { width: parent.width horizontalAlignment: Text.AlignLeft font.pixelSize: 12 color: "black" text: model.data.title } } } } } 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 import QtQuick 2.0import Ubuntu.Components 1.1import Ubuntu.Components.ListItems 1.0 as ListItem/*!    \brief MainView with a Label and Button elements.*/ MainView {    // objectName for functional testing purposes (autopilot-qt5)    objectName: "mainView"     // Note! applicationName needs to match the "name" field of the click manifest    applicationName: "com.ubuntu.developer.username.newapp"     /*     This property enables the application to change orientation     when the device is rotated. The default is false.    */    //automaticOrientation: true     // Removes the old toolbar and enables new features of the new header.    useDeprecatedToolbar: false     width: units.gu(100)    height: units.gu(75)     Page {        title: i18n.tr("Morgan Blog - demo")        ListView {            id: redditList             anchors.fill: parent            JSONListModel {                id: redditFeed                source: "http://www.reddit.com/r/Ubuntufr/hot.json"                query: "$.data.children[*]"            }            model: redditFeed.model            delegate: ListItem.Subtitled {                 Component.onCompleted: console.log(model.data.title+"\n");                iconSource: model.data.thumbnail                Text {                    width: parent.width                    horizontalAlignment: Text.AlignLeft                    font.pixelSize: 12                    color: "black"                    text: model.data.title                 }            }        }    }}    ...

Read More

Empêcher un fichier d’être modifié ou supprimé

Empêcher un fichier d’être modifié ou supprimé

Il est possible d’empêcher n’importe quel fichier d’être modifié, supprimé ou même renommé, et ce, par par n’importe quel utilisateur, root y compris. Comment faire ? Pour faire cela il faut utiliser la commande : chattr qui modifie les attributs d’un fichier. L’option qui nous intéresse est l’option « i » : « +i » pour activer la protection et « -i » pour désactiver cette protection . Le « i » signifie immuable (ou immutable en anglais) qui veux dire « ne peuvent pas être modifiés ». chattr peut aussi protéger des répertoires entiers. chattr doit être utilisé avec les privilèges root. Protéger un fichier : sudo chattr +i <fichier ou repertoire> Retirer la protection d’un fichier protéger sudo chattr -i <fichier ou repertoire> Si vous appliquez ces commandes sur un répertoire, vous pouvez utilisez l’option « -R » pour exécutez la commande récursivement. Exemples : créons un fichier quelconque : echo "Ceci est un fichier tres important." >important.txt avec les droits root, utiliser chattr : sudo chattr +i important.txt Est-ce que l’utilisateur root peut modifier le fichier ? Est-ce que je peux renommé le fichier avec les droits super utilisateurs ? Est-ce que je peux le supprimé ? Si vous voulez pouvoir effectuer l’une de ces actions il faudra donc enlever la protection du fichier avec l’attribut « -i » comme nous l’avons-vu précédemment : sudo chattr -i important.txt   traduction de l’article suivant :...

Read More

Comment mettre un background à un TextField

Comment mettre un background à un TextField

Bonjour à tous, aujourd’hui je vous fais découvrir une petite astuce, toute simple pour pouvoir mettre un background à un TextField. Ce petit trick ne casse pas des briques mais ça fais un bon petit aide mémoire. Il faut préférer l’utilisation d’un « TextField » plutôt qu’un « TextInput« , grâce à cela vous pourrez utiliser « TextFieldStyle » qui permet de personnalisé le TextField. JavaScript import QtQuick 2.0 import Ubuntu.Components 1.1 import QtQuick.Controls 1.1 import QtQuick.Controls.Styles 1.1 MainView { id: main width: 400 height: 300 Column { spacing: units.gu(2) anchors.centerIn: parent TextInput { text: "TextInput par defaut" cursorVisible: false width: main.width - units.gu(25) } TextField { placeholderText: "TextField par defaut" width: main.width - units.gu(25) } TextField { placeholderText: "TextField avec background" width: main.width - units.gu(25) text: "TextField avec background" style: TextFieldStyle { textColor: "black" background: Rectangle { radius: 5 color: "orange" implicitWidth: 100 implicitHeight: 24 border.color: "#333" border.width: 1 } } } } } 12345678910111213141516171819202122232425262728293031323334353637383940 import QtQuick 2.0import Ubuntu.Components 1.1import QtQuick.Controls 1.1import QtQuick.Controls.Styles 1.1 MainView {    id: main    width: 400    height: 300     Column {        spacing: units.gu(2)        anchors.centerIn: parent        TextInput {            text: "TextInput par defaut"            cursorVisible: false            width: main.width - units.gu(25)        }        TextField {            placeholderText: "TextField par defaut"            width: main.width - units.gu(25)        }        TextField {            placeholderText: "TextField avec background"            width: main.width - units.gu(25)            text: "TextField avec background"            style: TextFieldStyle {                textColor: "black"                background: Rectangle {                    radius: 5                    color: "orange"                    implicitWidth: 100                    implicitHeight: 24                    border.color: "#333"                    border.width: 1                }            }        }    }} Et voici le rendu :  ...

Read More

Comment utiliser le système de notification avec qml et unity

Comment utiliser le système de notification avec qml et unity

Comment utiliser le système de notification d’ubuntu (et d’autres distribution) depuis QML ? Autant que je le sache, il n’existe pas d’API QML pour accéder au système de notification. Pour éviter d’avoir à créer un plugin C++ pour avoir les notifications sur une application desktop, il est plus simple d’utiliser pyotherside et d’appeler un petit module python pour effectuer le travail. Pré-requis : Vous l’aurez compris, il suffit de s’assurer que pyotherside est installé. D’abbord, assuré vous d’avoir les bon ppa Shell sudo add-apt-repository ppa:ubuntu-sdk-team/ppa sudo add-apt-repository ppa:checkbox-dev/ppa sudo apt-get update 123 sudo add-apt-repository ppa:ubuntu-sdk-team/ppasudo add-apt-repository ppa:checkbox-dev/ppasudo apt-get update puis lancer l’installation Shell sudo ap-get install pyotherside 1 sudo ap-get install pyotherside Au boulot : Et voici la petite application QML : JavaScript import QtQuick 2.0 import Ubuntu.Components 1.1 import io.thp.pyotherside 1.2 /*! \brief MainView with a Label and Button elements. */ MainView { // objectName for functional testing purposes (autopilot-qt5) objectName: "mainView" // Note! applicationName needs to match the "name" field of the click manifest applicationName: "com.ubuntu.developer.username.notification" /* This property enables the application to change orientation when the device is rotated. The default is false. */ //automaticOrientation: true // Removes the old toolbar and enables new features of the new header. useDeprecatedToolbar: false width: units.gu(100) height: units.gu(75) Page { title: i18n.tr("Simple") Column { spacing: units.gu(1) anchors { margins: units.gu(2) fill: parent } Label { id: label objectName: "label" text: i18n.tr("Hello..") } Button { objectName: "button" width: parent.width text: i18n.tr("Tap me!") onClicked: { //label.text = i18n.tr("..world!") py.call('notify.pressme', [], function() {}); } } Python { id: py Component.onCompleted: { addImportPath(Qt.resolvedUrl('.')); importModule('notify', function() {}); } } } } } 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 import QtQuick 2.0import Ubuntu.Components 1.1import io.thp.pyotherside 1.2/*!    \brief MainView with a Label and Button elements.*/ MainView {    // objectName for functional testing purposes (autopilot-qt5)    objectName: "mainView"     // Note! applicationName needs to match the "name" field of the click manifest    applicationName: "com.ubuntu.developer.username.notification"     /*     This property enables the application to change orientation     when the device is rotated. The default is false.    */    //automaticOrientation: true     // Removes the old toolbar and enables new features of the new header.    useDeprecatedToolbar: false     width: units.gu(100)    height: units.gu(75)     Page {        title: i18n.tr("Simple")         Column {            spacing: units.gu(1)            anchors {                margins: units.gu(2)                fill: parent            }             Label {                id: label                objectName: "label"                 text: i18n.tr("Hello..")            }             Button {                objectName: "button"                width: parent.width                 text: i18n.tr("Tap me!")                 onClicked: {                    //label.text = i18n.tr("..world!")                      py.call('notify.pressme', [], function() {});                }            }            Python {                  id: py                  Component.onCompleted: {                      addImportPath(Qt.resolvedUrl('.'));                      importModule('notify', function() {});                  }              }        }    }} ensuite créer un fichier nommé notify.py dans le même répertoire que le fichier qml Python #!/usr/bin/env python3 import subprocess def pressme(): subprocess.call(["notify-send", "hello morgan", "http://morgan-durand.com"]) 123456 #!/usr/bin/env python3 import subprocess def pressme():    subprocess.call(["notify-send", "hello morgan", "http://morgan-durand.com"]) Et voila le...

Read More

Comment utiliser « cat » ou « less » sur un fichier libreoffice .odt ?

Comment utiliser « cat » ou « less » sur un fichier libreoffice .odt ?

Bonjour à tous, aujourd’hui je vais vous présenter un petit logiciel bien sympas, il va vous permettre de lire les fichiers libreoffice en console. C’est une petite astuce qui s’avérer très utile lorsqu’on veux voir le contenue d’un fichier .odt en mode console (pour une application avec python / php / whatever). La soltuion est d’utiliser « odt2txt ». Cette ligne de commande est fournis dans deux packages différent. Le premier est nomé odt2txt que vous pouvez installé : sudo apt-get install odt2txt  et par le package unoconv (qui offre un plus large éventails de choix pour les formats libreoffice), que vous pouvez installé comme ceci : sudo apt-get install unoconv Si vous avez les deux, vous pouvez choisir lequel utiliser en utilisant le système de commande alternartive : sudo update-alternatives --config odt2txt Si vous utilisez « odt2txt » fournis par le paquet « odt2txt », vous avez juste à utiliser : odt2txt file.odt Si vous utilisez celui fournir par le package : « unoconv« , vous devez l’utiliser comme ceci : odt2txt --stdout file.odt Utiliser le pipe pour utiliser less : odt2txt file.odt | less NB : si vous n’utiliser pas l’option --stdout, unoconv va écrire le résultat dans un fichier appelé « file.txt ».  ...

Read More

Comment parser une chaine JSON en ligne de commande

Comment parser une chaine JSON en ligne de commande

Pour pouvoir parser du JSON avec sont terminal, il vous faudra un petit logiciel bien sympa (qui n’est pas présent dans les dépôts), j’ai nommé : jq Shell wget http://stedolan.github.io/jq/download/linux32/jq (32-bit) wget http://stedolan.github.io/jq/download/linux64/jq (64-bit) chmod +x ./jq sudo cp jq /usr/bin 1234 wget http://stedolan.github.io/jq/download/linux32/jq (32-bit)wget http://stedolan.github.io/jq/download/linux64/jq (64-bit)chmod +x ./jqsudo cp jq /usr/bin Les fichiers binaires de jq sont aussi disponible pour windows et OS X. Le code source est disponible sous licence MIT. Voici une liste d’exemple pour illustré le fonctionnement de jq : $ cat json.txt { "name": "Google", "location": { "street": "1600 Amphitheatre Parkway", "city": "Mountain View", "state": "California", "country": "US" }, "employees": [ { "name": "Michael", "division": "Engineering" }, { "name": "Laura", "division": "HR" }, { "name": "Elise", "division": "Marketing" } ] } 12345678910111213141516171819202122232425 {        "name": "Google",        "location":                {                        "street": "1600 Amphitheatre Parkway",                        "city": "Mountain View",                        "state": "California",                        "country": "US"                },        "employees":                [                        {                                "name": "Michael",                                "division": "Engineering"                        },                        {                                "name": "Laura",                                "division": "HR"                        },                        {                                "name": "Elise",                                "division": "Marketing"                        }                ]} Pour parser l’objet  : cat json.txt | jq '.name' retour : "Google" Pour récupérer un attribut de l’objet : cat json.txt | jq '.location.city' retour Shell "Mountain View" 1 "Mountain View" Pour parser une array :   cat json.txt | jq '.employees[0].name' retour : Shell "Michael" 1 "Michael" Pour extraire des champs spécifique : cat json.txt | jq '.location | {street, city}'   Shell { "city": "Mountain View", "street": "1600 Amphitheatre Parkway" } 1234 {  "city": "Mountain View",  "street": "1600 Amphitheatre Parkway"}     Voir l’article...

Read More

Comment sniffer le trafic en ligne de commande avec httpry

Comment sniffer le trafic en ligne de commande avec httpry

Bonjour à tous,   Aujourd’hui je vous présente un petit outil bien sympa qui permet de sniffer le trafic http. Ce petit logiciel peut-être bien utiles pour plusieurs applications : Tester un webservice REST Vérifier que sa machine n’est pas infestée par un malware Vérifier que les utilisateurs ne téléchargent pas de fichier dangereux Analyser le trafic et en faire des statistiques etc …   Cette outil magique s’appel HTTPRY.   Installation du logiciel : Sur ubuntu (14.04 et supérieur) Il suffit de passer par les dépôts officiel sudo apt-get install httpry Sur Fedora, CentOS, RHEL Le logiciel est aussi dans les dépôts sudo yum install httpry Sur debian httpry n’est pas présent dans les dépôts, vous devez le compiler à la main : Shell $ sudo apt-get install gcc make git libpcap0.8-dev $ git clone https://github.com/jbittel/httpry.git $ cd httpry $ make $ sudo make install 12345 $ sudo apt-get install gcc make git libpcap0.8-dev$ git clone https://github.com/jbittel/httpry.git$ cd httpry$ make$ sudo make install Utilisation de httpry  Utilisation basique sudo httpry -i <network-interface>   Dans la plupart des cas on va vouloir sauvegarder des paquets pour pouvoir les « rejoué » plus-tard. Pour cela vous avez l’option ‘-b’ ou ‘-o’. L’option ‘-b’ permet de sauvegarder les paquets HTTP dans un fichier binaire qui pourras être « rejoué » plus tard. L’option ‘-o’ permet de sauvegarder l’output avec l’option « human readable » dans un fichier texte.   Pour sauvegarder les paquets dans un fichier binaire : sudo httpry -i wlan0 -b output.dump Pour pouvoir rejouer des paquets sauvegarder : httpry -r output.dump avec l’option ‘-r’ vous n’avez pas besoin de privilège root. Pour sauvegarder les paquets en dans un fichier texte : sudo httpry -i wlan0 -o output.txt   Utilisation avancé de httpry Si vous voulez filtrer une requete HTTP par méthode (comme GET, POST, PUT, HEAD, CONNECT, etc…) il faut utiliser l’option ‘-m’ : sudo httpry -i wlan0 -m get,head   Si vous avez installer httpry depuis les sources GIT, vous avez une petite collection de script perl qui permettent d’analyser les données fournie par httpry. Voici une petite liste (non exhaustive)  des possibilités fournies par ces script : hostnames : Afficher une liste contenant tout les host names (sans duplications) avec un compteur. find_proxies : Detecter les webproxies. search_terms : Cherche et compte les motifs entrés dans le service de recherche content_analysis : Recherche les urls qui contiennent un certain mot clé. xml_output...

Read More

Avoir deux claviers dans deux langues différentes

Avoir deux claviers dans deux langues différentes

Comment avoir deux claviers dans deux langues différentes ?   Vous avez deux claviers dans des langues différentes ? Par exemple un querty et un azerty sans avoir à spécifier à chaque fois. 1. Il vous suffit d’utiliser xinput pour lister vos clavier : Shell xinput -list | grep key 1 xinput -list | grep key Exemple :   Shell $ xinput -list | grep key ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ Power Button id=6 [slave keyboard (3)] ↳ Video Bus id=7 [slave keyboard (3)] ↳ Power Button id=8 [slave keyboard (3)] ↳ Sleep Button id=9 [slave keyboard (3)] ↳ 2.4GHz 2way RF Receiver id=10 [slave keyboard (3)] ↳ HP Webcam id=12 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=13 [slave keyboard (3)] ↳ HP WMI hotkeys id=15 [slave keyboard (3)] ↳ USB Keyboard id=16 [slave keyboard (3)] ↳ USB Keyboard id=17 [slave keyboard (3)] 12345678910111213 $ xinput -list | grep key⎣ Virtual core keyboard                         id=3    [master keyboard (2)]    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]    ↳ Power Button                              id=6    [slave  keyboard (3)]    ↳ Video Bus                                 id=7    [slave  keyboard (3)]    ↳ Power Button                              id=8    [slave  keyboard (3)]    ↳ Sleep Button                              id=9    [slave  keyboard (3)]    ↳ 2.4GHz 2way RF Receiver                   id=10   [slave  keyboard (3)]    ↳ HP Webcam                                 id=12   [slave  keyboard (3)]    ↳ AT Translated Set 2 keyboard              id=13   [slave  keyboard (3)]    ↳ HP WMI hotkeys                            id=15   [slave  keyboard (3)]    ↳   USB Keyboard                            id=16   [slave  keyboard (3)]    ↳   USB Keyboard                            id=17   [slave  keyboard (3)]   Puis utilisez setxkbmap pour setter une langue par defaut à ce clavier Shell setxkbmap -device <key_ID> -layout <layout_name> 1 setxkbmap -device <key_ID> -layout <layout_name> Exemple : setxkbmap -device 3 -layout fr #clavier principal en françaist setxkbmap -device 10 -layout us #Le clavier avec id=10 en anglais (US) setxkbmap -device 16 -layout ru #Le clavier avec id=16 en russe 123 setxkbmap -device 3 -layout fr    #clavier principal en françaistsetxkbmap -device 10 -layout us   #Le clavier avec id=10  en anglais (US)setxkbmap -device 16 -layout ru   #Le clavier avec id=16  en russe  ...

Read More

Configurer apt-get pour un nettoyage automatique après chaque installation

Configurer apt-get pour un nettoyage automatique après chaque installation

Comment configurer apt-get pour un nettoyage automatique après chaque installation   Enfaîte rien de très compliquer, il suffit de tapez cette ligne dans votre terminal : Shell sudo sh -c "echo 'DSELECT::Clean "always";' >> /etc/apt/apt.conf.d/99AutomaticClean" 1 sudo sh -c "echo 'DSELECT::Clean "always";' >> /etc/apt/apt.conf.d/99AutomaticClean" La commande s’exécutera automatiquement après chaque apt-get upgrade. Plus d’information :...

Read More