Perdón por la ausencia…
11 sep
¡Hola a todos!
Lastimosamente hace una semana mi PC sufrió un problema y mi fuente ATX falleció. Fue por ése motivo que estuve ausente y no pude escribir nada, pues el poco tiempo que podía conectarme era desde otra PC, y eso que era un tiempo relativamente poco, sólo para revisar mi correo, entre otras cosas.
El día jueves compré vía MercadoLibre otra fuente, ya que en mi pueblo por desgracia no hay sitios especializados en éstos temas. Haciendo un cálculo, tenía previsto que la fuente me llegaría el sábado o en defecto el lunes, pero sorprendentemente llegó ayer en la tarde, algo que realmente me fascinó.
No esperé y de una me puse a desempacar mi nueva hermosa fuente ATX y de una, a instalarla para revivir a mi pequeña. (Bastante Geek sonó ésta última parte ¿no?…).
Ahora está funcionando perfectamente y espero que me dure bastante tiempo, jeje…
Alternativa a len() en Python
11 sep
Como bien sabemos, hay una función para manejar cadenas de texto en Python que nos devuelve el número de caracteres de la misma, dicha función es len()
Por ejemplo, un uso sencillo de ella es:print "Hola = %s" % len("Hola")
Ésto nos devuelve: Hola = 4
Pero también podríamos recurrir a una alternativa creada por nosotros mismos. Es muy sencillo, simplemente necesitamos recorrer uno a uno cada caracter de la cadena e ir aumentando en 1 el valor de la variable que contendrá la longitud.
No siendo más, acá dejo el código de mi función (alternativa).
def strlen(str): result = 0 for i in str: result += 1 return result
¡Saludos!.,
Google renueva Calendar y Translate, podría ser sólo el principio
1 sep
En Google parece que están en plena fase de renovación de sus productos, con novedades saliendo casi cada día. Por ejemplo, hoy mismo han anunciado Gmail Priority Inbox y han añadido mejoras a Google Reader. Los siguientes tocados son Google Calendar y Google Translate.
Google Calendar ha sido el primero en renovarse, rediseñando la interfaz para que sea más similar al resto de productos de Google y cambiando la disposición de los elementos para hacer más cómodo su uso. Además, han cambiado el gestor de repeticiones para hacerlo más sencillo y han añadido la opción de “Encontrar la hora”, que nos permite encontrar el mejor horario para un evento en el que participen varias personas. Eso sí, tenemos que tener permiso de lectura de los calendarios de los demás participantes.
El otro tocado por la varita de la renovación ha sido Google Translate. No añaden funcionalidades pero sí mejoran el uso con una nueva interfaz, más limpia y con sugerencias de sitios web para traducir. Además han puesto varios usos y aplicaciones de Google Translate, algunos de ellos no muy conocidos como la aplicación para Android o los bots para GTalk. Aunque de momento son sólo dos servicios los que se renuevan, no sería raro que las demás aplicaciones Más >
Fondo de pantalla estilo «presentación» Ubuntu
31 ago
Los que han usado Windows Se7en sabrán que él nos permite tener un fondo de pantalla al estilo de presentación, usando los denominados «temas», pues bien, Ubuntu y en general varias distros de GNU/Linux nos permiten hacer exactamente lo mismo de una manera sencilla, rápida y personalizada.
Para crearlos tenemos dos opciones. La primera de ellas es hacerlo manualmente siguiendo un formato, y la otra es hacerlo teniendo como mediadora a una aplicación.
ManualmenteBien, empecemos por éste. Como es algo relativamente sencillo de entender pondré de una vez el código.
<?xml version="1.0" encoding="UTF-8"?> <!-- Created by DC XML Creator --> <background> <starttime> <hour>0</hour> <minute>00</minute> <second>01</second> </starttime> <static> <duration>300</duration> <!-- Duración de la imagen --> <file>/home/windhack/Imágenes/OliviaWilde02.jpg</file> <!-- 1º Imagen de la presentación --> </static> <transition> <duration>1</duration> <!-- Duración de la transición --> <from>/home/windhack/Imágenes/OliviaWilde02.jpg</from> <!-- Cambiar imagen de... --> <to>/home/windhack/Imágenes/OliviaWilde09.jpg</to> <!-- ...A --> </transition> <!-- Para agregar más imágenes seguir el formato a partir de <static> hasta </transition> --> </background> <!-- Fin de la presentación -->Usando aplicación
Como sé que hacer todo manualmente a veces puede ser tedioso, ya que después de cinco (5) imágenes es una tarea bastante agotadora, decidí desarrollar una aplicación que simplifica todo éste proceso.
La aplicación se llama DC XML Creator y está desarrollada en ObjectPascal (Lazarus).
Su uso es relativamente sencillo: Seleccionamos las imágenes que deseamos usar para la presentación, el tiempo que durará cada una, los segundos de la transición Más >
Números amigos
29 ago
De nuevo mirando los tan creativos nombres que le ponen a los tipos de números, me encontré con éstos: los números amigos.
¿Qué son?Los números amigos son dos enteros positivos a y b, cuya suma de los divisores de b da como resultado a y viceversa.
Por ejemplo 284 y 220 son números amigos ya que:
- Divisores de 220: 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284.
- Divisores de 284: 1 + 2 + 4 + 71 + 142 = 220.
He programado un script en Ruby que pide dos números y dice si son amigos o no.
def amicable_numbers(inum_a,inum_b) i = 1 x = 1 su_a = 0 su_b = 0 while (i < inum_a) if (inum_a % i == 0) su_a += i end i += 1 end while (x < inum_b) if (inum_b % x == 0) su_b += x end x += 1 end if (su_a == inum_b) && (su_b == inum_a) return true else return false end end puts " --- Amicable Numbers --- --- www.daw-labs.com --- - www.cibernodo.net - " print "1 > " num_a = gets.chomp print "2 > " num_b = gets.chomp puts "Numeros: 1 = #{num_a} 2 = #{num_b}" num_a = num_a.to_i num_b = num_b.to_i if amicable_numbers(num_a,num_b) puts "Los numeros son amigos" else puts "Los numeros no son amigos" endMás >
Números perfectos
28 ago
Mirando un poco las curiosidades con los números, me encontré con éstos, los números perfectos.
¿Qué son? Un número perfecto es un número natural cuya suma de los divisores propios positivos (+) es igual a sí mismo.
Por ejemplo, 28 es un número perfecto ya que la suma de los divisores: 1 + 2 + 4 + 7 + 14 es igual a 28.
Ahora, he decidido crear una función en Pascal que retorna Verdadero (True) o Falso (False) si un número introducido es perfecto.
function PerfectNumber(iNum:Integer):Boolean; var Suma,I:Integer; begin Suma := 0; Result := False; for I := 1 to Pred(iNum) do if (iNum Mod I = 0) then Suma := Suma + I; if iNum = Suma then Result := True; end;
Novedades sobre la nueva aplicación
19 ago
Hace algunos días informé que DaW – Labs estaba (o está) preparando una nueva aplicación, pues bueno, ahora traigo algunas noticias para que no piensen que el proyecto quedó en incógnita.
El desarrollo se encuentra atrasado, así que la fecha de lanzamiento aún no está muy clara, espero sea lo más pronto posible; de todas formas hay que hacer un trabajo de calidad así éste exija más tiempo. El nombre ya se decidió y será DaW Dastad (v. Moon), y contará con bastantes funciones/opciones interesantes. En pocas palabras será un editor bastante agradable.
Adjunto una captura de cómo está quedando por el momento.
McAfee informa que el malware alcanza niveles máximos
15 ago
McAfee ha desvelado su “Informe de Amenazas correspondiente al segundo trimestre del año”, que pone de manifiesto que el malware ha alcanzado los más altos niveles, siendo estos seis primeros meses del año 2010 los más activos en la producción total de malware. Al mismo tiempo, el nivel de spam se estabilizó con solo un 2.5% de crecimiento respecto al primer trimestre del año.
El malware continuó aumentando en el segundo trimestre del año, con 10 millones de nuevas piezas catalogadas en la primera mitad del año. De acuerdo con el último trimestre, las amenazas contra dispositivos móviles de almacenamiento pasaron a ser las más populares, seguidas por los antivirus falsos y malware específico para social media. Con aproximadamente 55.000 nuevas piezas de malware al día a nivel mundial, el malware de ejecución automática y los troyanos diseñados para el robo de contraseñas completan la lista de las principales amenazas de malware.
Después de alcanzar su punto más alto en el tercer trimestre de 2009, con cerca de 175 mil millones de mensajes spam al día, parece haberse estabilizado. Los cibercriminales aprovecharon la celebración de la Copa del Mundo de Fútbol en Sudáfrica, y utilizaron varios métodos para llevar a cabo timos y búsquedas engañosas. A nivel mundial, los Más >
Patrón de vulnerabilidades en Link Colombia
6 ago
Un patrón de vulnerabilidades (bugs) es un modelo por el cual la mayor parte de las aplicaciones webs desarrolladas por una empresa comete un descuido en su programación dejando en él una vulerabilidad, sea ésta una Inyección SQL (SQLi) o cualquier otra, lo cual deja a los sitios webs que las usen con un grave fallo de seguridad y por lo tanto si éste error llegara a ser aprovechado por una cualquier persona, le permitiría acceder completamente al sistema.
Una de las empresas colombianas dedicadas al desarrollo y creación de sistemas de gestión de contenido que sigue uno de éstos patrones es Link Colombia, ya que la gran mayoría de los sitios webs desarrollados por ellos o en los cuales se usa su sistema es vulnerable a SQLi.
¿Qué es Inyección SQL (SQLi)?La Inyección SQL (SQLi) es una vulnerabilidad enfocada a nivel web la cual radica en el error en la filtración de las variables o datos introducidos por el usuario, y que si se explota correctamente permite al atacante acceder al sistema.
SQLi en Link ColombiaComo anteriormente he dicho, los sistemas de gestión de contenido o sitios webs desarrollados por ésta empresa tienen un gran fallo, y es que muchos de ellos son vulnerables a Inyección Más >
Simulación de sentencia «switch (case)» en Python
5 ago
La sentencia «switch (case)» es una estructura de control que permite controlar el flujo del programa basado en el valor de una variable o expresión. Se usa comúnmente para evitar el uso de if’s anidados, lo que en cierta parte disminuye la legibilidad y rapidez de un programa.
Su funcionamiento es sencillo, si la variable o expresión tiene un número determinado de valores, se podría ejecutar una serie de acciones dependiendo de cada valor por separado.
Un ejemplo en C y Pascal:
int main() { int num = 1; switch (num) { case 0: printf("El número es cero\n"); break; case 1: printf("El número es uno\n"); break; case 2: printf("El número es dos\n"); break; /* case default: */ } return EXIT_SUCCESS; }
—
var Num:Integer = 2; begin case Num of {Inicio Case} 0:WriteLn('Cero'); 1:WriteLn('Uno'); 2:WriteLn('Dos'); else WriteLn('Desconocido'); end; {Fin Case} ReadLn; end.
Basándose en el valor de la variable Num (Integer) mostrará un mensaje de salida diferente. El default ( C ) y el else ( Pascal ) se ejecuta cuando el valor de la variable no coincide con ninguno de los valores anteriores. La mayoría de los lenguajes de programación cuentan con ésta sentencia, pero por desgracia Python no, en lugar de ello se usa una serie de bloques if-elif-else.
Aquí un ejemplo como los anteriormente vistos:
Num = 3 if Num == 0: print 'Cero' elif Num == 1: print 'Uno' elif Num == 2: print 'Dos' elif Num == 3: print 'Tres' else: print 'Desconocido...'
¡Bien!, una solución simple, efectiva, bastante fácil de trabajar pero no es elegante. Especialmente si se Más >

