Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1576 Le 19/07/2013, à 15:09

The Uploader

Re : /* Topic des codeurs [8] */

Rolinh a écrit :

Un parmi vous aurait-il une idée pour une super optimisation? Ça peut aussi passer par du multiprocessing.

En dehors d'éviter une conversion YUV->RBG (ce qui risque d'être difficile hmm ), tu peux peut-être faire une partie de l'image dans un process ? (autant de process que de cores / CPU).

Comme peut le faire un encodeur vidéo pour l'encodage multithreadé : on prend une partie de l'image (slice), et on la fait encoder par un core (on perd un tout petit peu en qualité en théorie dans le cas d'un encodage, mais bon c'est pas forcément visible et ça vaut mieux que de se traîner à 5 FPS).

Ou, vu qu'il s'agit de changer de colorspace et non de compresser avec perte, tu peux faire plusieurs images à la fois, si c'est plus simple du point de vue du code.

Dernière modification par The Uploader (Le 19/07/2013, à 15:46)


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#1577 Le 19/07/2013, à 15:20

grim7reaper

Re : /* Topic des codeurs [8] */

@Rolinh : J’aurais sûrement pas le temps de regarder le code comme il faut avant 2-3 jours minimum (retour en France, passage à Arch’, etc), mais je vois déjà deux trucs potentiellement améliorable :
- t’es obligé de jouer avec fseek  pour chaque pixel ? Pas moyen de charger la frame en mémoire pour bosser dessus ?
- comme tu bosses sur des matrices, et que tu appliques le même traitement à chaque point, il y a peut-être moyen de booster le truc via numpy (genre avoir une auto-vectorisation (ou autre trucs du genre) si numpy supporte (sinon jette un œil aux alternatives, genre pythran))

Mais comme le dit The Uploader, le mieux serait d’éviter la conversion si possible.

Édit: à voir aussi si mplayer ou mencoder peut pas faire la décomposition en frame en png à partir de la vidéo puis appliquer ton script.

Dernière modification par grim7reaper (Le 19/07/2013, à 15:58)

Hors ligne

#1578 Le 19/07/2013, à 16:04

The Uploader

Re : /* Topic des codeurs [8] */

Ah exact. ffmpeg serait aussi un bon candidat.

ffmpeg -r <FPS> -i <inputfile> -f image2 %08d.png

Dernière modification par The Uploader (Le 19/07/2013, à 16:08)


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#1579 Le 19/07/2013, à 17:27

Rolinh

Re : /* Topic des codeurs [8] */

@The Uploader: j'avais pensé à paralléliser la conversion par frame aussi. Bon au mieux, ça me permettrait d'aller 4X plus vite si c'est bien fait avec mes 4 coeurs (et donc 6s par frame, ce qui réduit déjà considérablement). Ça pourrait bien être ce que je fais au final.

@grim7reaper: Oui, il y a sûrement moyen de charger la frame une fois (enfin, deux frames à la fois vu que je traite deux vidéos en parallèle) et de travailler directement sur un objet binaire. Dans tous les cas, charger une vidéo complète est inenvisageable (à 2G la vidéo de 15s...). Pour le coup de l'optimisation en travaillant sur une matrice j'y ai pensé mais j'ai pas vraiment creusé. Par contre, décomposer ma vidéo en png, j'y ai aussi pensé mais ça fait vite un peu bordélique (une passe pour générer les 2*500 images + une passe pour calculer le SSIM en chargeant les images 2 à 2...).

Hors ligne

#1580 Le 20/07/2013, à 00:08

tshirtman

Re : /* Topic des codeurs [8] */

Dans le genre optimisation pas trop dur, tu pourrais cythonizer tes methodes de conversion rgb, en ajoutant des types (int) aux arguments ça ira beaucoup plus vite qu'en python pur, de plus, tu peut faire du nogil sur ces methodes, et donc avoir une meilleur parallelisation…

Hors ligne

#1581 Le 20/07/2013, à 02:02

grim7reaper

Re : /* Topic des codeurs [8] */

Rolinh a écrit :

@grim7reaper: Oui, il y a sûrement moyen de charger la frame une fois (enfin, deux frames à la fois vu que je traite deux vidéos en parallèle) et de travailler directement sur un objet binaire. Dans tous les cas, charger une vidéo complète est inenvisageable (à 2G la vidéo de 15s...).

Oui, je parlais bien de charger frames par frames, pas les vidéos complètes.

Rolinh a écrit :

