Nada es indispensable, siempre hay algo que lo puede remplazar

Superficie de un triangulo rectangulo

2008-08-25 14:01:24-05

Programación

Hace mucho que no me ponia a programar, la verdad diran que hace un ingeniero en ciencias ambientales aprendiendo a programar en C ya que no soy informatico y mucho menos; pero me entron el gusanito de conocer y querer a aprende a programar; hace un mes que de nuevo empece el emocionante camino de hacerlo, espero que este ejemplo les ayude a alguien a aprende a programar.

Es un pequeño programa que te da la superficie de un triangulo con la  formala matematica: (base + altura)/2; pero si consideramos que la bse y la altura son los catetos de un triangulo equilatero tambien podremos optener el cuadrado de la hypotenusa segun el famos teorema de pitagoras: base2 + Altura2 = hypotenusa2. Pues bien manos a la obra

Nota:El scrit del programa se encuentra en azul

 

/* El siguiente programa en C nos da el área de un triangulo equilatero y la hypotenusa al cuadrado segun el famoso teorema de pitagoras esta protegido bajo licencia GPL 3  */

#include // Incluimos el archivo de cabecera de entradas y salidas

 

main( )

{ // Se habre sentencia de bloques

float area, altura, base, hypotenusa; // se definen las variables con flaot para numeros reales

printf("Se introuduce la altura en centimentros:   \n"); // se pide la variable altura en centimetros

scanf("%f", &altura); // se encadena el numero introducido a la variable altura con base

printf("Se intruduce la base en centimetros:  \n");// Se pide la varible base en centimetros

scanf("%f", &base)// se encadena el numero introducido a la variable base con base

area = (base + altura)/2 // formula para sacar el area del triangulo equilatero

hypotenusa = (base * base) + (altura * altura) //formula del teorema de pitagoras

printf("El area del triangulo quilatero es: %f y la hypotenusa al cuadrado es %f/n",  area,hypotenusa); /* se muestra en pantalla el resultado del area y la hipotenusa */

return 0; // se cierra el programa muestra el resultado si este es cero

} //Se cierra el bloque de sentencias

 

Este es un pequeño programa en C, considero que el lenguaje python podria ser mas propio para este tipo de demostraciones matematicas, pero para aprender el lenguaje C este escrip puede ayudar.

Si compilas en gcc acuerdate te situas en la carpeta donde tienes el programa despues de escribirlo en tu editor faborito gedit, jedit, vim u otro lo guardas con la estencion c. Por ejemplo Area.c

Despues compilalo asi #gcc -o Area Area.c

Esto hara que tengas un ejecutable llamado Area si no lo compilas asi y lo compilas de este modo

#gcc -o Area.c

Te creara un archivo llamado a.out

para hecharlo a funcionar en consola es:

#./Area

Este comando hace que el programa muestre su primera sentencia en la consola.

 

Bueno es todo, se que para muchos es muy sencillo el programa, agradecer cualquier comentario, correcion y ayuda que me dan, con sus aportaciones considero que podre a llegar a ser mejor programador en c que lo que soy ahora.

 

Permalink: http://www.mononeurona.org/users/entry/saidjose/1522


Inseguridad

2008-08-22 21:46:33-05

Seguridad

Me llego este correo en forma de cada y me parecio muy buenos consejos los dados en el correo, respeto a la seguridad que debemos tomar para no ser asaltados o secuestrados (copio y pego).

 

Tengan cuidado que la cosa está cada día mas fea.  El hampa se ha hecho cargo del país. 
MODUS OPERANDI  

Los  delincuentes  llegan  a  restaurantes  o  establecimientos públicos  y  de  los vehículos estacionados en la parte externa seleccionan uno al azar. 
Posteriormente   y   de manera   muy   educada   ingresan  al        establecimiento preguntando por el propietario del vehículo con un determinado número de placa. 
Al  identificar  al propietario, le manifiestan que su vehículo     está  obstruyendo  el movimiento de otro vehículo, por lo cual, solicitan la colaboración del propietario para moverlo. 
En  la  mayoría  de  los  casos, el propietario del vehículo se 
identifica,  y  sale  de  inmediato  a movilizar o verificar su 
vehículo.  Una  vez identificado el propietario del vehículo, y 
fuera  del establecimiento, los delincuentes le informan de una 
manera  muy discreta y utilizando intimidación, que se trata de un asalto. 
En  algunos  casos  se  llevan el vehículo y dejan a la víctima 
bajo  el  cuidado  de  otros  delincuentes;  en otros casos, se llevan  a  la víctima con ellos, obligándolo a realizar retiros 
de  las cuentas de debito de la víctima, hasta donde sus fondos 
lo permitan, toda clase de operaciones financieras y, en muchos casos,  se  ha  llegado  incluso  al  secuestro  de la víctima, corriendo esta el peligro hasta de perder la vida.
             RECOMENDACIONES ·      Evite, en lo posible, estacionar en lugares externos y sin  vigilancia.  Si  por  fuerza  mayor  debe estacionar en un 
estacionamiento  externo, asegúrese de no bloquear la salida de otros vehículos o estacionarse frente a garajes. 
Si  un  desconocido  pretende  ubicarlo a través de la          placa  de su vehículo, no se identifique de inmediato, no salga a exponerse sin saber de quien se trata. 
 Trate de observar disimuladamente a través del vidrio o desde  la  puerta  del  establecimiento.  Pídale  al  mozo  que verifique  si  es  cierto  que  su  auto obstaculiza algún otro vehículo. 
Si  tiene  que  salir,  adopte  medidas de seguridad y 
pídale  a  sus  acompañantes  que  estén  atentos  a  cualquier 
situación extraña. 
        QUE NO LO TOMEN                 DESPREVENIDO!
             ¡RECUERDE,  EL  DELINCUENTE  DE  HOY  GENERALMENTE  TIENE BUEN 
ASPECTO FÍSICO, SE VISTE BIEN Y SE EXPRESA CORRECTAMENTE! 
Pasamos bromas y de todo a lo largo del Internet. Sin embargo, 
si  estás dispuesto a pasar esta información, podrías realmente 
prevenir  un  asalto  con  peligro  hasta  de  pérdida de vidas 
humanas. 

¡El que no vive para servir, no sirve para vivir!.. 
 

  ENVIE ESTO A TODOS SUS CONTACTOS Y PONLOS ALERTA!

 

Permalink: http://www.mononeurona.org/users/entry/saidjose/1516


Agujas y derrame cerebral

2008-08-13 13:34:34-05

Salud y medicina

Me enviaron este e-mail a mi correo, me parecio interesante y a alguien le puede servir, es un metodo aplicado en China sobre como tratar en primeros auxilios a las personas que sufre paralisis facial en sus primeros momentos. La información debe ser tratada con sumo cuidado, ya que el metodo no ha sido probado por mi, ni por ningun conocido que me asegure que tiene resultados, sin mas hay les va el metodo.

Aguja salvadora! *  
Una aguja puede salvar la vida de alguien con comienzo de AVC.  (derrame cerebral)

Vale la pena  2 minutos de lectura. 

