jueves, 15 de diciembre de 2016

Dilema de las clases estáticas en PHP

En mi búsqueda interminable por conseguir estratégias para abordar problemas cotidianos en la programación, hoy coloco esta idea como propuesta para resolver la ambigüedad de las clases estáticas en PHP.

Un poco de teoría para empezar.

¿Que es una clase estática?

Una clase estática, es una clase declarada como estática, que puede ser accedida o invocada sin la necesidad de tener que instanciar un objeto de la clase.

Y ¿Qué significa esto?. Pues bien, de acuerdo a la teoría si queremos hacer una instancia de la clase que queremos definir como estática pues no nos debe permitir hacer esto.


$miClase = new MiClase (); // Esto debe dar un error
Pero PHP no nos genera error al instanciar esta clase.

Por otro lado podríamos omitir el constructor ( cosa que veo mucho por internet en las definiciones de clases y que me parece una mala práctica, creo que toda clase debe tener su constructor y tener además la inicialización de variables en su interior ), pero PHP por omisión acepta la instanciación de la clase pues asume un constructor en blanco o vacío por omisión ante la ausencia explicita de este. Cosa que no resuelve nuestro dilema.

Otra opción muy viable, que funciona y es efectiva, sería colocar el o los modificadores private o protected al constructor, es decir,


private(protected) function __constructor () {

  // nuestro código de inicialización
}
Pero para que colocar código de inicialización si de igual manera no se puede instanciar y no se ejecutará esa sección de código. Pues bueno es solo un ejemplo capcioso para que se confundan jajajaja. Lo cierto es que si colocamos el constructor en private o protected al intentar instanciarlo PHP nos devolverá un error pues el constructor no tiene la visibilidad requerida para ser ejecutado. Pero adicional a esto, ¡que sentido tiene colocar un constructor en private o protected que no se puede usar!. Mejor obviamos esas líneas de código innecesarias, nuestro código queda mucho más limpio, fácil de leer y menos oportunidad para confundirnos.

Ahora bien, mi propuesta para resolver la ambigüedad de las clases estáticas en PHP es la de definir la clase como "ABSTRACTA" de la siguiente manera:


abstract class MiClase {

  static public $atributo_1 = EL_VALOR_QUE_SE_REQUIERA;

  static public function miFuncion ( mi_lista_de_parametros ) {

    // nuestro código
  }
}
Así, al intentar instanciarla como en el primer cuadro de ejemplo, nos devolverá un error, cosa que debe suceder pues en teoría es una clase "estática" y como dije anteriormente, nuestro código queda mucho más limpio, fácil de leer y menos oportunidad para confundirnos.

lunes, 1 de agosto de 2016

Abrir menú de Plasma 5 con la tecla "Windows" de nuestro teclado

Hoy he instalado Plasma 5 en un Debian 9 puro (es decir, desde cero ;P) y hasta ahora no me puedo quejar, todo ha ido muy tranquilo.

Pero como a mi me gusta tener algunas facilidades sobre todo al momento de acceder a algunos programas, comandos entre otras hierbas, no podía dejar pasar el hecho de tener que configurar la fatídica tecla de la ventanita de windows del teclado (que ahora tiene el logo de Debian jejeje).

Pues bien, resulta que en Plasma 5 las cosas cambiaron un poco, pero nada tan complicado como el anterior KDE4, de hecho es igual de facil, solo que cambiaron la ruta de inicio de ~/.kde/Autostart/ a ~/.config/plasma-workspace/env/.

Ahora bien, lo que tenemos que hacer es exactamente lo mismo que en un post anterior que ya había publicado, pero esta vez lo explico de manera diferente para una mejor experiencia para futuros cambios y/o reinstalación del sistema.

Primero: crearemos una carpeta con el nombre ".misScripts" en "/home/miUsuario" en lo adelante "~/" esto significa "/home/miUsuario". Tengan en cuenta que al colocarle el punto (.) al principio del nombre del archivo le estamos indicando que que será un archivo oculto, así, que no se asusten si no lo llegan a ver. Para poder ver y/o mostrar los archivos y carpetas ocultos, basta con utilizar la combinación de teclas Alt+. en nuestro gestor de archivos y allí está.

Segundo: abrir el editor de texto de nuestra preferencia y crear un nuevo archivo que yo en lo particular lo nombro "menuPlasma", en él escribimos las siguientes líneas:


remove mod4 = Super_L
keysym Super_L = F14
y guardamos en la ruta donde creamos nuestra carpeta "~/.misScripts".

Con éste archivo le diremos al sistema que la tecla "Super_L" es la tecla "F14", si "F14", si, ya sé que no existe, recuerda que lo que acabamos de hacer con esas líneas es re-programar el teclado de nuestra PC y no tiene que existir físicamente(como dije en el post anterior).

Tercero: terminado esto y entendido por qué hicimos esto, creamos otro archivo de texto, al cual llamaremos "menuPlasma.sh" y lo guardamos en la ruta "~/.misScripts", en él escribimos las siguientes líneas:


xmodmap ~/.misScripts/menuPlasma
como dato adicional, xmodmap es una utilidad para modificar el mapa de teclas (keymaps) y mapeador de apuntadores de teclas en Xorg.

Listo y entendido esto, por ser un script éste último archivo que hemos creado, le damos permisos de ejecución desde nuestra consola con:


$ chmod +x ~/.misScripts/menuPlasma.sh
O desde nuestro gestor de archivos le damos click derecho sobre el archivo, elegimos la opción "Propiedades" y en la pestaña "Permisos" marcamos la casilla "Es ejecutable".

Cuarto: procedemos a crear los enlaces simbólicos a nuestros archivos recien creados con el siguiente comando:


$ ln -s ~/.scriptInicio/menuPlasma ./~/.config/plasma-workspace/env/
$ ln -s ~/.scriptInicio/menuPlasma.sh ./~/.config/plasma-workspace/env/
Con esto, logramos que nuestros script, esten en una ubicación donde consideremos estén bien resguardados y solo hacer los enlaces simbólicos para cada nueva instalación.

Quinto: Ejecutamos el script haciendo click o doble click sobre el archivo menuPlasma.sh, o desde nuestra consola con un:


$ ./.misScripts/menuPlasma.sh
O


$ ./~/.config/plasma-workspace/env/menuPlasma.sh
Esto solo lo haremos esta vez, después el script se iniciará automáticamente).

Por otro lado, escudriñando un poco, también en Preferencias del Sistema->Arranque y Apagado->Autoarranque de Plasma tiene dos opciones "Archivo de escritorio" y "Archivo de script", esto muy práctico para los que nos son muy diestros con los comandos de consola. Del lado derecho hay un botón que dice "Añadir script" hacemos click en él y nos abre una ventana de dialogo para seleciconar el script creado, dandonos la opción de crearlo como un enlace simbólico (muy práctico para tenerlo muy bien guardado en alguna carpeta de nuestro /home y así, al tener que reinstalar o formatear nuestra pc no perder nuestras configuraciones) o también como un archivo script propiamente, con lo que nos copiará nuestro script en la ruta antes indicada. Al hacer este último procedimiento se puede obviar la ruta de inicio de Plasma indicada anteriormente, pues lo guarda en la misma carpeta pero de manera invisible para nosotros.

Luego de esto, configuramos el menú de KDE. Le damos click derecho sobre el menú de KDE, y seleccioonamos la opción "Preferencias de lanzador de aplicaciones" (Alt+D), en la sección "Acceso rápido de teclado" y donde aparece la llave de configuración, hacemos click sobre ella y presionamos nuestra famosa e "inexistente" tecla "F14" la cual se mostrará como F14, damos aceptar.

Y para finalizar, presionamos nuevamente nuestra tecla F14 y voila se abre nuestro menú de KDE, y si la volvemos a presionar se cierra nuestro menú.

viernes, 29 de abril de 2016

Solución a error de llave pública 1397BC53640DB551 de google chrome

Hoy al hacer una actualización de mi debian, se me presentó el siguiente error.

W: No existe ninguna clave pública disponible para los siguientes identificadores de clave: 1397BC53640DB551

No es que no me permitiera actualizar, pero me llamó la atención.

Después de investigar un rato solo conseguí una referencia a ese error en un foro de ubuntu, pero ahí conseguí otro enlace a reddit donde explican mejor el problema y la solución.

Al final lo que pude deducir de todo lo leido, es que la llave pública fué removida y hay que solicitar o actualizar la llave pública de google para google chrome.

Si bien la solución la consiguen en los enlaces que coloqué, aquí dejo la solución para no seguir dando vueltas como locos

Solución

wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add -