Pour le coup de l'optimisation en travaillant sur une matrice j'y ai pensé mais j'ai pas vraiment creusé. Par contre, décomposer ma vidéo en png, j'y ai aussi pensé mais ça fait vite un peu bordélique (une passe pour générer les 2*500 images + une passe pour calculer le SSIM en chargeant les images 2 à 2...).

Bah il n’y a qu’une passe, pas deux.
Un coup de ffmpeg, puis tu appliques le script sur les images générées. Ça ne fait qu’une passe, non ?

Sinon, en jetant un coup d’oeil rapide au code, j’ai l’impression que la première chose qu’il fait c’est de convertir les images RGB en niveaux de gris,
puis il bosse sur ça.
Du coup, ça doit être possible de changer le code de la fonction _to_grayscale pour faire une conversion YUV->grayscale au lieu de RGB->grayscale, et comme ça tu pourrais lui donner directement du YUV à manger (plus de conversion, enfin une de moins), non ?


Édit : tiens, je viens de penser à un truc.
Tu as regardé du côté d’OpenCV (qui a un binding Python), c’est plus orienté vidéo que PIL, je ne serais pas surpris qu’il puisse jouer avec le YUV de base (ou au minimum avoir des fonctions de conversions), voire permettre de calculer ton SSIM plus facilement.
À voir je pense.

Dernière modification par grim7reaper (Le 20/07/2013, à 05:11)

Hors ligne

#1582 Le 20/07/2013, à 06:57

Rolinh

Re : /* Topic des codeurs [8] */

Merci à vous deux smile

T'as bien fait de parler d'opencv grim: après une brève recherche, je suis tombé sur VQMT, soft utilisant opencv et qui calcule le PSNR, SSIM, MS-SSIM, VIFp, PSNR-HVS et PSNR-HVS-M. En plus il est distribué par... ma future école tongue Bon j'avoue que je ne connaissais même pas le VIFp mais dans tous les cas, une métrique de plus ne va pas me déranger. Ça à l'air d'avoir été fait sous Windows avec VisualStudio mais je dois pouvoir facilement écrire un Makefile (CMake) et adapter si nécessaire: c'est pas beaucoup de code.

-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C++                              8            140            363            538
C/C++ Header                     7             53            266            119
-------------------------------------------------------------------------------
SUM:                            15            193            629            657
-------------------------------------------------------------------------------

Hors ligne

#1583 Le 22/07/2013, à 17:17

Rolinh

Re : /* Topic des codeurs [8] */

J'ai voulu me remettre sur mes tests unitaires en C pour libgwavi et je suis tombé sur SPUT. Ça a l'air simple (un fichier header à include qui contient des macros..) en comparaison à CUNIT (qui commençait à me prendre la tête). Quelqu'un a déjà testé?
Je trouve que ça a l'air vraiment intéressant. Je vous en dirais un peu plus plus tard, une fois que j'aurais testé.

Hors ligne

#1584 Le 23/07/2013, à 08:31

Shanx

Re : /* Topic des codeurs [8] */

Salut

j’ai du faire un data logger en python. Pour l’instant, j’ai fait ça avec deux programmes : le premier est un serveur, qui écoute un port. Sur celui-ci il reçoit des données du type date|type|zone|valeur (par exemple 2013-07-23 09|temperature|cuisine|23.5). Ensuite il les range dans une bdd sqlite3, avec une table par type de valeurs (température, consommation, etc.). Tous les jours à minuit, il prend les valeurs de la journée écoulée et les copie dans une autre table en ne gardant que les valeurs minimales, maximales et moyennes de la journée.
Ensuite un second programme écoute un autre port, sur lequel il va recevoir des demandes d’affichage (par exemple temperature|cuisine|7, ce qui correspond à un graphique de la température dans la cuisine pour les 7 derniers jours). Un serveur flask se charge de créer une url accessible sur le réseau local où l’utilisateur peut trouver le graphique demandé.
Jusque là, tout marche bien (bien que mon code soit probablement très moche. Si même moi j’en ai conscience, c’est qu’il doit faire peur à voir…). Cependant, j’ai quelques soucis et je ne sais pas comment les régler :
  - actuellement, le serveur attend de recevoir une trame à minuit (donc avec une date du type 2013-07-23 00) pour ranger les valeurs dans la seconde table. Mais si, pour une raison X ou Y, cette trame n’arrive pas, il ne rangera rien. Comment devenir indépendant de la réception ou non de la trame ?
  - d’une manière plus générale, je n’ai aucun contrôle pour savoir si j’ai bien reçu ou non toutes les trames d’une journée. Le problème, c’est que pour l’affichage de certains graphiques (graphiques de comparaison des valeurs entre deux durées), s’il manque une valeur ça fait planter matplotlib (c’est à dire que si, par exemple, je veux comparer les températures entre les deux derniers jours, s’il n’y a que 23 valeurs pour un des jours et 24 pour l’autre ça ne marche pas). Comment vérifier que les valeurs arrivent et, au bout d’un certain temps d’échec, envoyer un mail à un administrateur pour lui dire qu’il y a probablement un problème quelque part ?
  - pour la gestion des dates, je fais ça de manière pas très propre, à grand coup de conversion en datetime (avec datetime.strftime()) et de reconversion en texte (avec datetime.strptime()). Bon, au delà du manque de praticité de cette méthode, j’ai un problème : on vient de me demander de faire en sorte que les données puissent être reçues toutes les 10 minutes (donc avec des dates du type 2013-07-23 09:20) ou toutes les heures. Du coup, vu la manière dont j’ai procédé, le plus simple semble être de regarder le nombre de caractère constituant le champ date, et faire de if … elif selon les cas. C’est vraiment, mais alors vraiment pas propre je trouve. Est-ce qu’il y a une manière de faire ça mieux ?
 
