Partage
  • Partager sur Facebook
  • Partager sur Twitter

Nouveau cours C++ "moderne"

7 mai 2014 à 15:16:16

valent20000 a écrit:

Et même si par foncteur tu voulait parler des pointeurs de fonctions le chapitre sur les pointeur est après aussi :lol:


En fait par foncteur généralement, on entend tout chose sur laquelle on peut appeler l'opérateur parenthèse. Donc ça inclut les pointeurs de fonction, mais pas que, tout objet définissant cet opérateur est un foncteur, donc ça me choque pas non plus qu'ils soient présentés avant les pointeurs...

Pour ce qui est des threads, après la grande question c'est: est-ce que ça rendre bien dans le cadre d'un cours pour débutant?

Et dans tous les cas, il y a tellement de matière que ça peut très bien être un cours à lui seul.

Après, encore une fois, ce cours s'adresse surtout à des débutants, donc il n'y a pas grand chose à concilier lol. Après bien entendu ça pourra permettre à tous ceux qui voudraient se mettre à jour de le faire assez simplement, mais je ne pense pas qu'il faille penser le cours pour ceux-là.

  • Partager sur Facebook
  • Partager sur Twitter
7 mai 2014 à 15:17:35

Ksass`Peuk a écrit:

 Maîtriser très tôt l'utilisation des algo de la SL est  important, et comprendre les foncteurs est un sacré plus pour les utiliser.

Je suis tout a fait d'accord, mais ça ne te gène pas d'apprendre à quelqu'un à coder un foncteur (donc une classe) avant de lui avoir expliqué ce que c'était ? Si tu regarde bien le plan tu voit : Introduction : la vérité sur les strings enfin dévoilée dans la partie 2, donc le débutant qui suit le tuto ne se doute même pas que la string n'est pas un type de données "de base" du c++, et tu veut d'un seul coup pendant un chapitre lui faire tomber un objet dessus ? :D

Enfin après c'est mon avis, c'est discutable, mais je trouve ça un peu (voir beaucoup trop) brusque :p

  • Partager sur Facebook
  • Partager sur Twitter
Tous les crétois sont menteurs. Je suis génial. | Nouveau Sdz ? | Entrainement à l'algorithmique | Mon Devblog | Cpp Reference | Livres Recommandés : C++ Primer 5, SFML Game Development
7 mai 2014 à 15:18:21

(Un pointeur ? C'est quoi ça ?)
  • Partager sur Facebook
  • Partager sur Twitter
7 mai 2014 à 15:27:13

epso a écrit:

Pour ce qui est des threads, après la grande question c'est: est-ce que ça rendre bien dans le cadre d'un cours pour débutant?

La tu m'as eu  ! Je ne peut pas contredire ! :lol:

Non, c'est vrai que ça ne rentre pas vraiment dans le cadre d'un cours de débutant, mais c'est encore une chose que je reproche aux tutos du net, je pense que les tutos devraient aborder ces thèmes vers la fin (en fait je considère qu'en fin de tuto, la personne qui le lit n'est plus "débutant" (mais pas non plus expert), faut que je trouve un nom pour ces gens là ... Apprenti ? Padawan ? :D ), pour rentrer plus en profondeur, je veut dire un type qui veut apprendre le c++ uniquement sur le web, va trouver un cours de débutant, et puis ... Il est bloqué puisqu'il n'y a pas de cours de niveau "au dessus" ... L’intérêt d'un tuto du sdz, c'est de partir a zéro, donc sur, on commence débutant, et les premiers chapitres sont pour eux, mais ce serait bien de faire des chapitres "avancés" en fin de tuto nan ? Enfin comme je le dit si souvent, c'est mon avis ! :p

-
Edité par valent20000 7 mai 2014 à 15:31:27

  • Partager sur Facebook
  • Partager sur Twitter
Tous les crétois sont menteurs. Je suis génial. | Nouveau Sdz ? | Entrainement à l'algorithmique | Mon Devblog | Cpp Reference | Livres Recommandés : C++ Primer 5, SFML Game Development
7 mai 2014 à 15:40:48

Complètement d'accord :)

J'ai grandement apprécié le tuto OpenGL 3.3. La difficulté augmente très graduellement pour finir sur des notions pas évidentes.

Par contre je ne pense pas que les threads soit vraiment compliqués. Le plus dure c'est de les manipuler et/ou corriger les conflits. Mais je pense que n'importe quel "Padawan" pourra comprendre le concepts du threads. Pour moi les threads est une notion difficile dans le sens où beaucoup de rigueurs/vision d’ensemble est exigé.

Après il faudrait un autre tuto sur : "Comment structurer un code" (réseau de pétrie par exemple).

  • Partager sur Facebook
  • Partager sur Twitter
7 mai 2014 à 15:44:27

Je n'exclue pas de parler des threads un jour. Un cours "débutant" peut devenir un cours "complet".

Mais pour éviter de trop se disperser ou de prévoir à trop long terme, ça ne sera pas abordé dans cette première version du cours (comme je l'ai dit dans la page d'accueil de mon wiki, ce qui m'embête le plus avec les cours sur internet, c'est qu'ils ne sont pas à jour. Je préfère faire les choses progressivement plutôt qu'essayer d'aller trop vite)

-
Edité par gbdivers 7 mai 2014 à 15:46:22

  • Partager sur Facebook
  • Partager sur Twitter
7 mai 2014 à 15:48:46

gbdivers a écrit:

faire les choses progressivement plutôt qu'essayer d'aller trop vite


Ça devrait devenir un adage de l'informatique :lol:
  • Partager sur Facebook
  • Partager sur Twitter
Tous les crétois sont menteurs. Je suis génial. | Nouveau Sdz ? | Entrainement à l'algorithmique | Mon Devblog | Cpp Reference | Livres Recommandés : C++ Primer 5, SFML Game Development
7 mai 2014 à 15:58:41

Ksass`Peuk a écrit:

