Estas últimas semanas me encuentro, montando un nuevo negocio, se trata de una agencia de eventos especializada en despedidas de solteras y solteros. Trabajaremos principalmente en Sevilla aunque nos descartemos otros lugares en un futuro. Su nombre Eventun y su web www.eventun.com se encuentra de momento en construcción. Os seguiré contando los próximos días más detalles.
Nuevo emprendimiento
6 Septiembre, 2009 por opentiMi sitio web hackeado
27 Abril, 2009 por opentiDebido a una vulnerabilidad de la versión 1.0.13 de JOOMLA la página www.openti.net ha sido hackeada introduciendo en varias de sus páginas elementos HTML del tipo iframe que apuntaban a sitios maliciosos.
Pronto Google empezó a advertir del problema de seguridad al intentar acceder a la página:
Accediendo a las herramientas de webmaster de Google te explicaban mejor el problema.
Investigando un poco, encontré como resolver el problema de seguridad de esa versión de JOOMLA, el problema está en usar el usuario administrador por defecto, entonces, cree otro usuario administrador, y al anterior le quité los permisos de administrador. además restablecí el sitio web con una copia de seguridad, En caso de no poseer copia de seguridad, habría que eliminar de todas las páginas de índices el elemento iframe.
Aquí una captura del whois de la página que contiene el código malicioso.
Me he planteado si presentar un denuncia al Grupo de delitos telemático de la guardia civil.
https://www.gdt.guardiacivil.es/denuncias.php
Pero de momento no procederé.
AJAX y SEO, recomendación de Google
30 Marzo, 2009 por opentiTras haber adaptado la web a AJAX, Google había dejado de indexar parte de las páginas de la misma.
Google nos dice cómo debemos usar AJAX para que su buscador pueda acceder también a esos contenidos.
http://googlewebmastercentral.blogspot.com/2007/11/spiders-view-of-web-20.html
los enlace en la página deben de quedar de la siguiente forma:
<a href="paginadestino.php" onClick="funcionAjax(parametros);return false">enlace</a>
Con lo cual en nuestra función que modifica los enlaces en vez de modificar el atributo “href” añadiremos el atributo “onclick”, la forma de añadir este atributo depende del navegador que usemos.
function ajaxLinks () {for (var i=0;i < document.links.length;i++) {var extension = document.links[i].href.substr(document.links[i].href.length-3,3);if(extension!="pdf"){if(document.links[i].href.substr(0,<?php echo strlen($mosConfig_live_site)?>)=="<?php echo $mosConfig_live_site ?>"||document.links[i].href.substr(0,9)=="index.php:"){var url = "javascript:ajaxload('index2.php"+document.links[i].href.substring(<?php echo strlen($mosConfig_live_site)+10?>)+"')";if(url.indexOf('?')<0){url = "javascript:ajaxload('index2.php?"+document.links[i].href.substring(<?php echo strlen($mosConfig_live_site)+10?>)+"')";if(document.links[i].attachEvent){//Do IE Specificdocument.links[i].attachEvent("onclick", new Function("ajaxload('index2.php?"+document.links[i].href.substring(<?php echo strlen($mosConfig_live_site)+10?>)+"');return false;"));} else {document.links[i].setAttribute("onclick","ajaxload('index2.php?"+document.links[i].href.substring(<?php echo strlen($mosConfig_live_site)+10?>)+"');return false;");}}else{if(document.links[i].attachEvent){//Do IE Specificdocument.links[i].attachEvent("onclick", new Function("ajaxload('index2.php"+document.links[i].href.substring(<?php echo strlen($mosConfig_live_site)+10?>)+"');return false;"));} else {document.links[i].setAttribute("onclick","ajaxload('index2.php"+document.links[i].href.substring(<?php echo strlen($mosConfig_live_site)+10?>)+"');return false;");}}//document.links[i].href = url;}}}}
Esperemos que para la próxima indexación de Google, vuelva a indexar todas las páginas.
Un Saludo.
La crisis
23 Marzo, 2009 por openti"No pretendamos que las cosas cambien, si siempre hacemos lo mismo. La crisis es la mejor bendición que puede sucederle a personas y países, porque la crisis trae progresos. La creatividad nace de la angustia, como el día nace de la noche oscura. Es en la crisis que nace la inventiva, los descubrimientos y las grandes estrategias. Quien supera la crisis, se supera a sí mismo sin quedar ’superado’.
Quien atribuye a la crisis sus fracasos y penurias, violenta su propio talento y respeta más a los problemas que a las soluciones. La verdadera crisis, es la crisis de la incompetencia. El inconveniente de las personas y los países es la pereza para encontrar las salidas y soluciones. Sin crisis no hay desafíos, sin desafíos la vida es una rutina, una lenta agonía. Sin crisis no hay méritos. Es en la crisis donde aflora lo mejor de cada uno, porque sin crisis todo viento es caricia. Hablar de crisis es promoverla, y callar en la crisis es exaltar el conformismo. En vez de esto, trabajemos duro. Acabemos de una vez con la única crisis amenazadora, que es la tragedia de no querer luchar por superarla."
Albert Einstein.
1879-1955.
3 Métodos sencillos para decidirse por una tecnología o aplicación
21 Marzo, 2009 por openti
Internet nos da muchas posibilidades, y una de ellas es poder analizar y estudiar las tendencias tecnológicas actuales, cuando tenemos que elegir entre una tecnología para el desarrollo de una aplicación o elegir entre un conjunto de aplicaciones para implantar en nuestra empresa, nos encontramos con un gran abanico de posibilidades.
Pues aquí muestro tres formas que suelo usar yo a la hora de decantarme por una de ellas.
Usar Google Trends, el cual nos da una comparativa de la evolución en el tiempo del volumen de búsqueda que han tenido, pudiendo ver esta evolución en diferentes zonas geográficas
La segunda es comparar el número de ofertas profesionales en páginas como www.infojobs.net
La tercera forma es comparar buscando en redes de profesionales como www.xing.com el número de profesionales que usan esa tecnología o aplicación. También se puede filtrar por distintas zonas geográficas.
Con estos tres métodos podemos tener ya una idea bastante clara para tomar una decisión acertada, a la hora de elegir entre tecnologías o aplicaciones parecidas.
Un Saludo.
Poniendo Ajax a tu Joomla CMS II
13 Marzo, 2009 por opentiEn esta segunda parte del post anterior, veremos como cargar de forma asíncrona el menú izquierdo, dependiendo de la página mostrada. Además incorporaremos un fading al mostrar los contenidos cargados asíncronamente, de esta manera la experiencia de usuario es mucho más atractiva. Podéis ver como queda en www.openti.net .
Para poder cargar el menú izquierdo de forma asíncrona, crearemos una página php que nos devuelva el contenido de estos menús, y llamaremos con el AJAX de mootools a este php, para recoger el contenido y colocarlo en el div que crearemos en dicha posición.
Primero creamos en la raiz del sitio la página php, mod_left.php, que será una copia de index2.php pero con el final del fichero cambiado, para que no cargue el contenido de un artículo, sino que cargue el menú izquierdo, llamando a:
<?php mosLoadmodules(“left”,-2)?>
<body><?php if(mosCountmodules("left")){ ?><?php mosLoadmodules("left",-2)?><?php } ?></body></html><?php}} else {mosLoadmodules("left",-2);}
Una vez creada esta página tenemos que llamarla desde nuestro fichero ajax.js
function ajaxloadLeftColumn(url){$('ajaxleft').innerHTML=$('loading2').innerHTML;//call showload function to show preloadertry{url = url.replace('index2.php','mod_left.php');new Ajax(url, {//loaded content would be updated inside this divisionupdate: 'ajaxleft',//this should be true if you want to execute JS inside the loaded contentevalScripts: true,onComplete:function(r){//It sets the type property of the script tag,//then puts the script body inside of the element (between the opening and closing script tags),//then injects into the head of the pagevar script = new Element('script')script.setProperty('type','text/javascript');try{script.setHTML(r);}catch(e){}},onSuccess:function(){try{//The ajaxlinks function is being called here,I defined this function in footerajaxLinks();iniciaObjeto($('ajaxleft'));efecto($('ajaxleft'));}catch(e){}}}).request();}catch(e){}}
En la primera línea mostramos la imagen de carga en el div del menú:
$('ajaxleft').innerHTML=$('loading2').innerHTML;
Esta petición asíncrona se ejecutará siempre que se haga una petición de página, mandándole los mismos parámetros que a la petición de la página, de esta manera la función de mosLoadmodules nos devolverá el menú que corresponde a la página que se está pidiendo, con esto para construir nuestra url de petición solo tendremos que hace lo siguiente:
url = url.replace('index2.php','mod_left.php');
A esta url haremos la petición AJAX recogeremos el contenido y lo mostraremos en el div ajaxleft que creamos en la posición de nuestro menú izquierdo en el index.php de nuestra plantilla.
Posteriormente llamamos a las funciones de iniciaOjecto y efecto para obtener el fading, al mostrar el contenido:
function iniciaObjeto(obj){ obj.style.opacity = 0;obj.style.MozOpacity = 0;obj.style.KhtmlOpacity = 0;obj.style.filter = 'alpha(opacity=' + 0 + ')';obj.style.zoom=1;//necesario para Explorer}function setOp(obj, value) {obj.style.opacity = value/100;obj.style.MozOpacity = value/100;obj.style.KhtmlOpacity = value/100;obj.style.filter = 'alpha(opacity=' + value+ ')';obj.style.zoom=1;//necesario para Explorer}function efecto(o){for (var c=0 ; c < 100; c++)(function(c){setTimeout(function(){setOp(o,c);} , 10*c);})(c);}
Es todo es todo, si tenéis alguna duda, o necesitáis los fuentes completos, pedírmelo.
Un Saludo.
Tarjeta de visita
5 Marzo, 2009 por opentiCon algo de Photoshop, basándome en el diseño de la web, y rompiendo un poco con las tarjetas de visita tradicionales. Aquí teneis el diseño de mi tarjeta para OpenTI.
Realicé un pedido de 250 tarjetas a través de Vistaprint, con una calidad de papel de 265g/m².
El precio fue el siguiente:
Cantidad total del pedido – IVA excluido: 30,46 EUR
Gastos de envío y tramitación – IVA excluido: 5,69 EUR
Cantidad en concepto de impuestos IVA (16,00%): 5,79 EUR
Cantidad total: 41,94 EUR
Una vez que me llegó a casa, el resultado es que la calidad del papel es bastante buena, pero los textos podrían haber quedado con mayor resolución ya que, si hay poca luz, no se distingue demasiado bien.
Para la próxima tanda habrá que buscar una solución para esto.
Que os parece, ¿mejoraríais algo?.
Un Saludo.
Los 10 principios de Google
5 Marzo, 2009 por opentiEncuentro este artículo, que es una joya y que todo debríamos tenerlo siempre a la vista,. Ahí va:
El logro de un equilibrio armónico de estos diez principios es un desafío constante. Así, un producto que cumple con todos esos objetivos es "Googley", eso significa que será útil y gustará a muchas personas de todo el mundo. Estos son los 10 principios que son para Google, los más importantes:
- Foco en las personas
Su vida, su trabajo, sus sueños. La tecnología más puntera no sirve de nada si no cubre las necesidades de los usuarios.
- Cada milisegundo cuenta
Nada es más valioso que el tiempo de la gente. La velocidad es una bendición para los usuarios. También es una ventaja competitiva que Google no sacrifica sin una buena razón.
- La simplicidad es poderosa
Facilidad de uso, velocidad, atractivo visual y accesibilidad. Incluir sólo las funciones que la gente necesita para lograr sus objetivos.
- Enganchar a los principiantes y atraer a los expertos.
Los mejores productos de Google, parecen simples, pero incluyen poderosas características.
- Atrévete a innovar.
Google alienta proyectos innovadores que asumen riesgos, siempre y cuando respondan a las necesidades de los usuarios.
- Diseñar para el mundo
La World Wide Web ha abierto todos los recursos de Internet para personas de todo el mundo. El objetivo es crear un producto universalmente accesible.
- Hacer planes para hoy, pero tambien para el futuro.
Google nunca trata de aumentar los ingresos de un producto, si eso significa reducir el número de usuarios de Google en el futuro.
- Alegrar los ojos sin distraer la mente
El diseño es muy importante, porqué genera la primera impresión. Pero no hay que olvidar los objetivos. La audiencia y el contecto cultural es lo que importa. El mejor proyecto es aquel cuyo diseño agrada a los usuarios y les es de utilidad.
- Ser dignos de la confianza de la gente
Ser transparente sobre cómo se utiliza la información y nunca compartir datos sin el consentimiento explícito del usuario.
- Añadir un toque humano
Los diseños de Google tienen personalidad y solicitan feedback, y intentar mejorar como respuesta a ese feedback de los usuarios.
Poniendo AJAX en tu CMS Joomla
3 Marzo, 2009 por opentiDesde hace tiempo tengo la idea, creo que buena, de incorporar AJAX a la página Web de www.openti.net, con sus grandes beneficios:
- Carga más rápida de las páginas.
- Mejor experiencia de usuario y mayor impacto para este.
- Menor tráfico de datos, con lo cual permitirá mayor número de usuarios concurrentes.
- Tomar tendencia hacia la Web 2.0
Pero también tenemos que tener cuidado con otra serie de aspectos:
- No impedir la indexación de partes del contenidos a los navegadores.
- No impedir a los generadores de estadísticas (Yo uso Google Analytics) que puedan controlar este tipo de tráfico.
Llevo desde ayer integrando la librería de MooTools en la web, por lo general es bastante sencillo, pero tengo algunos problemillas pendientes de resolver, como la carga de la página de contacto que está fallando la evaluación de los javascripts que validan el formulario.
Cosas que necesitas considerar:
- Crear un fichero ajax.js que contiene todas las funciones necesarias
- Incluir tanto mootools.js y ajax.js en el head de la página index.php
- Colocar DIV de precarga donde desees dentro del index.php.
- Colocar un DIV con un ID <div id="ajaxcontainer"> donde se encuentra el mainbody de nuestra plantilla, que es donde se cargan el contenido de los artículos, y coloca el mainbody actual dentro de esta división, para que cuando se haga una solicitud de página, la página se cargará en este DIV.
- Incluir un código javascript que cambiará todos los enlaces dentro de la página por algo así: javascript:ajaxload(‘index2.php?option=com_frontpa ge&Itemid=1′)
El DIV ajaxcontainer deberá ser parecido a esto:
1: <div id="ajaxcontainer">2: <div id="main_content">3: <?php mosMainBody(); ?>4: </div>5: </div>
y la función ajaxlink antes de cerrar la etiqueta body, la cual sustituirá todos los enlaces para que llamen a la función AJAX, en vez de al link que recargaría la página, es un pequeño parche pero funciona, otra opción sería cambiar todos nuestro enlaces desde la administración de Joomla, pero este proceso puede llegar a ser muy tedioso:
1: <!-- Start of AjaxLink function for changing all the links of page -->2: <script type="text/javascript">3: <!--4: function ajaxLinks () {5: for (var i=0;i < document.links.length;i++) {6: if(document.links[i].href.substr(0,<?php echo strlen($mosConfig_live_site)?>)=="<?php echo $mosConfig_live_site ?>"||document.links[i].href.substr(0,9)=="index.php:"){7: document.links[i].href = "javascript:ajaxload('index2.php"+document.links[i].href.substring(<?php echo strlen($mosConfig_live_site)+10?>)+"')";8: }}}9: ajaxLinks();10: -->11: </script>12: <!-- End of AjaxLink function -->13: </body>14: </html>
El ajax.js
1: //This function is for switching beetwin two condtions of preloader division that you need to2: //place in your page here the division name is: loading3: function showLoad(show){4: if(show){5: $('loading').style.display="inline";6: }else{7: $('loading').style.display="none";8: }9: };10: //This is ajax function that you can use inside your page, the only parameter that11: //i defined for this function is url, all the content of loaded url would be placed inside12: //a division that is ajaxconatiner here. As you see evalscript is true and that is the only13: //way that any Javascript can be executedinside the loaded content14:15: function ajaxload(url){16: //call showload function to show preloader17: window.scrollTo(0,100);18: document.getElementById('ajaxcontainer').innerHTML='';19: showLoad(true);20: try21: {22: new Ajax(url, {23: //loaded content would be updated inside this division24: update: 'ajaxcontainer',25: //this should be true if you want to execute JS inside the loaded content26: evalScripts: true,27: onComplete:function(r)28: {29: //It sets the type property of the script tag,30: //then puts the script body inside of the element (between the opening and closing script tags),31: //then injects into the head of the page32: var script = new Element('script')33: script.setProperty('type','text/javascript');34: try35: {36: script.setHTML(r);37: }38: catch(e)39: {40: }41: },42: onSuccess:function(){43: try44: {45: //This would disappear preloader div46: showLoad(false);47: //The ajaxlinks function is being called here,I defined this function in footer48: ajaxLinks();49: }50: catch(e)51: {52: }53: }54: }).request();55: }56: catch(e)57: {58: }59: }60:
Para todo esto me basé en la plantilla:
http://www.web2coder.com/downloads/web2coder-Mittwoch.zip
Podéis ver una demostración en www.openti.net , aunque faltan algunos detallitos.
Un Saludo.