Voici la hiérarchie du développeur 
Je n'aurais pas mis Java tout en bas, personnellement j'aurais plutôt mis PHP à la place de Java et Java à la place de PHP ...

(via)
mardi 24 août 2010
Voici la hiérarchie du développeur 
Je n'aurais pas mis Java tout en bas, personnellement j'aurais plutôt mis PHP à la place de Java et Java à la place de PHP ...

(via)

Et bien non vous ne rêvez pas, Windows 95 fête bien ses 15 ans !!
La première version de Windows 95 est sortie le 24 août 1995, Elle présentait de nombreuses nouveautés par rapport à son prédécesseur, Windows 3.1, les plus flagrantes étant l'environnement graphique et le Plug and play.
Depuis, Windows 98, ME, NT, XP, 2003, Vista et Window 7 ont été commercialisées par la firme Microsoft.
Ces 15 ans ne nous rajeunissent pas ...
lundi 9 août 2010

Mon très cher collègue, Spawnrider, vient de me faire découvrir les RefCarz de dzone.com.
Les RefCards sont des petits PDF à imprimer dans lesquels on retrouve une synthèse sur un produit ou un langage de développement. C'est vraiment très pratique, très synthétique et il en existe plusieurs dizaines de disponibles gratuitement sur le site de Dzone :
Ce site est une vraie mine d'or pour les développeurs qui cherchent à diversifier leurs connaissances.
Les auteurs de ces Refcardz ne sont pas n'importe qui. On retrouve par exemple Craig Walls, l'auteur de Spring in action, Molly E. Holzschlag , l'auteur de The Zen of CSS Design ....
Très bonne lecture !
lundi 2 août 2010
Le nouveau Jailbreak proposé par JailbreakMe pour jaibreaker l'iPhone 4G se base une nouvelle fois sur une faille de Safari (Webkit ?) pour installer Cydia en douce.
Quand on regarde de plus prêt le code Javascript de la page, on y découvre une fabuleuse et incroyable fonction getSunSpiderInterval que même Einstein aurait eu du mal à coder et qui remet en question la sécurité du browsing sur Internet depuis un iphone / ipad / ipod ...
function getSunSpiderInterval() {
if (_sunSpiderInterval) {
return _sunSpiderInterval
}
var d = new Date,
g = [],
r = [],
m = [],
l = [],
v = {},
x = {},
t, p = {};
p.Width = 300;
p.Height = 300;
function n(L, J) {
var I = L.V[0],
K = J.V[0],
H = L.V[1],
G = J.V[1],
F = Math.abs(K - I),
E = Math.abs(G - H),
A = I,
i = H,
C, D, B;
if (K >= I) {
K = I = 1
} else {
K = I = -1
}
if (G >= H) {
G = H = 1
} else {
G = H = -1
}
if (F >= E) {
G = I = 0;
C = F;
D = F / 2;
B = E;
F = F
} else {
H = K = 0;
C = E;
D = E / 2;
B = F;
F = E
}
F = Math.round(g.LastPx + F);
for (E = g.LastPx; E < F; E++) {
D += B;
if (D >= C) {
D -= C;
A += I;
i += H
}
A += K;
i += G
}
g.LastPx = F
}
function q(i, B) {
var A = [];
A[0] = i[1] * B[2] - i[2] * B[1];
A[1] = i[2] * B[0] - i[0] * B[2];
A[2] = i[0] * B[1] - i[1] * B[0];
return A
}
function b(A, E, D) {
for (var i = [], C = [], B = 0; B < 3; B++) {
i[B] = A[B] - E[B];
C[B] = D[B] - E[B]
}
i = q(i, C);
A = Math.sqrt(i[0] * i[0] + i[1] * i[1] + i[2] * i[2]);
for (B = 0; B < 3; B++) {
i[B] /= A
}
i[3] = 1;
return i
}
function f(i, B, A) {
this.V = [i, B, A, 1]
}
function e(A, D) {
for (var C = [
[],
[],
[],
[]
], i = 0, B = 0; i < 4; i++) {
for (B = 0; B < 4; B++) {
C[i][B] = A[i][0] * D[0][B] + A[i][1] * D[1][B] + A[i][2] * D[2][B] + A[i][3] * D[3][B]
}
}
return C
}
function j(A, C) {
for (var B = [], i = 0; i < 4; i++) {
B[i] = A[i][0] * C[0] + A[i][1] * C[1] + A[i][2] * C[2] + A[i][3] * C[3]
}
return B
}
function k(A, C) {
for (var B = [], i = 0; i < 3; i++) {
B[i] = A[i][0] * C[0] + A[i][1] * C[1] + A[i][2] * C[2]
}
return B
}
function h(A, D) {
for (var C = [
[],
[],
[],
[]
], i = 0, B = 0; i < 4; i++) {
for (B = 0; B < 4; B++) {
C[i][B] = A[i][B] + D[i][B]
}
}
return C
}
function o(A, C, B, i) {
return e([
[1, 0, 0, C],
[0, 1, 0, B],
[0, 0, 1, i],
[0, 0, 0, 1]
], A)
}
function a(A, C) {
var B = C;
B *= Math.PI / 180;
var i = Math.cos(B);
B = Math.sin(B);
return e([
[1, 0, 0, 0],
[0, i, -B, 0],
[0, B, i, 0],
[0, 0, 0, 1]
], A)
}
function z(A, C) {
var B = C;
B *= Math.PI / 180;
var i = Math.cos(B);
B = Math.sin(B);
return e([
[i, 0, B, 0],
[0, 1, 0, 0],
[-B, 0, i, 0],
[0, 0, 0, 1]
], A)
}
function w(A, C) {
var B = C;
B *= Math.PI / 180;
var i = Math.cos(B);
B = Math.sin(B);
return e([
[i, -B, 0, 0],
[B, i, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]
], A)
}
function u() {
var i = [],
A = 5;
for (g.LastPx = 0; A > -1; A--) {
i[A] = k(m, g.Normal[A])
}
if (i[0][2] < 0) {
if (!g.Line[0]) {
n(g[0], g[1]);
g.Line[0] = true
}
if (!g.Line[1]) {
n(g[1], g[2]);
g.Line[1] = true
}
if (!g.Line[2]) {
n(g[2], g[3]);
g.Line[2] = true
}
if (!g.Line[3]) {
n(g[3], g[0]);
g.Line[3] = true
}
}
if (i[1][2] < 0) {
if (!g.Line[2]) {
n(g[3], g[2]);
g.Line[2] = true
}
if (!g.Line[9]) {
n(g[2], g[6]);
g.Line[9] = true
}
if (!g.Line[6]) {
n(g[6], g[7]);
g.Line[6] = true
}
if (!g.Line[10]) {
n(g[7], g[3]);
g.Line[10] = true
}
}
if (i[2][2] < 0) {
if (!g.Line[4]) {
n(g[4], g[5]);
g.Line[4] = true
}
if (!g.Line[5]) {
n(g[5], g[6]);
g.Line[5] = true
}
if (!g.Line[6]) {
n(g[6], g[7]);
g.Line[6] = true
}
if (!g.Line[7]) {
n(g[7], g[4]);
g.Line[7] = true
}
}
if (i[3][2] < 0) {
if (!g.Line[4]) {
n(g[4], g[5]);
g.Line[4] = true
}
if (!g.Line[8]) {
n(g[5], g[1]);
g.Line[8] = true
}
if (!g.Line[0]) {
n(g[1], g[0]);
g.Line[0] = true
}
if (!g.Line[11]) {
n(g[0], g[4]);
g.Line[11] = true
}
}
if (i[4][2] < 0) {
if (!g.Line[11]) {
n(g[4], g[0]);
g.Line[11] = true
}
if (!g.Line[3]) {
n(g[0], g[3]);
g.Line[3] = true
}
if (!g.Line[10]) {
n(g[3], g[7]);
g.Line[10] = true
}
if (!g.Line[7]) {
n(g[7], g[4]);
g.Line[7] = true
}
}
if (i[5][2] < 0) {
if (!g.Line[8]) {
n(g[1], g[5]);
g.Line[8] = true
}
if (!g.Line[5]) {
n(g[5], g[6]);
g.Line[5] = true
}
if (!g.Line[9]) {
n(g[6], g[2]);
g.Line[9] = true
}
if (!g.Line[1]) {
n(g[2], g[1]);
g.Line[1] = true
}
}
g.Line = [false, false, false, false, false, false, false, false, false, false, false, false];
g.LastPx = 0
}
function c() {
if (!(x.LoopCount > x.LoopMax)) {
for (var i = String(x.LoopCount); i.length < 3;) {
i = "0" + i
}
r = o(l, -g[8].V[0], -g[8].V[1], -g[8].V[2]);
r = a(r, 1);
r = z(r, 3);
r = w(r, 5);
r = o(r, g[8].V[0], g[8].V[1], g[8].V[2]);
m = e(r, m);
for (i = 8; i > -1; i--) {
g[i].V = j(r, g[i].V)
}
u();
x.LoopCount++;
c()
}
}
function y(i) {
v.V = [150, 150, 20, 1];
x.LoopCount = 0;
x.LoopMax = 50;
x.TimeMax = 0;
x.TimeAvg = 0;
x.TimeMin = 0;
x.TimeTemp = 0;
x.TimeTotal = 0;
x.Init = false;
r = [
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]
];
m = [
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]
];
l = [
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]
];
g[0] = new f(-i, -i, i);
g[1] = new f(-i, i, i);
g[2] = new f(i, i, i);
g[3] = new f(i, -i, i);
g[4] = new f(-i, -i, -i);
g[5] = new f(-i, i, -i);
g[6] = new f(i, i, -i);
g[7] = new f(i, -i, -i);
g[8] = new f(0, 0, 0);
g.Edge = [
[0, 1, 2],
[3, 2, 6],
[7, 6, 5],
[4, 5, 1],
[4, 0, 3],
[1, 5, 6]
];
g.Normal = [];
for (var A = 0; A < g.Edge.length; A++) {
g.Normal[A] = b(g[g.Edge[A][0]].V, g[g.Edge[A][1]].V, g[g.Edge[A][2]].V)
}
g.Line = [false, false, false, false, false, false, false, false, false, false, false, false];
g.NumPx = 18 * i;
for (A = 0; A < g.NumPx; A++) {
f(0, 0, 0)
}
r = o(r, v.V[0], v.V[1], v.V[2]);
m = e(r, m);
for (A = 0; A < 9; A++) {
g[A].V = j(r, g[A].V)
}
u();
x.Init = true;
c()
}
for (var s = 20; s <= 160; s *= 2) {
y(s)
}
p = LoopTime = x = v = l = m = r = g = null;
return _sunSpiderInterval = new Date - d
};
/
Le code source complet du Jailbreak se situe ici : http://pastebin.com/pmQqsR2Y
Si l'un de vous est assez fou pour découvrir ce que fait exactement la fonction, n'hésitez pas à poster un commentaire
Cette fonction est à mon avis la cause de la nouvelle faille exploitée par JailBreakMe.
Update : en fait la faille se situe au niveau de l'interprétation des PDF (Voir : http://www.jailbreakme.com/_/), cependant cette fonction doit jouer un rôle important dans le Jailbreak ... mais lequel ? 
En attendant la correction du problème de sécurité par Apple, ne trainez pas trop sur des sites de warez / X ....
Happy Jailbreak !
samedi 31 juillet 2010
Suite au carton de l'article sur les insultes geek posté il y a une semaine, j'ai décidé de mettre en ligne un site participatif dédié aux insultes Geek 
Le concept est très simple, chacun peut proposer ses insultes et voter pour les insultes des autres.
Tous les messages postés sont ensuite relayés sur Twitter et Facebook.
N'hésitez pas à aller faire un tour sur le site et à contribuer ! 
NB : Toutes les insultes postées sur geeek seront migrées vers ce portail.
dimanche 25 juillet 2010
Tiobe vient de publier des nouvelles statistiques concernant l'évolution de sa communauté de développeurs.
On peut noter trois points intéressants.
1) L'adoption massive de l'Objective C grâce au succès de l'iPhone. Les développeurs se sont mis au développement d'applications iPhone 
2) Le visual basic est en train de mourir petit à petit 
3) L'usage de Java s'écroule d'année en année, le rachat de SUN par Oracle ne va pas aider les choses ...
Toutes les statistiques détaillées sont présentées sur le site de Tiobe
(Via Ziserman).
lundi 19 juillet 2010

