viernes, 23 de noviembre de 2012

Error al usar el service builder de liferay



Hace poco tuve un problema al generar un web service , cuando el eclipse se encontraba generando las clases arrojaba un error como este:

\liferay-plugins-sdk-6.0.5\build-common-plugin.xml:349: The following error occurred while executing this line:  
\ide\liferay-plugins-sdk-6.0.5\build-common.xml:90: Error running javac.exe compiler  

para solucionarlo fue necesario modificar el siguiente archivo de la SDK de desarrollo buil.properties

 javac.compiler=modern  
 #javac.compiler=org.eclipse.jdt.core.JDTCompilerAdapter  

a

 #javac.compiler=modern  
 javac.compiler=org.eclipse.jdt.core.JDTCompilerAdapter  

una ves modificado el archivo y despues de haber  reiniciado el eclipse las clases del servicio web se generaron satisfactoriamente

lunes, 10 de septiembre de 2012

Godaddy offline



Los servicios de godaddy están offline, por si están presentando problemas con sus dominios , reclaman responsabilidad a Anonymous

jueves, 6 de septiembre de 2012

mostrar archivos .htaccess en mac



No creo que OS de mac sea el mejor sistema operativo pero tampoco el peor, para el día de hoy tuve un pequeño inconveniente a la hora de editar archivos .htaccess de mi hosting (mac oculta todos los archivos que comiencen con el caracter .), para poder editarlos y que fueran visibles tuve que ejecutar las siguientes lineas desde la terminal de linea de comando (/Aplicaciones/utilidades/terminal)

Para mostrar los archivos ocultos

 defaults write com.apple.Finder AppleShowAllFiles TRUE  

una ves configurado reiniciarmos el Finder ejecutando el comando Kill
 killall Finder  

Para ocultarlos de nuevo

 defaults write com.apple.Finder AppleShowAllFiles FALSE  

una ves configurado reiniciarmos el Finder ejecutando el comando Kill
 killall Finder  


Saludos

jueves, 23 de agosto de 2012

Cambiar alto tabs de Facebook y eliminar scroll bars



Muchas veces cuando tratamos de implementar tab para facebook no vemos en la necesidad de usar un mayor espacio del proporcionado por facebook en un fab de un fan page, para esto facebook ha creado un par de funciones que nos permiten jugar con esto, permitiendo de esta manera des hacernos de las molestas scrollbars del iframe donde esta contenida tu aplicación. Para esto te recomiendo uses el sig código fuente:

CSS

 body{  
      margin:0;  
      padding:0;  
      font: 14px/130% Arial, Helvetica, sans-serif;  
      width: 810px;  
      margin: 0;  
      padding: 0;  
      overflow-x: hidden;  
 }  

HTML

 <div id="fb-root"> </div>  
 <!-- carga SDK de Facebook-->  
 <script src="//connect.facebook.net/en_US/all.js"></script>   

Javascript

 window.fbAsyncInit = function() {  
      FB.init({  
           appId   : '397364806984767', // App ID  
           status   : true, // check login status  
           cookie   : true, // enable cookies to allow the server to access the session  
           xfbml   : true // parse XFBML  
 });  
                  // Additional initialization code here  
 };  
                 // Load the SDK Asynchronously  
 (function(d){  
   var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];  
   if (d.getElementById(id)) {return;}  
        js = d.createElement('script'); js.id = id; js.async = true;  
           js.src = "//connect.facebook.net/en_US/all.js";  
           ref.parentNode.insertBefore(js, ref);  
 }(document));  
 FB.Canvas.setSize({ width: 810, height: 1200 });  

Una ves cargada la SDK de facebook la funcion FB.canvas.setSize te permitira jugar con el tamaño del iframe de facebook. Mientras el CSS elimina los molestos scroll bars del iframe del tab de Facebook


Saludos!
hasta la próxima

lunes, 30 de julio de 2012

Primeras imágenes del IPHONE 5

Acá les dejo las primeras imágenes, del IPHONE 5, como era de esperarse no han habido cambios muy grandes en el aspecto físico de este, teniendo una pantalla mas grande y un ancho menor:





miércoles, 25 de julio de 2012

Migrando un sitio web en Joomla



