F1 Help! La solución que buscabas

Desarrollo, programación, tips, consejos y soluciones para los usarios de PC

martes, 5 de julio de 2011

Buscar coordenas de una ciudad usando Google

Hoy necesitaba buscar las coordenadas de varias ciudades de Argentina, por lo que hice este scirpt.

Toma como entrada un arivo llamado citys.txt con el formato "codigo postal, nombre ciudad".

Y devuelve un archivo con las coordenadas, y la provincia entre otras cosas.

Asignarle un Alias a un Namespaces en Visual Studio

Otra cortita y al pies. Esta es mas bien un SNIPPET de código. Muchas veces tenemos namespace de nombre largo o de complicada lectura y lo que queremos es reducir el impacto visual y mejorar la legilibilidad del código, sobretodo si estamos compartiendo o trabajando en conjunto sobre el mismo. Es por esta razones que resulta interesante asignarle alias a los NAMESPACES.

El código necesario es el siguiente:

Generar una Interface a partir de un WSDL

Cortita y al pie!

Un par de veces en el trabajo me enfrenté al problema de tener que a partir de un WSDL tener que generar la interfaz para un Web Service de manera de que otro servicio pueda consumir los datos que le iba a ofrecer. En varias de esas oportunidades terminabamos cambiando la óptica, porque no conocía la manera de como generar un Web Service a partir de un WSDL. Pero hoy me enteré en la búsqueda de otra cosa que con el siguiente comando, podemos generar a partir de un WSDL una interfaz PUNTO.NET para luego crear nuestro Web Service. Lo único que restaría es hacer una clase que la implemente.

El comando es el siguiente:

domingo, 3 de julio de 2011

Separador (clearfix) CSS sin etiquetas HTML

Cada vez que utilizamos la propiedad float:left/right en nuestro CSS, para armar la estructura de nuestro sitio, tenemos que estar atentos a que si los bloques que estamos "flotando" tienen distinto alto puede ocurrirnos que los bloquespresenten un comporamiento no deseado.
Es por esto que al final de los elemento flotantes colocabamos un elemento de bloque con la propiedad clear:both para solucionar este inconveniente o asegurar la disposición que estabamos buscando. Ya que este elemento se situaba por debajo de todos los bloques y cerraba nuestro contenedor.

El problema de esta solución es que estamos agregando HTML a la página que no tiene ningun sentido (semántico) para el contenido y el significado del sitio. Además si el contenido que se genera es dinámico tenemos que asegurarnos que el elemento se agregue al final para que no produzca efectos colaterales y se cierre correctamente el contenedor.

Es por eso que desde CSS-Tricks nos acercan esta solución CSS:
.grupo:before,
.grupo:after {
    content:"";
    display:table;
}
.grupo:after {
    clear:both;
}
.grupo {
    zoom:1; /* For IE 6/7 */
}

viernes, 1 de julio de 2011

Título semántico en listas HTML

Al tratar de otorgarle más semántica nuestro marcado HTML nos hemos encontrado que no exista dentro de nuestra lista (UL) una etiqueta para informar el título de la lista (algo que describa los elementos de la misma). En cambio etiquetas como "fieldset" tienen a "legend" para titularlas

Ejemplo:
Mi leyenda

Mi contenido dentro del fieldset


También tenemos a "thead" y "th" para generar encabezados semánticos a nuestras tablas.

Como en las listas no existe nada de esto, pensé en utilizar el atributo title de todo elemento y combinarlo un poco con los pseudo-elementos "before" y "after" para poder obtener mi título semántico.

El código es el siguiente:
<ul title="Navegadores que soportan título semático en UL OL DL">
    <li>IE 8+</li>
    <li>FF 3+</li>
    <li>Chrome</li>
    <li>Opera 6+</li>
    <li>Safari 4+</li>
</ul>

Y el CSS aplicado:
ul{
    list-style-type:square;
    padding-left:20px;
}
ul:before{
    content:attr(title);
    position:relative;
    left:-20px;
    color:blue;
    font-weight:bold;
}

Para obtener este resultado

jueves, 23 de septiembre de 2010

Instalar Impresora HP en Debian

Seguramente han logrado instalar sus impresoras utilizando Cups. Pero que hay si estas son de las que vienen con Wifi y encima traen scanner. ¿Sera posible hacerlo funcionar en linux?

