Et même si par foncteur tu voulait parler des pointeurs de fonctions le chapitre sur les pointeur est après aussi
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à.
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 ?
Enfin après c'est mon avis, c'est discutable, mais je trouve ça un peu (voir beaucoup trop) brusque
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 !
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 ? ), 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 !
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).
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)
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 (Et même si par foncteur tu voulait parler des pointeurs de fonctions le chapitre sur les pointeur est après aussi ).
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à.
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
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 !
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.
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 !
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
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?^^
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).
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).
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
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)
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".
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.
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/
-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.
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
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 ).
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 ?
>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
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
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 ?
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 ?
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
Discord NaN. Mon site.
Discord NaN. Mon site.
Discord NaN. Mon site.
Discord NaN. Mon site.
Discord NaN. Mon site.
Discord NaN. Mon site.
Discord NaN. Mon site.
Discord NaN. Mon site.
Discord NaN. Mon site.