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

sábado, 21 de abril de 2018





Que me disculpe el español pero prefiero escribir en inglés todo el artículo...

Follow this steps to get a hello world project fastly, running on a windows os.

REQUERIMENTS:
- Windows OS.
- Free internet without proxies (if not installation packages must fail).

INSTALLATION STEPS:

1) Get a good windows console program like CMDER full with Github. Rememember to open Cmder as admin.

2) Install NODEJS last version. Verify it after installation by console with: node -v

3) Install NPM version 4 (it must be compatible with expo, so just install 4 for now) by console:
npm install -g npm@4
Verify it after installation with: npm -v

4) Install Expo from Facebook by console with:

npm install exp --global

Remember to check node or nodejs, npm and exp to be included into your PATH variable.

If all ok you should be allowed to type exp on console with this result:













5) Create an EXPO ACCOUNT. You must have internet without proxies or this registration could fail.

6) Install EXPO CLIENT into your mobile device.

7) For write code get a good IDE like ATOM IDE, then install react, react-redux and other atom packages if you like.

8) On your explorer create a workspace folder, then go to your Cmder console and type:

exp init MY-APP











9) Preview your React Native App typing on your console (inside your app folder):

exp start



Then you must open your expo android/ios application on your device, then select scan QR, and just get that code on your pc... then it will start automatically if you have done all steps ok.

miércoles, 5 de julio de 2017

Si te encuentras con errores al instalar paquetes (librerías) npm en tu pc y visualizas mensajes de este tipo: self_signed_cert_in_chain...

Debes ejecutar el siguiente código en tu consola:

npm config set registry="http://registry.npmjs.org/"

Inmediatamente vuelve a ejecutar tu npm install y verás que corre sin problemas...

jueves, 7 de enero de 2016

JDeveloper 11gR2 - Integrado Weblogic servidor Password Reset Hola a todos. Después de meses de trabajo con ADF Essentials, que necesitaba para iniciar sesión en la aplicación de la consola del servidor integrado Weblogic que viene con JDeveloper 11.1.2.3 (Weblogic servidor 10.3.5) y luego me di cuenta que se me ha olvidado la contraseña del usuario weblogic ... Así que me puse a buscar y encontré dos soluciones:

Solución 1: Elimine la carpeta de dominio predeterminado creado por el servidor Weblogic Integrado.
Solución 2: Generar una nueva contraseña para el usuario weblogic.

¿Cuál es la diferencia entre una solución de 1 y 2?

En la solución 1, perderá cualquier configuración que usted ha hecho a su servidor weblogic integrado, esto incluye: fuentes de datos, configuración de seguridad, etc.

En solución 2, perderá sólo configuraciones de seguridad que ha realizado. Por ejemplo, si ha creado más usuarios o grupos, o configurar el acceso a un servicio LDAP externo, pero se mantendrá todo lo demás. Tengo que decir que esta solución es más difícil que la solución 1.

Si usted no ha hecho ninguna configuración en el servidor Weblogic integrado, te sugiero que vayas con una solución de 1. Antes de continuar con las soluciones, primero tenemos que encontrar el directorio de sistema de IDE. Con el fin de hacer eso, JDeveloper abierta, vaya al menú Ayuda y seleccione la opción Acerca de. Una ventana emergente aparece, seleccione la ficha Propiedades y desplácese hacia abajo hasta que encuentre alguna de estas: ide.pref.dir o ide.system.dir o ide.user.dir

En un entorno Linux, puede encontrar algo como esto:


En un entorno de ventanas, puede encontrar algo como esto:


En realidad, el directorio que estamos buscando es la ide.system.dir por lo que permite anótelo para que podamos utilizarlo más tarde:

Linux (mi caso, la suya puede ser diferente)
SYS_DIR = / home / aalopez / .jdeveloper / system.11.1.2.3.39.62.76.1

De Windows (mi caso, la suya puede ser diferente)
SYS_DIR = C: \ Users \ CVDESA \ AppData \ Roaming \ JDeveloper \ system11.1.2.3.39.62.76.1