Pues claro. En los repositorios un par de paquetes importanticimos para la instalacion de las impresoras/scanner Hp. Este paquete se llama hplip. Tambien recomiendo instalar hplip-gui. Para esto desde consola ejecutamos como root:
# aptitude install hplip hplip-gui


Una vez que tengamos esto instalado. Recomiendo no usar cups para instalar la impresora. Ya que esta aplicacion de HP nos la configurara automaticamente y la tendremos disponible para mas tarde configurarla desde CUPS.

Entonces para poder instalarla desde una consola como root

lunes, 20 de septiembre de 2010

Un simple pero efectivo atoi

Hace mucho que no escribo en esta seccion del blog, pero bueno, no se alarmen. Hoy en uno de los foros que leo me pidieron que les enseñe a crear un atoi (convertir de cadena a entero) en c. Y como fue codigo 100% hecho por mi se me ocurrio compartirlo. Ademas por la explicacion que hice. Aqui va el codigo.
numero = 0;

for(i=0;cadena[i] != '\0' ;i ++) {

 digito=cadena[i] - '0';

 numero = numero * 10 + digito;

}
Como cada caracter es representado por un numero, a esto le podemos restar otros caracteres para obtener otro caracter o un numero. Por ejemplo para obtener el digito 5 desde el caracter '5' podemos hacer:

'5' - '0' = 5
'2' - '0' = 2

La idea es restar siempre el primer elemento de la secuencia ordenada de caracteres que queramos. Es posible aplciar esta tecnica para averiguar el numero de letra( 'g' - 'a').

Luego pensemos en un poco de matematica:

2345 = 2 x 1000 + 3 * 100 + 4 * 10 + 5

Esta idea nos da una pequeña intuicion. Tenemos que ir multiplicando cada digito(obtenido con la tecnica anterior) por un multiplo de 10 segun corresponda. Pero no es muy conveniente llegar al digito menos representativo para empezar a multiplicar.

Existe una mejor tecnica. Miren esta descomposicion efectuada gracias a la distribucion del producto:

2345 = 2 x 1000 + 3 * 100 + 4 * 10 + 5 = (2 * 100+ 3 * 10 + 4) * 10 + 5

Si seguimos desarrollando de esa manera, observaremos que al agregar un nuevo digito al numero, simplemente multiplicamos por 10 el numero anterior y le sumamos el digito siguiente:

numero = numero * 10 + digito

Todos sabemos que al multiplicar un numero por diez, se corre la coma a la derecha, apareciendo un cero final. Simplemente hay que sumarle el digito obtenido y listo.

Un agregado mas, en el for se recorre hasta que se obtiene un final de cadena. Pero se puede modificar para que recorra siempre que se obtenga un digito. Cuando este no aparezca mas se corta. Osea podremos parciar numeros desde cadenas como estos "1234holamundo"

Les dejo la pista para esto. En el for deberian chequear esta condicion: '0'<= cadena[i]<='9'

miércoles, 18 de agosto de 2010

Inicio de sesion automatico en Windows XP/Vista/7

Nos molesta mucho tener que escribir la contraseña que cada vez que prendemos la sesion. Pues aqui les paso un truquito para iniciar automatica.

Vamos a inicio, ejecutar, y escribimos: (por lo general en windows vista o seven no aparece el boton ejecutar, simplemente en el buscador ponemos "Ejecutar")

control userpasswords2

Escojemos la cuenta de usuario que queremos utilizar y destildamos la opcion “Los usuarios deben introducir un nombre de usuario y contraseña para utilizar el ordenador”.

Aqui nos pediran la contraseña del usuario y listo. Damos en aceptar... Apartir de ahora se iniciara sesion automaticamente.

jueves, 12 de agosto de 2010

Montar imagenes .iso .nrg en Linux

Aqui les paso dos rapidos comandos, para montar Iso y NRG (archivo imagen del Nero) desde la consola de linux:

mount -t iso9660 -o loop archivo.iso /directorio/de/montaje

Para montar los NRG debemos agregar un pequeño offset para asi saltaernos datos que solo le importan al Nero.

sudo mount -t iso9660 -o loop,offset=307200 imagen.nrg /directorio/de/montaje

domingo, 25 de julio de 2010

Convertir cadenas de caracteres a fecha en Excel

Microsoft Excel - Todas las Versiones

