if(!err && ip_need_two_phase(pe, n, oldpe, oldmosnet, oldnents))
{
if(!two_phase)
{
fprintf(stderr, "%s: The proposed change will modify the current node's mapping,n", pname);
fprintf(stderr, "requiring a full MOSIX restart, including bringing all processes back home:n");
fprintf(stderr, "If you are sure about the change, use 'setpe -W' (instead of 'setpe -w').n");
exit(1);
}
}
else
two_phase = 0;
Función modificada:
if(!err)
{
if(ip_need_two_phase(pe, n, oldpe, oldmosnet, oldnents))
{
if(!two_phase)
{
fprintf(stderr, "%s: The proposed change will modify the current node's mapping,n", pname);
fprintf(stderr, "requiring a full MOSIX restart, including bringing all processes back home:n");
fprintf(stderr, "If you are sure about the change, use 'setpe -W' (instead of 'setpe -w').n");
exit(1);
};
};
}
else
{
two_phase = 0;
};
Es una auténtica chapuza que no la hacen ni mis alumnos.
Para los que no las ven:
1. Sólo descompone el primer if en dos if distintos para poner otro, pero pone un if dentro de otro cuando debería ir en la misma condición
2. Pone ";" después de las "}" cuando no hace falta (el } ya es un separador y no es ninguna instrucción).
3. No respeta el estilo y sangrado del resto del código (pone el { en la línea siguiente y no en la misma línea).
Cómo debería ser en C correcto:
if(!err) {
if(ip_need_two_phase(pe, n, oldpe, oldmosnet, oldnents) && ! two_phase) {
fprintf(stderr, "%s: The proposed change will modify the current node's mapping,n", pname);
fprintf(stderr, "requiring a full MOSIX restart, including bringing all processes back home:n");
fprintf(stderr, "If you are sure about the change, use 'setpe -W' (instead of 'setpe -w').n");
exit(1);
}
} else {
two_phase = 0;
}
Moraleja
Cuidado con criticar el merito profesional de los demás.
Aún los ingenieros que van de "yo sé más que cualquier "intruso"" o "ricardo galli no sabe de lo que habla" pueden cometer errores como cualquier otro. Y así puede pasar que un "intruso" (que no estudió informática en la universidad) de 20 añitos como jcarlosn, o este mismo "criticado", puedan demostrar las chapuzas que cometes en tan poco código.
Solución
Esos problemas no se solucionan con colegios ni regulaciones, sino con mucha humildad e intentando aprender de todos, que la informática es más compleja que otras ingenierías, y ni los más expertos tenemos las herramientas de otras ingenierías para asegurarnos de no cometer errores importantes.
PD (agregado): #32, pues me alegra que seas físico, porque el apunte enlazado justamente surge porque hablé bien de todo lo que aprendí trabajando dos años con físicos e ingenieros nucleares: gallir.wordpress.com/2008/03/14/relaciones/ (y soy doctor en informática, no sé si notas las diferencias de actitud lo que se refiere a "profesión").
Vale, si vamos a analizar las grandes cosas de un "ingeniero", seguimos en ese camino:
1. OpenMosix ya está abandonado.
2. Estuve mirando los CVS y las contribuciones de este "desarrollador" son como las comentadas en #26.
3. No sólo tiene problemas graves de seguridad, sino auténticas chapuzas de alguien que ni siquiera sabe programar en C. Por ejemplo mira uno de sus parches más "serios": openmosix.cvs.sourceforge.net/openmosix/userspace-tools/setpe/setpe.c?
Función original:
if(!err && ip_need_two_phase(pe, n, oldpe, oldmosnet, oldnents))
{
if(!two_phase)
{
fprintf(stderr, "%s: The proposed change will modify the current node's mapping,n", pname);
fprintf(stderr, "requiring a full MOSIX restart, including bringing all processes back home:n");
fprintf(stderr, "If you are sure about the change, use 'setpe -W' (instead of 'setpe -w').n");
exit(1);
}
}
else
two_phase = 0;
Función modificada:
if(!err)
{
if(ip_need_two_phase(pe, n, oldpe, oldmosnet, oldnents))
{
if(!two_phase)
{
fprintf(stderr, "%s: The proposed change will modify the current node's mapping,n", pname);
fprintf(stderr, "requiring a full MOSIX restart, including bringing all processes back home:n");
fprintf(stderr, "If you are sure about the change, use 'setpe -W' (instead of 'setpe -w').n");
exit(1);
};
};
}
else
{
two_phase = 0;
};
Es una auténtica chapuza que no la hacen ni mis alumnos.
Para los que no las ven:
1. Sólo descompone el primer if en dos if distintos para poner otro, pero pone un if dentro de otro cuando debería ir en la misma condición
2. Pone ";" después de las "}" cuando no hace falta (el } ya es un separador y no es ninguna instrucción).
3. No respeta el estilo y sangrado del resto del código (pone el { en la línea siguiente y no en la misma línea).
Cómo debería ser en C correcto:
if(!err) {
if(ip_need_two_phase(pe, n, oldpe, oldmosnet, oldnents) && ! two_phase) {
fprintf(stderr, "%s: The proposed change will modify the current node's mapping,n", pname);
fprintf(stderr, "requiring a full MOSIX restart, including bringing all processes back home:n");
fprintf(stderr, "If you are sure about the change, use 'setpe -W' (instead of 'setpe -w').n");
exit(1);
}
} else {
two_phase = 0;
}
Moraleja
Cuidado con criticar el merito profesional de los demás.
Aún los ingenieros que van de "yo sé más que cualquier "intruso"" o "ricardo galli no sabe de lo que habla" pueden cometer errores como cualquier otro. Y así puede pasar que un "intruso" (que no estudió informática en la universidad) de 20 añitos como jcarlosn, o este mismo "criticado", puedan demostrar las chapuzas que cometes en tan poco código.
Solución
Esos problemas no se solucionan con colegios ni regulaciones, sino con mucha humildad e intentando aprender de todos, que la informática es más compleja que otras ingenierías, y ni los más expertos tenemos las herramientas de otras ingenierías para asegurarnos de no cometer errores importantes.
PD (agregado): #32, pues me alegra que seas físico, porque el apunte enlazado justamente surge porque hablé bien de todo lo que aprendí trabajando dos años con físicos e ingenieros nucleares: gallir.wordpress.com/2008/03/14/relaciones/ (y soy doctor en informática, no sé si notas las diferencias de actitud lo que se refiere a "profesión").