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.

#1551 Le 12/07/2013, à 18:31

Rolinh

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

@sweetly3: il n'y a pas que la crypto dans ce cas. Je bosse actuellement dans une boite qui produit, entre autre, des cartes à destination de l'aéronautique. Ben là aussi tu ne peux pas te permettre d'erreurs, quelles soient software ou hardware. Bon, pour parer à ça, il y a de la redondance dans l'avion puisqu'il est impossible de garantir la non-existence de bug. Et il y a d'autres domaines dans le même cas (certains logiciels pour les banques, pour les appareils en médecine, etc).

@Le Rouge: bah bon courage alors tongue

Hors ligne

#1552 Le 13/07/2013, à 02:33

grim7reaper

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

@Rolinh : Non, la crypto’ c’est vraiment un truc différent.
Il ne suffit pas que le code soit sans bug. Dans l’exemple de mon message précédent, avec l’optimisation basé sur le Chinese Remainder Theorem, le code était tout ce qu’il y a de plus correct et produisait de bon résultats (pas de clefs faibles ou quelque chose comme ça).
Juste que du coup, certaines parties de l’algorithme s’exécutaient plus rapidement (à cause de l’optimisation), et BOUM ! Timing attack.
Et quand c’est pas ça, il faut toujours faire gaffe aux analyses de consommation, analyse d’émissions électromagnétique ou encore l’injection de faute (tu bombardes la cartes de photon, tu chauffes le CPU, tu coupes des connections au lasers, …).

J’avais eu un cours sur la sécu’ dans les systèmes embarqués. C’était malheureusement donné par un prof’ d’un autre académie (donc intervention de 2 jours seulement, et on n’est pas rentré dans les détails sad). Mais il à fait une présentation super intéressante (pendant un moment il a bossé ici)

Tiens, pas de la crypto’, au sujet de l’injection de faute : comment attaquer un PC, via Java sans faille, en utilisant un layout particulier d’objet en mémoire et en flippant un bit mémoire avec de la lumière : Using Memory Errors to Attack a Virtual Machine.

Après oui, en embarqué les bugs peuvent être très critique donc il y a des standards de codages stricts, des normes à suivres, des procédures de tests poussés au niveau hard et soft et de la redondance. Mais c’est pas la même chose.
Pour les banques je ne sais pas, mais pour les soft’ de médecine je dirais que ça dépends vraiment à quel niveau ils sont. Certains me semblent pas spécialement solide des fois…

Hors ligne

#1553 Le 13/07/2013, à 19:05

Dr Le Rouge

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

Dans le genre, on peut mesurer la consommation d'une carte à puce implémentant RSA avec une exponentiation rapide classique. Une itération avec multiplication n'ayant pas la même consommation qu'une itération sans (i.e. une où on se contente d'élever la base au carré), on peut lire la clef « directement » avec un oscilloscope (jolis schéma chez wikipedia).


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

#1554 Le 17/07/2013, à 19:59

The Uploader

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

The Uploader a écrit :

nouveau kernel, nouvelles emmerdes. sad
< 3.10 ça compile :
[...]

In branch 'staging' I added a missing include whitch fixes the first (minor) part.
So now we are facing the changed procfs, affecting the sructure of /contrib/sasc-ng/dvbloopback/module/dvblb_proc.c and dvblb_internal.h. I don't think that I can fix this anytime soon so I ask for help.

Many external kernel modules have to deal with this, like nvidia's driver and a whole bunch more. I'm sure we will solve this one too, somehow.

For now: avoid using 3.10 kernels

https://aur.archlinux.org/packages/open-sasc-ng/
Hum, intéressant...
edit :
http://lkml.indiana.edu/hypermail/linux … 02399.html

edit : ah enfin un début de description des changements :

* procfs got deeviscerated^Wits guts tucked back in place. _That_ will hurt a bunch of 3rd-party drivers.
1) create_proc_entry()/create_proc_read_entry() are killed off; use proc_create().
2) struct proc_dir_entry is opaque now; use PDE_DATA(inode) for access to pde->data, proc_set_size()/proc_set_user() if you have one of the few entries that need to set ->size/->uid/->gid; consider using remove_proc_subtree() rather than keeping a lot of references to children and use proc_remove(de) if you really needed remove_proc_entry(de->parent, de->name) and can't eliminate it in saner ways.
3) if your code plays with de->count or the list of children, you are screwed; it had been racy all along and really needed killing.

Experience from the in-tree drivers was generally tolerable - the places that had been painful had serious bugs and most of the pain came from the need to deal with those.

https://lwn.net/Articles/549477/
(premier commentaire)

Dernière modification par The Uploader (Le 17/07/2013, à 20:44)


- 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

#1555 Le 17/07/2013, à 23:49

tshirtman

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

Tiens, je me décide à me mettre à l'haskell, ça fera plaisir à certains smile

Cependant, je ne comprends pas bien encore tout, je fais des exercices un peu basiques pour me dérouiller, ma méthode est surement très mauvaise, mais j'apprends vraiment par la pratique alors on affinera plus tard.

-- our imports
import qualified Data.Char
import qualified Data.List
import qualified Data.Bits

-- data definition
hex = "0123456789abcdef"

-- convert an hex char to its int value
hex2int :: Char -> Maybe Int 
hex2int c = Data.List.elemIndex c hex 

