Archivo

Entradas Etiquetadas ‘informática’

Especificaciones

Friday, 13 de November de 2009

Sé que muchos programadores se sentirán identificados con esta carta.

¿Qué pasaría si en vez de programadores fueramos arquitectos?, unos dirán que sólo es el cambio de carrera, pero ¿y si ahora le agregamos que los jefes nos explican el problema y sus requerimientos de la misma en como la informan a los programadores?

Estimado Sr. Arquitecto:
Por favor diseñe y construya una casa para mi. No estoy muy seguro de lo que necesito, así que tendrá que usar su imaginación. Mi casa debería tener entre dos y cuarenta y cinco dormitorios. Simplemente asegúrese de que todo esté pensado de forma que sea sencillo añadir o quitar dormitorios. Cuando
me traiga los modelos, tomaré la decisión sobre lo que quiero. Además, tráigame un resumen de los costes para cada configuración de manera que pueda elegir una de ellas de manera arbitraria.
Tenga en cuenta que la nueva casa debe costar bastante menos que la casa en la que estoy viviendo ahora. Pero asegúrese, de todas formas, de que corrige todas las deficiencias que existen en mi casa actual (el suelo de la cocina vibra cuando ando por el, y las paredes no tienen suficiente aislamiento).
Mientras diseña, tenga en cuenta que quiero mantener los costes de mantenimiento lo mas bajos posibles. Esto significará la incorporación de materiales mas costosos coste como el aluminio, la fibra de vidrio o el vinilo. (Si elige no considerar el aluminio, prepárese para explicar su decisión en todo detalle.)
Por favor asegúrese de que se utilicen las prácticas mas modernas de diseño y lo último de lo último en materiales a la hora de construir la casa, ya que deseo poder presumir de haber utilizado las mas actuales ideas y métodos. Tenga en cuenta, de todas formas, que la cocina debería diseñarse para acomodar, entre otras cosas, mi nevera Gibson del 52.
Para asegurarse de que esté construyendo la casa de manera correcta para toda la familia, contacte con cada uno de mis hijos e hijas, y también con mis nueros y nueras. Mi suegra tendrá también bastantes cosas que decir sobre como debería diseñarse la casa, ya que nos visita al menos una vez al
año. Asegúrese de que considera cada una de las opciones que le propongan cuidadosamente y asegúrese también de elegir la decisión acertada. Yo, de cualquier forma, siempre tendré la última palabra y podré rectificar cualquier elección que tome.
Por favor no me moleste con los pequeños detalles de momento. Su trabajo es desarrollar una idea general del diseño de la casa: captar la idea. Este momento, por ejemplo, no es el apropiado para elegir el color de la alfombra.
En cualquier caso, recuerde que a mi esposa le gusta el azul.
Además, no se preocupe aún de adquirir los materiales necesarios para construir la casa. Su prioridad es la de desarrollar planos detallados y especificaciones. De todas formas, una vez que yo apruebe esos planos, espero que la casa esté construida en 48 horas.
Aunque esté diseñando esta casa específicamente para mí, tenga en cuenta que antes o después tendré que venderla a otra persona. De manera que debería ser atrayente para una gran variedad de compradores potenciales. Por favor
asegúrese antes de que finalice los planos de que halla un consenso sobre las características de la casa entre la población de la zona. Le aconsejo que eche un vistazo a la casa que mi vecino se construyó el año pasado. Nos encanta. Tiene bastantes características que también queremos en nuestra nueva casa, especialmente la piscina de 75 pies. Aplicando la ingeniería de
manera cuidadosa, creo que no tendrá dificultades en añadirlo al diseño final sin que tenga ningún impacto en el coste.
Por favor prepare un conjunto completo de modelos. No es necesario por ahora que prepare el diseño real, dado que solo queremos los modelos para calcular los costes de la obra. Tenga en cuenta, de todas formas, que usted será el responsable de cualquier incremento en el precio debido a cambios posteriores en el diseño.
¡Debería estar emocionado por trabajar en un proyecto tan interesante como este! Poder utilizar las últimas técnicas y materiales y el que le den tanta libertad en sus diseños es algo que no ocurre muy a menudo. Contacte conmigo tan pronto como sea posible con una lista completa de sus ideas y sus planes.