Voilà, j’espère que l’un d’entre vous pourra m’aider. J’ai volontairement pas donné les codes, parce que j’en ai un peu honte ^^’ Si vous en avez besoin (ou si vous vous sentez de me donner des cours particuliers pour corriger ça, c’est encore mieux), dites le moi et je fais des pastes.


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#1585 Le 23/07/2013, à 09:45

grim7reaper

Re : /* Topic des codeurs [8] */

Pour le point 1, je passerai bien par cron qui lance un script Python tous les jours à minuit. Script qui s’occuperai du déplacement des données d’une table à l’autre.
Après, si tu veux une solution full-python ça devient un peu plus chiant. tu devrais t’en sortir avec les timers.
Du genre:
- démarrage de ton programme, tu récupères le temps courant H
- tu calcules le nombres de secondes restantes, X, avant minuit suivant à partir de maintenant (H)
- tu armes un timer T qui va appeler une fonction F avec un delai de X secondes

Dans la fonction F:
- tu fais ce que tu as à faire (déplacement des données dans une autres tables)
- tu récupères le temps courant H
- tu calcules le nombres de secondes restantes, X, avant le minuit suivant à partir de maintenant (H)
- tu ré-armes un timer T qui va appeler cette fonction (la fonction F) avec un delai de X secondes

Ça devrait fonctionner, mais c’est plus chiant à gérer. Et y’a peut-être des cas à la con que j’ai oublié…


Pour le point 2, tu pourrais vérifier, au moment de bouger les données, si tu as bien reçu 24 trames dans la journée (si trame horaires, mais le principe reste le même si tu les reçois toutes les 10 minutes). Si tu n’as pas le bon nombre, alors tu avertis l’admin.
Après, si tu veux une détection à la trame près, bah ça dépend :
- est-ce que c‘est le serveur qui doit vérifier à chaque heure s’il à bien reçu quelque chose, et si non il essaye de contacter le client ?
- est-ce que c’est le client qui doit s’assurer que le serveur reçoit bien ce qu‘il envoie ? Auquel cas, il faudrat sûrement instaurer un mécanisme à base d’acquittement.
- peut-être un mix‘ des deux propositions précédentes ?
En tout ça ça va demander un petit peu plus de boulot.


Pour le point 3, au pire tu doit juste changer le format de ta trame. Et les données horaires seront donc YYYY-MM-DD HH:00.
Ou j’ai raté un truc ?

Hors ligne

#1586 Le 24/07/2013, à 08:19

Shanx

Re : /* Topic des codeurs [8] */

Merci beaucoup pour ta réponse. smile

En effet, le cron me semble le plus pratique, même si ça va m’obliger à avoir un programme de plus.

La détection à la trame près me semble délicate à mettre en œuvre, en effet. Comme j’ai réussi (en trichant) à éviter les bugs gênant quand il manque des données, je vais simplement mettre une vérification sur le nombre de trames reçues dans la journée. S’il est en dessous d’un seuil, je vais voir si je peux pas faire envoyer un mail.

Pour le point 3, non, tu n’as rien raté. C’est moi qui ai raté la solution la plus évidente. >.< Merci.