Una aguja puede salvar la vida de un paciente con principios de derrame…  Dicho por un profesor chino.  Guarda  una jeringuilla o  una aguja de coser para hacer esto - es un método no convencional para recuperar a alguien de un derrame cerebral.   

Cuando vea que alguien es víctima de un derrame, manténgase calmado. Independientemente de donde esté la víctima, no la mueva del lugar.

Cuando sucede el derrame, las venas capilares en el cerebro van gradualmente rompiéndose.

Si mueven a la persona las venas capilares se van a romper. Si tiene en su casa una jeringuilla mejor. Si no tiene, puede utilizar una aguja de  costura o un alfiler.   

1. Caliente la punta de la aguja para esterilizarla y más adelante de  un pinchazo en todos los dedos de las manos del paciente. 

2. No hay puntos específicos en los dedos para  acupuntura, sino que puede pinchar a 1 milímetro cerca de la uña. 

3. Pinche hasta que la sangre a comience a salir. 

4. Si la sangre  no comenzara a salir, entonces presione con los dedos. 

5. Cuando todos los dedos  comienzan a sangrar, espere algunos minutos y empiece a friccionar los lóbulos de las orejas del paciente hasta que se pongan  rojos. 

6. Pinche cada uno de los lóbulos de los oídos hasta que empiece a salir una gota de  sangre de cada lóbulo.

Después de algunos minutos la persona comenzará a recuperar las facultades.  Espere hasta que recupere el estado normal y llévele para el hospital.  Si es conducido apresuradamente  para el hospital, el viaje turbulento va a hacer que los vasos capilares del cerebro se rompan.  'Aprendí a sacar gotas de  sangre para salvar  vidas a través de un doctor de medicina tradicional de la China. Se llama Ho Bu Ting. Tenía experiencia práctica en el tema y puedo más adelante decir que este método es el 100%eficiente.  En 1979, siendo profesora de la Universidad de Fung Gaap en Tai Chungkin, una tarde, un profesor de otra aula, entró corriendo a mi sitio y me dijo  'señora. Liu, venga rápidamente, nuestro supervisor tenía un derrame!   Corrí inmediatamente hasta donde se encontraba el Sr. Chen Fu Tien quien estaba pálido, su hablar eran sólo susurros,  la boca la tenía torcida - síntomas de un derrame.  Pedí inmediatamente a uno de los estudiantes ir a una farmacia a comprar una jeringuilla, y empecé a pinchar al Sr. Chen en todos los dedos.   Cuando todos los dedos estaban sangrando (cada uno de los dedos con una gota de  sangre del tamaño de un guisante), el Sr. Chen comenzó a recuperar su color.   Pero la boca continuaba torcida. Entonces, tiré de los lóbulos de los oídos de él por completo para que aflore la sangre. Cuando los oídos de él habían comenzado a ponerse rojos, pinché el lóbulo del oído derecho por 2 veces para que empiece a salir sangre, dos gotas y más adelante el lóbulo el oído izquierdo.  Dentro de  3 y 5 minutos la forma de la boca se volvió  normal y su manera de hablar llegó a estar clara.  Lo dejamos descansar un poco y luego lo llevamos para el hospital. Estuvo en reposo  por una noche y al  día siguiente le habían dado de alta y pudo regresar a su aula.  Todo funcionó normalmente. No apareció ninguna enfermedad derivada de los primeros auxilios que le fueron aplicados. Por otra parte, las víctimas de derrame sufren normalmente daños irremediables en los vasos capilares del cerebro durante el traslado para el hospital.  Como resultado, estas víctimas nunca se recuperan.  Por lo tanto, el derrame cerebral  es la segunda causa más grande de  muerte. Los que tenga suerte pueden sobrevivir, solamente que ellos pueden quedar paralíticos para toda la vida. Cosa horrible de  suceder en la vida de alguien.  

Envían este email después de leerlo.

Usted puede salvar a alguien de morir de un derrame. 

Permalink: http://www.mononeurona.org/users/entry/saidjose/1493


¿Que necesita PEMEX?

2008-07-18 12:41:03-05

Politica

 

¿QUE NECESITA PEMEX?

Llego a mi correo este mail, de un buen amigo, tiene una explicación mas claro que el agua  sobre el futuro de PEMEX si se permite la reforma energética tal como esta, bueno a mi me parece, cada quien tiene su opinión

Realmente siempre que escucho los comerciales a favor de la privatización, me muero de la risa y de la indignación....

 

el gobierno piensa que con unos papelitos (llamados petrobonos) nos darán el verdadero valor del petróleo (echándonos el choro que seremos uno de los socios de PEMEX Y ME HAGO LA MALDITA PREGUNTA ¿¿PARA QUE QUIERO SER SOCIO?? SI ACTUAMNETE SOY EL DUEÑO, JUNTO CON TODOS LOS MEXICANOS)... pero jamás sucederá, porque el petróleo tiene un valor comercial que aumenta día con día muestra de ello es el precio del barril de crudo que anda por los 145 dólares. Obviamente nos quieren ver la cara…con la mentira de que está en quiebra.  

 

Una de las empresas más rentables en el mundo ¿sin fondos? ¿¿¿será por que siempre tiene que pagar las pendejadas sexenales de cada presidente??? Por que tiene cientos de aviadores ganando millones?? Habrá que preguntarle a Rogelio Montemayor o a Raúl Muños Leos en cuanto aumentaron sus riquezas personales después de pasar por PEMEX.....la respuesta  seguramente nos sorprenderá.....

 

Lo que necesita PEMEX en apariencia es un milagro y no privatizarla..... para acabar pronto es una empresa que necesita otro país con un presidente nacionalista, unos funcionarios honestos, un sindicato que abogue por los trabajadores y un pueblo que luche por sus intereses...

 

Posiblemente lo referente al presidente, a los funcionarios y al sindicato sea imposible; pero tú que eres parte del pueblo puedes cambiar el rumbo de la historia e impedir el robo al patrimonio de México y de tu familia.


Haciendo a un lado la indiferencia abismal de

los habitantes del país ante la situación sociopolítica,

el momento histórico al que pertenecemos

nos obliga a hacer frente al problema que se presentaría en México

con la Reforma Energética.

 

¿Sabes cuál sería su trascendencia si se llevara a cabo?

¿Crees que con tus petrobonos estarás excento?

¿Crees que PEMEX necesita 'modernizarse'?

o peor aún: ¿Crees que este problema no tendrá implicaciones en tu vida ni en la de tus hijos?

                  

 alt



alt

alt

alt

                       !MAS CLARO NI EL AGUA!

             PEMEX NO SE PRIVATIZA SOLO.    

              ¡A PEMEX LE PRIVATIZAN!

  Fregarse a PEMEX ES FREGARSE A MÉXICO

envía esto a tus contactos y acepta información,

pero siempre manteniendo tu sentido crítico.  

Seguro que no somos pocos los que haremos algo.

Permalink: http://www.mononeurona.org/users/entry/saidjose/1437


Verdad o ficción sobre el VIH SIDA

2008-05-28 15:07:42-05

Educacion, ciencia y técnologia

Verdad o ficción sobre el VIH SIDA

Hace pocas semanas se publico un artículo en un blog de la mononeurona sobre la falsedad de el grupo de médicos, científicos y personas que creen que el virus del SIDA no existe, mostrando ligas con fotos, donde aparecen células infectadas por el virus del sida.