*Postdata:* Mi esposa acaba de decirme que no está de acuerdo con algunas de las instrucciones que le doy en esta carta. Como arquitecto, es su responsabilidad el resolver estas diferencias entre mi esposa y yo. Yo ya lo he intentado en el pasado y fui incapaz de conseguirlo. Si no puede hacer frente a esta responsabilidad, tendré que contratar a otro arquitecto.

*PostPostdata:* Quizás lo que necesite ni tan si quiera sea una casa, sino una caravana. Por favor aconséjeme lo mas pronto posible si ese es el caso..

VN:F [1.0.9_379]

Ancelot Humor, Programación, computación , , ,

Programación para gente común.

Friday, 13 de November de 2009

Muchas veces habrán escuchado a un programador/desarrollador mencionar que la aplicación se pegó porque entró en un “loop” , pero ¿qué demonios es un loop?. Se los podría explicar de mil maneras distintas pero mejor pensemos en un caso que se acerque a la vida común.

Para  quien no conoce el concepto de loop,  es un término que crearon los informáticos para definir un enrredo de los tantos que han creado y para lo cual no tienen una explicación sencilla para aclarar el problema.

Bueno, haciendo poco esfuerzo mental trataré de explicarles en pocas palabras este famoso término.

Se dice que un programa de computación “entró en un LOOP” como cuando ocurre la siguiente situación:

El director llama a su secretaria y le dice:

Señorita Vanessa: Tengo un seminario en Argentina por una semana y quiero que me acompañe para que

conozca a mis socios. Haga los preparativos del viaje…

La secretaria llama al marido:

Oye Juan – Voy a viajar al exterior con el director por una semana. Cuidate, querido.
El marido llama a la amante:

Leonor, mi tesoro – La bruja va a viajar al exterior por una semana, vamos a pasarnos esta semana juntos, mi reina…

La amante llama al niño a quien le da clases particulares:

Juanito – Tengo mucho trabajo la próxima semana. No tienes que venir a clases…

El niño llama a su abuelo:

Tata – La próxima semana no tengo clases, mi profesora estará ocupada. ¡Vamos a pasar la semana juntos!

El abuelo (que es el mismo director de esta historia) llama a la secretaria:

Señorita Vanessa venga rápido – Suspenda el viaje, voy a  pasar la próxima semana con mi nieto que hace un año no veo, por lo que no vamos a participar en el Seminario. Cancele el viaje y el hotel.

La secretaria llama al marido:

Pucha guatónnnnn – El huevón del director cambió de idea y acaba de cancelar el viaje, se me agüó el viaje.

El marido llama a la amante:

Amorcito disculpe – No podremos pasar la próxima semana juntos, el viaje de la gueona de mi mujer fue cancelado.

La amante llama al niño de las clases particulares:

Juanito – Cambié de planes: esta semana le voy a dar clases como siempre.

El niño llama al abuelo:

Putas abuelo, la vieja de mi profesora me dijo que esta semana tengo clases.  Discúlpame, no voy a poder hacerte compañía.

El abuelo, es decir el director, llama nuevamente a la secretaria:

Señorita Vanessa – Mi nieto me acaba de decir que no va a poder estar conmigo esta semana porque tiene clases. Así que continúe con los preparativos del viaje al seminario …

¿Queda claro ahora lo que es un “LOOP” ?

VN:F [1.0.9_379]

Ancelot Humor, computación , ,

Internet Explorer continúa perdiendo usuarios

Monday, 11 de May de 2009

Segun nueva informacion sobre el uso de navegadores de internet, el navegador Internet Explorer (IE) de Microsoft, se mantiene en un ritmo de perdida de usuarios que lo llevara de ser el navegador dominante en todo el mundo a una cuota de mercado de menos del 50 por ciento en 2011.