Dernière modification par Shanx (Le 24/07/2013, à 08:20)


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#1587 Le 24/07/2013, à 22:54

Elzen

Re : /* Topic des codeurs [8] */

Personne pour Wesnoth ? hmm

Sinon, il y en a qui vont être contents : j'm'ennuyais dans le train, alors j'ai commencé à reprendre le code de Touhy pour avoir un coding style un peu plus « pythonnesque » (indentation avec des espaces pour faire plaisir à PEP8 (j'préfère toujours les tabs, mais je dois reconnaître que quatre espaces, par rapport à une tab de huit, ça diminue drastiquement le nombre de de débordement de lignes), suppression des parenthèses surnuméraires autour des conditions, et remplacement des « range(0, X, 1) » par des « range(X) »). 'M'en reste une bonne partie à faire, mais ça devrait être bon au prochain commit.

(@The Uploader : bien eu ton mail, merci, j'm'occupe de récupérer ça demain)

Hors ligne

#1588 Le 25/07/2013, à 07:19

Shanx

Re : /* Topic des codeurs [8] */

Il est dispo quelque part le code de Touhy ?


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#1589 Le 25/07/2013, à 08:22

grim7reaper

Re : /* Topic des codeurs [8] */

Oui (dernier paragraphe, lien git)

Hors ligne

#1590 Le 25/07/2013, à 12:43

Elzen

Re : /* Topic des codeurs [8] */

Yep, et le changelog est (avec un flux RSS wink)

Dernière modification par Elzen (Le 25/07/2013, à 12:43)

Hors ligne

#1591 Le 25/07/2013, à 15:10

The Uploader

Re : /* Topic des codeurs [8] */

Tiens pour étoffer ma collection de PKGBUILDs faudrait que je me remette à le packager pour l'AUR.

Et d'ailleurs je pense laisser tomber nvidia-96xx-ck et nvidia-96xx-all. Nouveau, même si j'ai dû désactiver le lissage des polices pour éviter des dizaines de bugs graphiques, ça juste marche.

(et sinon la recheche d'emploi c'est vraiment des hauts et des bas : candidature spontanée rejetée en une seule ligne, offre d'emploi reçu par mail mais... au Luxembourg. neutral
Enfin c'est juillet/août, paraît que c'est mou du genou comme période)


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#1592 Le 25/07/2013, à 15:36

Dr Le Rouge

Re : /* Topic des codeurs [8] */

The Uploader a écrit :

offre d'emploi reçu par mail mais... au Luxembourg. neutral

Le SMIC mensuel quand on a un master est à 2200€ net pour 40h/semaine. Mais on s'y fait un peu chier ^^


C'est deux suites de Cauchy qui veulent aller à la soirée 'no limit'. Hélas, à l'entrée le videur leur dit : "désolé, c'est complet !".
mon site perso (π²/6.fr) et mon blog

Hors ligne

#1593 Le 27/07/2013, à 08:09

grim7reaper

Re : /* Topic des codeurs [8] */

Tiens, on peut faire des trucs marrants en C avec la notation des tableaux ^^

#include <stdio.h>

int main(void)
{
    int tab[] = { 4, 2 };
    int i = 0;

    printf("%d%d\n", i[tab], 1[tab]);

    return 0;
}

Cest là qu’on voit que, dans ces cas-là, le tableau est implicitement converti en pointeur.


Sinon, pour le fun, voici le programme C valide (C89) le plus court et qui crash.
Il tient en 5 caractères.

main;

On déclare une globale, implicitement typé en int (merci le C89), appelé main.  Niveau compilo, c’est correct (main n’étant pas un mot réservé du C).
Le linker passe, il cherche un symbole appelé main, et il le trouve (il me semble, à vérifier, qu’à ce niveau-là, les symboles ne sont que des objets indifférencié donc le linker ne fait pas la différence entre une variable et une fonction, il veut juste un symbole qui s’appelle main).
Il choppe l’addresse en tant que point d’entrée du programme. Pas de bol, l’addresse est dans le segment de données, qui est en général non exécutable, et donc quand le proc’ va sauter à cette adresse pour l’exécuter : PAF ! big_smile

Après, il peut y avoir un cas particulier où ça ne plante pas. Genre le segment de données est exécutable et 0 est un opcode valide.
Sinon on peut aussi compiler un fichier vide, mais bon c’est plus vraiment un code C du coup.



Bon, mon petit projet Ruby commence à pouvoir faire quelques trucs :

