Éthique de l’ingénieur et drones militaires

Les départements militaires sont souvent les premiers à placer leur argent dans des technologies révolutionnaires qui pourraient leur permettre d’avoir un avantage stratégique sur leurs ennemis. Un exemple connu est celui de la conception de l’ordinateur. Les ordinateurs avaient comme but premier d’effectuer le calcul d’équations complexes décrivant la trajectoire d’un projectile. Ces équations contenaient plusieurs paramètres tels que la vitesse du vent, la distance désirée, la gravité ainsi que la vitesse de déplacement du navire qui tirerait le projectile. Avec les ordinateurs, les scientifiques étaient en mesure d’effectuer ces calculs de manière accélérée. Ils pouvaient de plus assurer que les calculs ne contiendraient pas d’erreurs humaines puisqu’il fallait répéter cette même tâche plusieurs centaines de fois. Une seconde invention développée par un département militaire, DARPA (Defense Advanced Research Projects Agency), est Internet, un des systèmes de communication les plus employés à l’heure actuelle.

Avec les avancées technologiques effectuées au fil des années, les départements militaires ont commencé à chercher des moyens d’accroitre leur capacité d’absorption d’information. Il fallait de plus que cela ne nécessite pas l’augmentation du personnel nécessaire pour ce faire. Une augmentation dans le volume de communication aurait pour impact d’augmenter les chances de transmettre des messages subtilement différents entre individus, ce qui pourrait causer de graves problèmes, surtout en situation d’urgence. Afin d’accroitre leur intelligence sur le terrain en temps de guerre, les départements militaires ont acheté des drones aériens provenant de contractants. Un drone aérien est en quelque sorte un robot, semblable à un avion, mais sans pilote dans le cockpit. Le drone est piloté à distance par un pilote, les deux communiquant par système radio ou satellite. Ces drones ont pour objectif de survoler certains points cibles afin d’obtenir de
l’intelligence et d’attaquer des cibles stratégiques à l’aide de l’information obtenue de diverses sources.

Les recherches actuelles tentent de concevoir des drones qui seraient pilotés automatiquement (sans assistance humaine) et capables de communiquer entre eux afin d’augmenter leur efficacité globale. La conception de systèmes étant capables de tuer se basant sur une intelligence artificielle ou des décisions préétablies amène à poser la question suivante :

Est-il éthiquement défendable pour un ingénieur de concevoir
des drones aériens intelligents employés pour des fins militaires?

Afin d’arriver à une conclusion justifiée sur cette question, une étude de chacune des positions sera présentée. Premièrement, il s’agira de comprendre et analyser les raisons qui appuient la position, c’est-à-dire qu’il est actuellement défendable pour un ingénieur de concevoir de tels systèmes. Deuxièmement, nous aborderons les raisons qui soutiennent qu’il n’est pas défendable de concevoir ces systèmes intelligents. Finalement, une synthèse de cette discussion permettra d’établir la position qui semble la plus appropriée pour l’instant.

Pour lire l’ensemble du texte: Télécharger le PDF

Marshal un hash avec proc

Il arrive souvent que l’on veut écrire un hash imbriqué, tel que objet[:unevaleur][:unesecondevaleur] accédant à la valeur :unesecondevaleur du hash contenu dans objet[:unevaleur]. Voici une implémentation simpliste de la chose.

1
X = Hash.new {|h, k| h[k] = Hash.new(0)}

Avec ce code, à chaque fois qu’on crée un hash non-existant dans X, on ajoute un nouveau hash avec 0 comme valeur par défaut. Si maintenant on veut marshaller X, on obtient l’erreur suivante:

Marshal.dump(X)
TypeError: can’t dump hash with default proc

On obtient cette erreur puisque, lorsqu’on crée X, on a passé un bloc à new ce qui fait que lorsqu’on veut le marshaller, Ruby n’est pas mesure de marshaller le proc associé.
Afin d’être en mesure de marshaller X, il suffit simplement d’éliminer le proc en effectuant une copie vers un nouveau hash sans proc.

1
2
3
Y = Hash.new
X.each {|h, k| Y[h] = X[h]}
Marshal.dump(Y)

Software developer

A man is flying in a hot air balloon and realizes he is lost. He reduces height and spots a man down below. He lowers the balloon further and shouts: “Excuse me, can you tell me where I am?”

The man below says: “Yes you’re in a hot air balloon, hovering 30 feet above this field.”

“You must be a software developer,” says the balloonist.

“I am,” replies the man. “How did you know?”

“Well,” says the balloonist, “everything you have told me is technically correct, but it’s of no use to anyone.”

The man below says, “You must work in business as a manager.” “I do,” replies the balloonist, “but how did you know?”

“Well,” says the man, “you don’t know where you are or where you are going, but you expect me to be able to help. You’re in the same position you were before we met but now it’s my fault.”

Source: Coding Horror

Développement logiciel sur plateforme Linux et Windows

Le domaine informatique a toujours été dominé par trois géants (du côté consommateur) : Linux, Windows et Macintosh. Les trois systèmes étant très différents, cela a toujours causé des complications aux programmeurs qui voulaient rendre leur code accessible à une plus grande population. Ainsi, ils devaient « porter » leurs codes vers une nouvelle plateforme, soit pour passer de Windows à Macintosh ou encore de Linux vers Windows par exemple. Afin de diminuer cette tâche qui se verrait devenir répétitive, ces développeurs ont eut l’idée de regrouper les ensembles de codes similaires afin d’en former des librairies qu’ils pourraient réutiliser pour accélérer le développement d’applications futures.

Avec l’ensemble des librairies qui ont été codés avec le temps (GTK, FTLK, Qt, wxWidgets, OpenGL, SDL, etc.), la majorité des plateformes informatiques ont commencés à devenir de plus en plus uniformes, permettant ainsi de déployer un même code sur plusieurs machines utilisant des systèmes d’opérations différents. On observe de plus la présence d’environnements de développement intégrés (EDI) multi-plateformes tel que Netbeans, Eclipse et Code::Blocks. Toutefois, il reste à déterminer quelle plateforme est la plus apte à permettre un développement qui sera rapide, efficace et de qualité. Afin de débattre de cette question, il est nécessaire d’évaluer certains aspects essentiels à la création d’un logiciel. Un logiciel peut être très facile à programmer mais être de piètre qualité en termes de performance (facilité de développement). Il peut être très long à programmer mais ne rien coûter (coûts reliées au développement). Les outils que les plateformes nous offrent peuvent être flexibles mais nécessiter une grande connaissance de ceux qui les emploient. Pour le développeur qui souhaite vendre son logiciel, il faut aussi connaître les diverses restrictions qui s’appliquent lorsqu’on emploi une librairie. Bref, il s’agit ici d’un ensemble d’aspects que nous aborderons afin de déterminer quelle plateforme entre Windows et Linux convient le mieux à un programmeur.

Pour lire l’ensemble du texte: Télécharger le PDF

Protected: La motivation

This post is password protected. To view it please enter your password below:


Categories