valent20000 a écrit:

Un petit truc qui me choque quand même : le chapitre sur les foncteurs est (dans ton plan) avant la partie orientée objet, petit fail je pense :p (Et même si par foncteur tu voulait parler des pointeurs de fonctions le chapitre sur les pointeur est après aussi :lol: ).

Au contraire, c'est très cohérent. Maîtriser très tôt l'utilisation des algo de la SL est  important, et comprendre les foncteurs est un sacré plus pour les utiliser.


J'ai pu expérimenter quelques fails à ce sujet. Car effectivement, moi aussi je préfère montrer la SL avant la partie objet. Seulement, on a vite fait d'avoir besoin de cette partie OO dans les exos. Genre, une liste de gens (nom + prenom) que l'on veut trier suivant l'un ou l'autre critère. La structure est à minima nécessaire à cet endroit là.
  • Partager sur Facebook
  • Partager sur Twitter
C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
7 mai 2014 à 16:16:14

@lmghs

J'y ai pensé aussi à parler assez tôt de l'utilisation de base d'une structure (j'ai ajouté une partie sur pair et tuple dans la même idée). La question que je me pose est si cela n'entre pas en contradiction avec l'idée de concevoir les classes en termes de services rendus et non en termes d’agrégation de données

Je crois que je ne pourrais me décider que lors de la rédaction finale, en fonction de comment les choses seront présentées

  • Partager sur Facebook
  • Partager sur Twitter
7 mai 2014 à 16:46:31

Salut,

Je post juste ici pour te dire que j'adore ton initiative et que c'est vraiment quelque chose qui manque cruellement sur le web (français en tout cas) et qu'un cours à jour aussi global que celui de ce site serait vraiment un gros plus pour tous ceux voulant apprendre le C++ !

Bonne chance, je suivrai ça de très près histoire d'apprendre des choses ! 

  • Partager sur Facebook
  • Partager sur Twitter
La flemme vaincra.
7 mai 2014 à 17:03:15

@gbdivers

Le problème que j'ai eu après est que j'aime bien montrer des solutions idiomatiques. Du coup mon "while (std::cin >> personne)" posait soucis. De même que les foncteurs pour rechercher la personne dont le prénom est le plus long, ou dont nom+prenom est ce qu'il y a de plus long.

Les lambdas vont simplifier ici. Mais cela signifie qu'il faut montrer les lambdas en même temps que la STL (avec un T pour le coup). Là, pédagogiquement, je ne sais pas si c'est une bonne idée.

  • Partager sur Facebook
  • Partager sur Twitter
C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
7 mai 2014 à 19:57:31

Tant que j'y pense encore 2-3 choses dont tu pourrais parler dans ton cours qui ne sont pas dans ton plan :

- Les casts (dynamic + const + static), ça n'est étrangement pas dans le tuto du sdz, moi à qui on ne l'a jamais expliqué je trouve ça bête x)

- Le const-corectness et la constance (mais pas sur, je crois qu'y a déjà un tuto sur le sdz faudra que j'aille y faire un tour)