IE perdio el 0.7 por ciento del mercado de usuarios de internet en el mes de Abril, mes en el que finalizo con el 66.1 por ciento de usuarios globales, llegando asi a un nuevo minimo de acuerdo a un estudio de Net Applications Inc.

Al igual que en Marzo, la penetracion de Internet Explorer en Abril no fue suficiente para detener la caida de la cuota global del navegador. Si bien IE8 vio impulsada su cuota de mercado en 2.2 por ciento, IE7 perdio 2 opr ciento y el decaido IE6 perdio 0.8 por ciento.

Si bien las ganancias en cantidad de usuarios de IE8 originalmente fueron a costa de IE7, el estudio de mercado de Net Applications muestra tambien que los usuarios de IE6 estan comenzando a actualizar sus navegadores: el porcentaje del 0.8 del mes pasado fue mayor que el 0.6 por ciento de Marzo.

Microsoft recientemente comenzo a ofrecer IE8 a usuarios de IE6 y de IE7 Actualizaciones Automaticas, factor que seguramente tuvo su parte en la acelerada caida de los navegadores mas antiguos de Microsoft.

Como de costumbre, los navegadores rivales salen ganando con las perdidas de Internet Explorer.

Mozilla Firefox por ejemplo, incremento su cuota de mercado en 0.4 por ciento en Abril para finalizar el mes con 22.5 por ciento de los usuarios, mientras que Chrome de Google gano un 0.2 por ciento llegando al 1.4 por ciento del mercado.

El navegador Safari de Apple, mientras tanto, experimento una disminucion de 0.02 por ciento al finalizar Abril con un 8.2 por ciento de los usuarios de navegadores.

En los ultimos 12 meses Firefox ha ganado un promedio de 0.4 por ciento cada mes, con lo que si se mantiene esta tendencia, el navegador de codigo abierto de Mozilla alcanzaria la marca del 25 por ciento de cuota de mercado para fines de Noviembre de 2009.

En contrapartida, IE ha perdido un promedio de 0.7 por ciento de usuarios en los ultimos 12 meses y, al menos que MIcrosoft haga algo, Internet Explorer perdera su mayoria absoluta y caera por debajo del 50 por ciento del mercado en algun momento del mes de Mayo de 2011.

Con respecto a Chrome de Google, el cual se mantiene como aplicacion exclusiva para PCs basadas en Windows, tuvo en Abril su mayor incremento desde Diciembre.

Lo que podria hacer a Chrome un rival poderoso para Firefox y Safari seria la posibilidad de que Google llegara a acuerdos con fabricantes de computadoras para instalar el navegador en nuevas PCs. Segun la gente de Net Applications Inc., esto tendria un gran impacto, pero hasta que eso suceda, no se esperan grandes ganancias para Chrome.

Fuente: misnoticiasdetecnologia

VN:F [1.0.9_379]

Ancelot Anuncios, Tecnología, computación , , ,

¿Precisión o potencia? procesadores probabilísticos

Wednesday, 11 de February de 2009

Un estudio de un profesor de la Rice University en Houston (EE.UU.) ha revelado que sacrificando parte de la precisión de los cálculos realizados en un procesador se podría hacer que el rendimiento se multiplicara por siete. Obviamente existen escenarios en los que la precisión de los cálculos es vital en el buen resultado final, pero hay otros casos en los que la idea de la computación probabilista podría ser aplicada.

Este profesor de la Universidad Rice en Houston dio una conferencia San Francisco en la cual anunció los resultados de las primeras pruebas de sus chips de computación probabilista. Estos procesadores sacan provecho del sacrificio de la precisión y los errores aleatorios en los cálculos, haciéndolos  funcionar siete veces más rápido que cualquier desarrollo actual consumiendo además tan sólo 1/30 de la electricidad necesaria en otros casos.

powered by Wordpress Multibox Plugin v1.3.5