Aunque odio los CMS's con todo mi corazón muchas veces es inevitable tener que trabajar con ellos, el día de hoy estuve trabajando en una pequeña migración de un sitio hecho en JOOMLA y me pareció buena idea compartirlo con uds,  y aunque sea muy trivial para algunos los que llevan buen tiempo trabajando en el medio, no deja de hacer falta una ayuda para los menos experimentados en el tema!

Paso 1 (Montaje de archivos)


Lo primero que se necesita hacer es cargar en el hosting o servidor los archivos correspondientes al sitio
esto lo puedes realizar con cualquier herramienta de conexión FTP o si tienes acceso directo al servidor será mucho mas rápido, en mi caso utilice el FileZilla!. Ten en cuenta que esto puede tomarte un buen tiempo ya que el total de archivos es aprox 60.000, si tienes acceso al root del sistema o si cuentas con una herramienta par descomprimir los zips desde la herramienta así subes un solo zis y descomprimes directamente en el servidor.

Paso 2 (Restauración de la base de datos)


Supongo que ya tienes el script de base de datos de tu sitio (usualmente un archivo .sql) si no es así puedes generarlo fácilmente desde el phpMyAdmin instalado en tu servidor PHP (casi todos cuentan con uno)  desde la función exportar del mismo.




Lo que primero deberás hacer es crear una base de datos dentro de tu servidor y un usuario para la misma, esto lo puedes realizar desde el panel de control de tu hosting, una ves creada la base de datos entras al phpMyAdmin y seleccionas la base de datos que acabas de crear  y seleccionas la opción SQL
de la misma




copiamos y pegamos el contenido del archivo .sql y le damos en el botón continuar, tardara un tiempo mientras ejecuta el script, si tienes problemas para la carga te sugiero que uses algún cliente de MySQL como HeidiSQL o Sequel Pro (usuarios MAC).



Paso 3 (Cambiando la cadena de conexión)


Procedemos con el cambio de la cadena de conexión del Joomla, básicamente tienes que modificar estas tres lineas de código de tu archivo de configuración el cual se encuentra en el root de la carpeta de tu sitio web en joomla y tiene el nombre de configuration.php





      public $host = 'tu host'; //Usualmente localhost o 127.0.0.1  
      public $user = 'el usuario que creaste';  
      public $password = '';  
      public $db = 'nombre de la base de datos';  




Le das guardar y listo,
tienes migrado tu sitio web

Espero te haya servidor de ayuda!
Saludos y hasta la próxima

domingo, 22 de julio de 2012

Como crear y configurar un certificado SSL en WAMP para navegación segura por HTTPS




El día de hoy me vi en la necesidad de montar un entorno de pruebas para una aplicación de Facebook que me encuentro desarrollando. Debido que a partir del año pasado es necesario poseer un SSL para trabajar sobre Facebook me vi en la necesidad de configurar mi servidor de aplicaciones PHP (WAMP) con un certificado SSL. A continuación documentare el proceso que encontré googleando un poco pero que no esta disponible en español.

Descripción del servidor:

SO: Windows Server 2003
Servidor de aplicaciones: WAMP 2.2
PHP
MySQL

PASO 1: Crear el certificado SSL

Según la documentación de WAMP debemos entrar por linea de comando a la ruta wamp\bin\apache\apache2.2.8\bin (donde 2.2.8 corresponderá a la versión del apache que venia con tu  WAMP, en mi caso 2.2.22) y ejecutar las siguientes lineas de comando:


 openssl genrsa -des3 -out server.key 1024  

Al ejecutarse esta linea de comando te solicitara una contraseña la cual podrás elegir a tu preferencia.

Antes de continuar, quiero hacer un paréntesis ya que al intentar ejecutar el comando openssl obtenia un error en la dll ssleay32.dll "The ordinal 968 could not be located in dynamic link library LIBEAY32.dll" para solucionarlo instale el OpenSSL win32  light , y reemplace los archivos que menciono a continuación en el directorio bin del apache del WAMP

ssleay32.dll
libeay32.dll
openssl.exe


Bueno continuando con la creación del certificado ejecuto las siguientes lineas de comando desde el cmd de windows


 copy server.key server.key.org  
 openssl rsa -in server.key.org -out server.key  
 openssl req -new -x509 -nodes -sha1 -days 365 -key server.key -out server.crt -config C:\wamp\bin\apache\apache2.2.8\conf\openssl.cnf  