[1] pry(main)> require 'netcdf'
=> true
[2] pry(main)> include NetCDF
=> Object
[3] pry(main)> nc = Dataset.new('test/data/simple.nc')
=> #<NetCDF::Dataset:0x000000016a05a8
 @dimensions=
  {"x"=>
    #<NetCDF::Dimension:0x000000016a7c40
     @id=0,
     @name="x",
     @owner=65536,
     @size=6,
     @unlimited=true>,
   "y"=>
    #<NetCDF::Dimension:0x000000016a7b28
     @id=1,
     @name="y",
     @owner=65536,
     @size=12,
     @unlimited=false>},
 @format="NETCDF3",
 @id=65536,
 @in_define_mode=false>


À part ça, bien content d’être de retour sur Arch’ smile
XFCE semble sympa (bon en tout cas c’est plus léger que mon KDE précédent, c’est pas bien difficile non plus car que je l’avais un peu bloaté aussi ^^")
Je vais voir si je bouge sur dwm, XMonad ou trucs du genre après, ou si je reste sur XFCE. Pour le moment je reste, histoire de voir.

Bon finalement ALSA me suffit, pas besoin de PulseAudio (c’est KDE qui avait dû me foutre la merde)
Finalement systemd ça semble assez sympa (et j’aime beaucoup netctl aussi), même si ça va faire bondir Pylade tongue

Par contre j’ai pas réussi à faire fonctionner ibus correctement hmm (la faute à XFCE ou Arch’ ou un mix des deux ?). Bon du coup, je suis passé à fcitx et je ne pense pas regretter vu que c’est ce qui a été choisi pour Ubuntu Kylin (ce qui est plutôt bon signe).



@Elzen : désolé pour Wesnoth, mais moi j’ai fini mes vacances la semaine dernière donc ça ne va pas être possible.



@The Uploader : tu as toujours rien alors hmm ?
C’est vrai que l’été c’est pas la meilleure période en plus.

Hors ligne

#1594 Le 27/07/2013, à 08:42

The Uploader

Re : /* Topic des codeurs [8] */

Pas mal le truc en C smile

Il fait quoi ton projet en Ruby exactement ?

Voila quelques trucs pour compléter Xfce à partir de l'AUR (après y'a pas mal de trucs dans [community])
:

$ pacman -Qmm | grep xfce
elementary-xfce-icons-git 0.3_18_g535605a-1 # thème d'icônes
pnmixer-xfce4 3-1 # mixer pour le tableau de bord compatible ALSA et pulseaudio
        # ou sinon on peut utiliser xfce4-mixer et le greffon qui vient avec.
xfce-theme-albatross-git 1.3.2-1 # thème GTK, xfwm4
xfce-theme-greybird-git 1.1.1_1_gf371c7b-1 # thème GTK, xfwm4
xfce4-dev-tools-git 20130106-1 # bon ça c'est juste que je pense à contribuer mais j'ai pas encore fait grand chose
        # surtout quand j'ai vu tout le boilerplate code qu'il faut faire en C avec GTK...
xfce4-places-plugin 1.5.0-1 # accès rapide aux chemins tels que / 
        # ou ~/Téléchargements et aux documents récents depuis le tableau de bord
xfce4-volumed-pulse 0.2.0-3 # pour alsa il y a xfce4-volumed
xfce4-whiskermenu-plugin-git 1.0.0.40.gbe32726-1 # greffon tiers très récent qui permet d'avoir
        # un menu des applications  à la Kick Off de KDE
grim' a écrit :

@The Uploader : tu as toujours rien alors hmm ?
C’est vrai que l’été c’est pas la meilleure période en plus.

Effet "need job to get experience and vice-versa" à donf et j'ai surtout eu affaire à des SSII qui disent "si on a des missions on vous rappelle" (principe d'Hollywood). neutral

grim' a écrit :

Finalement systemd ça semble assez sympa (et j’aime beaucoup netctl aussi), même si ça va faire bondir Pylade tongue

netctl est très sympa, surtout quand on veut s'éviter NetworkManager, wicd, et consorts, mais qu'on veut pas s'embêter à configurer une connexion wifi, et avoir quelque chose de très léger.
Puis systemd est franchement simple, plus simple que SysV.

Pour ibus, il est intégré à Xubuntu, donc a priori il devrait fonctionner avec Xfce. Même si je l'ai jamais beaucoup utilisé.

