#0 Re : -1 » /* Topic des codeurs [8] */ » Le 21/04/2013, à 19:27
- Rolinh
- Réponses : 1181
Ah ouais, effectivement.
J'ai pas retouché à Rosalind (mais j'ai tout fait en Ruby). Je pourrais recommencer en Python ![]()
(bon, pas vraiment le temps malheureusement)
#1 Re : -1 » /* Topic des codeurs [8] */ » Le 23/04/2013, à 02:27
- Rolinh
- Réponses : 1181
J'ai fait de l'OO en R... Bah que c'est moche... (à mon avis)
library('MASS')
# class for Linear Discriminant Analysis classifier
setClass("LDA", representation(), prototype())
setMethod("train.classifier", "LDA", function(object, ts) {
f <- paste(names(ts)[dim(ts)[2]], "~")
g <- paste(names(ts)[-dim(ts)[2]], collapse ="+")
formula <- as.formula(paste(f, g))
return (lda(formula, ts))
})
setMethod("eval.classifier", "LDA", function(object, ts, classifier) {
cl <- ts[,dim(ts)[2]]
return (predict(classifier, ts)$class == cl)
})Et comme j'ai fait plusieurs classifiers (Naive Bayes, Decision Tree, Linear Discriminant Analysis et Majority Vote), j'ai voulu que chacune des mes classes implémente ces deux méthodes. Ce qui me donne un truc du genre (où pour chacune des classes de mes classifieurs j'implémente les deux méthodes):
# These methods need to be publicly available
setGeneric("train.classifier", function(object, ts) {
standardGeneric("train.classifier")
})
setGeneric("eval.classifier", function(object, ts, classifier) {
standardGeneric("eval.classifier")
})
# load classifiers
source('src/naivebayes.R')
source('src/decisiontree.R')
source('src/lineardiscriminantanalysis.R')
source('src/majorityvote.R')Franchement, on a fait mieux niveau syntaxe et cohérence du langage... Ou bien c'est moi qui n'ai pas fait ça de la bonne façon ?
Tiens, d'ailleurs, j'ai remarqué que ceci était possible:
rval[1] <- rval[2] <- 0.5Pratique.
#2 Re : -1 » /* Topic des codeurs [8] */ » Le 23/04/2013, à 11:28
- Rolinh
- Réponses : 1181
J'ignorais même que deux modèles cohabitaient.
Et oui, c'est typiquement le concept de classe abstraite que j'ai d'abord voulu reproduire mais je n'en avais finalement pas vraiment besoin et je trouvais que cela allourdissait le code pour un bénéfice inexistant dans mon cas.
Merci pour tes liens d'ailleurs.
Ouais, ou tout simplement :
rval[1:2] <- 0.5
Heu... oui effectivement...(bon, vu l'heure où j'ai posté...).
J'aurais plutôt du mettre un truc dans le genre:
a <- b <- 2J'étais juste agréablement surpris que ça fonctionne en R (peut-être parce que R ne m'a quasiment jamais agréablement surpris jusqu'à présent...).
C'est par exemple impossible en Lua (au contraire de Ruby, Python ou même Matlab/Octave):
Lua 5.2.2 Copyright (C) 1994-2013 Lua.org, PUC-Rio
> a = b = 2
stdin:1: unexpected symbol near '='#3 Re : -1 » /* Topic des codeurs [8] */ » Le 24/04/2013, à 18:52
- Rolinh
- Réponses : 1181
C'est normal ![]()
C'est en raison de la supension temporaire des commentaires qui dure depuis plus d'un an maintenant. J'avais prévu de migrer mon blog vers Geewee, un moteur de blog en Ruby on Rails écrit par un ami (qui avait justement commenté sur l'article que tu cites) mais ça ne s'est pas encore fait car il reste des choses à peaufiner sur le moteur de blog. Un autre ami l'a porté sur Rails 3 (il était initialement conçu avec Rails 2) mais il reste 2-3 trucs à faire et il n'est du coup pas encore publié et il faut surtout que j'adapte le thème de mon blog pour Geewee. C'est peut-être pas trop long/compliqué mais je ne me suis pas encore penché dessus.
La migration du blog fait partie des petits trucs que je n'ai toujours pas eu le temps de faire malheureusement.
Je trouve quand même sympa de pouvoir avoir des commentaires donc c'est quelque chose qui sera réhabilité. Tu avais une question particulière ?
#4 Re : -1 » /* Topic des codeurs [8] */ » Le 27/04/2013, à 15:48
- Rolinh
- Réponses : 1181
Je suis sur le point de publier une lib en C qui permet de générer des fichiers AVI à partir d'un flux vidéo + audio. Il s'agit en fait d'un fork d'une librairie que j'utilise dans le cadre de mon projet de vidéo en embarqué (libkohn-avi).
J'ai besoin de vos conseils/éclaircissement sur ces points:
J'ai déjà apporté pas mal de changements à la librairie (et d'autres sont à venir). Étant donné qu'elle est sous LGPL, je suis obligé de redistribuer mes changements et, en plus, sous la même licence ou la GPL. Vous confirmez? (Ça me saoule un peu car je préfère favoriser les licences plus "libres" quand à leur utilisation, surtout pour une librarie mais bon... je vais essayer de contacter l'auteur de la lib, sait-on jamais s'il accepte que je publie ma version sous une autre licence (BSD/MIT ou Apache).
Il n'est pas précisé quelle version de la LGPL s'applique. Il y a seulement ce bout de texte en entête des fichiers sources:
This code is copyright 2008-2011 by Michael Kohn
This code falls under the LGPL license
Du coup, quelle version de la LGPL dois-je utiliser? Forcément la dernière (donc la 3) ou bien je peux prendre la 2.1?Je ne suis pas trop sûr de quelle façon je suis censé répartir mes fichiers sources dans mon dépôt. Concrètement, j'ai pour le moment 6 fichiers sources (3 C et 3 header). Seul une paire de fichiers contient les fonctions qui sont censées être utilisées lorsque l'on utilise la lib dans un programme. Une paire contient des fonctions utilitaires générales et la dernière paires des fonctions utilitaire pour la création du fichier AVI.
Je pensais à quelque chose dans le genre (avec éventuellement un dossier pour des tests):
├── LICENSE
├── Makefile
├── README.md
├── demo
│ ├── demo.c
│ └── demo.h
├── doc
│ └── Doxyfile
└── src
├── gwavi.c
├── gwavi.h
└── utils
├── avi-utils.c
├── avi-utils.h
├── fileio.c
└── fileio.h
Avec génération de libgwavi.so à la racine du dossier. Ça vous parait correct?
Ah, une fois publiée, une revue de code sera toujours bienvenue, surtout pour une lib. ![]()
#5 Re : -1 » /* Topic des codeurs [8] */ » Le 27/04/2013, à 16:15
- Rolinh
- Réponses : 1181
Bah en fait problème réglé: je suis en ce moment en train de parler avec l'auteur original de la lib et il me dit que je peux choisir la licence qui me plait, tant que je lui "give credits". ![]()
3-clause BSD ça sera alors. C'est sympa de sa part et il me dit qu'il est content que son code serve à d'autres personnes.
#6 Re : -1 » /* Topic des codeurs [8] */ » Le 27/04/2013, à 17:51
- Rolinh
- Réponses : 1181
que contiennent avi-utils.c et fileio.c ?
(c'est toujours vague 'utils' comme nom, non ?)
avi-utils.c contient des fonctions utiles pour... la création d'un fichier AVI, tel que création du header etc.
fileio.c contient des functions relatives aux... IO, telles que write_int, write_chars_bin, etc.
Sinon, merci pour les infos et le PDF, qui me sera bien utile je pense. ![]()
Faut encore que je me penche plus en détail sur le format pour améliorer la lib.
#7 Re : -1 » /* Topic des codeurs [8] */ » Le 27/04/2013, à 20:03
- Rolinh
- Réponses : 1181
Pour ce qui est du multiplexage, ce n'est pas moi qui m'en occupera mais la manière dont l'utilisateur de la lib l'utilise.
En fait, la lib propose les fonctions suivantes:
struct gwavi_t *gwavi_open(char *filename, int width, int height, char *fourcc,
int fps, struct gwavi_audio_t *audio);
int gwavi_add_frame(struct gwavi_t *gwavi, unsigned char *buffer, size_t len);
int gwavi_add_audio(struct gwavi_t *gwavi, unsigned char *buffer, size_t len);
int gwavi_close(struct gwavi_t *gwavi);Je pense que les noms sont parlant d'eux-mêmes. ![]()
Pour les détails, faudra juste attendre que je publie le code (ce qui ne devrait pas trop tarder).
#8 Re : -1 » /* Topic des codeurs [8] */ » Le 27/04/2013, à 21:06
- Rolinh
- Réponses : 1181
L'utilisateur ne peux pas choisir la version du conteneur ? (AVI 1.0 ou AVI 2.0)
Non, ça n'est pas prévu et je ne pense pas que ça le sera.
J'ai déjà mis du H264 dans un AVI avec cette lib et ça marche sans problèmes (pour ce que je l'ai testé). En fait, l'application de vidéo en embarqué que j'écris génère un flux vidéo (720p et 1080p pour le moment) compressé en H264 et le met dans un fichier AVI via cette lib (il est possible de mettre le flux dans d'autres conteneurs aussi, évidemment).
#9 Re : -1 » /* Topic des codeurs [8] */ » Le 27/04/2013, à 21:26
- Rolinh
- Réponses : 1181
Ouep et c'est bien dommage d'ailleurs. C'est juste qu'un client potentiel souhaite absolument de l'AVI donc voilà. Pour le coup, j'ai cherché une lib pour me simplifier la vie, je suis tombé sur libkohn-avi et vu que j'y apporte des changements, je les publie sous une nouvelle lib pour la création d'AVI.
J'ai prévu mon appli pour facilement envoyer le flux compressé H264 dans d'autres types de conteneurs voir dans plusieurs conteneurs différents à la volée ce qui fait que je vais aussi me pencher sur d'autres formats.
#10 Re : -1 » /* Topic des codeurs [8] */ » Le 27/04/2013, à 21:52
- Rolinh
- Réponses : 1181
C'est vrai que "utils" n'est peut-être pas pertinent. Le truc, c'est que le seul "header public" est gwavi.h.
Du coup, si je te suis bien, je devrais plutôt faire le layout suivant?
├── AUTHORS.md
├── LICENSE
├── Makefile
├── README.md
├── doc
│ └── Doxyfile
├── examples
│ ├── Makefile
│ ├── demo.c
│ └── demo.h
├── inc
│ └── gwavi.h
├── lib
└── src
├── avi-utils.c
├── avi-utils.h
├── fileio.c
├── fileio.h
└── gwavi.c#11 Re : -1 » /* Topic des codeurs [8] */ » Le 27/04/2013, à 22:24
- Rolinh
- Réponses : 1181
Ouep mais ça me va bien le inc pour le coup vu que pour utiliser la lib, il y a juste besoin d'include gwavi.h.
Bon, je vais écrire le Makefile en conséquence et je publierais tout ça.
#12 Re : -1 » /* Topic des codeurs [8] */ » Le 27/04/2013, à 23:31
- Rolinh
- Réponses : 1181
Non, elle prévient rien du tout.
Comme tu dis, je pourrais mettre une note à ce propos, genre dans le readme. Enfin bon, dans un autre sens, ça veut dire qu'il faudrait que je liste tous les fourcc et que je dise en détail lesquels sont supportés et lesquels ne le sont pas. Je ne sais pas si j'ai vraiment envie de m'amuser à ça.
Bon, je finirais demain. Il ne me reste plus qu'à configurer doxygen et écrire une application de démo. Bon, l'application de démo attendra je pense. Je mettrais un disclaimer pour prévenir que la lib n'est pas encore en version finale.
#13 Re : -1 » /* Topic des codeurs [8] */ » Le 28/04/2013, à 12:40
- Rolinh
- Réponses : 1181
Bon, voilà, c'est publié.
Il me reste encore à documenter les fonctions de la lib. J'ai aussi quelques warnings qu'il faut que je corrige. Enfin bon, j'ai mis un petit disclaimer comme quoi il y a encore un petit peu de travail à faire dessus.
EDIT: à propos, je viens d'apprendre que les dernières versions de Doxygen parsent correctement le markdown. Par ailleurs, c'est aussi facile d'indiquer le README.md comme fichier principal qui doit être parsé et affiché sur index.html. Ça rend vraiment bien! Un make doc si vous voulez voir. Ah, l'url de clone n'est pas spécifiée donc pour cloner:
git clone git://gw-computing.net/libgwavi.git#14 Re : -1 » /* Topic des codeurs [8] */ » Le 03/05/2013, à 18:22
#15 Re : -1 » /* Topic des codeurs [8] */ » Le 03/05/2013, à 19:25
- Rolinh
- Réponses : 1181
@The Uploader: ce n'est pas grand chose mais je suis content si ça peut servir à d'autres personnes ![]()
Ça fait un moment que je voulais faire une remarque (mais avant je voulais faire des tests, voire faire un patch mais en fait j’ai pas trop de temps en ce moment
)
Dans fileio.c, les écritures octet par octet ça doit être plutôt moche niveau perf’.
Ça serait pas équivalent de passer par un bon vieux fwrite ? Où j’ai raté un truc ?
Oui, très certainement. Pour être honnête, je n'ai pas non plus énormément de temps non plus et j'avais besoin de la lib assez vite pour mon projet video. Du coup, je me suis contenté d'ajouter des vérifications d'erreurs et de la doc à la lib originale en me disant que je reviendrais dessus plus tard si je trouve le temps. D'autant plus que gcc me warn de conversion implicite de signe sur write_int(). Quand je cross-compile la lib pour ARM (via codesourcery), je me tape carrément une pile de warnings de ce genre.
Ça me rappelle quand j’avais du jouer avec du YUV 422 lors de mon dernier projet scolaire (bon j’avais pas eu besoin de le découper par contre).
Mon use-case est en fait exactement celui que j'ai mis dans le README. En fait, je suis en train de faire des mesures de PSNR via le logiciel de référence H264/AVC et pour que le calcul soit corrects, il faut que j'aligne la première frame de ma vidéo compressée en H264 via mon appli avec la vidéo de référence en YUV. Parce que s'il y a un décalage ne serait que d'une frame, le résultat du PSNR ne vaut évidemment plus rien...
Pour ma part, Rosalind attendra que je sois moins chargé...
EDIT: @The Uploader: au fait, il a rejoint la liste des paquets que je maintiens sur AUR.
#16 Re : -1 » /* Topic des codeurs [8] */ » Le 03/05/2013, à 21:22
- Rolinh
- Réponses : 1181
Le SSIM est beaucoup plus fiable que le PSNR
Oui, je suis au courant. Seulement, pour autant que je sache, le décodeur de référence H264 ne permet que le calcul du PSNR.
Ceci dit, ça pourrait être intéressant que je fasse aussi le calcul du SSIM. Mais bref, comme tu dis, dans tous les cas ce ne sont pas des métriques à prendre pour argent comptant, seulement un indicateur.
Donc évidemment, je ne tiens pas compte uniquement de ça. Il faut d'ailleurs aussi que je fasse des tests de random access. Le but de tout ça, c'est de jouer avec les paramètres de l'H264 pour trouver un bon compromis qualité/taille de fichier.
#17 Re : -1 » /* Topic des codeurs [8] */ » Le 04/05/2013, à 16:28
- Rolinh
- Réponses : 1181
Non, je n'ai pas forcément toujours le même type de source. En fait, mon appli est capable de prendre des presets en fonction de ce qui est souhaité et du type d'input. Le but est de chercher plusieurs réglages pour offrir des presets en fonction.
#18 Re : -1 » /* Topic des codeurs [8] */ » Le 04/05/2013, à 21:09
- Rolinh
- Réponses : 1181
Le x264 a déjà des presets selon les sources (--preset et --tune), tu peux sûrement t'en inspirer.
Peut-être. J'y jetterais un œil.
Tu bosses sur des projets video?
#19 Re : -1 » /* Topic des codeurs [8] */ » Le 09/05/2013, à 12:38
- Rolinh
- Réponses : 1181
@Steap: en ce moment je suis en stage à 50% en entreprise où je fais mon mémoire de bachelor (le reste du temps est occupé par l'université). J'y fais du développement spécifique à une carte spécialisée dans la vidéo à destination de l'aéronautique (drones, hélicoptères, avions). Le côté sympa c'est que j'ai une Ubuntu 12.04 comme post de dev. Par contre, le développement n'est pas open-source. De toute façon, c'est plutôt de bas-niveau et spécifique aux cartes électroniques créées par l'entreprise. Et non, pas de télétravail d'autant que cela ne serait pas vraiment possible.
@Πυλάδης: il y a eu des problèmes sur le dépôt archlinux, ce qui rendait les derniers paquets non-téléchargeable. Ça a été résolu hier et j'ai ré-uploadé les paquets pour dfc. Par contre, les paquets sur archlinuxfr ne sont pas signés. Il faut donc mettre le SigLevel à Never dans le pacman.conf:
# archlinuxfr community repo
[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$archBon, je t'avouerais que je maintiens quelques paquets sur le dépôt archlinuxfr mais que... je ne l’utilise pas moi-même. La principale raison est que de nombreux paquets n'y sont pas bien maintenus. Bon, il n'y a pas longtemps, un des admin a entrepris un gros nettoyage et viré les paquets obsolètes et non-maintenus donc ça devrait aller mieux.
#20 Re : -1 » /* Topic des codeurs [8] */ » Le 11/05/2013, à 12:18
- Rolinh
- Réponses : 1181
Un article que j'ai trouvé intéressant à propos du workflow des pull-requests sur Github.
Personnellement, je ne trouve pas ce système de pull-requests pratique. Si je veux contribuer à un projet qui utilise git (mais n'est pas sur Github), alors je procède ainsi:
- clone du dépôt
- création d'une branche locale
- modif souhaitées dans la branche locale, avec commit etc.
Une fois que j'ai fini mes modifs, je pull un dernier coup puis git format-patch et envoi du tout par e-mail. S'il y a un problème, je retravaille dans ma branche et refait la même chose.
Je trouve ce workflow très simple. Le fait de devoir forker, cloner le fork, pusher et faire une pull-requests à la façon Github, je trouve ça un peu pénible. Enfin, je ne m'y prend peut-être pas de la bonne façon...
#21 Re : -1 » /* Topic des codeurs [8] */ » Le 11/05/2013, à 14:25
- Rolinh
- Réponses : 1181
La façon GitHub est retarded.
Ah, je ne suis pas le seul de cet avis alors. ^^
Le problème est qu'il y a un risque que des développeurs sur GitHub ne connaissent même pas la manière normale de faire.
Tu crois vraiment? Ça me parait invraisemblable...
#22 Re : -1 » /* Topic des codeurs [8] */ » Le 13/05/2013, à 12:51
- Rolinh
- Réponses : 1181
Drônes, hélicos, avions, ça fait un peu "militaire", non ?
Non, pas forcément. Un exemple d'application est la détection d'objets en approche par un avion. C'est aussi utile dans le civil. ![]()
#23 Re : -1 » /* Topic des codeurs [8] */ » Le 14/05/2013, à 00:20
#24 Re : -1 » /* Topic des codeurs [8] */ » Le 14/05/2013, à 12:31
- Rolinh
- Réponses : 1181
C'est journée publication de code ![]()