Archive

Un peu de lecture

L’été qui commence, j’ai enfin du temps libre pour passer du temps sur le sujet qui me passionne: l’informatique. Prochaine session, je me retrouve en génie logiciel, suite à mon changement d’orientation. La session teminée, je me suis dit pourquoi ne pas se mettre dans le bain? Je suis passé faire un tour à la bibliothèque de mon quartier pour y trouver deux livres qui me semblent de niveau et d’intérêt. Voici donc mes deux premières lectures:

Halte aux hackers linux par Brian Hatch, George Kurtz et James Lee


L’objectif du livre est de conscientiser le lecteur aux différentes manières par lesquels un “hacker” serait en mesure d’accéder à un système, profiter de ses droits pour faire du grabuge ou simplement démolir le système dans son ensemble, ou encore d’insérer quelques lignes de codes dans une applications afin d’en recevoir les informations par email (troyen). C’est un livre qui nécessite des connaissances avancés de Linux, toutefois, la majorité des concepts sera compris des débutants ayant connaissances des bases. Pour le moment, j’en ai lu 3 chapitres dans lesquels on nous introduits premièrement à la sécurité Linux, que ce soit en termes de permissions fichiers, quotas, ports, mémoire virtuelles, cpu, etc. Deuxième chapitre, une bonne introduction sur comment prévenir les attaques et quoi faire après une attaque (restauration). Le troisième chapitre s’attaque au comment un hacker fait pour découvrir le plus d’information à propos d’une machine, tel un voleur qui tourne autour d’une maison qu’il veut cambrioler. Dans le prochain chapitre, le livre abordera le social engineering, qui est selon mon opinion, un sujet très important du hacking puisqu’il n’est pas rare que le hacker découvre plusieurs informations à l’aide de ressources ‘humaines’.

Systèmes d’exploitation, 2e édition par Andrew Tanenbaum


Cette brique me semble digne d’un ingénieur ou d’une personne qui souhaîte en apprendre sur les systèmes d’exploitation. On y passe de la gestions des processus (threads) à la gestion de la mémoire en passant aux systèmes multiprocesseurs. Le livre aborde même vers la fin la création de son propre système d’exploitation. De plus, il passe une partie importante sur deux système important de notre époque soit Unix et Linux et Windows (2000).

Je n’ai pas encore attaqué cette brique mais j’ai bien hâte d’en découvrir plus sur le sujet. Je voudrais vous promettre d’écrire deux messages supplémentaires pour vous en faire les résumés et appréciations après leur lecture respective mais je ne suis pas certain que je leur passerait de travers d’un seul coup.

Vaisseaux

Comme tout bon élève qui se respecte, je n’écoutais pas toujours durant mes cours au secondaire. Cela a eu pour effet de me porter à dessiner dans les notes de cours… Je ne suis pas très bon dans le dessin réalistique (personnes, objets de dimension raisonnable), mais j’ai toujours apprécié mes propres dessins de véhicules, spécialement les vaisseaux que je dessinais. Je vous fait donc part d’une partie de ces dessins, espérant en découvrir d’autre au fil du temps pour les partager avec vous :)

ship-8.png
ship-11.png
ship-13.png
ship-21.png
ship-17.png
ship-12.png
ship-22.png
ship-6.png
ship-3.png
ship-19.png
ship-20.png
ship-2.png
ship-14.png
ship-18.png
ship-23.png
ship-7.png
ship-15.png
ship-9.png
ship-10.png
ship-5.png
ship-16.png
ship-4.png
ship-1.png

La programmation orientée objet

Qu’y a-t’il de plus beau que la programmation orientée objet? Rien.

La programmation orientée objet (ou POO) est un chef d’oeuvre en soi. Pourquoi? Parce que sa simplicité et sa rigueur en font l’une des meilleures façons de concevoir un logiciel, que se soit à l’aide de PHP, de C++ ou de tout autre langage orientée objet.

Mais qu’est-ce qu’ont les programmes orientés objets de si orgasmiques? Et bien, un ensemble de choses. Je ne ferais qu’en citer quelques-uns :
La possibilité d’écrire des classes réutilisables dans d’autres projets.
La possible de partager du code avec d’autres tout en ayant la capacité de retravailler sur son code sans affecter celui des autres.
La possibilité d’avoir des variables internes qui ne peuvent être travaillées par des processus externes.
La liste continue…

Bon, commençons donc avec les rudiments de la POO, en langage C++.

