Mostrando entradas con la etiqueta desarrollo. Mostrar todas las entradas
Mostrando entradas con la etiqueta desarrollo. Mostrar todas las entradas

jueves, 8 de mayo de 2014

Habilitar PostgreSQL con WAMP Server

Continuando con la serie de posts sobre PostgreSQL, vamos a incluir uno para habilitar el soporte de PostgreSQL con WAMP Server. Si tratáis de hacer uso de la función pg_connect() sin activar este soporte aparecerá el siguiente error:

Fatal error: Call to undefined function pg_connect() in ...

El proceso debería ser bastante sencillo, pero la presencia de un bug en la versión 2.X de WAMP Server lo complica un poco (aunque os daremos la solución más adelante).


Partimos del supuesto de un servidor WAMP ya instalado, si no sabéis cómo hacerlo tenéis un tutorial aquí: http://alcasoft.blogspot.com.es/2011/12/instalacion-de-un-servidor-local-wamp.HTML

Una vez instalado, la activación de los módulos de Apache y extensiones de PHP es relativamente sencilla: hacemos clic en el icono de WAMP en la barra de tareas > PHP > Extensiones de PHP y activamos las siguientes:

  • php_pdo_pgsql
  • php_pgsql



Al reiniciar los servicios de WAMP debería funcionar, pero si tratamos de hacer uso de la función sigue apareciendo el error:


Si verificáis las extensiones habilitadas (con la función phpinfo() dentro de una página PHP), podréis comprobar que pgsql no se encuentra activo pese a haberlo activado en el interfaz gráfico de WAMP.

Esto se debe a un bug en WAMP. PostgreSQL hace uso de la librería libpq.dll encargada de ejecutar consultas SQL en Postgre. Esta librería debería estar en la carpeta bin de la instalación de Apache, pero se encuentra en la carpeta de PHP.

La solución es sencilla: copiar esa librería a la carpeta correcta:

  • Origen: C:\wamp\bin\php\php5.3.10
  • Destino: C:\wamp\bin\apache\Apache2.2.21\bin
Las rutas obviamente pueden cambiar dependiendo del directorio raíz de vuestra instalación de WAMP y de la versión del mismo, pero espero que os sirvan de ejemplo.

Reiniciamos los servicios de WAMP y comprobamos de nuevo con phpinfo():

 
Ya aparece la extensión activa y podremos hacer uso de las funciones de PHP para PostgreSQL desde nuestro código.

domingo, 2 de marzo de 2014

Android: activar opciones de desarrollador en Android 4.2 y superior

A partir de la versión 4.2 de Android, las opciones de desarrollador vienen ocultas por defecto para evitar que el grueso de los usuarios active alguna de ellas accidentalmente.

Para activarlas debemos seguir el siguiente proceso:

  1. Pulsar Ajustes
  2. Información del dispositivo
  3. Pulsar siete veces sobre el número de compilación




Aparecerá el mensaje ¡Ahora eres un desarrollador! informando del resultado del proceso, mostrando más opciones de ajuste.

jueves, 27 de febrero de 2014

Eclipse: ejecutar aplicaciones en un terminal Android real

Seguramente conoceréis Eclipse, uno de los IDE de software libre más extendido para desarrollar aplicaciones Android (con permiso de Android Studio, aún no muy generalizado).

A la hora de probar las aplicaciones que vamos desarrollando tenemos dos opciones: utilizar un emulador o probarlas directamente en un dispositivo Android. La primera opción es más sencilla de configurar, pero los emuladores son extremadamente lentos e inestables y resulta aconsejable utilizar la segunda (probar en un dispositivo real).

Requisitos previos


Obviamente necesitamos un terminal Android, un cable de conexión USB y tener los drivers instalados en nuestro sistema operativo. Será necesario activar el modo de depuración por USB en el terminal en las opciones de configuración > Opciones de desarrollador > Activar Depuración por USB:


Configurando Eclipse


Podéis descargar Eclipse desde la página del desarrollador en: https://www.eclipse.org/downloads/. Para configurar el entorno de prueba debemos abrir el Android SDK Manager:


Comprobamos que tenemos instalado el Google USB Driver en la carpeta Extras (o lo instalamos en caso contrario)