- Dans la partie ce que vous pouvez encore apprendre (tout à la fin), quand tu parle de l'héritage multiple, tu pourrais parler vite fait donner quelques exemples d'ennuis que ça cause (genre le diamond of death)

Voila voila, je crois qu'on à déjà cité toutes les grandes lignes du c++ après ? Bonne chance, je lirais ton tuto avec attention ! ;)

  • Partager sur Facebook
  • Partager sur Twitter
Tous les crétois sont menteurs. Je suis génial. | Nouveau Sdz ? | Entrainement à l'algorithmique | Mon Devblog | Cpp Reference | Livres Recommandés : C++ Primer 5, SFML Game Development
7 mai 2014 à 23:44:16

Pour les cast : déjà, le const_cast, c'est non (idem pour reinterpret). Les deux autres, peut être. A voir comment en parler sans donner de mauvaises habitudes de conception

Pour const, c'est prévu (c'est un des points qui m’agace le plus dans le cours actuel, aucun respect de const. Je trouve ça idiot de conseiller aux lecteurs d'utiliser les const et que les auteurs du cours ne respectent pas cette règle dans les codes d'exemple)

Pour l'héritage multiple, idem, ça sera à voir s'il est possible de l'expliquer sans donner de mauvaises habitudes

  • Partager sur Facebook
  • Partager sur Twitter
8 mai 2014 à 11:43:55

Bah même les deux autres, leur utilisation reste quand très sporadique et réservée à des cas de figures très particuliers (CRTP par exemple), donc pareil, pas bien sur que ça ait réellement ça place pour le moment^^

Ah la rigueur, pour l'héritage multiple, un façon assez simpliste et qui ne nécessite pas trop de détails est de le présenter en même temps qu'un petit topo sur ISP, en partageant une grosse interface immonde en plusieurs petites, mais ça ne couvre pas tous les problèmes qui peuvent aller avec l'héritage multiple, mais encore une fois, est-ce que ces considérations ont bien leur place dans un cours pour débutant?^^

  • Partager sur Facebook
  • Partager sur Twitter
8 mai 2014 à 11:54:03

Le C++ a quand même vocation à faire de l'objet. Donc même si c'est un cours pour débutant il faut voir les problématiques de l'objet. Le C++ ne se résume pas à l'encapsulation. Je pense qu'il faut regarder les erreurs de débutants pour les contre carrer dans ce cours. Par exemple des erreurs de conception UML (de mon point de vu, ça ne sert à rien de faire du C++ s'il l'on ne sais pas lire ou faire des diagramme de classe).
  • Partager sur Facebook
  • Partager sur Twitter
8 mai 2014 à 12:04:47

gbdivers a écrit:

@lmghs

J'y ai pensé aussi à parler assez tôt de l'utilisation de base d'une structure (j'ai ajouté une partie sur pair et tuple dans la même idée). La question que je me pose est si cela n'entre pas en contradiction avec l'idée de concevoir les classes en termes de services rendus et non en termes d’agrégation de données

Le dilemme vient de ce qu'en C++, il y a un mécanisme unique (struc/class c'est kif kif) qui permet de représenter diverses "situations de programmation", comme les objets.

Mais c'en n'est pas forcément. C'est pas parce qu'on emballe trois trucs dans un même paquet, et qu'on y ajoute des fonctions qui y sont liées, que c'est pertinent de pousser jusqu'à l'encapsulation, la séparation entre le comportement et l'implémentation interne. Pour cela, il faudrait qu''il y ait un couplage faible entre les notions qu'on représente par des classes C++, mais parce que c'est pratique, pas parce que ça rentre dans le monde merveilleux des objets.

Un exemple concrêt : un Labyrinthe, avec des Salles (qui ont des pointeurs entre elles) et des Personnages qui sont dans ces salles.

Donc dans les Salles, un ensemble de pointeurs vers les Personnages qui y sont, et dans les Personnages un pointeur vers leur position.

Maintenant vous voulez déplacer un Personnage p de origine vers destination. Donc il y a une methode Personnage::Deplacer(Salle *) qui change le pointeur du Personnage. Mais il faut aussi changer les salles, donc on a besoin de Salle::Enlever(Personnage *) et Salle::Ajouter(Personnage *).