-- convert all the legal hex symbols in a string into the equivalent integer
stringHexDecode :: [Char] -> [Int]
stringHexDecode (h:t) = do
        let x = hex2int h
        if x == Nothing 
                then stringHexDecode t 
                else [x] ++ stringHexDecode t
stringHexDecode [] = []

il semble compiler stringHexDecode avec [Maybe Int] comme type de retour, hors, j'élimine bien cette possibilité normalement, et je pense que je devrais avoir [Int], ce qui m'arrangerais bien pour la suite, je pourrais supposer que c'est une limitation de compiler, mais je me dis que c'est plus probablement moi qui loupe un truc… des suggestions? smile

edit: ahah! Data.Maybe.mabeToList permet de modifier stringHexDecode comme ça:

-- convert all the legal hex symbols in a string into the equivalent integer
stringHexDecode :: [Char] -> [Int]
stringHexDecode (h:t) = Data.Maybe.maybeToList (hex2int h) ++ stringHexDecode t
stringHexDecode [] = []

et du coup ça, passe, en plus propre… je suppose qu'il faudrait que je regarde le code du module Maybe poupr mieux comprendre… on verra plus tard.

Dernière modification par tshirtman (Le 18/07/2013, à 00:19)

Hors ligne

#1556 Le 18/07/2013, à 03:14

grim7reaper

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

tshirtman a écrit :

Tiens, je me décide à me mettre à l'haskell, ça fera plaisir à certains smile

Ha tiens smile
Et pourquoi tu te mets à Haskell ?

tshirtman a écrit :

Cependant, je ne comprends pas bien encore tout

Ouais, c’est bourré de concept un peu déroutant quand on vient de la prog’ impérative. Même en venant de prog’ fonctionnelle style Lisp je pense qu’il y a aussi pas mal de nouveaux trucs (genre les foncteurs applicatifs, les monoïdes, les monades, …)

tshirtman a écrit :

il semble compiler stringHexDecode avec [Maybe Int] comme type de retour, hors, j'élimine bien cette possibilité normalement, et je pense que je devrais avoir [Int], ce qui m'arrangerais bien pour la suite, je pourrais supposer que c'est une limitation de compiler, mais je me dis que c'est plus probablement moi qui loupe un truc… des suggestions? smile

Ça vient bien de toi wink
Le compilo’ est vraiment super malin en Haskell (en partie grâce au langage lui-même). Il peut faire des optimisations assez impressionnante qui apporte de gros gains de perf’, genre stream fusion (cf. ce papier de Microsoft Research : Haskell Beats C Using Generalized Stream Fusion).
Donc bon, sauf bug il ne se plante jamais sur l’inférence des types.

Bon pour en revenir à ton problème, il vient d’ici :

        let x = hex2int h
        if x == Nothing 
                then stringHexDecode t 
                else [x] ++ stringHexDecode t

Dans le else tu utilises x (un Maybe Int).
Au passage, tu n’as pas besoin du do ici, tu t’en sers juste juste pour écrire le code d’une manière impérative et c’est pas bien tongue
Tu pourrais reformuler comme ça (mais on reste avec le problème du Maybe Int) :

stringHexDecode :: [Char] -> [Int]
stringHexDecode (h:t) = let x = hex2int h
                        in if x == Nothing
                           then stringHexDecode t
                           else [x] ++ stringHexDecode t
stringHexDecode [] = []

Perso, j’aurais écris ton code comme ça :
- suppression des import inutiles
- utilisation de l’équivalent du from A import xxx de Python pour n’importer que la fonction elemIndex
- utilisation du case of pour déconstruire le Maybe

import Data.List (elemIndex)

-- data definition
hex = "0123456789abcdef"

-- convert an hex char to its int value
hex2int :: Char -> Maybe Int
hex2int c = elemIndex c hex

-- convert all the legal hex symbols in a string into the equivalent integer
stringHexDecode :: [Char] -> [Int]
stringHexDecode [] = []
stringHexDecode (h:t) = case hex2int h of
                          Nothing -> stringHexDecode t
                          Just x  -> [x] ++ stringHexDecode 

Sinon, il y aussi moyen de passer par le fonction digitToInt de Data.Char, mais du coup ça lève une exception si le caractère est pas convertible.

tshirtman a écrit :

edit: ahah! Data.Maybe.mabeToList permet de modifier stringHexDecode comme ça:

-- convert all the legal hex symbols in a string into the equivalent integer
stringHexDecode :: [Char] -> [Int]
stringHexDecode (h:t) = Data.Maybe.maybeToList (hex2int h) ++ stringHexDecode t
stringHexDecode [] = []

et du coup ça, passe, en plus propre… je suppose qu'il faudrait que je regarde le code du module Maybe poupr mieux comprendre… on verra plus tard.

Tiens, tant que j’y pense.
Il y a un moteur de recherche super bien fait pour haskell : hoogle.
Par exemple dans ton cas, ton problème c’est que tu obtenais une liste de Maybe Int (i.e [Maybe Int]), mais tu voulais une liste de Int (i.e [Int])
Si on généralise ton problème, tu avais donc besoin d’une fonction qui fait [Maybe a] -> [a].
Si tu tapes ça dans hoogle, tu vas avoir en premier résultat catMaybes du module Data.Maybe.

http://hackage.haskell.org/packages/archive/base/latest/doc/html/Data-Maybe.html#v:catMaybes a écrit :

