domingo, 25 de diciembre de 2016

Git- Comandos útiles

//MANEJO GENERAL
git pull //Actualizar repositorio local con remoto.
git push //Actualizar repositorio remoto con local.
git add . //Actualiza repo local para ser committeado.
git commit -m "mensaje" // commit al repo local.
git update-index --assume-unchanged pathArchivo // Ignora cambios en el archivo.
git update-index --no-assume-unchanged pathArchivo // Des-ignora cambios en el archivo.
git checkout master // Sitúa en el branch master.
gitk nombre_archivo // Muestra el history de un archivo.
git checkout hash_del_branch -- nombre_archivo // Sobreescribe un archivo con el que corresponde al branch indicado.
git log -p nombreArchivo // Muestra las diferencias en los commits del archivo.
git diff //Muestra los cambios desde el último commit.
git fetch origin // Actualiza mi master con el del servidor(origin).
git rebase origin/master // Mueve mi proyecto, actualiza con el master y luego persiste los cambios de mi proyecto en la actualización realizada.
git commit --amend // Edita el comentario del último commit.
git reset --hard origin/master //Sobreescribe el código del repositorio local con el remoto(Master).
git reset --hard 063f3a9b1b443825b308141946369bb615482877 //Volver a un commit anterior, borrando lo hecho desde entonces. c14809fa es el id del commit en cuestión.
//TAGGEO
git tag -a v1.4 -m 'my version 1.4' // Etiqueta una versión.
git tag // Muestra una lista de versiones.
git push origin --tags // Pushea todas las tags.
git push origin v1.5 // Pushea una tag en especial.
//BRANCHEO
git branch // Lista los branches locales.
git checkout -b nombre_branch // Creación del nuevo branch.
git branch -d nombre_branch // Borrado del branch.
git checkout nombre_branch // Posicionado sobre el branch.
git merge nombre_branch // Se hace desde master para mergear un branch.
git push --all // Pushea todos los branches.

jueves, 15 de diciembre de 2016

PowerShell - Filtrar registros de archivo de texto que contengan una o más cadenas

Primero declaramos un array con las cadenas a filtrar:
$cadenas = @("Let","It","Be")
Luego filtramos el archivo con Get-Content:
Get-Content '.\PATH_ARCHIVO_A_FILTRAR.txt' | 
Select-String -Pattern $p -SimpleMatch |
Set-Content ARCHIVO_FILTRADO.txt
Estas dos sentencias se pueden ejecutar directamente en la consola de PowerShell sin necesidad de generar un Script. Simplemente se ejecutan uno a uno con la tecla Enter.

miércoles, 14 de diciembre de 2016

Enviar los valores de un label al hacer un submit de un form

Declaro el label y, en paralelo, un input de tipo hidden que se corresponderá con el mismo

<label name="importe_label" id="importe_label" />
<input type="hidden" id="importe" name="importe" value=""/>

Luego, por ejemplo, seteo sus valores con jQuery.

$("#importe_gravado").val(99.99);
$("#importe_gravado_label").text(99.99);

Entonces, cuando hago el submit del form, ya puedo contar en back-end con el valor del label, que será el mismo del input (En este caso, llegará en el parámetro "importe").

No se si es la manera más prolija, pero funciona :)

sábado, 3 de diciembre de 2016

MySQL - Quitar caducidad a la password de un usuario

Para verificar algunas propiedades del host y password del usuario:
 
SELECT user, host,
   password_last_changed,
   password_lifetime,
   password_expired
 FROM mysql.user
 WHERE user = 'root'; 
  
Para agregar un intervalo de caducidad del password:
 
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY; 

Para eliminar la caducidad del password:
 
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
 

 

viernes, 18 de noviembre de 2016

JavasCript- Recargar formulario SIEMPRE por get

Se me presentó una ocasión en la cual, primero realizaba un submit de un form por post, y luego, al hacer un reload de la página, volvía a enviar el submir por post... Intenté muchas cosas, y nada.. Debuggeando un poco el código, llegué a la siguiente solución, que no es lo más prolijo, pero funciona:


/*Código anterior:*/
//parent.location.reload(true);
/*Código nuevo:*/
var urlReload = window.location.pathname + window.location.search;
parent.location.href=urlReload;

miércoles, 16 de noviembre de 2016

jQuery Datatables - Uncaught TypeError: Cannot read property 'mData' of undefined(…)

Este error se produce cuando no se respeta la estructura correcta, que debe incluir los tags thead y tbody.
Ejemplo de una tabla bien conformada:

<table id="sample-table">
    <thead>
        <tr>
            <th>Titulo columna 1</th>
            <th>Titulo columna 2</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Valor columna 1</td>
            <td>Valor columna 2</td>
        </tr>
    </tbody>
</table>

jueves, 10 de noviembre de 2016

Ubuntu - Chequear los valores de memoria de Tomcat (Heap y PermGen)

A veces, al querer modificar las configuraciones de consumo de memoria de Tomcat en Ubuntu, nos cuesta conocer cuales son los valores actuales.
Una forma práctica de conocerlos, es ejecutando lo siguiente en la terminal:

java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

Para información más detallada, recomiendo este post:

https://www.mkyong.com/java/find-out-your-java-heap-memory-size/

martes, 1 de noviembre de 2016

La tabla debe contar con una estructura como la siguiente:

<table id="tablaDinamica" width="100%">
<tbody></tbody>
</table>

Para agregar filas:
$('#tablaDinamica > tbody:last-child').append('<tr><td>Valor Columna 1</td><td align="right">Valor Columna 2</td></tr>');