Mais d'avoir trois méthodes publiques pour faire ça, ça impose de respecter un protocole : quand on touche un personnage, il faut aussi toucher les salles. Sinon le modèe de données est dans un état incohérent. Donc il y a un couplage assez fort. En fait l'objet sur lequel on peut agir de façon cohérente, c'est le Labyrinthe, et les Salles et les Personnages, ce sont justes des "identifiants" pour des éléments internes. Le code client, si on veut être puriste dogmatique de l'encapsulation, il doit agir sur le labyrinthe,   Labyrinthe::deplacer(IdPersonnage, IdSalle).

  • Partager sur Facebook
  • Partager sur Twitter
8 mai 2014 à 12:14:27

@epso

Oui pour les 2 points, c'est pourquoi je suis pas chaud pour en parler. A voir lors de la rédaction

@robinson

Oui pour le C++ objet... mais !

Je vais aborder pas mal de problématique de conception objet (entité vs value, DP, principes, etc) et je compte utiliser les exos pour que l'apprenant comprenne par la pratique ces problématiques (et les bonnes pratiques)

Par contre, limiter le C++ à l'objet (comme c'est actuellement le cas dans le cours actuel), c'est limiter le C++ à ce que tous les autres langages objets proposent. En gros, à la fin du cours, l'apprenant peut légitimement se poser la question pourquoi le C++ vs un autre langage. Et il n'aura pas d'élément pour justifier ce choix. Parce que le cous n'aborde pas ce qui fait la spécificité et la puissance du C++ (à mon sens) : la méta prog compile time. Difficile d'aborder ça dans un cours débutant, mais je pense que ça serait bien quand même, pour que le débutant puisse appréhender ce qui fait l'intérêt du C++ (mais pour le moment, le plan du cours ne changera pas, on verra ça pour une prochaine fois)

Pour l'UML, je crois que c'est important que l'apprenant comprenne la conception et j'aime bien ce qui est visuel (par exemple pour expliquer la mémoire ou la conception). Par contre, je suis pas fan du formalisme de l'UML (et je le maîtrise pas), je ferais probablement plus des pseudo UML, mais pas du UML pur

  • Partager sur Facebook
  • Partager sur Twitter
8 mai 2014 à 12:22:05

@michelbillaud

Je ne suis pas sûr d'avoir compris ton propos. Tu parles de design de l'interface d'une classe, ce qui est intéressant et devra être abordé dans la partie "Prog objet". Mais la problématique est que l'on risque d'avoir besoin d'expliquer un minimum les objets pour la partie "prog impérative". Et dans ce cas, ne risque-t-on pas de donner une première mauvaise approche des objets ? (que l'apprenant les voit comme une agrégation de données et pas comme fournisseur de services)

Je verrais plus en détail lors de la rédaction

  • Partager sur Facebook
  • Partager sur Twitter
8 mai 2014 à 12:44:36

Ce que je veux dire, c'est qu'il y a un usage courant des classes C++ au delà (ou plutôt en deça) de la vision des objets comme (purs) fournisseurs de services. Plain Old Data. Ce n'est pas un mauvais usage des classes, c'est un besoin incontournable.

Pour la petite histoire, un jour j'ai poussé des cris horrifiés (des cris d'orfèvre :-)) quand je me suis aperçu que les étudiants de premier semestre écrivaient des programmes de jeux, dans lesquels les machins ont des positions, en utilisant des "tableaux parallèles" x[] et y[].

Ce qui nous ramène incidemment ,au niveau expressivité du langage de programmation pour débutant, au bon vieux temps de la programmation en Fortran. Les "user defined data types", dont les "record", ça doit remonter à 1966 à peu près - propositions de Wirth pour algol 68 -, et la notion d'encapsulation (information hiding) en 1972 (David Parnas, décomposition modulaire)


Je suis donc allé crier dans le bureau voisin où on m'a répondu
- que grouper x et y dans une entité Position, c'était faire une classe en C++
-  qu'on avait décidé de ne pas traiter de la programmation objet au premier semestre
- mais qu'ils seraient ravis de le faire au second semestre, et de montrer aux étudiants que la première chose à faire obligatoirement quand on a des x et y à en emballer, c'est de les rendre privés au nom du Principe Sacré d'Encapsulation, puisque c'était des classes, et d'écrire des accesseurs getX, set X, des mutateurs setX et setY, des constructeurs par copie et, bien sur, une surcharge de l'affectation.

Avec un peu de mauvaise foi, j'ai incité quand même à faire réintroduire les struct, qui avaient été éliminées au titre que "en C++ les struct et les class c'est pareil. DONC si on ne fait pas les classes, on ne fait pas les struct".

Ce qu'il faut pas faire, parfois.