amd-roadmap-2009-2

Krishna Palem, el responsable de esta investigación, comentó que “los resultados fueron mucho mejores de lo que esperábamos“. Este investigador prevé que sus chips podrían formar parte de dispositivos móviles en menos de una década. Aunque la mayoría de las pruebas no se pueden traducir en aplicaciones prácticas para de que puede haber escenarios en los que este tipo de computación si que sea útil.

Por ejemplo, al calcular un balance bancario de 13.000,81 euros es mucho más importante el “13″ que el “81″. Así, producir una respuesta de 13.000,57 euros está mucho más cerca la respuesta correcta que producir una respuesta de 57.000,81 euros. Obviamente la tecnología de Palem no será muy útil en misiones espaciales, pero sí que tendría una gran utilidad en aplicaciones como el streaming de música o vídeo en dispositivos móviles, según sus comentarios, ya que dicho tipo de escenarios la precisión no es vital en un resultado aceptable.

VN:F [1.0.9_379]

Ancelot Tecnología

WesternDigital lanza HDD de 2TB

Wednesday, 28 de January de 2009

powered by Wordpress Multibox Plugin v1.3.5

wd2gb

Si 2 TeraBytes.

Anunciado hace apenas dos semanas, la marca Western Digital ya lo puso a la venta alrededor del mundo. Se trata del nuevo disco duro Caviar Green con una, nada de pequeña, capacidad de 2 TeraBytes, lo que le permite presumir de haberse convertido en el primer sistema de almacenaje interno en ofrecer 2.048 gigabytes para almacenar todo tu porno lo que se te ocurra.

Pese a lo que podría esperarse de una maquina semejante, el consumo de energía no se convierte en un obstáculo ya que reduce su gasto hasta en un 40% haciendo uso de tecnologías propias de la marca, según señala Europa Press.

Su precio, al menos en Estados Unidos, es de US$299, unos 180.000 pesos chilenos.

VN:F [1.0.9_379]

Ancelot Tecnología ,

GWT : Google Web Toolkit

Tuesday, 27 de January de 2009

Como muchos saben hace un par de meses que estoy trabajando con GWT, lo que significa Google Web Toolkit, así que me decidí a escribir un poco sobre este tema, si bien esste blog ha sido concebido como una ayuda para la porgramación, se ha ido llenando de humor y anécdotas, si bien también era uno de los objetivos de este proyecto, empezaremos a equilibrar un poco la balanza.

powered by Wordpress Multibox Plugin v1.3.5

gwtGoogle Web Toolkit es una herramienta de desarrollo AJAX de Google destinada a desarrolladores Java. Las aplicaciones web (tanto GUI -Graphical User Interface- como RPC -Remote Procedure Call-) se escriben en Java usando el API GWT. Después los archivos Java se compilan en archivos JavaScript compactos, ofuscados y específicos del navegador. Un pequeño código de carga en JavaScript determina que archivos de script específico del navegador se deben utilizar dependiendo del navegador cliente. La librería API está licenciada bajo licencia Apache 2.0.

Leer más…

VN:F [1.0.9_379]

Ancelot Programación, java , , , , ,

Generador de Rut y Validador

Thursday, 22 de January de 2009

Muchos han esatdo buscando  una forma de validar si un RUT es válido o no, pero también hay muchos que necesitan probar sus aplicaciones y están usando sus propios RUTs, pero ¿qué pasa cuando necesitas hacer una prueba masivamente?, acá te traigo la solución…

Leer más…

VN:F [1.0.9_379]
Rating: 1.0/10 (1 voto cast)

Ancelot Programación, java , , , , , , ,

java[arrays]

Tuesday, 6 de January de 2009

Veremos como pasar de una lista a un array, el codigo es relativamente sencillo, veamos el ejemplo::

