Un sténopé est un dispositif optique simplissime permettant d'obtenir un appareil photographique dérivé de la camera obscura. Il s'agit d'un simple trou, de très faible diamètre. Par extension (un trou n'est pas un objectif)
on appelle ainsi l'appareil photographique utilisant un tel dispositif et la photographie ainsi réalisée.
Principe de fonctionnement.
Un appareil photographique à sténopé se présente sous la forme d’une boîte dont l’une des faces est percée d’un minuscule trou qui laisse entrer la lumière. Sur la surface opposée au trou vient se former l'image inversée de la réalité extérieure, que l'on peut capturer sur un support photosensible (tel que du papier photographique). Pour faire simple, on peut dire que le sténopé fonctionne de la même façon que l'œil, il capture des images inversées du visible.
Du fait de la petitesse de l’orifice permettant à la lumière de pénétrer à l’intérieur de l’appareil et de l'absence de focalisation, le temps nécessaire pour impressionner la surface photosensible est très long. Selon la taille de l’appareil et de l'ouverture, il peut se chiffrer en secondes ou en heures. Le trou du sténopé est minuscule, par conséquent, il permet une plus grande latitude d'exposition et offre une très grande profondeur de champ (presque à l'infini).
Historique.
Il n’est pas possible techniquement que la première photographie (Joseph Nicéphore Niépce) ait été prise avec un sténopé, la correspondance de Niépce avec F. Lemaitre confirme sans équivoque l’utilisation d’une optique : « Il n’y a en effet, Monsieur, de bien éclairée et de bien nette que la partie de l’image qui se trouve juste au foyer de l’objectif. »
Revenons au sténopé. La première formule pour déterminer le diamètre du trou fut énoncée par l’autrichien Joseph Pretzal en 1857. 
Le futur prix Nobel, John William Strutt Rayleigh établira une formule dans les années 1880 en travaillant sur les télescopes.
Pratique.
La construction d'un sténopé est extrêmement simple. Il suffit d’une boîte suffisamment bien fermée pour être étanche à la lumière. Son intérieur doit être recouvert d’une substance noire et mate pour éviter toute réflexion optique des rayons lumineux. L’une des faces est percée d’un petit trou, à l’aide d’une aiguille à coudre par exemple. C'est ce petit trou qui est à proprement parler le sténopé, il peut être percé dans un matériau différent de la chambre noire et être monté sur celle-ci comme un objectif photographique classique.

Sténopé
Développer en Java/Forges et bibliothèques

En tant que développeur Java, vous devez savoir où vous fournir en bibliothèques.
Le projet Apache.
L'objectif du projet Apache est de délivrer des briques logicielles open-source développées de façon communautaire. Toutes ces briques sont mises à disposition selon la licence Apache. Il s'agit notamment de fournir des implémentations de JSR.
Apache Commons.
Apache Commons vise à étendre le JDK en fournissant la plupart du temps des lots de classes utilitaires regroupant des extraits de codes fréquemment utilisés.
Remarquons notamment :
Apache Lucene.
Ce projet tourne autour des problématiques de recherche
Apache Hadoop.
Hadoop est un projet ombrelle spécialisé dans le calcul distribué.
Apache extras.
En partenariat avec Google Code, cette forge, dissociée de celle de la fondation Apache, vise à accueillir des projets liés aux projets Apache mais qui ne peuvent y être mêlé pour des raisons diverses. Par exemple, il peut s'agir de projets qui ne peuvent être sous licence Apache.
Autres projets Apache.
Les projets Apache sont nombreux et concernent différents domaines d'application :
CodeHaus.
Codehaus n'héberge que des projets sous licence open-sources (Apache notamment). Avant d'être accueillis, chaque projet doit avoir une base de code solide. Codehaus héberge plusieurs projets autour de Java.
Google.
Java est un des langages utilisés chez Google qui propose certains de ses outils, notamment 
S'ajoute à cela les nombreux projets hébergés sur la forge de Google.
Le consortium OW2.
Ce consortium s'intéresse plus particulièrement aux intergiciels ("middleware"), mais regroupent plusieurs projets open-source.

Programmation objet et géométrie/Objets Python sous Blender/Création de surfaces paramétrées avec bpy