Recuerda que para la tercera linea de comando el directorio apache2.2.8 corresponderá a tu versión de apache instalada, una vez se haya ejecutado la 3ra linea de comando se te solicitaran alguna información tuya y de tu servidor.

PASO 2: Montaje en WAMP

Finalizada la creación del certificado aparecerán en el directorio bin (wamp\bin\apache\apache2.2.8\bin) de tu apache los archivos: server.key y server.crt  los cuales deberás copiar en el directorio de configuracion  del mismo (wamp\bin\apache\apache2.2.8\conf) en los directorios que deberás crear 


ssl.key (para server.key)
ssl.crt (para server.crt)

PASO 3: Configuración

Edición del httpd.conf file y php.ini

Para el caso del httpd.conf deberemos descomentar las lineas

 LoadModule ssl_module modules/mod_ssl.so   
 Include conf/extra/httpd_ssl.conf   

y agregar bajo la linea del Include

 <IfModule ssl_module></IfModule>   

Para el caso del php.ini (el cual hace referencia al que esta en la carpeta bin del apache wamp\bin\apache\apache2.2.8\bin) deberemos descomentar la linea: 

 extension=php_openssl.dll   

Como pudiste ver incluimos el directorio conf/extra/httpd_ssl.conf dentro de la configuración de nuestro apache a continuación definiremos algunos parámetros para el certificado creado.


 Quitar las comillas a "SSLMutex default"  
 Buscar la linea de <VirtualHost _default_:443> y cambiar la linea que dice DocumentRoot por:   
 "C:/wamp/www/" con comillas y cambiar el Error log de igual manera   
 Cambiar el SSLCertificateFile a "conf/ssl.crt/server.crt"   
 Cambiar el SSLCertificateKeyFile a "conf/ssl.key/server.key"   
 Cambiar <Directory "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin"> a <Directory "C:/wamp/www/"> y agregar las siguientes lineas de codigo dentro del tag Directory  
 Options Indexes FollowSymLinks MultiViews   
 AllowOverride All   
 Order allow,deny   
 allow from all   

Verifica  que la linea CustomLog "logs/ssl_request_log"  este des comentada


PASO 4: Prueba

Para verificar nuestra configuración introducimos la siguiente linea de comando donde intrudujimos los comando del openssl:

 httpd -t   

Si hemos realizado todo correctamente nos aparecerá OK reiniciamos servicios del WAMP
y tenemos montado el SSL localmente para publicarlo en una dirección publica o dominio de servidor
modificamos la linea dentro del httpd_ssl.conf y reiniciamos servicios del servidor

 ServerName localhost:443' a 'ServerName www.tudominio.com:443'  



Espero les sirva de tanta ayuda como para mi!
Saludos


sábado, 14 de julio de 2012

Lector de twitter con javascript y jquery




Hola para el día de hoy tuve que crear un pequeño lector de mis tweets a partir de javascript y html, aprovechando que twitter posee un gran numero de servicios JSON y XML que nos brindan información acerca de datos de busqueda y de timeline de los usuarios  use la funcion de ajax de jquery para extraerla a mi pagina web personal!

he aqui el codigo:


html:


 <div class="twitter_holder">  
      <div id="millertaker" class="twitter">  
      </div>  
      <div id="mill" class="blank">  
      </div>                      
 </div>  


javascrip:


se realiza el llamado al servicio del API de twitter a la URL: https://twitter.com/statuses/user_timeline/Millertaker.json?count=2 donde {Millertaker} es el nombre  de usuario que se ha de consultar , {json} el formato en que se recibe la información  y count  el numero de tweets del timeline que se quieren mostrar. Quiero hacer notar que para realizar peticiones a un use el dataType de la funcion ajax de jquery como 'jsonp' para no tener problemas por crossdomain durante esta (usualmente como error 400). 