Hacer servidor Weblogic seguro se apaga antes de continuar.

Solución 1: Extracción de la carpeta DefaultDomain.
La primera y más fácil solución es quitar la carpeta siguiente (DefaultDomain):
SYS_DIR / DefaultDomain

La carpeta obtendrá re-creado para usted la próxima vez que inicie el servidor Weblogic. El problema es que usted perderá cualquier configuración que pueda haber hecho que incluye: usuarios, contraseñas, fuentes de datos, etc. Todo eso. Una vez que se quita la carpeta, JDeveloper abierta ir al menú Ejecutar, y seleccione la opción Start Server Instancia (IntegratedWeblogicServer). Una ventana emergente aparece pidiéndole que establezca las credenciales de usuario weblogic. ¡Eso es!

Solución 2: Cambiar la contraseña de usuario weblogic Por favor, siga los pasos a seguir con el fin restablecer la contraseña en un sistema Linux (Ubuntu 12.1), también se presentan los pasos para el sistema de Windows:

Linux
Ir a esta ruta: SYS_DIR / DefaultDomain / bin, donde SYS_DIR es el camino que hemos definido anteriormente. Ejecute el setDomainEnvironment.sh Ir a esta ruta: SYS_DIR / DefaultDomain / seguridad Cambie el nombre del archivo DefaultAuthenticatorInit.ldift a algo como oldDefaultAuthenticatorInit.ldift Exportar el archivo weblogic.jar a la ruta de clases, para que podamos crear una nueva contraseña para el usuario weblogic (en mi caso, el directorio de instalación de JDeveloper es / home / aalopez / Oracle): export CLASSPATH = $ CLASSPATH: /home/aalopez/Oracle/Middleware/wlserver_10.3/server/lib/weblogic.jar Ejecute el siguiente comando para crear la nueva contraseña. Observe que el comando tiene un punto al final, esto es necesario para que se cree la nueva contraseña en el directorio actual. Cambie NEW_PASSSWORD para la nueva contraseña del usuario weblogic: java weblogic.security.utils.AdminAccount weblogic new_password. Ir a esta ruta: SYS_DIR / DefaultDomain / servidores / DefaultServer Cambie el nombre del directorio de datos a algo como data_old Ir a esta ruta: SYS_DIR / DefaultDomain / servidores / DefaultServer / seguridad Cambie el nombre del archivo boot.properties a algo como oldboot.properties Crear un nuevo archivo boot.properties en el mismo directorio. Esto es necesario si se quiere autoconectarse al iniciar el servidor Weblogic desde dentro de JDeveloper. El contenido del archivo debe ser algo como lo siguiente (cambiar new_password la contraseña que ha definido en los pasos anteriores): nombre de usuario = weblogic password = new_password Es hora de probar nuestros cambios. Ir a esta ruta: SYS_DIR / DefaultDomain / bin Ejecute el archivo startWeblogic.sh y verifique que el servidor Weblogic inicia sin excepciones. Abra un navegador y escriba la siguiente dirección URL (el puerto puede ser diferente para usted): http: // localhost: 7101 / console La aplicación de consola del servidor Weblogic debe mostrar y se puede iniciar sesión con sus credenciales nuevas. Cuando esté listo para detener el servidor Weblogic, ir a esta ruta: SYS_DIR / DefaultDomain / bin Ejecute el archivo stopWeblogic.sh con el fin de detener el servidor.

Hay un paso extra que vamos a cubrir después comprobamos los pasos de Windows:

Ventanas
Ir a esta ruta: SYS_DIR \ DefaultDomain \ bin, donde SYS_DIR es el camino que hemos definido anteriormente. Ejecute el setDomainEnvironment.cmd Ir a esta ruta: SYS_DIR \ DefaultDomain \ security Cambie el nombre del archivo DefaultAuthenticatorInit.ldift a algo como oldDefaultAuthenticatorInit.ldift Ejecute el siguiente comando para crear la nueva contraseña. Observe que el comando tiene un punto al final, esto es necesario para que se cree la nueva contraseña en el directorio actual. Cambie NEW_PASSSWORD para la nueva contraseña del usuario weblogic: java weblogic.security.utils.AdminAccount weblogic new_password. Ir a esta ruta: SYS_DIR \ DefaultDomain \ servers \ DefaultServer Cambie el nombre del directorio de datos a algo como data_old Ir a esta ruta: SYS_DIR \ DefaultDomain \ servers \ DefaultServer \ security Cambie el nombre del archivo boot.properties a algo como oldboot.properties Crear un nuevo archivo boot.properties en el mismo directorio. Esto es necesario si se quiere autoconectarse al iniciar el servidor Weblogic desde dentro de JDeveloper. El contenido del archivo debe ser algo como lo siguiente (cambiar new_password la contraseña que ha definido en los pasos anteriores): nombre de usuario = weblogic password = new_password Es hora de probar nuestros cambios. Ir a esta ruta: SYS_DIR \ DefaultDomain \ bin Ejecute el archivo startWeblogic.cmd y verifique que el servidor Weblogic inicia sin excepciones. Abra un navegador y escriba la siguiente dirección URL (el puerto puede ser diferente para usted): http: // localhost: 7101 / console La aplicación de consola del servidor Weblogic debe mostrar y se puede iniciar sesión con sus credenciales nuevas. Cuando esté listo para detener el servidor Weblogic, ir a esta ruta: SYS_DIR \ DefaultDomain \ bin Ejecute el archivo stopWeblogic.cmd con el fin de detener el servidor.

Una vez que haya cambiado y puesto a prueba la nueva contraseña para el usuario weblogic, es hora de actualizar la información de JDeveloper. Abra JDeveloper e ir a la paleta de recursos, si no lo encuentra, vaya al menú Ver y selecciona la opción Paleta de recursos:


Allí, seleccione la categoría Application Server y el IntegratedWebLogicServer. Haga clic derecho y seleccione la opción Propiedades. Una nueva ventana emergente aparece, seleccione la ficha Autenticación:


No se puede establecer la nueva contraseña de usuario weblogic que acaba de definir pasos anteriores. Aplicar cambios y eso es todo!

jueves, 11 de junio de 2015



EJEMPLO DE AUTENTICACION EN NODE JS

/** MIDDLEWARE LOGIN
TIP: Iniciar el servidor de autenticador con NODE_ENV='ambiente(desa,prod)' node Autenticador **/


var connect = require('connect');
var app = connect();

function loggerHello(req, res, next){
foo();
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World Pana');
}

function logger(req, res, next){
//res.setHeader('Content-Type', 'text/plain');
//res.end('Este es el logger');
console.log('#logger en acción', req.method, req.url); next(); } function logger(req, res, next){ console.log('Iniciando... ', req.method, req.url); next(); } function authWithDB(user, pass, cb){ if(pass !== 'luis15'){ return cb('Credenciales incorrectas.');
}
cb();
}

function restrict(req, res, next){
var authorization = req.headers.authorization;
if(!authorization){
return next(new Error('No autorizado'));
}

var parts = authorization.split(' ');
var scheme = parts[0];
var auth = new Buffer(parts[1], 'base64').toString().split(':');
var user = auth[0];
var pass = auth[1];

authWithDB(user, pass, function (err) {
if(err){
return next(err);
}
next();
});
}

function admin(req, res, next){

console.log('ACCEDIENDO A: ',req.url);

switch(req.url){

case '/':
res.end('try /users');
break;

case '/users':
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify(['Luis', 'JoseLuis', 'Jp']));
break;
}
}

function errorHandler() {

var env = process.env.NODE_ENV || 'desarrollo';
return function (err, req, res, next){
res.statusCode = 500;

switch (env){

case 'desarrollo':
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify(err));
break;
default:
res.end('Server error');
}
};
}

app
.use(logger)
.use('/admin', restrict)
.use('/admin', admin)
.use(loggerHello)
.listen(3000);