Para borrar todas las filas de la tabla:
$("#tablaDinamica > tbody tr").remove();

martes, 25 de octubre de 2016

npm install - Error: connect ETIMEDOUT 192.168.20.1:3128

De un momento a otro, por alguna razón, cada vez que quería instalar o actualizar una dependencia con npm, me surgía le siguiente error:
Error: connect ETIMEDOUT 192.168.x.x:xxxx
Para solucionarlo intenté borrar npm y nodejs, pero luego de volver a instalarlos(Previo reinicio del equipo), el problema persistía. Luego de varios intentos fallidos, di con la solución que, al menos a mí me funcionó :)
npm config delete proxy
Gracias StackOverflow por existir!!!

jueves, 13 de octubre de 2016

Perfiles y recursos en maven


Muchas veces necesitamos que un proyecto tome ciertos archivos según el perfil que se selecciona. Esto se hace con los tags directory(Desde dónde obtendremos los los archivos), targetPath(Hacia dónde los copiaremos) e include(archivo o tipos de archivo a incluir) dentro del archivo pom.xml.

Para información más detallada, consultar en http://maven.apache.org/plugins/maven-resources-plugin/examples/copy-resources.html

Dejo aquí un ejemplo de uso:

<profiles>
<profile>
<id>devElmerDeVe</id>
<build>
<resources>
<resource>
<directory>src/main/resources/dev/elmerDeVe/properties</directory>
<targetPath>Intranet</targetPath>
</resource>
<resource>
<directory>src/main/resources/dev/elmerDeVe/css</directory>
<targetPath>../../WebContent/css</targetPath>
<includes>
        <include>**/*.css</include>
      </includes>
</resource>
</resources>
</build>
</profile>
</profiles>

Para seleccionar un perfil desde eclipse:

martes, 11 de octubre de 2016

MySQL - Generar DUMP

Simple línea de comando para generar un dump(Script con las tablas y datos) de una base de datos:

mysqldump -u USUARIO -pPASSWORD NOMBRE_DB > NOMBRE_ARCHIVO.sql

Donde:
USUARIO y PASSWORD deben ser reemplazados por los datos de autenticación en la base de datos.
NOMBRE_DB: Es el nombre de la base de datos de la cual generaremos la exportación.
NOMBRE_ARCHIVO: Es el nombre del archivo de tipo script que se generará.

Angular y Eclipse

Estos pasos son los que me han servido para poder importar un proyecto AngularJS en Eclipse.
 1- Buscar en MarketPlace el siguiente plugin: AngularJS Eclipse e instalar.
2- Mientras se instala el plugin, en eclipse ir a File -> New Project.
3- Crear el proyecto en la misma ruta donde se encuentra el proyecto a importar. Ej: /home/elmerdeve/desarrollo/miProyectoAngular
4- Una vez instalado el plugin, reiniciar el eclipse y luego hacer click derecho sobre el proyecto en cuestión(miProyectoAngular) -> Configure -> Convert to Angular Project.

 Así pude disponer de mi proyecto para ser codificado en Eclipse.

Nota: Mi entorno marca muchos warnings y errores que no son tales en los html y js, sino que no logra identificar completa y correctamente la sintaxis de Angular. Al día de hoy no he podido pulir esto aún.

sábado, 19 de marzo de 2016

Ionic Framework- Failed to load resource: net::ERR_CACHE_MISS

Otro de los problemas con que me encontré al migrar mi proyecto Angular a Ionic fue el siguiente error de Cache: "Failed to load resource: net::ERR_CACHE_MISS" Luego de navegar un largo rato por la web, en uno de los rincones más recónditos de la misma encontré una solución, que al menos a mi me sirvió: Remover y agregar la plataforma que produce inconvenientes. ¿Cómo se hace esto? Símplemente ejecutando desde el path del proyecto los siguientes comandos:
ionic platform rm android
ionic platform add android
Donde android es la plataforma en cuestión, pudiendo ser reemplazada por
browser
o
ios
. Esa una solución bastante simple y obvia, pero bastante recurrente, por lo que he estado leyendo.

jueves, 25 de febrero de 2016

Ionic Framework- Habilitar uso de ngCookies

Tengo un sitio creado en AngularJS, el cual tuve que "encapsular" en Ionic para poder interactuar con dispositivos Android.
Uno de los problemas que encontré, fue que luego de la migración, no me funcionaban las cookies.
Luego de mucho investigar, encontré la solución incluyendo a mi proyecto esta línea:
CookieManager.setAcceptFileSchemeCookies(true);

Pasos para incluirla:

1- Dirigirse a la ruta:
PATH_PROYECTO\platforms\android\src\com\ionicframework\NOMBRE_PROYECTOnnnnnn
2- Dentro de la ruta, editar el archivo de nombre MainActivity.java
3- Incluir la línea anteriormente mencionada luego de la siguiente:
super.onCreate(savedInstanceState);

El código de mi clase MainActivity.java ha quedado así:

package com.ionicframework.NOMBRE_PROYECTOnnnnnn;

import android.os.Bundle;
import android.webkit.CookieManager;
import org.apache.cordova.*;

public class MainActivity extends CordovaActivity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        // Set by <content src="index.html" /> in config.xml
        CookieManager.setAcceptFileSchemeCookies(true);
        loadUrl(launchUrl);
    }
}

Eso es todo, así las cookies han vuelto a la vida en mi Ionic project :)

Ubuntu - Setear Variables de Entorno por consola

Ejemplo para NodeJS, Android Studio y Gradle, donde se editan los archivos .profile y .bashrc, se agregan las variables al final del archivo...