la función callbackMillertaker recibe como parametro el JSON que contiene la información correspondiente al resultado de la consulta al servicio JSON de twitter, el formato de este esta descrito en el siguiente link 





 $.ajax({  
 url: 'https://twitter.com/statuses/user_timeline/Millertaker.json?count=2',  
  dataType: 'jsonp',  
  contentType: "application/json; charset=utf-8",  
  success: callbackMillertaker  
 });  
 function callbackMillertaker(data){  
 $.each(data, function(key, val) {  
         $('#millertaker').append('<span>'+val.text.parseURL().parseUsername().parseHashtag()+'</span>');  
         $('#mill').append( '<div class=marco><img src='+val.user.profile_image_url+' alt='+val.user.screen_name+' /></div>'+  
         '<span>@'+val.user.screen_name+'</span>' );  
  });  
 }  
 String.prototype.parseURL = function() {  
      return this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&~\?\/.=]+/g, function(url) {  
           return url.link(url);  
      });  
 };  
 String.prototype.parseUsername = function() {  
      return this.replace(/[@]+[A-Za-z0-9-_]+/g, function(u) {  
           var username = u.replace("@","")  
           return u.link("http://twitter.com/"+username);  
      });  
 };  
 String.prototype.parseHashtag = function() {  
      return this.replace(/[#]+[A-Za-z0-9-_]+/g, function(t) {  
           var tag = t.replace("#","%23")  
           return t.link("http://search.twitter.com/search?q="+tag);  
      });  
 };  

Las funciones parse permiten parsear los hastags , links y menciones dentro del texto del tweet como links a las mismas.

martes, 15 de mayo de 2012

Pasar parámetros por URL a un TAB de facebook (PHP API)


Hace algunos días me encontré con pequeño inconveniente al tratar de implementar una aplicación
en Facebook que permitiera enviar información de un usuario a otro en un Tab de Facebook, desde hace mucho tiempo pensé que enviar estos parámetros por query string a una app embebida en un TAB de facebook era imposible pero investigando un poco encontré la solución:

El objeto signed_request es un parámetro tipo JSON que usa Facebook para pasar información a las aplicaciones en diferentes escenarios a traves de HTTP POST.  Para mayor información de este parámetro la documentación oficial del mismo se encuentra aquí

Volviendo al caso concreto de un Tab de facebook  el cual nos interesa, podemos encontrar que en el signed_request  contiene un  parametro  con el nombre de app_data que es el que contiene la informacion que pasamos por GET en nuestra aplicacion

Ej: observando esta URL

https://www.facebook.com/NOMBRE_FAN_PAGE/app_ID?app_data=MiParametro

se esta asignando el valor de MiParametro a app_data

Para acceder a el a través de PHP usaremos la siguientes funciones (Recordemos que debemos usar el API oficial de Facebook para PHP):

include ('facebook.php');

$app_id = "APP_ID";
$app_secret = "APP_SECRET";
$facebook = new Facebook(array(
    'appId' => $app_id,
    'secret' => $app_secret,
    'cookie' => true
));

if (isset($_REQUEST['signed_request'])) {
$temp = $facebook->getSignedRequest();
$uid = $temp["app_data"];
}

El llamado del método  getSignedRequest(), nos genera un JSON PHP con toda la información proveniente del parámetro signed_request  enviado por Facebook a nuestro tab, y a través del parámetro "app_data" lo podremos acceder.

Hay un aspecto interesante y que puede confundir a algunos (mi caso) y es el de suponer que si uso el envío de un parámetro diferente de esta forma:

https://www.facebook.com/NOMBRE_FAN_PAGE/app_ID?app_data=MiParametro&mensaje=hola mundo!

nos haría suponer que el objeto signed_request  recibirá el parámetro "mensaje" pero no es así, si vaz a enviar mas de un parámetro codificarlo como otro JSON o XML por ejemplo.

Saludos!
y hasta pronto!








miércoles, 9 de mayo de 2012

La función Facebook.init de AS3 no responde







Hace algunos días por temas de actualización el el SDK de JAVASCRIPT en el archivo  http://connect.facebook.net/en_US/all.js  muchas aplicaciones de FACEBOOK en ACTIONSCRIPT dejaron de funcionar, si tienes algún problema respecto a tema de inicializacion de tu aplicacion en AS3 te recomiendo que sigas los siguientes pasos:


  • Elimina el api GraphAPI_Web_1_8_1.swc de tu proyecto o archivo FLA
  • Descarga una modificación temporal del GRAPH API de AS3 aqui 
  • pega el directorio com en el root de tu proyecto y compila

Esperemos pronto salga una versión oficial del API de AS3 con estas correcciones