Suite aux commentaires d'Apple concernant la réception de certains Blackberry, les co-directeurs généraux de RIM répondent publiquement 
« La tentative d’Apple d’entraîner RIM dans la débâcle où il s’est mis lui-même est inacceptable. Les allégations d’Apple à propos des produits de RIM relèvent d’une tentative délibérée pour fausser la façon dont le public perçoit la question de la conception de l’antenne et détourner son attention de la situation difficile dans laquelle se trouve Apple. RIM est un leader mondial en matière de conception d’antennes ; depuis plus de vingt ans, il élabore avec succès des produits de transmission de données sans fil qui font référence dans son industrie pour leur utilisation efficace du signal radio. Depuis ses débuts, RIM évite les designs tels que celui retenu par Apple pour son iPhone 4 et leur préfère des designs innovants qui réduisent le risque de coupures d’appels, surtout dans les zones mal couvertes. Le fait est que les clients de RIM n'ont pas besoin de placer leur smartphone BlackBerry dans un étui pour conserver une bonne connectivité. Apple a clairement fait certains choix de design et devrait en assumer la responsabilité au lieu d'essayer d’impliquer RIM et d'autres dans une situation qui ne concerne qu’Apple. »
- Mike Lazaridis et Jim Balsillie
samedi 17 juillet 2010

En voici une bonne nouvelle pour les personnes possédant un abonnement mobile incluant les emails.
Free vient de lancer son service SMTP authentifié pour permettre d'envoyer des emails depuis des réseaux autres que celui de Free.
Vous allez maintenant pouvoir envoyer des emails avec votre compte email Free directement depuis votre mobile. Pour activer ce service encore en beta, il suffit de se rendre sur l'interface d'administration Free et d'activer le service "Gestion du SMTP authentifié".
Une fois le service activé, il suffit de configurer le client email de votre téléphone avec les paramètres suivants :
« billets précédents - page 1 de 137
# Derniers commentaires