tag:blogger.com,1999:blog-77846209113355457552024-02-07T06:39:05.055-08:00Programacion WebEstefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.comBlogger24125tag:blogger.com,1999:blog-7784620911335545755.post-61379761685715152152010-11-16T06:09:00.000-08:002010-11-16T06:28:10.318-08:00Proyecto Final Programación WebEsta es la entrada en la que se mostrara el proyecto final el cual consiste en realizar una aplicacion de google o una aplicación de facebook.En nuestro caso escogimos la aplicación de facebook.<div style="text-align: center;"><br /></div><div><div class="MsoNormal"><div><span class="Apple-style-span"><span class="Apple-style-span" style="line-height: 20px; font-size: small; "><span class="Apple-style-span" style="line-height: 18px; font-size: 13px; "><div><span class="apple-style-span"><span style="font-size: 13.5pt; line-height: 20px; "><span style="font-size: small; "><span class="Apple-style-span">ENLACE DIRECTO A APLICACION:</span></span></span></span></div><div style="font-family: inherit; color: rgb(255, 255, 255); "><span style="font-size: large; "><i><b><a href="http://apps.facebook.com/alarmafinal/" style="text-decoration: none; color: rgb(136, 136, 136); "><span class="Apple-style-span" style="color: black; ">http://apps.facebook.com/alarmafinal/</span></a></b></i></span></div><span class="Apple-style-span">(para que funcione es necesario estar en tu cuenta de facebook)</span></span></span></span></div><div style="font-family: inherit; color: rgb(255, 255, 255); line-height: 18px; font-size: 13px; "><span style="font-size: large; "><i><b><br /></b></i></span></div><div><span><span class="Apple-style-span"><div class="MsoNormal" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; font-style: normal; font-weight: normal; line-height: 18px; "><b><span class="Apple-style-span">NOMBRE</span></b><span class="Apple-style-span">: Alarma con Reloj</span></div><div class="MsoNormal" style="text-align: center; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; font-style: normal; font-weight: normal; line-height: 18px; "><span class="Apple-style-span"><br /></span></div><div class="MsoNormal" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; font-style: normal; font-weight: normal; line-height: 18px; "><b><span class="Apple-style-span">OBJETIVO:</span></b><span class="Apple-style-span"> Una aplicación sencilla pero muy útil para los que adictos al facebook que por pasar tanto tiempo ahí pierden la noción del tiempo, una alarma te recordaría eventos importantes a realizar a una hora especifica.</span></div><div class="MsoNormal"><span class="Apple-style-span"><br /><div style="text-align: center;"><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: 13px; line-height: 18px;"><br /></span></span></div></span></div><div class="MsoNormal" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; font-style: normal; font-weight: normal; line-height: 18px; "><b><span class="Apple-style-span">DESARROLLO DE APLICACIÓN</span></b><span class="Apple-style-span">: Lo primero que tuvimos que hacer es seguir los pasos del tutorial que se encuentra en este blogposteriormente tuvimos que registrarnos<a href="http://www.byethost.com/free-hosting/news" style="text-decoration: none; "><i><b> aquí link</b></i></a> para que podamos acceder a nuestro</span></div><div class="MsoNormal" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; font-style: normal; font-weight: normal; line-height: 18px; "><span class="Apple-style-span"> servidor lugar donde crearemos 2 subdominios uno para subir todos los archivos php que son necesarios para que nuestra aplicación de facebook pueda funcionar, además que agregamos un índex con el siguiente código.</span></div></span></span></div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; line-height: 18px; font-size: 13px; "><span class="Apple-style-span">(para que funcione es necesario estar en tu cuenta de facebook</span></span><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; line-height: 18px; font-size: 13px; ">)</span></div><div class="MsoNormal"><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; line-height: 18px; font-size: 13px; "><br /></span></div><div class="MsoNormal"><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; line-height: 18px; font-size: 13px; "><br /></span></div><div class="MsoNormal"><span class="Apple-style-span"><span class="Apple-style-span"><span class="Apple-style-span" style="margin-right: auto; margin-left: auto; font-size: 13px; line-height: 18px;"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKfOZ1dqfhV4XSWsxEnpmrJ-OfFt7px0TS443kg68gOfrO1uJF2IFKD7DGgSn-mtQXVMaJ6a_e2AZQKjvcgkiVOZ71UbuPftwHVQKhRLKX9oXfs-cBpW_Q1SmVaZymAOC4R_r70TIKeitB/s200/2.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 163px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5540152636278680834" /></span></span><div style="text-align: center;"><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: 13px; line-height: 18px;"><br /></span></span></div></span></div><div class="MsoNormal"><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: 13px; line-height: 18px; "><span class="Apple-style-span"><br /></span></span></span></div><div class="MsoNormal"><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: 13px; line-height: 18px; "><div class="MsoNormal"><span class="Apple-style-span">donde lo siguiente lo modificamos como ya fue mencionado en el tutorial con los datos que nos da al crear la aplicación </span></div><div class="MsoNormal"><span class="Apple-style-span"><o:p></o:p></span></div><div class="MsoNormal"><span class="Apple-style-span">$appapikey = '111061448960918';<o:p></o:p></span></div><div class="MsoNormal"><span class="Apple-style-span">$appsecret = '7ab20877a65173d6087bc24904e8a984';</span></div></span></span><div class="MsoNormal"><br /></div><div class="MsoNormal"><br /></div><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW9gaXU-DDO4OkIrZsthberzP7N4crmUBpJD6EAPYS_a4Sn8ZpBOtScTo0lhCd3KS8vnOSBuVzOvxSoqVPSl-XcxkJfDK4AN97v2Ne9D80tRL9CxiBCi80BaK_hwHlXm1DzvPRxh4sifWU/s200/1.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 114px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5540151749494528882" /></div><div class="MsoNormal"><span class="Apple-style-span"><span class="Apple-style-span"><div class="MsoNormal" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px; "><span class="Apple-style-span">posteriormente en el otro subdominio se sube la aplicación que en nuestro caso es un reloj flash, y modificamos el índex para que podamos direccionar nuestro índex a ese subdominio y agregamos al final el nombre de la aplicación junto con la extensión ya solo es cuestión de ir a la dirección url de nuestra aplicació</span></div><div class="MsoNormal" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px; "><span class="Apple-style-span">n para que podamos ver los cambios y se vea la aplicación flash directamente en nuestro facebook.</span></div><br /><b><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: 13px; line-height: 18px;">TIEMPO DE EJECUCIÓN:</span></span></b></span></span></div><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkFTWDrQM7Tz4uNNfwohxerTVooNz5Nr5Du-_FIHiFAmzpYLNdhM-2YwsBQApuDYqoeEE4QxMK7x2_HKi64Mop7lRgRtgku6JQf3_QCaNUdgP8hAaYokRBbESthwOgO8Fz-0GYfPB4X4In/s200/3.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 68px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5540153556987928130" /><div class="MsoNormal"><span class="Apple-style-span"><span class="Apple-style-span"><b><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: 13px; line-height: 18px; "><span class="Apple-style-span"><br /></span></span></span></b></span></span></div><div class="MsoNormal"><span class="Apple-style-span"><span class="Apple-style-span"><b><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: 13px; line-height: 18px; "><span class="Apple-style-span" style="font-weight: normal; "><div class="MsoNormal" style="text-align: left; "><span class="Apple-style-span">Como se ve esta aplicación es una alarma , se selecciona la hora los minutos y los segundos en que desees que suene y manda una señal de sonido típico de las alarmas comunes. </span></div><div><br /></div></span></span></span></b></span></span></div><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHZQ8Bky2zIDkk3hu9mPMJ2XjUK345cNZng1xDU45Pjc59Lo4CDaZRlmZeajnMEGWywfU0tGtxXYlurpaeaaNjne_N3cwN8mhVCCakwV1SYMyTQh_8B3raqo4ybZhFuYW8yT70XkQJgqmv/s200/4.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 104px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5540153043116918018" /><div class="MsoNormal"><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: 13px; line-height: 18px;"><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; "><b><span class="Apple-style-span"><br /></span></b></span></span></span></div><div class="MsoNormal"><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: 13px; line-height: 18px;"><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; "><b><span class="Apple-style-span" style="font-weight: normal; "><span class="Apple-style-span">Cuenta con 3 tipos de sonido de alarma asi como horas, minutos y segundos de uso facil y comodo para cualquier usuario que requiera usarla:</span></span></b></span></span></span></div><div class="MsoNormal"><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: 13px; line-height: 18px;"><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; "><span class="Apple-style-span"><b><br /></b></span></span></span></span></div><div class="MsoNormal"><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: 13px; line-height: 18px;"><br /></span></span></div><div class="MsoNormal"><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: 13px; line-height: 18px;"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2W73o8mRMCKaTjMcccBkyWExUVCMY6aQTKgVdAlrTB90u2NB_dGXhJLSsAxfD02Mmord8gcKMxv3uSLD1vhUibADFM7z-Q2BM_UuChV3_juD5OEeT0c5ZZ9SBqJ9yIxvS_ibS7PvZNSIN/s200/6.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 96px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5540153942928646530" /></span></span></div><div style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; line-height: 18px; font-size: 13px; "><span class="Apple-style-span" style="line-height: 20px; font-size: 15px; "><div class="MsoNormal" style="text-align: left; color: rgb(255, 255, 255); "><b>INTEGRANTES:</b></div><div class="MsoNormal" style="text-align: center; "><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; "><b><span style="font-family: 'Times New Roman', serif; font-size: 13.5pt; "><span class="Apple-style-span" > <span class="Apple-style-span" style="font-size: medium; "> 1455422 </span></span></span></b><b><span style="font-family: 'Times New Roman', serif; "><span class="Apple-style-span" style="font-size: medium; "><span class="Apple-style-span" >Daniel Iván Martínez Covarrubias.</span></span></span></b></span></div><div class="MsoNormal" style="text-align: center; "><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; "><b><span style="font-family: 'Times New Roman', serif; "><span class="Apple-style-span" ><span class="Apple-style-span" style="font-size: medium; "></span></span></span></b></span><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; "><b><span style="font-family: 'Times New Roman', serif; "><span class="Apple-style-span" style="font-size: medium; "><span class="Apple-style-span" >1535320 Mario Salinas Lopez.</span></span></span></b></span></div><div style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px; "><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; text-align: center; "><b><span style="font-family: 'Times New Roman', serif; "><span class="Apple-style-span" style="font-size: medium; "><span class="Apple-style-span" > 1535212 Roberto Valenzuela Padilla.</span></span></span></b></div><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; text-align: center; "><b><span style="font-family: 'Times New Roman', serif; "><span class="Apple-style-span" ><span class="Apple-style-span" style="font-size: medium; "></span></span></span></b><b><span style="font-family: 'Times New Roman', serif; "><span class="Apple-style-span" style="font-size: medium; "><span class="Apple-style-span" > 1463939 Hazael Ugarte Rubio</span></span></span></b></div><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; text-align: center; "><b><span style="font-family: 'Times New Roman', serif; "><span class="Apple-style-span" style="font-size: medium; "><span class="Apple-style-span" > 1447941 Laura Estefania Fierro Galvez </span></span></span></b><span style="font-family: 'Times New Roman', serif; font-size: 13.5pt; color: rgb(255, 255, 255); "><span class="Apple-style-span" style="color: red; "><o:p></o:p></span></span></div><div style="color: rgb(255, 255, 255); "><b><span style="font-family: 'Times New Roman', serif; "><span class="Apple-style-span" style="font-size: medium; "><span class="Apple-style-span" style="color: red; "><br /></span></span></span></b></div></div></span></div></div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px; "><div class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; text-align: left; "><span class="Apple-style-span" style="font-family: 'Times New Roman', serif; "><span class="Apple-style-span" style="font-size: medium; "><b><span class="Apple-style-span" >Favor de dejar comentarios al respecto, gracias y saludos.</span></b></span></span></div><div><b><span style="font-family: 'Times New Roman', serif; font-size: 13.5pt; "><span class="Apple-style-span" ><br /></span></span></b></div><div><b><span style="font-family: 'Times New Roman', serif; font-size: 13.5pt; "><span class="Apple-style-span" >Pueden descargar la carpeta con todos los archivos <a href="http://www.megaupload.com/?d=JK93M1ON" style="text-decoration: none; ">aqui</a> (estan en .tar.gz)</span></span></b></div></span><div style="text-align: center;"><br /></div><br /><br /><br /><div style="text-align: center;"><br /></div><div style="text-align: center;"><br /></div><div style="text-align: center;"><br /></div><div style="text-align: center;"><br /></div>Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com0tag:blogger.com,1999:blog-7784620911335545755.post-72376099087286570652010-11-11T06:51:00.000-08:002010-11-11T07:17:11.442-08:00Como Crear una Aplicacion FacebookEspero les sirva para su proyecto(:<br />Suerte(:<br /><br /><p>Crear una aplicación de Facebook<span style="text-decoration: underline;"><span style="font-style: italic;"><span style="font-weight: bold;"> </span></span></span><a href="http://www.facebook.com/" class="external external_icon"><em><strong></strong></em></a>por primera vez puede suponer un buen dolor de cabeza, aunque la plataforma tiene muchos tutoriales no son todo lo detallados que deberían en muchos casos o en otros están en inglés o en español mal traducido. A continuación voy a contar paso a paso como crear nuestra primera aplicación de prueba para <em><strong>Fac</strong></em><em><strong>ebook</strong></em> en un entorno PHP <a href="http://www.php.net/" class="external external_icon"><em><strong></strong></em></a>.</p><p>Cómo requisitos imprescindibles para comprender este tutorial debes tener un nivel medio de desarrollo con <em><strong>PHP</strong></em>, un servidor web apache que soporte <em><strong>PHP5</strong></em>, tener mucha experiencia como usuario de aplicaciones <em><strong>Facebook</strong></em> y mucha, mucha paciencia <img src="http://www.faceblog.es/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p><p>Pasos</p><p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOHveOq9w5RbAlm8u42WoZbOOSD-8mn9Rm5kXaDUDs_5ES_8CJh_2T72SwGztuq850770SmfqwFp88bgcCOTGt0Yy7oF4ooT70tfwNa-Li5bPTvEF8VGo98FDYFHzyuQJZ8l0_RSchKquP/s1600/1.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 43px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOHveOq9w5RbAlm8u42WoZbOOSD-8mn9Rm5kXaDUDs_5ES_8CJh_2T72SwGztuq850770SmfqwFp88bgcCOTGt0Yy7oF4ooT70tfwNa-Li5bPTvEF8VGo98FDYFHzyuQJZ8l0_RSchKquP/s200/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5538305508982354658" border="0" /></a></p> <p>1. Accede a Facebook con tu usuario y tu clave.<br />2. Ve a la url <em><strong><a href="http://www.facebook.com/developers" class="external external_icon">http://www.facebook.com/developers</a></strong></em>. Se te solicitará permiso para aceptar esta aplicación.<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs14v1NILd1_99WT2YY4EAr_M7Q2f60E2tpMN18xpwxqQiKIBMJVkr2cpGrg4Q3QWstsD5mXUjvV7452Nl7g14ICaUOG-8RJq8TWjTxzH3BeWhz8xji3GbvIzCGqti0IrWn-rt5ly5kv-S/s1600/2.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 81px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs14v1NILd1_99WT2YY4EAr_M7Q2f60E2tpMN18xpwxqQiKIBMJVkr2cpGrg4Q3QWstsD5mXUjvV7452Nl7g14ICaUOG-8RJq8TWjTxzH3BeWhz8xji3GbvIzCGqti0IrWn-rt5ly5kv-S/s200/2.jpg" alt="" id="BLOGGER_PHOTO_ID_5538305739684718610" border="0" /></a></p><p>3. A continuación entraremos en una página que nos dará la opción de crear una nueva aplicación y de descargarnos las librerías PHP necesarias para nuestro servidor.<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYz8PQH2IyPzx6xYPFU_p8HohB7-fI-rlvcslMmAQ4UzA1KFSaTrIkITqqL1wS-ywCfDrV6TZOx4Xjl_934_EO9LuF40eHTDL7wvdhnL0rzm8ZnL7fpDBMoMZOKo94TQENbhVAo8NBguUd/s1600/3.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 158px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYz8PQH2IyPzx6xYPFU_p8HohB7-fI-rlvcslMmAQ4UzA1KFSaTrIkITqqL1wS-ywCfDrV6TZOx4Xjl_934_EO9LuF40eHTDL7wvdhnL0rzm8ZnL7fpDBMoMZOKo94TQENbhVAo8NBguUd/s200/3.jpg" alt="" id="BLOGGER_PHOTO_ID_5538306091537953474" border="0" /></a></p><p>4. Descargamos en primer lugar las librerías PHP, incluyen una aplicación de ejemplo.</p><p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxYeCdvB0qUpS2ZKtHa_-N-2HctlqOmNMEk4f3_1vb38WjqOTc9q1r2P8w15LtYGhcNc3ipmHiH16rJEXE_i_RE5k5Q5RA071u2JyI2ubQO2-YuqvOq2X_74qwj7A2CfC7FNSMCXDjkaNV/s1600/4.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 158px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxYeCdvB0qUpS2ZKtHa_-N-2HctlqOmNMEk4f3_1vb38WjqOTc9q1r2P8w15LtYGhcNc3ipmHiH16rJEXE_i_RE5k5Q5RA071u2JyI2ubQO2-YuqvOq2X_74qwj7A2CfC7FNSMCXDjkaNV/s200/4.jpg" alt="" id="BLOGGER_PHOTO_ID_5538306347798969522" border="0" /></a></p><p>5. Ahora hay que instalar las librerías en nuestro servidor subiéndolas mediante FTP, recuerda que son librerías para PHP5 por lo que nuestro servidor debe soportar este lenguaje. Hay servidores que aungue soportan PHP5 tienes por defecto activado PHP$, puedes activar PHP5</p><p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpvMPGTY1I9tvEAPPrmxVAjg2fDTHhoMqyMyBm3lNmDFlvPBSHGA-G7DByDc6i7NpyH9BOzGt5SQWjpKaYVn90ZsKFBUZZ0FZ4CgoDH10y2lRYaSutQaGHxwrJg8Jvn1tzx-FkLrX_NUfw/s1600/5.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 72px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpvMPGTY1I9tvEAPPrmxVAjg2fDTHhoMqyMyBm3lNmDFlvPBSHGA-G7DByDc6i7NpyH9BOzGt5SQWjpKaYVn90ZsKFBUZZ0FZ4CgoDH10y2lRYaSutQaGHxwrJg8Jvn1tzx-FkLrX_NUfw/s200/5.jpg" alt="" id="BLOGGER_PHOTO_ID_5538307281621799490" border="0" /></a>6. Una vez subimos hemos subido las librerías y la aplicación de pruebas a nuestro servidor tenemos que volver a <em><strong>Facebook</strong></em> y hacer click sobre “Configurar una nueva aplicación” o “crear una”.</p><p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEher9W4EsmFvCHbiAzyol4MhoS0s-Dc_ue5W38dmTsrOfqx6K2ERNPvi845Lhym63YKNeTWO8lA6re98DNblLHWGz0O-3Kxt75TF1HgdY1hyphenhyphen3BV8QSJKQqjqvqfVa-fUz-UTH3y4GsZwzHZ/s1600/6.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 158px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEher9W4EsmFvCHbiAzyol4MhoS0s-Dc_ue5W38dmTsrOfqx6K2ERNPvi845Lhym63YKNeTWO8lA6re98DNblLHWGz0O-3Kxt75TF1HgdY1hyphenhyphen3BV8QSJKQqjqvqfVa-fUz-UTH3y4GsZwzHZ/s200/6.jpg" alt="" id="BLOGGER_PHOTO_ID_5538307509855338274" border="0" /></a>7. A continuación se nos pide que demos nombre a la aplicación y que aceptemos las condiciones de servicio. Puedes poner el nombre que quieras, aunque sea similar a una aplicación ya existente.</p><p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvlG7LYcLpL4oKhGkoDOGz0YJ0h2TglEBWsGkCNV25uNVQVejENDfuwvNdqQxLAaX40V7aJT63lUf247_kebKMC9z3oBCadyd9PAI458C3mbPdkPd3H0A0yPZc5UwrQqeyEZKO5U3zIWoH/s1600/7.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 78px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvlG7LYcLpL4oKhGkoDOGz0YJ0h2TglEBWsGkCNV25uNVQVejENDfuwvNdqQxLAaX40V7aJT63lUf247_kebKMC9z3oBCadyd9PAI458C3mbPdkPd3H0A0yPZc5UwrQqeyEZKO5U3zIWoH/s200/7.jpg" alt="" id="BLOGGER_PHOTO_ID_5538307741581977426" border="0" /></a>8. Una vez le hemos dado al botón de “Guardar cambios” nos econtramos con la pantalla de configuración básica de nuestra aplicación. Vamos a destacar en primer lugar de la misma 3 datos que son importantísimos: Aplication ID, Clave API y secreto, debemos tomar nota de estos datos (aunque siempre estarán disponibles sin entramos con nuestro usuario en la página de los desarrolladores).</p><p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-ql4-0Xww7traxzt6eXrG3bA4lDe-SYy5q-mGYu_nw_kYTg20Wqhpv9ZJ8AZDwfWLF1NfK5KIsHhu8JcpU1Hbfjr9hlQKuyZ-TX6CAuAG4U9lBwAls0tBoJqVJfzbQHAZMy83qB7zsGIg/s1600/8.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 54px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-ql4-0Xww7traxzt6eXrG3bA4lDe-SYy5q-mGYu_nw_kYTg20Wqhpv9ZJ8AZDwfWLF1NfK5KIsHhu8JcpU1Hbfjr9hlQKuyZ-TX6CAuAG4U9lBwAls0tBoJqVJfzbQHAZMy83qB7zsGIg/s200/8.jpg" alt="" id="BLOGGER_PHOTO_ID_5538307950122960242" border="0" /></a>9. A continuación se nos pide que introduzcamos los datos de información básica: descripción, icono de la aplicación (el icono pequeñito), logotipo de la aplicación ( el icono grande), el idioma y los desarrolladores (esta parte da lugar a uno de los agujeros más curiosos que tiene Facebook a día de hoy, le dedicaré en su momento un post).</p><p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2fr8j8WFEtqnCsMwscirGFAgtUJ-Zk8BfP9JKG-pGeaDXHDT4DjnEqeRNsuk3m2zJyPUC5hux6ARXNIwKLT64OxunbXXxPmeFkVVhBevVTRpDDFM1eyx6MzMhWN9NfqYcndw-VOQ-TAxH/s1600/9.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 99px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2fr8j8WFEtqnCsMwscirGFAgtUJ-Zk8BfP9JKG-pGeaDXHDT4DjnEqeRNsuk3m2zJyPUC5hux6ARXNIwKLT64OxunbXXxPmeFkVVhBevVTRpDDFM1eyx6MzMhWN9NfqYcndw-VOQ-TAxH/s200/9.jpg" alt="" id="BLOGGER_PHOTO_ID_5538308145334765922" border="0" /></a>10. Nos quedaría confirmar la información del email del desarrollador y las Urls de ayuda, condiciones de uso y privacidad. No hace falta que tengas esas páginas creadas, puedes poner las urls que vayas a crear en el futuro.<br /><em><strong></strong></em></p><p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXTPC9nO6j2gZTngdLlAl-15NVniHvxBhpYlf9ZRzIVC7tPn-nrKJc6rp1RbMmkS7LTLlYpyXcVDXAFFNmLBnIIxF_uBKrB43SMxlh6SkuKUv_OdJnNn9BM4A7GrvDoM0LUGJt6nCPdQxe/s1600/10.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 90px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXTPC9nO6j2gZTngdLlAl-15NVniHvxBhpYlf9ZRzIVC7tPn-nrKJc6rp1RbMmkS7LTLlYpyXcVDXAFFNmLBnIIxF_uBKrB43SMxlh6SkuKUv_OdJnNn9BM4A7GrvDoM0LUGJt6nCPdQxe/s200/10.jpg" alt="" id="BLOGGER_PHOTO_ID_5538309104778422786" border="0" /></a></p>11. Le damos al botón “Guardar cambios” y Facebook nos envía a la página de inicio para desarrolladores de nuestra nueva aplicación. Buscamos el botón de “Editar configuración” y lo pulsamos.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW_nGmzh3KCBZmqOqDKcplmlMHQSBMlSbdC2O9JNg4pjR6Vxmhh62RnKYhDl-QH3K3jGlTKFllzcSthEkjr-0sM02NPFpyEea1VAK1mqeSBL7BNq1FaUodt31vA-3V-SRo0Nk10tMFgpXP/s1600/11.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 180px; height: 200px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW_nGmzh3KCBZmqOqDKcplmlMHQSBMlSbdC2O9JNg4pjR6Vxmhh62RnKYhDl-QH3K3jGlTKFllzcSthEkjr-0sM02NPFpyEea1VAK1mqeSBL7BNq1FaUodt31vA-3V-SRo0Nk10tMFgpXP/s200/11.jpg" alt="" id="BLOGGER_PHOTO_ID_5538310456866460482" border="0" /></a><br />12. Volvemos a la página anterior de creación de la aplicación, pero ahora debemos hacer click en la pestaña “Lienzo”.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj91VkfAxVFdEOXhyphenhyphenhBX0p1L_RYJ9Ezmbr_GbDeI_1RtqnVuO14LA66CzxQfs1jY4JabeZ5PPqKZOrkG88IwcwYRLmg1imgTFqYMI33Ni1TPJlWineS2Hvu3jhunS9pIW8bsKnRFvdxlSQ8/s1600/12.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 107px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj91VkfAxVFdEOXhyphenhyphenhBX0p1L_RYJ9Ezmbr_GbDeI_1RtqnVuO14LA66CzxQfs1jY4JabeZ5PPqKZOrkG88IwcwYRLmg1imgTFqYMI33Ni1TPJlWineS2Hvu3jhunS9pIW8bsKnRFvdxlSQ8/s200/12.jpg" alt="" id="BLOGGER_PHOTO_ID_5538310783504764770" border="0" /></a><br />13. Esta pantalla es importantísima, en ella debemos en primer lugar configurar la url de nuestra aplicación en Facebook.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivy0mBnPGIiaNntIPVxeyaSPfU2c0rj-sj8z5j9J50DulwoJ1wsZcX_Y4Jirgx4llfNFO3ONQ3-JwXNC2xBoJKg21wjFIM85gQFZpcViBXLIbGkeNlZtVUAGVczeqBcJzkXuC412ifbbpf/s1600/13.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 36px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivy0mBnPGIiaNntIPVxeyaSPfU2c0rj-sj8z5j9J50DulwoJ1wsZcX_Y4Jirgx4llfNFO3ONQ3-JwXNC2xBoJKg21wjFIM85gQFZpcViBXLIbGkeNlZtVUAGVczeqBcJzkXuC412ifbbpf/s200/13.jpg" alt="" id="BLOGGER_PHOTO_ID_5538311006237576434" border="0" /></a><br /><br />14. A continuación debemos configurar la url de la aplicación en nuestro servidor PHP (es de aquí de donde Facebook leerá las respuestas de nuestro servidor para publicarlas en su entorno). En concreto en este ejemplo deberemos poner la url de nuestro servidor que nos lleva a la aplicación “footprints” de ejemplo que hemos subido antes por FTP.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVY53fyIW7U_MRn0t6eRR5Mz74MLg4BH2jz0Lq4DcfaZK_5QVwfUkoyeog9nHRWS7l_F36gpo4tkY5Kb3Akwarqi-2R7L68Zu7MsEgHowlAUMJed1kOuJieeeFY8Jo3h901atHh4uWfeeQ/s1600/14.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 36px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVY53fyIW7U_MRn0t6eRR5Mz74MLg4BH2jz0Lq4DcfaZK_5QVwfUkoyeog9nHRWS7l_F36gpo4tkY5Kb3Akwarqi-2R7L68Zu7MsEgHowlAUMJed1kOuJieeeFY8Jo3h901atHh4uWfeeQ/s200/14.jpg" alt="" id="BLOGGER_PHOTO_ID_5538311142364996642" border="0" /></a><br /><br />15. Para este tutorial debemos dejar configurada la aplicación en modo FBML, no en modo Iframe.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYxUeJq8neDBG52G_nYZfkMHvOOhSd1uS1mYNWoTCI175zGMFwZ_-9hXu86Tt53uVpD8BhO7X3NUiXVl8GiUu2-Xfd3gnuYIla9kxUXUFz10xrMaiaWv0q1bYaN3M5YYz6lpLqEvt-Smfc/s1600/15.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 35px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYxUeJq8neDBG52G_nYZfkMHvOOhSd1uS1mYNWoTCI175zGMFwZ_-9hXu86Tt53uVpD8BhO7X3NUiXVl8GiUu2-Xfd3gnuYIla9kxUXUFz10xrMaiaWv0q1bYaN3M5YYz6lpLqEvt-Smfc/s200/15.jpg" alt="" id="BLOGGER_PHOTO_ID_5538311247744168610" border="0" /></a><br />16. Una vez hecho esto guardamos los cambios y nos vamos a nuestro servidor PHP. Dentro de la carpeta footprints hay un fichero llamado config.php, debemos editarlo y darle valor a las variables $api_key con nuestra CLAVE_API y $secret con nuestra clave secreta SECRETO. Esta aplicación de muestra requiere para funcionar interactuar con una base de datos de nuestro servidor así que debes configurar los datos del servidor de base de datos y crear la tabla que pide. Esta parte viene con comentarios PHP.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj774pj-mKjAzv4xv0Z_OhNobsIy1uRp5EFQOMyxqo4CuGX7BV9spKsFCJyMVDhNPXS6F_XR_UP6RjBFua3fCAQddaU3gV5tHcARLWGh2LXcPvCgbUt1r-Dw8RNrOEyvFn4itQWjZKs6J49/s1600/16.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 73px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj774pj-mKjAzv4xv0Z_OhNobsIy1uRp5EFQOMyxqo4CuGX7BV9spKsFCJyMVDhNPXS6F_XR_UP6RjBFua3fCAQddaU3gV5tHcARLWGh2LXcPvCgbUt1r-Dw8RNrOEyvFn4itQWjZKs6J49/s200/16.jpg" alt="" id="BLOGGER_PHOTO_ID_5538311329049267474" border="0" /></a><br />Y ¡Listo!<br />Suertee(:<br /><br /><br /><ol><li value="17">Facebook tiene su aplicación de muestra en esta url: <a href="http://apps.facebook.com/footprints/" class="external external_icon"><em><strong>http://apps.facebook.com/footprints/</strong></em></a></li><li>Ahora sólo nos queda ya compararla con el funcionamiento de la nuestra con nuestra url de facebook, es decir, <em><strong>http://apps.facebook.com/[nombre dado en el paso 13]</strong></em></li></ol> <p><br /></p>Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com3tag:blogger.com,1999:blog-7784620911335545755.post-40601912871589508692010-11-11T06:42:00.000-08:002010-11-11T06:51:09.887-08:00Reporte Proyecto Final<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjox5aSrw3strYXXz89HZxXt9YX6q2w6rJxJW_0RY_hhwMeKIF2_eX-sEdLYwsuw7UjFCIZe_d4XsenidLTH_AtRktUkE2AZdOtU7TteO7UH8iw2g8JQPc607d7pyS2wcf7h-ClkwduG3QA/s1600/google.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 180px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjox5aSrw3strYXXz89HZxXt9YX6q2w6rJxJW_0RY_hhwMeKIF2_eX-sEdLYwsuw7UjFCIZe_d4XsenidLTH_AtRktUkE2AZdOtU7TteO7UH8iw2g8JQPc607d7pyS2wcf7h-ClkwduG3QA/s200/google.jpg" alt="" id="BLOGGER_PHOTO_ID_5538303283738275634" border="0" /></a><br /><span style="color: rgb(0, 0, 0);font-size:180%;" >Google Apps<br /><br /></span><p style="color: rgb(0, 0, 0);"><strong>Google Apps</strong> es uno de los ya variados servicios que el gigante Google nos ofrece. Por supuesto, como la mayoría de sus aplicaciones, completamente gratis; aunque también existe una versión de pago especialmente diseñada para clientes empresariales y grandes organizaciones multinacionales.</p> <p style="color: rgb(0, 0, 0);">Google Apps ofrece herramientas eficaces para la manipulación, gestión y personalización de utilidades para dominios o nombres de Internet. Es decir, Google Apps te permite gestionar el correo electrónico de tu dominio (a través de <em>Gmail</em>), mensajería instantánea entre miembros de tu organización o red (<em>Google Talk</em>), calendario en línea (<em>Google Calendar</em>), edición de Documentos también en línea (<em>Google Docs</em>) y creación de sitios web profesionales (<em>Google Sites</em>).</p><p style="color: rgb(0, 0, 0);">Google Apps ofrece tres planes distintos de servicio, enfocados precisamente a tres principales tipos de clientes. Asímismo, dentro de cada plan se ofrecen diferentes escalas del servicio:</p> <ul style="color: rgb(0, 0, 0);"><li>Empresas y empleados. Estándar (Gratuita) y Premier ( de Pago).</li><li>Centros Docentes y Estudiantes. Estándar (Gratuita), Premier (de Pago) y Educación (Sólo para instituciones estudiantiles sin ánimo de lucro).</li><li>Organizaciones y Miembros. Mismos planes que la Edción de Centros Docentes y Estudiantiles.</li><li><p>Una de las mejoras que se han integrado recientemente a Google Apps, son las novedosas herramientas de Seguridad de Postini, empresa que Google adquirió en el año 2007. Esta tecnología incluye una gestión centralizada de la política de los mensajes salientes y entrantes, así como para los filtros anti-spam; bloqueo de correos electrónicos que intenten enviar o difundir información sensible de tu empresa u organización; así como un novedoso y potente anti-virus web completamente personalizable según el grado de tus necesidades.</p> <p>Algunas ventajas (si, más) de Google Apps:</p> </li><li>Capacidad de hasta 7 GB para correo electrónico, y sigue creciendo (similar a Gmail).</li><li>Interfaz web personalizable.</li><li>POP3 para descargar e-mail hacia Microsoft Outlook, Apple Mail, Thunderbirdo cualquier gestor de correo electrónico.</li><li>A partirde este año, totalmente en español.</li><li>Cuenta catch all, o cuenta que recibe todo el correo perdido enviado a su dominio</li><li>Acceso IMAP para sincronización del correo desde diferentes dispositivos móviles.</li></ul><br /><br /><span style="color: rgb(0, 0, 0);font-size:180%;" >Facebook Apps</span><br /><p style="color: rgb(0, 0, 0);"><span class="intro">Detrás de los tres pilares “integración profunda”, “distribución masiva” y “nuevas oportunidades”, la red social Facebook ofrece una completa API para que los desarrolladores aprovechen al máximo las virtudes inherentes de una red social.</span><span id="more-3703"></span></p> <p style="color: rgb(0, 0, 0);"><a href="http://www.facebook.com/">Facebook</a> logró su popularidad siendo una red social capaz de contener aplicaciones realizadas por terceros, permitiendo así la realización de negocios a partir de la misma. Más allá de las aplicaciones propias que presenta, como es el caso de: “The Wall”.</p> <p style="color: rgb(0, 0, 0);">Suerte de pizarra virtual del usuario donde otros usuarios pueden dejarle mensajes o “Status”, que permite a los usuarios indicar sus actividades o estados de ánimo al resto de la red, Facebook permite la creación de aplicaciones mediante la utilización de web services para el acceso a los datos de la red.</p> <h3 style="color: rgb(0, 0, 0);">Creando aplicaciones en Facebook</h3> <p style="color: rgb(0, 0, 0);">Los recursos disponibles a los desarrolladores se agrupan en 3 categorías:</p> <ul style="color: rgb(0, 0, 0);"><li><strong>API:</strong> es una interfaz basada en <strong>REST </strong>que permite el acceso a los datos del perfil, amigos, fotos y eventos del usuario mediante la utilización de mensajes <strong>GET</strong> o <strong>POST</strong>.</li><li><strong>Consultas (FQL, “Facebook Query Language”)</strong>: es un lenguaje de consultas similar a SQL utilizado para acceder a los mismos datos que la API pero permitiendo consultas más complejas.</li><li><strong>Maquetación (FBML, “Faceboook Markup Language”)</strong>: es un lenguaje de markup similar a <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a> que permite ser intercalado con el HTML a utilizar para integrar las aplicaciones a la experiencia de usuario Facebook. Utilizando FBML se pueden acceder distintos puntos de la red como ser el perfil, acciones del perfil, canvas y feeds. Este lenguaje también incluye soporte para <a href="http://www.maestrosdelweb.com/editorial/ajax/">AJAX</a> y <a href="http://www.maestrosdelweb.com/editorial/%C2%BFque-es-javascript/">Javascript</a>.</li></ul> <h3 style="color: rgb(0, 0, 0);">Anatomía de una aplicación en Facebook</h3> <p style="color: rgb(0, 0, 0);">Una aplicación en Facebook posee una compleja estructura que permite brindar una experiencia de usuario completa:</p> <ul style="color: rgb(0, 0, 0);"><li><strong>Product Directory:</strong> cuando un usuario navega el directorio de aplicaciones de Facebook, por cada aplicación se muestra una pequeña sección con el nombre, una imagen y una pequeña descripción.</li><li><strong>About:</strong> esta página muestra información general de la aplicación. Debe inducir al usuario a instalar la aplicación.</li><li><strong>Left Nav:</strong> es el panel de navegación izquierdo. Las aplicaciones pueden tener su ícono y nombre en este panel.</li><li><strong>Canvas Page:</strong> es la página principal de la aplicación. <strong>Home:</strong> esta página es accedida utilizando el panel de navegación de la izquierda, en general muestra información de los amigos del usuario. <strong>User Dashboard:</strong> es la página donde el usuario administra sus datos en una aplicación y determina de que forma las aplicaciones acceden a sus datos personales.</li><li><strong>Profile:</strong> es la representación online de la identidad del usuario. La API provee múltiples puntos de integración con el perfil del usuario permitiendo actualizar datos del mismo. <strong>Profile Box:</strong> presenta información actualizada sobre las acciones recientes del usuario. <strong>Profile Actions Links:</strong> debajo de la foto del usuario en el perfil, se pueden agregar enlaces para invocar acciones en la aplicación.</li><li><strong>Privacy Settings:</strong> se utiliza para definir los niveles de privacidad de los datos del perfil por aplicación.</li><li><strong>News Feed:</strong> como su nombre lo indica es un “feed” de noticias, allí las aplicaciones pueden “publicar” información del usuario de la misma.</li><li><strong>Alerts:</strong> las aplicaciones pueden enviar notificaciones a los usuarios a través del correo electrónico.</li><li><strong>Message Attachments:</strong> las aplicaciones pueden incluir archivos adjuntos que aparecen en la ventana para componer mensajes.</li><li><strong>Requests:</strong> las aplicaciones pueden crear peticiones que aparecen en la parte superior izquierda de la página principal. En general son iniciados por amigos que solicitan realizar alguna acción.</li></ul>Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com1tag:blogger.com,1999:blog-7784620911335545755.post-34014582543654939322010-11-11T06:29:00.000-08:002010-11-11T06:37:00.048-08:00CGI Common Gateway Interface<span class="intro"></span><br /><p class="Articulos"><strong>PRESENTACIÓN DE LA INTERFAZ</strong></p> <p>CGI (Common Gateway Interface) es una interfaz entre aplicaciones externas y servicios de información.</p> <p>Un documento HTML, es algo estático, permanente, lo que no se adecúa a las necesidades de interactividad, acceso a información en constante actualización, consulta a bases de datos o seguimiento, control o recuperación de resultados de un determinado proceso. Por ello, a veces es necesario acceder a una información que se está generando "en tiempo real". Así pues, es necesario contar con algún tipo de pasarela como la que define CGI.</p> <p>La interfaz define una forma cómoda y simple de ejecutar programas que se encuentran en la máquina en la que se aloja el servidor. Para el cliente presenta una ventaja en el aspecto de la seguridad, ya que no tendrá que ejecutar ningún programa de efectos desconocidos en su sistema local. Además de eliminar la necesidad de aprendizaje, se resuelven los problemas de mantenimiento, operación y distribución de clientes ya que el acceso se realizará a través de cualquier cliente estándar de WWW y la comunicación se realizará según el protocolo HTTP.</p> <p>Será necesario tener en cuenta algunos aspectos sobre seguridad, ya que tener un programa CGI equivale a que "TODO EL MUNDO podrá ejecutar un programa en MI sistema". Esto se solventa incluyendo los programas CGI en un directorio determinado, denominado generalmente cgi-bin, directorio que no suele ser accesible a todos los usuarios. Cuando un servidor de WWW recibe como petición un documento alojado en este directorio, entenderá que se trata de un programa ejecutable.</p> <p>Pero CGI plantea como inconveniente la necesidad de ejecutar programas en el servidor, de los cuales es necesario tener una copia por cliente ya que no permite hacer uso de recursos compartidos y, al tratarse de una pasarela, no es posible disponer de un control directo de la comunicación. Por ello se plantean nuevas alternativas, como el NSAPI de Netscape Corporation y, por supuesto, Java.</p> <p><strong>LENGUAJES DE PROGRAMACIÓN CGI</strong></p> <p>CGI, como la propia palabra indica es una interfaz entre servidores de información y programas de aplicación. Por tanto, define una serie de reglas que deben cumplir tanto las aplicaciones como los servidores para hacer posible la presentación de resultados de programas ejecutables en tiempo real a través de servicios de información estandarizados. Por ello, se habla de gateway o pasarela entre una y otra dimensión. Al tratarse de una interfaz, no existe ningún tipo de dependencia con el lenguaje de programación empleado.</p> <p>En principio, cualquier lenguaje es susceptible de ser utilizado para desarrollar programas CGI, ya sea interpretado o compilado. En "la red" existen aplicaciones CGI desarrolladas en C, C++, Fortran, Perl, Tcl, Visual Basic, AppleScript y cualquier shell de UNIX. Los lenguajes interpretados como sh, tcl y, sobre todo, perl, tienen mayor facilidad de mantenimiento y depuración. Otra ventaja es que, por lo general, suelen ser de más alto nivel, con lo que no permiten realizar ciertas maniobras con la memoria y es más difícil dejar procesos sueltos descontrolados en el sistema. Uno de los lenguajes más utilizados es el Perl que, siendo interpretado, proporciona una potencia similar a la de C con una sintaxis muy parecida.</p> <p>La contrapartida es que un lenguaje compilado es siempre mucho más rápido que uno interpretado. En el caso de CGI la velocidad de ejecución es importante, ya que habrá que sumar el tiempo de ejecución a la latencia de red y a la velocidad de transmisión, tiempos de espera que tendrá que sufrir el usuario del cliente. </p>Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com1tag:blogger.com,1999:blog-7784620911335545755.post-52238493136499721782010-11-11T06:18:00.000-08:002010-11-11T06:28:22.605-08:00Gestores de Bases de datosUn gestor de base de datos o sistema de gesti´on de base de datos (SGBD o<br />DBMS) es un software que permite introducir, organizar y recuperar la informaci<br />´on de las bases de datos; en definitiva, administrarlas. Existen distintos<br />tipos de gestores de bases de datos: relacional, jer´arquico, red, ... El modelo<br />relacional es el utilizado por casi todos los gestores de bases de datos para PC´s.<br />El modelo relacional (SGBDR) es un software que almacena los datos en forma<br />de tablas<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOtxGYbPQMQOjj97S_2r-SJSSKqoTOBNc-3ANFQG3fKJSPEjByeeFFZaQ0DSFnRTCVCmht844zbE2cdnfoD-44L5C_6GPQaOZHxOIPlWe5Pcr9tbWtMA7tFn_lsitzhffvfBuTXoN711DZ/s1600/tablaas.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 114px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOtxGYbPQMQOjj97S_2r-SJSSKqoTOBNc-3ANFQG3fKJSPEjByeeFFZaQ0DSFnRTCVCmht844zbE2cdnfoD-44L5C_6GPQaOZHxOIPlWe5Pcr9tbWtMA7tFn_lsitzhffvfBuTXoN711DZ/s200/tablaas.jpg" alt="" id="BLOGGER_PHOTO_ID_5538296748246271922" border="0" /></a><br />El problema: Sistemas de ficheros<br />Tradicionalmente, los datos se han organizado en ficheros. Un fichero mantiene<br />informacion homogenea, dispuesta en registros. Ej.: Empleados, Clientes, Nominas,<br />etc. Diferentes programas pueden mantener diferentes ficheros referidos a la<br />misma entidad<br />Estos sistemas presentan algunos problemas:<br /><br /><span style="color: rgb(0, 102, 0); font-style: italic;">Redundancia: </span>Normalmente es perjudicial ya que da lugar a inconsistencia,<br />cuando un dato no se actualiza en todos los lugares donde aparece. Es el caso<br />de datos repetidos, que aparecen en varios ficheros, o de datos calculados, que<br />podrıan obtenerse a partir de otros datos.<br /><span style="font-style: italic; color: rgb(0, 102, 0);">Rigidez de busqueda: </span>A cada fichero, segun la manera en que mas frecuentemente<br />se accede a el, se le da una organizacion. Si despues se necesita otro tipo<br />de acceso, puede resultar lento trabajar con el fichero.<br /><span style="font-style: italic; color: rgb(0, 102, 0);">Dependencia de los programas:</span> La informacion de donde comienza un<br />campo, donde acaba, su tipo, etc. esta controlada por el programa; cualquier<br />cambio en la estructura del fichero implicar´a una modificacion de los programas.<br /><span style="font-style: italic; color: rgb(0, 102, 0);">Problemas de confidencialidad y seguridad:</span> La confidencialidad consiste<br />en evitar la consulta de ciertos datos a determinados usuarios mientras<br />que el control de seguridad de los datos almacenados impedira que puedan ser<br />modificados por personas no autorizadas.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQmeymhsOA4-BsiUQ7hWfjdCQhjzGaj_gjHBCz_wW9-CAucMnO3TyBXyFD8ogbckkYRn2kOfuUXdBJB-aUya3FvC-nzatytMkVKdFRDiciKlXLc07DHGmMBcAujktp3c6QILawkePBDwMR/s1600/gestor.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 238px; height: 109px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQmeymhsOA4-BsiUQ7hWfjdCQhjzGaj_gjHBCz_wW9-CAucMnO3TyBXyFD8ogbckkYRn2kOfuUXdBJB-aUya3FvC-nzatytMkVKdFRDiciKlXLc07DHGmMBcAujktp3c6QILawkePBDwMR/s200/gestor.jpg" alt="" id="BLOGGER_PHOTO_ID_5538297635639716834" border="0" /></a><br />La solucion: Bases de datos<br />Es la alternativa que aborda la solucion a estos problemas. Se trata de dar una<br />solucion integral al almacenamiento y gestion de los datos, en lugar de soluciones<br />parciales :<br />• Evitar la redundancia ”gratuita”<br />• Flexibilidad de busqueda<br />• Independencia de los programas<br />• Seguridad y confidencialidad integral<br /><br /><span style="font-weight: bold;">LOS USUARIOS</span><br />Hay tres clases de usuarios:<br />• <span style="font-style: italic; color: rgb(0, 102, 0);">Usuario final:</span> Accede a la base de datos desde su PC empleando un<br />lenguaje de consulta (DML) o a traves de un programa.<br />– Son usuarios que no necesitan formacion tecnica<br />– Podran manejar la informaci´on de forma sencilla y eficiente a traves<br />de la interfaz que se les proporcione.<br />• <span style="color: rgb(0, 102, 0); font-style: italic;">Administrador de la base de datos: </span>Se encarga del control general del<br />sistema de base de datos. Usualmente actua como intermediario entre<br />programador y usuario final.<br />– Son los responsables de su seguridad e integridad<br />– Requieren un amplio conocimiento de la herramienta SGBD a nivel<br />de administracion: tablas, ındices, consultas, formularios, informes,<br />macros, etc.<br />• <span style="color: rgb(0, 102, 0); font-style: italic;">Programador de aplicaciones: </span>Encargado de escribir programas de aplicaci<br />on que utilicen bases de datos (lenguaje de alto nivel, como Cobol,<br />Clipper, VisualBasic, 4GL).<br />– Pueden utilizar lenguajes de alto nivel para acceder y actualizar los<br />datos.<br />– Son capaces de implementar soluciones a medida.<br />– Su conocimiento de la herramienta SGBD debe ser aun mas profundo:<br />modulos, API (application programa interface), etc.<br /><span style="font-weight: bold;"><br />CONCEPTOS DE BASES DE DATOS<br />Entidades<br /></span>Una entidad es una clase o categorıa de objetos que poseen caracterısticas diferenciadoras<br />que los distinguen del resto. Ejemplo: Dentro de una empresa que<br />vende complementos para el automovil encontraremos las siguientes entidades:<br />Artıculos, Clientes, Proveedores, Pedidos, etc.<br />Otros ejemplos:<br />En una biblioteca: Libro, Socio, Autor, etc.<br />En una academia: Alumno, Profesor, Cursos, Asignaturas, etc.<br />En concesionario de automoviles: Vendedor, Cliente, Automovil, Pedido,<br />etc.<br />Las entidades consideradas en una base de datos deberan determinarse en<br />consonancia con las necesidades. Por ejemplo, en una empresa de transportes<br />aparecen diferentes entidades: vehıculos, mercancıas, transportistas, clientes,<br />etc. No obstante, si nuestro objetivo fuere diseñar una base de datos para<br />el control de las inspecciones tecnicas de los vehıculos, entonces el resto de<br />entidades (mercancıas, transportistas, clientes, etc.) no seran tenidas en cuenta.<br />Cada objeto perteneciente a una entidad debe poseer informacion suficiente<br />para que pueda ser identificado de forma unica.<br /><span style="font-weight: bold;">Atributos</span><br />Toda entidad contiene un conjunto de datos, a los que llamaremos atributos o<br />campos, que permiten describir de una manera completa y unica a cada elemento<br />de la entidad. Ejemplos:<br />Entidad ”Clientes”. Atributos: Codigo, DNI, Nombre y apellidos, Direccion,<br />Tel´efono, Cuenta bancaria, etc.<br />Entidad ”Productos”. Atributos: Codigo, Descripcion, Fabricante, Color,<br />Peso, Precio, etc.<br />Cada atributo se corresponde, en una base de datos relacional, con las<br />columnas o campos de una tabla.<br />En una base de datos relacional, las entidades se representan en forma de<br />tablas.<br /><span style="font-weight: bold;">Registros</span><br />Para una entidad dada, cada entrada o aparicion (cada cliente en la entidad<br />Clientes, cada vehıculo en la entidad Vehıculos, etc.) se denomina registro u<br />ocurrencia de registro. Un registro es, por tanto, una representacion de un<br />objeto perteneciente a una entidad dada.<br />En una base de datos relacional, los registros se corresponden con las filas<br />de las tablas. Ejemplos:<br />La entidad Automovil con los campos N matricula, Marca, Modelo, Color,<br />Km, Gasolina, y un registro (o ocurrencia de registro): J-5757-M, Ford, Orion,<br />Rojo, 45401, Super.Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com1tag:blogger.com,1999:blog-7784620911335545755.post-49918185683889383972010-11-11T06:07:00.001-08:002010-11-11T06:11:32.979-08:00¿Como funcionan los buscadores?Todos los usamos para todo lo que se haga en <strong>Internet</strong>, sin ellos no iríamos más allá de un puñado de páginas que nuestra mente pueda retener en el cerebro, sin los <strong>buscadores</strong> sería casi imposible encontrar en estos días una información precisa acerca de cualquier tema, simplemente regresaríamos a las enciclopedias. Pero, <em><strong>¿qué son los buscadores? ¿Cómo funcionan?<br /></strong></em><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHwdSdfyTPiVDBWdzbzeHRPVKIdpTCjK-KEhHbrdUEoNL3byk9EcOpmoyE1KC6oqsGeHrD4-WwWV6PI_AoIIB7pqOpCpojvQs-MIyT0BkVDTBbhPufMg1qpYqq2yK2Rzgg3wTpiuYnOXJ2/s1600/buscadoresweb.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 122px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHwdSdfyTPiVDBWdzbzeHRPVKIdpTCjK-KEhHbrdUEoNL3byk9EcOpmoyE1KC6oqsGeHrD4-WwWV6PI_AoIIB7pqOpCpojvQs-MIyT0BkVDTBbhPufMg1qpYqq2yK2Rzgg3wTpiuYnOXJ2/s200/buscadoresweb.jpg" alt="" id="BLOGGER_PHOTO_ID_5538294098897803874" border="0" /></a><br /><p>Según las estadísticas, en<strong> Internet</strong> el 85% del tráfico que se tiene es a través de los <strong>buscadores</strong>, eso quiere decir que el 85% del <strong>uso de Internet</strong> se hace a través de búsquedas, de personas que no saben exactamente a donde dirigirse y gracias a los buscadores desembarcan en una <strong>página web</strong> que les puede ser de ayuda o no.</p> <p>Estoy casi segura de que alguna vez has usado un <strong>buscador</strong>, tal vez no los conozcas precisamente por su nombre genérico, pero si por sus nombres específicos, entre los más conocidos están: <strong><a title="Buscador Google" href="http://www.google.es/" target="_blank">Google</a>, <a title="Buscador yahoo!" href="http://es.yahoo.com/" target="_blank">Yahoo!</a>, <a title="MSN" href="http://es.msn.com/" target="_blank">MSN</a>, <a title="Buscador Ask" href="http://es.ask.com/" target="_blank">Ask</a>, <a title="Buscador Aol" href="http://www.aol.es/" target="_blank">Aol</a>, <a title="Buscador Altavista" href="http://es.altavista.com/" target="_blank">Altavista</a>, etc.</strong></p><p>Según las cifras estadísticas de <strong>Nielsen NetRatings</strong> del año 2008, el empleo de los buscadores genéricos en los <strong>Estados Unidos</strong> es el siguiente: 53.6% para <strong>Google</strong>, 19.9 para <strong>Yahoo!</strong>, y 12.9% para <strong>MSN</strong>. Esto obviamente cambia para ciertos países en donde <strong>Google</strong> arrasa con los demás <strong>buscadores</strong>.</p><p>Un <strong>buscador</strong><taghw> funciona de una manera simple basándose en 3 componentes fundamentales que se interrelacionan para entregarle al usuario una lista de resultados que es la que ve sólo microsegundos después de haber realizado sus búsqueda.</taghw></p> <p>En primer lugar tenemos una <strong>araña o robot</strong>, que en esencia es una navegador autómata que va por todo el ciberespacio viendo cada una de las páginas web, analizando en su trayecto su <strong>código fuente</strong> (<strong>HTML</strong>), así como todo el texto que hay en el contenido de la página incluyéndolo inmediatamente a la base de datos ya sea porque es una <strong>página web</strong> nueva o es una <strong>página web</strong> antigua que tiene contenido nuevo y actualizado.</p> <p>En segundo lugar tenemos la <strong>base de datos</strong>. Este sistema de almacenamiento guarda registro de toda la información de cada una de las <strong>páginas web</strong> que la <strong>araña</strong> le ha enviado. Cuando una persona hace click en el botón buscar, inmediatamente la base de datos se pone a trabajar para mostrarle a usted la información más relevante conforme a su búsqueda.</p> <p>Y en tercer lugar, la parte humana la proporciona un <strong>algoritmo de relevancia</strong> o <strong>proceso de emparejamiento</strong> que ordena los resultados basándose en una serie de variables para encontrar aquellas que valen más la pena de mostrar primeras que otras.</p> <p>De esta manera sencilla funcionan los<strong> buscadores</strong><taghw> y los procesos cada vez son más y más simples y rápidos en beneficio del usuario.</taghw></p>Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com1tag:blogger.com,1999:blog-7784620911335545755.post-49342807278530514772010-11-11T05:45:00.000-08:002010-11-11T05:49:21.775-08:00EL PageRank<h2 style="font-weight: normal;"><span style="font-size:100%;">Factores off-the-page</span></h2><span style="font-size:100%;"> Con esta sección dedicada al PageRank entramos en los factores off the page, es decir, aquellos exteriores a nuestra propia web, y por tanto sobre los que no tendremos un control tan directo como en lo que es puramente la optimización. </span><p><span style="font-size:100%;">Google fue revolucionario precisamente porque fue el primer gran buscador que valoró estos elementos; los aspectos que estaban al alcance de los autores de las webs eran manipulados porque eran manipulables; así pues, el desarrollo de un buscador que funcionara bien se debía basar en aquellos aspectos que se estuvieran más alejados de la influencia de los webmasters.<br /></span></p><h2 style="font-weight: normal;"><span style="font-size:100%;">PageRank para Dummies</span></h2><span style="font-size:100%;"> El PageRank se ha convertido en un concepto casi mítico entre los webmasters, que no paran de hacer preguntas acerca de él. Así pues, para esta sección contaré con la ayuda de uno de esos webmasters, John Dummies, que hará las preguntas que previsiblemente también se os ocurrirán a vosotros. </span><p><span style="font-size:100%;">El PageRank (bautizado así en honor de uno de los fundadores de Google, Larry Page) ha sido considerado el corazón del sistema de Google para medir la relevancia de las webs. Hay quien cree que el PageRank es el factor clave para lograr buenos puestos en Google, y hay quien dice que el PageRank apenas sirve de nada.<br /></span></p><p><span style="font-size:100%;"> Un símil muy socorrido para explicar el PageRank es que es como un sistema de votaciones. Si yo tengo una web A y en una de mis páginas pongo un link hacia la página de la web B, estoy 'votando' a esa página; estoy indicando que es un recurso de interés. </span></p><p><span style="font-size:100%;"> Así, cuantos más links reciba una página, mayor será su PageRank (PR para los amigos).<br /></span></p><p><span style="font-size:100%;"> No necesariamente. Porque el PR transmitido no es un valor absoluto. A su vez, depende de: </span></p><ul><li><span style="font-size:100%;">El PR que tenga la página que nos enlaza </span></li><li><span style="font-size:100%;">El número de links salientes que tenga esa página </span></li></ul><span style="font-size:100%;"> Digamos que a la página A le apunta la página B. Digamos que la página B tiene 20 puntos de PR. Y digamos que la página B también tiene un enlace hacia la página C. </span><p><span style="font-size:100%;"> Por tanto, lo primero que debemos tener en cuenta es que, si tiene dos links, el PR transmitido se dividirá entre ellos. </span></p><p><span style="font-size:100%;">No es seguro que el PR transmitido por una página se divida por igual entre todos sus enlaces, pero en esta explicación asumiremos que es así para no complicarla innecesariamente.<br /></span></p><p><span style="font-size:100%;">El PR de la página que lo transmite tampoco llega tal cual a su destino; Google aplica un factor de debilitación: multiplica el PR transmitido por un número menor a 1 (en la fórmula original, 0'85). </span></p><p><span style="font-size:100%;"> Es decir, que la página A recibirá 8'5 puntos de PR.</span></p><p><span style="font-size:100%;">¡No! Aunque no comozcamos la fórmula actual del PR, sí conocemos la fórmula original de los primeros trabajos sobre Google. Aquí os presento la fórmula original del PR (hay otra variante, pero esta es más simple y nos permitirá entender claramente cómo funciona el PR):</span></p><p><span style="font-size:100%;"><tt> PR(A) = (1-d) + d (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn))</tt></span></p><p> <span style="font-size:100%;">PR(A) es el PageRank de la página que tomamos como referencia. </span></p><p> <span style="font-size:100%;">d es el factor de debilitación. </span></p><p> <span style="font-size:100%;">(1-d) asegura que cualquier página indexada por Google, aunque no reciba ningún enlace, tendrá un PR mínimo de 0'15. </span></p><p> <span style="font-size:100%;">PR(T1)/C(T1) será el PageRank (PR) de una de las páginas que nos enlaza, (T1), dividido por todos los enlaces (C) que también salen de esa página T1, es decir, el PR que nos transmite. </span></p><p> <span style="font-size:100%;">... + PR(Tn)/C(Tn) lo mismo que el punto anterior, repetido por cada página que nos enlace.<br /></span></p><p><span style="font-size:100%;"> Para empezar, la fórmula del PR seguramente ha sufrido variaciones, y actualmente debe presentar diferencias respecto a la que he puesto aquí. Sin embargo, sigue siendo una buena guía para saber cómo se comporta el PR en líneas generales. Además, para conocer tu PR deberías conocer exactamente el PR de las páginas que te enlazan. Y para conocer el PR de las páginas que te enlazan deberías conocer exactamente el PR de las páginas que a su vez las enlazan. Y para conocer el PR de las páginas que enlazan a las páginas que te enlazan, deberías conocer...<br /></span></p><p><span style="font-size:100%;"> Afortunadamente, puedes tener una aproximación descargando e instalando en tu navegador Explorer la barra de herramientas de Google en <a href="http://toolbar.google.com/" onmouseover="window.status='Google Toolbar';return true" onmouseout="window.status=''">http://toolbar.google.com/</a>. </span></p><p><span style="font-size:100%;"> Hacia la mitad de la barra verás un raya en verde y blanco. Es una representación gráfica del PR de la página en la que estás, representada en una escala del 1 al 10. </span></p><p><span style="font-size:100%;">De hecho, es una aproximación al verdadero PR, pues mientras el PR tiene una escala lineal, la barra de Google lo presenta en una escala logarítmica. Esta es una hipótesis acerca de la relación entre el verdadero PR y el PR representado en la barra de Google extraída del artículo <a href="http://www.supportforums.org/PageRank.pdf" onmouseover="window.status='PageRank Uncovered';return true" onmouseout="window.status=''">PageRank Uncovered</a>:<br /></span></p><span style="font-size:100%;"><br /></span><p><span style="font-size:100%;"><br /></span></p><table style="font-family: arial; font-size: x-small;" border="0" cellpadding="2" cellspacing="1" width="100%"><tbody><tr><td style="color: white;color:black;" bg><span style="font-size:100%;"> PR verdadero </span></td> <!-- Row 1 Column 2 --> <td style="color: white;color:black;" bg><span style="font-size:100%;"> Barra de Google </span></td> </tr> <tr> <!-- Row 2 Column 1 --> <td bg style="color:#c0c0c0;"><span style="font-size:100%;"> De 0.00000001 a 5 </span></td> <!-- Row 2 Column 2 --> <td bg style="color:#c0c0c0;"><span style="font-size:100%;"> 1 </span></td> </tr> <tr> <!-- Row 3 Column 1 --> <td bg style="color:#c0c0c0;"><span style="font-size:100%;"> De 6 a 25 </span></td> <!-- Row 3 Column 2 --> <td bg style="color:#c0c0c0;"><span style="font-size:100%;"> 2 </span></td> </tr> <tr> <!-- Row 4 Column 1 --> <td bg style="color:#c0c0c0;"><span style="font-size:100%;"> De 25 a 125 </span></td> <!-- Row 4 Column 2 --> <td bg style="color:#c0c0c0;"><span style="font-size:100%;"> 3 </span></td> </tr> <tr> <!-- Row 5 Column 1 --> <td bg style="color:#c0c0c0;"><span style="font-size:100%;"> De 126 a 625 </span></td> <!-- Row 5 Column 2 --> <td bg style="color:#c0c0c0;"><span style="font-size:100%;"> 4 </span></td> </tr> <tr> <!-- Row 6 Column 1 --> <td bg style="color:#c0c0c0;"><span style="font-size:100%;"> De 626 a 3125 </span></td> <!-- Row 6 Column 2 --> <td bg style="color:#c0c0c0;"><span style="font-size:100%;"> 5 </span></td> </tr> <tr> <!-- Row 7 Column 1 --> <td bg style="color:#c0c0c0;"><span style="font-size:100%;"> De 3126 a 15625 </span></td> <!-- Row 7 Column 2 --> <td bg style="color:#c0c0c0;"><span style="font-size:100%;"> 6 </span></td> </tr> <tr> <!-- Row 8 Column 1 --> <td bg style="color:#c0c0c0;"><span style="font-size:100%;"> De 15626 a 78125 </span></td> <!-- Row 8 Column 2 --> <td bg style="color:#c0c0c0;"><span style="font-size:100%;"> 7 </span></td> </tr> <tr> <!-- Row 9 Column 1 --> <td bg style="color:#c0c0c0;"><span style="font-size:100%;"> De 78126 a 390625 </span></td> <!-- Row 9 Column 2 --> <td bg style="color:#c0c0c0;"><span style="font-size:100%;"> 8 </span></td> </tr> <tr> <!-- Row 10 Column 1 --> <td bg style="color:#c0c0c0;"><span style="font-size:100%;"> De 390626 a 1953125 </span></td> <!-- Row 10 Column 2 --> <td bg style="color:#c0c0c0;"><span style="font-size:100%;"> 9 </span></td> </tr> <tr> <!-- Row 11 Column 1 --> <td bg style="color:#c0c0c0;"><span style="font-size:100%;"> De 1953126 a infinito </span></td> <!-- Row 11 Column 2 --> <td bg style="color:#c0c0c0;"><span style="font-size:100%;"> 10</span></td></tr></tbody></table><span style="font-size:100%;">Esto explica por qué a los webmasters les cuesta relativamente poco alcanzar un PR3, bastante más un PR4, mucho más un PR5, muchísimo más un PR6, infinitamente más un PR7, etc. El intervalo de enlaces que deben obtener para aumentar un peldaño en el PR que muestra la barra de Google es cada vez mayor.<br />Es cierto que no conviene tener muchos links hacia fuera, pero a menudo este punto de vista se hace desde la falsa creencia de que, puesto que una página transmite PR a las páginas que enlaza, ella está quedándose sin PR. Y eso es un error. </span><p><span style="font-size:100%;">Si la página A tiene 100 puntos de PR y un enlace a la página B, es cierto que le transmite todo el PR que puede transmitir (85, una vez aplicado el factor de debilitamiento), pero eso no quiere decir que se quede sin ese PR. Entonces, ¿a qué viene toda esa psicosis acerca de no tener enlaces hacia otras webs? Lo veremos en <a href="http://www.guia-buscadores.com/posicionamiento/manejar-los-links-internos.html">Manejar tu PR interno.</a></span> </p><p><span style="font-size:100%;"> El cálculo del PR es un tema complejo, porque el PR de una página determinada A depende del PR de la página que la enlaza, B. Pero si A y B están entrelazadas, ahora el PR de B depende también del PR de A; y si el PR de B ha cambiado, el PR de A, como consecuencia también, etc. Por tanto, Google debe calcular el PR en diversas iteraciones hasta que éste se estabiliza y los cambios sucesivos no provocan cambios posteriores.</span> </p><br /><p> </p>Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com1tag:blogger.com,1999:blog-7784620911335545755.post-58854754158062277582010-11-11T05:38:00.000-08:002010-11-11T05:41:32.225-08:00Como aumentar el PageRank<ul style="margin-top: 0cm;" type="disc"><li class="MsoNormal" style="">Algo muy importante que debes tener en cuenta si quieres tener buen trafico, es que tu sitio debe estar preparado para ser visto por otras personas. O sea, publica el sitio cuando lo tengas bien armado, y no con versiones preeliminares</li><li class="MsoNormal" style="">Es fundamental que tu sitio tenga la descripción del producto/servicio o lo que fuera, dentro de alguna pagina de tu sitio. Aquí deberías incluir las palabras claves que te describan. Ejemplo un sitio de deportes tendrá palabras claves como: “deportes”, los tipos de deportes, noticias mas importantes, nombres de jugadores importantes, etc.</li><li class="MsoNormal" style="">Busca una lista de directorios para hacerte conocer. Esto es, crearte descripciones que se ajusten con tu sitio y subirlas a los directorios.</li></ul> <p class="MsoNormal">Ejemplo: Titulo: Deportes – noticias fútbol.</p> <p class="MsoNormal">Descripción: Aquí podrás encontrar todas las últimas noticias de fútbol en el mejor portal de deportes. Visítanos y ponte al tanto de todas las noticias del deporte mundial.<br /><o:p> </o:p></p> <ul style="margin-top: 0cm;" type="disc"><li class="MsoNormal" style="">Una ves que tengas unas cuantas descripciones hechas, es momento que las empieces a subir a los sitios. Esto es sencillo una vez que lo hayas hecho unas pocas veces. Antes de subirlas, debes buscan dentro del directorio, cual es la categoría que mas se adapta a tu descripción. La cantidad de palabra que puedes incluir tanto en el titulo como en tu descripción varían según el directorio al cual estas subiendo la info. Por lo general poner entre <st1:metricconverter productid="2 a" st="on">2 a</st1:metricconverter> 8 palabras en el titulo y entre <st1:metricconverter productid="20 a" st="on">20 a</st1:metricconverter> 80 en la descripción será aceptado por la mayoría.</li><li class="MsoNormal" style="">Algunos directorio gratis son: ver mi archivo de blog: “Lista de Directorios Gratuitos”.</li><li class="MsoNormal" style="">Simple esta la posibilidad de usar directorio pagos, pero te recomiendo que por ahora uses los gratis ya que hay muchísimos por ahí.</li></ul><br /><p class="MsoNormal"><span style="font-weight: bold;">Agrega Meta tags a tus paginas.</span><br /><o:p> </o:p></p> <p class="MsoNormal">Los meta tags son importantes para que los robots puedan tener una visión general de que se trata tu pagina. Incluye aquí la descripción general y las palabras claves que te identifican<br /><o:p> </o:p></p><br /><p class="MsoNormal"><span style="font-weight: bold;">Otros factores para mejorar tu rankoe de Google.</span><o:p><br /></o:p></p> <p style="font-style: italic;" class="MsoNormal">Densidad:</p> <p class="MsoNormal">Una de las cosas importantes que google se fija cuando cataloga las paginas es la densidad de las palabras. Esto significa cuantas veces las palabras se repiten. Aquí hay un aspecto muy importante a destacar: no escribas tus páginas orientadas a los robots, escríbelos orientados hacia el publico. Que sean leíbles y den ganas de terminarlo. Repetir mucho palabras puede dañar gravemente tu rankeo e incluso que se sitio sea prohibido de google.</p> <p class="MsoNormal">Google se fija mucho en los primeros párrafos de tus páginas. Mantén a este con información descriptiva de tu sitio.<o:p><br /></o:p></p> <p style="font-style: italic;" class="MsoNormal"><span>Nombre de tus páginas.</span> </p> <p class="MsoNormal">Todas tus páginas deberían tener un nombre respectivo sobre el contenido específico de cada una de ellas. No dejes el nombre por defecto que los programas de diseño Web puedan darle, usa los title tags para cada una de ellas. Puedes incluir alguna palabra clave en el titulo.</p> <p style="font-style: italic;" class="MsoNormal">Fotos y flash.</p> No uses tanto flash o cosas del estilo que puedan endentecer la pagina. Los buscadores tienden a saltearse cuando encuentran código flash.<br />Para tus imágenes puedes usar el alt tag, nómbralas acorde a lo que son. Ganaras que palabras claves que tú elijas puedan estar mas visibles a los buscadores.Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com1tag:blogger.com,1999:blog-7784620911335545755.post-70583910082929871472010-11-10T18:38:00.001-08:002010-11-10T18:45:22.718-08:00Creador de GoogleSubo esta porque aunque todos lo utilizamos todo el tiempo, nadie conoce a su creador<div><br /></div><div><span class="Apple-style-span" style="font-family: sans-serif; line-height: 24px; "><h1 id="firstHeading" class="firstHeading" style="color: black; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; font-weight: normal; margin-top: 0px; margin-right: 0px; margin-bottom: 0.1em; margin-left: 0px; padding-top: 0px; padding-bottom: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(170, 170, 170); width: auto; font-size: 1.6em; line-height: 1.2em; background-position: initial initial; background-repeat: initial initial; ">Larry Page</h1><div><br /></div><div><span class="Apple-style-span" style="line-height: 19px; font-size: 13px; "><b>Lawrence Edward "Larry" Page</b> es un empresario estadounidense. Page es el creador, junto con Sergey Brin,de Google Se estima que tiene un patrimonio neto de más de 17.5 mil millones de dólares.</span></div><div><span class="Apple-style-span" style="line-height: 19px; font-size: 13px; "><br /></span></div><div><span class="Apple-style-span" style="line-height: 19px; font-size: 13px; "><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; "></p><h2 style="color: black; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; font-weight: normal; margin-top: 0px; margin-right: 0px; margin-bottom: 0.6em; margin-left: 0px; padding-top: 0.5em; padding-bottom: 0.17em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(170, 170, 170); width: auto; font-size: 19px; background-position: initial initial; background-repeat: initial initial; "><span class="mw-headline" id="Google">Google</span></h2><p></p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; ">Durante su doctorado en Stanford conoció a Sergey Brin . Juntos desarrollaron y pusieron en marcha el buscador Google , que empezó a funcionar en 1998 . Google está basado en la tecnología patentada PageRank . Se dice que le pusieron este nombre al buscador por su semajanza con la palabra Googol, que en inglés quiere decir 10 elevado a 100.</p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; ">Page fue presidente de Google junto con Brin hasta 2001 , año en que decidieron contratar a Eric Schmidt.Page dirige Google junto a Sergey Brin y Schmidt.</p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; "><br /></p><p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em; "><span class="Apple-style-span" style="font-size: 16px; line-height: 24px; "></span></p><h1 id="firstHeading" class="firstHeading" style="color: black; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; font-weight: normal; margin-top: 0px; margin-right: 0px; margin-bottom: 0.1em; margin-left: 0px; padding-top: 0px; padding-bottom: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(170, 170, 170); width: auto; font-size: 1.6em; line-height: 1.2em; background-position: initial initial; background-repeat: initial initial; ">Sergey Brin</h1><div><span class="Apple-style-span" style="line-height: 19px; font-size: 13px; "><b>Sergey Mijaylovich Brin</b> es un empresario estadounidense. Brin es el creador, junto con Larry Page,de Google e estima que tiene un patrimonio neto de más de 17.5 mil millones de dólares.</span></div><div><span class="Apple-style-span" style="line-height: 19px; font-size: 13px; "><br /></span></div><div><span class="Apple-style-span" style="line-height: 19px; font-size: 13px; "><h2 style="color: black; background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; font-weight: normal; margin-top: 0px; margin-right: 0px; margin-bottom: 0.6em; margin-left: 0px; padding-top: 0.5em; padding-bottom: 0.17em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(170, 170, 170); width: auto; font-size: 19px; background-position: initial initial; background-repeat: initial initial; "><span class="mw-headline" id="Google">Google</span></h2></span></div><div><span class="Apple-style-span" style="line-height: 19px; font-size: 13px; ">Brin conoció a Page durante unas jornadas de orientación para nuevos estudiantes en la Universidad de Standford. Aunque inicialmente chocaron, rápidamente conectaron y comenzaron a compartir ideas. Les unía especialmente su interés matemático por la World Wide Web . Fruto de esta unión nacería, en 1996, <b>BackRub</b>, el buscador predecesor de Google. El proyecto creció rápidamente y se dieron cuenta de que habían creado un magnífico motor de búsqueda, que aplicaron a la web con excelentes resultados. Optaron por dejar sus estudios en la Universidad y dedicarse por completo al buscador, solicitando ayudas económicas a profesores, familia y amigos. Compraron servidores y alquilaron un garaje en Menlo Park. La historia de Google Inc <a href="http://es.wikipedia.org/wiki/Google_Inc." title="Google Inc." class="mw-redirect" style="text-decoration: none; color: rgb(6, 69, 173); background-image: none; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: initial initial; background-repeat: initial initial; ">.</a> había comenzado.</span></div></span><p></p></div></span></div>Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com1tag:blogger.com,1999:blog-7784620911335545755.post-34436661319780976162010-11-09T07:05:00.000-08:002010-11-09T07:08:48.357-08:00¿Que es DMOZ?<h1 style="font-weight: bold; font-family: georgia;"><span style="font-size:100%;">El Open Directory Project</span></h1> <p style="font-family: georgia;"><span style="font-size:100%;">El <strong style="font-weight: normal;">Open Directory Project</strong> es el directorio editado por personas más extenso y más completo del Web. Su construcción y mantenimiento son realizados por una gran comunidad global de editores voluntarios.</span></p><h2 style="font-weight: bold; font-family: georgia;"><span style="font-size:100%;">La República del Web</span></h2> <p style="font-family: georgia;"><span style="font-size:100%;">El Web continúa creciendo a un ritmo sin precedentes. Los buscadores automatizados son cada vez menos capaces de entregar resultados útiles a sus usuarios. Los pequeños grupos de editores contratados por los directorios comerciales no pueden mantenerse al día catalogando sitios, y la calidad y cantidad de sus índices se han visto deterioradas. Se están llenando de enlaces muertos, y no pueden mantener el ritmo de crecimiento de Internet.</span></p> <p style="font-family: georgia;"><span style="font-size:100%;">En vez de luchar contra el crecimiento explosivo de Internet, el Open Directory proporciona los medios para que Internet se organice a sí misma. Conforme Internet crece, crece también el número de personas que la usan. Cada una de estas personas puede organizar una pequeña porción del web y presentarla al resto de la población, filtrando lo malo e inútil y conservando sólo los mejores sitios.</span></p><h2 style="font-family: georgia;"><span style="font-size:100%;">El catálogo definitivo del Web</span></h2> <p style="font-family: georgia;"><span style="font-size:100%;">El Open Directory se basa en los pasos de algunos de los proyectos de cooperación editores / contribuyentes del siglo XX. Así como el Diccionario Oxford de Inglés se convirtió en el referente definitivo con relación a ese idioma por medio del esfuerzo de los voluntarios, el Open Directory sigue sus pasos para convertirse en el catálogo definitivo del Web.</span></p> <p style="font-family: georgia;"><span style="font-size:100%;">El Open Directory fue fundado en el espíritu del movimiento Open Source y es el único gran directorio que es 100% gratuito. No hay, y nunca habrá, un coste por sugerir un sitio al directorio y/o por usar los datos del mismo. Los datos del Open Directory se ofrecen gratis a cualquiera que cumpla nuestra licencia de uso gratuito.</span></p><h2 style="font-family: georgia;"><span style="font-size:100%;">El cerebro de Internet</span></h2> <p style="font-family: georgia;"><span style="font-size:100%;"><span style="color: rgb(0, 0, 0);">El Open Directory es la base de datos </span><span style="color: rgb(0, 0, 0);">sobre contenidos del Web clasificados por personas más extendida. </span><span style="color: rgb(0, 0, 0);">Sus estándares editoriales junto con la aportación de los usuarios de la red proporcionan el cerebro colectivo necesario para el descubrimiento de recursos en el Web</span><span style="color: rgb(0, 0, 0);">. El O</span><span style="color: rgb(0, 0, 0);">pen Directory provee de los servicios de directorio esenciales a los mayores y más populares motores de búsqueda y portales, incluyendo Netscape Search, AOL Search, Google, Lycos, HotBot, DirectHit y otros cientos más.</span></span></p>Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com1tag:blogger.com,1999:blog-7784620911335545755.post-75619023725244440812010-11-09T07:01:00.000-08:002010-11-09T07:05:56.219-08:00PageRank<p style="font-family: georgia;"><b>PageRank</b> es una marca registrada y patentada<sup id="cite_ref-0" class="reference"><a href="http://es.wikipedia.org/wiki/PageRank#cite_note-0"><span class="corchete-llamada"></span><span class="corchete-llamada"></span></a></sup> por Google <a href="http://es.wikipedia.org/wiki/Google" title="Google"></a> el 9 de enero de 1999 que ampara una familia de algoritmos utilizados para asignar de forma numérica la relevancia de los documentos (o paginas web ) indexados por un motor de busqueda<a href="http://es.wikipedia.org/wiki/Motor_de_b%C3%BAsqueda" title="Motor de búsqueda"></a>. Sus propiedades son muy discutidas por los expertos en optimización de motores de búsqueda. El sistema PageRank es utilizado por el popular motor de búsqueda Google para ayudarle a determinar la importancia o relevancia de una página. Fue desarrollado por los fundadores de Google, Larry Page y Sergey Brin <a href="http://es.wikipedia.org/wiki/Sergey_Brin" title="Sergey Brin"></a>, en la Universidad de Stanford <a href="http://es.wikipedia.org/wiki/Universidad_de_Stanford" title="Universidad de Stanford" class="mw-redirect"></a>.</p> <p style="font-family: georgia;">PageRank confía en la naturaleza democrática de la web utilizando su vasta estructura de enlaces como un indicador del valor de una página en concreto. Google interpreta un enlace de una página <b>A</b> a una página <b>B</b> como un voto, de la página <b>A</b>, para la página <b>B</b>. Pero Google mira más allá del volumen de votos, o enlaces que una página recibe; también analiza la página que emite el voto. Los votos emitidos por las páginas consideradas "importantes", es decir con un PageRank elevado, valen más, y ayudan a hacer a otras páginas "importantes". Por lo tanto, el PageRank de una página refleja la importancia de la misma en Internet.</p><h3 style="font-family: georgia;"><span class="mw-headline" id="Manipulaci.C3.B3n">Manipulación</span></h3> <p style="font-family: georgia;">Debido a la importancia comercial que tiene aparecer entre los primeros resultados del buscador, se han diseñado métodos para manipular artificialmente el PageRank de una página. Entre estos métodos hay que destacar el spam, consistente en añadir enlaces a una cierta página web en lugares como blogs, libros de visitas, foros de Internet, etc. con la intención de incrementar el número de enlaces que apuntan a la página.</p> <p style="font-family: georgia;">A principios del 2005 Google implementó un nuevo atributo para hiperenlaces <code><a href="http://es.wikipedia.org/wiki/Nofollow" title="Nofollow">rel="nofollow"</a></code> como un intento de luchar contra el spam. De esta forma cuando se calcula el peso de una página, no se tienen en cuenta los links que tengan este atributo.</p>Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com1tag:blogger.com,1999:blog-7784620911335545755.post-14094822030241595132010-11-08T13:38:00.000-08:002010-11-08T13:40:12.918-08:00HipHop para PHP<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhw8VUIkOERqCFd1KAWiL-TfPb_6UTSi_zMjrhFoDCEP80UgwrFKaHJK7zow0nDdKCIzM6jR1e5PE9s0slm3JMsczW3PaltBPEIgcZ2kpMz-V6M_EUnJrI_5cCUm_yXhXD3Pzq5J_LdmHnC/s1600/hiphopphp.png"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 153px; height: 200px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhw8VUIkOERqCFd1KAWiL-TfPb_6UTSi_zMjrhFoDCEP80UgwrFKaHJK7zow0nDdKCIzM6jR1e5PE9s0slm3JMsczW3PaltBPEIgcZ2kpMz-V6M_EUnJrI_5cCUm_yXhXD3Pzq5J_LdmHnC/s200/hiphopphp.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5537296913490496130" /></a><br />Lo encontre en la web, me intereso y espero les agrade.<div><br /><div><br /></div><div><span class="Apple-style-span" style="color: rgb(36, 38, 38); font-family: 'Helvetica Neue', Arial, 'Lucida Grande', 'Lucida Sans Unicode', 'Microsoft YaHei', sans-serif; font-size: 13px; line-height: 20px; "><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 9px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(77, 77, 77); ">Hoy vamos a hablar de una nuevo lenguaje de programación utilizado en <strong style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(46, 46, 46); ">Facebook</strong> se trata del lanzamiento de <strong style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(46, 46, 46); ">HipHop</strong> para <strong style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(46, 46, 46); ">PHP</strong>. Según el ingeniero Haiping Zhao, HipHop les permitió reducir el uso del CPU en sus servidores en un promedio del 50%, dependiendo de la página, resultando en un enorme impacto para todo el sitio de Facebook.</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 9px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(77, 77, 77); ">Aunque HipHop se estuvo desarrollándose durante los últimos 2 años, reconocen que todavía no está completo, y la calidad de su código actual puede considerarse como “Beta”. Liberarlo bajo la misma licencia de PHP permitiría a su comunidad completar el trabajo, y al mismo tiempo ofrecer un nuevo enfoque a la hora de escalar sitios muy complejos.</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 9px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(77, 77, 77); ">¿Pero qué es exactamente HipHop? Según el mismo Zhao:</p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 9px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(77, 77, 77); ">“HipHop no es técnicamente un compilador. En su lugar es un transformador de código. HipHop transforma tu código fuente PHP en un altamente optimizado código C++ y luego usa g++ (GNU C++) para compilarlo. HipHop ejecuta el código fuente en una manera semánticamente equivalente y sacrifica algunas características raramente usadas -como eval()- a cambio de una performance mejorada. HipHop incluye el transformador de código, una reimplementación del runtime de PHP y una re-escritura de varias extensiones de PHP comunes para aprovechar estas optimizaciones”.</p></span></div></div>Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com1tag:blogger.com,1999:blog-7784620911335545755.post-6965249822611371842010-11-04T08:20:00.000-07:002010-11-04T08:21:30.271-07:00<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx6EeErNx2zUGuCtNvMap9afevgNJkrQ51NPCbowa9dwBtqRFOBYi9JPeIrQR-IfwYWBkn_CdRgjkN3Oe4UvCxwEK355uAULCQLpNUedEmKJMGl9tFlpXn43NykDnt3E99wq94dOQqjz-X/s1600/google_app_inventor.png"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 107px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx6EeErNx2zUGuCtNvMap9afevgNJkrQ51NPCbowa9dwBtqRFOBYi9JPeIrQR-IfwYWBkn_CdRgjkN3Oe4UvCxwEK355uAULCQLpNUedEmKJMGl9tFlpXn43NykDnt3E99wq94dOQqjz-X/s200/google_app_inventor.png" alt="" id="BLOGGER_PHOTO_ID_5535714935303299506" border="0" /></a><br /><span style="color: rgb(102, 51, 102); font-family: georgia;font-size:85%;" >Google lanza una nueva herramienta (<strong>App Inventor</strong>) que facilita el desarrollo de aplicaciones para Android. El objetivo es que cualquier persona (no solo desarrolladores) sea capaz de crear un app para Android.</span><p style="color: rgb(102, 51, 102); font-family: georgia;"><span style="font-size:85%;">¿Cómo funciona <strong>Google App Inventor</strong>? En modo visual, uniendo una serie de bloques el usuario será capaz de crear aplicaciones totalmente funcionales para Android.</span></p><p style="color: rgb(102, 51, 102); font-family: georgia;"><span style="font-size:85%;">Android Market es (al estilo de la App Store de Apple) el centro de distribución de apps (aplicaciones) para Android. Hasta ahora la principal diferencia es que es un entorno abierto, donde cualquier programador puede distribuir sus creaciones. Al contrario de la App Store, donde se necesita su aprobación para publicar las apps.</span></p><p style="color: rgb(102, 51, 102); font-family: georgia;"><span style="font-size:85%;">Ahora, con Google App Inventor veremos un incremento importante en el número de aplicaciones para Android, ya que es una herramienta que no necesita de grandes conocimientos por parte del desarrollador. Es un arma de doble filo. Por una parte facilita mucho la creación de apps por parte de cualquier usuario. Por contra, es probable que aparezcan muchas aplicaciones de baja calidad.</span></p><p style="color: rgb(102, 51, 102); font-family: georgia;"><span style="font-size:85%;">Personalmente opino que Google App Inventor se puede comparar (hasta cierto punto) con la aparición de los blogs. Parte de los periodistas profesionales se quejaban de que se generaba mucha información de baja calidad. Y es cierto. Pero tambien han aparecido blogs amateurs de gran nivel y con información relevante que todos consultamos practicamente a diario y que se han convertido en una referencia.</span></p><p style="color: rgb(102, 51, 102); font-family: georgia;"><span style="font-size:85%;">Como programador, me parece una herramienta muy interesante. Cualquier herramienta que fomenta la creatividad y hace más sencillo plasmar las ideas en una aplicación real debe ser bienvenida.</span></p><p style="color: rgb(102, 51, 102); font-family: georgia;"><span style="font-size:85%;">¿Va a dejar esto fuera de juego a los desarrolladores de Android? Al contrario. Si un usuario tiene una idea, va a poder crear una aplicación mediante Google App Inventor. Las buenas ideas tendrán cierto éxito y el siguiente paso lógico es mejorar la aplicación. Ahí si será imprescindible un desarrollador profesional.</span></p><p style="color: rgb(102, 51, 102); font-family: georgia;"><span style="font-size:85%;">A largo plazo el resultado será un gran número de apps sin mayor utilidad (basura). Y de entre estas, un grupo de apps novedosas y con éxito que habrán nacido gracias una buena idea que pudo ver la luz mediante <strong>App Inventor</strong>. Viva la creatividad, viva internet.</span></p>Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com1tag:blogger.com,1999:blog-7784620911335545755.post-3196975904460819992010-11-04T08:05:00.000-07:002010-11-04T08:06:51.065-07:00Instalacion Ruby on RailsSubire estos links por si estan interesados o en un futuro llegan a utilizar Ruby on Rails<br /><p><strong>Instalación:</strong></p> <p>GNU/Linux: <a href="http://blog.railes.net/2006/06/04/instalar-ruby-y-rails-en-ubuntu-606-dapper-drake/">en Ubuntu Dapper</a>, <a href="http://rubisobrerieles.blogspot.com/2006/01/instalacin-sencilla-y-rpida-para.html">en Fedora</a>, <a href="http://wiki.rubyonrails.org/rails/pages/RailsOnSUSE">en SuSE</a>.<br />Mac: <a href="http://wiki.rubyonrails.com/rails/pages/HowtoInstallOnOSXTiger">en OS X Tiger, </a><a href="http://hivelogic.com/articles/2005/12/01/ruby_rails_lighttpd_mysql_tiger">aqui también</a><br />Windows: <a href="http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html">Paso a paso</a> en inglés (recomendado), <a href="http://maximoperez.com/blog/archivos/381/instalando-ruby-rails-en-windows/">en español</a> o tambien puedes descargarte <a href="http://instantrails.rubyforge.org/wiki/wiki.pl">un instalador</a> (Ruby on Rails + Servidor Web + MySQL).</p> <p> <strong>Descarga, docs, wiki y listas de correo:</strong></p> <p><a href="http://www.rubyonrails.org/">Ruby on Rails (en inglés)</a>, desde aquí podrás descargarlo. Wiki y lista de correo.<br /><a href="http://www.rubyonrails.org.es/">Ruby on Rails (en castellano)</a>, menos completo -por ahora-)</p> <p> <strong>Cursos y tutoriales online:</strong></p> <p><a href="http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html">Rolling with Ruby on Rails (Paso a paso de instalación y primeros pasos.</a><br /><a href="http://poignantguide.net/ruby/index.html">Why’s (Pougnaint) guide to Ruby</a>, divertido libro para aprender Ruby on Rails.<br /><a href="http://sitekreator.com/satishtalim/index.html">Come Learn Ruby with Satish Talim</a>, tutorial a modo de apuntes.</p> <p> <strong>Libros mas recomendados:</strong></p> <p><a href="http://www.pragmaticprogrammer.com/titles/rails/index.html">Agile Web Development with Rails</a>, el mejor para mi gusto. De pago, puedes comprarlo en formato PDF o papel.<br /><a href="http://pragmaticprogrammer.com/titles/fr_rr/">Rails Recipes</a>, también de pago.</p>Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com1tag:blogger.com,1999:blog-7784620911335545755.post-52460806682115058772010-11-04T07:58:00.000-07:002010-11-04T08:01:11.218-07:00Introduccion a Ruby on Rails<h3 style="font-weight: normal;"><span style="font-size:85%;">En esta entrada pondre una introduccion a lo que es un nuevo lenguaje Ruby, el cual tambien esta relacionado con java, espero les sirva y guste.</span></h3><span style="font-size:85%;">Saludos</span><br /><br /><h3>¿Qué es Ruby?</h3><span style="text-decoration: underline;"></span>Ruby es un lenguaje de scripts, multiplataforma, netamente orientado a objetos es software libre, fue creado por Yukihiro Matsumoto conocido como Matz. La primera versión fue liberada en 1995, hereda varias caracaterísticas de lenguajes como: Perl, Smalltalk, Eiffel, Ada y Lisp. Como lo indica su propio autor, es un lenguaje “aparentemente sencillo pero internamente complejo”. <p>Esto quiere decir que mientras más nos abstraemos en el paradigma orientado a objetos notaremos realmente la complejidad del lenguaje (al menos fue mi caso, ya que vengo de lenguajes estructurados y orientados a eventos); lo considero un lenguaje muy intuitivo casi a un nivel de lenguaje humano. </p> <p>Ruby fue diseñado para un desarrollo rápido y sencillo. Cada día este lenguaje va ganando más adeptos, tanto así que la empresa Sun Mirosystems, está apoyando un proyecto llamado Jruby que es un interprete de Ruby escrito 100% en Java. </p> <p>Entre las carecterísticas del lenguaje se encuentran:</p> <ul><li>Posibilidad de hacer llamadas directamente al sistema operativo.</li><li>Muy potente para el manejo de cadenas y expresiones regulares.</li><li>No se necesita declarar las variables.</li><li>La sintaxis es simple y consistente.</li><li>Gestión de memoria automática.</li><li>Todo es un objeto.</li><li>Métodos Singleton.</li><li>un largo. </li></ul> <p>Muy bien, hasta aquí creo que tenemos una visión básica de lo que es Ruby.</p><h3>¿Qué es Rails?<span style="text-decoration: underline;"></span></h3><h3><span style="text-decoration: underline;"></span><span style="font-weight: normal;font-size:100%;" >Rails es un framework para el desarrollo de aplicaciones web, software libre por naturaleza, está basado en el patrón de diseño Modelo Vista Controlador (MVC). Fue creado por David Heinemeier Hansson, empleado de la empresa 37signals.</span></h3> <p>Fue liberado por primera vez al público en julio del 2004, y lo implemento en una aplicación orientada a la administración de proyectos llamada Basecamp. Actualmente se uniéron más personas al desarrollo de Rails podemos visualizar aquí a los integrantes. Rails está basado en estos principios de desarrollo:</p> <ul><li>Don’t Repeat Yourself</li><li>Convention Over Configuration</li></ul>Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com0tag:blogger.com,1999:blog-7784620911335545755.post-40694024316399651052010-11-04T07:10:00.000-07:002010-11-04T07:56:01.652-07:00Tutorial Django<span style="font-family: georgia;font-size:85%;" >En esta entrada publicare un ejemplo para que se conozca mejor lo que es un</span><span style="font-family: georgia;font-size:85%;" >a aplicacion en Django. Espero les parez</span><span style="font-family: georgia;font-size:85%;" >ca interesante y en un futuro muy util.Saludos</span><span style="font-size:85%;"><br /></span><br /><h2 style="font-family: georgia;" id="Estructura"><span style="font-size:100%;">Estructura de (una aplicación) Django</span><br /></h2><span style="font-size:100%;"> </span> <p style="font-family: georgia;"><span style="font-size:85%;">Django distingue entre proyectos y aplicaciones. Un proyecto es un sitio web completo que constar de una o varias aplicaciones. Estas aplicaciones las proporciona Django o las escribe el desarrollador. El comando que crea un proyecto es <code>django-admin.py</code>. .</span><span style="font-size:85%;"> Simplemente, con <code>django-admin.py startproject miweb</code> se crea un directorio <code>miweb</code> que contiene varios ficheros <code>.py</code>: <code>__init__.py</code>, <code>manage.py</code>, <code>settings.py</code> y <code>urls.py</code>.</span></p> <ul style="font-family: georgia;"><li><span style="font-size:85%;"><code>__init__.py</code>: Define nuestro directorio como un módulo Python válido.</span> </li><li><span style="font-size:85%;"><code>manage.py</code>: Utilidad para gestionar nuestro proyecto: arrancar servidor de pruebas, sincronizar mod </span><span style="font-size:85%;">elos, etc.</span></li><li><span style="font-size:85%;"><code>settings.py</code>: Configuración del proyecto.</span></li><li><span style="font-size:85%;"><code>urls.py</code>: Gestión de las urls. Este fichero sería el controlador de la aplicación. Mapea las url entrantes a funciones Python definidas </span><span style="font-size:85%;">en módulos.</span> </li></ul><span style="font-size:85%;"> </span> <p style="font-family: georgia;"><span style="font-size:85%;">Para crear una aplicación nueva dentro del proyecto ejecutamos<code> python manage.py startapp miaplicacion</code>. Este comando crea el directorio <code>miaplicacion</code> y los ficheros <code>__init__.py</code>, <code>views.py</code>, y <code>models.py</code>.</span></p> <ul style="font-family: georgia;"><li><span style="font-size:85%;"><code>__init__.py</code>: Define nuestro directorio como un módulo Python válido.</span> </li><li><span style="font-size:85%;"><code>models.py</code>: Aquí se definen los modelos u objetos que serán mapeados a una base de datos</span> <span style="font-size:85%;"> relacional.</span></li><li><span style="font-size:85%;"><code>views.py</code></span><span style="font-size:85%;"><code></code>: Define las funciones que van a responder a las urls entrantes.</span> </li></ul> <p style="font-family: georgia;"><span style="font-size:85%;">Esto es un diseño MVC: modelo (<code>models.py</code>), vista (<code>views.py</code>), controlador(<code>urls.py</code>). </span></p> <p style="font-family: georgia;"><span style="font-size:85%;"><strong>Aclaración</strong>: los desarrolladores de Django llaman a su arquitectura MVT: Model - View - Template, ya que consideran que el controlador es el propio framework.</span></p> <span style="font-size:100%;"> </span><h2 style="font-family: georgia;" id="Nuestra"><span style="font-size:100%;">Aplicación web: Trivial trivial</span></h2><h2 style="font-family: georgia; font-weight: normal;" id="Nuestra"><span style="font-size:85%;"><span style="font-family:georgia;">Es un Trivial multiusuario..(es un juego de mesa donde el avance está determinado por la</span> </span><span style="font-size:85%;"><span style="font-family:georgia;"> habilidad del jugador para contestar pregun</span> tas sobre conocimientos generales)</span></h2><span style="font-size:85%;"> </span><p style="font-family: georgia;"><span style="font-size:85%;">Especificaciones:</span></p> <ul style="font-family: georgia;"><li><span style="font-size:85%;">Las preguntas y los usuarios los crea un administrador.</span></li><li><span style="font-size:85%;">Existen diferentes categorías de preguntas.</span> </li><li><span style="font-size:85%;">Cada usuario tiene su propio juego (esto es, responde a sus preguntas).</span></li><li><span style="font-size:85%;">Es obligatorio estar validado en el sistema para jugar.</span></li></ul><span style="font-size:85%;"><span style="font-family:georgia;">Como es una aplicación de prueba, usaremos</span> </span><span style="font-size:85%;"><span style="font-family:georgia;"> el servidor de desarrollo q</span> </span><span style="font-size:85%;"><span style="font-family:georgia;">ue viene con Djang</span> </span><span style="font-size:85%;"><span style="font-family:georgia;">o. Los ficheros estáticos (CSS, imágenes, etc) también los servirá Django,</span><span style="font-family:georgia;"> Como sistema relacional</span></span> <span style="font-size:85%;"><span style="font-family:georgia;"> usaremos sqlite </span><span style="font-family:georgia;"> (hay un "driver" para Python).</span><br /><br />el planteamiento de Django: el desarrollador define modelos, la herramienta se encarga de traducir estos modelos a SQL, pero hay un inconveniente: si los modelos cambian, hay que hacer el cambio manualmente en el esquema del sistema relacional.<br /><br /></span><p><span style="font-size:85%;">Tras esta breve disquisición, pasemos a definir los modelos. Encontramos las siguientes entidades:</span></p> <ul><li><span style="font-size:85%;">Usuario, caracterizado por un nombre, "login", contraseña, ...</span> </li><li><span style="font-size:85%;">Categoría</span></li><li><span style="font-size:85%;">Pregunta, con un título, conjunto de respuestas posibles, respuesta correcta, un gráfico asociado, ... </span></li><li><span style="font-size:85%;">Respuesta, asociada a un usuario concreto y una pregunta concreta, guardando el resultado (acierto/fallo), etc. </span></li></ul><span style="font-size:85%;"> <img src="file:///C:/Users/IAS09/AppData/Local/Temp/moz-screenshot.jpg" alt="" /></span><br /><h2 id="Creaci"><span style="font-size:100%;">Creación del proyecto y la aplicación</span><br /></h2> <span style="font-size:85%;"> Lo primero es crear el proyecto: <code>django-admin.py startproject Trivial<br /></code></span><p><span style="font-size:85%;">Ajustamos algunos parámetros en <code>settings.py</code> y <code>urls.py</code>. Habilitaremos la interfaz administrativa , el directorio desde el que se sirven los contenidos estáticos y algunos ajustes más.</span></p> <p><code>settings.py</code> (extracto):</p><br /><pre style="color: rgb(0, 102, 0);">MEDIA_ROOT = '/home/david/desarrollo/Trivial/site_media/'<br />MEDIA_URL = 'http://localhost:8000/site_media/'<br />ADMIN_MEDIA_PREFIX = '/media/'<br />INSTALLED_APPS = (<br />'django.contrib.auth',<br />'django.contrib.contenttypes',<br />'django.contrib.sessions',<br /></pre> <pre style="color: rgb(0, 102, 0);">'django.contrib.sites',<br /></pre> <pre style="color: rgb(0, 102, 0);">'django.contrib.admin',<br /></pre> <pre style="color: rgb(0, 102, 0);">'Trivial.juego',<br />)<br /><br /><code style="color: rgb(0, 0, 0);">urls.py</code><span style="color: rgb(0, 0, 0);"> (extracto):</span><br /></pre> <pre style="color: rgb(0, 102, 0);"><br />from settings import MEDIA_ROOT<br /></pre> <pre style="color: rgb(0, 102, 0);">urlpatterns = patterns('',<br />(r'^admin/', include('django.contrib.admin.urls')),<br /></pre> <pre style="color: rgb(0, 102, 0);">)<br />urlpatterns += patterns('django.views',<br />(r'^site_media/(.*)$', 'static.serve', {'document_root': MEDIA_ROOT}),<br /></pre> <pre style="color: rgb(0, 102, 0);">)<br /><br /></pre><p><span style="font-size:85%;">Cuando queramos pasar a producción, sólo tendremos que eliminar la última entrada en <code>urls.py</code></span></p> <p><span style="font-size:85%;"> y editar <code>MEDIA_URL</code> en <code>settings.py</code>.</span></p> <p> </p> <p><span style="font-size:85%;">También tenemos que crear la base de datos sqlite (comando<code> sqlite data/datos.db</code>).</span></p> <p><span style="font-size:85%;">Ahora, desde el directorio Trivial (directorio raíz) creamos la aplicación propiamente dicha (juego): <code>python manage.py startapp juego</code>.</span></p><br /><h2 id="Definiendo"><span style="font-size:100%;">Definiendo los modelos</span></h2> <span style="font-size:85%;">Editamos el fichero <code>juego/models.py</code> para definir nuestros objetos. Las clases que representan modelos deben heredar de la clase Model y</span> <p><span style="font-size:85%;"> siguen una sintaxis muy sencilla e intuitiva.</span></p> <p><span style="font-size:85%;">Django incorpora en el paquete <code>django.contrib.auth</code> todo un sistema de autentificación y gestión de usuarios, así que no vamos a reinventar la rueda y utilizaremos este sistema .</span></p> <p><span style="font-size:85%;">Estos son nuestros modelos:</span></p><br /><pre style="color: rgb(0, 102, 0);">from django.db import models<br />from django.contrib.auth.models import User<br /></pre> <pre style="color: rgb(0, 102, 0);"><br />class Usuario(User):<br />def __str__(self):<br /> return self.username<br /><br />class Admin:<br /></pre> <pre style="color: rgb(0, 102, 0);"> pass<br /></pre> <pre style="color: rgb(0, 102, 0);"><br />class Categoria(models.Model):<br />nombre = models.CharField("Categoría", maxlength=200)<br /></pre> <pre style="color: rgb(0, 102, 0);"><br />def __str__(self):<br /> return self.nombre<br /><br />class Admin:<br /></pre> <pre style="color: rgb(0, 102, 0);"> pass<br /><br /><br />class Pregunta(models.Model):<br /></pre> <pre style="color: rgb(0, 102, 0);"> categoria = models.ForeignKey(Categoria, verbose_na</pre> <pre style="color: rgb(0, 102, 0);">me="Categoría la que pertenece")<br />titulo = models.CharField("Título", maxlength=200)<br />texto = models.TextField("Texto de la pregunta")<br />respuesta_1 = models.CharField(maxlength=200)<br /></pre> <pre style="color: rgb(0, 102, 0);">respuesta_2 = models.CharField(maxlength=200)<br />respuesta_3 = models.CharField(maxlength=200)<br />respuesta_4 = models.CharField(maxlength=200)<br /></pre> <pre style="color: rgb(0, 102, 0);"> respuesta_correcta = models.CharField(maxlength=200)<br /></pre> <pre style="color: rgb(0, 102, 0);"> foto = models.CharField(maxlength=200)<br /><br />def __str__(self):<br /></pre> <pre style="color: rgb(0, 102, 0);"> return self.titulo<br /><br /></pre> <pre style="color: rgb(0, 102, 0);"> class Admin:<br /> pass<br /></pre> <pre style="color: rgb(0, 102, 0);"><br /><br />class Respuesta(models.Model):<br />tiempo = models.IntegerField("Tiempo en segs.")<br /></pre> <pre style="color: rgb(0, 102, 0);"> resultado = models.IntegerField("0 -> incorrecto, 1 -> correcto")<br />pregunta = models.ForeignKey(Pregunta, verbose_name="Pregunta que se responde")<br /></pre> <pre style="color: rgb(0, 102, 0);">usuario = models.ForeignKey(User, verbose_name="Usuario que responde")<br /></pre> <pre style="color: rgb(0, 102, 0);"><br />def __str__(self):<br /></pre> <pre style="color: rgb(0, 102, 0);"> return str(self.pregunta) + " (Usuario: " + str(self.usuario) + ")"<br /><br />class Admin:<br /> pass<br /></pre> <p><span style="font-size:85%;">Como decíamos antes, <i>"mejor explícito que implícito"</i>. Definimos un método <code>__str__</code> en todas las clases para tener una descripción "humana" de cada objeto, tanto a la hora de desarrollar como de gestionar en la interfaz administrativa. La clase anidada <code>Admin</code> sirve para que la clase madre aparezca en la interfaz administrativa.</span></p> <p><span style="font-size:85%;">La clase <b>Usuario</b> hereda directamente de la clase <b>User</b> de Django (<i>django.contrib.auth.models.User</i>).</span></p> <p><span style="font-size:85%;">Por último, haremos que Django sincronice la información que tiene de los modelos con el sistema relacional (vamos, que cree las tablas necesarias): <code>python manage.py syncdb</code> Este comando también creará las tablas necesarias para la aplicación administrativa y el sistema de gestión de<br />usuarios (de hecho nos pedirá los datos necesarios para crear un "superusuario"). Si arrancamos el servidor y apuntamos nuestro navegador a <code>http://localhost:8000/admin/</code> veremos en marcha la interfaz de administración:</span></p> <h2 style="font-family: georgia;" id="Estructura"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbc5i8Lqtkf0YzJ3LAfKAFkbcQAfWQJZ9lE9Umnb1GnaI5Uohij6mM6TSNDIWmHFQe1s4iyUHfQw-41m3sCill5aAUf9ZqMsLWktKvQ5Ch_qjWlAxTRqE3w59zGuObhLvsnqsgM1fyQtfg/s1600/admin1.png"><img style="cursor: pointer; width: 200px; height: 118px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbc5i8Lqtkf0YzJ3LAfKAFkbcQAfWQJZ9lE9Umnb1GnaI5Uohij6mM6TSNDIWmHFQe1s4iyUHfQw-41m3sCill5aAUf9ZqMsLWktKvQ5Ch_qjWlAxTRqE3w59zGuObhLvsnqsgM1fyQtfg/s200/admin1.png" alt="" id="BLOGGER_PHOTO_ID_5535701313837811602" border="0" /></a></h2><span style="font-size:85%;"> Lo primero que hemos hecho ha sido crear un grupo (Concursantes) y asignarle el permiso de "crear objetos del tipo Respuesta". Después creamos unos cuantos usuarios y les hacemos miembros del grupo. Ya tenemos un sistema de control de acceso, permisos bastante granulares (estos usuarios sólo podrán crear objetos del tipo Respuesta, pero no modificarlos o borrarlos) sin escribir nada de código.</span><br /><br /><h2 id="Siguente"><span style="font-size:100%;">Siguente: implementando la autentificación</span></h2> <p><span style="font-size:85%;">El siguiente paso es relativamente sencillo si utilizamos las facilidades que Django nos proporciona. El decorador <code>@login_required</code> en el paquete <b>django.contrib.auth.decorators</b><br /><i>template</i> de validación (registration/login.html por defecto): funciona de la siguiente manera : si el usuario no está autentificado, redirige a una plantilla o</span></p><h2 style="font-family: georgia;" id="Estructura"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihH6z8EDzWV9cBzO3raswDy2AG8MkjUOz-0zl8k5NgWyGaYa1qPITU1QNyNi9cq8g6TqkdqSvgQ5Pmv7Fof4diWg5imgFfuFbClxu2hzl-PCVVXeizM9AWsKebI3woHUsyGtUc3E_UU_Re/s1600/login.png"><img style="cursor: pointer; width: 200px; height: 117px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihH6z8EDzWV9cBzO3raswDy2AG8MkjUOz-0zl8k5NgWyGaYa1qPITU1QNyNi9cq8g6TqkdqSvgQ5Pmv7Fof4diWg5imgFfuFbClxu2hzl-PCVVXeizM9AWsKebI3woHUsyGtUc3E_UU_Re/s200/login.png" alt="" id="BLOGGER_PHOTO_ID_5535702263295373106" border="0" /></a></h2> <p><span style="font-size:85%;">Si está autentificado, la función "decorada" ( <code>index</code> en este caso) se ejecuta normalmente.</span></p> <p><span style="font-size:85%;">La primera pantalla que queremos que el usuario autenfificado vea es un listado de preguntas clasificado por categorías. Éste sería nuestro "index.html", pero, como hemos dicho, queremos que el usuario se valide antes. Veamos cómo hacerlo.</span></p> <p>En <code>urls.py</code> añadimos una entrada para "mapear" la dirección "<b>/</b>" (raíz del sitio) a la función</p> <p> "<code>index</code>" en <code>views.py</code>:</p> <p><code>urls.py</code> (extracto):</p><pre><span style="color: rgb(0, 102, 0);">from settings import MEDIA_ROOT</span><br /><span style="color: rgb(0, 102, 0);">urlpatterns = patterns('',</span><br /><span style="color: rgb(0, 102, 0);"> </span><strong style="color: rgb(0, 102, 0);">(r'^/?$', 'Trivial.juego.views.index'),</strong><br /><span style="color: rgb(0, 102, 0);"> (r'^admin/', include('django.contrib.admin.urls')),</span><br /><span style="color: rgb(0, 102, 0);">)</span></pre><h2 style="font-family: georgia;" id="Estructura"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHVrKvQOKEsvBRxk66OO2Ew5oGIhsB7U357iQIYgebSG_8lWEkARQzRXcjg2vb6AnGIv5gk1spNaPfHs7sJS7GJApSC-w3VIw2BnVgJKg8UfvrJF5HXMuCq3xCjqx2iRey3RRtcmt9x9kp/s1600/pregunta-respondida.png"><img style="cursor: pointer; width: 200px; height: 143px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHVrKvQOKEsvBRxk66OO2Ew5oGIhsB7U357iQIYgebSG_8lWEkARQzRXcjg2vb6AnGIv5gk1spNaPfHs7sJS7GJApSC-w3VIw2BnVgJKg8UfvrJF5HXMuCq3xCjqx2iRey3RRtcmt9x9kp/s200/pregunta-respondida.png" alt="" id="BLOGGER_PHOTO_ID_5535704689043705106" border="0" /></a></h2> <pre><br /><span style="color: rgb(0, 102, 0);">urlpatterns += patterns('django.views',</span><br /><br />Y nuestra función en<br /><code>views.py</code> sería algo así:<br />(r'^site_media/(.*)$', 'static.serve', {'document_root': MEDIA_ROOT}),<br /><span style="color: rgb(0, 102, 0);">@login_required</span><br /><span style="color: rgb(0, 102, 0);">def index(request):</span><br /><span style="color: rgb(0, 102, 0);"> categorias = Categoria.objects.all()</span><br /><span style="color: rgb(0, 102, 0);"> preguntas = Pregunta.objects.all()</span></pre> <pre><br /><span style="color: rgb(0, 102, 0);"> respuestas = Respuesta.objects.filter(usuario=request.user)</span><br /><span style="color: rgb(0, 102, 0);"> return render_to_response('index.html', </span><br /><span style="color: rgb(0, 102, 0);"> {'categorias': categorias,</span><br /><span style="color: rgb(0, 102, 0);"> 'preguntas': preguntas,</span><br /><span style="color: rgb(0, 102, 0);"> 'respuestas': respuestas,</span><br /><span style="color: rgb(0, 102, 0);"> 'usuario': request.user,}<br /><br /> )<br /><span style="font-size:100%;"><br /></span></span><span style="font-size:100%;">¿Qué hace este <code>index</code>? Recoge todas las categorías, preguntas<br /></span></pre> <pre><span style="font-size:100%;">y respuestas del usuario validado y se las "pasa" a una plantilla o<br /><i>template</i> llamada "<code>index.html</code>". También le pasa los datos<br />del usuario (<i>request.user</i>). Como hemos especificado que hay un login<br />previo, podemos estar seguros de que esta variable "usuario" tiene datos<br />correctos.</span><br /></pre><pre style="color: rgb(0, 102, 0);">{% extends "base.html" %}<br /><br />{% block cuerpo %}<br /><br /><strong>Listado de preguntas</strong><br /></pre> <pre style="color: rgb(0, 102, 0);">{% if categorias %}<br /> {% regroup preguntas by categoria as agrupado %}<br /> <ul><br /> {% for grupo in agrupado %}<br /> </ul></pre> <pre style="color: rgb(0, 102, 0);"><ul><li>{{ grupo.grouper }}</li><br /> <ul><br /> {% for item in grupo.list %}<br /> <li><a href="http://www.blogger.com/pregunta/%7B%7Bitem.id%7D%7D/">{{ item.titulo }}</a><br /><br /> {% for r in respuestas %}<br /><br /> {% ifequal item r.pregunta %}<br /> La pregunta ya ha sido respondida.<br /> {% endifequal %}<br /> {% endfor %}<br /> </li><br /> {% endfor %}<br /></ul></ul><br /><br /><ul><ul> </ul><br /> {% endfor %}<br /></ul><br /><br /><ul> </ul><br />{% else %}<br /><br /><br /> <p>No hay categorías</p><br /><br />{% endif %}<br /><br /><p><a href="http://www.blogger.com/accounts/logout/">Desconectar</a></p><br /><br /><br />{% endblock %}</pre> <p style="color: rgb(0, 0, 0);"><img src="file:///C:/Users/IAS09/AppData/Local/Temp/moz-screenshot-1.jpg" alt="" /><img src="file:///C:/Users/IAS09/AppData/Local/Temp/moz-screenshot-2.jpg" alt="" /><img src="file:///C:/Users/IAS09/AppData/Local/Temp/moz-screenshot-3.jpg" alt="" /><img src="file:///C:/Users/IAS09/AppData/Local/Temp/moz-screenshot-4.jpg" alt="" /></p><pre style="color: rgb(0, 0, 0);"><span style="font-size:100%;">en este <i>template</i> comprobamos si hay categorías <code>{% if<br />categorias %}</code> y mostramos en forma de listas anidadas todas las<br />preguntas de cada categoría con la etiqueta <code>{% regroup preguntas by<br />categoria as agrupado %}</code> y lo que sigue. Para cada pregunta<br />comprobamos si tiene una respuesta asociada:</span></pre><pre style="color: rgb(0, 102, 0);">{% for r in respuestas %}<br />{% ifequal item r.pregunta %}<br /> La pregunta ya ha sido respondida.<br />{% endifequal %}<br />{% endfor %}<br /><br /></pre><p><span style="font-size:85%;">En este template también estamos utilizando una característica muy útil: la herencia de plantillas. En una plantilla aparte ( <code>base.html</code>) definimos un esqueleto con unos bloques de</span></p><p><span style="font-size:85%;"> contenido que cada una de las plantillas "hijas" se encarga de completar con <code>{% block loquesea %}</code></span></p> <p><span style="font-size:85%;">Así quedaría nuestra pantalla inicial:</span></p><pre style="color: rgb(0, 0, 0);"><pre style="color: rgb(0, 102, 0);"><pre style="color: rgb(0, 102, 0);"><pre style="color: rgb(0, 102, 0);"><pre style="color: rgb(0, 102, 0);"><h2 style="font-family: georgia;" id="Estructura"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKx991l_oFYOPeIj_6IJnafW5NNJ9yXvjhhhCLYF0z_WmgtDuLcOv-ihvtSn_S0BkfWLdJmWcXupCrOep2nl6xuOH_jdKrlfx9v28xION_REu19IycplgRIAW7RziMPGhY136HicLDWx2-/s1600/pantalla-index.png"><img style="cursor: pointer; width: 200px; height: 192px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKx991l_oFYOPeIj_6IJnafW5NNJ9yXvjhhhCLYF0z_WmgtDuLcOv-ihvtSn_S0BkfWLdJmWcXupCrOep2nl6xuOH_jdKrlfx9v28xION_REu19IycplgRIAW7RziMPGhY136HicLDWx2-/s200/pantalla-index.png" alt="" id="BLOGGER_PHOTO_ID_5535703470081309634" border="0" /></a></h2></pre></pre></pre></pre></pre> <h2 id="Formulario"><span style="font-size:100%;">Formulario de preguntas</span></h2> <p><span style="font-size:85%;">Cuando el usuario sigue el enlace (<code><a href="http://www.blogger.com/pregunta/%7B%7Bitem.id%7D%7D/">{{ item.titulo }}</a></code>) que presenta cada pregunta en la plantilla <code>index.html</code> se le dirige a la página que llamaremos "ficha de pregunta". Estas son las modificaciones que hemos introducido:</span></p> <p><code>urls.py</code> (extracto):</p> <pre style="color: rgb(0, 102, 0);">urlpatterns = patterns('',<br />(r'^/?$', 'Trivial.juego.views.index'),<br /><b>(r'^pregunta/(\d+)/$', 'Trivial.juego.views.pregunta'),</b><br />(r'^admin/', include('django.contrib.admin.urls')),<br />)</pre> <p>En <code>views.py</code> definimos la función "pregunta":</p> <pre style="color: rgb(0, 102, 0);">from django.shortcuts import render_to_response<br />from django.contrib.auth.decorators import login_required<br />from Trivial.juego.models import Pregunta, Respuesta<br />@login_required<br />def pregunta(request, id):<br /> pregunta = Pregunta.objects.get(id=id)<br /> try:<br /> respuesta = Respuesta.objects.get(pregunta=id, usuario=request.user)<br /> except ObjectDoesNotExist:<br /> respuesta = None<br /> return render_to_response('pregunta.html',<br /> {'pregunta': pregunta,<br /> 'respuesta': respuesta,<br /> 'tiempo': str(int(time.time())),<br /> }<br /> )</pre> <p><span style="font-size:85%;">A la función <code>pregunta</code> le llegan dos argumentos: <code>request</code> e <code>id</code>, tal y como se define en <code>urls.py</code>. Lo primero que hacemos es buscar la pregunta correspondiente (<code>pregunta = Pregunta.objects.get(id=id)</code>) y luego buscamos la posible respuesta que haya podido hacer el usuario en una anterior visita (<code>respuesta = Respuesta.objects.get(pregunta=id, usuario=request.user)</code>). Si no hay respuestas capturamos la excepción, asignamos None a la respuesta y seguimos.</span></p> <p><span style="font-size:85%;">Finalmente, ésta es la plantilla que muestra los datos de una pregunta, <code>pregunta.html</code>:</span></p> <pre><span style="color: rgb(0, 102, 0);">{% extends "base.html" %}</span> <span style="color: rgb(0, 102, 0);">{% block cuerpo %}</span> <span style="color: rgb(0, 102, 0);"> <h2><span style="font-size:85%;">Categoría: {{ pregunta.categoria </span></h2><h2><span style="font-size:85%;">{{ pregunta.titulo }</span></h2></span> <span style="color: rgb(0, 102, 0);"> {% if texto_error %}</span><span style="color: rgb(0, 102, 0);"> <p class="error">{{ texto_error }}</p></span> <span style="color: rgb(0, 102, 0);"> {% endif %}</span> <span style="color: rgb(0, 102, 0);"> </span><span style="color: rgb(0, 102, 0);"> <p>{{ pregunta.texto }}</p></span> <span style="color: rgb(0, 102, 0);"> {% if respuesta %}</span> <span style="color: rgb(0, 102, 0);"> <p>Ya has respondido antes a la pregunta.</p></span> <span style="color: rgb(0, 102, 0);"> <p>Tiempo empleado: {{ respuesta.tiempo }} segundos.</p></span> <span style="color: rgb(0, 102, 0);"> <p>El resultado fue </p></span> <span style="color: rgb(0, 102, 0);"> {% if respuesta.resultado %}</span> <span style="color: rgb(0, 102, 0);"> CORRECTO</span> <span style="color: rgb(0, 102, 0);"> {% else %}</span> <span style="color: rgb(0, 102, 0);"> INCORRECTO</span> <span style="color: rgb(0, 102, 0);"> {% endif %}</span> <span style="color: rgb(0, 102, 0);"> <p></p></span> <span style="color: rgb(0, 102, 0);"> {% else %}</span> <span style="color: rgb(0, 102, 0);"> <form method="post" action="/responder/"></form> <span style="color: rgb(0, 102, 0);"> <input name="pregunta" value="{{ pregunta.id }}" type="hidden"></span> <span style="color: rgb(0, 102, 0);"> <input name="tiempo" value="{{ tiempo }}" type="hidden"></span> <span style="color: rgb(0, 102, 0);"> <input value="{{ pregunta.respuesta_1 }}" type="radio"></span> <span style="color: rgb(0, 102, 0);"> name="respuesta">{{ pregunta.respuesta_1 }}<br /></span> <span style="color: rgb(0, 102, 0);"> <input value="{{ pregunta.respuesta_2 }}" type="radio"></span> <span style="color: rgb(0, 102, 0);"> name="respuesta">{{ pregunta.respuesta_2 }}<br /></span> <span style="color: rgb(0, 102, 0);"> <input value="{{ pregunta.respuesta_3 }}" type="radio"></span> <span style="color: rgb(0, 102, 0);"> name="respuesta">{{ pregunta.respuesta_3 }}<br /></span> <span style="color: rgb(0, 102, 0);"> <input value="{{ pregunta.respuesta_4 }}" type="radio"></span> <span style="color: rgb(0, 102, 0);"> name="respuesta">{{ pregunta.respuesta_4 }}<br /></span> <span style="color: rgb(0, 102, 0);"> <br /></span> <span style="color: rgb(0, 102, 0);"> </span> <span style="color: rgb(0, 102, 0);"> </span></span> <span style="color: rgb(0, 102, 0);"> {% endif %}</span> <span style="color: rgb(0, 102, 0);">{% endblock %}</span> <span style="font-size:85%;"><br /></span></pre><p><span style="font-size:85%;">Nos encontramos en esta plantilla con una variable (<code>texto_error</code>) que no hemos asignado desde la función <code>pregunta</code>. Esta variable puede tener un valor cuando esta plantilla es invocada desde otra función definida en <code>views.py</code> (<code>respuesta</code>). Lo veremos un poco más adelante.</span></p> <p><span style="font-size:85%;">Lo primero que comprobamos es si esta pregunta ya ha sido respondida. Si es así, la variable respuesta tendrá un valor distinto a None. En este caso informamos al usuario del resultado y el tiempo empleado en resolver la pregunta.</span></p><p><span style="font-size:85%;">si no hay respuesta, generamos un formulario con las posibles respuestas y dos campos ocultos con el id de la pregunta y una marca de tiempo. El formulario apunta a la url <code>/responder/</code></span></p><h2 id="Respondien"><span style="font-size:100%;">Respondiendo a la pregunta</span></h2> <p><span style="font-size:85%;">De nuevo, añadimos una regla al fichero <code>urls.py</code> para procesar las respuestas de los usuarios. El fichero quedaría así (versión final):</span></p> <span style="color: rgb(0, 102, 0);font-size:85%;" >from django.contrib.auth.views import login, logout from django.conf.urls.defaults import * from settings import MEDIA_ROOT urlpatterns = patterns('', (r'^/?$', 'Trivial.juego.views.index'), (r'^pregunta/(\d+)/$', 'Trivial.juego.views.pregunta'), <strong>(r'^responder/$', 'Trivial.juego.views.respuesta'),</strong> (r'^accounts/login/$', login), (r'^accounts/logout/$', logout, {'template_name': 'registration/logout.html' }), (r'^admin/', include('django.contrib.admin.urls')), ) urlpatterns += patterns('django.views', (r'^site_media/(.*)$', 'static.serve', {'document_root': MEDIA_ROOT}), )</span> <p><span style="font-size:85%;">La función nueva (respuesta) se define en <code>views.py</code> y es así:</span></p> <span style="font-size:85%;"><span style="color: rgb(0, 102, 0);">@login_required def respuesta(request): pregunta = Pregunta.objects.get(id=request.POST['pregunta']) if not request.POST.has_key('respuesta') or request.POST['respuesta'] == "": texto_error = "Debe elegir una opción" return render_to_response('pregunta.html', {'pregunta': pregunta, 'texto_error': texto_error, 'tiempo': str(int(time.time())), } ) else: opcion = request.POST['respuesta']; respuesta = Respuesta() respuesta.pregunta = pregunta respuesta.usuario = request.user respuesta.tiempo = int(time.time()) - int(request.POST['tiempo']) if pregunta.respuesta_correcta == opcion: respuesta.resultado = 1 else: respuesta.resultado = 0 respuesta.save() return render_to_response('respuesta.html', {'pregunta': pregunta, 'respuesta': respuesta, 'opcion': opcion, } )</span></span> <p><span style="font-size:85%;">Primero localizamos la pregunta (nos llega el <code>id</code> en la variable POST '<code>pregunta</code>'). Después comprobamos que han pulsado uno de los "radiobutton" de respuesta (<code>request.POST['respuesta']</code>). Si no han respondido, redirigimos de nuevo a la página de pregunta pasando un mensaje de error.</span></p><p><span style="font-size:85%;">Si han respondido, creamos un objeto Respuesta asociado a la pregunta y al usuario. También asignamos a esta respuesta el tiempo que se ha tardado en resolver la pregunta y el resultado. Después, redirigimos a la plantilla <code>'respuesta.html'</code> pasando el objeto pregunta, el objeto respuesta recién creado y la opción que habían seleccionado.</span></p> <p style="color: rgb(0, 102, 0);"><span style="font-size:100%;"><code>respuesta.html</code>:</span></p> <pre style="color: rgb(0, 102, 0);"><span style="font-size:100%;">{% extends "base.html" %}<br /><br />{% block cuerpo %}<br /><br /><h2>Resultado de la pregunta</h2><br /><h3>{{ pregunta.titulo }}</h3><br /><img class="foto" src="/site_media/{{ pregunta.foto }}" /><br /><br /><p>{{ pregunta.texto }}</p><br /><p>Respuesta seleccionada: {{ opcion }}</p><br /><p>Respuesta correcta: {{ pregunta.respuesta_correcta }}</p><br />{% if respuesta.resultado %}<br /><p>¡Enhorabuena!</p><br />{% else %}<br /><p>¡Has fallado!</p><br />{% endif %}<br /><p>Tiempo empleado: {{ respuesta.tiempo }} segundos.</p><br />{% endblock %}</span></pre> <p><span style="font-size:85%;">Sencillo, simplemente mostramos los datos del objeto respuesta, la pregunta asociada y lo que el usuario respondió.</span></p><pre style="color: rgb(0, 102, 0);"><br /></pre><h2 id="Conclusion"><span style="font-size:100%;">Conclusiones</span></h2> <ul><li><span style="font-size:85%;">Hemos hecho una aplicación web muy básica y sencilla, pero demuestra que muchas tareas complicadas y/o tediosas de implementar nos la proporciona la herramienta <strong>Django</strong>. La interfaz administrativa y el sistema de autentificación nos han salido "gratis". Probablemente, la implementación de estas dos funcionalidades nos hubiesen llevado bastante tiempo. </span></li><li><span style="font-size:85%;">Observamos también la extrema sencillez en el desarrollo: con cuatro elementos con unas funciones muy concretas (urls, modelos, vistas y plantillas) tenemos perfectamente separadas la lógica, los datos y la presentación. Compárese esta simplicidad con la típica aplicación J2EE, por sencilla que sea. No hay color. Que las soluciones basadas en J2EE sean más "potentes", escalables, robustas, etc. no lo voy a negar. Pero, ¿acaso se necesita siempre esa "potencia"?. </span></li><li><span style="font-size:85%;">No hemos desarrollado una aplicación similar con Rails, por lo que no sería muy justo decir que Django es más fácil o mejor. Lo que si que podemos decir, por lo que hemos visto y leído es que Django aporta varias características que ahorran mucho trabajo, en este caso la interfaz administrativa y el sistema de autentificación</span></li></ul><pre style="color: rgb(0, 102, 0);"><br /></pre>Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com4tag:blogger.com,1999:blog-7784620911335545755.post-40910138328052571072010-11-04T06:55:00.000-07:002010-11-04T07:09:00.477-07:00django<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3FDdWqDajQbbXII2F62WYTx1boa6FLpLHsBfD23i6irRHfIhNH3LJXhzU405tejeXuNInStCI2yrf6G0NdUqBW-AM4vPcTfJXS0IPdbUofPAF2vZYzPZJPniTHq-x6xvanjx0ndLZo9Yy/s1600/1+django.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 120px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3FDdWqDajQbbXII2F62WYTx1boa6FLpLHsBfD23i6irRHfIhNH3LJXhzU405tejeXuNInStCI2yrf6G0NdUqBW-AM4vPcTfJXS0IPdbUofPAF2vZYzPZJPniTHq-x6xvanjx0ndLZo9Yy/s200/1+django.jpg" alt="" id="BLOGGER_PHOTO_ID_5535694340721272642" border="0" /></a><br /><b>Django</b> es un framework de desarrollo web de codigo abierto, escrito en Python , que cumple en cierta medida el paradigma del Modelo de Vista Controlador . Fue desarrollado en origen para gestionar varias páginas orientadas a noticias de la World Company de Lawrence, Kansas, y fue liberada al público bajo una Licencia BSD en julio de 2005 ; el framework fue nombrado en alusión al guitarrista de jazz gitano Django Reinhardt En Junio del 2008 fue anunciado que la recién formada Django Software Foundation se hará cargo de Django en el futuro. La versión estable (a mayo de 2010) es la 1.2. <p>La meta fundamental de Django es facilitar la creación de sitios web complejos. Django pone énfasis en el re-uso, la conectividad y extensibilidad de componentes, del desarrollo rápido y del principio de DRY (del inglés <i>Don't Repeat Yourself</i>). Python es usado en todas las partes del framework, incluso en configuraciones, archivos, y en los modelos de datos.</p><br /><p><br /></p>Caracteristicas<br /><p>Al igual que Ruby on Rails , otro popular framework de código abierto, Django se usó en producción durante un tiempo antes de que se liberara al público; fue desarrollado por Adrian Holovaty, Simon Willison, Jacob Kaplan-Moss y Wilson Miner mientras trabajaban en World Online, y originalmente se utilizó para administrar tres sitios web de noticias: The LAwrence Jorunal-World, Lawrence.com y KUsports.com <span style="text-decoration: underline;">.</span></p> <p>Los orígenes de Django en la administración de páginas de noticias son evidentes en su diseño, ya que proporciona una serie de características que facilitan el desarrollo rápido de páginas orientadas a contenidos. Por ejemplo, en lugar de requerir que los desarrolladores escriban controladores y vistas para las áreas de administración de la página, Django proporciona una aplicación incorporada para administrar los contenidos, que puede incluirse como parte de cualquier página hecha con Django y que puede administrar varias páginas hechas con Django a partir de una misma instalación; la aplicación administrativa permite la creación, actualización y eliminación de objetos de contenido, llevando un registro de todas las acciones realizadas sobre cada uno, y proporciona una interfaz para administrar los usuarios y los grupos de usuarios (incluyendo una asignación detallada de permisos).</p> <p>La distribución principal de Django también aglutina aplicaciones que proporcionan un sistema de comentarios, herramientas para sindicar contenido via RSS y/o Atom , "páginas planas" que permiten gestionar páginas de contenido sin necesidad de escribir controladores o vistas para esas páginas, y un sistema de redirección de URLs.</p> <p>Otras características de Django son:</p> <ul><li>Un mapeador objeto-relacional. <a href="http://es.wikipedia.org/wiki/ORM" title="ORM" class="mw-redirect"><br /></a></li><li>Aplicaciones "enchufables" que pueden instalarse en cualquier página gestionada con Django.</li><li>Una API de base de datos robusta. </li><li>Un sistema incorporado de "vistas genéricas" que ahorra tener que escribir la lógica de ciertas tareas comunes.</li><li>Un sistema extensible de plantillas basado en etiquetas, con herencia de plantillas.</li><li>Un despachador de URLs basado en expresiones regulares .</li><li>Un sistema "middleware" para desarrollar características adicionales; por ejemplo, la distribución principal de Django incluye componentes middleware que proporcionan cacheo , compresión de la salida, normalizacion de URLs, protección CSRF y soporte de sesiones.</li><li>Soporte de internacionalización, incluyendo traducciones incorporadas de la interfaz de administración.</li><li>Documentación incorporada accesible a través de la aplicación administrativa (incluyendo documentación generada automáticamente de los modelos y las bibliotecas de plantillas añadidas por las aplicaciones).</li></ul>Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com0tag:blogger.com,1999:blog-7784620911335545755.post-40379822737989996302010-11-04T06:30:00.000-07:002010-11-04T06:40:01.050-07:00Google App Engine<p style="font-family: georgia; color: rgb(102, 51, 102);">Encontre este documento en la web el cual me parecio verdaderamente util e interesante.</p><p style="font-family: georgia; color: rgb(102, 51, 102);">Espero les sirve y les Guste.<br /></p><p style="font-family: georgia; color: rgb(102, 51, 102);"><br /></p><p style="font-family: georgia; color: rgb(102, 51, 102);">Google App Engine te permite ejecutar tus aplicaciones web en la infraestructura de Google. Las aplicaciones App Engine son fáciles de crear, mantener y actualizar al ir aumentando el tráfico y las necesidades de almacenamiento de datos. Con App Engine, no necesitarás utilizar ningún servidor: sólo tendrás que subir tu aplicación para que tus usuarios puedan empezar a utilizarla.</p> <p style="font-family: georgia; color: rgb(102, 51, 102);">Puedes proporcionar a tu aplicación tu propio nombre de dominio (como por ejemplo <code>http://www.example.com/</code>) a través de Google Apps . También puedes proporcionar a tu aplicación un nombre gratuito del dominio <code>appspot.com</code>. Podrás compartir tu aplicación con todo el mundo o limitar el acceso a los miembros de tu organización.</p> <p style="font-family: georgia; color: rgb(102, 51, 102);">Google App Engine admite aplicaciones escritas en varios lenguajes de programación. Gracias al entorno de tiempo de ejecución Java de App Engine puedes crear tu aplicación a través de tecnologías Java estándar, que incluyen JVM, servlets Java y el lenguaje de programación Java o cualquier otro lenguaje que utilice un intérprete o compilador basado en JVM como, por ejemplo, JavaScript o Ruby. App Engine también ofrece un entorno de tiempo de ejecución Python dedicado, que incluye un rápido interprete Python y la biblioteca estándar Python. Los entornos de tiempo de ejecución Java y Python se generan para garantizar que tu aplicación se ejecuta de forma rápida, segura y sin interferencias de otras aplicaciones en el sistema.</p> <p style="font-family: georgia; color: rgb(102, 51, 102);">Con App Engine, sólo pagas lo que utilizas. No existen costes de configuración ni tarifas recurrentes. Los recursos que utiliza tu aplicación, como por ejemplo el almacenamiento y el ancho de banda, se miden por gigabytes y se facturan según competitivas tarifas. Controlas la cantidad máxima de recursos que consume tu aplicación, de modo que siempre permanezcan dentro de tu presupuesto.</p> <p style="font-family: georgia; color: rgb(102, 51, 102);">Puedes empezar a utilizar App Engine de forma totalmente gratuita. Todas las aplicaciones pueden utilizar hasta 500 MB de almacenamiento y suficiente CPU y ancho de banda como para permitir un servicio eficaz de la aplicación de alrededor de 5 millones de visitas a la página al mes, totalmente gratuitas. Cuando habilitas la facturación para tu aplicación, se incrementan tus límites gratuitos y sólo pagas aquellos recursos que utilices por encima de los niveles gratuitos.</p><h2 style="font-family: georgia; color: rgb(102, 51, 102);" id="The_Application_Environment">El entorno de aplicación</h2><br /><p style="font-family: georgia; color: rgb(102, 51, 102);">Google App Engine permite desarrollar fácilmente aplicaciones que se ejecuten de forma fiable, incluso con pesadas cargas de trabajo y grandes cantidades de datos. App Engine incluye las siguientes funciones:</p> <ul style="font-family: georgia; color: rgb(102, 51, 102);"><li>servidor web dinámico, totalmente compatible con las tecnologías web más comunes,</li><li>almacenamiento permanente con funciones de consulta, orden y transacciones,</li><li>escalado automático y balanceo de carga,</li><li>API para autenticar usuarios y enviar correo electrónico a través de las cuentas de Google,</li><li>un completo entorno de desarrollo local que simula Google App Engine en tu equipo,</li><li>tareas programadas para activar eventos en momentos determinados y en intervalos regulares.</li></ul> <p style="font-family: georgia; color: rgb(102, 51, 102);">Tu aplicación se puede ejecutar en uno de los dos entornos de tiempo de ejecución: el entorno <span style="text-decoration: underline;">Java</span> y el entorno <span style="text-decoration: underline;">Python</span>. Cada entorno proporciona protocolos estándar y tecnologías comunes para el desarrollo de aplicaciones web.</p><h3 style="font-family: georgia; color: rgb(102, 51, 102);">La zona de pruebas</h3> <p style="font-family: georgia; color: rgb(102, 51, 102);">Las aplicaciones se ejecutan en un entorno seguro que proporciona acceso limitado al sistema operativo subyacente. Estas limitaciones permiten a App Engine distribuir solicitudes web de la aplicación en varios servidores e iniciar y detener los servidores según las demandas del tráfico. La zona de pruebas aísla la aplicación en su propio entorno seguro de confianza, totalmente independiente del hardware, el sistema operativo y la ubicación física del servidor web.</p> <p style="font-family: georgia; color: rgb(102, 51, 102);">Algunos ejemplos de las limitaciones del entorno seguro de la zona de pruebas son:</p><p style="font-family: georgia; color: rgb(102, 51, 102);"> </p><ul style="font-family: georgia; color: rgb(102, 51, 102);"><li>Una aplicación sólo podrá acceder a otros equipos de Internet a través de los servicios de correo electrónico y extracción de URL proporcionados. Otros equipos sólo se podrán conectar a la aplicación mediante solicitudes HTTP (o HTTPS) en los puertos estándar.</li><li>Una aplicación no podrá escribir en el sistema de archivos. Una aplicación podrá leer archivos, pero sólo aquéllos subidos con el código de la aplicación. La aplicación deberá utilizar el almacén de datos de App Engine, Memcache u otros servicios para todos los datos que permanezcan entre las solicitudes.</li><li>El código de aplicación sólo se ejecuta en respuesta a una solicitud web o a una tarea cron y debe devolver datos de respuesta en un período de 30 segundos en cualquier caso. Un controlador de solicitudes no podrá generar un subproceso ni ejecutar código después de haber enviado la respuesta.</li></ul><br /><h3 style="font-family: georgia; color: rgb(102, 51, 102);">El entorno de tiempo de ejecución Java</h3> <p style="font-family: georgia; color: rgb(102, 51, 102);">Puedes desarrollar tu aplicación para el entorno de tiempo de ejecución Java a través de herramientas de desarrollo web Java y de estándares del API comunes. Tu aplicación interactúa con el entorno a través del estandar JAva Servlet y puede utilizar tecnologías de aplicación web comunes como por ejemplo JavaServer Pages (JSP).</p> <p style="font-family: georgia; color: rgb(102, 51, 102);">El entorno de tiempo de ejecución Java utiliza Java 6. El kit de desarrollo de software (SDK) Java de App Engine admite las aplicaciones de desarrollo que utilizan tanto Java 5 como 6.</p> <p style="font-family: georgia; color: rgb(102, 51, 102);">El entorno incluye la plataforma 6 de entorno de tiempo de ejecucion de Java (JRE) SE y bibliotecas. Las restricciones del entorno de la zona de pruebas se implementan en JVM. Una aplicación puede utilizar cualquier código de bytes de JVM o función de biblioteca, siempre que no exceda las restricciones de la zona de pruebas. Por ejemplo, si un código de bytes intenta abrir un conector o escribir en un archivo, aparece una excepción de tiempo de ejecución.</p> <p style="font-family: georgia; color: rgb(102, 51, 102);">Tu aplicación accede a la mayoría de los servicios de App Engine a través de las API estándar de Java. Para el almacén de datos de App Engine, el SDK Java incluye implementaciones de la interfaz de Objetos de datos de Java (JDO) y de la interfaz del API de persistencia de JAVA <a href="http://java.sun.com/developer/technicalArticles/J2EE/jpa/"></a> (JPA). Tu aplicación puede utilizar el API Java mail para enviar mensajes de correo electrónico con el servicio de correo electrónico de App Engine. Las API HTTP <code>java.net</code> acceden al servicio de extracción de URL de App Engine. App Engine también incluye las API de nivel inferior para sus servicios para implementar adaptadores adicionales o para su uso directo desde la aplicación. Consulta la documentación sobre las API del almacen de datos, memcache<span style="text-decoration: underline;"></span><span style="text-decoration: underline;"></span>, la extraccion de URL , el correo<span style="text-decoration: underline;"></span>, las imagenes y las cuentas de google.</p> <p style="font-family: georgia; color: rgb(102, 51, 102);">Normalmente, los desarrolladores de Java utilizan el lenguaje de programación Java y las API para implementar aplicaciones web para JVM. Gracias al uso de intérpretes o de compiladores compatibles con JVM, también puedes utilizar otros lenguajes para desarrollar aplicaciones web como, por ejemplo, JavaScript, Ruby o Scala.</p><br /><h3 style="font-family: georgia; color: rgb(102, 51, 102);">El entorno de tiempo de ejecución Python</h3> <p style="font-family: georgia; color: rgb(102, 51, 102);">Gracias al entorno de tiempo de ejecución Python, puedes implementar tu aplicación a través del lenguaje de programación Python y ejecutarla en un intérprete de Python optimizado. App Engine incluye varias API y herramientas para el desarrollo de aplicaciones web de Python, así como un API de modelado de datos detallados, un framework de aplicaciones web fácil de utilizar y herramientas para administrar y acceder a tus datos de la aplicación. También puedes beneficiarte de una amplia variedad de frameworks y bibliotecas avanzados para el desarrollo de aplicaciones web de Python, como por ejemplo Django <a href="http://www.djangoproject.com/"></a>.</p> <p style="font-family: georgia; color: rgb(102, 51, 102);">El entorno de tiempo de ejecución Python utiliza la versión 2.5.2. de Python. Estamos teniendo en cuenta una compatibilidad adicional con Python 3 para futuras versiones.</p> <p style="font-family: georgia; color: rgb(102, 51, 102);">El entorno Python incluye la biblioteca estandar de python<a href="http://docs.python.org/lib/lib.html"></a>. Por supuesto, no todas las funciones de biblioteca se pueden ejecutar en el entorno de la zona de pruebas. Por ejemplo, una llamada a un método que intenta abrir un conector o escribir en un archivo generará una excepción. Para comodidad del usuario, se han inhabilitado varios módulos de la biblioteca estándar cuyas funciones son incompatibles con el entorno de tiempo de ejecución y el código que los importe generará un error.</p> <p style="font-family: georgia; color: rgb(102, 51, 102);">El código de aplicación escrito para el entorno Python se debe escribir exclusivamente en Python. Las extensiones escritas en lenguaje C no son compatibles.</p> <p style="font-family: georgia; color: rgb(102, 51, 102);">El entorno Python proporciona varias API Python para servicios de almacen de datos, cuentas de google, extraccion de URL y correo electronico<a href="http://code.google.com/appengine/docs/python/mail/"></a>. App Engine también ofrece un sencillo framework para aplicaciones web Python denominado webapp que te permitirá empezar a crear aplicaciones fácilmente.</p> <p style="font-family: georgia; color: rgb(102, 51, 102);">Puedes subir otras bibliotecas de terceros con tu aplicación, siempre que estén implementadas únicamente en Python y no requieran ningún módulo incompatible de la biblioteca estándar.}</p><h3 style="font-family: georgia; color: rgb(102, 51, 102);">El almacén de datos</h3> <p style="font-family: georgia; color: rgb(102, 51, 102);">App Engine proporciona un potente servicio de almacenamiento de datos distribuido que incluye un motor de búsqueda y transacciones. A medida que el servidor web distribuido crece con el tráfico, el almacén de datos distribuido crece con los datos.</p> <p style="font-family: georgia; color: rgb(102, 51, 102);">El almacén de datos de App Engine no es como una base de datos relacional tradicional. Los objetos de datos, o "entidades", disponen de un tipo y un conjunto de propiedades. Las consultas pueden recuperar entidades de un tipo determinado filtradas y ordenadas según los valores de las propiedades. Los valores de las propiedades pueden ser de cualquiera de los tipos de valores de propiedades admitidos.</p> <p style="font-family: georgia; color: rgb(102, 51, 102);">Las entidades del almacén de datos son carecen de esquema. Tu código de aplicación se encarga de proporcionar y de respetar la estructura de las entidades de datos. Las interfaces JDO/JPA de Java y la interfaz del almacén de datos de Python incluyen características para aplicar y respetar la estructura de tu aplicación. Tu aplicación también puede acceder al almacén de datos de forma directa para aplicar mucho o poco la estructura que necesite.</p> <p style="font-family: georgia; color: rgb(102, 51, 102);">El almacén de datos es muy consistente y utiliza el contro de concurrencia optimista <a href="http://en.wikipedia.org/wiki/Optimistic_concurrency_control"></a>. Una entidad se actualizará si se intenta realizar una transacción un número determinado de veces y otros procesos están intentando actualizar la misma entidad al mismo tiempo. Tu aplicación puede ejecutar varias operaciones de almacén de datos en una única transacción, que se ejecutarán con o sin éxito, garantizando así la integridad de tus datos.</p> <p style="font-family: georgia; color: rgb(102, 51, 102);">El almacén de datos implementa transacciones en su red distribuida mediante "grupos de entidades". Una transacción manipula entidades de un único grupo. Las entidades del mismo grupo se almacenan juntas para ejecutar las transacciones eficazmente. Tu aplicación puede asignar entidades a grupos al crear las entidades.</p><h3 style="font-family: georgia; color: rgb(102, 51, 102);">Servicios de App Engine</h3> <p style="font-family: georgia; color: rgb(102, 51, 102);">App Engine proporciona una gran variedad de servicios que te permitirán realizar operaciones comunes al gestionar tu aplicación. Se incluyen las siguientes API para acceder a estos servicios:</p> <h4 style="font-family: georgia; color: rgb(102, 51, 102);">Extracción de URL</h4> <p style="font-family: georgia; color: rgb(102, 51, 102);">Las aplicaciones pueden acceder a recursos en Internet, como servicios web u otros datos, mediante el servicio de extracción de URL de App Engine. El servicio de extracción de URL recupera recursos web mediante la misma infraestructura de alta velocidad de Google que recupera páginas web para muchos otros productos de Google.</p> <h4 style="font-family: georgia; color: rgb(102, 51, 102);">Correo</h4> <p style="font-family: georgia; color: rgb(102, 51, 102);">Las aplicaciones pueden enviar mensajes de correo electrónico mediante el servicio de correo de App Engine. El servicio de correo utiliza la infraestructura de Google para enviar mensajes de correo electrónico.</p> <h4 style="font-family: georgia; color: rgb(102, 51, 102);">Memcache</h4> <p style="font-family: georgia; color: rgb(102, 51, 102);">El servicio Memcache proporciona a tu aplicación el servicio de memoria caché de valores-claves de alto rendimiento accesible desde varias instancias de tu aplicación. Memcache resulta útil para los datos que no necesitan las funciones de persistencia y transacciones del almacén de datos, como los datos temporales o los datos copiados del almacén de datos en la caché para un acceso a gran velocidad.</p> <h4 style="font-family: georgia; color: rgb(102, 51, 102);">Manipulación de imágenes</h4> <p style="font-family: georgia; color: rgb(102, 51, 102);">El servicio de imágenes permite a tu aplicación manipular imágenes. Con esta API, podrás recortar, rotar o ajustar el tamaño de imágenes en formato JPEG o PNG.</p>Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com0tag:blogger.com,1999:blog-7784620911335545755.post-58448763141207073822010-10-19T06:19:00.000-07:002010-10-19T06:26:06.474-07:00Pasos para generar Aplicaciones de FacebookAqui les dejo un tutorial que encontre en la web sobre como hacer aplicaciones para facebook.<br />Espero les sirva...<br /><br />El primer paso consiste en agregar la aplicación “<a href="http://www.facebook.com/developers">Developer</a>“. Todo contenido que se agrega a Facebook es una aplicación, es así que para desarrollarlas es necesaria una aplicación que las contenga.<br /><br /><p>Luego debemos presionar el botón <strong>“Set Up New Application”</strong>: allí se nos preguntará el nombre de nuestra aplicación y clickeando en <strong>“Optional Fields”</strong> encontramos información necesaria para el desarrollo.</p> Por el momento solo le daremos atención a la <strong>“Callback URL”</strong> que será la dirección a la que Facebook enviará a nuestros usuarios luego de su autenticación y a <strong>“Canvas Page URL”</strong> que será la URL mapeada de Facebook a nuestra aplicación y por la que los usuarios accederán a la misma.<br /><br /><p>Elegimos:</p> <ul><li>La opción <strong>“Can your application be added on Facebook?”</strong> para poder agregar nuestra aplicación.</li><li>La opción <strong>“Who can add your application to their Facebook account?”</strong> marcamos Users y All Pages.</li><li>La opción <strong>“Developer Mode”</strong>.</li><li>Por último hacemos click en <strong>“Save”</strong></li></ul> <p>Ahora debemos agregar nuestra aplicación: para esto nos dirigimos a <strong><a href="http://www.facebook.com/developers/">Developers</a></strong> y allí buscamos nuestra aplicación (en la barra derecha) y hacemos un click en el nombre.</p> <p>Allí vemos un botón que dice <strong>“Add Application”</strong>, lo apretamos y en la página siguiente hacemos lo mismo con <strong>“Add NOMBRE_DE_LA_APLICACION”</strong>. Bien, está todo listo para nuestro “Hola Mundo” en Facebook:</p> <ul><li>Lo primero que necesitamos es alguna máquina visible desde Internet (tanto por nombre o por IP).</li><li>Luego necesitamos que esta máquina tenga instalado un servidor Web (Apache por ejemplo).</li><li>Con estos dos requerimientos satisfechos, simplemente tenemos que ubicar un documento HTML en la ubicación que definimos para Callback URL en la configuración de la aplicación</li></ul><br /><br /><br /><br /><img src="file:///tmp/moz-screenshot.png" alt="" /><img src="file:///tmp/moz-screenshot-1.png" alt="" />Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com1tag:blogger.com,1999:blog-7784620911335545755.post-83101858173005049052010-10-19T06:17:00.000-07:002010-10-19T06:19:01.628-07:00Aplicaciones de Faceebook<p style="color: rgb(102, 51, 102);"><span class="intro">Detrás de los tres pilares “integración profunda”, “distribución masiva” y “nuevas oportunidades”, la red social Facebook ofrece una completa API para que los desarrolladores aprovechen al máximo las virtudes inherentes de una red social.</span><span id="more-3703"></span></p> <p style="color: rgb(102, 51, 102);"><a href="http://www.facebook.com/">Facebook</a> logró su popularidad siendo una red social capaz de contener aplicaciones realizadas por terceros, permitiendo así la realización de negocios a partir de la misma. Más allá de las aplicaciones propias que presenta, como es el caso de: “The Wall”.</p> <p style="color: rgb(102, 51, 102);">Suerte de pizarra virtual del usuario donde otros usuarios pueden dejarle mensajes o “Status”, que permite a los usuarios indicar sus actividades o estados de ánimo al resto de la red, Facebook permite la creación de aplicaciones mediante la utilización de web services para el acceso a los datos de la red.</p> <h3 style="color: rgb(102, 51, 102);">Creando aplicaciones en Facebook</h3> <p style="color: rgb(102, 51, 102);">Los recursos disponibles a los desarrolladores se agrupan en 3 categorías:</p> <ul style="color: rgb(102, 51, 102);"><li><strong>API:</strong> es una interfaz basada en <strong>REST </strong>que permite el acceso a los datos del perfil, amigos, fotos y eventos del usuario mediante la utilización de mensajes <strong>GET</strong> o <strong>POST</strong>.</li><li><strong>Consultas (FQL, “Facebook Query Language”)</strong>: es un lenguaje de consultas similar a SQL utilizado para acceder a los mismos datos que la API pero permitiendo consultas más complejas.</li><li><strong>Maquetación (FBML, “Faceboook Markup Language”)</strong>: es un lenguaje de markup similar a <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a> que permite ser intercalado con el HTML a utilizar para integrar las aplicaciones a la experiencia de usuario Facebook. Utilizando FBML se pueden acceder distintos puntos de la red como ser el perfil, acciones del perfil, canvas y feeds. Este lenguaje también incluye soporte para <a href="http://www.maestrosdelweb.com/editorial/ajax/">AJAX</a> y <a href="http://www.maestrosdelweb.com/editorial/%C2%BFque-es-javascript/">Javascript</a>.</li></ul> <h3 style="color: rgb(102, 51, 102);">Anatomía de una aplicación en Facebook</h3> <p style="color: rgb(102, 51, 102);">Una aplicación en Facebook posee una compleja estructura que permite brindar una experiencia de usuario completa:</p> <ul style="color: rgb(102, 51, 102);"><li><strong>Product Directory:</strong> cuando un usuario navega el directorio de aplicaciones de Facebook, por cada aplicación se muestra una pequeña sección con el nombre, una imagen y una pequeña descripción.</li><li><strong>About:</strong> esta página muestra información general de la aplicación. Debe inducir al usuario a instalar la aplicación.</li><li><strong>Left Nav:</strong> es el panel de navegación izquierdo. Las aplicaciones pueden tener su ícono y nombre en este panel.</li><li><strong>Canvas Page:</strong> es la página principal de la aplicación. <strong>Home:</strong> esta página es accedida utilizando el panel de navegación de la izquierda, en general muestra información de los amigos del usuario. <strong>User Dashboard:</strong> es la página donde el usuario administra sus datos en una aplicación y determina de que forma las aplicaciones acceden a sus datos personales.</li><li><strong>Profile:</strong> es la representación online de la identidad del usuario. La API provee múltiples puntos de integración con el perfil del usuario permitiendo actualizar datos del mismo. <strong>Profile Box:</strong> presenta información actualizada sobre las acciones recientes del usuario. <strong>Profile Actions Links:</strong> debajo de la foto del usuario en el perfil, se pueden agregar enlaces para invocar acciones en la aplicación.</li><li><strong>Privacy Settings:</strong> se utiliza para definir los niveles de privacidad de los datos del perfil por aplicación.</li><li><strong>News Feed:</strong> como su nombre lo indica es un “feed” de noticias, allí las aplicaciones pueden “publicar” información del usuario de la misma.</li><li><strong>Alerts:</strong> las aplicaciones pueden enviar notificaciones a los usuarios a través del correo electrónico.</li><li><strong>Message Attachments:</strong> las aplicaciones pueden incluir archivos adjuntos que aparecen en la ventana para componer mensajes.</li><li><strong>Requests:</strong> las aplicaciones pueden crear peticiones que aparecen en la parte superior izquierda de la página principal. En general son iniciados por amigos que solicitan realizar alguna acción.</li></ul>Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com1tag:blogger.com,1999:blog-7784620911335545755.post-3266843282868108832010-08-24T06:14:00.000-07:002010-08-24T06:23:27.083-07:00Serie Fibonacci- Java<span style="color: rgb(153, 153, 255);">Hola(: Este es otro programa el cual realiza lo que es la <span>serie fibonacci</span>, tambien en lenguaje java.</span><br /><br /><span style="font-size:85%;"><span style="color: rgb(102, 0, 204);font-family:georgia;" >public class Fibonacci{</span><br /><span style="color: rgb(102, 0, 204);font-family:georgia;" >public static void main(String[]args){</span><br /><span style="color: rgb(102, 0, 204);font-family:georgia;" >System.out.println("0\nl"):</span><br /><span style="color: rgb(102, 0, 204);font-family:georgia;" >int y=0, x=1,z,w=0</span><br /><span style="color: rgb(102, 0, 204);font-family:georgia;" >for(z=1; z<15;><br /><span style="color: rgb(102, 0, 204);font-family:georgia;" >y=x+w</span><br /><span style="color: rgb(102, 0, 204);font-family:georgia;" >w=x</span><br /><span style="color: rgb(102, 0, 204);font-family:georgia;" >x=y;</span><br /><span style="color: rgb(102, 0, 204);font-family:georgia;" >System.out.println(y);</span><br /><span style="color: rgb(102, 0, 204);font-family:georgia;" >}</span><br /><span style="color: rgb(102, 0, 204);font-family:georgia;" >return;</span><br /><span style="color: rgb(102, 0, 204);font-family:georgia;" >}</span><br /><span style="color: rgb(102, 0, 204);font-family:georgia;" >}</span></span><br /></span>Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com1tag:blogger.com,1999:blog-7784620911335545755.post-91488278747215775752010-08-24T06:12:00.001-07:002010-08-24T06:13:26.759-07:00Metodo Burbuja- Java<span style="font-family: georgia;font-size:85%;" ><span style="color: rgb(153, 153, 255);">Hola(:Este es un programa en donde se muestra el metodo burbuja hecho en java, espero les sirva.</span><br /><br /><br /><span style="color: rgb(102, 0, 204);">public class Burbuja{</span><br /><span style="color: rgb(102, 0, 204);"> public static void main(String[] args){</span><br /><span style="color: rgb(102, 0, 204);"> int arreglo[] = {10,3,6,8,7,2,1,5,3,4}</span><br /><span style="color: rgb(102, 0, 204);"> for(int i=0;i<=10;i++){</span><br /><span style="color: rgb(102, 0, 204);"> for(int j=1;j<=10-1,j++){</span><br /><span style="color: rgb(102, 0, 204);"> if(arreglo[i]>arreglo[j]){</span><br /><span style="color: rgb(102, 0, 204);">arregloj]=arreglo[i];</span><br /><br /><span style="color: rgb(102, 0, 204);">}</span><br /><span style="color: rgb(102, 0, 204);">}</span><br /><span style="color: rgb(102, 0, 204);">}</span><br /><span style="color: rgb(102, 0, 204);">}</span><br /><span style="color: rgb(102, 0, 204);">}</span></span>Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com1tag:blogger.com,1999:blog-7784620911335545755.post-9216962969115565112010-08-24T05:46:00.000-07:002010-08-24T05:49:17.918-07:00Introduccion Programacion Web<p style="color: rgb(153, 153, 255);" align="justify"><span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;">Hola (:Esta entrada espero les sirva, ya que es algo que vamos a ver alo largo del curso de programacion Web. Tiene conceptos importantes de los cuales necesitamos su definicion.<br /></span></p><p align="justify"><span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;"><br /></span></p><p style="color: rgb(51, 51, 153);" align="justify"><span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;">La programación Web, parte de las siglas WWW, que significan <span style="font-weight: bold;">World Wide Web</span> o telaraña mundial.</span></p> <p style="color: rgb(51, 51, 153);" align="justify"><span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;">Para realizar una pagina con la programación Web, se deben tener claros, tres conceptos fundamentales los cuales son, el <span style="font-weight: bold;">URL</span>(Uniform Resource Locators), es un sistema con el cual se localiza un recurso dentro de la red, este recurso puede ser una pagina web, un servicio o cualquier otra cosa. En resumen el URL no es más que un nombre, que identifica una computadora, dentro de esa comutadora un archivo que indica el camino al recusrso que se solicita.</span></p> <p style="color: rgb(51, 51, 153);" align="justify"><span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;">El siguiente concepto dentro de la programación Web, es el protocolo encargado de llevar la información que contiene una pagina Web por toda la red de internet, como es el<span style="font-weight: bold;"> HTTP</span>(Hypertext Transfer Protocol).</span></p> <p style="color: rgb(51, 51, 153);" align="justify"><span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;">Y por ultimo el lenguaje necesario cuya funcionalidad es la de representar cualquier clase de información que se encuentre almacenada en una pagina Web, este lenguaje es el <span style="font-weight: bold;">HTML</span>(Hypertext Markup Language). </span></p> <p style="color: rgb(51, 51, 153);" align="justify"><span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;">En la programación Web, el HTML es el lenguaje que permite codificar o preparar documentos de hipertexto, que viene a ser el lenguaje comun para la construccion de una pagina Web.</span></p> <p style="color: rgb(51, 51, 153);" align="justify"><span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;">Con el comienzo de Internet y la programación web , se desfasaron los diseños gráficos tradicionales, con lo que se empezaron a diseñar interfaces concretas para este medio, buscando ficheros pequeños para facilitar la carga de los mismos. La programación web se orientaba a un diseño muy cargado y interactuando con el usuario, mientras que al empezar a competir con millones de webs se ha optado más por el diseño sencillo y de fácil comprensión.</span></p> <p style="color: rgb(51, 51, 153);" align="justify"><span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;">En programación web se creó la necesidad de conocer a fondo diferentes lenguajes de programación como HTML, JavaScript y DHTML.<br /> Con esto se creó un nuevo profesional de la informática, el diseñador web, experto en estos menesteres, que viene siendo algo así como un experto en programación web, a caballo entre el diseñador gráfico tradicional y el programador de aplicaciones llevadas a Internet.</span></p>Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com2tag:blogger.com,1999:blog-7784620911335545755.post-2821520393131542292010-08-24T05:40:00.000-07:002010-08-24T05:46:19.229-07:00Programacion en Java<p style="color: rgb(102, 102, 204);font-family:georgia;"><span style="font-size:85%;">Hola!(:</span></p><p style="color: rgb(102, 0, 204);font-family:georgia;"><span style="font-size:85%;"><span style="color: rgb(102, 102, 204);">Bueno esta es la primera entrada de mi blog, y es explicar algunas de las maneras en que aplicaremos el lenguajejava, o en donde podriamos utilizarlo, espero les sirva.</span><br /></span></p><p style="color: rgb(102, 0, 204);font-family:georgia;"><span style="font-size:85%;"><br /></span></p><p style="color: rgb(102, 0, 204);font-family:georgia;"><span style="font-size:85%;">Con la programación en Java, se pueden realizar distintos aplicativos, como son <span style="font-weight: bold;">applets</span>, que son aplicaciones especiales, que se ejecutan dentro de un navegador al ser cargada una pagina HTML en un servidor WEB, Por lo general los applets son programas pequeños y de propositos especificos.</span></p> <p style="color: rgb(102, 0, 204);font-family:georgia;"><span style="font-size:85%;">Otra de las utilidades de la programación en Java es el <span style="font-weight: bold;">desarrollo de aplicaciones</span>, que son programas que se ejecutan en forma independiente, es decir con la programación Java, se pueden realizar aplicaciones como un procesador de palabras, una hoja que sirva para calculos, una aplicacion grafica, etc. en resumen cualquier tipo de aplicacion se puede realizar con ella. Java permite la modularidad por lo que se pueden hacer rutinas individuales que sean usadas por más de una aplicacion, por ejemplo tenemos una rutina de impresion que puede servir para el procesador de palabras, como para la hoja de calculo.</span></p> <p style="color: rgb(102, 0, 204);font-family:georgia;"><span style="font-size:85%;">La programación en Java, permite el desarrollo de aplicaciones bajo el <span style="font-weight: bold;">esquema de Cliente Servidor</span>, como de aplicaciones distribuidas, lo que lo hace capaz de conectar dos o más computadoras u ordenadores, ejecutando tareas simultaneamente, y de esta forma logra distribuir el trabajo a realizar.</span></p>Estefania Fierrohttp://www.blogger.com/profile/16021692252560714368noreply@blogger.com1