Category: Uncategorized


Charla de socialización realizada en la empresa INTCOMEX Américas sobre Cloud Computing con el enfoque Professional Cloud Solution Architect del Cloud Credential Council.  Charla que hace parte del proceso de competencias transversales del 2016 con MinTIC e ICETEX.

El video no esta completo ya que durante la charla se acabó la batería :/ .. de igual forma deseo compartirles parte de la experiencia. Bienvenida la retro alimentación que nos permita fortalecer los conceptos de cloud computing para los retos actuales.


 

 

Anuncios

Seguramente nos hemos preguntado esto cuando estamos actualizando nuestras herramientas de desarrollo o producción.. en este caso al SQL server que tenemos instalado.. es sencillo peor me pareció practico por si en algún momento se requiere saber nuestra versión exacta por si tenemos algún problema y estamos en proceso de solución.. bueno en la consola de Queries se ejecuta:

Select @@Version

Y listos! la salida sería la siguiente:

Imagen

Hace un tiempo tuve un incoveniente con una validación de un check con jQuery donde usaba attr() para activar si un valor venia en true o removía el valor si venia en false, esto en HTML lo hacia, pero en el DOM no se veía reflejadoo el chulo de activación, revisando encontré lo siguiente en desarrolloweb.com, que me sirvió bastante:

El método prop() disponible desde jQuery 1.6 sirve para acceder y modificar propiedades de elementos y attr() para atributos. Veamos las diferencias.
Por Miguel Angel Alvarez

Antes de jQuery 1.6 teníamos un único método para el acceso y modificación de todos los atributos de los elementos de la página por medio de jQuery, llamado attr(). A partir de jQuery 1.6 tenemos dos métodos que vamos a tratar de distinguir en este artículo. Por un lado tenemos prop() y por otro lado tenemos attr().

El método attr() sirve para acceder a atributos de la página y ya lo explicamos en un par de artículos del Manual de jQuery. En el texto Acceder y modificar atributos HTML desde jQuery repasamos los usos generales de este método y en el artículo Método attr() de jQuery, otros usos y removeAttr() vimos otros usos y el método “hermano” removeAttr().

Nota:

Nota: Además, tenemos el método val() que sirve específicamente para acceder y modificar el atributo value. En principio ese método val() es el que deberíamos usar siempre que queremos ver el valor que haya cargado en “value”, o modificarlo.
Ahora en el API de jQuery tenemos un nuevo integrante del ecosistéma de métodos para trabajo con los atributos de la página, llamado prop(), que sirve para acceder y modificar propiedades.

Qué son atributos y qué son propiedades

En la documentación de jQuery tienes una explicación sobre todo esto, aunque a veces puede resultar algo confusa, porque habitualmente utilizamos el término ?attribute? y ?property? (atributo y propiedad) para la misma idea, es decir, atributos de las etiquetas HTML. Al menos en los manuales de DesarrolloWeb .com utilizamos esos dos términos indistintamente como sinónimos cuando nos referimos al HTML e incluso muchas veces al hablar de programación.
Pues bien, para clarificar esto, tengamos en cuenta a qué nos estamos refiriendo en este caso como atributo y a qué nos referimos con propiedad:

Atributo: cualquier cosa que tengamos en una etiqueta HTML para personalizarla.

<a style=”color: red”>…</a>

En ese caso “style” es un atributo de la etiqueta HTML.

Propiedad: cualquier cosa a la que podamos acceder desde una propiedad de un objeto nativo Javascript.

document.forms[0].elements[0].checked

En el ejemplo, tenemos varias propiedades en funcionamiento, pero veamos el “checked” final, que es una propiedad de un elemento de formulario. A esa propiedad accedemos desde el DOM de Javascript.

Por lo tanto, para concretar todavía más y ver lo confuso que puede llegar a ser, esa propiedad nativa Javascript “checked” sería diferente de este atributo “checked”:

<input type=”checkbox” checked=”checked”>

En ese caso “checked” es el atributo de HTML.

Uso del método prop() en jQuery

El método prop() sirve para modificar propiedades nativas de Javascript de los elementos de una página. Como otros métodos de jQuery el uso es ligeramente distinto dependiendo del juego de parámetros que le enviemos.
En principio, enviando un único parámetro nos sirve para acceder al valor de una propiedad, aquella que indiquemos en el parámetro. La otra opción nos sirve para modificar una propiedad y para ello debemos indicar dos parámetros, el primero sería la propiedad a modificar y el segundo el valor que queremos introducir.