PS : pour avoir les applications KDE qui s'ouvent plus rapidement : session et démarrage => Avancé => Charger les services KDE au démarrage.
Y'a aussi cette astuce qui est sympa : ./viewtopic.php?id=752411
J'ai aussi documenté pas mal de trucs par là : ./viewtopic.php?pid=13075191#p13075191 (section "Quelques limitations/bugs connus" surtout)
Certaines nouveautés de Xfce 4.10 sont aussi pas forcément connues : http://www.xfce.org/about/tour
Surtout celle-ci (tiling semi-automatique, pratique quand on travail en parralèle sur deux versions d'un même code par exemple) :

tour a écrit :

Window Manager (xfwm4)

Xfwm4 can now tile a window when you drag it to the edge of the screen. This feature is optional and is disabled by default. In such a case windows can still be tiled using a keyboard shortcut. Another improvement is a better theming support and cursor key navigation in the tab window (Alt+Tab).

Pour en bénéficier :

http://forum.xfce.org/viewtopic.php?id=7405 a écrit :

Paramètres => Gestionnaire de paramètres => Espaces de travail => Avancé

désactiver "Changer d'espace de travail quand une fenêtre est amenée en dehors de l'écran"

(bon j'me souviens plus trop de la traduction exacte, mais ça devrait être trouvable)

Y'a aussi certains trucs sur le wiki Arch https://wiki.archlinux.org/index.php/Xfce qui sont pas à jour. Genre, j'ai jamais eu à utiliser Gamin ou FAM (même du temps de Xfce 4.6) :

Tip:

    Installing Gamin (the successor of FAM) is highly recommended.

A part ça cet article sur le wiki Arch est bien foutu.

Je crois que c'est à peu près tout. On peut revenir au code. smile
(et moi j'vais essayer d'empaqueter Touhy pour l'AUR)

Dernière modification par The Uploader (Le 27/07/2013, à 10:03)


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#1595 Le 27/07/2013, à 11:27

grim7reaper

Re : /* Topic des codeurs [8] */

The Uploader a écrit :

Il fait quoi ton projet en Ruby exactement ?

C’est une bibliothèque pour manipuler les fichiers NetCDF.
Voilà un extrait du README (en anglais à moitié relu, donc contient forcément des fautes hmm)

README.rdoc a écrit :

= \RDoc - netcdf

A Ruby interface to the NetCDF library. It is built on the NMatrix library and uses Ruby-FFI.

The NMatrix library provides an efficient N-dimensional array, like the NumPy array. It is part of the SciRuby project.

Ruby-FFI is a ruby extension for loading dynamic libraries, binding functions, and calling those functions from Ruby code. A Ruby-FFI extension works without changes on Ruby and JRuby.


== What is the NetCDF?

The NetCDF is a binary file format used to store data in machine-independent way. A NetCDF file contains metadata, which can be units and description of data for example, that make the data self-describing.

It is very convenient to store spatialized data (like geographic data, maps can be displayed with an external tool like Panoply), thus it is widely used in climatology, meteorology and oceanography applications.

The NetCDF is designed to store array-oriented data and allows subsets access in an efficient  way. The library is written in C, but official APIs are available for C++, Fortran (one for Fortran 77 and one for Fortran 90) and Java (independant implementation, not based on the C library). Third-party APIs are provided and maintened by the community for other langages like R, Python, Ruby,
Perl, ...
Moreover, a wide range of utilities, from command-line tools to graphical softwares, are available to process, analyse and visualize NetCDF files.


== Why a new Ruby library for NetCDF ?

A Ruby API for the NetCDF library already exists: RubyNetCDF, by T. Horinouchi and al.
So why this project?

For several reasons, I am not happy with the existing library. These reasons are:
- lack of features: the API provided is quite old, there is no support for the NetCDF-4 format.
- NArray-based: because of that, it uses a column-major indexing (like Fortran) which is not convenient as Ruby uses row-major indexing (like C).
- portability issue: this library uses a C extension, which is only compatible
  with C-based interpreters. People who use JRuby or IronRuby cannot use it.

For these reasons, I decided to craft my own wrapper around the NetCDF C library. To address the portability issue, I decided to use Ruby-FFI, and for
the indexing problem I solved it by using NMatrix from the SciRuby project.

Je compte bien sûr le publier quand ça sera un minimum utilisable (normalement bientôt, si j’ai un peu de temps à y consacrer…)

The Uploader a écrit :

Voila quelques trucs pour compléter Xfce à partir de l'AUR (après y'a pas mal de trucs dans [community])
:

$ pacman -Qmm | grep xfce
elementary-xfce-icons-git 0.3_18_g535605a-1 # thème d'icônes
pnmixer-xfce4 3-1 # mixer pour le tableau de bord compatible ALSA et pulseaudio
        # ou sinon on peut utiliser xfce4-mixer et le greffon qui vient avec.
xfce-theme-albatross-git 1.3.2-1 # thème GTK, xfwm4
xfce-theme-greybird-git 1.1.1_1_gf371c7b-1 # thème GTK, xfwm4
xfce4-dev-tools-git 20130106-1 # bon ça c'est juste que je pense à contribuer mais j'ai pas encore fait grand chose
        # surtout quand j'ai vu tout le boilerplate code qu'il faut faire en C avec GTK...
xfce4-places-plugin 1.5.0-1 # accès rapide aux chemins tels que / 
        # ou ~/Téléchargements et aux documents récents depuis le tableau de bord
xfce4-volumed-pulse 0.2.0-3 # pour alsa il y a xfce4-volumed
xfce4-whiskermenu-plugin-git 1.0.0.40.gbe32726-1 # greffon tiers très récent qui permet d'avoir
        # un menu des applications  à la Kick Off de KDE

Ok, je jetterais un œil à ça wink

The Uploader a écrit :
grim' a écrit :

Finalement systemd ça semble assez sympa (et j’aime beaucoup netctl aussi), même si ça va faire bondir Pylade tongue

netctl est très sympa, surtout quand on veut s'éviter NetworkManager, wicd, et consorts, mais qu'on veut pas s'embêter à configurer une connexion wifi, et avoir quelque chose de très léger.

Tout à fait d’accord.

The Uploader a écrit :

Pour ibus, il est intégré à Xubuntu, donc a priori il devrait fonctionner avec Xfce. Même si je l'ai jamais beaucoup utilisé.

Bah j’avais réussi à la faire tomber en marche.
Le japonais était OK, mais le chinois faisait de la merde (en plus du fait que toute modif’ de conf’ faites via l’interface était royalement ignoré). Or, je tape plus souvent en chinois qu’en japonais depuis un certain temps.
Pour le coup, ça semble être un problème spécifique à Arch’ (pourquoi, je ne sais pas). Et le coup du :

https://code.google.com/p/ibus/wiki/FAQ#ibus-pinyin a écrit :

Please use ibus-libpinyin instead, it is available in Community repo.

Ouais mais non, merci.
Le truc que quand je switch dessus, il semble bloqué dans une boucle infini (un cœur à 100%, et le switch ne se fait pas, cela dit ça semble venir de la libpinyin, car fcitx-libpinyin à le même comportement), je vais m’en passer hein…
Bon bah du coup je suis sur fcitx et j’en suis très content donc ça va smile

The Uploader a écrit :

PS : pour avoir les applications KDE qui s'ouvent plus rapidement : session et démarrage => Avancé => Charger les services KDE au démarrage.

J’ai plus d’appli’ qui dépendent de KDE (ni de Gnome d’ailleurs) donc ça va, mais j’avais vu l’astuce ouais.

The Uploader a écrit :

J'ai aussi documenté pas mal de trucs par là : ./viewtopic.php?pid=13075191#p13075191 (section "Quelques limitations/bugs connus" surtout)
Certaines nouveautés de Xfce 4.10 sont aussi pas forcément connues : http://www.xfce.org/about/tour
Surtout celle-ci (tiling semi-automatique, pratique quand on travail en parralèle sur deux versions d'un même code par exemple)

J’avais déjà lu ces deux liens (l’un étant dans ta signature, l’autre sur le site officiel) wink

Bon, fin du HS big_smile

Hors ligne

#1596 Le 29/07/2013, à 10:02

ljere

Re : /* Topic des codeurs [8] */

salut tout le monde,
j'ai un petit souci sur un exercice
je doit afficher les titres qui correspondent à mon acronyme j'ai donc fais ce script

acronyme = "PP"
nblivres = 7

for x in range (nblivres):
    texte = input().title().split(" ")
    if len(acronyme) == len (texte):

        for x in range (len(acronyme)):
            if texte[x][0] == acronyme[x]:
                print (" ".join(texte))

lorsque je test avec la liste suivante
PEDro paramO           
peter pan
LA Condition HUMAINE
PERE et fils
petite
Promenade Au phare
Poemes PALINDROMES
voici le retour:

python3 test.py
PEDro paramO           
peter pan
LA Condition HUMAINE
PERE et fils
petite
Promenade Au phare
Poemes PALINDROMESPeter Pan
Peter Pan

Poemes Palindromes
Poemes Palindromes

donc mon résultat est doublé et s'affiche durant le copié collé
je suis donc à l'écoute de vos idées


ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon

Hors ligne

#1597 Le 29/07/2013, à 10:50

grim7reaper

Re : /* Topic des codeurs [8] */

Salut,

Le résultat est doublé car tu fais un print à chaque fois que tu compares la première lettre du mot avec une lettre de l‘acronyme.
Ton acronyme a deux lettres, donc tu fais deux comparaisons donc tu affiches ton résultat deux fois.

Le résultat s‘affiche pendant le copier-coller car tu fais tout dans la même boucle :
1) lecture du titre
2) test
3) affichage si OK
4) go to 1
Donc c’est normal que ça s’affiche durant le copier coller.