Con esto ya podremos ejecutar nuestros proyectos Android en el terminal conectado con el cable USB. Si pulsamos sobre ejecutar el proyecto (o CTRL+F11) aparece una pantalla para seleccionar el destino de la ejecución, en nuestro caso un terminal Samsung Galaxy S3:



Y el resultado en el terminal de nuestro sencillo proyecto:





Esperamos que os resulte útil.

domingo, 12 de mayo de 2013

Tutorial de PHP I: Introducción a PHP


PHP (acrónimo recursivo que significa PHP Hypertext Pre-processor) es un lenguaje de programación orientado a objetos orientado al desarrollo web con programación dinámica. Nos va a proporcionar toda la potencia de la que carece HTML para gestionar conexiones con bases de datos, crear contenido dinámico, etc...

CARACTERÍSTICAS DE PHP


La principal característica de PHP es su orientación a objetos. Ese paradigma de programación nos permite modelar la realidad en clases y objetos:

  • Clases: cualquier cosa del mundo real que queramos modelar (un coche, un impreso, una conexión...)
  • Objeto: ocurrencia de una clase concreta.
La mejor forma de entender este concepto es a través de un ejemplo: podemos modelar todos los coches como una clase de nombre coche. Esa clase tendrá una serie de características comunes a todos los coches (número de puertas, potencia, número de plazas, etc...). Un objeto sería un coche concreto, por ejemplo un Renault Clio con 5 puertas, 130 CV y 5 plazas.

Otra de sus características es su tipado dinámico. Como ya explicamos en el tutorial sobre Python, consiste en que el tipo de una variable se determina en tiempo de ejecución, es decir, en función del valor que le asignamos. A diferencia de Python, PHP tiene un tipado débil: el tipo de la variable puede cambiar si asignamos un valor de un tipo distinto (Python lanzaba una excepción).


<?
   a = "Hola Mundo";    //La variable es de tipo String
   a = 1;     //La variable ahora es de tipo entero
?>

Otra característica importante es que es interpretado en el propio servidor por lo que al cliente sólo le llegará código HTML. Esto viene muy bien ya que las conexiones con base de datos se hacen desde el servidor, con lo que aumenta la seguridad de nuestras aplicaciones.

Precisamente la conexión con base de datos está muy trabajado con PHP. Existen librerías de conexión y gestión con muchas bases de datos del mercado (comerciales y software libre). Las librerías de conexión con MySQL y PostgreSQL son de las más utilizadas (aunque podemos gestionar bases de datos Microsoft SQL Server y Access).


EL ENTORNO DE TRABAJO


Para ejecutar un script PHP necesitamos que nuestro servidor web lo soporte. La mayoría de los alojamientos actuales tienen soporte para PHP y si queremos trabajar en local existen unos paquetes instalables que contienen de forma conjunta un servidor web (Apache), soporte para el propio PHP y un servidor de bases de datos MySQL. Los tenemos disponibles para varias plataformas y disponéis de instrucciones de instalación en nuestro propio blog:


NUESTRO PRIMER SCRIPT


Un script PHP es un fichero de texto plano con extensión .php (para que el servidor web sepa de qué tipo de archivo se trata). Podemos encontrar otro tipo de extensiones como phtml, php5, etc... aunque lo más usual es trabajar con la extensión .php.

Su contenido puede ser exclusivamente php o tratarse de una página web escrita en HTML con php entre medias. Puede coexistir con lenguajes como JavaScript, JQuery...

El código PHP estará delimitado por los tags <?php y ?>, aunque es frecuente que nuestro servidor web soporte <? y ?> (la opción short_tags enabled en php.ini, ya os hablaremos de ello más adelante). Cada instrucción se separará de la siguiente con un punto y coma, y los bloques entre llaves (una notación muy similar a C++ o Java).

La primera instrucción de la que os vamos a hablar es echo. Esa instrucción imprime por pantalla la información que le pasemos (puede ser una cadena, una variable...). Podéis ver su funcionamiento en el siguiente fragmento de código:

<?php
    echo "hola mundo";
?>

Otra instrucción interesante es la siguiente:

<?php
   phpinfo();
?>

Esta segunda instrucción nos muestra por pantalla la configuración de PHP en nuestro servidor, muy interesante para saber con qué posibilidades y extensiones contamos (os lo explicaremos más adelante en otro post).