Qu’est-ce qu’un objet? Et bien, il s’agit d’une classe, ou d’un ensemble d’information à propos d’un concept. Par exemple, la classe voiture pourrait être définie comme suit :

1
2
3
4
5
6
7
8
9
10
11
12
class Voiture
{
	public:
		Voiture(int position_x = 0, position_y = 0);
		void avancer(int distance);
		void reculer(int distance);
		pair<int , int> position() const; 
 
	private:
		int position_x_;
		int position_y_;
}

Qu’est-ce que c’est que ce beau tas de code? Et bien, il s’agit de la déclaration de la classe voiture! Eh oui, vous avez découvert votre première classe! Bon, il s’agit ici d’une classe bien banale qui permettra à votre objet Voiture de se déplacer vers l’avant et vers l’arrière. Elle gardera les positions en x et en y (bien que puisque la voiture se déplace actuellement seulement selon l’axe des x, la position y nous est inutile).

Maintenant, attaquons-nous au code qui fera en sorte qu’il y ait de l’action. Premièrement, il faut un constructeur, c’est-à-dire que tout objet Voiture doit être construit avant de pouvoir fonctionner.

1
2
3
4
Voiture::Voiture(int position_x, int position_y)
: position_x_(position_x), position_y_(position_y)
{
}

Ici, on utilise le même nom que la classe pour déclarer ce constructeur. Vous noterez l’utilisation de : avant position_x_ et position_y_. Il s’agit d’une liste d’initialisation, c’est-à-dire que ces valeurs seront initialisées avec les valeurs dans les parenthèses. Pourquoi donc faire cela?

En C++, la création d’objet ce fait de cette façon : premièrement, on crée les attributs (les variables private), puis on appelle le constructeur qui se charge alors de construire l’objet. S’il arrivait qu’un objet A était inclus dans un autre objet B, cela aurait pour effet d’initialiser l’objet A avec des paramètres par défaut. Or, faire cela implique créer un objet avec des paramètres qu’on va changer quelques instants après, ce qui est une perte d’efficacité et une preuve de manque d’intelligence (vous ne voudriez pas paraître stupide non?).

Bon, avec ce constructeur, votre objet peut être créé. Mais rien de plus. Faisons à présent les deux fonctions de déplacement :

1
2
3
4
5
6
7
8
void avancer(int distance)
{
	position_x_ += distance;
}
void reculer(int distance)
{
	position_x_ -= distance;
}

Code très simple. Ajoute ou enlève à la valeur de position_x_, un de nos attributs internes.

Finalement, il nous faut une fonction qui sera en mesure de nous donner notre position en x et en y!

1
2
3
4
pair <int , int> position() const
{
	return make_pair(position_x_, position_y_);
}

Avec ça, vous pouvez déjà faire une Voiture, la faire avancer et reculer et même obtenir sa position! Wow, vous avez presque le début d’un jeu de course entre les mains! À vous de repousser les limites maintenant.

Circuits électriques - Filtres actifs

Je veux vous faire part d’une partie intéressante de mon cours de circuits électriques : la conception de filtres actifs.

Tout d’abord, voyons quelques termes techniques:
Ampli-op : Amplificateur opérationnel : Il s’agit d’une composante électronique qui renferme un paquet de transistors. Il a la capacité de faire diverses opérations mathématiques, tel que son nom l’indique : amplificateur OPÉRATIONNEL.
Condensateur : Permet de garder une charge électrique.

L’avantage de construire des filtres actifs comparativement à des filtres passifs est que l’on ne se sert pas de bobines, qui sont chères, difficilement miniaturisables et imparfaites (point de vue pratique). Les circuits qu’on construit se réduisent donc alors à des résistances, des condensateurs et des ampli-op.

Filtre passe-bas actif de Chebychev

Filtre passe-bas actif de Chebychev
Premièrement, passons au filtre “simple”. Ici, nous avons un circuit qui nous permet d’obtenir un filtre nommé de Chebychev dû à la nature du filtre lui-même. Non, Chebychev n’a pas fait le schéma, mais il a développé une méthode pour obtenir des filtres dont la partie à l’extérieur de la bande passante est plus atténué. Bande passante? Atténué? La bande passante, c’est les fréquences qu’on souhaîte laisser passer, et donc qui ne sont pas filtré (ou atténué). Atténué, c’est lorsque la tension à la sortie de notre filtre est diminué de 3dB. Ça devient rapidement complexe, mais disons que lorsque la tension (en volt) de sortie est de 0.707 comparativement au maximum qu’elle peut atteindre, on considère le signal comme atténué et inexistant (Vout = 0.707 x Vout MAX).