The catMaybes function takes a list of Maybes and returns a list of all the Just values.

On peut donc encore simplifier :

import Data.List (elemIndex)
import Data.Maybe (catMaybes)

-- data definition
hex = "0123456789abcdef"

-- convert an hex char to its int value
hex2int :: Char -> Maybe Int
hex2int c = elemIndex c hex

-- convert all the legal hex symbols in a string into the equivalent integer
stringHexDecode :: [Char] -> [Int]
stringHexDecode = catMaybes . map hex2int

Bon là pour stringHexDecode j’ai utilisé la composition de fonction + curryfication (ce qui est courant en Haskell, c’est pas du tout de l’obfuscation pour gagner quelques caractères).
Mais c’est équivalent à :

stringHexDecode :: [Char] -> [Int]
stringHexDecode s = catMaybes $ map hex2int s
-- ou, mais moins joli je trouve
-- stringHexDecode :: [Char] -> [Int]
-- stringHexDecode = catMaybes (map hex2int s)

Récemment, un tuto est sur developpez.com sur la réalisation d’un petit moteur de raytracing en Haskell (partie 1 et 2 pour le moment).
Ça donne une petit idée de ce que l’on peut faire avec ce langage smile
Bon OK, des malades on fait un raytracer en C++ (il y a aussi eu une version en D, cette dernière étant probablement plus lisible je pense, vu la syntaxe template du C++ ^^") où tout est fait à la compilation (vive les template). C’est à dire que le compilo produit une image au final :]



Bon sinon j’ai prévu de retourner sur Arch' bientôt (dès mon retour en France normalement, la connexion ici c’est pas le top…), probablement sur Xfce dans un premier temps (temporairement ou pas je verrais, ça me fera l’occasion de le tester en tout cas)

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

Hors ligne

#1557 Le 18/07/2013, à 08:54

tshirtman

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

grim7reaper a écrit :

Ha tiens smile
Et pourquoi tu te mets à Haskell ?

Je pense qu'un bon dev doit avoir plusieurs cordes à son arc, et le problème de python c'est que si je lui trouve des défauts, tout ce que j'ai pus voir d'autre me semble en avoir bien plus, dur d'apprendre un autre langage, du coup, ça fais pas mal de temps que je vois des gens vanter la syntaxe d'haskell, et il a des propriété très différentes de python (typage fort, fort parallelisme), donc je me dis que c'est un bon complément, même s'il a une popularité apparemment faible en dehors de certains cercles universitaires assez restreint, je me dis que c'est toujours bon à apprendre. Bref, envie d'apprendre un truc, et tout le reste semble ne pas valoir le coup tongue.

Ouais, c’est bourré de concept un peu déroutant quand on vient de la prog’ impérative. Même en venant de prog’ fonctionnelle style Lisp je pense qu’il y a aussi pas mal de nouveaux trucs (genre les foncteurs applicatifs, les monoïdes, les monades, …)

Ouais, moi aussi je pourrais faire des phrases sybillines sur les monoides endofunctors et autres trucs que personnes comprends bientôt \o/.

tshirtman a écrit :

il semble compiler stringHexDecode avec [Maybe Int] comme type de retour, hors, j'élimine bien cette possibilité normalement, et je pense que je devrais avoir [Int], ce qui m'arrangerais bien pour la suite, je pourrais supposer que c'est une limitation de compiler, mais je me dis que c'est plus probablement moi qui loupe un truc… des suggestions? smile

Ça vient bien de toi wink
Le compilo’ est vraiment super malin en Haskell (en partie grâce au langage lui-même). Il peut faire des optimisations assez impressionnante qui apporte de gros gains de perf’, genre stream fusion (cf. ce papier de Microsoft Research : Haskell Beats C Using Generalized Stream Fusion).

Ouais il me semblait bien qu'il était assez balaise sur ce genre de choses, ça m'étonnait de le planter sur un truc aussi basique smile.

Donc bon, sauf bug il ne se plante jamais sur l’inférence des types.

Bon pour en revenir à ton problème, il vient d’ici :

        let x = hex2int h
        if x == Nothing 
                then stringHexDecode t 
                else [x] ++ stringHexDecode t

Dans le else tu utilises x (un Maybe Int).
Au passage, tu n’as pas besoin du do ici, tu t’en sers juste juste pour écrire le code d’une manière impérative et c’est pas bien tongue
Tu pourrais reformuler comme ça (mais on reste avec le problème du Maybe Int) :

stringHexDecode :: [Char] -> [Int]
stringHexDecode (h:t) = let x = hex2int h
                        in if x == Nothing
                           then stringHexDecode t
                           else [x] ++ stringHexDecode t
stringHexDecode [] = []

C'est vrai, j'étais pas fier du "do" tongue, content (mais pas surpris wink) de voir qu'on peux faire mieux smile.

Perso, j’aurais écris ton code comme ça :
- suppression des import inutiles
- utilisation de l’équivalent du from A import xxx de Python pour n’importer que la fonction elemIndex

Oui, j'avais vu cette notation, mais je suis partis sur de fully qualified, je sais pas trop pourquoi, c'est vrai que je fais souvent ce type d'import en python.

- utilisation du case of pour déconstruire le Maybe

Ah, le cœur de mon sujet smile

import Data.List (elemIndex)

-- data definition
hex = "0123456789abcdef"

-- convert an hex char to its int value
hex2int :: Char -> Maybe Int
hex2int c = elemIndex c hex

-- convert all the legal hex symbols in a string into the equivalent integer
stringHexDecode :: [Char] -> [Int]
stringHexDecode [] = []
stringHexDecode (h:t) = case hex2int h of
                          Nothing -> stringHexDecode t
                          Just x  -> [x] ++ stringHexDecode 

Donc, tester sur la valeur ne suffisait pas, même si Nothing est la seule valeur non Int possible, il faut indiquer la dichotomie sur le type pour qu'il s'en sorte?

Sinon, il y aussi moyen de passer par le fonction digitToInt de Data.Char, mais du coup ça lève une exception si le caractère est pas convertible.

Oui, j'ai vu celle ci, mais dans le cadre de l'exo, je pense que c'est bien que je maîtrise tous les aspects du décodage de la chaîne.

tshirtman a écrit :

edit: ahah! Data.Maybe.mabeToList permet de modifier stringHexDecode comme ça:

-- convert all the legal hex symbols in a string into the equivalent integer
stringHexDecode :: [Char] -> [Int]
stringHexDecode (h:t) = Data.Maybe.maybeToList (hex2int h) ++ stringHexDecode t
stringHexDecode [] = []

et du coup ça, passe, en plus propre… je suppose qu'il faudrait que je regarde le code du module Maybe poupr mieux comprendre… on verra plus tard.

Tiens, tant que j’y pense.
Il y a un moteur de recherche super bien fait pour haskell : hoogle.

Oui, je l'avais déjà oublié lui big_smile, bien adapté pour le coup.

Par exemple dans ton cas, ton problème c’est que tu obtenais une liste de Maybe Int (i.e [Maybe Int]), mais tu voulais une liste de Int (i.e [Int])
Si on généralise ton problème, tu avais donc besoin d’une fonction qui fait [Maybe a] -> [a].
Si tu tapes ça dans hoogle, tu vas avoir en premier résultat catMaybes du module Data.Maybe.

http://hackage.haskell.org/packages/archive/base/latest/doc/html/Data-Maybe.html#v:catMaybes a écrit :

The catMaybes function takes a list of Maybes and returns a list of all the Just values.

On peut donc encore simplifier :

import Data.List (elemIndex)
import Data.Maybe (catMaybes)

-- data definition
hex = "0123456789abcdef"

-- convert an hex char to its int value
hex2int :: Char -> Maybe Int
hex2int c = elemIndex c hex

-- convert all the legal hex symbols in a string into the equivalent integer
stringHexDecode :: [Char] -> [Int]
stringHexDecode = catMaybes . map hex2int

Bon là pour stringHexDecode j’ai utilisé la composition de fonction + curryfication (ce qui est courant en Haskell, c’est pas du tout de l’obfuscation pour gagner quelques caractères).

Pas de soucis, j'ai vu cette fonction "(.)", et j'aime beaucoup le concept, même si m'en sert pas encore très bien smile.

Mais c’est équivalent à :

stringHexDecode :: [Char] -> [Int]
stringHexDecode s = catMaybes $ map hex2int s
-- ou, mais moins joli je trouve
-- stringHexDecode :: [Char] -> [Int]
-- stringHexDecode = catMaybes (map hex2int s)

Récemment, un tuto est sur developpez.com sur la réalisation d’un petit moteur de raytracing en Haskell (partie 1 et 2 pour le moment).
Ça donne une petit idée de ce que l’on peut faire avec ce langage smile

classe smile

Bon OK, des malades on fait un raytracer en C++ (il y a aussi eu une version en D, cette dernière étant probablement plus lisible je pense, vu la syntaxe template du C++ ^^") où tout est fait à la compilation (vive les template). C’est à dire que le compilo produit une image au final :]

J'étais en train de me dire "ben des raytracer en c++ il doit y en avoir des pelletées, non?", puis j'ai compris la dernière phrase… en effet, je veux même pas voir le "code" ^^.

Bon sinon j’ai prévu de retourner sur Arch' bientôt (dès mon retour en France normalement, la connexion ici c’est pas le top…), probablement sur Xfce dans un premier temps (temporairement ou pas je verrais, ça me fera l’occasion de le tester en tout cas)

T'es sur quoi actuellement?

Hors ligne

#1558 Le 18/07/2013, à 09:15

The Uploader

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

grim7reaper a écrit :

Bon sinon j’ai prévu de retourner sur Arch' bientôt (dès mon retour en France normalement, la connexion ici c’est pas le top…), probablement sur Xfce dans un premier temps (temporairement ou pas je verrais, ça me fera l’occasion de le tester en tout cas)

\o/ \o/
Si tu utilises PulseAudio (Xfce supporte pas vraiment ça à la base : xfce4-mixer et xfce4-volumed utilisent tous deux le mixer de gstreamer0.10, qui n'existe plus dans la 1.0, qui ne supporte que ALSA sous GNU/Linux), j'ai packagé xfce4-volumed-pulse sur l'AUR, et j'utilise pnmixer-xfce4 (présent sur l'AUR) à la place du greffon pour le tableau de bord xfce4-mixer-plugin, et pavucontrol à la place de xfce4-mixer. smile

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


- 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

#1559 Le 18/07/2013, à 09:36

grim7reaper

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

tshirtman a écrit :

même s'il a une popularité apparemment faible en dehors de certains cercles universitaires assez restreint

C’est vrai que niveau popularité on est loin d’un Python ou d’un Ruby, mais je trouve qu’au niveau langage fonctionnel c’est l’un des plus populaire (avec OCaml entre autres).
Mais cela dit, il n’est pas cantonné au monde de la recherche universitaire (même si c’est là que l’on retrouve probablement le plus), il semble aussi présent (à divers degrés) dans pas mal d’entreprises (cf. cette page).

tshirtman a écrit :
grim7reaper a écrit :

Ouais, c’est bourré de concept un peu déroutant quand on vient de la prog’ impérative. Même en venant de prog’ fonctionnelle style Lisp je pense qu’il y a aussi pas mal de nouveaux trucs (genre les foncteurs applicatifs, les monoïdes, les monades, …)

Ouais, moi aussi je pourrais faire des phrases sybillines sur les monoides endofunctors et autres trucs que personnes comprends bientôt \o/.

tongue

tshirtman a écrit :
grim7reaper a écrit :
import Data.List (elemIndex)

-- data definition
hex = "0123456789abcdef"

-- convert an hex char to its int value
hex2int :: Char -> Maybe Int
hex2int c = elemIndex c hex

-- convert all the legal hex symbols in a string into the equivalent integer
stringHexDecode :: [Char] -> [Int]
stringHexDecode [] = []
stringHexDecode (h:t) = case hex2int h of
                          Nothing -> stringHexDecode t
                          Just x  -> [x] ++ stringHexDecode 

Donc, tester sur la valeur ne suffisait pas, même si Nothing est la seule valeur non Int possible, il faut indiquer la dichotomie sur le type pour qu'il s'en sorte?

Non, car les deux valeur possible d’un Maybe ce n’est pas Nothing et x mais Nothing et Just x.
Le type Maybe est défini comme ça d’ailleurs :

data  Maybe a  =  Nothing | Just a
  deriving (Eq, Ord)

Donc après avoir fait le test sur Nothing, il faut « extraire » le valeur de Just pour avoir une variable de type a et non pas Maybe a

tshirtman a écrit :
grim7reaper a écrit :

Bon sinon j’ai prévu de retourner sur Arch' bientôt (dès mon retour en France normalement, la connexion ici c’est pas le top…), probablement sur Xfce dans un premier temps (temporairement ou pas je verrais, ça me fera l’occasion de le tester en tout cas)

T'es sur quoi actuellement?

Sur ma machine perso, ça va faire presque un an maintenant que j’étais de retour sur Ubuntu (Kubuntu pour être exact).

Tu te bases sur quoi pour apprendre Haskell ?



@The Uploader : Ok, je garde ça en tête.
À la base ALSA me suffisait, et puis un jour j’ai soudainement eu des soucis (sûrement dû à KDE mais je ne suis pas sûr), et l’installation de PulseAudio avait tout résolu.
Je verrais avec Xfce si ça se reproduit ou pas.

Hors ligne

#1560 Le 18/07/2013, à 10:11

The Uploader

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

J'oubliais :
- ce que j'ai modifié/rajouté dans mon message précédent.

- Avec les fichiers .desktop dans /etc, parfois xfce4-volumed-pulse est lancé avant PulseAudio (ou pire chez moi : Timidity se lance avant PA -> pas de son) et ne trouvant pas PA, il se barre.
Du coup je les ai désactivé dans "session et démarrage" et j'ai fait ça :

cat bin/pulseaudio-timidity.sh 
start-pulseaudio-x11 &
sleep 5
xfce4-volumed-pulse &
timidity -iAD -Os &
pnmixer &
cat .config/autostart/Timidity.desktop
[Desktop Entry]
Encoding=UTF-8
Version=0.9.4
Type=Application
Name=Système de son PulseAudio et Timidity
Comment=Démarrer le système de son PulseAudio et le synthétiseur logiciel MIDI Timidity++
Exec="/home/max/bin/pulseaudio-timidity.sh"
OnlyShowIn=XFCE;
StartupNotify=false
Terminal=false
Hidden=false

(bon le fichier .desktop je l'ai fait graphiquement en deux clics dans "session et démarrage")

Heureusement qu'il y a pnmixer-xfce4 d'ailleurs, parce que pour packager indicator-sound-gtk2 (le greffon pour le son du tableau de bord de Xubuntu) c'est l'enfer (libido et d'autres bibliothèques incompilables, bref : Dependency Hell).

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


- 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

#1561 Le 18/07/2013, à 12:14

tshirtman

Hors ligne

#1562 Le 18/07/2013, à 14:47

ljere

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

bonjour j'ai besoin d'un peu d'aide sur le compteur des lèves tôt

def renderstats(stats):
    # Si le dictionnaire stats contient quelque chose
    if stats != {}:

        # Création d'un dictionnaire pour la journée
        DayStats = {'00': 0, '01': 0, '02': 0, '03': 0, '04': 0, '05': 0, '06': 0, '07': 0, '08': 0, '09': 0, '10': 0, '11': 0, '12': 0, '13': 0, '14': 0, '15': 0, '16': 0, '17': 0, '18': 0, '19': 0, '20': 0, '21': 0, '22': 0, '23': 0}
        # Copie des valeurs des clés existantes ce qui permet d'avoir un tableau contenant toutes les heures
        DayStats.update(stats)

        # ============ ATTENTION ==================
        # Le reste de cette fonction n'est pas commenté car elle ne sert qu'à des fins statistiques et que j'ai autre chose à faire ;oP
        HoursBar = 'h|'.join(sorted(DayStats.keys()))+'h'
        HoursBar = HoursBar[20:]+'|'+HoursBar[:19]
        HoursBar = HoursBar[0:len(HoursBar)-1]
        HoursPie = 'h|'.join(sorted(stats.keys()))+'h'
        for k in stats.keys():
            HoursPie = HoursPie.replace(k+'h', k+'h%20-%20'+k+'h59')

        DataBar = ','.join([str(DayStats[x]) for x in sorted(DayStats.keys())])
        DataBar = ','.join(DataBar.split(',')[5:24])+','+','.join(DataBar.split(',')[0:5])
        Vmax10 = str(10*(int(max([DayStats[x] for x in DayStats.keys()]))/10+1))

        urlimage='[img=Répartition]http://chart.apis.google.com/chart?chs=675x280&cht=p3&chco=d80020,d88000,ffd840,20d820,2080ff,101080,a020d8&chf=bg,s,00000000&chl='+HoursPie+'&chd=t:'+','.join([str(stats[x]) for x in sorted(stats.keys())])+'&chp=1.6&chtt=R%C3%A9partition%20des%20posts&chts=606060,16[/img]'

        urlimage+='[img=Posts/heure]http://chart.apis.google.com/chart?chs=675x280&cht=bvs&chxt=x,y&chds=0,'+Vmax10+'&chxr=1,0,'+Vmax10+((Vmax10 == '30' and ',5') or '')+'&chf=b0,lg,0,803000,0,ffc080,1|bg,s,00000000&chxl=0:|'+HoursBar+'h'+'&chxp=0,0.7,4.9,9.1,13.2,17.3,21.5,25.6,29.8,33.9,38,42.2,46.3,50.5,54.6,58.8,62.9,67,71.2,75.3,79.4,83.6,87.7,91.8,96&chd=t:'+DataBar+'&chm=N,803000,0,-1,12&chtt=|Nombre%20de%20posts%20par%20heure&chts=606060,16[/img]'

        return urlimage

    return None

si on veut prendre à partir d'hier à 15h jusque 24h puis la aujourd'hui de 0h à 15h
il me semble que c'est cette ligne ci qu'il faut modifier

DataBar = ','.join(DataBar.split(',')[15:24])+','+','.join(DataBar.split(',')[0:15])

mais ça ne suffit pas le graph démarre quand même à 5 h du matin


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

#1563 Le 18/07/2013, à 14:51

Shanx

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

Bon, après avoir demandé sur StackOverflow et sur IRC, où je n’ai pas eu de réponse, je me tourne vers vous. J’ai un petit problème avec flask (plus précisément flask-frozen), quelqu’un sait d’où ça peut venir ?


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

#1564 Le 18/07/2013, à 16:36

Kanor

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

Shanx a écrit :

Bon, après avoir demandé sur StackOverflow et sur IRC, où je n’ai pas eu de réponse, je me tourne vers vous. J’ai un petit problème avec flask (plus précisément flask-frozen), quelqu’un sait d’où ça peut venir ?

mais euh wink

Hors ligne

#1565 Le 18/07/2013, à 16:41

Shanx

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

Kanor a écrit :
Shanx a écrit :

Bon, après avoir demandé sur StackOverflow et sur IRC, où je n’ai pas eu de réponse, je me tourne vers vous. J’ai un petit problème avec flask (plus précisément flask-frozen), quelqu’un sait d’où ça peut venir ?

mais euh wink

N’empêche que j’ai trouvé la réponse à mon (premier) problème tout seul. tongue
Tu m’as aidé pour la suite. Merci beaucoup. smile

Le résultat final (encore en bêta). Le code n’est pas de moi, j’ai juste modifié des trucs et ajouté la galerie (pages « Photos ») qui est elle-même une adaptation des galeries que j’utilisais jusque là. Bon, tout ça m’a quand même pris un jour et demi.


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

#1566 Le 18/07/2013, à 17:25

Rolinh

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

@Ijere:

Python 2.7.5 (default, May 12 2013, 12:00:47) 
[GCC 4.8.0 20130502 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> DayStats = {'00': 0, '01': 0, '02': 0, '03': 0, '04': 0, '05': 0, '06': 0, '07': 0, '08': 0, '09': 0, '10': 0, '11': 0, '12': 0, '13': 0, '14': 0, '15': 0, '16': 0, '17': 0, '18': 0, '19': 0, '20': 0, '21': 0, '22': 0, '23': 0}
>>> d = dict.fromkeys(["%02d" % h for h in range(24)], 0)
>>> DayStats == d
True

C'est un peu plus joli (à mon avis). Sinon, pour ta question, ça me semble juste. Et je ne connais pas la "char API" de Google mais ce ne serait pas quand tu plots des valeurs le problème?

Hors ligne

#1567 Le 18/07/2013, à 18:05

ljere

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

je sais qu'à l'origine ça a été codé par tshirtman
sinon pour ta modif c'est adopté en effet c'est plus propre
je ne comprend pas

>>> DayStats = dict.fromkeys(["%02d" % h for h in range(24)], 0)
>>> HoursBar = 'h|'.join(sorted(DayStats.keys()))+'h'
>>> HoursBar = HoursBar[20:]+'|'+HoursBar[:19]
>>> print HoursBar
05h|06h|07h|08h|09h|10h|11h|12h|13h|14h|15h|16h|17h|18h|19h|20h|21h|22h|23h|00h|01h|02h|03h|04h
>>> HoursBar = 'h|'.join(sorted(DayStats.keys()))+'h'
>>> HoursBar = HoursBar[19:]+'|'+HoursBar[:18]
>>> print HoursBar
|05h|06h|07h|08h|09h|10h|11h|12h|13h|14h|15h|16h|17h|18h|19h|20h|21h|22h|23h|00h|01h|02h|03h|04
>>> HoursBar = HoursBar[18:]+'|'+HoursBar[:17]
>>> print HoursBar
9h|10h|11h|12h|13h|14h|15h|16h|17h|18h|19h|20h|21h|22h|23h|00h|01h|02h|03h|04||05h|06h|07h|08h|

ça a l'air good et pourtant quand je test
https://forum.ubuntu-fr.org/viewtopic.p … #p14164131

Dernière modification par ljere (Le 18/07/2013, à 19:21)


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

#1568 Le 19/07/2013, à 02:11

grim7reaper

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

Rolinh a écrit :

@Ijere:

>>> d = dict.fromkeys(["%02d" % h for h in range(24)], 0)

Oui ça, ou une dict comprehension :

DayStats = { "%02d" % h : 0 for h in range(24) }

Hors ligne

#1569 Le 19/07/2013, à 02:24

lukophron

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

HoursBar = 'h|'.join(sorted(DayStats.keys()))+'h'
HoursBar = HoursBar[60:]+'|'+HoursBar[:59]
DataBar = ','.join([str(DayStats[x]) for x in sorted(DayStats.keys())])
DataBar = ','.join(DataBar.split(',')[15:24])+','+','.join(DataBar.split(',')[0:15])

non ?

mais je n'ai pas vérifié si la méthode

DayStats.update(stats)

te permet d'avoir les bonnes stats ( hier 15h -> aujourd'hui 14h59 )


Le danger avec les glands est qu'ils prennent racines.
Corneille

Hors ligne

#1570 Le 19/07/2013, à 09:31

ljere

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

c'est good didier m'a aidé, hier soir on a donc trouvé comment récupérer après les comptes c'est à dire à 9h, l'histogramme commence donc de
"hier 9h à aujourd'hui 9h"
merci tout le monde wink


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

#1571 Le 19/07/2013, à 13:24

Elzen

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

Plop les gens,

y aurait-il par hasard du monde, cet été (pour ceux qui ont des vacances), pour se faire une petite « Wesnoth session » ?

On se met à plusieurs, on prend quelques jours et un chan IRC, on se répartit les rôles, et on essaye de se coder une campagne Wesnoth en accéléré. J'pense que si la trame est écrite à l'avance, ça devrait être jouable, alors j'aimerais bien essayer.

Hors ligne

#1572 Le 19/07/2013, à 14:11

Shanx

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

Elzen a écrit :

y aurait-il par hasard du monde, cet été (pour ceux qui ont des vacances), pour se faire une petite « Wesnoth session » ?

Je ne me rend pas trop compte de la charge de travail que ça peut représenter. Comme dit sur IRC, officiellement j’ai pas des masses de temps libre, surtout qu’à la fin du mois d’août j’ai mes rattrapages. Après, ça m’intéresse un peu de voir comment tout ça fonctionne et je pense que ça peut être une expérience profitable. Du coup je vais suivre l’avancement du projet et les premières ébauches, et selon comment ça se présente de mon côté je participerai peut-être.


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

#1573 Le 19/07/2013, à 14:20

Elzen

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

Ouaip, je comprends bien. Je ne sais pas non plus trop quelle charge de travail ça devrait représenter (c'est pour ça que je demande en priorité aux gens qui ont des vacances, pour être sûr), mais une campagne « simple » comme Citharal (qui n'est pas complète, ceci dit) n'avait pas été trop compliquée, si je me souviens bien ; en s'organisant correctement et sans viser d'objectifs trop ambitieux, je pense que c'est tout à fait dans nos cordes.
À mon avis, le plus long, c'est la partie planification de ce qui doit se passer dans les différents scénarios. Pour ça, j'peux vous proposer une de ces idées-là, par exemple (prioritairement la première ou les deux dernières, je pense, pour les autres, il risque d'y avoir du boulot de création d'unités en plus), comme ça j'ai déjà des idées et je commence à plancher dessus avant qu'on s'y mette, pour qu'on parte avec un projet un peu plus solide (sachant, bien sûr, que toutes les remarques seront les bienvenues).
Notez que les gens qui seront du côté de Lyon pendant la période choisie, on pourra aussi éventuellement se voir chez moi, si ça vous semble plus convivial que sur IRC smile

Hors ligne

#1574 Le 19/07/2013, à 14:27

Shanx

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

J’ai une idée révolutionnaire pour une campagne. Ce serait un jeune paysan qui reçoit un artefact magie d’une puissance hors du commun, mais qui doit le détruire s’il veut sauver la terre. Du coup il part en direction d’un volcan situé à l’autre bout de Wesnoth pour y jeter l’artefact, accompagné de quelques amis paysans, mais aussi de plusieurs compagnons de races diverses et variées : humains (chevalier et magicien), nain, elfe, etc. Il devra lutter contre à peu près tous les ennemis du mal existant (excepté Darth Vader) : orc, gobelin, troll, etc. Original, non ?

big_smile

Blague à part, je pense que y’a du potentiel là.


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

#1575 Le 19/07/2013, à 15:48

Rolinh

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

Besoin d'idées/aide pour une optimisation d'un petit programme en python smile

Mon but: calculer le SSIM entre chaque frame de deux videos raw en YUV (IYUV / I420).
J'ai chopé un module pour calculer le SSIM ici. Ça fonctionne bien sauf que le programme fonctionne en faisant la différence entre deux images qu'il charge (genre png). Donc ce que j'ai fait, c'est que j'ai changé le main pour prendre deux vidéos YUV en argument puis je les décompose frame par frame. Le problème, c'est que le module utilise PIL, librairie qui, en plus de n'être pas encore disponible en Python 3, ne sait pas travailler en YUV ou convertir de/vers cette représentation (un comble!).
Du coup, je convertis chaque frame en RGB avant de calculer le SSIM. Le problème, c'est que ma méthode est vraiment moisie et que cela prend environ 25 seconde par frame sur une vidéo en 1080p. Sachant que j'ai en tout cas une douzaine de vidéos d'environ 500 frames pour lesquelles j'aimerais calculer le SSIM bah... j'ai pas le temps à 3.5 heure la vidéo. Bref,  voici déjà un tarball avec mon petit programme python.

Donc voici la partie qu'il faudrait optimiser dans mon main:

    f1 = open(vid1, 'rb')
    f2 = open(vid2, 'rb')

    print("Pic #, SSIM value")
    for n in range(nb_frames):
        frame_offset = (n * frame_weight)
        im1 = Image.new("RGB", (width, height))
        im2 = Image.new("RGB", (width, height))
        pix1 = im1.load()
        pix2 = im2.load()
        # I420/IYUV: NxN Y plane, then (N/2)x(N/2) U and V planes
        for y in range(height):
            for x in range(width):
                pos_y = frame_offset + (y * width + x)
                pos_u = frame_offset + (y/2 * width/2 + x/2 + frame_size)
                pos_v = frame_offset + (y/2 * width/2 + x/2 + frame_size + frame_size/4)

                f1.seek(pos_y, 0)
                y1 = ord(f1.read(1))
                f1.seek(pos_u, 0)
                u1 = ord(f1.read(1))
                f1.seek(pos_v, 0)
                v1 = ord(f1.read(1))

                f2.seek(pos_y, 0)
                y2 = ord(f2.read(1))
                f2.seek(pos_u, 0)
                u2 = ord(f2.read(1))
                f2.seek(pos_v, 0)
                v2 = ord(f2.read(1))

                pix1[x, y] = utils.yuv2rgb(y1, u1, v1)
                pix2[x, y] = utils.yuv2rgb(y2, u2, v2)
        # im1.show()
        print("{}, {}".format(n, ssim.compute_ssim(im1, im2)))

    f1.close()
    f2.close()

Et ma méthode de conversion yuv vers rgb:

def clamp(x, mini=0, maxi=255):
    """Clamp the given value regarding mini/maxi."""
    return int(max(mini, min(x, maxi)))

def yuv2rgb(y, u, v):
    """Turn y, u and v components into r, g, b values."""

    c = y - 16
    d = u - 128
    e = v - 128

    r = clamp((298 * c + 409 * e + 128) >> 8)
    g = clamp((298 * c - 100 * d - 208 * e + 128) >> 8)
    b = clamp((298 * c + 516 * d + 128) >> 8)

    return r, g, b

Il y a donc une triple boucle for moisie qui converti chacun des pixels un à un... La première boucle sert à splitter frame par frame tandis que les deux autres parcourent l'image pixel par pixel.
Pour récupérer mes valeurs y, u et v séparément, je me balade à grand coup de seek dans mes vidéos. Le frame_offset sert simplement à me positionner sur la frame qui m'intéresse. Il est calculé en fonction du poids d'une frame (ce calcul est valable uniquement pour du 4:2:0, pour du 4:2:2 ou du 4:4:4 c'est légèrement différent):

    frame_size = width * height
    frame_weight = (frame_size * 3) / 2

Pour le reste, la récupération des trois composantes se fait en sachant que le I420 est un format planaire et non pas entrelacé: un plan Y de NxN suivit par deux plans U et V de (N/2)x(N/2) dans cet ordre. La page anglophone de wikipedia explique ça très bien. La conversion YUV vers RGB est juste l'application de cette formule. Pour vérifier que la conversion est bien correcte, on peut décommenter la ligne avec le im1.show(), ce qui permet un affichage de l'image.
Alors je sais très bien que ce code n'est pas terrible du tout. Je voulais simplement d'abord m'assurer que je pouvais faire une conversion correcte, les optimisations venant ensuite.
Un parmi vous aurait-il une idée pour une super optimisation? Ça peut aussi passer par du multiprocessing. wink

Pour faire de rapides tests, il est possible d'utiliser cette video. Je vais regarder entre temps si c'est possible d'en générer une ou d'en trouver une en 1080p.

Merci d'avance!

Hors ligne