Personnellement, j‘aurais fait le code comme ça :

#!/usr/bin/env python3

acronyme = "PP"
nblivres = 7

def match_acronyme(title):
    title = title.title().split(' ')
    return (len(title) == len(acronyme) and
            all([word[0] == c for (word, c) in zip(title, acronyme)]))

if __name__ == '__main__':
    # Lecture des titres
    titles = []
    for x in range (nblivres):
        titles.append(input())
    print('Solution:')
    # Filtrage par acronyme.
    for title in filter(match_acronyme, titles):
        print(title)

C‘est la même logique que ton code, j‘utilise juste des fonctions standard en Python + réorganisation du code pour éviter le mélanges et les affichages en double.
J’ai ajouté des commentaires, mais si tu as des questions (sur zip, all ou trucs du genre) n‘hésites pas.

Hors ligne

#1598 Le 29/07/2013, à 11:11

Shanx

Re : /* Topic des codeurs [8] */

J’ai une autre solution, peut-être un peu moins “pythonesque” mais assez proche de ce qu’avait fait ljere :

acronyme = "PP"
nblivres = 7
matrice = [[""] for x in range(nblivres)]

for x in range (nblivres):
    matrice[x] = input().split(" ")
#print(matrice)

for p in matrice:
    find = True
    if len(p) == len (acronyme):
        for x in range (len(acronyme)):
            if (p[x][0] != acronyme[x]):
                find = False
    else:
        find = False
    if find:
        print(' '.join(p))