Por hoy ya está bien, id estirando los dedos que en el próximo post entraremos en más faena.

viernes, 10 de mayo de 2013

Tutorial Python IV: funciones, clases y objetos

< Tutorial III:

Hasta ahora hemos visto fundamentos del lenguaje, pero para poder utilizar toda la potencia de un lenguaje de programación orientado a objetos necesitamos precisamente eso: aprender a diseñar clases e instanciar objetos.

CLASES


Usaremos la palabra reservada class para definir el nombre de la clase seguido de dos puntos y el cuerpo de la clase.

class persona:
     def __init__(self,nombre,edad):
          self.nombre = nombre
          self.edad = edad
     def mayordeedad(self):
          if self.edad > 18:
               print("Es mayor de edad")
          else
               print("No es mayor de edad)

Podemos observar la sentencia __init__, el constructor de la clase. Con la instrucción def podemos definir métodos (tanto el constructor como el resto).


OBJETOS


Instanciamos el objeto de la clase definida anteriormente mediante la sentencia:

empleado = persona("Pepe",33)

En esta sentencia invocamos el método constructor de la clase con los parámetros adecuados para inicializar las variables de clase.

Podemos acceder a los atributos de un objeto con el operador punto:

print(empleado.nombre,"tiene",edad)

FUNCIONES

Definimos las funciones del mismo modo que los métodos de una clase (con la palabra reservada def). Las funciones en Python siempre devuelven un valor usando return. Si no lo hacemos de forma explícita la función devolverá None.

def cuadrado(numero):
     print(numero ** 2)

Esta función se invoca con la sentencia
cuadrado(4)

Según comentamos antes, podemos devolver un valor con return

def cuadrado(numero)
     return numero ** 2

Y la invocación sería

print(cuadrado(4))


CONCLUSIÓN

Como habéis podido comprobar, Python es un lenguaje extraordinariamente sencillo. Pero que no os lleve a engaño, también es un potente y completo lenguaje orientado a objetos con el que podemos construir aplicaciones y sistemas.

Espero que os sea útil

miércoles, 8 de mayo de 2013

Tutorial Python III: estructuras de control

< Tutorial Phyton II: Sintaxis Básica

Continuando nuestro tutorial de Python vamos a conocer las sentencias del lenguaje que nos servirán de base para implementar nuestros algoritmos.


CONDICIONAL


Sentencia if-else nos permite ejecutar sentencias diferentes si se cumple una determinada condición.

# 
if(numero / 2 == 0):
     print("El numero es par")
else:
     print("El numero es impar")

Imprimiremos par o impar en función del valor de la variable numero.


WHILE


Ejecutamos las sentencias mientras se cumpla una determinada condición.

# 
numero = 3
while numero<=5
     print(numero)
     numero+=1

Imprimiremos 3, 4 y 5.


FOR ... IN


Recorremos una colección elemento por elemento.

lista = ["Diego","Pepe","Jose"]
for nombre in lista
     print(nombre)

Imprimimos cada uno de los nombres de la lista.


martes, 7 de mayo de 2013

Tutorial Python II: Sintaxis básica


Continuando con el tutorial de Python, vamos a empezar con la sintaxis.

TIPOS BÁSICOS


Recordad que es un lenguaje con tipado dinámico, no hay que declarar explícitamente las variables (toman el tipo en tiempo de ejecución). En cualquier caso es fuertemente tipado: una vez adjudicado un tipo a una variable no puede cambiar a otro tipo (no es posible el casting).

Las variables pueden tomar los siguientes tipos:

  • Enteros: números positivos o negativos sin decimales. Existen dos subtipos: int (que usa 32 o 64 bits para representar el número, en función del sistema operativo) y long (no tiene más límite que la memoria disponible en el equipo).
    # Número entero
    a = 2
    #Número entero largo
    a = 2L
    
  • Reales: con coma decimal, de tipo float
    b = 3.0
    
  • Complejos: números compuestos por una parte real y otra imaginaria.
    complejo = 3.5 + 8.1j
    
  • Booleanos: valor lógico verdadero o falso
    b = True
    
  • Cadenas: texto encerrado entre comillas simples o dobles
    mensaje = "Hola Mundo"
    

TIPOS COMPLEJOS o COLECCIONES

Un tipo complejo es un tipo de dato que se construye a partir de una combinación de tipos básicos. Son tipos avanzados también conocidos como estructuras de datos. En Python son llamados colecciones, y son las siguientes:

  • Listas: colecciones ordenadas de datos (son los arrays o vectores de otros lenguajes de programación). Son mutables (pueden cambiar de contenido) y contener cualquier tipo de dato (incluso mezclados) y subcolecciones. Los elementos se encierran entre llaves y se separan con comas:
    lista = ["Alcasoft",True,12,[1,"a"]]
    #a vale "Alcasoft"
    a = lista[0]
    #b vale 1
    b = lista[3][0]
    
  • Tuplas: son similares a las listas pero bastante más ligeras y básicas. Son inmutables (si intentamos cambiar uno de sus valores Python generará un error). Los elementos se delimitan entre paréntesis y se separan por comas.
    tupla = ("hola",False,43)
    #b vale 43
    b = tupla[2]
    
  • Diccionarios: colecciones que relacionan clave y valor.
    dic = {"Nombre":"Alcasoft","Sector":"Tecnologías Web","Numeros":[1,2,3,4]}
    x = dic["Nombre"] #x vale "Alcasoft"
    x = dic["Sector"] #x vale "Tecnologías Web"
    x = dic["Numeros"][1] #x vale 2
    

lunes, 6 de mayo de 2013

Tutorial Python I: Introducción a Python


Python es un lenguaje de programación orientado a objetos muy sencillo, tal vez el más fácil de utilizar para aprender a programar. Debido a su sencillez y una serie de características ha experimentado un rápido crecimiento para todo tipo de aplicaciones (las últimas distribuciones de Linux cada vez tienen un mayor porcentaje de código Python, aunque es usado por compañías tan conocidas como Google, Yahoo o la propia NASA).

En este primer post vamos a acercarnos un poco al lenguaje antes de entrar en la sintaxis propiamente dicha.

CARACTERÍSTICAS BÁSICAS


  • Sintaxis muy sencilla, lo que facilita un rápido aprendizaje.
  • Interpretado: el código fuente se traduce a un archivo bytecode con extensión pyc o pyo (el cual será ejecutado por el intérprete Python). Es un mecanismo similar al que se utiliza con Java (archivos JAR) y la máquina virtual.
  • Tipado dinámico: el tipo de variable se determina en tiempo de ejecución (como otros lenguajes como PHP).
  • Fuertemente tipado: una vez tipada una variable no puede cambiar de tipo.
  • Multiplataforma: existe intérprete de Python para una gran cantidad de plataformas (Linux, Windows, MacOS).
  • Orientado a objetos
  • No utiliza separadores de línea (como el ; de C++, Java o PHP) ni de bloque (llaves {} en esos mismos lenguajes). Python utiliza la sangría (número de espacios) para delimitar bloques.

FORMAS DE EJECUCIÓN


Podemos ejecutar comandos directamente en el intérprete de Python (en modo consola) o crear scripts (archivos en texto plano de comandos en Python con extensión py que ejecutamos con el intérprete).

DESCARGA E INSTALACIÓN


Podemos encontrar el intérprete en la página oficial de Python:

http://www.python.org/getit/

Descarga la versión adecuada para tu sistema operativo y sigue los pasos de la instalación (muy sencillo).

ENTORNO DE DESARROLLO


Los scripts de Python son ficheros de texto plano que podemos editar en un sencillo editor de texto (como el notepad de Windows). Sin embargo recomendamos que utilicéis un editor que discrimine el código por colores como Notepad++, TextPad, Eclipse, NetBeans...



viernes, 3 de mayo de 2013

Java: pruebas unitarias con JUnit y NetBeans

Si desarrolláis en Java seguramente hayáis utilizado algún entorno de desarrollo (o IDE) como Eclipse o NetBeans. El siguiente tutorial está centrado en el uso de JUnit en NetBeans (usamos la versión 7.0).

Las pruebas unitarias son las que realizamos sobre cada uno de los componentes que forman parte de la aplicación. Vamos a partir de una clase Java que implementa cuatro operaciones básicas de una calculadora: suma, resta, multiplicación y división. Podéis acceder al proyecto completo de este tutorial en este enlace.

Descomprimimos el proyecto y lo abrimos desde NetBeans. Para implementar las pruebas con JUnit abrimos la clase Calculando.java y seleccionamos el menú Herramientas > Crea pruebas con JUnit:


En el cuadro de diálogo siguiente elegimos JUnit 4.x


En el diálogo siguiente mantenemos las opciones por defecto y aceptamos:


Ahora podemos acceder a la clase "CalculandoTest" creada en el paquete "Paquetes de prueba":



Éste método que vemos en la imagen superior es un prototipo (tiene los valores establecidos a cero y una función "fail()" que lanza un fallo en el método. Si ejecutáramos la prueba (ejecutando la clase, con Alt + F6 o con el menú contextual sobre el menú del proyecto > Probar) se produciría el siguiente resultado:


Falla porque debemos implementar los valores de los parámetros y el resultado previsto (cada uno de los casos de prueba) para cada método probado. Podemos implementar los casos de prueba estableciendo los valores de entrada, el valor esperado de cada operación y comentando (o eliminando) la llamada a la función fail(). Os mostramos un ejemplo con el método testMultiply():


Una vez establecidos todos los casos de prueba (valores para todos los métodos) ejecutamos de nuevo las pruebas (menú contextual > Probar sobre el proyecto, ejecutar la clase test o con Alt + F6):


Como vemos si las pruebas son satisfactorias aparecerá como la imagen superior. Podéis encontrar el código de la clase de ejemplo y de test en el proyecto en el enlace del primer párrafo:

https://mega.co.nz/#!MwhBGKBL!HEIxk12AZIYs8XgZUNWXqjEL1qNts6SRK3FZXz59Qd8

sábado, 6 de abril de 2013

Incluir código PHP en páginas y Posts de WordPress

Continuando con la serie de artículos dedicados a WordPress vamos a explicar cómo incluir código PHP en los posts y páginas de WordPress. Para ello vamos a instalar el plugin insert-php: desde el apartado Plugins > Add New y busca "php" y aparecerá en los primeros resultados:


Instálala y actívala. Para poder utilizar código PHP desde un post o página simplemente sustituye las etiquetas <? y ?> por [insert_php] y [/insert_php].

Por ejemplo:


Produce el siguiente resultado:


Dado que el editor de WordPress no es muy potente puedes editar tus scripts PHP con Notepad++, TextPad o el que prefieras y almacenarlos en un directorio en la raíz de wordpress (por ejemplo llamado includes). Puedes almacenar allí tus scripts php e incluirlos directamente desde los artículos:

[insert_php]
include("includes/mi_script.php");
[/insert_php]

De este modo no tienes que editar el código directamente en WordPress y puedes utilizar un editor más potente e interesante.

jueves, 14 de febrero de 2013

Joomla: crear un campo personalizado en el registro de usuarios

¿Necesitáis crear un campo nuevo para vuestros usuarios? Vamos a explicar cómo añadir campos en el registro de usuarios de Joomla 2.5. Dividiremos el proceso en dos partes:

1) Agregar el campo en el registro

Modificaremos el archivo components/com_users/models/forms/registration.xml para añadir los campos que queramos. Si os fijáis en la estructura del resto de registros podemos utilizarlos como guía:

Como podéis ver en la imagen, hemos creado los campos encuadrados en rojo. El primero es un campo entero para modelar un checkbox y el segundo es un campo de texto con máximo 50 caracteres. El atributo name debe coincidir con el nombre del campo de la base de datos que lo alojará (y el tipo debe ser compatible).
 
Ahora vamos a hacer los cambios en la base de datos. Nosotros utilizamos PhpMyAdmin para acceder a la misma. Localizad la tabla prefijo_users (donde prefijo será aquel que hayáis elegido en vuestra instalación de Joomla). Al final de la tabla vamos a añadir dos campos:
 
 
Como véis hemos llamado a los campos con el mismo nombre que pusimos en el atributo name del xml y el tipo de dato es int(1) para el entero y varchar(50) para el campo de texto.
 
Si accedéis al formulario de registro de Joomla podéis ver los nuevos campos:
 
 
Como podéis ver ya tenemos los campos disponibles en el registro de usuarios. La gestión de estos campos ya podremos hacerla desde nuestros propios módulos o componentes.


Recomendaciones de Alcasoft