Pouet ! Bah voila mon Ubuntu marche super bien y compris sur mon portable, ça m'aura pris du temps mais voila. Et comme cet été j'ai du temps à y consacrer je me demandais ce que vous me conseillez pour améliorer mes connaissances et ma maîtrise qui pour le moment sont assez petites malgré mon intérêt pour cette chose.
1ère question : Dois-je y aller en douceur et commencer par installer des distros moins "accessibles" comme Debian, ou Gentoo, ou alors y aller comme un bourrin et tenter de faire une distro en suivant un tuto linux from scratch ? J'imagine que cette dernière solution nécéssite plus de connaissances que j'en ai, car même si j'ai tripoté pas mal de fichiers de config, compilé des programmes etc, y'a surement un tas de trucs que j'ignore de savoir (ou allons-nous ? d'ou venons-nous ?) Je sais que Mr Chris a testé ça mais tu es en école d'informatique, hein ? hum ?
Foila !
Tiens j'en profite aussi pour vous demander (
2è question, donc, 'suivez ?), j'avais commencé à apprendre un peu le C (et le basic...) au collège et au lycée mais j'ai jamais eu la motivation d'aller jusqu'au bout... (faut dire que mon remake de GTA en quick basic était relativement pitoyable, y'avait un bonhomme + une voiture qui était en fait un carré de 16x16 pixels, et à part se faire écraser on pouvait rien faire, bref) cet été je voudrais donc m'y remettre et je voulais savoir quel langage vous me conseillez... je veux dire, par rapport à linux, histoire de savoir coder des petits trucs quoi, genre applis d'utilité public permettant de renommer 36 fichiers d'un coup ou ce genre de trucs...
Bah voila je vous remercie d'avance !
1) LFS est très détaillé et t'apprendra sûrement beaucoup de choses même si tu ne vas pas jusqu'au bout (c'est à dire avoir une LFS qui boote)
Pour Chris je sais pas mais moi j'ai davantage appris seul et sur le net qu'en cours, donc çà ne veut pas forcément dire grand chose qu'on soit en école d'info
Arch ou Slackware peuvent être deux très bonnes distributions si tu veux en apprendre plus sur Linux, debian (surtout) et gentoo ont pas mal d'assistants pour te faciliter la vie
2) Pour des "applis d'utilité publiques" tu peux apprendre le scripting shell, ou le perl, voire le python (perso je suis pas fan de ce dernier). Le C c'est plutôt pour la programmation pure et dure.
Olé, merci pour la réponse.
Et tout ce qui est pilotes etc, c'est codé comment ? C'est compliqué ?
Je veux dire, serait-il réaliste qu'un jour je veuille coder un pilote pour une clé usb non prise en charge ou un truc dans le genre (même si c'est de moins en moins probable)
Disons qu'il te faudra d'abord apprendre le C "normal", puis après apprendre le C en mode kernel. Ce n'est pas très différent du mode normal, juste quelques fonctions auxquelles tu n'as pas droit (toutes les fonctions classiques en fait, le kernel doit les implémenter lui même).
Donc pas dans un premier temps j'en ai peur ![]()
Les pilotes sont généralement codés en C avec parfois des morceaux d'assembleur.
Le but étant de communiquer directement avec le matériel, les opérations les plus fréquentes se rapprochent plus de l'électronique que de l'informatique : je place tel bidule dans tel registre, je balance tel donnée sur tel port I/O, etc.
C'est compliqué dans le sens où il faut être à l'aise avec les deux langages sus-cités, ce qui demande pas mal de pratique. Il faut aussi généralement se farcir des tonnes de spécifications matérielles, justement pour savoir comment prendre en charge le matériel pour lequel on développe un pilote.
On est bien loin du script qui renomme des fichiers. ^^
Ton exemple de l'USB est mal choisi car il s'agit d'un standard et si une clef n'est pas reconnue par le noyau de ton OS, c'est qu'elle ne respecte pas le standard mais une technologie propriétaire vaseuse. Auquel cas tu ne trouveras jamais de spécifications et tu ne sauras pas comment développer ton pilote (à moins de faire du reverse engineering mais là ça dépasse le cadre des compétences du commun des mortels).
Linux est un OS très évolué et qui jouit désormais d'une très vaste communauté, qui fait que quasiment tout type de matériel dont les specs sont ouvertes a soit un pilote au point soit une tripotée de gens compétents dessus.
Après bien évidemment rien ne t'empêche de réinventer la roue pour le fun (perso j'adore). ![]()
Hum... je suis si vieux que ça pour qu'on m'appelle Mr ?
Déjà, mettons fin à un mythe. C'est pas avec un cursus info à l'ENS Lyon qu'on devient fort en Linux. Les cours se résument à de la théorie des graphes et des automates, de la logique, du calcul scientifique, et de l'étude de réseaux. Mais tout ça est très théorique : j'ai fais un semestre de cours sur les réseaux sans jamais voir l'ombre d'un paquet passant par un câble. (si si, c'est possible.
)
Si tu as pas mal de temps devant toi, LFS est tout à fait envisageable. Les versions 6.x sont très bien faîtes. Elles sont si bien faîtes que c'est possible d'arriver au bout du livre juste en copiant/collant les instructions sans rien comprendre en fait.
Là où tu apprends vraiment des choses, c'est en lisant le texte accompagnant ces instructions. C'est pas énormément dur à comprendre pour peu que tu ais des notions basiques de programmation et que tu connaisses un peu linux.
Sinon :
pour un jeu style GTA, je ferais ça en C (ou en C++ si on veut programmer orienté objet) à l'aide de la librairie SDL personnellement.
pour renommer 36 fichiers d'un coup, j'utilise sh (renommages simples) ou perl (renommages sophistiqués)
le reverse engineering dépasse aussi le commun des immortels
réinventer la roue, ça reste pour moi une bonne manière de la maîtriser complètement
Ok je note que ma vie ne sera pas consacrée à faire des pilotes gnéhéhé.
Dernière question jusqu'à la prochaine, est-il judicieux d'installer sur une partoche test différentes distros comme Debian, puis gentoo, puis arch puis un LFS ? Sera-ce utile ? (ou dans un autre ordre ?)
Moi j'avais 4 distros (+ windows XP...
) en même temps sur mon disque dur à la grande époque. Au passage, tu peux garder la même swap pour tous les linux.
héhé c'est bon à savoir. L'emplacement des partoches à une influence par rapport au swap ?
En pratique, tu t'en fous de l'endroit où est la swap.
Tu fais une partition étendue et toutes les partitions linux dedans. Et le tour est joué.
Autre conseil, n'installe grub que pour ton système linux principal. Pour les autres, contente-toi d'ajouter une entrée dans le /boot/grub/menu.lst de ton système principal. Ça évite les prises de têtes à chaque installation d'un nouveau système.
j'avais bien l'intention de le faire, seulement pr Ubuntu par exemple il me semble qu'on te demande pas si tu veux installer grub ?
Note : Faire une LFS est facil, par contre faut savoir lire de l'anglais ^^
Au niveau des langages de programmation, savoir coder en bash te sera clairement utile pour faire des scripts super pratiques.
Sinon pour faire des applis ou des jeux je dirai que ça dépend un peu des affinités de chacun et qu'il faut avoir un peu tout testé pour se faire une idée.
Perso (et je sais que là je vais me prendre des tomates) je n'aime pas le C *argggggggggg ? qui a lancé cette pastèque ? è_é*
Je sais qu'il est rapide, que pas mal de monde l'aime bien mais moi c'est pas mon truc vu que j'ai tendance à préférer la programmation orientée objet, cependnat je pense tout de même que avoir codé un peu en C ne peut être que bénéfique et surtout si tu envisages de te mettre au C++ après.
Parce que oui pour les langages objet, moi j'ai tendance à faire un peu 3 familles :
- le C++, très rapide, répandu mais on a quand même l'impression que y a des trucs mal foutus et il est un peu délicat à maîtriser au début.
- Java et bon C# (sous Windows) qui sont des langages objets avec syntaxe C mais qui sont quand même nettement plus agréables pour un débutant que C++, ils sont assez faciles à apprendre et permettent de faire des trucs sympas assez rapidement. Le problème c'est que ces 2 langages passent par des interpréteurs qui sont pas très légers, que les API de base pour faire des applis graphiques sont immondes, bref moi j'adore coder en Java tant que je fais pas de trucs graphiques XD
- les langages comme python ou ruby qui ont cette fois une syntaxe qui ne ressemble plus à C, sont interprétés également mais sont moins lourdingues que Java. Je trouve que c'est utile de connaître ces langages car ils sont très agréables et permettent de faire des applis sympas rapidement et ce même en graphique. Ce sont de bons langages pour commencer la programmation objet.
Bref au final je pense qu'apprendre à coder au moins un peu de C (par exemple en suivant le tuto très bien fait du http://www.siteduzero.com/tuto-3-8-0-apprenez-a-programmer-en-c.html
(Sérieux je te conseille vivement de lire, c'est très bien expliqué, c'est marrant et c'est fait vraiment pour partir de zéro).
Ensuite je pense que découvrir la programmation objet est aussi très important et on peut après se forger des préférences (certains comme moi ont tendance à privilégier quasiment tout le temps l'objet, tandis que mon meilleur pote lui préfère définitivement le procédural). Même si c'est purement subjectif, je trouve qu'un langage comme python est très bien, tu peux aussi tenter Java si tu veux garder une syntaxe "à la C".
Ok je note tout ça !
À noter que java, C#, python et autre ruby sont incroyablement lents, donc pour des jeux c'est vraiment pas top (les machines à 512 Mo de RAM, ça existe encore
)
Paulop : la version 6.1 est traduite en français, donc même pas besoin de l'anglais. ![]()
"À noter que java, C#, python et autre ruby sont incroyablement lents, donc pour des jeux c'est vraiment pas top (les machines à 512 Mo de RAM, ça existe encore
)"
heu... il y a un bon paquets de jeux ecrits en java en python ou en ruby... Le gouffre de performance n'est pas si enorme que ca. On peut raisonnablement ecrit des jeux dans ces langages.
De plus, la plupart des gens n'ecrivent pas des jeux tres gourmand en puissance de calcul, l'aspect important est alors l'architecture logiciel...
Sinon Chris, tu dois avoir un truc à suggérer à la place hum ?
C'est pas parce qu'il y a un certains nombre de paquets en java/ruby/python que c'est bien hein.
Pour faire des softs vraiment rapide (et presque aussi portables que les applis java), il y a le C.
Pour les mordus de l'orienté objet, il y a le C++.
Et pour les peties tâches, il y a sh/perl.
Dans tous les cas, le passage par le C et par sh est presque une nécessité pour quelqu'un qui veut metter le nez dans linux. ![]()
Ouais enfin Chris faut pas non plus exagérer, Java, Python et Ruby c'est clairement plus lent que C ou C++ mais ça se remarque seulement sur les grosses applis intenses ou les gros jeux.
Pour la plupart des jeux amateurs et à fortiori 2D, la vitesse de ces langages est dans la majorité des cas suffisante et ce même sans une bête de course forcément. La charge mémoire là je dis rien, en effet ils sont plus lourd mais bon faire tourner des jeux amateurs sympas sur une machine 512Mo avec ces langages c aussi largement possible.
Puis ensuite y a des avantages et des défauts de chaque côté. En programmant en C ou en C++ tu auras un programme certes plus rapide mais tu vas devoir aussi te coltiner en phase de conception et d'implémentation, toute la gestion mémoire pas forcément acquise à 100% (et surtout en C++) pour quelqu'un de relativement inexpérimenté en programmation, et tout ça c'est sans compter les magnifiques segfaults qui sont de vraies bêtes noires quand on commence et qu'on se met à bidouiller des pointeurs dans tous les sens.
Pour moi expérimenter les langages dans un ordre comme celui-ci :
C >> Java/Python/Ruby >> C++
est quand même agréable, le C parce qu'il le faut bien (langage procédural, rapide et puis c'est le C quoi
, le Java/Python pour apprendre la POO de manière assez tranquille (faut pas oublier que la POO est pleine de concepts et de subtilités différentes du procédural et pour moi y a assez à apprendre, on ne veut pas forcément s'occuper des fuites mémoires ou des erreurs chiantes inhérentes aux langages de plus bas niveau). Puis le C++ pour avoir de la POO vraiment rapide, certes c'est plus délicat que Java et co mais vu qu'on les as déjà vus, on connaît toute la partie POO et on peut se concentrer sur la gestion manuelle et fine de la mémoire par exemple.