-
Edité par michelbillaud 8 mai 2014 à 12:49:31

  • Partager sur Facebook
  • Partager sur Twitter
8 mai 2014 à 13:20:30

@gbdivers : Etant donnée que le C++ ne suis pas toutes les normes UML, je ne vois pas l’intérêt de le faire en UML pur.
  • Partager sur Facebook
  • Partager sur Twitter
8 mai 2014 à 15:28:46

Salut.

J'applaudi grandement cette initiative et j'espère que le cour dans son intégralité verra le jour bientôt ^^

Une chose que j'ai pas aimé sur les cours c++ / c d'ocr, c'est que certaines notions sont expédiés.

Et au final on se retrouve à taper toute les heures sur google des questions / problème / erreur de compilo.

Au pire, ce serait bien qu'il y est une partie "Avancé" du cour, destiné aux programmeurs moyens.

Par exemple le cour sur les vecteurs est short. J'en ai bavé pour faire interagir un vecteur bidimensionnel contenant une classe dans une autre.

De plus, je pense qu'il faudrait mettre plus l'accent sut le language C++ en lui même plutôt que sur une bibliothèque.

-
Edité par Saïcy 8 mai 2014 à 15:33:04

  • Partager sur Facebook
  • Partager sur Twitter
8 mai 2014 à 17:53:56

robinson des bois a écrit:

Le C++ a quand même vocation à faire de l'objet. Donc même si c'est un cours pour débutant il faut voir les problématiques de l'objet. Le C++ ne se résume pas à l'encapsulation. Je pense qu'il faut regarder les erreurs de débutants pour les contre carrer dans ce cours. Par exemple des erreurs de conception UML (de mon point de vu, ça ne sert à rien de faire du C++ s'il l'on ne sais pas lire ou faire des diagramme de classe).