$(elemento).prop(“checked”);

Esto nos devolvería el valor de la propiedad Javascript “checked”, que seguramente sepamos, es un booleano que indica con true o false si un campo checkbox está o no marcado.

Si quisiéramos modificar el estado del checkbox, hacemos lo siguiente:

$(elemento).prop(“checked”, true);

Esto haría que el checkbox estuviera marcado como confirmado.

Cuándo utilizar prop() y cuándo usar attr()

Antes de jQuery 1.6 solo existía attr(), por lo que no existía una duda concreta sobre cuándo usar uno o el otro. El problema es que attr() tenía algunos problemas/bugs y se hacía difícil su mantenimiento. Especialmente daban problemas con attr() muchas de las propiedades de objetos Javascript que eran boleanas, como el mencionado checked u otros como disabled o readonly.
En la actualidad tenemos que usar los métodos con cuidado porque pueden producirse casos confusos. ¿Qué hacemos campoCheck.attr(“checked”) o mejor campoCheck.prop(“checked”)?

Para evitar esos casos, attr() solo te dará el valor de atributos HTML y prop() te dará el valor de las propiedades del DOM de Javascript para un elemento dado. En versiones más nuevas de jQuery todas las propiedades boleanas de los objetos del DOM se tienen que acceder por prop() y se han desactivado en attr(). Por ejemplo campoCheck.attr(“checked”) se ha desactivado para que no te devuelva ningún valor y siempre deberías acceder por campoCheck.prop(“checked”).

Para ver algunos ejemplos.

Atributos que se modifican con attr(): class, id, href, label, src, title…
Propiedades que se modifican con prop(): autofocus, checked, async, multiple, readOnly…
Espero que esto resuelva la duda que muchos de nosotros hemos tenido cuando intentamos acceder a propiedades y valores de atributos.

 

 

 

Aveces necesitamos obtener datos sencillos de una URL externa frente actividades en facebok como por ejemplo cuantas veces ha sido compartido, No. likes, No. compartidos pero no necesitamos hacer todo un App en facebook para tener estos datos.

Usando el API de facebook por XML nos retorna esta información dada una URL:

http://api.facebook.com/restserver.php?method=links.getStats&urls=[URL a consultar]

Ya dependiendo de cada plataforma hacen el proceso de lectura y procesamiento, por ejemplo para PHP vi una muy interesante que pueden consultar la fuente original en allfacebook.com es la siguiente:

<?php
$source_url = “https://xdeamx.wordpress.com&#8221;; //This could be anything URL source including stripslashes($_POST[‘url’])
 
$xml = file_get_contents($url);
$xml = simplexml_load_string($xml);
$shares = $xml->link_stat->share_count;
$likes = $xml->link_stat->like_count;
$comments = $xml->link_stat->comment_count;
$total = $xml->link_stat->total_count;
$max = max($shares,$likes,$comments);
?>
O a través de un navegador como Chrome pueden ver la estructura de datos que retorna probando por ejemplo con la URL de su sitio.

Revisando alguna documentación recomiendan que los sitios web si se ingresa: tusitio.com, debe redirigir a http://www.tusitio.com, ya que de lo contrario para los buscadores da la impresión que son dos sitios diferentes.

Sin entrar del detalle de cuando realmente se requieren prefijos para los sitios web como: deportes.tusitio.com ó cocina.tusitio.com.. vamos abordar solo el tema de redireccionamiento de un “non www” a http://www.tusitio.com; para esto se debe editar el archivo .htacces de la raíz de tu sitio principal (si usas un CMS para soportar tu sitio generalmente lo trae por defecto activado para URL´s amigables, en caso de Joomla 1.5! viene como htaccess.txt, lo que se hace es renombrarlo a .htaccess y se activa en backend), en la edición de este archivo se agrega las siguientes lineas (o verificar si ya estan en el archivo activas y solo agregar las ultimas dos):

Options +FollowSymLinks

RewriteEngine On

RewriteCond %{HTTP_HOST} !^www.

RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Revisemos en la ultima linea el lugar que dice: %{REQUEST_URI}, aquí le decimos que el redirect que elabore lo haga para todos los contenidos que estén asocisiados a ese dominio de nuetro host. Lo comento ya que por ejemplo haciendo pruebas de otras fuentes el ejemplo salia de la siguiente forma:

” RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1  [R=301,L] ”

Observemos que el  %{REQUEST_URI} se cambia por /$1, esta regla también funciona correctamente, pero si por ejemplo el usuario ingreso: http://tusitio.com/galeria.html lo re-direcciona a  http://www.tusitio.com/, es decir lo envía a la raíz del sitio .. pero creo que nos es mas funcional que le agregue el: www y le mantenga la URL que desea el usuario, por ejemplo: http://tusitio.com/galeria.html lo re-direcciona a  http://www.tusitio.com/galeria.html.

Siguiendo lso temas de fase de analisis..es muy importante saber que meotdología nos conviene más implementar en nuestro poryecto de software; en el presente post adjunto una evaluación muy personal sobre: RUP. XP y MSF, esta evaluación ha sido desarrollada tomando algunas fuentes de la web, testimonios y opiniones personales.

Adjunto el archivo de la guia 2: aqui

En los siguientes post de aquí..a unos 6 meses.. Voy a compartir con ustedes los avances de una especialización tecnológica que está impartiendo el SENA (para quienes no lo conocen, el SENA es el servicio de aprendizaje Nacional acá en mi país Colombia, una institución que apoyado y ha creído en el desarrollo del país a través del talento nacional), esta especialización tecnológica en la que estoy participando siendo aprendiz..es acerca de desarrollo de aplicaciones para dispositivos móviles.. un tema que nos interesa a varios..por esta razón voy a compartir con ustedes los avances de guias, conceptos y temas que vaya adquiriendo para oderles compartir.

Como todo buen proyecto de software, se empieza por realizar análisis y diseño, esta especialización empezó por allí: el análisis e investigación sobre las rede inalámbricas… sobre este tema se centra la guía 1 que adjunto seguido al post.

Guia 1

Muchas veces necesitamos darle más memoria a la maquina virtual de Java para que ejecute ciertas funciones de nuestra aplicación, ya que si no se la damos tenemos el famoso mensaje: “PerGerm Space” ó “head space”. Aunque es necesario revisar esas funciones, ya que tal vez sea por las logica de la programación, se debe optimizar cada sentencia para consumir menos recursos del hardware..entonces en ese caso como el famoso argot popuar el problema no es de “Indio sino de flecha”..es decir el problema no es de la memoria de java, sino de la forma que estan programadas de las funciones.

En otros casos, como me sucedio a mi, el JVM no soportaba una conexión con Postgres para traer solo un millon de registros en un aplicativo de escritorio Java Swing…siempre se quedaba sin memoria, cuando mas o menos iba en el registro 300000 y observe por medio del taskmanager que consumia solo 291 mbs de las 2 gb de RAM de mi equipo (se debe tener en cuenta que mucha de la RAM de nuestros equipos se asigna a cosas como el SO, aplicaciones que se arrancan al inicio como los antivirus, etc.)  y se quedaba colgada la aplicación.

Buscando por alli encontre un articulo que me dio la luz: aumentar el tamaño de memoria de la maquina virtualen java, este buen articulo explica como de forma sencilla podemos dar parametros de inicialización a la maquina virtual de java, ya sea corriendo un JAR, una clase Java ó parametrizando por medio de un script como lo hace Tomcat.

Realize las pruebas por comandos y excelente!! mi aplicativo corrio perfectamente y pude hacer provecho de mi memoria RAM…pero… no podia decirle al cliente: “Siempre que ejecute el aplicativo cuando vaya a traer un millon de registros..entre el cmd o a la terminal y digite java -X256m -Xmx1024 ..etc. etc.”, por ello decidi hacer un .bat que me facilitara esa ejecución.. pero al ejecutarlo queda la pantalla del CMD detras del aplicativo, visible el cual el cliente puede cerrar en cualquier momento ya que tal vez no la quiere ver y con ello cierra el aplicativo y puede obtener perdidas de información o algo así.

Fue por ello que decidi crear un pequeño aplicativo Java que ejecutara el codigo al CMD con los parameros de memoria para la maquina virtual.. y listo!!!!.. se soluciono:  1ro – la necesidad de memoria para mi aplicación JAVA en Swing, 2do – la transparencia de  ejecución para el usuario  y 3ro- presentación para el usuario.(Estos dos ultimos inconevneintes nacieron al momento de ecsoger las opciones de solución)