JAVA:
  1. private String[] textosLista;
  2.  
  3. //Debido al ejemplo asumiremos que el ArrayList tiene datos
  4. private ArrayList textos_array;
  5.  
  6. public void trasformar(){
  7. textosLista= (String[])textos_array.toArray(new String[textos_array.size()]);
  8.  
  9. //Acá simplemente lo recorremos
  10.  
  11. for(int i=0;i<textosLista.length;i++){
  12. System.out.println(textosLista[i]);
  13. }
  14. }

VN:F [1.0.9_379]

Ancelot Programación, java , , , , , , ,

Redireccionamiento

Friday, 28 de November de 2008

Hoy realizaré mi segundo aporte real a la humanidad, les enseñaré unas cuantas formas de redireccionar a otro sitio web.

1° Mediante HTML Usando el elemento META inmediatamente

<html>
<head>
<meta http-equiv="acci" content="segundos"; url="www.creations.cl"/>
</head>

<body>
</body>
</html>

2° Mediante HTML Usando el elemento META con temporizador

<html> 
<head> 
<meta http-equiv="Refresh" content="5;url=www.creations.cl"> 
</head>
<body> 
<p>Sitio no disponible serás redireccionado en cinco segundos.</p>
</body> 
</html>

3° Mediante JavaScript Con temporizador

<html> 
<head> 
<script type="text/javascript"> 
function redir(){ 
  window.locationf="http://www.creations.cl"; 
}  
setTimeout ("redir()", 10000); //tiempo expresado en milisegundos 
</script> 
</head> 
<body> 
<p> Espere por favor, será redireccionado en 10 segundos.</p> 
</body> 
</html>

4° Mediante JavaScript De Forma Inmediata

<body> 
<script type="text/javascript"> 
window.location="http://www.creations.cl"; 
</script> 
</body>

5° Mediante PHP

<?php 
header ("Location: http://www.creations.cl"); 
?>
VN:F [1.0.9_379]

Ancelot PHP, Programación , , ,

PHP[DAO]::Data Access Object

Tuesday, 19 de August de 2008

El DAO, Data Access Object por sus siglas en inglés, corresponde a un patrón de diseño que tiene como proposito abstraer al software cliente del acceso a los datos o de la fuente de almacenamiento, y que solo se centre en los datos que necesite.

Este patrón de diseño nace de la necesidad de gestionar diversas fuentes de datos, aunque su uso se extiende al problema de encapsular no sólo la fuente de datos, sino que además mantiene oculta la forma en que se accede a los datos. Se trata de hacer que el software cliente se concentre en los datos que necesita y no se preocupe de cómo ni de dónde obtiene los datos.

El DAO realiza la implementacion del mecanismo para acceder a la fuente de datos, sea esta una base de datos, archivos externos, etc... Los componentes de negocio que tratan con el DAO utilizan un interface simple expuesto por el DAO para sus clientes. El DAO oculta completamente los detalles de implementación de la fuente de datos a sus clientes. Como el interface expuesto por el DAO no cambia cuando cambia la implementación de la fuente de datos subyacente, este patrón permite al DAO adaptarse a diferentes esquemas de almacenamiento sin que esto afecte a sus clientes o componentes de engocio. Esencialmente, el DAO actúa como un adaptador entre el componente y la fuente de datos.

Bueno, para que todo esto quede un poco más claro, voy a poner un ejemplo práctico sencillo para que se puedan formar una idea de como funciona. Si bien este patrón de diseño se puede aplicar a diversos lenguajes de programación, pondré el ejemplo en PHP, donde manipularemos datos de un "Usuario", no nos preocuparemos de la interfaz gráfica, sólo del manejo de datos.

[ UsuarioVO.php ] Clase usada para transportar informacion

PHP:
  1. require_once 'UsuarioVO.php';
  2.  
  3. class UsuarioVO
  4. {
  5. public $id;
  6. public $nombre;
  7. public $rut;
  8. public $username;
  9. public $bcryptpass;
  10. public $mail;
  11. public $region;
  12. public $sexo;
  13. public $telefono;
  14. public $descripcion;
  15. }
  16. ?&gt;