L'OO n'est pas le point le plus important du C++ AMA. Je place en premier le RAII sous tous ces avatars. (ce qui me fait penser que j'ai un billet à écrire sur comment choisir son liant (pointeur/reférence/...))

Pour l'UML, les erreurs de conception seront de ... conception. Pas UML. UML n'est qu'un formalisme (limité) pour exprimer nos choix de conception. Les diagrammes de classe ne sont qu'un support. Les diagrammes de séquence sont souvent bien plus pertinents. Et la compréhension de la dichotomie zones communes (je n'ai jamais trouvé de bonne traduction pour commonalities)/points de variations est ce qu'il y a de plus important pour tous les polymorphismes.

@michel, ce que tu décris avec les agglomérats de données qui "encapsulent" à coup de setters/getters ne fait mal. :(

  • Partager sur Facebook
  • Partager sur Twitter
C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
28 mai 2014 à 11:25:44

Bon, le cours avance petit à petit, cela va prendre quelques semaines/mois (plus probablement la seconde possibilité :) ). Je rédige directement en ligne, les premiers chapitres sont accessibles (c'est amusant, je n'ai pas encore parlé des variables alors qu'il y a plusieurs chapitres écrits)

Si vous avez des critiques, remarques ou corrections, n'hésitez pas

S'il y a des spécialistes php ici, j'aurais besoin de conseil aussi. J'utilise pour mon site un wiki (dokuwiki). Cela fonctionne, mais il y a quelques points à améliorer :

  • quand on clique sur la version pdf, cela affiche une page d'erreur. Si on revient sur le wiki et que l'on demande une seconde fois le pdf, il s'affiche correctement. Si je désactive dans le panel admin la mise en cache du pdf généré, le pdf ne s'affiche jamais. J'imagine donc que le pdf est correctement généré et mis en cache, mais lors du premier affiche, il y a une erreur que je ne comprend pas. Si quelqu'un à une idée
  • j'utilise le plugin epub pour générer le cours en un seul livre (et pas une page à la fois comme le pdf) au format epub. Le epub généré ne contient qu'un mimetype en interne. Cependant, si je regarde les archives sur le serveur, j'ai bien arborescence du epub qui est généré, avec les html et les images, mais celle ci ne sont pas incluses dans le epub. Je ne sais pas ce qui se passe (il n'y pas d'erreurs générées)
  • il faudra que je trouve comment ne pas afficher les liens de navigations (chapitre précédent, sommaire principal, chapitre suivant) dans les pdf et epub. Et également corriger le CSS pour avoir des pdf et epub un peu plus joli
  • je souhaite inclure du code dans les articles (vous avez peut être vu les liens vers ideone ou coliru). Le but est que l'apprenant puisse directement tester le code et faire les exos, avant même d'avoir les problématiques de l'installation d'un IDE (en plus, j'ai prévu d'aborder dans le cours comment mettre en place une chaîne de compilation complète - ide, compilateurs, code analysis, tests unitaires, etc). Je préfère coliru à ideone puisque l'on a accès à la ligne de commande pour compiler (donc apprendre le processus de compilation) et aux warnings (avec ideone, les warnings ne sont affiché que si la compilation plante)
    Par contre, coliru ne conserve pas mes codes d'exemples (cf le chapitre Comment réaliser les exercices de ce cours ?). Si quelqu'un à une idée pour faire cela, je prend
Merci

HS : je suis entrain de m'interroger pour mes prochains livres... je bossais sur un second livre sur le gpu computing et je voulais écrire également un livre sur la 3D avec OpenGL. Mais au final, il est possible que je ne publie pas mes livres chez un éditeur, mais que je les mette directement sur mon site (avec peut être une version papier en auto-édition ?) Mais ça sera un boulot pour quelques années...

Warning: is_writable() [function.is-writable]: open_basedir restriction in effect. File(/mpdf_ttf) is not within the allowed path(s): (/mnt/107/sda/7/e/guillaume.belz) in /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/mpdf/mpdf.php on line 2898

Warning: is_writable() [function.is-writable]: open_basedir restriction in effect. File(/mpdf_ttf) is not within the allowed path(s): (/mnt/107/sda/7/e/guillaume.belz) in /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/mpdf/mpdf.php on line 2898

Warning: is_writable() [function.is-writable]: open_basedir restriction in effect. File(/mpdf_ttf) is not within the allowed path(s): (/mnt/107/sda/7/e/guillaume.belz) in /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/mpdf/mpdf.php on line 2898

Warning: is_writable() [function.is-writable]: open_basedir restriction in effect. File(/mpdf_ttf) is not within the allowed path(s): (/mnt/107/sda/7/e/guillaume.belz) in /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/mpdf/mpdf.php on line 2898

Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(/mpdf_ttf/dejavusanscondensed.cw127.php) is not within the allowed path(s): (/mnt/107/sda/7/e/guillaume.belz) in /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/mpdf/mpdf.php on line 8229

Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(/mpdf_ttf/dejavusanscondensed.cw127.php) is not within the allowed path(s): (/mnt/107/sda/7/e/guillaume.belz) in /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/mpdf/mpdf.php on line 8246

Warning: is_writable() [function.is-writable]: open_basedir restriction in effect. File(/mpdf_ttf) is not within the allowed path(s): (/mnt/107/sda/7/e/guillaume.belz) in /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/mpdf/mpdf.php on line 8247

Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(/mpdf_ttf/dejavusanscondensedB.cw127.php) is not within the allowed path(s): (/mnt/107/sda/7/e/guillaume.belz) in /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/mpdf/mpdf.php on line 8229

Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(/mpdf_ttf/dejavusanscondensedB.cw127.php) is not within the allowed path(s): (/mnt/107/sda/7/e/guillaume.belz) in /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/mpdf/mpdf.php on line 8246

Warning: is_writable() [function.is-writable]: open_basedir restriction in effect. File(/mpdf_ttf) is not within the allowed path(s): (/mnt/107/sda/7/e/guillaume.belz) in /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/mpdf/mpdf.php on line 8247

Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(/mpdf_ttf/dejavusanscondensedI.cw127.php) is not within the allowed path(s): (/mnt/107/sda/7/e/guillaume.belz) in /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/mpdf/mpdf.php on line 8229

Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(/mpdf_ttf/dejavusanscondensedI.cw127.php) is not within the allowed path(s): (/mnt/107/sda/7/e/guillaume.belz) in /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/mpdf/mpdf.php on line 8246

Warning: is_writable() [function.is-writable]: open_basedir restriction in effect. File(/mpdf_ttf) is not within the allowed path(s): (/mnt/107/sda/7/e/guillaume.belz) in /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/mpdf/mpdf.php on line 8247

Warning: Cannot modify header information - headers already sent by (output started at /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/mpdf/mpdf.php:2898) in /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/action.php on line 152

Warning: Cannot modify header information - headers already sent by (output started at /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/mpdf/mpdf.php:2898) in /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/action.php on line 153

Warning: Cannot modify header information - headers already sent by (output started at /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/mpdf/mpdf.php:2898) in /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/action.php on line 154

Warning: Cannot modify header information - headers already sent by (output started at /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/mpdf/mpdf.php:2898) in /mnt/107/sda/7/e/guillaume.belz/inc/httputils.php on line 27

Warning: Cannot modify header information - headers already sent by (output started at /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/mpdf/mpdf.php:2898) in /mnt/107/sda/7/e/guillaume.belz/inc/httputils.php on line 28

Warning: Cannot modify header information - headers already sent by (output started at /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/mpdf/mpdf.php:2898) in /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/action.php on line 161

Warning: Cannot modify header information - headers already sent by (output started at /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/mpdf/mpdf.php:2898) in /mnt/107/sda/7/e/guillaume.belz/inc/httputils.php on line 105

Warning: Cannot modify header information - headers already sent by (output started at /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/mpdf/mpdf.php:2898) in /mnt/107/sda/7/e/guillaume.belz/inc/httputils.php on line 138

Warning: Cannot modify header information - headers already sent by (output started at /mnt/107/sda/7/e/guillaume.belz/lib/plugins/dw2pdf/mpdf/mpdf.php:2898) in /mnt/107/sda/7/e/guillaume.belz/inc/httputils.php on line 159
%PDF-1.4 %âãÏÓ %PDF-1.4 %âãÏÓ %PDF-1.4 %âãÏÓ 3 0 obj <> /Annots [ 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R ] /Contents 4 0 R>> endobj 4 0 obj <> stream xœ½XKÛ6æÙç[€È%-’pIêAi-’Mº@‘¶ÙÆé¥èÁkk½^ȵd'ͯͱû/:Ré

// etc bien d'autre lignes, qui correspond je pense au pdf

Pour le epub :

processed: title page 
processed: :programmez_avec_le_langage_c 
processed: :comment_suivre_ce_cours 
processed: epub:cours-cpp 
Not using LESS, either not found or excluded by configuration: using css2.php
found title for Text/title.html
found programmez_avec_le_langage_c for Text/programmez_avec_le_langage_c.html
found comment_suivre_ce_cours for Text/comment_suivre_ce_cours.html
found cours-cpp for Text/epub_cours-cpp.html
found Footnotes for Text/footnotes.html
packing epub
/mnt/107/sda/7/e/guillaume.belz/data/meta/epub/gbdivers/f86b1ead81f69b0ab4af8f5f64a79258/
*nix zip command used 
ebook id=epub:cours-cpp
New Ebook: epub:gbdivers:2014_may_28_11-12-12.epub
rm -f -r /mnt/107/sda/7/e/guillaume.belz/data/meta/epub/gbdivers/f86b1ead81f69b0ab4af8f5f64a79258/




  • Partager sur Facebook
  • Partager sur Twitter
28 mai 2014 à 13:47:15

Salut.

J'aime ton cour, il est beaucoup plus détaillé et ça aborde plein de nouvelle chose.

Quelque remarques, comme tu le suggérais:

-Un problème dans Premier pas, chap 3:

std::cout << "Commutativité :" << std::endl;
std::cout << "2 + 3 = " << 2 + 3 << std::endl;
std::cout << "2 + 3 = " << 2 + 3 << std::endl; // <= Plutôt 3 + 2 ?

-Quand on clic sur chapitre suivant/précédent on tombe sur le cour des variables de Mathieu Nebra.

Puis, ce qui serait bien, c'est d'expliquer un peut à quoi sert de travailler directement avec le code binaire. C'est la question que je me pose tout du moins car pourquoi se faire chi** ^^ à écrire 0b01000010 plutôt que 42.

Je suivrais :D

-
Edité par Saïcy 28 mai 2014 à 14:18:44

  • Partager sur Facebook
  • Partager sur Twitter
28 mai 2014 à 14:01:25

 Merci pour les remarques

Saïcy a écrit:

-Un problème dans Premier pas, chap 3:

std::cout << "Commutativité :" << std::endl;
std::cout << "2 + 3 = " << 2 + 3 << std::endl;
std::cout << "2 + 3 = " << 2 + 3 << std::endl; // <= Plutôt 3 + 2 ?
Bien vu, c'est corrigé

Saïcy a écrit:

Quand on clic sur chapitre suivant/précédent on tombe sur le cour des variables de Mathieu Nebra.

Comme j'ai changé plusieurs fois les noms des chapitres, cela à cassé complètement les liens. Il faut que je mette à jour, je le ferais quand la rédaction sera un peu plus avancée, pour éviter d'avoir à le faire trop souvent pour rien

Saïcy a écrit:

Puis, ce qui serait bien, c'est d'expliquer un peut à quoi sert de travailler directement avec le code binaire. C'est la question que je me pose tout du moins car pourquoi se faire chi** ^^ à écrire 0b01000010 plutôt que 42.

J'en parle un peu plus dans le chapitre "Logique binaire et calcul booléen" (je dois encore ajouter l'utilisation des mask et des division/multiplication par 2^N avec des shifts). Il y aura aussi des exos pour écrire des nombres de taille non fixée (type GMP), dans lequel il faudra faire des opérations sur les bits

Pour le moment, je ne vois pas d'autres choses à ajouter dessus, cela viendra peut être quand le cours sera plus avancé. A moins que tu penses à quelque chose en particulier

-
Edité par gbdivers 28 mai 2014 à 14:03:03

  • Partager sur Facebook
  • Partager sur Twitter
28 mai 2014 à 14:29:34

Ce que je veux dire, c'est que ce serait bien de présenter(juste énoncer peut être) des cas plus concrets dans lesquels ces notions sur la prog binaire sont nécessaires, ( chiffrement des données peut-être, si je ne dis pas de bêtise ).

-
Edité par Saïcy 28 mai 2014 à 14:36:36

  • Partager sur Facebook
  • Partager sur Twitter
28 mai 2014 à 15:08:57

L'erreur de open_basedir au niveau des pdf vient des restrictions d'accès donné à php. Peut-être en ajoutant des dossier dans le php.ini. Mais visiblement il s'en sort quand même... Le dl de pdf en 2 temps correspond aux erreurs avec la fonction headers. Celle-ci est utilisée après avoir envoyé des données au client. En fait, c'est les premier warnings qui sont envoyé. Si tu n'arrive pas à corriger les warning sur open_basedir, tu peux contourner le problème avec les fonction de bufferisation (ob_start et ob_end_flush) ou en diminuant le niveau d'alerte sur la page de dl (error_reporting(0)). Je ne sais pas dans quel mesure c'est facile à faire sur un wiki.

Pour les epub je ne sais pas mais le rm en fin est étrange, non ?

Coliru Q&A. Visiblement il y a une API. Je me demande comment fait cppreference ?

  • Partager sur Facebook
  • Partager sur Twitter
28 mai 2014 à 16:19:07

>chiffrement des données peut-être, si je ne dis pas de bêtise

La prog binaire est bien usitée avec des masks que pour le chiffrement, qui se sert bien plus des modulo, shift, multiplication et division que du xor.

-
Edité par bacelar 28 mai 2014 à 16:19:31

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
28 mai 2014 à 19:16:38

Je viens de penser vite fait à petit un truc à add dans la section Ce que vous pouvez encore apprendre , le cours parle des enums, faudrait rajouter 2-3 mots sur les enums fortement typée (enum class) (qui sont à mon humble avis un bel ajout du c++11) ;)

EDIT : T'a préféré bind au lambda dans ton cours finalement ? :o

-
Edité par valent20000 28 mai 2014 à 19:18:21

  • Partager sur Facebook
  • Partager sur Twitter
Tous les crétois sont menteurs. Je suis génial. | Nouveau Sdz ? | Entrainement à l'algorithmique | Mon Devblog | Cpp Reference | Livres Recommandés : C++ Primer 5, SFML Game Development
28 mai 2014 à 19:57:04

Saïcy a écrit:

Quand on clic sur chapitre suivant/précédent on tombe sur le cour des variables de Mathieu Nebra.

Corrigé

valent20000 a écrit:

Je viens de penser vite fait à petit un truc à add dans la section Ce que vous pouvez encore apprendre , le cours parle des enums, faudrait rajouter 2-3 mots sur les enums fortement typée (enum class) (qui sont à mon humble avis un bel ajout du c++11) ;)

EDIT : T'a préféré bind au lambda dans ton cours finalement ? :o

Va pas trop vite, ce sont des parties que j'ai pas encore travaillé. Pour le moment, rien n'est définitif à ce niveau (sauf bien sur les class enum, j'en parlerais)

@jo_link_noir

Pas d'accès à la config serveur ou php.ini. C'est un serveur free gratuit, pour le moment, cela convient (en partie) mais effectivement, cela pose quelques problèmes de config

En fait, il veut ouvrir un répertoire mpdf_ttf ? Parce que j'ai aucun répertoire avec ce nom. Mais quand je le créé, cela ne change rien

  • Partager sur Facebook
  • Partager sur Twitter