Muchas veces se dá al estar trabajando con distintos sistemas de información que al exportar la información desde el sistema a Excel para producir informes resulta que las fechas, no vienen en un formato legible para Excel, provocandonos un dolo de cabeza para nosostros. Aca voy a compartir con uds una simple formula para convertir las siguientes tipos de cadenas de texto a fechas:
  • dd-mm-aaaa
  • dd.mm.aaaa
Para ello podemos utilizar la siguiente formula:

=FECHANUMERO(CONCATENAR(EXTRAE(Celda;1;2);"/";EXTRAE(Celda;4;2);"/";EXTRAE(Celda;7;4)))

Donde Celda representa la celda donde esta la cadena a convertir.
Finalmente seteamos el formato de la celda como fecha.

Para convertir las siguientes tipo de cadenas:
  • dd-mm-aa
  • dd.mm.aa
 En este caso podemos utilizar la siguiente formula:

=FECHANUMERO(CONCATENAR(EXTRAE(Celda;1;2);"/";EXTRAE(Celda;4;2);"/";EXTRAE(Celda;7;2)))


Donde Celda representa la celda donde esta la cadena a convertir.

Finalmente seteamos el formato de la celda como fecha.

Y el ultimo caso es para fechas con el siguiente formato:
  • ddmmaaaa
En ese caso utilizamos:

=FECHANUMERO(CONCATENAR(EXTRAE(Celda;1;2);"/";EXTRAE(Celda;3;2);"/";EXTRAE(Celda;5;4)))


Donde Celda representa la celda donde esta la cadena a convertir.

Finalmente seteamos el formato de la celda como fecha.

Desactivar la reproduccion automatica de CD/DVD y Pendrive en Windows XP

Esta cansado de que muchos virus le infecten la maquina porque conectar un Pendrive en su computadora. Sos de lo que trabajan en la escuela o el trabajo y traes informacion en el pendrive y se te infectan la maquina.

La mayoria de estos virus se instalan en un archivo conocodi como "autorun.inf" que windows esta acostumbrado a ejecutar cuando se conecta un dispositivo. Por eso te recomendamos desactivar esta opcion de la siguiente mantera:

Primero hacemos click en inicio y vamos a ejecutar. Despues tipeamos gpedit.msc. En la ventana que se abrio debemos ir, en la barra de la izquierda, a
Configuración del equipo/Plantillas Administrativas/Sistema y luego buscamos la opcion Desactivar reproducción automática.

Al hacer esto saldra una ventana que nos dejara elegir entre varias opciones. Hacemos click en Habilitada y en "Desactivar reproduccion automaticab en:" elegimos la opcion en todos los dipositivos.

Una vez hecho esto, para no esperar a reiniciar hay que ejecutar el siguiente comando: gpupdate

Y Listo!! Con eso desactivamos las reproducciones automaticas!

Cómo modificar el espacio reservado en disco a Restaurar sistema en Windows Vista

Como pudimos observar, en Windows XP modificar este tamaño era simple. Accediamos a mi PC, propiedades, ibamos a la solapa Restaurar Sistema. Elegiamos uno de los disco y podiamos modificar el tamaño.

Pero desde Windows Vista esta opcion se ah modificado y no se encuentra mas ahi. Desde ahora hay que hacerlo desde la consola. Por eso aqui unos comandos utiles para poder resolver esto:

Para ver cuál es el espacio máximo asignado a las copias sombra, siga estos pasos:

1) Hacemos click en inicio y y vamos a busqueda rapida.

2) Escriba cmd y seleccione el programa ofrecido tras finalizar la búsqueda con el botón derecho del mouse. Haga clic sobre Ejecutar como administrador.

3) Proporcione credenciales administrativas o haga clic sobre Continuar, lo que proceda.

4) En la ventana de línea de comandos, tipee lo siguiente y pulse INTRO:
vssadmin list shadowstorage
Observe en la salida del comando la línea Espacio máximo del almacenamiento de la instantánea:. Ese el espacio máximo reservado.

Si somos de esas personas que cuidamos la pc y no precisamos tanto espacio para restaurar el equipo, por lo tanto queremos reducirlo debe hacer lo siguiente:

En la misma consola que abrimosanteriormente tipeamos:
vssadmin resize shadowstorage /on=C: /For=C: /MaxSize=5GB
(reemplazamos C por la unidad correspondiente y tambie modificamos MaxSize por el valor deseados)