Pour représenter des surfaces paramétrées, on utilise la seule chose que Blender sache gérer: Des polyèdres. Seulement ils ont tellement de faces et elles sont si petites, que le polyèdre aura l'air, si on n'y fait trop attention, d'une surface de classe formula_1. Cette représentation des surfaces par des approximations polyédrales est à la base de chapitres entiers des mathématiques:
Dans les deux cas, la surface est approchée par une triangulation. Comme les deux paramètres de la surface 
formula_2
s'appellent souvent formula_3 et formula_4, le nom d' "uv-mapping" est souvent utilisé dans les logiciels de 3D (comme "Blender") pour désigner les coordonnées de textures. 
Ci-dessous on va représenter une surface unilatère, la surface romane de Steiner.
=Expression paramétrique=
La surface de Steiner est donnée par la représentation paramétrique suivante:
formula_5
avec formula_6 et formula_7.
sommets.
Entête du fichier.
Comme précédemment, on importe les classes Blender et bpy, mais aussi les fonctions trigonométriques et formula_8, qui sont des méthodes (et propriété pour formula_8) de l'objet "math":
from Blender import *
import bpy
from math import pi, cos, sin
sommets=[]
Liste des sommets.
Lors de sa création, la liste des sommets est vide. Il reste donc à la remplir, ce qui se fait par quelque chose qu'on n'a pas utilisé dans l'article précédent: Une boucle. Celle-ci est double (puisqu'il y a deux paramètres) et ses deux indices sont choisis entre 0 et 100 (pour "i") et entre 0 et 50 (pour "j"). Pour passer de formula_10 à formula_6, on multiplie "i" par formula_12 pour avoir "u". De même, formula_13:
for i in range(0,100):
 u=i*pi/100
 for j in range(0,50):
 v=j*pi/50
 x=sin(2*u)*sin(v)**2
 y=sin(u)*sin(2*v)
 z=cos(u)*sin(2*v)
 sommets.append([x,y,z])
"x", "y" et "z" sont calculés à partir de "u" et "v" avec les formules ci-dessus, puis le sommet (x,y,z) est ajouté à la base de donnée des sommets. À l'issue de cette boucle, la surface de Steiner sera riche de formula_14 points.
Il reste à trouver, dans cette immense collection, quels sommets sont reliés à quels autres.
faces.
plan des (u,v).
Les faces seront des quadrilatères, bordés horizontalement par des lignes de niveau de "v" et verticalement par des lignes de niveau de "u". Les numéros des sommets correspondent à l'ordre de leur création, soit colonne par colonne:
4--54-104-154- 
3--53-103-153-
2--52-102-152-
1--51-101-151-
0--50-100-150-
tableau des faces.
Ainsi, chaque sommet a un numéro de la forme formula_15, et est relié successivement aux sommets de numéros formula_16, formula_17 et formula_18. Il suffit alors de créer un tableau initialisé à 0 pour les faces, et d'y ajouter des listes telles que celle ci-dessus, au fur et à mesure, dans une double boucle:
faces=[]
for i in range(0,99):
 for j in range(0,49):
 faces.append([50*i+j,50*i+j+50,50*i+j+51,50*i+j+1])
En réalité, il manque des faces telles que 49-99-50-0 et 5000-0-1-5001 mais leur absence ne se verra pas, et corriger cet oubli, est laissé en exercice...
=Création de la surface de Steiner=
Ensuite comme précédemment il reste à
Ce qui s'écrit ainsi:
st=bpy.data.meshes.new('pp')
st.verts.extend(sommets)
st.faces.extend(faces)
scn = bpy.data.scenes.active 
ob = scn.objects.new(st, 'steiner')
Ensuite il suffit de cocher le bouton "Set smooth" pour arrondir les angles (et en profiter pour décocher le bouton "double sided" puisque pour une fois, on a défini une surface unilatère), à texturer la surface avec un matériau transparent, puis à effectuer un rendu:
=Exercice=
Construire une bouteille de Klein en utilisant la représentation paramétrique de Jeener :

Programmation objet et géométrie/Objets Python sous Blender/Création de fractales avec bpy