PhpStorm: IDE de desarrollo para programar en PHP

PhpStorm es un interesante IDE de desarrollo para PHP el cual he empezado a utilizar. Desde hace mucho utilizo a Eclipse como IDE, pero decidí probar esta alternativa debido a que desarrollando en Android y hacer el paso de Eclipse a Android Studio noté varias cosas que me agradaron.

Encontré que debido a que estaba basado en IntelliJ la misma empresa tiene varios IDE’s para desarrollar, entre ellos PhpStorm. Estoy trabajando un proyecto junto con Yii2 y va bastante bien. Seguramente estaré publicando algunas cosas más de este IDE.

Sitio: https://www.jetbrains.com/phpstorm/

Descarga: https://www.jetbrains.com/phpstorm/download/

Gratuito: No.

Captura de pantalla:


jx_post_871_02

GitKraken: cliente para Git

GitKraken es un cliente para administrar nuestros cambios de nuestros proyectos con Git. Últimamente lo he empezado a usar bastante con GNU/Linux y me ha dejado muy buen sabor de boca, aún no se le compara al 100% a SourceTree que lo he usado ya bastante tiempo en Mac OS X.

Esta en constante actualización debido a que todavía está en versión Beta.

Esta disponible para su descarga en GNU/Linux, Mac OS X y Windows.

 

La liga para su descarga es:

Sitio: http://www.gitkraken.com

Descarga: http://www.gitkraken.com/download

Gratuito: Si.

Aquí dejo una captura de pantalla de este cliente.


jx_post_857_02

configure: error: xml2-config not found. Please check your libxml2 installation.

Cuando queremos instalar un paquete desde sus fuentes, muchas veces nos encontramos con algunos errores al tratar de compilarlo debido a que no contamos con todos los paquetes y bibliotecas necesarias para que se instale el software que deseamos.

configure: error: xml2-config not found. Please check your libxml2 installation.

En el caso de este error, para corregirlo podemos instalar el siguiente paquete como usuario root o usando el comando sudo:

root@debian8:~# apt-get install libxml2-dev

Se presiona Enter para instalar el paquete y con esto podemos proseguir con la instalación del software que arrojó este error.

configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/

Cuando queremos instalar un paquete desde sus fuentes, muchas veces nos encontramos con algunos errores al tratar de compilarlo debido a que no contamos con todos los paquetes y bibliotecas necesarias para que se instale el software que deseamos.

configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/

En el caso de este error, para corregirlo podemos instalar el siguiente paquete como usuario root o usando el comando sudo:

root@debian8:~# apt-get install libpcre3-dev

En mi caso me indicará que se necesitan instalar los siguientes paquetes extra y recomendaciones:
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes extras:
libpcrecpp0
Se instalarán los siguientes paquetes NUEVOS:
libpcre3-dev libpcrecpp0
0 actualizados, 2 nuevos se instalarán, 0 para eliminar y 0 no actualizados.
Se necesita descargar 579 kB de archivos.
Se utilizarán 1 266 kB de espacio de disco adicional después de esta operación.
¿Desea continuar? [S/n]

Se presiona Enter para instalar el paquete y con esto podemos proseguir con la instalación del software que arrojó este error.

configure: error: APR-util not found. Please read the documentation.

configure: error: APR-util not found.  Please read the documentation.

En este caso sólo hay que indicar la ruta donde tenemos instalado apr, si no lo tenemos instalado, primero deberemos instalarlo para poder indicar la ruta donde lo debe encontrar, como por ejemplo, en mi caso sería de la siguiente manera:

javoaxian@debian8:~/Developer/Applications/src/httpd-2.4.18$ ./configure --prefix=/home/javoaxian/Developer/Applications/apache --enable-module=so --with-apr=/home/javoaxian/Developer/Applications/apr --with-apr-util=/home/javoaxian/Developer/Applications/apr-util

 

configure: error: APR not found. Please read the documentation.

configure: error: APR not found.  Please read the documentation.

En este caso sólo hay que indicar la ruta donde tenemos instalado apr, si no lo tenemos instalado, primero deberemos instalarlo para poder indicar la ruta donde lo debe encontrar, como por ejemplo, en mi caso sería de la siguiente manera:

javoaxian@debian8:~/Developer/Applications/src/httpd-2.4.18$ ./configure --prefix=/home/javoaxian/Developer/Applications/apache --enable-module=so --with-apr=/home/javoaxian/Developer/Applications/apr

 