Commençons avec l’ampli-op. Comme vous pouvez le constater sur le schéma, ce ne sont pas toutes ses entrées et sorties qui sont employés. Nous utilisons en général la 2 (inverseuse), 3 (non-inverseuse), 4 (V-), 6 (sortie) et 7 (V+). Les bornes 4 et 7 sont employés pour polariser les transistors qui se trouvent à l’intérieur de l’ampli-op. L’entrée 2 est extrêmement importante. Avec cette entrée connectée à la sortie, nous obtenons ce qu’on appelle du feedback négatif, ce qui permet à l’ampli-op d’ajuster sa sortie pour qu’elle soit toujours constante. L’entrée 3 est l’entrée du signal même. Nous obtenons notre signal amplifié à la sortie, soit à la borne 6.

Ici, il s’agit d’un filtre passe-bas actif du deuxième degré avec un filtre passe-bas passif du premier degrée (composé des éléments R3 et C2).

À ce moment, vous n’avez probablement aucune idée de ce que fait ce circuit. Et bien, il faut demander à Bode de nous faire un graphique (Bode n’étant pas un logiciel mais une personne à qui on doit ces graphiques). On voit ici que toutes les fréquences avant 500 et des plumes sont à zéro (non atténué) et que plus on augmente la fréquence, plus celle-ci est attenué. Donc, vers l’infini, plus de signal!

Filtre passe-bande actif de Butterworth

Deuxièmement, voici le filtre de Butterworth. “Légèrement” plus complexe, il nous permet d’obtenir un filtre passe-bande, donc qui laisse passer certaines fréquences. Celui-ci est conçu pour faire passer des fréquences entres 8500 Hz et 10500 Hz.

Il faut ici créer un filtre actif qui se compose de 3 filtres actifs mis en étages. Cela a l’avantage d’être facile à synthétiser, c’est-à-dire de passer d’un format demandé avec des paramètres exigés à un filtre sous forme de circuit.

Une fois de plus, on fait appel à Bode qui nous montre le genre de filtre que l’on vient de créer. Victoire, on obtient un passe-bande, c’est-à-dire que les fréquences passent où il y a le pic (environ 10 kHz)!

Mais bon, à quoi ça sert toute cette marde là? Et bien, sans cette “marde” là, on ne pourrait pas avoir de télévision, ni de radio. En fait, probablement tout ce qui est de nature sonore et visuelle doit être traité afin de s’afficher ou de s’exprimer de façon correcte sans contenir de bruits. Merci à la science des filtres, certains élèves auront mal à la tête des jours durant et préfèreront s’abstenir de fréquenter un laboratoire d’électronique.

NOTE: Il manque probablement beaucoup d’explications, ça viendra au cours des semaines à suivre :)

Shared network computers not showing up in Leopard

Since I’ve upgraded to Leopard, I couldn’t connect to my Windows network anymore. Browsing through various websites looking for answers, I tried pretty much all of them with no result. Not until I found this page. Is explanation is pretty simple and indeed makes my shared network show up once again!

Here’s the explanation and instructions on how to fix it:

You have plenty of suggestions for fixing the Leopard Windows sharing issue, that I see are all a bit hit or miss. I think the reason for this is because a lot of the things people are trying are fixing the real root issue by accident.

The Leopard advanced network settings has a WINS tab, and in this there is a NETBIOS name field. This is auto-generated by Leopard - it looks like it uses the MAC address to generate it. However, if what is put in there is not compliant with the NETBIOS settings of the Windows network you are connected to, then browsing will not work, because the WINS server will not acknowledge the WINS requests coming from Leopard.

The actual NETBIOS name requirements supported vary depending on the flavour of OS running on the WINS servers on the network. I would suspect the best route to success is to use the most basic NETBIOS name requirements, back from the old Windows NT 4.0 days - stick in no more than an 8-character alphanumeric into the NETBIOS field, and all Windows browsing will be restored.

I had two Leopard machines, one which would browse and one which would not. The browsing one had an 8-character WINS setting, and the non- browsing one had a MAC address in the WINS field. Removing the MAC address and putting in a simple word in the WINS field IMMEDIATELY reinstated browsing.