Consola avanzada para Windows

Gracias al programa gratuito ConEmu, podremos tener en nuestro sistema operativo Windows una consola con tantas pestañas como queramos.

Además de ser increiblemente configurable, nos permite usar otras consolas que ya tengamos, tales como cmd, powershell, ubuntu (para Windows 10), putty, etc…

Anuncios

Soporte de PHP 7.1 en Netbeans

PHP 7.1 lleva bastante tiempo disponible (desde el 1 de Diciembre de 2016), ya incluso está PHP 7.2 desde finales de Noviembre de 2017. Pues a día de hoy (mitad de Enero de 2018) la última versión estable de Netbeans (8.2) aún no soporta PHP 7.1.

Este hecho está provocando que muchos desarrolladores abandonen definitivamente Netbeans y usen otros IDEs, tal como PhpStorm.

Pues resulta que los desarrolladores de Netbeans incluyeron soporte para PHP 7.1 hace bastante tiempo, pero hasta que la siguiente release de Netbeans (será la versión 9) no sea liberada, no se podrá usar PHP 7.1 en Netbeans. Y el ciclo de release de Netbeans es muy largo, porque depende del ciclo de release de los JDK de JAVA…

Bueno, tenemos una opción de usar PHP 7.1 desde Netbeans, no es la solución definitiva ni la mejor, pero es una solución, y es descargar e instalar la última versión de Netbeans en estado de desarrollo.

Esta ultísima versión la encontraréis en este enlace:
Última versión de desarrollo de Netbeans.

Configurar el editor vim de Linux

Voy a explicar como realizar cambios permanentes en la configuración del editor de texto vim de linux.
El fichero, situado en nuestro directorio home, que hay que editar (crear previamente si no existe) es ~/.vimrc.
En este fichero escribiremos las distintas directivas que vim ofrece, entre ellas cabe destacar.

colorscheme slate Cambia el esquema de colores del editor. En este enlace puedes saber como conocer todas las combinaciones que vim ofrece.
set number Muestra el número de línea en cada línea.

Podéis dejar en comentarios de este artículo aquellas directivas de vim que más importantes os resulten a vosotros.

Cómo añadir alias para conexiones SSH desde Linux

Si estáis cansados de cada vez que os conectáis desde el shell (consola) de linux a otro servidor usando SSH, de esta manera podréis crear alias y conectaros de una manera más simple.

Hay que editar (como sudo) el fichero ~/.ssh/config y añadir un bloque como el que sigue para cada configuración que queramos tener:

Host dev1
HostName 192.168.1.11
User vagrant
Port 22

De esta forma podremos conectarnos a 192.168.1.11:22 con usuario vagrant, simplemente escribiendo:

ssh dev1

Cómo colorear y añadir información de GIT a la consola (shell) de linux al conectarse remótamente por SSH

Si os pasa que tenéis vuestro terminal de Linux coloreado y veis información de GIT en el prompt, y al conectarse en remoto vía SSH al mismo servidor ya no lo veis, lo que necesitáis hacer es crear, o editar, el siguiente fichero en vuestro directorio home ~/.bash_profile, y añadir la siguiente información:

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color) color_prompt=yes;;
esac
 
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes
 
if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        # We have color support; assume it's compliant with Ecma-48
        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
        # a case would tend to support setf rather than setaf.)
        color_prompt=yes
    else
        color_prompt=
    fi
fi
 
parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
   PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\] $(parse_git_branch)\[\033[00m\]\$ '
else
   PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi

Una vez salgáis de consola y volváis a conectaros por SSH veréis los cambios 🙂

Reiniciar/cambiar contraseña en el terminal/shell de Ubuntu de Windows 10

Si no os acordáis de la contraseña de vuestro usuario en el terminal (o shell) de Ubuntu de Windows 10, estos son los pasos que tenéis que seguir para poder cambiarla por otra nueva:

  1. Si tienes abierta la consola de Ubuntu, ciérrala.
  2. Abre la consola típica de Windows (Windows+R, y luego escribe cmd y pulsa Intro).
  3. Escribe en dicha consola: ubuntu config –default-user root
  4. Ahora abriremos de nuevo la consola de Ubuntu, y debe de aparecernos logueado con el usuario root.
  5. Escribe en la consola de Ubuntu: passwd tuUsuario
  6. En el paso anterior tuUsuario es obviamente el usuario al que quieres cambiar la contraseña. Justo después del paso 5, el sistema de preguntará por la nueva contraseña, y su confirmación.
  7. Cierra la consola de Ubuntu.
  8. Desde la consola de Windows (cmd), escribe: ubuntu config –default-user tuUsuario
  9. Ya puedes cerrar la consola de Windows (cmd).
  10. Vuelve abrir la consola de Ubuntu, te debe de aparecer logueada con tuUsuarioAhora puedes hacer acciones con tu usuario, que si te pregunta la contraseña, esta será la que acabas de crear.

 

Como crear una libreria externa e independiente en PHP que pueda ser importada desde composer usando packagist

Mientras inicio el desarrollo de una librería en PHP que sirva de cliente para el API de Twitter, únicamente como pasatiempo, y sirviéndome de la excelente librería de Abraham  llamada abraham/twitteroauth, he pensado en documentar todos los pasos que hago.

En esta primera entrega explicaré que pasos he seguido para crear una librería externa e independiente en PHP, y que sea usada libremente por la comunidad, gracias a composer, github y packagist.

Como prerequisitos tendremos el conoceer mínimamente y tener cuenta operativa en github y packagist. Así como un conocimiento también en git y composer.

Lo primero será crear un nuevo directorio en nuestro directorio principal del servidor web (normalmente /var/www/html).


mkdir twitterclient

Crearemos un fichero composer.json con este contenido mínimo:

{
   "name":"cybtow/twitterclient",
   "type":"library",
   "description":"A client for API Twitter, based on abraham/twitteroauth",
   "keywords":[
      "twitter",
      "api",
      "client"
   ],
   "license":"MIT",
   "authors":[
      {
         "name":"cybtow",
         "role":"Developer"
      }
   ],
   "support":{
      "source":"https://github.com/cybtow/twitterclient",
      "issues":"https://github.com/cybtow/twitterclient/issues"
   },
   "require":{
      "php":"^5.6 || ^7.0",
      "abraham/twitteroauth":"^0.7.4"
   },
   "autoload":{
      "psr-4":{
         "Cybtow\\TwitterClient\\":"src"
      }
   }
}

Los elementos principales son:

  • name: El nombre de la librería. Se compone de un prefijo, normalmente el autor (cybtow), y el nombre del proyecto (twitterclient).
  • type: En nuestro caso “library“, que indica que el proyecto será una librería independiente.
  • require: Las dependencias de nuestra librería, en este caso se especifica la versión mínima de PHP y la dependencia que tenemos con la librería que vamos a usar “abraham/twitteroauth“.
  • autoload: Indicamos que desde cualquier proyecto que incluya nuestra librería, nuestras clases situadas en el directorio “src” estarán disponibles en el namespace “Cybtow\TwitterClient“.

Podéis encontrar más información sobre la estructura del fichero composer.json en:

Ahora, desde nuestro directorio “twitterclient“, vamos a crear el directorio “src“, donde situaremos nuestro código fuente.


mkdir twitterclient/src

A continuación vamos a ejecutar composer, para asegurarnos que por el momento vamos bien, y prepare nuestro proyecto con las dependencias que hemos especificado.

Desde twitterclient ejecutamos


composer update

Un nuevo directorio “vendor” se ha creado, en él podremos encontrar las librerías externas con las que tenemos dependencias, en este caso únicamente la librería “abraham/twitteroauth“.

Una vez hecho esto, desarrollaremos nuestra librería.

En nuestro caso, y a modo de prueba, he creado un fichero en src, llamado TwitterClient.php.

Una vez tengamos nuestro código fuente creado (y probado), el siguiente paso será subir la librería al repositorio GitHub.

Respecto a GitHub deberemos tener una cuenta creada y correctamente configurada (incluyendo las claves SSH: https://help.github.com/articles/connecting-to-github-with-ssh/)

Dentro de nuestra cuenta en GitHub, crearemos un nuevo repositorio.

Una vez tengamos el repositorio creado, tendremos que crear un fichero .gitignore en el directorio principal de nuestra librería, con el fin de excluir la carpeta “vendor” (y en mi caso la carpeta que se auto-crea “nbproject” por ser Netbeans el IDE que uso) del repositorio Git.

El fichero tendrá este contenido:

/nbproject/
/vendor/

Bien, ahora estamos en disposición de subir el código al repositorio GitHub, creando una primera versión 0.1 para nuestra librería.

En consola, y desde nuestro directorio “twitterclient” haremos:


git init
git remote add github git@github.com:cybtow/twitterclient.git
git add .
git commit -m "First commit"
git tag -a 0.1 -m "version 0.1"
git push -u --tags github master

Una vez hecho esto, ya tendremos nuestro código fuente en GitHub, en nuestro caso concreto en https://github.com/cybtow/twitterclient, y ya estará disponible para que otros usuarios puedan usarlo.

Pero nosotros queremos ir un paso más alla, y queremos que nuestra librería pueda usarse como una dependencia más en un proyecto PHP usando composer (igual que hicimos nosotros con nuestra librería importando la librería externa “abraham/twitteroauth“).

Ahora, desde packagist, y teniendo una cuenta creada y activa, subiremos nuestra librería o paquete (package en inglés, este término es el usual en packagist).

En “Repository URL (Git/SVN/Hg)” pegaremos la URL de nuestro repositorio en GitHub, en este caso es: https://github.com/cybtow/twitterclient

Y pulsaremos el botón “Check“.

Una vez chequeado, pulsaremos el botón “Submit“.

¡Bravo! Desde este momento cualquier programador podrá incluir nuestra librería (o paquete o package) en sus proyectos. En este caso, la librería “cybtow/twitterclient” ya está disponible para que desde cualquier proyecto PHP, y usando composer, pueda ser incluida, simplemente haciendo desde dicho proyecto:


composer require cybtow/twitterclient

 

Si miramos el fichero composer.json del proyecto que está haciendo uso de nuestra nueva librería, veremos que se ha incluido la dependencia en la zona “require”.


"require": {
"php": ">=5.5.9",
"cybtow/twitterclient": "^0.1.0",

...

Modificaremos manualmente en el fichero composer.json el valor “^0.1.0” a “0.*“, para cuando en el futuro actualicemos nuestra librería (más adelante en este artículo lo hago), se actualice automáticamente desde composer update.

Pero aún no hemos terminado, porque también queremos que cada vez que subamos una nueva versión de nuestro proyecto a GitHub, se genere una nueva versión en Packagist, y así los usuarios puedan actualizarse automáticamente con su “composer update“.

Para ello haremos click en “GitHub Service Hook” de la página justamente anterior.

En la página que se abre nos dan las instrucciones de como configurar GitHub para que “avise” automáticamente a Packagist cuando haya cambios. Para ello haremos:

Desde nuestro proyecto “cybtow/twitterclient” en GitHub, seleccionamos “Settings“.

En el menú de la izquierda seleccionamos “Integrations & services

Pulsamos el botón “Add service” de la derecha, y seleccionamos “Packagist

Volvemos a la página principal de “Packagist” para ver cual es nuestro token secreto.

Rellenamos los datos de “user” y “token“.  Pero “domain” lo dejamos vacío.

Pulsamos el botón “Add service“.

Abrimos el servicio que se acaba de crear.

Y pulsamos en “Test service” para comprobar que todo ha ido bien.

Una vez hecho esto, nos volvemos a la web de Packagist, en concreto a nuestro proyecto recién creado, en nuestro caso “cybtow/twitterclient“: https://packagist.org/packages/cybtow/twitterclient

Y pulsamos el botón verde “Update“.

Tras pulsar “Update“, veremos como el mensaje “This package is not auto-updated. Please set up the GitHub Service Hook for Packagist” so that it gets updated whenever you push!” desaparece. Eso significa que cada vez que hagamos push a nuestro repositorio GitHub con una nueva versión de nuestra librería, Packagist será automáticamente actualizado.

Para comprobar que todo haya ido bien realizaremos un cambio en nuestra librería, por ejemplo añadir un comentario en algún fichero de código fuente, etiquetaremos una nueva versión (0.2), haremos push, y desde otro proyecto que incluya una dependencia a nuestra librería (cybtow/twitterclient) veremos como se actualiza automáticamente desde la versión 0.1 a la versión 0.2.

Actualizamos y publicamos nueva versión (después de realizar algún cambio en código fuente):


git add src/TwitterClient.php

git commit -m "Adding comment in header"

git tag -a 0.2 -m "version 0.2"

git push --tags github master

Si ahora recargamos la página de Packagist veremos que ya tenemos disponible la nueva versión 0.2.

Finalmente, desde otro proyecto que esté usando nuestra librería, actualizamos las dependencias y veremos como nuestra librería es actualizada:


composer update

Con esto concluyo este artículo, espero lo hayas disfrutado igual que yo escribiéndolo. Si te ha resultado útil, por favor ¡compártelo!