configure: error: APR could not be located. Please use the –with-apr option.

configure: error: APR could not be located. Please use the –with-apr option.

En este caso sólo hay que indicar la ruta donde tenemos instalado apr, si no lo tenemos instalado, primero deberemos instalarlo para poder indicar la ruta donde lo debe encontrar, como por ejemplo, en mi caso sería de la siguiente manera:

javoaxian@debian8:~# ./configure --prefix=/home/javoaxian/Developer/Applications/apr-util --with-apr=/home/javoaxian/Developer/Applications/apr

 

bash: make: no se encontró la orden

Cuando queremos instalar un paquete desde sus fuentes, muchas veces nos encontramos con algunos errores al tratar de compilarlo debido a que no contamos con todos los paquetes y bibliotecas necesarias para que se instale el software que deseamos.

bash: make: no se encontró la orden

En el caso de este error, para corregirlo podemos instalar el siguiente paquete como usuario root o usando el comando sudo:

root@debian8:~# apt-get install make

Se presiona Enter para instalar el paquete y con esto podemos proseguir con la instalación del software que arrojó este error.

configure: error: no acceptable C compiler found in $PATH

Cuando queremos instalar un paquete desde sus fuentes, muchas veces nos encontramos con algunos errores al tratar de compilarlo debido a que no contamos con todos los paquetes y bibliotecas necesarias para que se instale el software que deseamos.

configure: error: no acceptable C compiler found in $PATH

En el caso de este error, para corregirlo podemos instalar el siguiente paquete como usuario root o usando el comando sudo:

root@debian8:~# apt-get install gcc

En mi caso me indicará que se necesitan instalar los siguientes paquetes extra y recomendaciones:
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes extras:
binutils gcc-4.9 libasan1 libatomic1 libc-dev-bin libc6-dev libcilkrts5
libgcc-4.9-dev libitm1 liblsan0 libtsan0 libubsan0 linux-libc-dev
manpages-dev
Paquetes sugeridos:
binutils-doc gcc-multilib make autoconf automake libtool flex bison gdb
gcc-doc gcc-4.9-multilib gcc-4.9-doc gcc-4.9-locales libgcc1-dbg
libgomp1-dbg libitm1-dbg libatomic1-dbg libasan1-dbg liblsan0-dbg
libtsan0-dbg libubsan0-dbg libcilkrts5-dbg libquadmath0-dbg glibc-doc
Se instalarán los siguientes paquetes NUEVOS:
binutils gcc gcc-4.9 libasan1 libatomic1 libc-dev-bin libc6-dev libcilkrts5
libgcc-4.9-dev libitm1 liblsan0 libtsan0 libubsan0 linux-libc-dev
manpages-dev
0 actualizados, 15 nuevos se instalarán, 0 para eliminar y 0 no actualizados.
Se necesita descargar 16.7 MB de archivos.
Se utilizarán 69.6 MB de espacio de disco adicional después de esta operación.
¿Desea continuar? [S/n]

Se presiona Enter para instalar el paquete y con esto podemos proseguir con la instalación del software que arrojó este error.

Declaración de variables en Swift

Así como mostré la forma de declarar una constante en Swift, ahora le toca a las variables, para ello es muy similar a como se hizo en las constante, la única diferencia es que en lugar de poner la palabra:

let

Se deberá usar la palabra reservada:

var

Se indica la palabra reservada var, posteriormente se especifica el nombre de la variable y se asigna el valor que se le quiere poner, como a continuación se presenta:
var miVariable = "Esta es una variable"
De esta forma queda declarada una constante en Swift.

Declaración de constantes en Swift

Para declarar constantes en Swift se realizan de la siguiente manera.

Se indica la palabra reservada:

let

Posteriormente se especifica el nombre de la constante y se asigna el valor que se le quiere poner, como a continuación se presenta:
let miConstante = "Esta es una constante"
De esta forma queda declarada una constante en Swift.

Cómo obtener el ancho y alto (width y height) de una pantalla en iOS con Objective-C

Para obtener el ancho y el alto de una pantalla en iOS con Objective-C es muy sencillo, bastará con ejecutar las siguientes línea según sea el caso:

Ancho (width):

[[UIScreen mainScreen] bounds].size.width;

Alto (height):

[[UIScreen mainScreen] bounds].size.height;

 

Tomar capturas de pantalla (screenshots) en iOS Simulator

