mardi 26 décembre 2017

CC# 16, 17, 18,19 & 20

 CC# 16

Je me suis aventurée, par le passé, dans le object oriented programming
rendu possible par Microsoft Visual Studio. L'idée directrice en revient
à modulariser le code en termes d'objets-code, ce qui sinplifie les choses
considérablement. Je veux un rectangle pour mon projet, j'en demande un
dans l'interface de codage et tout le code se met en place automatiquement.

Grâce à CC, je comprends que le OOP est en fait issu de la discipline du
Software Engineering. Le problème de fond: des énormes programmes sur
lesquels plusieurs personnes travaillent, mais que personne ne connaît dans son
ensemble. Microsoft Office à lui seul se bâtit sur 14 millions de lignes de code!!

Il y aura des pratiques sécuritaires à suivre, bien sûr. Et on garde toujours des versions
antérieures pour parer l'éventualité d'un bug à l'intérieur d'une mise à jour...


                                        *     *     *
 CC# 17 nous présente les circuits intégrés et la fameuse
loi de Moore: l'accélération du nombre de transistors sur une
petite puce de silicone. Et ce M. Gordon Moore mérite d'être plus
connu: il est le fondateur, avec Robert Noyce à qui l'on doit la bonne
idée du silicone, en 1968 de Intel ( de integrated et electronics),
aujourd'hui le fabricant des CPUs de la plupart des ordis.

La première génération d'ordi, entre 1943 et 1960, se fiait à
des composantes discrètes, que l'on devait souder. Avec
éventuellemnt des millions de raccordements, ces ordis remplissaient
des salles.

La deuxième génération a remplacé les tubes à vide par les transistors.
En 1958, Jack St. Clair Kilby (circuit intégré, reconnu par un prix
Nobel en 2000) et Noyce permettent une première miniaturisation.
Mais c'est finalemnt le cicuit imprimé, en 1963, qui sauve la situation.
Plus les composantes deviennent légères, plus les ordis peuvent être
rapides, et ils tirent finalement moins de pouvoir.