[ UsuarioDAO.php ] Interface donde declaramos los metodos disponibles

PHP:
  1. interface UsuarioDAO
  2. {
  3. public function guardar($usuario_vo);
  4. public function buscarId($id);
  5. public function buscarCampo($campo, $valor);
  6. }
  7. ?&gt;

[ Usuario_DB_DAO.php ] La clase que hace todo el trabajo

PHP:
  1. require_once 'UsuarioDAO.php';
  2. require_once 'UsuarioVO.php';
  3. require_once 'DB.php';
  4.  
  5. class Usuario_DB_DAO implements UsuarioDAO
  6. {
  7. private $conexion;
  8.  
  9. public function __construct()
  10. {
  11. // vamos a conectarnos...
  12. $this-&gt;conexion =
  13. DB::connect("mysql://root@localhost/mibase");
  14. $this-&gt;conexion-&gt;setFetchMode(DB_FETCHMODE_ASSOC);
  15. if (DB::isError($this-&gt;conexion)) {
  16. print "Fallo la conexion!";
  17. print "Error : " .
  18. $this-&gt;conexion-&gt;getMessage() . "";
  19. print "Detalles Error : " .
  20. $this-&gt;conexion-&gt;getUserInfo() . "";
  21. exit(1);
  22. }
  23. }
  24.  
  25. public function guardar($usuario_vo)
  26. {
  27. //  tenemos 2 casos.... insertar y actualizar
  28. if ( $usuario_vo-&gt;id == null ){
  29. $this-&gt;insertar($usuario_vo);
  30. }
  31. else {
  32. $this-&gt;actualizar($usuario_vo);
  33. }
  34. }
  35.  
  36. private function insertar(UsuarioVo $usuario_vo)
  37. {
  38. $sql = "INSERT INTO usuarios ".
  39. "(id, nombre, rut, username, bcryptpass,".
  40. "mail, region, sexo, telefono, descripcion) ".
  41. " VALUES ".
  42. " (?, ?, ? , ?, ? , ? , ?,  ?, ?, ?); ";
  43. // Antes de continuar vamos a obtener el nuevo id
  44. // Como estamos usando DB vamos a usar el mecanismo
  45. // propio de DB para obtener el id.
  46. $usuario_vo-&gt;id = $this-&gt;conexion-&gt;nextId("usuarios");
  47. $datos = array( $usuario_vo-&gt;id,
  48. $usuario_vo-&gt;nombre,
  49. $usuario_vo-&gt;rut,
  50. $usuario_vo-&gt;username,
  51. $usuario_vo-&gt;bcryptpass,
  52. $usuario_vo-&gt;mail,
  53. $usuario_vo-&gt;region,
  54. $usuario_vo-&gt;sexo,
  55. $usuario_vo-&gt;telefono,
  56. $usuario_vo-&gt;descripcion );
  57. $preparedStatement = $this-&gt;conexion-&gt;prepare($sql);
  58. $resultado =&amp; $this-&gt;conexion-&gt;execute(
  59. $preparedStatement,$datos);
  60. if (PEAR::isError($resultado)){
  61. echo 'Falló la insercion en la BD ';
  62. echo $resultado-&gt;getMessage() . "";
  63. echo "Detalles Error : " .
  64. $resultado-&gt;getUserInfo() . "";
  65. }
  66. }
  67.  
  68. private function actualizar(UsuarioVo $usuario_vo)
  69. {
  70. $sql = "UPDATE usuarios SET ".
  71. "nombre = ? , ".
  72. "rut = ? , ".
  73. "username = ? , ".
  74. "bcryptpass = ? , ".
  75. "mail = ? , ".
  76. "region = ? , ".
  77. "sexo = ? , ".
  78. "telefono = ? , ".
  79. "descripcion = ?  ".
  80. "WHERE ".
  81. "id = ? ;";
  82. // Antes de continuar vamos a obtener el nuevo id
  83. // Como estamos usando DB vamos a usar el mecanismo
  84. // propio de DB para obtener el id.
  85.  
  86. $datos = array( $usuario_vo-&gt;nombre,
  87. $usuario_vo-&gt;rut,
  88. $usuario_vo-&gt;username,
  89. $usuario_vo-&gt;bcryptpass,
  90. $usuario_vo-&gt;mail,
  91. $usuario_vo-&gt;region,
  92. $usuario_vo-&gt;sexo,
  93. $usuario_vo-&gt;telefono,
  94. $usuario_vo-&gt;descripcion,
  95. $usuario_vo-&gt;id );
  96. $preparedStatement = $this-&gt;conexion-&gt;prepare($sql);
  97. $resultado =&amp; $this-&gt;conexion-&gt;execute(
  98. $preparedStatement,$datos);
  99. if (PEAR::isError($resultado)){
  100. echo 'Falló la modificación en la BD ';
  101. echo $resultado-&gt;getMessage() . "";
  102. echo "Detalles Error : " .
  103. $resultado-&gt;getUserInfo() . "";
  104. }
  105. }
  106.  
  107. public function buscarId($id)
  108. {
  109. $sql = "SELECT * FROM usuarios WHERE id = ?";
  110. $preparedStatement = $this-&gt;conexion-&gt;prepare($sql);
  111. $resultado =&amp; $this-&gt;conexion-&gt;execute(
  112. $preparedStatement,$id);
  113. if (PEAR::isError($resultado)){
  114. echo 'Falló la modificación en la BD ';
  115. echo $resultado-&gt;getMessage() . "";
  116. echo "Detalles Error : " .
  117. $resultado-&gt;getUserInfo() . "";
  118. }
  119. else if ($fila =&amp; $resultado-&gt;fetchRow() ){
  120. $usuario_vo = new UsuarioVO();
  121. $usuario_vo-&gt;id = $fila['id'];
  122. $usuario_vo-&gt;nombre = $fila['nombre'];
  123. $usuario_vo-&gt;rut = $fila['rut'];
  124. $usuario_vo-&gt;username = $fila['username'];
  125. $usuario_vo-&gt;bcryptpass = $fila['bcryptpass'];
  126. $usuario_vo-&gt;mail = $fila['mail'];
  127. $usuario_vo-&gt;region = $fila['region'];
  128. $usuario_vo-&gt;sexo = $fila['sexo'];
  129. $usuario_vo-&gt;telefono = $fila['telefono'];
  130. $usuario_vo-&gt;descripcion = $fila['descripcion'];
  131. return $usuario_vo;
  132. }
  133. // Si hubo un error, o no encontramos nada...
  134. return null;
  135. }
  136.  
  137. public function buscarCampo($campo, $valor)
  138. {
  139. $sql = "SELECT * FROM usuarios WHERE $campo = ?";
  140. $preparedStatement = $this-&gt;conexion-&gt;prepare($sql);
  141. $resultado =&amp; $this-&gt;conexion-&gt;execute(
  142. $preparedStatement,$valor);
  143. if (PEAR::isError($resultado)){
  144. echo 'Falló la modificación en la BD ';
  145. echo $resultado-&gt;getMessage() . "";
  146. echo "Detalles Error : " .
  147. $resultado-&gt;getUserInfo() . "";
  148. return null;
  149. }
  150. $respuesta = array();
  151. while ($fila =&amp; $resultado-&gt;fetchRow() ){
  152. $usuario_vo = new UsuarioVO();
  153. $usuario_vo-&gt;id = $fila['id'];
  154. $usuario_vo-&gt;nombre = $fila['nombre'];
  155. $usuario_vo-&gt;rut = $fila['rut'];
  156. $usuario_vo-&gt;username = $fila['username'];
  157. $usuario_vo-&gt;bcryptpass = $fila['bcryptpass'];
  158. $usuario_vo-&gt;mail = $fila['mail'];
  159. $usuario_vo-&gt;region = $fila['region'];
  160. $usuario_vo-&gt;sexo = $fila['sexo'];
  161. $usuario_vo-&gt;telefono = $fila['telefono'];
  162. $usuario_vo-&gt;descripcion = $fila['descripcion'];
  163. $respuesta[] = $usuario_vo;
  164. }
  165. return $respuesta;
  166. }
  167. }
  168. ?&gt;