Cuando queremos publicar una app para iOS, el iTunes Connect nos solicita una serie de screenshots para poder publicarla. Yo regularmente tomaba las capturas de pantalla desde los dispositivos, pero conforme fueron apareciendo más de éstos, me fue imposible contar con ellos, por lo que me vi con la necesidad de saber cómo tomar los screenshots de otra forma, a lo cual me llevo a tomarlos desde el iOS Simulator.

Tomar una captura de pantalla desde el simulador es muy sencilla, sólo bastará correr nuestra app en el iOS Simulator, y con éste corriendo bastará con presionar:

Cmd + S

o ir a:

File -> Save Screen Shot

jx_post_509_01

cualquiera de las 2 opciones creará una imagen en el Escritorio (Desktop).

Borrar los proyectos recientemente abiertos en Xcode

Realizando un post que próximamente publicaré, me ví con la necesidad de limpiar la lista de proyectos recientes en Xcode. Por tal motivo, para llevar esto a cabo, realizaremos lo siguiente:

Abriremos Xcode.

jx_post_426_01

Ahora iremos a:

File -> Open Recent -> Clear Menu

Cerramos Xcode y una vez que lo volvamos a abrir, veremos que se ha limpiado la lista de proyectos recientes.

jx_post_426_02

Crear un UIScrollView con contenido en un UIView usando XIB y Objective-C en iOS

Existen muchas formas de crear un Scroll en iOS, esta es una forma sencilla de hacerlo, sobre todo cuando tenemos un contenido fijo y requerimos que se contenido tenga scroll.

Pre requisitos:

En este ejemplo la pantalla está configurada para un iPhone de 3.5 pulgadas.

jx_post_529_01

Lo que haremos será agregar un UIScrollView dentro del UIView que tenemos.

jx_post_529_02

jx_post_529_03

Ahora se creará un nuevo UIView el cual tendrá el contenido.

jx_post_529_04

Este UIView será de Size Freedom:

jx_post_529_05

y tendrá las medidas de 320 de width y 568 de height.

jx_post_529_06

En el UIView que acabamos de crear, agregaremos algún elemento visual en él en la parte de abajo, en este caso será un UILabel.


jx_post_529_07

jx_post_529_08

Ahora se deberá crear un property del UIScrollView como del UIView y conectarlos para incrustar el UIView dentro del UIScrollView.

Para hacer la conexión puede ser como se mencionó en cualquiera de estos dos post:

Aquí use el del segundo post.

jx_post_529_09

jx_post_529_10

En este ejemplo el UIScrollView se llama scrollViewContenido y el UIView se llama viewContenido.

Abriremos el archivo ViewController.h y en su método:

– (void)viewDidLoad

vamos a agregar el siguiente código para asignar el contenido del UIView dentro del UIScrollView.

[self.scrollViewContenido setContentSize:CGSizeMake(self.viewContenido.frame.size.width, self.viewContenido.frame.size.height)];

[self.scrollViewContenido addSubview:self.viewContenido];

El método quedará de la siguiente manera:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    
    [self.scrollViewContenido setContentSize:CGSizeMake(self.viewContenido.frame.size.width, self.viewContenido.frame.size.height)];
    [self.scrollViewContenido addSubview:self.viewContenido];
}

Si ejecutamos el ejemplo, podemos mover el scroll hacía abajo y veremos el UILabel que habíamos agregado.

jx_post_529_11

Cómo conectar automáticamente una property IBOutlet de un ViewController a un XIB o Storyboard en Objective-C

Un IBOutlet sirve para conectar un elemento visual a un elemento del controlador, en este caso, conectar un elemento de nuestro XIB o Storyboard a nuestro ViewController.

En esta ocasión, se describirá como hacerlo de forma más sencilla y casi automática, en: Cómo conectar manualmente una property IBOutlet de un ViewController a un XIB o Storyboard en Objective-C se indica cómo hacerlo de forma manual.

Pre requisitos:

  • Tener creado un proyecto.
  • Contar con un Storyboard o un archivo XIB con su respectivo ViewController.

Este ejemplo cuenta con un archivo Storyboard llamado Main.storyboard y un controlador llamado ViewController.

Lo primero que haremos es abrir el archivo de la interfaz gráfica Main.storyboard y crear un UILabel.

jx_post_516_01

jx_post_516_02

