Páginas

domingo, 11 de octubre de 2015

Configurar Zona horaria en Ubuntu Server y PHP

En uno de mis desarrollo frecuentes en PHP y Ubunto Server me encontré con un problema;

La hora del sistema se almacenaba en my base de datos MySQL con una hora de adelanto.

Lo primero en que pensé fue en que el servidor tenia mala la zona horaria y lo solucione de la siguiente manera:

desde la consola de Ubuntu Server:
$ dpkg-reconfigure tzdata

una ves presionen enter se abre un asistente en el cual seleccionado nuestra zona horaria en mi caso Bogota-Colombia. 

Lugo precione en la misma consola
# date

y el resultado fue el esperado la fecha y hora actual de mi país, pero en la base de datos se seguía almacenando la hora con 1 hora de mas. Entonces pensé en que el problema podría estar en la configuración de PHP, por lo tanto después de un tiempo buscando en Google logre encontrar la forma de configurar la Zona Horaria en PHP.:

  1. Abrimos nuestro php.ini (sudo pico /etc/php5/apache2/php.ini)
  2. Buscamos la linea date.timezone 
  3. Si se encuentra comentada ( ; ) eliminamos el punto y coma
  4. le asignamos nuestra zona horaria a esta sentencia 
date.timezone = America/Bogota

En  http://php.net/manual/es/timezones.america.php encontramos todas las zona horarias del planeta. 


echo lo anterior simplemente no queda resetear nuestro servidor apache; con el siguiente comando desde la consola:



# /etc/init.d/apache2 restart



sábado, 3 de octubre de 2015

Virtual Hosts en XAMPP

Configurar Hosts virtuales me facilita las pruebas de mis aplicaciones Web de una forma fácil, intentare explicar lo pasos que seguí para configurarlo en XAMPP en my MacBook.


Editamos el siguiente archivo con un editor de Texto plano

/Applications/XAMPP/xamppfiles/etc/httpd.conf

 Buscamos la linea

# Virtual hosts
#Include etc/extra/httpd-vhosts.conf

y la descomentamos quitando el # de la que dice Include.

Editamos el siguiente archivo

/Applications/XAMPP/xamppfiles/etc/extra/httpd-vhosts.conf.

al Final agregamos o modificamos las lineas
# localhost
<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "/Applications/XAMPP/xamppfiles/htdocs"
    <Directory "/Applications/XAMPP/xamppfiles/htdocs">
        Options Indexes FollowSymLinks Includes execCGI
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Para que localhost siga funcionando igual, y las siguientes lineas para que funcione nuestro Virtual Host.

# davidweb.com
<VirtualHost *:80>
    ServerName local.davidweb.com
    DocumentRoot "/Users/miguellopezariza/Dropbox/davidweb"
    <Directory "/Users/miguellopezariza/Dropbox/davidweb">
       Options Indexes FollowSymLinks Includes execCGI
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Por ultimo editamos el archivos /etc/hosts 
y agregamos 


#Virtual Hosts
127.0.0.1 local.davidweb.com

 

Guardamos y reiniciamos en XAMPP y listo nuestro Host Virtual creado.

Si por algún motivo se nos muestra un error de acceso prohibido! Error 403, realizamos lo siguiente.

Abrimos el archivo /Applications/XAMPP/xamppfiles/etc/httpd.conf 
y Buscamos la linea 
User daemon
Group daemon


y donde dice User remplazamos daemon por nuestro usuario del sistema, reiniciamos apache y listo.




 

lunes, 18 de mayo de 2015

Publicar App Android echa en Xamarin al PlayStore

Para publicar una app en el PlayStore de Google, debería ser un proceso muy facil hacerlo desde el ID de Xamarin, y al principio así me precio, pero después de un tiempo empecé a notar que los posibles usuarios de mi app se encontraban con este problema al intentar instalar en algunos teléfonos android.


Entonces después de buscar en mucho foros, por fin logre corregir ese error, consiste en crear el keystore desde la consola ya sea de Windows o Mac y luego utilizar jarsigner para firmar el Apk con la keystore.  