Bien, ahora ya tenemos listas las clases que necesitamos para manipular nuestro usuario (los datos del usuario, no es que cumplamos es sueño de todo HelpDesk). Ahora solo nos falta alguien que necesite agregar, actualizar o borrar informacion del usuario.

Alguien que necesite ingresar un usuario...

[ InsertarUsuario.php ] Clase que insertará un usuario

PHP:
  1. require_once 'usuarioVO.php';
  2. require_once 'Usuario_DB_DAO.php';
  3.  
  4. // para probar, necesitamos crear un usuarioVO
  5.  
  6. $vo = new UsuarioVO();
  7. $vo-&gt;id = null;
  8. $vo-&gt;nombre = 'Juan Lopez';
  9. $vo-&gt;rut = '3-5';
  10. $vo-&gt;username = 'juanito';
  11. $vo-&gt;mail = 'juan.lopez@mimail.com';
  12. $vo-&gt;region = 13;
  13. $vo-&gt;telefono = '98765432';
  14. $vo-&gt;sexo = 1; // 1 hombre, 2 mujer!
  15. $vo-&gt;descripcion = 'Ejecutivo joven, baila salsa';
  16. $vo-&gt;bcryptpass = 'erwrwesdsdfsdfsdksd';
  17.  
  18. // Y necesitamos un dao...
  19. $dao = new Usuario_DB_DAO();
  20. $dao-&gt;guardar($vo);
  21. echo 'Terminamos!';
  22. ?&gt;