Lo siguiente será crear una conexión entre el UILabel que creamos y asignarlo a un property dentro del controlador, para esto, separaremos nuestra pantalla en dos. Aseguremonos que el archivo Main.storyboard esté seleccionado.
jx_post_516_03
y ahora selecionaremos la opción:
Show the Assistant editor
jx_post_516_04
la cuál son 2 círculos enlazados de Xcode para separar en dos la pantalla y así nos mostrará de un lado la interfaz gráfica y del otro el código fuente del controller asociado.
jx_post_516_05
Hay que asegurarse que esté seleccionado nuestro archivo .h para generar la conexión, en este caso el archivo es ViewController.h.
jx_post_516_10
Ahora crearemos la conexión y la property en el ViewController asociado, para ello, presionamos sobre el UILabel que creamos junto con la tecla Ctrl, lo cual hará que se muestre una línea azul y la dirigiremos hacia la sección con el código.
jx_post_516_06
soltaremos y nos mostrará una pantalla similar a esta:
jx_post_516_07
Ahora lo que haremos será introducir el nombre de nuestra property en en campo Name y presionaremos en Connect. En este caso se llamará labelNombre.
jx_post_516_08
Se creará una property en el controller y se generará la conexión a este con el elemento de la interfaz gráfica.
jx_post_516_09

Crear un menú lateral usando SWRevealViewController en Objective-C

SWRevealViewController es una biblioteca que nos permite crear un menús laterales ya sea del lado derecho o izquierdo de nuestra pantalla. He usado esta herramienta en algunas aplicaciones y la verdad es que me ha sido de bastante utilidad y sencilla de usar.

Pre requisitos:

 

Para comenzar descargaremos SWRevealViewController.

Descomprimimos el archivo que descargamos.

Ahora agregaremos SWRevealViewController a nuestro proyecto, para ello, haremos lo siguiente:

Presionamos con botón derecho sobre el nombre del proyecto y seleccionamos la opción:

Add Files to “Nombre del proyecto…

En este caso:

Add Files to “ProyectoXib”…

jx_post_470_01

Nos aparecerá una pantalla donde deberemos buscar la ubicación del archivo que descomprimimos y que deseamos agregar a nuestro proyecto.

En mi caso está en la carpeta Downloads, dentro de esta carpeta se creó una sub carpeta llamada: SWRevealViewController-master y dentro de esta existe otra carpeta llamada SWRevealViewController, en la cual se encuentran los archivos necesarios.

Seleccionaremos dicha carpeta, marcamos las opción Copy ítems if needed y Create groups para posteriormente presionar Add.

jx_post_470_02

Se creara una carpeta amarilla con el nombre de:

SWRevealViewController

Ahora abriremos el archivo AppDelegate.h y abajo de los import que tengamos:

#import <UIKit/UIKit.h>

jx_post_470_03

Agregaremos la siguiente línea:

@class SWRevealViewController;

jx_post_470_04

También se agregará la siguiente propiedad:

@property (strong, nonatomic) SWRevealViewController *viewController;

jx_post_470_05

Ahora crearemos un controller que tendrá la información del menú, en mi caso lo llamaré MenuViewController.

Para esto, seleccionamos el proyecto con carpeta amarilla y presionamos el botón derecho para seleccionar la opción New File…

En este ejemplo sería:

ProyectoXib -> New File…

jx_post_470_06

Aparecerá una pantalla donde seleccionamos la opción Cocoa Touch Class:

iOS -> Source Cocoa Touch Class

Presionamos Next y se mostrará una pantalla donde nos pide los datos del ViewController a crear, en este caso le pondré el nombre MenuViewController y marcar la opción Also create XIB file.

jx_post_470_07

Presionamos Next y por último se nos preguntará donde crear los archivos, aquí sólo hay que presionar en Create.

Ahora que tenemos ya nuestro controller para el menú, abriremos el archivo MenuViewController.xib para agregar el contenido de nuestro menú. Aquí colocaré un botón, pero lo más común para este menú es utilizar un UITableViewController para realmente dar el efecto de menú, pero cada quién es libre de construir el menú como se desee.

En este ejemplo el MenuViewController.xib quedaría de la siguiente manera:

jx_post_470_08

Abriremos el archivo AppDelegate.m e importaremos los siguientes archivos:

#import “SWRevealViewController.h”
#import “MenuViewController.h”

jx_post_470_09

Agregaremos a:

@interface AppDelegate ()

lo siguiente:

<SWRevealViewControllerDelegate>

Para que quede de la siguiente manera:

@interface AppDelegate()<SWRevealViewControllerDelegate>

Ahora dentro del método:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Debido a que este post se está basando en uno anterior, ya tenemos creado un objeto llamado: ViewControllerPrincipal el cual seguiremos usando.

Crearemos un navigationController para nuestra viewControllerPrincipal, esto es de la siguiente manera:

UINavigationController *navPrincipal = [[UINavigationController alloc] initWithRootViewController:viewPrincipal];

Crearemos un objeto del controlador del menú:

MenuViewController *menuView = [[MenuViewController alloc] initWithNibName:@"MenuViewController" bundle:nil];

Ahora crearemos el objeto del controlador SWRevealViewController que se encargará de dar el comportamiento del menú. Esto es de la siguiente manera:

SWRevealViewController *revealView = [[SWRevealViewController alloc] initWithRearViewController:menuView frontViewController:navPrincipal];

Al objeto revealView que creamos, le asignaremos el delegate para que pueda manejar los comportamientos.

 revealView.delegate = self;

Lo siguiente será asignarle a nuestra propiedad viewController definida en nuestro AppDelegate.h, el objeto revealView.

self.viewController = revealView;

Lo último que faltará hacer en este archivo es asignar al rootViewController de nuestro window nuestro atributo viewController, esto se hace de la siguiente manera:

[self.window setRootViewController:self.viewController];

Todo este método se verá de la siguiente manera:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    
    ViewControllerPrincipal *viewPrincipal = [[ViewControllerPrincipal alloc] initWithNibName:@"ViewControllerPrincipal" bundle:nil];
    MenuViewController *menuView = [[MenuViewController alloc] initWithNibName:@"MenuViewController" bundle:nil];
    UINavigationController *navPrincipal = [[UINavigationController alloc] initWithRootViewController:viewPrincipal];
    SWRevealViewController *revealView = [[SWRevealViewController alloc] initWithRearViewController:menuView frontViewController:viewPrincipal];
    revealView.delegate = self;
    self.viewController = revealView;
    [self.window setRootViewController:self.viewController];
    [self.window makeKeyAndVisible];
    
    return YES;
}
 jx_post_470_10

Abriremos el archivo ViewControllerPrincipal.h y haremos el siguiente import:

#import “SWRevealViewController.h”

Dentro del método:

– (void)viewDidLoad

Obtendremos el comportamiento del revealViewController de la siguiente manera:

SWRevealViewController *revealController = [self revealViewController];

Ya que tenemos creado este objeto, asignaremos los gestos para mover el menú de derecha a izquierdo o viceversa.

[revealController panGestureRecognizer];

[revealController tapGestureRecognizer];

Ahora crearemos un botón para el navigationBar que será el que se encargará de al ser presionado, mostrar u ocultar el menú.

 UIBarButtonItem *revealButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Menú" style:UIBarButtonItemStylePlain target:revealController action:@selector(revealToggle:)];

por último asignamos el botón al navigationBar del lado izquierdo.

[self.navigationItem setLeftBarButtonItem:revealController];

Esto se verá así:

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self setTitle:@"Principal"];
    
    SWRevealViewController *revealController = [self revealViewController];
    
    [revealController panGestureRecognizer];
    [revealController tapGestureRecognizer];
    
    UIBarButtonItem *revealButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Menú" style:UIBarButtonItemStylePlain target:revealController action:@selector(revealToggle:)];
    
    [self.navigationItem setLeftBarButtonItem:revealButtonItem];
}

jx_post_470_11

El menú se verá así:

jx_post_470_12


jx_post_470_13

Desactivar Auto Layout en iOS

En mi caso, a veces me gusta desactivar la opción de Auto Layout para usar la forma de diseño anterior de pantallas. Para hacer esto es muy sencillo aunque si manejan varios archivos .xib, será necesario hacerlo en cada uno de esos archivos.

Abriremos nuestro archivo xib o storyboard.

 

jx_post_576_01

 

Ahora seleccionamos la opción de:

File inspector

 

jx_post_576_02

 

Entre las secciones de File inspector encontraremos una sección llamada:

Interface Builder Document

ahí encontraremos la opción:

Use Auto Layout

la cual deberemos desmarcar y también se desmarcará la opción de:

Use Size Classes

 

jx_post_576_03

 

Se nos preguntará lo siguiente:

 

jx_post_576_04

 

Presionamos sobre:

Disable Size Classes

Y eso será todo