Le premier microprocesseur en 1971 inaugure la troisième génération
(l'Intel 4004, sur 4 bits). Depuis quelques milles transistors par puce, on
passe en 1980 à 30 000, 1 million en 1990, 30 millions en 2000, 1 milliard
en 2010. Ceci requiert des procédures de miniaturisation extrêmes, dont la
conception se fait sur ordi; Apple propose actuellement une puce de 3.3 milliards
de transistors. Effectivement,  une quatrième génération.




Peut-on aller plus loin: le photomasque semble avoir ateint ses limites;
et avec des bornes à quelques atomes de distance, les électrons
deviennent passibles d'effectuer des sauts quantiques...

                                     
                                             *     *     *

On oublie parfois à quel point le développement
de l'ordi personnel a testé le pauvre consommateur.
Il se sentait partie prenante de l'aventure, et a
vécu les débuts du système d'exploitation.

Dans CC# 18, on voit comment les fameux drivers (pilotes)
que nous connaissons tous furent la réponse au problème du
concepteur de système d'exploitation qui devait constamment
peaufiner afin d'intégrer tel ou autre périphérique. Le pilote coupe
court: il est spécifique au périphérique, et vient avec la marchandise.

Et que dire de l'infâme blue screen of death; l'écran bleu des
premiers ordis MS-Dos qui nous annonçaient que plus rien n'allait.
CC nous apprend que c'était voulu. En mettant sur peidUNIX, les
concepteurs n'avaiebt que très peu de mémoire à leur disposition.
Ils ont programmé les crash inévitables!! Dire que tout ce temps,
je me suis sentie coupable...



                                           
                                         *     *     *

Le CC# 19 nous ballade dans l'historique de la mémoire ordinateur.
Bien sûr, c'est un aspect primordial de l'informatique. Le grand moment
pour la mémoire: quand on a finalement put accéder à une addresse
mémoire d'une façon non-cyclique, c'est-à-dire d'une façon dite aléatoire.
On en parle encore: voilà la Random Access Memory ou RAM de nos ordis.



                                  *     *     *
Comment les données en mémoire sont-elles organisées. Le CC# 20
nous en donne un bref apperçu. C'est un peu étourdissant, chaque type de filière
réussit à traduire l'information en simple séquence de valeurs binaires.




Et l'information à propos de ce qui s'ensuit - metadata - permet de s'y retrouver.
si les données se retrouvent éparpillée, on peut les remettre en ordre: C'est
la défragmentation. Par contre, si on désire déménager une filière, on ne change
que l'information dans un directory. L'info se trouve toujours au même endroit.

Bien prope!

lundi 25 décembre 2017

CC# 15

Il aura fallu un travail acharné de la part de philosophes et
mathématiciens pour arriver à l'ordinateur tel que nous le connaissons.
L'américain C.S. Peirce se rendit compte, en 1880, que l'algèbre de Boole
pouvait s'exprimer par les fonctions logiques NAND ou NOR, et
travailla ensuite sur la machine logique électrique (1886). En 1900,
le mathématicien Hilbert demandait, dans son dixième défi du millénaire,
si un algorithm pouvait se prononcer sur l'ampleur d'un problème
mathématique. (En fait, non; 1970). Et Alonzo Church se penchait, en 1930,
sur la possibility de formaliser  les mathématiques en mode
algorithmique. Cela reviendra à son célèbre étudiant, Alan Turing, de
nous proposer sa Turing Machine. Tout ce qui est 'Turing Complet'
constitue un véritable ordinateur.

La machine se forme d'un long ruban mémoire, d'une fonction écriture et d'un
fonction lecture. Voici les règles de son fonctionnement.


L'exemple est simple, en suivant les règles, on en vient à indiquer que le nombre
de 1 dans notre séquence est pair, avec l'ajout final d'un 1. Bien mignon, car notre
séquence devint par ce fait-même impair. C'est le méchant secret de famille:
notre ordinateur théorique ne peut s'arrêter qu'avec un crash. La logique et
l'algorithmique sont à jamais des problèmes différents.

C'est dans le Crash Course, Turing a travaillé pendant la deuxième guerre à
decrypter les messages des forces allemandes. L'avantage qu'il possédait est le suivant:
dans le code secret, chaque lettre pouvait être représentée par une autre mais
la véritable lettre n'aparaissait jamais. Il se servait de cette notion pour venir à identifier
des mots usuels allemands...

Ci-bas, un site qui propose de faire diverses opérations sur une Turing Machine:
avec 1 ruban; avec 2. C'est l'opération demandée qui détermine la table de ransition.
On entre ensuite ses chiffres, et on a tout loisir à suivre la machine sur son périple...

       

             
http://turingmaschine.klickagent.ch/mehrband/?lang=en#__

dimanche 24 décembre 2017

CC# 14

C'est bien évident, on peut demander à un ordinateur
d'effectuer un travail voulu de manières différentes, selon la
syntaxe qu'applique un language particulier. Mais il faut tout
autant reconnaître que certains languages de haut niveau
seront spécialisées et offriront plus de possibilités au programmeur.


Ainsi, tout language permet la formation de tableaux - arrays - qui
peuvent contenir des membres similaires ou disparates. Mon array
peut contenir: [hiver] [printemps] [été] [automne], ou encore
[jambon] [patate] [salade] [gâteau] et j'ai toujours accès avec un
index 0,1,2,3. Mais certains languages font plus loin et me permettent
des structures à l'intérieur d'arrays et même de référencer un pointer,
donc une addresse mémoire qui fait réféence à une deuxième adresse,
avec les informations qu je désire. C'est le cas pour le C, et ses variantes.


 source: Wikipedia

On remarque le return 0; zéro est le marqueur de la fin d'une activité.

source: W3 Schools

samedi 23 décembre 2017

CC# 13

Never a dull moment, comme aiment blaguer les anglophones. Dans le CC# 13, il
est question des algorithmes de tri, en particulier, pour trouver le plus court chemin
entre deux noeuds en choisisant un point de départ et en connaissant le point d'arrivée.
Nous voilà donc dans une sous-discipline importante de l'informatique (Analyse), car
l'Internet doit constamment avancer de l'information selon ces algorihtmes, le GPS nous
localise, Google Maps nous trouve des restaurants...etc

L'université de Bordeaux - et son école d'informatique - aurait même changé sa devise
pour le plus court chemin pour aller  loin...😉


L'exemple proposé se sert de l'algorithme de Dijkstra, un algorithme qui propose
du 'label-setting', c'est -à dire, qui met les noeuds à jour après chaque tour..


On peut s'amuser à créer ses propres problèmes sur le site ci-bas:

https://www-m9.ma.tum.de/graph-algorithms/spp-dijkstra/index_en.html

                                              *     *     *

Le problème de fond revient à ne pas épuiser l'ordi avec des calculs pas nécessaires; car
le nombre de calculs - et donc le temps de travail de l'ordi - monte très vite si on n'optimise pas:  O(n!) opérations à voir si on traite toutes les possibilités; pour 6 noeuds, cela revient à 720 .

On aime bien l'ordre topologique pour traiter un problème:


L'algorithme de D crée un tel ordre à mesure de son exécution.

https://www.math.u-bordeaux.fr/~gstauffe/cours/MSE3211A/MSE3211A_3.pdf

vendredi 22 décembre 2017

CC# 12

Au niveau de l'assembleur, une démarche avec unconditionnel
prendrait cette forme. On soustrait un nombre de l'autre à répétition,
(en allant porter la somme des soustraits) jusqu'à rencontrer unnombre
négatif: las oustraction n'est plus possible. On a donc réussi une
divion avec reste, de façon plutôt pénible.



À remarquer: un résultat temporaire doit soit être stocké dans un
régistre interne, ou retourner sciemment dans notre régistre de travail.
Sinon, notre programme aura tendance à faire et refaire la même chose...

Et pour la division, pensons-y. Déplacer un nombre binaire sur la droite
le divise effectivement en deux; petit stratagème qui servira...
Ci-bas,  56 devient 28!


jeudi 21 décembre 2017

CC#11





On voit ci-haut, quelques termes utiles en informatique.
Historiquement, l'assembleur - qui offre le code machine en
mnémoniques utiles à l'humain - a été le premier programme
pour ordi laissé en mémoire. Fait cocasse: tous n'y croyaient pas; mais
auourd'hui, c'est la norme. Même que divers compilateurs ont
maintenant le pouvoir de créer du code-machine sans l'intermédiaire
d'un assembleur.

 Autre aspect intéressant, un assembleur n'aura
pas nécessairement une relation un à un avec les opérations
données et il peut devenir impossible de dé-assembler car le code
se sera modifié entre temps...

La définition de l'interpréteur est claire, on passe à l'instruction machine
une ligne de code à la fois, donc de façon dynamique. Cela ne sert guère pour les
languages et travaux intensifs, mais plutôt dans les fureteurs, et pour les languages
faciles à maîtriser tel Python et PHP. Cela permet de faire le ménage dans les ordis.

La compilation traduit le programme au complet avant de l'interpréter. Ceci
devient très utile au programmeur, qui sait d'avance si son programme va tourner.
La compilation formera une étape de l'élaboration d'une application, tel un jeu.

source: Wikipedia

CC# 11

En 1957, IBM produit le Fortran (Formula Translator) qui - hélas - ne compile
que pour ses propres ordis. Quelques années plus tard, on voit le COBOL
(Common busines-oriented) produit par un groupe de d'intéressés. Ce dernier
compile sur tous les ordis.

mercredi 20 décembre 2017

Jacquard

CC# 10

On cite facilement le recensement Américain de 1890 pour
avoir utiliser le premier tabulateur méchanique, dit de Hollerith.
Plutôt surprenant, le véritable départ - l'idée
maîtresse - de se servir  de cartons perforés viendrait
d'un tout autre domaine: le textile. En 1804, Joseph
Marie Jacquard(1752 - 1834) inventait le métier à tisser Jacquard,
qui permetait de fabriquer des tissus avec les motifs désirés.

image: Wikipedia
                                              *     *     *

GAP Canada

lundi 18 décembre 2017

CC 8 & 9


CC# 8

Nous voici au niveau d'abstraction du software, avec des instructions en language. Il
faut d'ailleurs spécifier l'arrêt de l'ordi.


 Le jeu d'instructions du Intel 4004:

CC# 9
 Pour améliorer se performances, le processeur actuel se sert d'une cache.
il y aura moins de temps mort pour le CPU.


La Chine possède actuellement un ordi avec 10 milions de coeur.
Un coeur supplémentaire travaille en parallèle.

CC 6 & 7

CC # 6

 Chaque petit carré serait un bit.
Nous voilà muni d'un million de bits, donc d'un mégabyte de mémoire.

CC # 7

Le RAM reste séparé du CPU.  Les instructions fuitent vers la zone de travail
à la file.



Les quatre premiers chiffres forment l'opcode; les quatre derniers
une adresse RAM. Un jeu de portes logiques permet la suite...


On va chercher les données à l'adresse indiquée pour un dépôt au régistre A.
Il ya donc une unité de contrôle, et un ALU porteur d'instructions.


 Le premier véritable processeur: Intel 4004.


C Architecture


L'architecture von Neuman (université Princeton) mélange données et instructions. Celle 
dite de Harvard les garde séparés.

von Neuman: 

 Harvard:

Aujourd'hui, cette distinction a moins d'importance.De fait, unportable
de nos jours serait von Neuman. Mais on parle plutôt de niveaux
d'architecture: niveau3, acessible au programmeur; niveau 2, un micro
code pour que différentes générations d'ordi restent compatibles (IBM);
niveau1: la réalisation physique de l'ordi, qui peut se faire sur silicon
à l'aide de transistors mais il y a d'autres possibilités.

source: Wikipédia

dimanche 17 décembre 2017

Boole

L'algèbre de Boole - oeuvre du mathématicien George Boole (1815-1864) - date de
la moitié du 19ième siècle. Mais c'est bien ce travail, qui nous montre comment
exprimer et manipuler des valeurs binaires, qui formera la base des ordinateurs du
20ième siècle.

On y trouve des primitives, AND OR et négation. Et des fonctions annexes:
implication, le XOR, inversion. (On exprime parfois le AND par le x de la multiplication
arithmétique, qui coincide parfaitement; et le OR par l'addition +, qui coincide en
tout sauf pour 1 + 1 = 1).




Si on se demande comment les portes logiques de notre ALU seront fabriquées;
elles ne le seront pas du tout, au sens d'objets pièces (no moving parts). La porte
logique est aussi le transistor; le transistor exprime son actualisation. Dans un
ordinateur mis en marche, le courant se ballade à l'intérieur du jeu des transistors,
ici High, là Low. En mettant notre ALU virtuel au mode 1 - logique - on peut très bien
observer comment les résultats pour toute entrée répondront aux exigences de l'algèbre
de Boole.

Pour cet exemple, on lit le résultat pour chaque colonne dans le tableau XOR,
et on inverse. En passant au mode arithmétique, on trouve:

J'ai laissé le carry-in à High, donc C est à 0. 
Voilà que 7 + 3 = 10

                                              *     *     *

 Très difficile de trouver une photo d'un circuit intégré: C'est extrêmement
petit, et aussi fragile car la moindre poussière risque de tout fausser. Donc,
Intel  nous montre des belles boîtes métalliques avec le nom de ses CPUs imprimés
à l'extérieur.



Grâce à la NASA, on peut voir le dedans.





Les transistors qui sont les bêtes de travail des circuits sont construits grâce à des
processus photographiques qui - à l'aide d'un masque, pour certains - vont identifier les zones
à couper pour introduire les fils. Une fois le transistor assemblé, il sera testé. S'il est faux,
il faut le jeter car il n'y a jamais la possibilité de faire une réparation. C'est à ce point petit.

Que font les transistors? Ils amplifient un signal électrique, de Low vers High. Le transistor
dit de contact est aussi un diode: il ne peut retourner en arrière. Un transistor MOSFET qui
induit un courant, lui, le peu.

Le silicone, un matériel semi-conducteur, sera dopé soit vers le positif (avec moins
d'électrons libres) ou vers le négatif grâce à l'ajout de poussière de métaux conducteurs.
Si un positif et un négatif entrent en contact, il y aura un mouvement d'électrons, donc
un courant. S'il n'y a qu'un rapprochement sans contact, il y aura une hausse de voltage
entre les deux, qui peut induire un courant dans le voisinage. On a le principe du
fonctionnement des deux types de transistor.

source: Gizmodo



http://www.explainthatstuff.com/howtransistorswork.html

vendredi 15 décembre 2017

Mémoire


Pour le Crash Course numéro 6:

Ce qui rend la mémoire possible dans un ordi revient à un
procédé passablement pas catholique. On fait un boucle: la valeur
en sortie, une nanoseconde plus tard, se voit retournée en entrée dans une
même porte. Cela crée une petite prison nommée latch.

Ci-bas, on garde en mémoire un positif, et en coloré, un négatif...


Un régistre retient un seul nombre; le nombre de bits du registre
devient width. Pour une matrice de mémoire, l'adresse se code en
2 nombres de 4 bits. Un multiplexer (multiplexeur) ira chercher l'adresse rang, et
un autre l'adresse colonne.

Une barette de mémoire 8 bits crée une liste de 256 espaces de 8 bits pour de
l'information, donc des bytes. Les ordis modernes se servent d'adresses de 32bits,
et on passe de megabytes à gigabytes pour le RAM.

                                              *     *     *

Pour la petite histoire, ci-bas un kibibyte (1024 bytes) de mémoire pour ordi.
L'idée primordiale derrière la disposition est de reduire le nombre de fils (connections)
nécessaires. On se souviendra que 1 byte vaut 8 bits, et que 8 bits peut
représenter un nombre entre 1 et 256. Pas le Japon!


Déjà mieux, des SDRAM et DDRAM pour portable. Ces deux modèles seront synchrones,
c'est-à-dire se chargeront au rythme de l'horloge de l'ordi. et donc plus intéressants
pour les concepteurs. Ils sont identifiés en MHertz.



  

Les tous derniers modèles, encore plus rapides d'accès. Pour la capacité:



Désignation Mhz/bande passante:


https://www.lifewire.com/laptop-memory-buyers-guide-833024

                                              *     *     *

Le fait de passer à des 2, 3 ou 4 veut dire une augmentation de la capacité du bus
qui - grâce au double pumping - transfert des donnés sur l'ascendant et la fin du
cycle horloge; mais il peut aussi être accompagné d'un temps de latence plus long, des
séquences de bits plus longues à lire et de surchauffe. Donc surtout intéresant pour
un plus fort transfer de données.

source: Wikipedia