Las fotos mostradas en dichas ligas, eran de células y hechas con microscopios ópticos, no se han mostrado fotografías del virus del VIH aislado solo, del virus infectando una célula, de las proteínas y el ADN, para mostrar su existencia.

Actualmente un grupo de científicos y médicos, creen que el virus del SIDA, es un invento de las grandes compañías dedicadas a la elaboración de medicamentos y de gobiernos para sostener un negocio multimillonario, cabe aclarar que medicamento como el AZT es un medicamento descubierto desde la década de los años 60, el cual fue propuesto para combatir el cáncer; pero nunca ah pasado a comercializarse por ser un producto extremadamente tóxico para el organismo humano. El AZT es un inibidor de la división celular, provocando que las células del sistema inmunitario se dividan mas lentamente, por lo que se cree que ayuda a las enfermedades oportunistas en vez de defender al cuerpo, y son estas células donde según los especialista en enfermedades del sistema inmunitario se desarrolla el virus del SIDA.

Otra de las controversias es que la prueba de ELISA, que se utiliza como prueba estándar para detectar el virus, en sus indicaciones se menciona como una prueba que no se debe de utilizar para la detección de esta enfermedad; se detectaron un gran número de casos, en donde la prueba dio positivo y una prueba posterior de ELISA, dio negativo.

Actualmente las personas que son diagnosticadas como cero positivos, aquellas que llevan regímenes de vida mas saludable como: alimentación rica en anti oxidantes, ejercicio,un vida sin estrés y sin la prescripción de tantos retrovirales, han tenido vidas mas largas, saludables, sin menos complicaciones, que aquellas que se les ha prescrito retrovirales y otros medicamentos para controlar la enfermedad.

Si existe o no el Virus del sida es algo que a la gente común no debe de importarle, la cuestión es proteger nuestra salud, si eres activo sexualmente con varias parejas o tienes un encuentro ocasional, es recomendable el uso del condón y los geles antiespermaticidas que ayudan a matar al supuesto virus, si te drogas o inyectas por tener alguna enfermedad que indique medicamento inyectado, utiliza la geringa una vez y no compartas geringas.

Aqui dejo unas ligas sobre el doctor Stefan Lanka que asegura que el virus del SIDA no existe:

http://free-news.org/slanka01.htm
http://free-news.org/slanka03.htm

Las entrevistas tienen su tiempo pero se me hacen una buena información.

Permalink: http://www.mononeurona.org/users/entry/saidjose/1354


log de Cakephp 1.2

2008-05-23 15:26:54-05

PHP

Aquí les dejo el log de la platica sobre Cakephp que el buen amigo aarkerio dio en el canal de la mononeurona el dia 23 de mayo al medio dia.


El tema de #mononeurona.org es: ?Bienvenid@ a la Mononeurona! || ?Despabila tu mononeurona y comparte tu conocimiento! || Registra tu nick: "/msg nickserv register your-password" || Sandbox: http://mononeurona.org.pastebin.com || Vista la p?gina oficial:

 