L’idée est de mettre l’entrée dans une liste de liste (la matrice), et une fois qu’on a tout rentré on traite cette matrice.


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#1599 Le 29/07/2013, à 12:33

grim7reaper

Re : /* Topic des codeurs [8] */

Un autre hacker nous quitte sad

Hors ligne

#1600 Le 29/07/2013, à 13:05

tshirtman

Re : /* Topic des codeurs [8] */

Bon, j'ai une galère relou, et j'ai pas trop d'idée de comment trouver la source du problème.

j'ai mis mon nexus 4 a jours d'android 4.3 ce weekend, et une chose que j'avais pas prévus, c'est que ça pête python-for-android. hmm

L'ors d'un import d'une lib dont je dépends, il se passe ça

I/python  ( 3368):   File "/home/gaby/lcs/kitch/.buildozer/android/platform/python-for-android/build/python-install/lib/python2.7/stringprep.py", line 8, in <module>
I/python  ( 3368): ImportError: dlopen failed: invalid flags to dlopen: 102

et apparement, ils ont en effet ajouté un check sur les valeurs de flags dans cette nouvelle version…
http://www.funkyandroid.com/aosp-JDQ39-JWR66V.html
on peut voir le changeset

-soinfo* do_dlopen(const char* name) {
+soinfo* do_dlopen(const char* name, int flags) {
+  if ((flags & ~(RTLD_NOW|RTLD_LAZY|RTLD_LOCAL|RTLD_GLOBAL)) != 0) {
+    DL_ERR("invalid flags to dlopen: %x", flags);
+    return NULL;
+  }

plusieurs fois…

le soucis maintenant, c'est de trouver *ou* est l'appel de dlopen qui fait crasher, sachant que ça se passe sur android, je pourrais me relancer dans le gdb distant mais c'est un peu relou à mettre en place, et le grep de dlopen dans la codebase renvois du monde… hmm

@grim: arf, je me souviens d'avoir vu la vidéo de cette conf, ça avait en effet l'air d'être un sacré mec, c'est con de perdre des gens comme ça sad.

Dernière modification par tshirtman (Le 29/07/2013, à 13:06)

Hors ligne