Vssadmin devolverá el siguiente mensaje: Se cambió correctamente el tamaño de la asociación de almacenamiento de instantáneas.

Tener en cuanta que en la unidad donde este instalado el sistema es donde mayor tiene que ser el espacio reservado. A demas, cuanto menos espacio alla menor va a ser la cantidad de instantaneas. Por lo que no se podra vovler varios dias atras.

jueves, 22 de julio de 2010

Acceso web desde Python

Este tutorial se trata de acceder a una pagina web desde Python, obtener su codigo de fuente, y asi poder realizar ciertas acciones.

Empecemos por un codigo simple pero efectivo:
import urllib2,urllib
f = urllib2.urlopen("https://www.google.com.ar")
print f.read()
f.close()
Con ese simple codigo veremos que se imprime en la consola el codigo de fuente de la pagina de google.
Ahora un poco mas avanzado. Veremos como pasar informacion por metodo "POST" muy util para llenar formularios automaticamente. O tambien logins.
import urllib2,urllib
params = urllib.urlencode({"email": "xxxxxxxxxxxxxx@gmail.com", "pass": "xxxx"})
f = urllib2.urlopen("https://login.facebook.com/login.php?login_attempt=1",params)
print f.read()
f.close()
Como veran añadimos una variable mas al codigo con la informacion del metodo POST. Por lo general se debe guardar el nombre del objeto seguido con la informacion. Pero para esto sugiero leer tutoriales de programacion web.
Ademas pueden ver que añadimos la variable con los datos al metodo "urlopen" como un parametro mas.
Fijense que estamos tratando de loguernos con facebook. Por lo que busque los nombre de los campos de usuario y contraseña, como tambien la pagina a la que es redireccionado el explorador al tocar el boton de login.

Pero son necesarias un par mas de cosas para poder loguernos en facebook. Necesitamos activar las cookies; sino nos rechazaran. Para esto miren este codigo:
import urllib
import urllib2
datos = urllib.urlencode({'email':'tu_correo','pass':'tu_contrasenia'})
o = urllib2.build_opener(urllib2.HTTPCookieProcessor)
res = o.open('https://login.facebook.com/login.php?login_attempt=1', datos)
Aqui lo que hacemos previamente es crear un objeto "opener" de la libreria urllib pero le seteamos ciertos campos antes de abrir una pagina. No como antes que abriamos la paginade una. Simplemente este campo es para activar las Cookies.

Pero se llevaran una gran sorpresa si lo prueban con facebook. Ya que facebook tiene cierta restriccion con las cookies. Al ingresar a la pagina principal de facebook, se setean ciertas cookies que son necesarias para loguearse. Por lo tanto, pueden observar que no funcionan las cookies con facebook, en cambio, si funciona con otras paginas.

Pero siempre existe una solucion para esto. La idea es acceder primero a la pagina principal de facebook, obtener las cookies. Y luego loguearnos. Asi quedara el codigo:
import urllib
import urllib2
datos = urllib.urlencode({'email':'tu_correo','pass':'tu_contrasenia'})
o = urllib2.build_opener(urllib2.HTTPCookieProcessor)
o.open('https://www.facebook.com')
res = o.open('https://login.facebook.com/login.php?login_attempt=1', datos)

martes, 20 de julio de 2010

Instalar placa wireless Realtek RTL8101E/RTL8102E

Yo, como uno entre otros, hemos tenido problema al instalar este tipo de placa wifi en una Notebook. Despues de unos dias de lucho logre encontrar la solucion.

Buscando por internet me topaba siempre con los driever de mi placa. Los compilaba pero nada sucedia...mi placa parecia ser detectada, veia las redes pero a la hora de conectar nada sucedia.

Por eso decidi cambiar mi distribucion hacia Debian. Durante la instalacion el mismo sistema me advirtio que iba a tener problema con cierto driver porque no era 100% software libre. Asi que me recomendo agregar las ramas contrib y non-free al siguiente repositorio:
deb http://ftp.de.debian.org/debian/ squeeze main
Nuestro repositorio deberia quedar asi:
deb http://ftp.de.debian.org/debian/ squeeze main contrib non-free
Esto se puede hacer desde Synaptics o desde el archivo /etc/apt/sources.list.
Una vez que tenemos esto, debemos actualizar los repositorios (aptitude update). Y ahora con los nuevos paquetes detectados debemos buscar el paquete: firmware-realtek.