(12:01:45) aarkerio: bueno vamos a empezar
(12:01:49) doclinux: ok
(12:01:50) aarkerio: Bueno antes que nada en estos ejemplos estoy usando debian SID como OS, gnome-terminal como terminal y emacs como editor, pero se puede usar Gedit o Kate o Jedit o el que prefieran. Si van a usar emcas instalen el paquete php-elisp para que les pinte el código en PHP.
(12:01:51) Black_Soul: vale ya tengo que irme despues checo el log, suerte
(12:02:00) aarkerio: by black!
(12:02:15) aarkerio: bye! I mean
(12:02:30) aarkerio: como todos ustedes ya saben CakePHP es el RubyOnRails para PHP, MVC y todas esas cosas
(12:02:51) ramanugan: en la version estable al hacer el bake de una vista marcar un error : algo relacionado con un metodo llamado getDisplayField() , en el modelo tiene una relacion belongsTo.... si elimino la relacion si hace la vista bien...alguna sugerencia ?
(12:02:55) aarkerio: alguien tiene una duda sobre MVC?
(12:02:58) ramanugan: nop
(12:03:06) doclinux: nop
(12:03:53) alimon: no
(12:03:55) Fulano: yo si pero luego investigo por que no eh seguido tus talleres sorry
(12:04:05) aarkerio: Actualmente CakePHP 1.2 que es la versión con la que vamos a trabjar está en desarrollo, vamos a instalar la version 1.2 desde su repositorio en subversion
(12:04:10) mapache74 [n=austrumi@189.158.42.141] ha entrado en la sala.
(12:04:29) aarkerio: vamos a necesitar los siguientes paquetes
(12:04:31) aarkerio: sudo apt-get install subversion cakephp-instaweb php5 php5-pgsql postgresql
(12:05:24) doclinux: yo si hice la tarea y ya esta :-)
(12:05:33) Fulano: yo tambien hice esos puntos:D
(12:06:14) aarkerio: vamos a crear un directorio tmp en nuestro $HOME
(12:06:16) aarkerio: mkdir tmp
(12:06:40) aarkerio: nos metemos a ese dir y ahi bajamos las fuentes de cakephp 1.2
(12:06:58) aarkerio: svn co https://svn.cakephp.org/repo/branches/1.2.x.x/ myproject
(12:08:59) aarkerio: todos ya tenemos las fuentes abajo?
(12:09:04) doclinux: sip
(12:09:19) aarkerio: nos metemos al dir myproject
(12:09:39) aarkerio: y le damos un ls -l
(12:09:51) aarkerio: veremos cuatro directorios
(12:10:05) Fulano: sip
(12:10:06) aarkerio: el de docs ya sabemos
(12:10:49) aarkerio: "vendors" es para colocar código de terceras partes, cake son las librerías de CakePHP, esa directorio nunca se toca pues es el framework, este directorio es el CORE. El direcorio donde verdaderamente trabajamos es "app". Este directorio podría llmarse de otra manera por ejemplo "mycms" y nada cambiaría, la ventaja es que podemos tener varios projectos "muapp", "app3", "otracosa " usando las mismas librerías CORE para todos estos proyectos
(12:10:49) aarkerio: , asi para actualizar CakePHP sólo lo hacemos en un sólo directorio.
(12:11:41) aarkerio: bueno nos metemos al dir app
(12:11:52) aarkerio: y damos
(12:12:02) aarkerio: cakephp-instaweb
(12:13:26) aarkerio: Bueno con nuestro browser nos colocamos en http://localhost:3000, y ya podemos ver a cakephp, lo primero que veremos es el mensaje Please change the value of 'Security.salt' in app/config/core.php. Entonces abrimos el archivo app/config/core.php,
(12:13:41) aarkerio: pueden usar Gedit
(12:14:09) aarkerio: este archivo core,php guarda varias configuraciones, en este caso buscamos donde dice Configure::write('Security.salt'
(12:14:25) aarkerio: este es un string de seguridad que CakePHP usa para generar las sesiones, ninguna aplicación de CakePHP debe tener este string igual asi que lo edtamos borrando y agregando algunos caracteres del string.
(12:14:49) aarkerio: Si una aplicación pasa de Desarrollo a Producción es bueno guardar una copia de este string en un lugar seguro pues si alguien lo cambia los passwords cifrados de la base de datos ya no funcionan.
(12:15:24) aarkerio: si guardamos y recargamos en el browser ya no vemos el mensaje del Salt
(12:16:11) aarkerio: otra opción de este archvo core.php es Configure::write('debug', 2);
(12:16:26) aarkerio: que define el nivel de debug de CakePHP, cuando la aplicación esta en desarrollo puede estra en 1,2 o 3 cuando la aplicación está ya en producción por seguridad debe estar en cero.
(12:16:36) mapache74 ha salido de la sala ("Leaving").
(12:17:14) aarkerio: Si esta en 1 el debug sólo envia los mensajes de error, si está en 2 envia los mensajes de error y las consultas SQL y si está en 3 envía todo eso
(12:17:35) aarkerio: y además todas las variables de ambiente, las opciones 2 y 3 envian un chingó de información por lo cual generalmente el debug para el desarrollo está en 1
(12:17:40) ramanugan: oye aarkerio... no es por mala onda, pero ni somos tontos y vas muy lento
(12:18:13) aarkerio: bueno vamos a crear nuestra base de datos
(12:18:13) aarkerio: createdb -E UNICODE DBCAKE
(12:19:03) aarkerio: editamos el archivo config/database.php.default y lo salvamos compo database.php, el array $default debe estar así:
(12:19:20) aarkerio: public $default = array(
(12:19:20) aarkerio: 'driver' => 'postgres',
(12:19:20) aarkerio: 'persistent' => false,
(12:19:20) aarkerio: 'port' => 5432,
(12:19:20) aarkerio: 'host' => 'localhost',
(12:19:21) aarkerio: 'login' => 'postgres',
(12:19:23) aarkerio: 'password' => '9mexik00L',
(12:19:25) aarkerio: 'database' => 'DBCAKE',
(12:19:28) aarkerio: 'prefix' => '',
(12:19:30) aarkerio: 'schema' => 'public',
(12:19:33) aarkerio: 'encoding' => 'UTF-8'
(12:19:35) aarkerio: );
(12:19:37) aarkerio: Ahora en el browser ya debe verse el mensaje "Cake is able to connect to the database."
(12:19:52) ramanugan: si... asi es.
(12:21:24) aarkerio: vamos a crear las siguientes tablas:
(12:21:25) aarkerio: http://www.mononeurona.org/scripts/cake/blog.sql.txt
(12:21:36) spynes [n=chatzill@static-adsl201-232-95-118.epm.net.co] ha entrado en la sala.
(12:21:36) modo (+v spynes ) por ChanServ
(12:23:23) monouser611312 [n=monouser@201.137.208.253] ha entrado en la sala.
(12:23:29) aarkerio: todos ya tenemos las tablas en la BD?
(12:23:50) alimon: si
(12:23:51) ramanugan: si
(12:25:29) aarkerio: vamos a crear nuestro primer model:
(12:25:31) aarkerio: http://www.mononeurona.org/scripts/cake/entries.php.txt
(12:25:57) aarkerio: la parte del modelo y dominio debe ser la parte más grande de nuestra aplicación
(12:26:05) aarkerio: es donde está la lógica principal
(12:26:14) ramanugan: no recomiendas usar bake ?
(12:27:00) ramanugan: para generar los modelos, controladores y vistas ?
(12:27:01) aarkerio: a mi bake me truena, además sólo hace algunas cosas
(12:27:19) ramanugan: ???
(12:27:37) aarkerio: como en la mayoría de los casos, es mejor hacerlo a manita
(12:27:42) ramanugan: no estaria de mas dar una explicacion de como usar el bake
(12:27:53) ramanugan: me ha sacado de apuros varias veces
(12:28:11) ramanugan: sobre todo al escribir codigo de manera mecanica
(12:28:25) ramanugan: solo hay que escribir codigo sustancial
(12:28:30) ramanugan: no crees ??
(12:29:08) aarkerio: si lo he usado pero a mi me truena seguido y sólo crea esqueletos
(12:29:24) aarkerio: por ejemplo debería crear los scrumbs y las validaciones jS
(12:29:53) aarkerio: si tienes vistas y controladores más estructurados es mejor heredar esos que los que crea bake
(12:29:56) ramanugan: jjajja... ok, aunque no entiendo el por que de tu negativa, es una herramienta, que funciona bien ... usandola como se debe
(12:30:32) aarkerio: también Dreamweaver en algunos casos puede ser útil, pero yo no uso DW
(12:30:55) ramanugan: ok... ya no insisto mas
(12:31:21) ramanugan: uso emacs y vim... abrorrezco el dreamwebos
(12:31:22) aarkerio: bueno vamos a ver nuestro modelo Entry
(12:31:37) aarkerio: por que si es muy útil? hace muchas cosas?
(12:31:52) aarkerio: usandolo como se debe
(12:31:56) ramanugan: jajajajaja
(12:31:59) Fulano: jajaja
(12:32:02) ramanugan: sin palabras
(12:32:10) Fulano: ya sigue aarkerio
(12:32:23) ramanugan: si ya sigue
(12:32:28) Fulano: luego pelean en los blog's
(12:32:34) ramanugan: si eso es
(12:32:37) ramanugan: sigue
(12:32:38) ramanugan: por favor
(12:32:40) Fulano: y que cada quien defienda su parte
(12:32:42) aarkerio: anyhow las conveciones de Cake sobre modelos es: plura en BD singular en el nombre del modelo
(12:33:06) aarkerio: es decir si tenemis la tabla "users" el modelo es User
(12:33:31) aarkerio: si tenemos la tabla "entries" el modelo es Entry con mayúscula al inicio
(12:33:51) aarkerio: hay algunas excepciones como en la tabla "news"
(12:34:19) aarkerio: no se puede usar New porque es palabra reservada por lo cual el modelo es "News"
(12:34:36) aarkerio: siempre es mejor nombrar las tablas en inglés
(12:35:15) ramanugan: y si tengo una db heredada con los nombre en castellano ?
(12:35:17) aarkerio: como vemos el modelo Entry tiene tres dos asociaciones
(12:35:48) aarkerio: lo dejas en castellano
(12:36:04) aarkerio: dos asociaciones perdón
(12:36:21) aarkerio: $belongsTo y $hasMany
(12:36:39) aarkerio: como ustedes saben Cake usa el patrón de diseño ActiveRecord
(12:37:18) aarkerio: este patrtón permite integrar los elementos de un mundo relacional (SQL) a un mundo orientado a objetos (OOP)
(12:37:42) aarkerio: "envuelve" las tablas haciendolas objetos con métodos
(12:38:25) aarkerio: en la relación belongsTo se define que este objeto pertenece a otros dos objetos User y Theme
(12:39:14) aarkerio: por otro lado la relación hasMany (tiene muchos) especifica que tiene muchos elementos con el Objeto Comment
(12:39:40) aarkerio: la tabla entries sirve para guardar las entradas de nuestro blog
(12:40:30) aarkerio: en el objeto Entry vemos otro array: $validate
(12:40:39) doclinux: :-s ya me perdí : tengo que crear un directorio Entry y un archivo Entry y dentro un archi vo o ahi el Entry.php ?
(12:41:08) aarkerio: no hay que colocar el archivo entry.php en el directorio app/models/
(12:41:32) aarkerio: en ese directorio van los modelos
(12:42:16) doclinux: ok
(12:42:56) aarkerio: si nos colocamos en app/ y damos un ls -l
(12:43:15) aarkerio: veremos esto
(12:43:17) aarkerio: drwxr-xr-x 4 manuel manuel 146 2008-05-23 12:09 config
(12:43:17) aarkerio: drwxr-xr-x 4 manuel manuel 34 2008-05-23 12:09 controllers
(12:43:17) aarkerio: -rw-r--r-- 1 manuel manuel 953 2008-05-23 12:09 index.php
(12:43:17) aarkerio: drwxr-xr-x 4 manuel manuel 27 2008-05-23 12:09 locale
(12:43:17) aarkerio: drwxr-xr-x 5 manuel manuel 51 2008-05-23 12:09 models
(12:43:19) aarkerio: drwxr-xr-x 3 manuel manuel 29 2008-05-23 12:09 plugins
(12:43:20) aarkerio: drwxr-xr-x 6 manuel manuel 57 2008-05-23 12:09 tests
(12:43:24) aarkerio: drwxr-xr-x 7 manuel manuel 67 2008-05-23 12:09 tmp
(12:43:25) aarkerio: drwxr-xr-x 4 manuel manuel 30 2008-05-23 12:09 vendors
(12:43:27) aarkerio: drwxr-xr-x 9 manuel manuel 101 2008-05-23 12:09 views
(12:43:28) aarkerio: drwxr-xr-x 7 manuel manuel 137 2008-05-23 12:09 webroot
(12:43:35) aarkerio: el dir config es para la configuración
(12:43:54) aarkerio: en controllers van los controladores
(12:44:13) aarkerio: en locales vas los langs si queremos nuestra aplicación en varios idiomas
(12:44:27) alimon ha salido de la sala (quit: Read error: 104 (Connection reset by peer)).
(12:45:00) Fulano: sip
(12:45:01) aarkerio: en el dir tests van los unit testing de nuestra aplicación
(12:45:28) aarkerio: si han usado extremme programming han escuchado sobre los PHP UT
(12:45:46) aarkerio: en tmp están los logs y el cache de cake
(12:45:54) aarkerio: en views van las vistas
(12:46:17) aarkerio: el directorio webroot es el DOCUMENT_ROOT de cake
(12:46:49) aarkerio: es decir lo que está adentro de webroot es lo que vemos en el browser, los demás dirs no son accesibles desd internet
(12:46:57) aarkerio: lo que hace a cake más seguro
(12:47:18) aarkerio: en el dir vendors van las classes php externas a cake
(12:47:34) aarkerio: por ejemplo los captcha o los archivos que generan los PDF
(12:48:09) aarkerio: al trabajar con Cake vamos a estar consultando el API :
(12:48:11) aarkerio: http://api.cakephp.org/classes.html
(12:48:39) aarkerio: para saber los métodos y los parámetros que esperan
(12:49:27) Fulano: si te leemos
(12:49:54) aarkerio: vamos a crear una vista en cakephp
(12:50:44) aarkerio: en este caso vamos a crear una poágina estática creando el archivo app/views/pages/aboutme.ctp
(12:50:49) Roa: :O
(12:50:57) aarkerio: las vistas tienen la extensión .ctp
(12:51:37) aarkerio: "cake template"
(12:51:46) aarkerio: adentro de aboutme.ctp
(12:52:10) aarkerio: vamos a abrir un bloque php y adentro colocamos
(12:52:38) aarkerio: e($html->div(null, 'about me'));
(12:53:00) aarkerio: guardamos y nos colocamos en http://localhost:3000/pages/aboutme
(12:53:14) aarkerio: en las vistas de cakephp se usan los helpers
(12:53:36) aarkerio: que son clases que nos ayudan a generar código html bien formateado
(12:53:55) aarkerio: en este calse estamos usando el helper $html
(12:54:14) aarkerio: podemos ver su API:
(12:54:15) aarkerio: http://api.cakephp.org/class_html_helper.html
(12:54:19) Fulano: listo
(12:54:35) aarkerio: ademas estamos usando una función de cake e()
(12:54:55) aarkerio: que simplement hace "echo" a lo que este adentro
(12:55:14) aarkerio: el método div crea un div
(12:55:29) aarkerio: podemos usarlo asi:
(12:56:03) aarkerio: e($html->div('titsection', 'about me', array('style'=>'border:1px dotted orange')));
(12:56:35) Fulano: sip
(12:56:42) aarkerio: para eso por supesto debemos tener una clase titsection definida en nuestro archivo CSS somo veremos más adelante al importar nuestras
(12:56:47) aarkerio: hojas de estilos
(12:57:17) aarkerio: los helpers por lo general tiene este array al final para colocar valores al tag
(12:57:33) aarkerio: podemos usar
(12:57:42) aarkerio: e($html->para('titsection', 'about me', array('style'=>'border:1px dotted orange')));
(12:57:49) aarkerio: para parrafos
(12:58:09) aarkerio: echo $html->link('Nombre', 'ruta');
(12:58:15) aarkerio: para crear ligas
(12:58:31) aarkerio: echo $html->img('img.png');
(12:58:34) aarkerio: para imagenes
(12:58:37) aarkerio: etcétera
(12:59:03) aarkerio: la idea es que no no salgamos de php para teclear html
(12:59:09) aarkerio: que siempre es medio tedioso
(12:59:37) aarkerio: bueno ya saben, las paginas estáticas van en /views/pages/
(12:59:52) aarkerio: vamos a crear nuestro controlador
(13:00:01) aarkerio: los controladores van el dir controllers
(13:00:22) aarkerio: y se nombran entries_controller.php users_controller.php
(13:00:24) Fulano: sip
(13:00:27) aarkerio: themes_controller.php
(13:00:32) aarkerio: etcétera
(13:01:01) aarkerio: el archivo:
(13:01:03) aarkerio: http://www.mononeurona.org/scripts/cake/entries_controller.php.txt
(13:01:22) aarkerio: los guardamos en nuestro dir controllers
(13:02:09) aarkerio: los controladores tratan los "inputs" de la aplicación, estis inputs provienen de URLs o de formularios
(13:02:56) aarkerio: lo primero que vemos en nuestro controlador es uses('sanitize');
(13:03:14) ***Roa interesante platica alguien guardara log?
(13:03:22) aarkerio: que carga las clases para limpiar los valores que entran a la BD
(13:03:54) Fulano: ctrl+e? y ctrl+c si aqui es = sip yo
(13:04:00) aarkerio: tenemos un método display:
(13:04:02) aarkerio: public function display()
(13:04:02) aarkerio: {
(13:04:02) aarkerio: $this->pageTitle = 'Mi blog';
(13:04:02) aarkerio: $this->layout = 'blog';
(13:04:02) aarkerio: $conditions = array('Entry.status'=>1);
(13:04:05) aarkerio: $fields = array('Entry.id','Entry.title','Entry.theme_id','Entry.comments','Entry.created','Entry.body', 'Theme.theme');
(13:04:08) aarkerio: $order = 'Entry.id DESC';
(13:04:10) aarkerio: $limit = 10;
(13:04:12) aarkerio: $data = $this->Entry->findAll($conditions, $fields, $order, $limit);
(13:04:14) aarkerio: $this->set('data', $data);
(13:04:16) aarkerio: }
(13:04:58) aarkerio: este método es ejecutado através del URL del browser pues cake tiene un dispatcher que hace bonitos los urls
(13:05:23) aarkerio: es decir si en su navegador ponen
(13:05:24) aarkerio: http://localhost:3000/entries/display
(13:05:55) aarkerio: están diciendo "del controlador entries ejecuta el método display()"
(13:06:15) ramanugan: aja
(13:06:17) aarkerio: estpe método display como vemos hace varias cosas
(13:06:36) aarkerio: pone el título de la página con el atributo $this->pageTitle
(13:06:45) aarkerio: define el layout
(13:07:20) aarkerio: esta linea $this->layout vamos a comentrala pues aun no tenemos ningún layout "blog"
(13:08:12) aarkerio: los valores de $conditions, $fields, $order y $limit
(13:08:27) aarkerio: "arman" la consulta al modelo
(13:08:46) aarkerio: Cakphp automaticamente carga el model $this->Entry
(13:09:19) Fulano: si continua
(13:09:28) aarkerio: que es una extensión de la clase madre Model:
(13:09:30) aarkerio: http://api.cakephp.org/class_model.html
(13:09:45) aarkerio: por lo tanto ttiene el método findAll()
(13:10:00) aarkerio: para que encuentre todos los registros en la tabla
(13:10:31) aarkerio: una vez que tengo los datos en la vasriable multidimensional $data
(13:10:45) aarkerio: sólo falta pasarlos a la vista
(13:10:55) aarkerio: con el método $this->set()
(13:11:41) aarkerio: pero aun no tenemos una vista
(13:11:55) aarkerio: vamos a crear el directrtio app/views/entries
(13:12:13) aarkerio: y adentro vamos a colocar la vista display.ctp
(13:12:15) aarkerio: http://www.mononeurona.org/scripts/cake/display.ctp.txt
(13:12:35) aarkerio: es decir que el nombre de la vista debe ser el mismo que el nombre del método del controlador
(13:14:02) aarkerio: algo chido en cakephp es la función debug() esta función presenta la información de una array bien formateada en la pantalla
(13:14:16) aarkerio: como el nopmbre sugiere se usa mucho para el debug
(13:14:38) aarkerio: se puede usar en la vista el controlador o el modelo para saber qué es lo que hay un en array
(13:14:46) aarkerio: en este caso esta comentada
(13:16:24) Fulano: si continua
(13:16:41) aarkerio: en este caso el array data debería estra vacia
(13:16:58) aarkerio: pues no hay ningún registro en esa tabla
(13:17:29) aarkerio: bueno vamos a meter algunos registros a nuestro modelo Entry
(13:17:49) aarkerio: en el controlador entries_controller.php.txt
(13:18:01) aarkerio: tienen un método admin_add
(13:18:40) aarkerio: para acceder a este método en el url sería asi:
(13:18:57) aarkerio: http://localhost:3000/admin/entries/add
(13:19:09) aarkerio: pero para ello debemos editar el archivo core.php
(13:19:44) aarkerio: Configure::write('Routing.admin', 'admin');
(13:19:58) aarkerio: ese linea debe estar descomentada
(13:20:09) aarkerio: noten que puede tener otro valor como:
(13:20:19) aarkerio: Configure::write('Routing.admin', 'restricted');
(13:20:27) aarkerio: Configure::write('Routing.admin', 'zonadelamuerte');
(13:20:31) aarkerio: u otra cosa
(13:21:02) aarkerio: pero las vistas tambien deberian ser zonadelamuerte_add.ctp
(13:21:13) aarkerio: todo bien?
(13:21:27) Fulano: sip
(13:22:39) aarkerio: bueno vamos por nuestro archivo admin_add.ctp
(13:22:40) aarkerio: http://www.mononeurona.org/scripts/cake/admin_add.ctp.txt
(13:23:03) aarkerio: y lo colocamos en app/views/entries/
(13:24:10) Fulano: listo
(13:24:40) aarkerio: el método admin_add también define un layout:
(13:24:41) aarkerio: $this->layout = 'admin';
(13:25:01) aarkerio: es buena idea que la sección admin tenga su propio layout
(13:25:37) aarkerio: lo layouts van colocados en app/view/layouts
(13:25:46) aarkerio: y también tienen la extensión .ctp
(13:26:22) aarkerio: vamos a ir por el layout admin:
(13:26:23) aarkerio: http://www.mononeurona.org/scripts/cake/admin.ctp.txt
(13:26:54) aarkerio: el layout tiene la variable $title_for_layout;
(13:27:18) aarkerio: que es la que ponemos en el controlador con $this->pageTitle
(13:27:34) aarkerio: if ( isset($javascript) ):
(13:27:34) aarkerio: echo $html->charset('UTF-8');
(13:27:34) aarkerio: echo $javascript->link('prototype');
(13:27:34) aarkerio: echo $javascript->link('scriptaculous.js?load=effects');
(13:27:35) aarkerio: endif;
(13:27:44) aarkerio: es para cuando trabajamos con ajax
(13:28:04) aarkerio: if ( isset($javascript) ): revisa que el helper javascript este colocado
(13:28:40) aarkerio: cakephp tiene helpers para varias cosas y también nostors podemos crear nuestro propios helpers
(13:29:04) aarkerio: la parte más imprtante d e los layouts es echo $content_for_layout;
(13:29:24) aarkerio: $content_for_layout es el resultado del proceso de la vista
(13:30:19) aarkerio: el el layout usamos
(13:30:21) aarkerio: echo $html->css("admin");
(13:30:35) aarkerio: que carga nuestra hoja de estilos
(13:30:54) aarkerio: las hojas de estilos van en el dir app/webroot/css/
(13:31:17) aarkerio: hay que colocar ahi:
(13:31:18) aarkerio: http://www.mononeurona.org/scripts/cake/admin.css
(13:32:00) aarkerio: ahora si ya podemos ver el resultado de pnernos en localhost:3000/admin/entries/add/
(13:32:00) aarkerio: debe ver un formulario
(13:32:23) aarkerio: la vista admin_add.ctp es un formulario
(13:32:57) alimon [n=jircii@189.153.245.22] ha entrado en la sala.
(13:33:34) aarkerio: noten que en le método admin_add del controlador hay un:
(13:33:35) aarkerio: if ( !empty($this->data['Entry']) ):
(13:33:47) aarkerio: es decir que no hay valores del formulario
(13:34:00) aarkerio: y por lo tanto se debe armar los datos para el select con:
(13:34:08) aarkerio: $this->set('themes', Set::combine($this->Entry->Theme->find('all', array('order' => 'theme')), "{n}.Theme.id","{n}.Theme.theme"));
(13:34:22) monouser80444 [n=monouser@189.153.245.22] ha entrado en la sala.
(13:34:26) aarkerio: Noten qne hacemos una consulta anidada: $this->Entry->Theme->find(
(13:34:41) monouser80444 ha salido de la sala (quit: Client Quit).
(13:34:42) aarkerio: podemos hacerlo porque el modelo Entry posee una relación con el modelo Theme
(13:35:29) aarkerio: es decir que en la vista debemos recibir una array $themes
(13:35:46) aarkerio: que esl que usamos en echo $form->select('Entry.theme_id', $themes, null, null, false)
(13:35:59) aarkerio: todo claro hasta aqui?
(13:36:43) ramanugan: yes, sr
(13:37:10) Fulano: si continua
(13:38:29) aarkerio: si llenamos y enviamos el formulario volevemos al método admin_add pero ahora si entramos a la zona :
(13:38:31) aarkerio: $this->Sanitize = new Sanitize;
(13:38:31) aarkerio:
(13:38:31) aarkerio: $this->Sanitize->paranoid($this->data['Entry']['title']);
(13:38:31) aarkerio:
(13:38:32) aarkerio: $this->Sanitize->html($this->data['Entry']['body']);
(13:38:42) aarkerio: que limpia el array
(13:39:10) aarkerio: en la vida real aqui tendriamos que tener algo asi como :
(13:39:32) aarkerio: $this->data['Entry']['user_id'] = $this->Auth->user('id');
(13:39:54) aarkerio: para saber que usuario está agregando la entrada
(13:40:17) aarkerio: recuerden que si queremos saber que es lo que hay en el array podemos verlos asi:
(13:40:29) aarkerio: die(debug($this->data));
(13:40:52) aarkerio: Cakephp posee un componente llamado Security
(13:41:19) aarkerio: que hace más seguros los formularios pues crea randoms en las vistas y los verifica en el admin_add
(13:41:44) aarkerio: luego tenemos la parte del código:
(13:41:45) aarkerio: $this->Entry->create();
(13:41:46) aarkerio:
(13:41:46) aarkerio: if ($this->Entry->save($this->data["Entry"])):
(13:41:46) aarkerio: $this->flash('Story has been added', '/admin/entries/listing');
(13:41:46) aarkerio: endif;
(13:42:04) aarkerio: $this->Entry->create(); prepara el modelo para la inserción
(13:42:32) aarkerio: $this->flash('Story has been added', '/admin/entries/listing'); pone un mensaje en la pantalla con un link
(13:42:59) aarkerio: vale la pena hacer notar que este flash() si el debug es 0
(13:43:26) aarkerio: redirecciona autoamtiocamente ala página señalada, pero si el debug es mayor a 0 no lo hace
(13:44:44) aarkerio: como supondrán necesitamos la vista:
(13:44:44) aarkerio: http://www.mononeurona.org/scripts/cake/admin_listing.ctp.txt
(13:45:07) aarkerio: esta vista despliega las entradas de nuestro blog
(13:45:43) aarkerio: usamos el helper : $html->tableHeaders(
(13:46:09) aarkerio: y luego html->tableCells($tr,
(13:46:29) aarkerio: para evitarnos lo de los <td> <tr> y todo eso
(13:47:12) aarkerio: en la celda se crean links: $html->link('Edit', '/admin/entries/edit/'.$val['Entry']['id']
(13:47:44) alimon: ok
(13:47:54) aarkerio: necesitamos la vista:
(13:47:56) aarkerio: http://www.mononeurona.org/scripts/cake/admin_edit.ctp.txt
(13:48:13) aarkerio: que es casi igual a admin_add.ctp pero tiene un
(13:48:20) aarkerio: echo $form->hidden('Entry.id');
(13:48:36) aarkerio: en el método public function admin_edit($entry_id = null) del controlador
(13:48:44) aarkerio: $this->data = $this->Entry->read(null, $entry_id); // charge data for edit
(13:49:00) aarkerio: es el que carga los datos en el formulario de edición
(13:49:44) aarkerio: por favor remuevan $this->data['Entry']['user_id'] = 1; del método admin_edit
(13:50:00) aarkerio: se me paso: no tiene nada que hacer ahí
(13:50:08) ramanugan: regreso
(13:50:20) Fulano: jajaja
(13:50:45) ramanugan: voy por una chela... gustan ??
(13:51:01) ramanugan ha salido de la sala (quit: "Leaving.").
(13:51:51) aarkerio: han podido insertar los registros?
(13:53:27) aarkerio: en nuestro controller sólo nos falta el método para borrar registros:
(13:53:29) aarkerio: public function admin_delete($id)
(13:53:29) aarkerio: {
(13:53:29) aarkerio: if ( $this->Entry->del($id)):
(13:53:29) aarkerio: $this->flash('The entry has been deleted.', '/admin/entries/listing');
(13:53:29) aarkerio: endif;
(13:53:30) aarkerio: }
(13:53:32) ramanugan [n=areyes@132.247.33.204] ha entrado en la sala.
(13:53:33) modo (+v ramanugan ) por ChanServ
(13:53:37) aarkerio: public function admin_delete($id)
(13:53:37) aarkerio: {
(13:53:38) aarkerio: if ( $this->Entry->del($id)):
(13:53:40) aarkerio: $this->flash('The entry has been deleted.', '/admin/entries/listing');
(13:53:42) aarkerio: endif;
(13:53:44) aarkerio: }
(13:53:57) aarkerio: no necesitamos vista para el delete
(13:54:54) aarkerio: todos ya tienen registros en su modelo Entry?
(13:55:14) aarkerio: alguno se atoró o hay dudas?
(13:55:39) ramanugan: nop... hasta el momento voy bien
(13:55:41) doclinux: sip me atore un poco y voy atrasado, pero ahi voy
(13:56:46) aarkerio: algo importante que mencionar encuanto a los modelos es que hay que evitar hacer relaciones bidireccionales
(13:57:00) monouser649206 [n=monouser@190.56.140.14] ha entrado en la sala.
(13:57:12) aarkerio: es decir si ya definimos que Entry hasMany Comment
(13:57:43) aarkerio: no hay que poner belongsTo = Entry en el modelo Comment
(13:58:08) ramanugan: ha-aa Dios por que ??
(13:58:28) aarkerio: porque sino se hace una recursión y se carga un chingo la memoria y las páginas se hace más lentas
(13:58:52) ramanugan: ok...
(13:58:58) aarkerio: si necesitan ir por datos del model Comment hagnlo através del modelo Entry:
(13:59:14) aarkerio: $Entry->Comment->findAll()
(14:00:48) aarkerio: para los que ya tienen datos en Entry ahora si vamos por nuestro layout para el blog:
(14:00:49) aarkerio: http://www.mononeurona.org/scripts/cake/blog.ctp.txt
(14:01:50) aarkerio: para este layout necesitarán las hoja de estilo:
(14:01:52) aarkerio: http://www.mononeurona.org/scripts/cake/estilos.css
(14:03:17) aarkerio: descomenten $this->layout del método display() y ya podrán ver su estilo
(14:03:35) aarkerio: también podrán ver la lista de entradas de su blog
(14:04:13) aarkerio: pausa de cinco minutos para ir por café
(14:04:32) Fulano: ok
(14:04:37) Fulano: por que ya me hablaron y me perdi
(14:05:11) Fulano: quien va al corriente?
(14:05:42) alimon ha salido de la sala (quit: "alimon has no reason").
(14:06:00) monouser649206 ha salido de la sala (quit: "Ahi se ven!").
(14:09:46) ramanugan: yo voy al corriente
(14:10:14) Fulano: y los demas?
(14:10:35) ramanugan: buena pregunta
(14:10:46) Fulano: yo me atraze y me perdi :(
(14:11:07) Fulano: todo por que me vinieron a preguntar de una impresora :'(
(14:11:10) ramanugan: no os apureis... el log lo van a publicar
(14:11:20) ramanugan: eso creo
(14:11:54) Fulano: si si lo haran
(14:12:01) Fulano: de donde eres?
(14:13:09) ramanugan: de mexico
(14:13:11) ramanugan: y tu ?
(14:13:37) Fulano: oax, mexico
(14:14:39) aarkerio: bueno ya sólo nos falta ver lo del logeo
(14:14:52) ramanugan: yuju ''''
(14:14:56) monouser611312 ha salido de la sala (quit: "Ahi se ven!").
(14:15:06) aarkerio: vamos a ver un archivo que es app/app_controller.php
(14:15:50) aarkerio: este archivo sirve para definir métodos y atributos que deseamos en TODOS los controladores
(14:16:56) aarkerio: entonces en este archivo vamos a usar y configurar el componente Auth
(14:17:07) aarkerio: que es el que define qué usuarios pueden ver qué metodos
(14:17:14) aarkerio: vamos por el archivo:
(14:17:15) aarkerio: http://trac.mononeurona.org/karamelo/browser/trunk/app/app_controller.php
(14:17:30) aarkerio: hasta bajo hay un link "Plain Text"
(14:17:42) aarkerio: que lo abre en gedit y lo guardamos en app/
(14:18:24) aarkerio: en est archivo tenemos unh método public function beforeFilter() que es esepcial en los controladores de Cake
(14:18:54) aarkerio: este métod se ejecuta ANTES que cualquier otro, antesd que display() o admin_add() o admin_listing
(14:19:16) aarkerio: en este archivo cargamos los componentes que queremos en toda la aplicación
(14:19:24) aarkerio: public $components = array('Auth', 'Cookie', 'Session');
(14:19:47) aarkerio: y ya no tenemos que ponerlos en cada controlador, lo mismo con los helpers
(14:19:54) aarkerio: public $helpers = array('Html', 'Form', 'Session');
(14:20:26) aarkerio: antes de continuar con Auth se me olvidaba algo
(14:20:44) aarkerio: en el archivo app/config/routes.php
(14:21:14) aarkerio: se define el controaldor/método que son el "home" de la aplicación
(14:21:40) aarkerio: en este archivo tienen:
(14:21:42) aarkerio: Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
(14:22:33) aarkerio: pero ahora que tenemos "entries/display" y ese debería ser el home de nuestro blog
(14:22:41) aarkerio: entonces cambiamos esa linea por
(14:22:54) aarkerio: Router::connect('/', array('controller' => 'entries', 'action' => 'display'));
(14:23:24) aarkerio: y ya entonces httpo://localhost:3000 muestra las entradas de nuestro blog
(14:23:37) aarkerio: se entiende?
(14:24:26) ramanugan: perfecto !!
(14:24:42) aarkerio: bueno volvamos a Auth y app_controller.php
(14:25:05) aarkerio: como deciamos beforeFilter define a Auth, veamos la configuración:
(14:25:08) aarkerio: $this->Auth->fields = array('username' => 'email', 'password' => 'pwd');
(14:25:21) aarkerio: define que campos de la base de datos son el login/password
(14:25:30) aarkerio: en este caso el email y el pwd
(14:25:42) aarkerio: $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
(14:26:06) aarkerio: donde redirecciona luego del login exitoso, en nuestroi caso debería ser:
(14:26:35) aarkerio: no, no, ese está bien
(14:26:54) aarkerio: ahorita creamos la vista login.ctp para el logeo
(14:27:03) aarkerio: luego tenemos :
(14:27:04) aarkerio: $this->Auth->loginRedirect = array('controller' => 'news', 'action' => 'display');
(14:27:12) aarkerio: nuestro caso:
(14:27:21) aarkerio: $this->Auth->loginRedirect = array('controller' => 'entries', 'action' => 'display');
(14:27:54) aarkerio: tenemos $this->Auth->deny('*'); es decir que TODOS los métodos están prohibidos por default
(14:28:13) aarkerio: la indicación $this->Auth->authorize = 'controller';
(14:29:16) aarkerio: señalla que cada controlador definirá sus permisos con el método beforeFilter() y con isAuthorized()
(14:30:38) aarkerio: vamos a necesitar el users_controller.php :
(14:30:39) aarkerio: http://www.mononeurona.org/scripts/cake/users_controller.php.txt
(14:32:29) Fulano ha salido de la sala (quit: "Ahi se ven!").
(14:32:30) aarkerio: una vez definido el Auth component en app_controller.php si queremos ver /entries/display veremos que Cake ya no nos deja
(14:32:53) aarkerio: y nos envia a /users/login
(14:33:29) aarkerio: necesitamos agregar un método al controlador entries_controller.php
(14:33:31) aarkerio: public function beforeFilter()
(14:33:31) aarkerio: {
(14:33:31) aarkerio: parent::beforeFilter();
(14:33:31) aarkerio: $this->Auth->allow(array('display','view'));
(14:33:31) aarkerio: }
(14:34:12) aarkerio: esté método beforeFilter en el controlador define que los métoso display y view pueden ser ejecutados por cualquiera
(14:36:09) aarkerio: necesitamos crear el directorio app/view/users
(14:36:15) aarkerio: y ahi colocar la vista:
(14:36:17) aarkerio: http://www.mononeurona.org/scripts/cake/login.ctp.txt
(14:37:53) aarkerio: si movieron el Salt no podrán logearse, coloquen el debug en 2, vean la comparación de strings y actualizen su base de datos con ese valor:
(14:38:34) aarkerio: UPDATE users SET pwd='la_cadena_hash_aqui';
(14:38:41) aarkerio: se entiende ?
(14:40:20) aarkerio: es decir la cadena que tienen en pwd de la tabla users ya no tendrá el mismo hash
(14:40:34) aarkerio: se pudo?
(14:50:06) ramanugan: si... y los demas ?
(14:50:18) ramanugan: si se pudo..!
(14:50:21) ramanugan: y los demas ?????
(14:52:37) doclinux: yo me quede atrasado y ya no pude seguir, voy a revisar el log y les platico que tal me fue :-(
(14:52:57) aarkerio: creo que ya sólo quedamos tu y yo ramanugan , estás desarrolland algo en Cake en tu chamba?
(14:53:38) ramanugan: si he hecho varias cosas
(14:53:49) ramanugan: pero siempre he usado la version estable
(14:54:08) ramanugan: jejejeje
(14:54:43) doclinux: pues yo estoy tratando de crear un simple CRUD para control de documentos pero me pierdo con los singulares y plurales
<