EJEMPLO DE ORDENAMIENTO DE CALL BACKS EN NODE JS CON LA LIBRERIA ASYNC

var async = require('async');

async.waterfall([

function (cb){
artist.findEvents('Miley', cb);
},
function (concert, cb){
concert.findTickets({price: {$lt: 100}}, cb);
},
function (tickets, cb){
tickets.purchase({cc: 424242424242}, cb);
},
function (transaction, cb) {
email.confirm(customer, transaction, cb);
}
],

//FUNCTION RETORNO
function (null, status){
if(err){
res.send(err);
return false;
}

res.send({
tickets: 'purchased'
});
}
);//FIN WATERFALL

//PATRON PROMISES DE COMMONJS - promises-aplus.github.io/promises-spec/
artist.find('Miley')
.findEvents({city: 'Bogota'})
.findTickets({price: {$lt: 100}}, cb);
.purchase({cc: 424242424242}, cb);

.then (function(transaction) {
customer.transaction = transaction;
return customer.save();
})

.then (function (customer, transaction) {
return email.confirm(customer, transaction);
})

.then function(){
res.send({
tickets: 'purchased'
});
},

function (err) {
console.log('Ha habido un error', err);
}
);

EJEMPLO DE CALL BACKS DESORDENADOS

function startExecution() {
doSomethingAsync(function(error, result) {
doSomethingElseAsync(function(error, result) {
moreAsync(function(error, result) {
evenMoreAsync(function(error, result) {
// ... I think you got it
});
});
});
});
};

lunes, 24 de noviembre de 2014

De tarea, pasar la info. http://www.avajava.com/tutorials/lessons/how-do-i-change-my-log4j-settings-while-my-web-application-is-running.html
¿Porqué NIB? ¿Para qué? Con Nib potencias el trabajo de Stylus, lo haces mucho más simple y tienes la habilidad de omitir los prefijos de vendor, con un simple import inicial. Ejemplo: @import 'nib/vendor' , @import 'nib/gradients' , vendor-prefixes: o ms moz webkit .

Instalación: Para descargar referencias e instalar los comandos requeridos en el prompt de tu OS, ejecutar el siguiente comando: npm install -g nib

Integrando Nib con Stylus: Para compilar el archivo .styl integrando nib a stylus se ejecuta el siguiente comando: stylus -u nib -c -w archivo.styl

A continuación una presentación más detallada:



¿Porqué o para que stylus? En resumidas palabras... Limpieza, rápidez, compresión, optimización, visualización, distribución y multiplicidad de css ejecutando un comando de compilación basado en otro .styl.

Instalación: Desde tu consola sea cual sea el OS, siempre y cuando tengas instalado nodejs, ejecutar el siguiente comando: npm install -g stylus. Extraer el archivo comprimido en donde gustes como referencia (ya en el prompt se agregaron los comandos de stylus).

HelloWorld stylus: Crea tu archivo .styl, inyecta parametros, y ve a tu consola de nuevo. Ejecutar desde consola el siguiente comando: stylus -c archivo.styl y será compilado tu archivo .styl a formato .css.
Para probar crea un archivo index.html, en el head has referencia al archivo .css y cada vez que cambies y ejecutes la compilación del archivo .styl podrás ver como cambia el .css y tu página web.

Mantener el compilador de stylus escuchando automáticamente cualquier cambio: Simplemente agrega al comando de compilación la etiqueta "-w" seguida de "-c". Ejemplo: stylus -c -w archivo.styl. El comportamiento será parecido al siguiente: ****** WATCHING ****** COMPILING ****** WATCHING

viernes, 1 de agosto de 2014

miércoles, 23 de julio de 2014

Estos son los comandos más recurridos en la operación y administración de sistemas unix/linux.

Cadena de comandos frecuentemente usados:

1) Para abrir un archivo, filtrar los datos a mostrar según un string como parámetro, saltando espacios vacios y delimitando según caracter parametrizado la cadena para seleccionar la columna final que deseamos:
cat xxxxxxxxxx.log | grep 'xxxxxxxxxxxx' | tr -s " " | cut -d ":" -f5

 Cuadro Descriptivo de comandos más usados
 
Comando Sintaxis y Descripción Ejemplo Opciones
>, <, >>, << (redirección) Permiten redireccionar la entrada o salida de un comando a un archivo. cat arch1 arch2 >> arch3 (añade arch1 y arch2 al final de arch3) <, > Redireccionan la entrada y la salida (respectivamente) borrando previamente el archivo de destino
<<, >> Redireccionan la entrada y la salida a continuación del archivo de destino.
| (tuberías) Permiten redireccionar la entrada o salida de un comando a otro comando. ls -l | lp (realiza un listado del directorio actual por impresora) -
* En todos aquellos comandos, que esperan el nombre de un archivo o la ruta de un directorio, se sustituye por cualquier cadena de caracteres, incluido la cadena vacía. - -
? En todos aquellos comandos, que esperan el nombre de un archivo o la ruta de un directorio, se sustituye por un carácter cualquiera. - -
awk Lenguaje para búsqueda y procesado de patrones y expresiones regulares. - -
cal cal [mes] año Devuelve un calendario del año (y el mes) especificados. cal 09 1993 (devuelve el calendario de septiembre de 1993) -
calendar Servicio de agenda que permite indicar fechas y horas en el que se le avise - Consiste en poner el archivo calendar en el directorio de usuario.
cat cat archivo ... Concatena e Imprime cat arch2 (envía el archivo arch2 a la pantalla) -
cc Compilador de C que suele proporcionar cualquier UNIX - -
cd cd
cd directorio Cambio de Directorio
cd /usr/ploro/pagines (le coloca en el directorio /usr/ploro/pagines) -
chmod chmod [u|g|o] {+|-} {rwx} {archivo|directorio} Cambio de modos o permisos de archivos chmod g-rw cuentas (quita los permisos de lectura y escritura del archivo cuentas para los usuarios pertenecientes al grupo) u Propietario
g Miembros del grupo
o Otros usuarios
+ Activa el permiso
- Quita el permiso
r Lectura
w Escritura
x Ejecución
cmp cmp arch1 arch2 Compara dos archivos cmp datos1 historico (compara los archivos datos1 y historico retornando la primera línea y posición del primer octeto que difiera) -
comm comm [-1,-2,-3] arch1 arch2 Busca las líneas en común entre dos archivos. comm clientes1 clientes2 (en la primera columna aparecen las líneas que sólo aparecen en clientes1, en la segunda columna sólo las que aparecen en clientes2 y en la tercera, aquellas que aparecen en ambos) 1 No genera la primera columna
2 No genera la segunda columna
3 No genera la tercera columna
cp cp arch1 arch2 Copia archivos cp orla /tmp/orla.bk (copia el archivo orla del directorio actual al archivo orla.bk en el directorio /tmp) -
cut cut [-c | -f [-d] ] archivo ... Recorta verticalmente campos de archivos cut -f2,4,6 -d, (recorta los campos 2, 4 y 6 utilizando como delimitador de campo la coma. c Divide contando por columnas (caracteres)
f Divide contando por campos (fields)
d Especifica el delimitador de campo
date date Retorna el día y la hora - -
diff diff [-b,-e] arch1 arch2
diff [-b,-e,-r] dir1 dir2 Busca las diferencias entre líneas de dos archivos o directorios.
diff -r /usr/pepe /usr/jose (averigua las diferencias entre todos los archivos de los dos directorios especificados y de sus subdirectorios) b Ignora blancos al principio de línea
e Formatea la salida para ed
r Recorrer subdirectorios
echo echo [cadena] Imprime cadena - -
ex ex Editor de líneas - -
find find ruta criterio acción... Busca archivos que cumplen el criterio y realiza una acción (o varias) sobre ellos. find /tmp -name fact* -print (busca e imprime el nombre de los archivos en el directorio /tmp que comiencen por fact) Los criterios para los archivos pueden ser:
-name archivo Con ese nombre
-size [+|-]n De tamaño n bloques
-links [+|-]n Con n links
-ntime [+|-]n Accedido hace n días
-mtime [+|-]n Modificado hace n días
-newer archivo Modificado después de archivo Donde aparece n se asume el valor exacto. +n y -n significan mayor o menor que, reespectivamente.
Las acciones pueden ser:
-print Imprime la ruta de los archivos encontrados
-exe comando Ejecuta comando
-ok comando Ejecuta comando pidiendo confirmación.
En estos dos últimos casos el archivo encontrado se repesenta con {}
grep grep [-n,-c,-v] patrón archivo Busca ocurrencias de un patrón en un archivo grep valencia cities (busca todas las ocurrencias de la palabra valencia en el archivo cities) a Poner el número de cada línea donde aparece el patrón
c Sólo aparecen las líneas que contienen el patrón
v Aparecen las líneas que no contienen el patrón
help help Invoca la ayuda -
kill kill [-9] ident_proceso Envía un mensaje de terminación a un proceso kill -9 777 (mata el proceso 777) 9 Produce una terminación indiscutible del proceso
ln ln arch1 arch2 Crea vínculos (links) entre archivos ln juan /usr/invitados/juanperez (enlaza el archivo juan con el directorio /usr/invitados/juanperez) -
login login [usuario] Permite entrar a trabajar con otro usuario login juan (pedirá la palabra de paso de juan para entrar a trabajar con ese usuario) -
lp lp [-d] archivo ... Lanza a impresora lp facturas ivas (envía a impresora los archivos facturas y ivas) d Selecciona impresora
lpstat lpstat [-p] archivo ... Obtiene el estado de impresión de un archivo lpstat facturas (obtiene información de la impresión del archivo facturas) p Información sobre la impresora
ls ls [-{a,c,l,p,r,s}] archivo ... Lista el contenido de un directorio ls -la (lista todos los archivos del directorio actual con información extendida) a Lista todos los archivos
c Ordena por fecha
l Listado Largo
p Señala cuáles son directorios con /
r Invierte el orden del listado
s Indica el tamaño en bloques
mail mail
mail dirección ... Para enviar y recibir correo.
mail ploro@uv.es
Este es el cuerpo del mensaje
<CTRL-D> Envía el texto hasta CTRL-D a ploro@uv.es
Cuando se invoca sin parámetros se tienen al menos los siguientes subcomandos:
<return> Lee los siguientes mensajes. Si no hay más sale de mail.
* Da un resumen de comandos de mail - Vuelve al mensaje anterior
p Reimprime el mensaje
a [arch] Añade el mensaje a arch (por defecto arch es mbox)
d Elimina el mensaje
q Sale de mail
<CTRL-D> Igual que q.
man man [sección] Permite consultar el manual man grep (obtiene ayuda sobre el comando grep) -
mesg mesg [-y | -a] Habilita o inhabilita la entrada de mensajes write. mesg y (habilita la entrada de mensajes) y Habilita
a Desabilita
mkdir mkdir directorio Crea un nuevo directorio mkdir trabajo (crea un nuevo subdirectorio denominado trabajo en el directorio actual) -
mv mv arch1 arch2
mv arch1 directorio Traslada o renombra archivos
mv facturas trabajo/ (mueve el archivo facturas al directorio trabajo) -
passwd passwd Permite cambiar la palabra de paso - -
paste paste [-dn] Permite combinar líneas de varios archivos paste -d, codfact facturas (genera un archivo que contiene en cada línea, la línea correspondiente del archivo codfact, un carácter coma de separación y la línea correspondiente del archivo facturas. dn Establece el carácter de enlace
pr pr [-d, -ln, -p, -t, -wn] Imprime (formatea) archivos pr -pl24 facturas (visualiza por pantalla, de veinticuatro en veinticuatro líneas y separando por pausas, el archivo facturas) d Líneas a doble espacio
ln Establece la longitud (altura) de página en n líneas.
p Hace pausa entre páginas
t No incluye encabezamiento de cada página
wn Establece la anchura de página en n columnas.
ps ps [-a, -u, -x] Retorna los procesos activos ps -aux (visualiza en formato extendido todos los procesos activos y sus usuarios) a Retorna todos los procesos
u Indica el usuario de cada proceso
x Información extendida
pwd pwd Indica el directorio actual - -
rm rm [-l,-r] archivo ... Borra archivos rm -r trabajo (elimina el directorio trabajo y todos los archivos y subdirectorios que cuelgan de él) l Protege archivos existentes
r Borra recursivamente todos los subdirectorios y archivos que cuelgan del directorio a borrar
rmdir rmdir directorio ... Borra directorios siempre y cuando estén vacíos rm trabajo (borra el directorio trabajo en el caso que esté vacío) -
sed sed [opciones] Editor de flujo - -
sort sort [-b,-d,-f,-n,-o archsal, -r] archent Ordena las líneas de un archivos según orden lexicográfico. sort -f -o salida entrada (ordena el archivo entrada en el archivo salida ignorando mayúsculas y minúsculas) b Ignorar los espacios del principio de línea
d Ordena según diccionario
f Ignora diferencias entre mayúsculas y minúsculas
n Ordena los números por el valor y no por orden lexicográfico
o archivo El resultado se escribe en archivo
r Revierte el orden
spell spell archivo Corrige ortográficamente un archivo - -
tail tail [-n] archivo Recorta las últimas líneas de un archivo. tail -100 diario (Imprime las últimas 100 líneas del archivo diario) -
uniq uniq [-u,-d,-c] archent [archsal] Suprime las líneas duplicadas en un archivo. uniq -d ventas masvendidos (produce en el archivo masvendidos aquellas líneas de ventas que aparecen más de una vida) u Sólo retorna aquellas líneas duplicadas
d Retorna las líneas duplicadas
c Retorna el número de veces que aparece repetida cada línea
vi vi Editor de pantalla vi facturas (edita el archivo facturas. Si no existe lo crea) Dentro del editor y desde el modo comando (que se accede con ESC):
i Inserta caracteres
x Borra caracteres
:q Salir sin grabar
:x Salir grabando cambios
wc wc [-l,-w,-c] archivo ... Cuenta las palabras de un archivo (WordCount). wc -l diario (cuenta las líneas del archivo diario) l Cuenta líneas
w Cuenta palabras
c Cuenta caracteres
who who [am I] Indica los usuarios conectados al sistema who (informa sobre los usuarios conectados en ese momento) am I Sólo proporciona información sobre el propio usuario.
write write nombredeusuario Envía una nota a otro usuario del sistema write vanessa
Nos vemos a la salida?
<CTRL-D> (Envía una nota a la usuario vanessa)
-

Selenium IDE es un plugin de firefox que graba y ejecuta interacciones del usuario con el navegador, puedes crear scripts de su tipo o simplemente grabar las interacciones para ser ejecutadas. Selenium IDE puede exportar scripts para la el software RemoteControl y WebDriver which records and plays back user interactions with the browser. Use this to either create simple scripts or assist in exploratory testing. It can also export Remote Control or WebDriver scripts, aunque deben ser revisados y adaptados en algunos de sus puntos.


descarga Selenium IDE: http://docs.seleniumhq.org/download/

descarga SelBlocks IDE (este te permite agregar comandos de loop, tipo while): https://addons.mozilla.org/es/firefox/addon/selenium-ide-sel-blocks/

Lo recomiendo, sobre opciones como Imacro o greymonkey.


sábado, 21 de junio de 2014

Mejores prácticas para el manejo de excepciones


Amigos, hemos estado utilizando el manejo de excepciones en nuestro código para casi todas las aplicaciones estándar de la industria. Enfoque habitual es crear algunas clases de excepciones personalizadas que se extienden de la base Excepción clase. En este post, voy a sugerir otro enfoque que pudiera hacerle más sentido.

Secciones de este mensaje:
  • Nuestro nuevo enfoque
  • Ventajas

Nuestro nuevo enfoque

Probablemente algunos de nosotros ya utilizan este mecanismo. Si usted es uno de ellos, entonces por favor revise este post y sugerir las mejoras. De lo contrario, aprender sobre este mecanismo y sus comentarios.
Nuestro nuevo enfoque utiliza las clases internas estáticas para cada nuevo escenario excepcional .Tradicionalmente, creamos una clase DBException extendiendo la clase Exception. Ahora, cada vez que nos vemos atrapados en una situación en la que es necesario que excepción lanzada, solemos crear una instancia de esta clase, poner un poco de información en forma de mensaje, y echarlo.
Ahora, vamos a considerar que hay situaciones siguientes que hemos identificado en el que tenemos que tirar DBException:
  1. Error de ejecución del SQL
  2. No existen datos en la que esperamos al menos una fila
  3. Existen múltiples filas en la que esperamos fila único single
  4. Error parámetros no válido
y pueden existir muchos más de tales casos.
Diferentes con nuestro enfoque tradicional, y mucho, prueba nuestro nuevo enfoque, es decir crear las clases internas estáticas.
Vamos a empezar con la clase BaseException que se crea como abstracto y será el tratamiento super clase de todas las clases de excepción.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Make this class abstract so that developers are forced to create
// suitable exception types only
public abstract class BaseException extends Exception{
    //Each exception message will be hold here
    private String message;
    public BaseException(String msg)
    {
        this.message = msg;
    }
    //Message can be retrieved using this accessor method
    public String getMessage() {
        return message;
    }
}
No es el momento de crear nuevas clases internas de excepción. Deje que golpeó el teclado.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class DBExeption
{
    //SQL execution error
    public static class BadExecution extends BaseException
    {
        private static final long serialVersionUID = 3555714415375055302L;
        public BadExecution(String msg) {
            super(msg);
        }
    }
    //No data exist where we expect at least one row
    public static class NoData extends BaseException
    {
        private static final long serialVersionUID = 8777415230393628334L;
        public NoData(String msg) {
            super(msg);
        }
    }
    //Multiple rows exist where we expect only single row
    public static class MoreData extends BaseException
    {
        private static final long serialVersionUID = -3987707665150073980L;
        public MoreData(String msg) {
            super(msg);
        }
    }
    //Invalid parameters error
    public static class InvalidParam extends BaseException
    {
        private static final long serialVersionUID = 4235225697094262603L;
        public InvalidParam(String msg) {
            super(msg);
        }
    }
}
Aquí, creamos una clase interna para cada escenario posible error identificado en el arranque. No puede haber muchos más extra. Depende de ti sólo para identificar y agregar más clases.
Veamos cómo estas clases parecen en archivos de registro.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class TestExceptions {
    public static void main(String[] args)
    {
        try
        {
            throw new DBExeption.NoData("No row found for id : x");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}
Output:
com.exception.DBExeption$NoData: No row found for id : x
at com.test.TestExceptions.main(TestExceptions.java:7)
Como se puede ver el mensaje de registro de seguimiento de pila de excepción, si se ha vuelto más informativo.

Ventajas del uso de clases internas

  1. Ventaja más importante es que si usted desarrollador ha escrito un texto de mensaje dudoso, entonces también se puede observar claramente que lo que era realmente malo.
  2. Usted puede utilizar la instancia de comparación en diferentes situaciones en el que maneje diferentes escenarios excepcionales.
  3. No es necesario enviar una sola excepción para un gran conjunto de condiciones excepcionales.
  4. Es fácil de escribir casos de prueba de unidad para casos negativos donde se sabe la clase exacta excepción, debe esperar.
  5. La tala es más significativo e informativo.
Espero que este post ha sido algunos informativa para usted. Si usted tiene algunas sugerencias, por favor escríbame.
Subscribe to RSS Feed Sígueme en twitter!