Los Pasos que realize fueron los Siguientes.


  • Verificar que tenemos el JDK 6 de Java instalado en nuestro sistema y configurado el PATH de este corectamente; todas la pruebas que realize con otras versiones del JDK no funcionaron, ni JDK 7 ni JDK 8. 

  • Creamos nuestra Keystore para poder firmar la App. 
$ keytool -genkey -v -keystore <filename>.keystore -alias <key-name> -keyalg RSA -keysize 2048 -validity 10000. 

  • Generar el APK desde el IDE de Xamarin, Abrimos la solucion en Xamarin, luego colocamos en "Release" el tipo de compilacion, luego damos click derecho sobre nuestra solucion y seleccionamos Construir App, con esto conseguimos que nuestro IDE genere nuestro Apk listo para se firmado con  jarsigner, este archivo lo localizamos la ruta donde esta nustra Solucion y entramos a la Carpeta Bin y  dentro de ella entramos a Release y aqui encontraremos el .apk de nuestra app, lo copiamos y lo colocamos en la misma carpeta donde tenemos nuestra keystore.
  • Firmar nuestra Apk con la keystore
     Jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1
     -keystore mi-release-key.keystore my_application.apk nombre_alias
 
     Jarsigner -verify -verbose -certs my_application.apk
 
     Zipalign -v 4 your_project_name.apk-your_project_name unaligned.apk  
 
Con esto ya tenemos nuestra App lista para subirla al PlayStore, y sobre 
todo instalarce en cualquier Telefono Android.
 
 
 

jueves, 19 de marzo de 2015

sendmail in Mac OS X Yosemite + mail de PHP

En ocasiones queremos enviar email desde nuestro equipo (localhost) desde un archivo php
Ejemplo :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
<?php 
 echo "Mandamos Email<br>";
 
    error_reporting(-1);
    ini_set('display_errors', 'On');

    $headers = array("From: from@example.com",
    "Reply-To: replyto@example.com",
    "X-Mailer: PHP/" . PHP_VERSION
    );
    $headers = implode("\r\n", $headers);
    $didhappen = mail('graficoapp@gmail.com', 'test', 'test', $headers);

     if($didhappen) {
        echo 'true';
     } else {
        echo 'false';
     }
 
 ?>

y nos encontramos con la sorpresa de que el email no fue enviado pues el código nos imprime en pantalla false, para solucionar este problema los pasos son lo siguientes.

  1. Editamos el archivo /Applications/XAMPP/etc/php.ini 
  2. descimentaríamos la linea ";sendmail_path" quitandole el ;
  3. La linea quedaria de la siquiente forma 
              sendmail_path = "env -i /usr/sbin/sendmail -t -i"

Lo guardamos y listo ya podremos enviar email desde PHP en nuestro Mac

domingo, 15 de marzo de 2015

Error 500 al subir pagina joomla de localhost a tu hosting compartido

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, webmaster@miweb.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.


El error es ocasionado por una cuestión de permisos en las carpetas de la pagina web en el servidor remoto (public_html);


La solución es asignar los permisos de la siguiente forma:

Las carpetas: 755

Los archivos que están por fuera de estas carpetas: 644

La carpeta Administrator deve estar 755
Las carptas dentro de Administrator 755
y el index.php que estan dentro de Administrator 644



esto solo se hace sobre las carpetas y los directorios que están en public_html no en los subdirectorios.

miércoles, 4 de febrero de 2015

Borrar Historial de Activitys en Xamarin

En uno de estos días, que anduve por los caminos de la programacion móvil en Xamarin, me encontré con la siguiente situación,

Necesitaba borrar una lista de activitys previamente cargadas en memoria al momento de hacer click en un botón en el ultimo activity, después de probar muchas opciones y cuando ya me estaba dando por vencido encontré una solución a mi problema, coloco el código del evento Click de mi boton.



1
2
3
4
5
6
        btnVolver.Click += delegate {
  Intent i = new Intent(this.ApplicationContext, typeof(Principal)); //La Actividad que vamos a cargar
  i.SetFlags(ActivityFlags.NewTask | ActivityFlags.ClearTop ); // Limpia todas las actividades de la pila
  StartActivity(i);//Inicioamos la Actividad
  this.Finish();//Destruimos la Activivy actual
 };