Este paquetes nos instala el driver de la placa de red. Justamente, esto era lo que me faltaba antes para que terminara de funcionar.

Como acababa de hacer una instalacion limpia de debian, todavia me faltaban los driver de mi placa de red wifi. Asi que volvi a entrar a esta pagina: www.realtek.com , Buscamos los driver de nuestra placa y los decargamos.

Luego los descomprimimos, ya vienen instalados programas visuales para hacer esto.
En la carpeta que descomprimimos vamos a una consola, y ahi tipeamos como superusuario:
make
make install
Con esto ya tenemos instalado el driver. Solo nos faltaria rebootear la Pc o desde la consola escribir:
modprobe r8192se_pci
Y eso es todo.

Por si no encuentran el firware desde el synaptics, por problemas de versiones (yo lo instale en la version squeeze) aca el dejo el link del paquete: Firmware-realtek

lunes, 26 de abril de 2010

Guia rapida SVN - Subversion

Subversion es lo que se llama un sistema de control de versiones centralizado (como CVS). Esto se usa con muchísima frecuencia en la industria del software. Su uso -tal como su nombre lo indica- es para ir controlando las distintas versiones del código fuente. Para explicarlo de manera sencilla digamos que hay un repositorio que tiene el código de una aplicación X y 3 miembros (A, B y C).

En una primera instancia los 3 miembros descargan el código fuente y “A” modifica un archivo y luego lo sube al servidor. Así, en el servidor tendremos lo que se llama una nueva revisión del proyecto. El miembro B “actualiza” y se le indica que hay un archivo que ha sido modificado y se descarga en su equipo. Le parece bien el cambio, pero le hace un arreglo y edita otro archivo y luego actualiza la versión del servidor. Un rato después el último miembro actualiza el proyecto y se encuentra con 2 nuevos archivos que han sido modificados.* Así cada miembro del proyecto puede acceder cada vez que va a trabajar a los cambios que han hecho los demás.*

Instalación
Si queremos llegar a alguna parte primero necesitamos descargar la herramienta. Como es habitual, podemos encontrarla en los repositorios con el nombre de subversion.

Sistema > Administración > Gestor de paquetes Synaptic
Buscamos subversion y lo instalamos

O lo instalamos de manera fácil:

sudo apt-get install subversion

Conceptos
Para utilizar las funciones básicas de Subversion tenemos que manejar algunos conceptos:
  • Repositorio: Lugar de la red donde se almacena el código fuente del proyecto.
  • Check-out (co): Descargar el código fuente desde el repositorio.
  • Check-in o commit (ci): Subir los archivos modificados al repositorio.
  • Update (up): Comparar el código de mi equipo con el del repositorio y descargar sólo las modificaciones.
Uso en Consola
Lo primero será descargarnos el código del proyecto con el siguiente comando (en la carpeta donde pensamos trabajar posteriormente):

$ svn checkout http://svn2.assembla.com/svn/nalga

Luego de la descarga subiremos nuestras modificaciones:

$ svn commit

Puede ser que se abra tu editor de texto (en mi caso Nano) para escribir un mensaje que acompañe la revisión y cuando salgas del editor tu archivo se enviará al repositorio.

Lo más probable que para poder subir archivos necesites tener una cuenta que te será entregada por el admin del servidor y este será el momento que te la soliciten (Nombre de Usuario y Contraseña).

Si acaso quieres agregar un mensaje y evitar que se abra el editor de texto puede agregar el modificador -m:

$ svn commit -m mensaje

En tu segundo día vas a seguir trabajando, pero antes debes comprobar si algún miembro hizo alguna modificación. Podrías descargar nuevamente todo el código, pero no tendría mucho sentido ya que seguramente no existirán cambios en todos los archivos; por esto Subversion cuenta con nuestra tercera función básica:

$ svn update

Como no nos gusta gastar nuestros dedos de más podemos utilizar abreviaciones para estas funciones: checkout (co), commit (ci) y update (up). Otras funciones útiles son:

log: Muestra los mensajes de las revisiones
diff (di): Muestra las diferencias entre la revisión seleccionada
help: La nunca bien ponderada ayuda (que por cierto, fue la que me enseño)