Dejo el codigo que use para del segundo aplicativo para la ejecución del codigo CMD que ejecutara mi aplicativo Swing:

//extiende de Thread para usar hilos
public class Ejecutable extendsThread {
publicstaticvoidmain(String[] args) {
//instancio mi clase
Ejecutable ejecutable =new Ejecutable();
//ejecuto el hilo
ejecutable.start();
}
publicvoidrun(){
//Defino objeto pr de la clase Procces
 Process pr;
//Hago un string con el comando de consola o terminal
//El System.getProperty("user.dir") es para saber en que directorio esta siendo ejecutada mi clase Ejecución
String comando ="java -Xms256m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m -jar \""+System.getProperty("user.dir")+"\\nombreJARMiaplicativo.jar \" ";
try{
//Ejecutamos el comando
pr = Runtime.getRuntime().exec(comando);
}
catch(Exception ex)
{
System.out.println("Ha ocurrido un error al ejecutar el comando. Error: "+ex);}
}
}

Espero les sirva.. ya saben lo que dicen..siempre ahi mejor forma d ehacer las cosas..si saben de una mejor me comentan y lo mejoramos!!

Este es un webinar propio de ICEfaces gratuito, este es el mensaje de ICEfaces:

“Taller de migración a ICEfaces 2 Si está comenzando a desarrollar una aplicación basada en ICEfaces 1.8 o ya dispone de una completa pero le gustaría migrar a ICEfaces 2, ¡este taller de una hora es para usted! Durante el transcurso del taller estudiaremos las últimas características y mejoras en ICEfaces 2 y en JSF 2, además de mostrar en detalle los pasos necesarios para migrar su aplicación. Finalizaremos con una demostración en vivo de cómo portar una aplicación existente de ICEfaces 1.8 a ICEfaces 2.0.

Al final del webinar responderemos a las dudas que hayan podido surgir durante su desarrollo.

Title: Taller de migración a ICEfaces 2

Date: Wednesday, March 30, 2011 Time: 4:00 PM – 5:00 PM CEST

Space is limited.

Reserve your Webinar Seat Now!

Link de Registro

Cuando abrimos un workspace en eclipse aveces observamos que se que queda cargando y cargando y…cargando, hasta que nos damos cuenta que el eclipse esta bloquedao y revisamos en el task manager (en el caso de Windows) que eclipse no esta haciendo ningun proceso pero si esta consumiendo memoria ram, esto algunas veces sucedes por que al iniciar el Javatooling del workspace se queda pegado, esto sucede por que depronto cerramos mal eclipse la ultima vez que usamos el workspace ya sea por que lo forzamos a cerrar o por un bajon de luz, etc.

Para no creer que nuetsro workspace esta dañado y que no podemos volver a usarlo ya que siempre se queda pegado cargando java tooling debemos hacer lo siguiente:

1. Sin abrir eclipse, vamos al directorio del workspace
2. Ya en el directorio del workspace abrimos: .metadata –> .plugins –> org.eclipse.core.resources
3. En este directorio buscamos la carpeta que dice: .projects , cogemos la carpeta y la movemos de ahi..es decir la quitamos del directorio y la ponemos por ejemplo en el escritorio.
4. Minimizamos todo y abrimos eclipse, con el workspace que nos esta presentando inconvenientes y del que acabampos de quitar la carpeta .projects
5. Esperamos a que cargue completamente el workspace, observamos que el javatooling ahora si carga…extraño no?
6. Una vez cargue el workspace completamente, lo cerramos de nuevo, al momento que eclipse esta guardando el workspace nos puede mostrar error, esto sucede por que el .projects original posee archivos que internta bsucar eclipse y no estan.
7. Una vez cerardo eclipse, buscamos la carpeta .projects, que copiamos por ejemplo en el escritorio , y la volvemos a copiart a la direcciòn original (ruta tratada en el paso dos). El nos pregunta que si sobreescribimos, le decimos que si y listo!!
8. Volvemos abrir eclipse, el mismo workspace y chekeamos que cargue completamente.

El paso 7 se hace en casos como por ejemplo cuando usamos control de versiones, donde .projects guarda informaciòn sobre el versionamiento y la sincronizaciòn con el repositorio…. por ello es improtante hacer respaldo del original.