Alguien que modifique un usuario...

[ ModificarUsuario.php ] Modificaremos un campo del usuario.

PHP:
  1. require_once 'usuarioVO.php';
  2. require_once 'Usuario_DB_DAO.php';
  3.  
  4. $dao = new Usuario_DB_DAO();
  5. $vo = $dao-&gt;buscarId(1);
  6.  
  7. echo 'Terminamos la busqueda';
  8. $vo-&gt;descripcion = $vo-&gt;descripcion. 'Probando modificar';
  9.  
  10. $dao-&gt;guardar($vo);
  11.  
  12. echo 'Terminamos!';
  13. ?&gt;

Buscaremos usuarios que cumplan un cierto filtro o requisito...

[ BuscarCampo.php ] Buscaremos por un campo en específico.

PHP:
  1. require_once 'usuarioVO.php';
  2. require_once 'Usuario_DB_DAO.php';
  3.  
  4. $dao = new Usuario_DB_DAO();
  5. // buscamos a los hombres.
  6. $lista = $dao-&gt;buscarCampo('sexo', 1);
  7.  
  8. echo 'Hay '. count($lista). ' hombres registrados';
  9.  
  10. echo 'Terminamos!';
  11. ?&gt;

Una simple búsqueda por ID, y listaremos todos sus valores...

[ BuscarPorID.php ] Buscaremos por un ID.

PHP:
  1. require_once 'usuarioVO.php';
  2. require_once 'Usuario_DB_DAO.php';
  3.  
  4. $dao = new Usuario_DB_DAO();
  5. $vo = $dao-&gt;buscarId(1);
  6.  
  7. // Obs tratamos el objeto como un arreglo
  8. foreach($vo as $llave =&gt; $valor){
  9. echo "$llave : $valor ";
  10. }
  11. echo 'Terminamos la busqueda';
  12. ?&gt;

Ya, terminamos este simple ejemplo de como funciona el DAO, espero esté redactado de forma clara y comprensible.

Toda crítica o comentario será bienvenida...

VN:F [1.0.9_379]

Ancelot PHP, Programación , , , , , , ,