#define FOR(i,n) for(int i=0; i<(n); i++)
typedef vector VI;
struct CrazySwitches {
int minimumActions(vector s) {
int n = s.size();
int N = (1<<n);
VI v(N * n, 999999); // idx = N * room + on bits
v[1] = 0;
queue q;
q.push(1);
while (!q.empty()) {
int t = q.front(); q.pop();
int on = t % N, r = t / N;
FOR(i, n) {
if (s[i] == r && i != r) { // can switch
int tt = t ^ (1<<i);
if (v[tt] > v[t]) v[tt] = v[t], q.push(tt);
}
}
FOR(i, n) if (i != r) {
if ((on & (1<<i)) == 0) continue; // cannot move to this room
int tt = on + i * N;
if (v[tt] > v[t] + 1) v[tt] = v[t] + 1, q.push(tt);
}
}
int ret = v[(n-1) * N + (1 << (n-1))];
return ret == 999999 ? -1 : ret;
}
};
Les programmes doivent etre rapides a ecrire et rapide a executer. Python et ruby sont bons au moins dans la premiere categorie.
Le C++ est populaire a mon avis parce qu'il n'y a aucune penalite a l'exeuction. Sur un probleme, un type a fait un analyse et la verification des depassements de tableaux fait que le C# ou le java sont plutot lent sur un tableau a 3 index par exemple. En C++, tu es sur d'eviter ce genre de probleme.
Pour les macros, meme si tout le monde en utilises quelques unes, ca reste du "sucre syntaxique", c'est a dire que t'economises quelques caracteres mais ca ne va pas plus loin (genre #define ALL(v) (v).begin(), (v).end() ).
Ce qui fait la difference, c'est vraiment la capacite a comprendre rapidement l'algorithme a utiliser et a le coder rapidement. Sur les problemes faciles et moyens, si ton programme fait plus de 50 lignes, c'est que tu n'as pas su simplifier le probleme suffisamment. Sur le probleme dur, je dirai que les 2/3 des solutions font aussi moins de 50 lignes de toute facon. Par contre, il faut s'accrocher pour les comprendre :-)
J'ai essaye mais il ne semble pas possible de livrer les sujets sans s'inscrire. Et a la fin de chaque probleme, il y a un gros copyright.
Je peux quand meme parler des types de problemes. L'avant dernier jeu de problemes etait pas mal:
pb facile:
Soit:
- A tq 10 <= A <= 100000
- B tq A <= B <= 100000
- A-B <= 1000
- trouver le nombre d'entiers entre A et B tq si v est un nb qu'on cherche, il n'y a aucun nombre premier entre v-10 et v+10 inclus
Rappel: temps d'execution en moins de deux secondes.
Exemple :
97001
97691
Returns: 89
La bonne methode, c'est de faire un crible d'Eratosthene. Sinon, meme en y allant bourrin, ca marche. Genre tu iteres sur tous les nombres entre A et B, et pour chacun de ces nombres tu vas de nombre-10 a nombre+10 et pour chacun de ces sous-nombres, tu verifies s'il est premier. J"ai gagne des points en cassant une solution qui faisait (A-B)*20 verifications de nombre premier, sans optimiser ou cacher la recherche de nombre premier en java et qui au final prenait plus de 2 secondes. Des que tu optimises un minimum (cache facon Eratosthene) ou tentative de division par tous les nombre jusqu'a sqrt(n), ca passe en 2 secondes.
Ca parait choquant d'etre bourrin, mais le but, c'est de coder ca en moins de 10 minutes.
Probleme moyen:
Tu plies un carre en 2 jusqu'a obtenir un triangle faisant 1/8 de ton carre original (le dernier pli est en diagonal). Tu fais des trous sur ce triangle, et il faut generer le carre deplie avec les trous.
L'entree est un vector qui represente le triangle avec des * pour les trous et des . pour les non-trous.
C'etait plutot facile, il suffit de faire des symetries dans tous les sens.
Probleme difficile:
Tu as une suite de chambres. Chaque piece contient un interrupteur qui controle la lumiere dans une autre piece. Tu commences avec la premiere piece allumee. Tu peux aller a tout moment dans n'importe quelle piece du moment que la lumiere est deja allumee et tu ne peux pas eteindre la lumiere dans ta propre piece. Tu veux fnir avec la lumiere allumee dans la derniere piece uniquement. Retourner le nombre minimal de deplacement necessaires, ou -1 si c'est pas possible.
Celui-la etait coton. Mais j'avais deja vu un probleme dans le meme style. Chaque etat global de tes pieces peut etre represente sous forme d'un entier, avec un bit par piece + une valeur entre 0 et 15 pour ta position. Tu veux partir de l'etat 1e piece allumee, present dans la premiere piece, jusqu'a l'etat derniere piece allumee, present dans la derniere piece. C'est donc un graphe dans lequel tu cherches le chemin le plus court. Pour un etat donne, il est facile de trouver tous les etats que tu peux rejoindre : le meme etat avec l'interrupteur qui a bascule (cout 0) ou bien le meme etat mais present dans une autre piece allumee (cout 1). Un petit coup de djikstra et tu trouves le chemin le plus court.
A coder en une heure, je peux te dire que tu n'a pas le temps de respirer.
J'ai pas precise mais en fait, tu codes dans une application java qui compile et execute le code sur leur serveur. Au final, tu livres un bout de code source donc c'est vraiment topcoder qui impose le langage.
Leur business model est d'aider des grosses boites a trouver des bons programmeurs. Ils prennent donc des langages populaires dans l'industrie, d'ou l'absence de langage un peu moins conventionnels, mais qui conviendraient tres bien aux types de problemes proposes (lisp, ocaml, haskell, scheme ou python, ruby).
> la difficulté de créer des programmes efficaces avec des processus se déroulant en parallèle.
Sans meme aller jusqu'a l'efficacite, concevoir et debugger un programme dont les morceaux s'executent en parallele est enormement plus complexe que de concevoir et debugger un programme normal.
Perso, je pense que les threads ne doivent etre utilises qu'en cas d'extreme necessite couplee avec une necessite extreme. Genre calculs mathematiques, programmes gerant n connexions, etc.
Pour parallelise un programme plutot monotache dans son fonctionnement, c'est tout de suite beaucoup plus complique. Il faut isoler des portions du programme qui n'ont pas besoin d'ecrire des donnes communes, il faut regarder l'ordonancement de chaque tache pour voir si on peut pas en lancer qqs'une avant les autres, etc.
Je prefere plutot que mon noyau et son scheduler qui s'occupe de paralleliser l'utilisation des ressources de ma machine, que le compilateur qui essaye de paralleliser un programme.
Pour en revenir aux programmes pseudo-monotaches, je me demande a quel point ce n'est pas plus simple de faire un scheduler interne (ce qu'a fait mplayer) que de faire de la programmation par thread a tout va. Au moins, avec ton scheduler, tu sais ou tu vas.
C'est un fait connu que gcc n'est pas un excellent compilateur dans tous les domaines. C'est pas facile de compiler tous les langages de la terre sur toutes les architectures de l'espace et d'etre meilleur que tout le monde. Ce qu'il faut juger, c'est la distance. 20%, ca me parait acceptable tout en restant a ameliorer. Au dela, c'est qu'il y un truc qui ne va pas.
En general, gcc se fait battre par des compilos optimises pour des architectures specifiques, qui ont beaucoup moins de contraintes globales que gcc.
En vitesse de compilation, il se fait battre a plat de couture par Visual C++ vieille version.
Des projets comme KDE galerent parce que la gestion du code virtuel dans les classes n'est pas optimal. De ce que j'en comprends, le support C++ evolue tres lentement ce qui ralentit parfois de facon notable des gros projets C++. KDE etant probablement le plus gros projet Open Sourc en C++ qui utilise gcc.
Sur des archis embarques petite, je doute que gcc soit vraiment super efficace. Pour ce type d'architecture, ecrire un compilateur qui ne fait que du C et tient compte de certains caracteristiques des petits micros permet de meilleurs resultats que l'artillerie gcc.
Tu peux regarder sdcc (http://sdcc.sf.net) qui parait plus adapte. Sur certains projets, il arrivait au niveau de Keil.
Sinon, je travaille aussi dans l'embarque sur des micro 8bits et la facon dont tu ecris ton code a une influence certaine sur la taille du code genere par certains compilateurs. Certains vont mieux optimiser les acces aux variables globales, d'autres les acces aux variables locales. Certains n'aiment pas du tout les pointeurs (genre Keil, il aime pas du tout du tout les pointeurs au dela de 64K sur une archi 8 bits), d'autres les digerent facilement. Et chacun ont leur bugs : Codewarrior qui addresse les membres d'une structure sur un registre == pas possible d'avoir une strucutre plus grosse que 255 octets.
<< cite moi une seule plateforme, un seul framework dont l'api ne bouge pas dans le temps >>
win32: tu peux encore compiler tes programmes windows 3.1 aujourd'hui, ils fonctionnent toujours. Ca doit faire dans les 15 ans de plate-forme stable. C'est d'ailleurs une des forces de windows.
Sinon, on peut citer gtk, Gnome, KDE et Qt, dont les versions sont entierement compatibles entre elles si on ne change pas le premier chiffre. On tape dans les 3-4 ans de stabilite. Et deja avec 3-4 ans, ce n'est pas suffisant, il y a pas mal d'applications qui ne sont jamais portees et sont en quelque sorte perdues. Sous windows, ca m'arrive d'utiliser des applis qui clairement ont ete ecrites pour windows 3.1 et qui fonctionnent tres bien.
Tout ca pour dire que la stabilite des APIs, ce n'est pas un truc a prendre a la legere et que les faire varier meme de facon mineures tous les 6 mois, c'est le meilleur moyen de tuer un projet.
T'as raison, les normes et les standards, ca sert vraiment a rien.
Je propose que chacun decide de lui-meme de la facon dont il orthographie les mots qu'il utilise. Il pourra proteger son orthographe personelle sous GPL ou bien sous une licence proprietaire. L'academie francaise pourrait meme se faire plein de fric avec une histoire pareille.
bon, je sors, je suis pas en forme pour faire un bon troll
Je ne connais pas les coulisses de java et .NET mais a lire pas mal d'articles sur le sujet, il semble que .NET ait une architecture de meilleure qualite que java et permette de faire des choses que java ne fait pas.
Le seul exemple que je connaisse avec precision, c'est python. Jython, l'implementation de python en java est deux fois plus lente que l'implementation de reference. Ironpython, l'implementation au dessus du CLR (la VM de .NET) est plus rapide que l'implementation de reference.
Ah, donc je ne suis pas le seul a trouver que ce chef d'oeuvre de la literature fantastique est chiant a mourir. J'ai jamais depasse les 30 pages personellement.
Par contre, des trucs comme Shanara, qualifie de literature purement commerciale par les puristes, ca passe tout seul :-)
Je poste juste un lien vers le blog de Zack Rusin, (le mec qui developpe EXA, la nouvelle architecture d'acceleration de X). Pour lui, Gnash n'apporte pas de solution, et est un projet du domaine public recupere par la FSF (je n'ai pas verifie ce point) en modifiant tranquillement la licence.
On est loin de la tournure de la depeche, qui sous-tend que la FSF aurait aider ce projet a se developper.
A ma connaissance, la FSF n'a d'ailleurs jamais aide aucun projet a se developper. Ils ont eu un role politique important mais pas de role actif en terme de mecenat du developpement du logiciel libre. C'est peut-etre tres bien comme ca, mais quand meme, ca me surprend toujours que ce soit Caldera Linux et non la FSF qui aient inventes sourceforge.
C'est ultra classique en programmation, c'est le modele de conception "poid leger" ou pour ceux qui comme moi comprennent pas bien le francais, le design pattern flyweight. Cf le bouquin "Design Pattern", par le GoF. A lire si vous faites de la programmaton objet depuis plus d'un an.
Moi j'ai d'autres soucis qui sont un peu dommage, mais pas vraiment bloquant :
- impossible d'importer une mailbox normale via les menu de thunderbird. C'est ironique qu'il soit plus facile de migrer de outlook a thunderbird que d'un autre client libre. Il faut se copier les fichiers mbox a la main et c'est pas convivial du tout.
- impossible de copier l'addresse enjolivee d'un expediteur pour la coller ailleurs. Vraiment pas pratique. Thunderbird propose bien de copier uniquement la partie mail de l'addresse mais parfois, on souhaite conserver le nom aussi.
- impossible de faire du drag'n drop avec les addresses, a partir d'un message. Typiquement, j'ai 3 messages differents auxquels je veux repondre en un seul message. Sur kmail, je fais un drag'n drop des trois addresses dans mon nouveau message. Sur thunderbird, je ne peux que faire un copie/colle des addresses mail strict et c'est un peu lourd et plus lent que le drag'n drop.
- les tnef crees par outlook ne sont pas compris.
- le systeme des filtres a 3 wagons de retards sur kmail. Par exemple, kmail propose automatiquement de filtrer sur les champs X-Mailing-List et propose des filtres intelligents a partir d'un message.
- le fait d'avoir un filtre sur chaque compte est super lourd. J'ai des gens qui peuvent m'ecrire sur 3 comptes differents, je suis obliger de creer 3 filtres differents alors que je n'ai qu'une seule mailbox.
J'ai reporte tout ca dans la base, mais comme c'est plus des problemes d'ergonomie, ca ne reagit pas tres vite.
A part ca, il marche pas mal. Ah oui, il est quand meme vraiment lent aussi.
L'essentiel des autres projets majeurs sortent des mises à jour régulièrement (genre tous les 6 à 9 mois). Debian part déjà sur le principe d'un cycle plus long. Ca me parait dommage, ca veut dire que debian va de nouveau avoir une période où seule la version instable sera interessante à utiliser parce que à jour, avec les problèmes de la version instable.
> le programme [...] doit aussi etre lisible et correctement ecrit
Clairement, les gens que j'ai vus manquent de bouteille en programmation objet, voire ont horreur de ca. Le fait de faire un code lisible ne suffit pas a le rendre maintenable (meme si ca aide), de meme que rajouter des commentaires doxygen ne compense pas une conception de merde.
Plus jamais je ne lancerai un eleve epita ou epitech sans valider la conception de ce qu'il doit me developper. J'ai vraiment eu des resultats catastrophiques avec _tous_ les stagiaires que j'ai eu de ces deux ecoles en terme de conception. Je redonne les notions qui me sont cheres pour une bonne conception :
- encapsulation
- isolation des concepts
- unicite des fonctionnalites (jamais de copie/colle)
- resistance aux erreurs
- possibiltes d'extensions futures
- facilite de debuggage (cas d'un protocole reseau)
Tout ca a ete tres mal traite.
> l'enseignement qu'on nous dispense est assez serieux,
La grosse blague. En tout cas, les epitechens et les epiteens que j'ai vu sont loins de partager ton avis. D'apres eux, la seule valeur de l'enseignement, c'est les projets qui sont confies. Ils ont tous dit que la bonne facon d'apprendre etait de ne pas aller en cours, ou ils perdaient leurs temps, mais de lire des bouquins.
Les gens sortent bien formes, mais pas grace a l'enseignement, qui je le signale est fait par les eleves et rarement par les profs. On se demande a quoi sert l'argent que coute la scolarite.
<< Pas d'accord. Dans ma prépa, il y a une bonne partie des élèves qui veut faire une école dans un domaine qui lui plait, plutôt que X ou Mines à tout prix. >>
Vous etes en sup ou en spe ? En deux ans de formattage, il y a des choses qui changent. Je me suis rappele 3 mois apres avoir integre mon ecole que c'est celle-la que je voulais quand j'etais en sup. Entretemps, j'avais completement oublie cela et j'ai atteri dans cette ecole vraiment par chance.
<< Tu peux très bien concilier travail et loisirs. Par exemple je cours 3 fois par semaine, je passe pas mal de temps à faire de la photo, sans compter le moulage sur dlfp. >>
En prepa ? On doit pas parler de la meme prepa alors. Et encore, je ne suis pas un de ceux qui bossaient le plus. J'ai vu plusieurs personnes ne jamais manger a midi pour pouvoir bosser. Voyons, 1 interro ecrite de 4h de math ou de physique toutes les semaines, un devoir a rendre en math et en physique toutes les semaines, une kholle de math par semaine, une kholle de physique tous les 15 jours, le tout sur des notions que tu apprends pendant la semaine (qui fait que tu ne peux pas trop te reposer sur tes acquis). Une nouvelle notion en math par semaine. Je ne me rappelle pas avoir eu beaucoup de temps pour mes loisirs. Mais peut-etre que je m'etais mal organise.
<< Ils n'avaient qu'à regarder avant ! Je n'ai pas présenté supaero, comme plein de monde n'a pas présenté supelec. >>
Le formattage, c'est dur de lutter contre. Quand toute ta journee, on te prepare a etre le meilleur a ces putains de concours, au bout d'un moment, il n'y a plus que ca qui compte.
<< Dans ma classe de sup, il y avait 14 filles pour 40 élèves soit plus de 3x plus que tes 10%, et à peu près pareil en spé. Et c'est sans compter les Bio et les HEC où il y a une majorité de filles. >>
Ben, on etait pas dans le meme lycee. 1 classe de HEC et 1 classe de bio pour 14 classes de sup et environ autant de spe. Ensuite, 3 ans isoles sur un campus a 12 km de la grande ville la plus proche avec 12 filles pour 122 eleves en 1e annee, puis 20 filles pour 200 eleves.
Attention quand meme. C'est peut-etre le hasard, mais les stagiaires que je vois arriver par les filieres informatique de la fac ont un niveau deplorable.
Mon conseil de recruteur : si tu veux faire de l'informatique plus tard, montre que tu en as fait. Pas juste les exercices en cours, montre un projet ou tu t'es implique. Pour moi, il n'y a pas plus formateur que participer a un projet open source pour apprendre l'informatique. Lire du code, le comprendre, en ecrire, etre critique, s'ameliorer, chercher des solutions etc. Si tu peux mettre ca en avant, tu pourras toujours trouver un bon boulot dans l'informatique, et peut-etre plus facilement que quelqu'un qui aligne juste un diplome mais qui a ecrite en tout 2000 lignes de C en 4 ans.
Bon, je suis quand meme un DRH un peu special donc il se peut que ce que je dise ne soit pas vrai partout. Mais je pense que les qualites qu'il faut mettre en oeuvre pour participer a un projet open source sont tout a fait reutilisables professionellement.
Ce qui me choque le plus dans la prepa, c'est a quel point on rentre dans un moule. Apres une annee de prepa, on n'etait capable de penser qu'en un seul terme : comment faire pour integrer la meilleure ecole. Tous les taupins se retrouvent grosse modo avec le meme classement : 1 -X / ens, 2- Mines/Ponts/Centrale, 3- ENSI prestigieuses, 4- Autres ENSI, 5- Ecoles a concours privees (ICARE, etc).
Oublie les notions d'interet personnel, de loisirs, le fait qu'on peut reussir sa vie sans entrer dans le meilleure ecole du monde, qu'il n'y a pas que le travail qui compte.
Je pense que j'ai eu du bol, juste apres avoir reussi les concours, j'ai reussi a prendre un peu de recul et integrer une ecole qui me plaisait. Alors que j'etait parti pour retaper une annee de prepa pour avoir encore de meilleurs resultats, le leitmotiv de la prepa. J'aurai vraiment gache une annee de ma vie.
Tous mes camarades n'ont pas eu la meme chance. Se retrouver dans une ecole de telecom alors que tu as envie de faire de la physique, de la chimie ou des maths ou des materiaux, c'est tres frustrant. Les 6 premiers mois de l'ecole d'ingenieur sont consacres a balayer cette deception et ce n'est pas toujours facile. C'est quand meme dommage de renoncer a un domaine qui t'attirait avant que tu ne rentres dans le moule ("devenir le meilleur, les meilleurs notes, les meileures ecoles"). Je ne pense pas que ca suffise a expliquer pourquoi les eleves ingenieurs adorent se bourrer la gueule, mais ca donne quand meme des indices. C'est triste de renoncer a ses reves.
Intellectuellement, la prepa, c'est pas desagreable. On balaye beaucoup de sujets (pas assez en profondeur), on devient des machines a resoudre des problemes et a apprendre. Humainement, je pense que c'est une catastrophe. Retrospectivement, je pense que je preferai avoir une montee en charge plus douce de la quantite de travail sur 5 ans, comme ca se fait dans les facultes etrangeres, ou on choisit quand meme la voie qu'on aura au lieu de dependre de ta place parmi les 2000 admis pour avoir l'ecole que tu ne voulais peut-etre pas.
Ce qui est dommage, c'est que ce systeme debile est entretenu dans la vie professionelle. Quand tu as 10 ans de vie professionnelle derriere toi, on devrait t'evaluer avant tout sur ton passe professionnel. Et bien non, en France, on te ressort la grille magique qui dit que si tu as fait X-Mines, tu gagneras deux fois plus que machin qui a fait l'Ensimag.
Si tu sais travailler de facon autonome (par travailler, il faut comprendre bosser beaucoup plus que ce que tu as fait en terminale), je conseille la fac, ou tu pourras choisir des sujets a travailler sur ton temps libre. Apres, avec un bon classement, tu rentres sans souci en admission parallele dans une grande ingenieur. Et tu n'as pas l'impression d'avoir perdu deux ans de ta vie a bosser comme un esclave. Et en fac, il y a des filles. La prepa comme les ecoles d'ingenieurs, c'est 10% de filles en moyenne.
Epita / Epitech ont ca pour elles que leur formation est extremement poussee. J'ai jamais vu de gens toucher a autant de domaines de la programmation en aussi peu de temps. A mon avis, on ne retrouve pas du tout cela a la fac.
Une grosse difference a mon sens, c'est que tu peux entrer a epita / epitech sans rien connaitre a l'info et ressortir en etant programmeur a tout faire. Les stagiaires que je vois qui sont passes par la fac et qui ne connaissent pas l'info ne sont bon a rien faire.
Le gros probleme de ces deux ecoles, c'est vraiment les methodes de travail. Les etudiants sont submerges de projets, donc sont obliges de travailler dans l'urgence et ne sont pas evalues sur la maintenabilite ou la qualite de leur code mais juste sur "c'est bon ca marche!". Ca peut correspondre aux besoins de certaines entreprises, mais c'est a l'oppose de la demarche qualite qu'on voit arriver peu a peu dans le monde professionnel depuis plusieurs annees autour du developpement logiciel.
Moi, je ne veux pas d'un mec comme ca dans mon projet. Apres, il y a les exceptions.
J'ai eu a supervise 4 stagiaires epita en deux ans et deux stagiaires epitech. Ce que j'en retiens, c'est :
- la distinction epita / epitech est une grosse blague. Les deux ecoles fabriquent des programmeurs, un point c'est tout
- les stagiaires etaient des bourrins en programmation. Tres efficaces, tres autonomes. Par contre, ils etaient completement a la rue face a des notions de maintenabilite du code, integration du code dans un contexte plus large, utilisation de l'existant, bonne conception objet, bonne encapsulation, robustesse du code, etc. C'est a dire tous les atouts qui font la difference entre un developpeur pisseur de code et un bon developpeur.
Au final, ils m'ont tous torche mes projets, sauf que leur truc est immaintenable. Je suis pratiquement oblige de tout reecrire derriere quand je veux utiliser les projets qu'ils ont faits.
Ce n'est pas ce que j'attends d'un ingenieur developpeur. Un ingenieur doit etre capable de reflechir avant de realiser, de penser large, et de tenir compte de ce qui existe. Pour citer un de mes collegues : "Ce sont de tres bon techniciens de la programmation".
Sans bases mathematiques, il y a des pans entiers du monde de la programmation qui leur echapperont. Et l'idee de vouloir coder a tout prix, je comprends mais je recherche qqch de plus chez les gens que j'embauche.
Le nom du projet me parait tres risque. Ma boite precedente, Oberthur Card Systems a developpe des produits sur carte a puce avec des noms en ic : authentic (authentification, comparaison d'empreinte digitales), SIMphonic (cartes GSM), etc.
Je doute qu'ils aient oublie de reserver la marque. Et il y a clairement un conflit puisque les deux produits servent a la meme chose, l'authentification.
Ca fait des annees que Oberthur developpe la solution d'authentification a base de authentic, donc je pense que ta boite n'a pas bien fait son travail de recherche de nom de produit.
J'ai jete un coup d'oeil. Ca fait exactement ce que je veux, et plus, sauf que cote client windows, c'est pas encore ca. En fait, il n'y a visiblement pas de standard simple de partage de calendrier et de contact. Il y a des formats de calendrier et de contact (ical, vcf) mais pas d'interface unifiee pour les gerer.
Une etude d'une boite gerant de l'externalisation de serveurs mails avait fait une petite analyse : clamwin a la meme qualite, voire est plus rapide que les antivirus commerciaux. Ils avaient mesure le temps de reaction pour sortir des signatures sur des nouveaux virus, et le nombre de virus detectes.
[^] # Re: Question bête
Posté par Philippe F (site web personnel) . En réponse au journal Topcoder. Évalué à 2.
[^] # Re: Python VS C#
Posté par Philippe F (site web personnel) . En réponse au journal Topcoder. Évalué à 1.
Le C++ est populaire a mon avis parce qu'il n'y a aucune penalite a l'exeuction. Sur un probleme, un type a fait un analyse et la verification des depassements de tableaux fait que le C# ou le java sont plutot lent sur un tableau a 3 index par exemple. En C++, tu es sur d'eviter ce genre de probleme.
Pour les macros, meme si tout le monde en utilises quelques unes, ca reste du "sucre syntaxique", c'est a dire que t'economises quelques caracteres mais ca ne va pas plus loin (genre #define ALL(v) (v).begin(), (v).end() ).
Ce qui fait la difference, c'est vraiment la capacite a comprendre rapidement l'algorithme a utiliser et a le coder rapidement. Sur les problemes faciles et moyens, si ton programme fait plus de 50 lignes, c'est que tu n'as pas su simplifier le probleme suffisamment. Sur le probleme dur, je dirai que les 2/3 des solutions font aussi moins de 50 lignes de toute facon. Par contre, il faut s'accrocher pour les comprendre :-)
[^] # Re: Question bête
Posté par Philippe F (site web personnel) . En réponse au journal Topcoder. Évalué à 4.
Je peux quand meme parler des types de problemes. L'avant dernier jeu de problemes etait pas mal:
pb facile:
Soit:
- A tq 10 <= A <= 100000
- B tq A <= B <= 100000
- A-B <= 1000
- trouver le nombre d'entiers entre A et B tq si v est un nb qu'on cherche, il n'y a aucun nombre premier entre v-10 et v+10 inclus
Rappel: temps d'execution en moins de deux secondes.
Exemple :
97001
97691
Returns: 89
La bonne methode, c'est de faire un crible d'Eratosthene. Sinon, meme en y allant bourrin, ca marche. Genre tu iteres sur tous les nombres entre A et B, et pour chacun de ces nombres tu vas de nombre-10 a nombre+10 et pour chacun de ces sous-nombres, tu verifies s'il est premier. J"ai gagne des points en cassant une solution qui faisait (A-B)*20 verifications de nombre premier, sans optimiser ou cacher la recherche de nombre premier en java et qui au final prenait plus de 2 secondes. Des que tu optimises un minimum (cache facon Eratosthene) ou tentative de division par tous les nombre jusqu'a sqrt(n), ca passe en 2 secondes.
Ca parait choquant d'etre bourrin, mais le but, c'est de coder ca en moins de 10 minutes.
Probleme moyen:
Tu plies un carre en 2 jusqu'a obtenir un triangle faisant 1/8 de ton carre original (le dernier pli est en diagonal). Tu fais des trous sur ce triangle, et il faut generer le carre deplie avec les trous.
L'entree est un vector qui represente le triangle avec des * pour les trous et des . pour les non-trous.
Exemple :
{"*",
"..",
".*.",
".**.",
".*.**"}
Returns:
{"**.*..*.**",
"*.**..**.*",
".*.*..*.*.",
"***....***",
"....**....",
"....**....",
"***....***",
".*.*..*.*.",
"*.**..**.*",
"**.*..*.**" }
C'etait plutot facile, il suffit de faire des symetries dans tous les sens.
Probleme difficile:
Tu as une suite de chambres. Chaque piece contient un interrupteur qui controle la lumiere dans une autre piece. Tu commences avec la premiere piece allumee. Tu peux aller a tout moment dans n'importe quelle piece du moment que la lumiere est deja allumee et tu ne peux pas eteindre la lumiere dans ta propre piece. Tu veux fnir avec la lumiere allumee dans la derniere piece uniquement. Retourner le nombre minimal de deplacement necessaires, ou -1 si c'est pas possible.
Maximum 16 pieces.
Exemple:
{7, 11, 1, 12, 6, 3, 0, 2, 6, 0, 0, 5, 9}
Returns: 15
Celui-la etait coton. Mais j'avais deja vu un probleme dans le meme style. Chaque etat global de tes pieces peut etre represente sous forme d'un entier, avec un bit par piece + une valeur entre 0 et 15 pour ta position. Tu veux partir de l'etat 1e piece allumee, present dans la premiere piece, jusqu'a l'etat derniere piece allumee, present dans la derniere piece. C'est donc un graphe dans lequel tu cherches le chemin le plus court. Pour un etat donne, il est facile de trouver tous les etats que tu peux rejoindre : le meme etat avec l'interrupteur qui a bascule (cout 0) ou bien le meme etat mais present dans une autre piece allumee (cout 1). Un petit coup de djikstra et tu trouves le chemin le plus court.
A coder en une heure, je peux te dire que tu n'a pas le temps de respirer.
[^] # Re: Python VS C#
Posté par Philippe F (site web personnel) . En réponse au journal Topcoder. Évalué à 2.
Leur business model est d'aider des grosses boites a trouver des bons programmeurs. Ils prennent donc des langages populaires dans l'industrie, d'ou l'absence de langage un peu moins conventionnels, mais qui conviendraient tres bien aux types de problemes proposes (lisp, ocaml, haskell, scheme ou python, ruby).
[^] # Re: Toujours pas l'intégration de GOMP...
Posté par Philippe F (site web personnel) . En réponse à la dépêche Sortie de la version 4.1 du compilateur GCC. Évalué à 4.
Sans meme aller jusqu'a l'efficacite, concevoir et debugger un programme dont les morceaux s'executent en parallele est enormement plus complexe que de concevoir et debugger un programme normal.
Perso, je pense que les threads ne doivent etre utilises qu'en cas d'extreme necessite couplee avec une necessite extreme. Genre calculs mathematiques, programmes gerant n connexions, etc.
Pour parallelise un programme plutot monotache dans son fonctionnement, c'est tout de suite beaucoup plus complique. Il faut isoler des portions du programme qui n'ont pas besoin d'ecrire des donnes communes, il faut regarder l'ordonancement de chaque tache pour voir si on peut pas en lancer qqs'une avant les autres, etc.
Je prefere plutot que mon noyau et son scheduler qui s'occupe de paralleliser l'utilisation des ressources de ma machine, que le compilateur qui essaye de paralleliser un programme.
Pour en revenir aux programmes pseudo-monotaches, je me demande a quel point ce n'est pas plus simple de faire un scheduler interne (ce qu'a fait mplayer) que de faire de la programmation par thread a tout va. Au moins, avec ton scheduler, tu sais ou tu vas.
[^] # Re: A propos des optimisations de code
Posté par Philippe F (site web personnel) . En réponse à la dépêche Sortie de la version 4.1 du compilateur GCC. Évalué à 10.
En general, gcc se fait battre par des compilos optimises pour des architectures specifiques, qui ont beaucoup moins de contraintes globales que gcc.
En vitesse de compilation, il se fait battre a plat de couture par Visual C++ vieille version.
Des projets comme KDE galerent parce que la gestion du code virtuel dans les classes n'est pas optimal. De ce que j'en comprends, le support C++ evolue tres lentement ce qui ralentit parfois de facon notable des gros projets C++. KDE etant probablement le plus gros projet Open Sourc en C++ qui utilise gcc.
Sur des archis embarques petite, je doute que gcc soit vraiment super efficace. Pour ce type d'architecture, ecrire un compilateur qui ne fait que du C et tient compte de certains caracteristiques des petits micros permet de meilleurs resultats que l'artillerie gcc.
Tu peux regarder sdcc (http://sdcc.sf.net) qui parait plus adapte. Sur certains projets, il arrivait au niveau de Keil.
Sinon, je travaille aussi dans l'embarque sur des micro 8bits et la facon dont tu ecris ton code a une influence certaine sur la taille du code genere par certains compilateurs. Certains vont mieux optimiser les acces aux variables globales, d'autres les acces aux variables locales. Certains n'aiment pas du tout les pointeurs (genre Keil, il aime pas du tout du tout les pointeurs au dela de 64K sur une archi 8 bits), d'autres les digerent facilement. Et chacun ont leur bugs : Codewarrior qui addresse les membres d'une structure sur un registre == pas possible d'avoir une strucutre plus grosse que 255 octets.
[^] # Re: Stabilité de l'API
Posté par Philippe F (site web personnel) . En réponse à la dépêche Sortie de XulRunner 1.8.0.1. Évalué à 10.
win32: tu peux encore compiler tes programmes windows 3.1 aujourd'hui, ils fonctionnent toujours. Ca doit faire dans les 15 ans de plate-forme stable. C'est d'ailleurs une des forces de windows.
Sinon, on peut citer gtk, Gnome, KDE et Qt, dont les versions sont entierement compatibles entre elles si on ne change pas le premier chiffre. On tape dans les 3-4 ans de stabilite. Et deja avec 3-4 ans, ce n'est pas suffisant, il y a pas mal d'applications qui ne sont jamais portees et sont en quelque sorte perdues. Sous windows, ca m'arrive d'utiliser des applis qui clairement ont ete ecrites pour windows 3.1 et qui fonctionnent tres bien.
Tout ca pour dire que la stabilite des APIs, ce n'est pas un truc a prendre a la legere et que les faire varier meme de facon mineures tous les 6 mois, c'est le meilleur moyen de tuer un projet.
[^] # Re: Traduction
Posté par Philippe F (site web personnel) . En réponse à la dépêche Le noyau Linux ne se convertira pas à la GPLv3 !. Évalué à 1.
Je propose que chacun decide de lui-meme de la facon dont il orthographie les mots qu'il utilise. Il pourra proteger son orthographe personelle sous GPL ou bien sous une licence proprietaire. L'academie francaise pourrait meme se faire plein de fric avec une histoire pareille.
bon, je sors, je suis pas en forme pour faire un bon troll
[^] # Re: C# et le libre...
Posté par Philippe F (site web personnel) . En réponse à la dépêche talweg, une migration vers Mono. Évalué à 4.
Le seul exemple que je connaisse avec precision, c'est python. Jython, l'implementation de python en java est deux fois plus lente que l'implementation de reference. Ironpython, l'implementation au dessus du CLR (la VM de .NET) est plus rapide que l'implementation de reference.
[^] # Re: evangéliser...
Posté par Philippe F (site web personnel) . En réponse à la dépêche Sortie de Bible Desktop 1.0. Évalué à 4.
Par contre, des trucs comme Shanara, qualifie de literature purement commerciale par les puristes, ca passe tout seul :-)
[^] # Re: Enfin !
Posté par Philippe F (site web personnel) . En réponse à la dépêche Gnash, le lecteur Flash libre. Évalué à 3.
http://www.kdedevelopers.org/node/1736
On est loin de la tournure de la depeche, qui sous-tend que la FSF aurait aider ce projet a se developper.
A ma connaissance, la FSF n'a d'ailleurs jamais aide aucun projet a se developper. Ils ont eu un role politique important mais pas de role actif en terme de mecenat du developpement du logiciel libre. C'est peut-etre tres bien comme ca, mais quand meme, ca me surprend toujours que ce soit Caldera Linux et non la FSF qui aient inventes sourceforge.
[^] # Re: Espace personnel
Posté par Philippe F (site web personnel) . En réponse au journal Gmail et simplicité volontaire. Évalué à 2.
[^] # Re: Et Colin Leroy relève la France ...
Posté par Philippe F (site web personnel) . En réponse au journal La gendarmerie nationale adopte Firefox ... Mais ça fait jazzer !. Évalué à 3.
[^] # Re: Attention quand meme
Posté par Philippe F (site web personnel) . En réponse à la dépêche La Gendarmerie Nationale passe à Firefox et Thunderbird. Évalué à 8.
- impossible d'importer une mailbox normale via les menu de thunderbird. C'est ironique qu'il soit plus facile de migrer de outlook a thunderbird que d'un autre client libre. Il faut se copier les fichiers mbox a la main et c'est pas convivial du tout.
- impossible de copier l'addresse enjolivee d'un expediteur pour la coller ailleurs. Vraiment pas pratique. Thunderbird propose bien de copier uniquement la partie mail de l'addresse mais parfois, on souhaite conserver le nom aussi.
- impossible de faire du drag'n drop avec les addresses, a partir d'un message. Typiquement, j'ai 3 messages differents auxquels je veux repondre en un seul message. Sur kmail, je fais un drag'n drop des trois addresses dans mon nouveau message. Sur thunderbird, je ne peux que faire un copie/colle des addresses mail strict et c'est un peu lourd et plus lent que le drag'n drop.
- les tnef crees par outlook ne sont pas compris.
- le systeme des filtres a 3 wagons de retards sur kmail. Par exemple, kmail propose automatiquement de filtrer sur les champs X-Mailing-List et propose des filtres intelligents a partir d'un message.
- le fait d'avoir un filtre sur chaque compte est super lourd. J'ai des gens qui peuvent m'ecrire sur 3 comptes differents, je suis obliger de creer 3 filtres differents alors que je n'ai qu'une seule mailbox.
J'ai reporte tout ca dans la base, mais comme c'est plus des problemes d'ergonomie, ca ne reagit pas tres vite.
A part ca, il marche pas mal. Ah oui, il est quand meme vraiment lent aussi.
[^] # Re: Etch
Posté par Philippe F (site web personnel) . En réponse à la dépêche Debian en forte croissance. Évalué à -1.
[^] # Re: En vrac
Posté par Philippe F (site web personnel) . En réponse au journal Écoles, classes prépas etc etc.... Évalué à 4.
Clairement, les gens que j'ai vus manquent de bouteille en programmation objet, voire ont horreur de ca. Le fait de faire un code lisible ne suffit pas a le rendre maintenable (meme si ca aide), de meme que rajouter des commentaires doxygen ne compense pas une conception de merde.
Plus jamais je ne lancerai un eleve epita ou epitech sans valider la conception de ce qu'il doit me developper. J'ai vraiment eu des resultats catastrophiques avec _tous_ les stagiaires que j'ai eu de ces deux ecoles en terme de conception. Je redonne les notions qui me sont cheres pour une bonne conception :
- encapsulation
- isolation des concepts
- unicite des fonctionnalites (jamais de copie/colle)
- resistance aux erreurs
- possibiltes d'extensions futures
- facilite de debuggage (cas d'un protocole reseau)
Tout ca a ete tres mal traite.
> l'enseignement qu'on nous dispense est assez serieux,
La grosse blague. En tout cas, les epitechens et les epiteens que j'ai vu sont loins de partager ton avis. D'apres eux, la seule valeur de l'enseignement, c'est les projets qui sont confies. Ils ont tous dit que la bonne facon d'apprendre etait de ne pas aller en cours, ou ils perdaient leurs temps, mais de lire des bouquins.
Les gens sortent bien formes, mais pas grace a l'enseignement, qui je le signale est fait par les eleves et rarement par les profs. On se demande a quoi sert l'argent que coute la scolarite.
[^] # Re: Si tu en as les capacités....
Posté par Philippe F (site web personnel) . En réponse au journal Écoles, classes prépas etc etc.... Évalué à 4.
Vous etes en sup ou en spe ? En deux ans de formattage, il y a des choses qui changent. Je me suis rappele 3 mois apres avoir integre mon ecole que c'est celle-la que je voulais quand j'etais en sup. Entretemps, j'avais completement oublie cela et j'ai atteri dans cette ecole vraiment par chance.
<< Tu peux très bien concilier travail et loisirs. Par exemple je cours 3 fois par semaine, je passe pas mal de temps à faire de la photo, sans compter le moulage sur dlfp. >>
En prepa ? On doit pas parler de la meme prepa alors. Et encore, je ne suis pas un de ceux qui bossaient le plus. J'ai vu plusieurs personnes ne jamais manger a midi pour pouvoir bosser. Voyons, 1 interro ecrite de 4h de math ou de physique toutes les semaines, un devoir a rendre en math et en physique toutes les semaines, une kholle de math par semaine, une kholle de physique tous les 15 jours, le tout sur des notions que tu apprends pendant la semaine (qui fait que tu ne peux pas trop te reposer sur tes acquis). Une nouvelle notion en math par semaine. Je ne me rappelle pas avoir eu beaucoup de temps pour mes loisirs. Mais peut-etre que je m'etais mal organise.
<< Ils n'avaient qu'à regarder avant ! Je n'ai pas présenté supaero, comme plein de monde n'a pas présenté supelec. >>
Le formattage, c'est dur de lutter contre. Quand toute ta journee, on te prepare a etre le meilleur a ces putains de concours, au bout d'un moment, il n'y a plus que ca qui compte.
<< Dans ma classe de sup, il y avait 14 filles pour 40 élèves soit plus de 3x plus que tes 10%, et à peu près pareil en spé. Et c'est sans compter les Bio et les HEC où il y a une majorité de filles. >>
Ben, on etait pas dans le meme lycee. 1 classe de HEC et 1 classe de bio pour 14 classes de sup et environ autant de spe. Ensuite, 3 ans isoles sur un campus a 12 km de la grande ville la plus proche avec 12 filles pour 122 eleves en 1e annee, puis 20 filles pour 200 eleves.
[^] # Re: Et pour les moins doués en maths?
Posté par Philippe F (site web personnel) . En réponse au journal Écoles, classes prépas etc etc.... Évalué à 3.
Mon conseil de recruteur : si tu veux faire de l'informatique plus tard, montre que tu en as fait. Pas juste les exercices en cours, montre un projet ou tu t'es implique. Pour moi, il n'y a pas plus formateur que participer a un projet open source pour apprendre l'informatique. Lire du code, le comprendre, en ecrire, etre critique, s'ameliorer, chercher des solutions etc. Si tu peux mettre ca en avant, tu pourras toujours trouver un bon boulot dans l'informatique, et peut-etre plus facilement que quelqu'un qui aligne juste un diplome mais qui a ecrite en tout 2000 lignes de C en 4 ans.
Bon, je suis quand meme un DRH un peu special donc il se peut que ce que je dise ne soit pas vrai partout. Mais je pense que les qualites qu'il faut mettre en oeuvre pour participer a un projet open source sont tout a fait reutilisables professionellement.
[^] # Re: Si tu en as les capacités....
Posté par Philippe F (site web personnel) . En réponse au journal Écoles, classes prépas etc etc.... Évalué à 5.
Oublie les notions d'interet personnel, de loisirs, le fait qu'on peut reussir sa vie sans entrer dans le meilleure ecole du monde, qu'il n'y a pas que le travail qui compte.
Je pense que j'ai eu du bol, juste apres avoir reussi les concours, j'ai reussi a prendre un peu de recul et integrer une ecole qui me plaisait. Alors que j'etait parti pour retaper une annee de prepa pour avoir encore de meilleurs resultats, le leitmotiv de la prepa. J'aurai vraiment gache une annee de ma vie.
Tous mes camarades n'ont pas eu la meme chance. Se retrouver dans une ecole de telecom alors que tu as envie de faire de la physique, de la chimie ou des maths ou des materiaux, c'est tres frustrant. Les 6 premiers mois de l'ecole d'ingenieur sont consacres a balayer cette deception et ce n'est pas toujours facile. C'est quand meme dommage de renoncer a un domaine qui t'attirait avant que tu ne rentres dans le moule ("devenir le meilleur, les meilleurs notes, les meileures ecoles"). Je ne pense pas que ca suffise a expliquer pourquoi les eleves ingenieurs adorent se bourrer la gueule, mais ca donne quand meme des indices. C'est triste de renoncer a ses reves.
Intellectuellement, la prepa, c'est pas desagreable. On balaye beaucoup de sujets (pas assez en profondeur), on devient des machines a resoudre des problemes et a apprendre. Humainement, je pense que c'est une catastrophe. Retrospectivement, je pense que je preferai avoir une montee en charge plus douce de la quantite de travail sur 5 ans, comme ca se fait dans les facultes etrangeres, ou on choisit quand meme la voie qu'on aura au lieu de dependre de ta place parmi les 2000 admis pour avoir l'ecole que tu ne voulais peut-etre pas.
Ce qui est dommage, c'est que ce systeme debile est entretenu dans la vie professionelle. Quand tu as 10 ans de vie professionnelle derriere toi, on devrait t'evaluer avant tout sur ton passe professionnel. Et bien non, en France, on te ressort la grille magique qui dit que si tu as fait X-Mines, tu gagneras deux fois plus que machin qui a fait l'Ensimag.
Si tu sais travailler de facon autonome (par travailler, il faut comprendre bosser beaucoup plus que ce que tu as fait en terminale), je conseille la fac, ou tu pourras choisir des sujets a travailler sur ton temps libre. Apres, avec un bon classement, tu rentres sans souci en admission parallele dans une grande ingenieur. Et tu n'as pas l'impression d'avoir perdu deux ans de ta vie a bosser comme un esclave. Et en fac, il y a des filles. La prepa comme les ecoles d'ingenieurs, c'est 10% de filles en moyenne.
[^] # Re: En vrac
Posté par Philippe F (site web personnel) . En réponse au journal Écoles, classes prépas etc etc.... Évalué à 6.
Une grosse difference a mon sens, c'est que tu peux entrer a epita / epitech sans rien connaitre a l'info et ressortir en etant programmeur a tout faire. Les stagiaires que je vois qui sont passes par la fac et qui ne connaissent pas l'info ne sont bon a rien faire.
Le gros probleme de ces deux ecoles, c'est vraiment les methodes de travail. Les etudiants sont submerges de projets, donc sont obliges de travailler dans l'urgence et ne sont pas evalues sur la maintenabilite ou la qualite de leur code mais juste sur "c'est bon ca marche!". Ca peut correspondre aux besoins de certaines entreprises, mais c'est a l'oppose de la demarche qualite qu'on voit arriver peu a peu dans le monde professionnel depuis plusieurs annees autour du developpement logiciel.
Moi, je ne veux pas d'un mec comme ca dans mon projet. Apres, il y a les exceptions.
[^] # Re: En vrac
Posté par Philippe F (site web personnel) . En réponse au journal Écoles, classes prépas etc etc.... Évalué à 8.
- la distinction epita / epitech est une grosse blague. Les deux ecoles fabriquent des programmeurs, un point c'est tout
- les stagiaires etaient des bourrins en programmation. Tres efficaces, tres autonomes. Par contre, ils etaient completement a la rue face a des notions de maintenabilite du code, integration du code dans un contexte plus large, utilisation de l'existant, bonne conception objet, bonne encapsulation, robustesse du code, etc. C'est a dire tous les atouts qui font la difference entre un developpeur pisseur de code et un bon developpeur.
Au final, ils m'ont tous torche mes projets, sauf que leur truc est immaintenable. Je suis pratiquement oblige de tout reecrire derriere quand je veux utiliser les projets qu'ils ont faits.
Ce n'est pas ce que j'attends d'un ingenieur developpeur. Un ingenieur doit etre capable de reflechir avant de realiser, de penser large, et de tenir compte de ce qui existe. Pour citer un de mes collegues : "Ce sont de tres bon techniciens de la programmation".
Sans bases mathematiques, il y a des pans entiers du monde de la programmation qui leur echapperont. Et l'idee de vouloir coder a tout prix, je comprends mais je recherche qqch de plus chez les gens que j'embauche.
[^] # Re: SGBD
Posté par Philippe F (site web personnel) . En réponse à la dépêche Ruby on rails 1.0 est sorti. Évalué à 1.
---> []
[^] # Re: Liberty ?
Posté par Philippe F (site web personnel) . En réponse à la dépêche Sortie d'Authentic 0.5. Évalué à 6.
Je doute qu'ils aient oublie de reserver la marque. Et il y a clairement un conflit puisque les deux produits servent a la meme chose, l'authentification.
Ca fait des annees que Oberthur developpe la solution d'authentification a base de authentic, donc je pense que ta boite n'a pas bien fait son travail de recherche de nom de produit.
[^] # Re: Kolab ?
Posté par Philippe F (site web personnel) . En réponse au journal Partage de contact et de calendrier. Évalué à 2.
[^] # Re: Clamwin ? Avast ?
Posté par Philippe F (site web personnel) . En réponse à la dépêche Le GET rend votre Bureau Libre !. Évalué à 3.
Donc oui, clamwin tient tres bien la route.