sábado, 27 de diciembre de 2008

Abrir carpetas en una sola ventana


Por eliminar un virus, jugar con el regedit, y jugar con:
Herramientas → Opciones de Carpeta → Tipos de Archivos ;
Fregué el modo de abrir carpetas en Windows; a pesar de tener la configuración correcta: "Abrir las carpetas en la misma ventana" en "Examinar carpetas";
Igual, cada vez que abría una carpeta contenida en otra, las habría en distintas ventanas, y se me acumulaban ventanas abiertas innecesarias. (Ver imagen)

Configuración normal:


Entonces, en vista de que de la forma anterior no me funcionaba, recurrí a hacer los siguientes pasos para solucionarlo:

1. Abrir el editor de registros (regedit.exe)

* Se puede acceder desde: Inicio→Ejecutar... ; y escribiendo "regedit"

2. Al acceder al registro, expandir las carpetas así:
HKEY_CLASSES_ROOT → Directory → shell


3. En el bloque derecho, dale doble clic al elemento "(Predeterminado)", y escribe el valor "none" (sin comillas).
Quedando como en la 3º imagen.

voilà.

fuente: noticias3d.

domingo, 21 de diciembre de 2008

Validación de Windows (Windows Genuine Advantage)


De la noche a la mañana me apareció el mensaje:


Podría ser víctima de una falsificación de software.
Esta copia de Windows no ha superado el proceso de validación de Windows original.

Un mensaje de WGA (Windows Genuine Advantage) el cual -valga la redundancia- verifica que la versión del windows que utilizas, sea original.

Y ese mensaje me sorprendió muchísimo, pues yo pagué $2 por el CD que me vendieron de windows XP (nótese el sarcasmo :)

En fin, la solución no fue tan difícil de hallar (felizmente)

Primero, es necesario descargar éste archivo:

jueves, 4 de diciembre de 2008

Algoritmo de Booth en Java


El algoritmo de Booth, es un método para multiplicar en binario.

Este algoritmo es enseñado en cursos como "Introducción a la Arquitectura de computadores" o "Arquitectura y Organización de computadores".

Para entenderlo (en mis épocas no me lo enseñaron... si es que existía) acudí a google, que me dirigió a emezeta, donde lo programé mientras recién lo aprendía.

Para la implementación, creé 3 clases:
  1. OperacionesBinarias
  2. AlgoritmoBooth
  3. IU_Principal

viernes, 31 de octubre de 2008

Humor Nerd / Geek I


Algo de humor en el blog, para mantenerlo con contenido, y no desestresar las mentes sobre-cargadas de tanto estudio:
  1. En una fiesta de funciones están bailando seno de x con coseno de x.
    Seno de x se da cuenta de que e^x está sentado solo a un costado de la pista. Entonces se le acerca a y le dice: "¡Ven a bailar, INTÉGRATE!".
    - No, para qué?. ¡Da igual!
  2. P: ¿Qué es un oso polar?
    R: Un oso rectangular, después de un cambio de coordenadas.
  3. P: ¿Qué le dijo un vector a otro?
    R: "Oye, tienes un momento?".
  4. P: ¿Qué es un "niño complejo"?
    R: Uno con la madre real y el padre imaginario.
  5. Dios es real, hasta ser declarado entero.



Lo he recibido por correo cientos de veces, pero esta vez, lo encontré y me animé a copiarlo de aquí:
Fuente: tecnoculto.

jueves, 2 de octubre de 2008

Exportar e Importar BDx de Oracle (usando consola)


Me parece un detalle un poco tonto, dado que Oracle es una super-base de datos, estar usando la consola, cuando programas más simples abren y guardan archivos como lo más básico...
Supongo es la versión o las limitaciones del Oracle que estamos usando.

Dado que son trucos para consola, está de más decir que es necesario abrir la consola.

viernes, 26 de septiembre de 2008

Algunos tips en caso de ataques de virus


Por compartir mi red/router con alguien con una computadora infectada... el virus se metió a mi pc, y me ha tomado algo de tiempo solucionarlo... y ahora que ya está, puedo dar un par de consejos para ayudar a otros en estos casos (y de aso, guardar como bitácora para mí, para más adelante en caso vuelva a ocurrir):

Particularmente, me infectó este virus (y variantes)
kk3.batu9dyi.exeph.comyssjnngm.cmd

Comandos en consola [cmd.exe*]
Como el antivirus no me ayudaba del todo, yo tuve que quitarle las propiedades de "Sólo lectura" y archivo "del sistema" para yo ayudar al antivirus.
Estos son los 2 comandos más utilizados (por mí):

sábado, 13 de septiembre de 2008

Algunos trucos en VB6 - Asistente de de formularios de datos


Bueno, sé que es algo recontra-sencillo...
Hasta probablemente, este sea sólo un apunte mental, o un apunte web de algo que debería anotar en un papelito.
Pero justamente no lo hago, xq cuando lo necesite, se me habrá olvidado!
Hace unos meses me mandaron a hacer un proyecto final universitario en Visual Basic 6, y bueno...
Por la premura del tiempo (cuando mandan a hacer proyectos faltando 2 días para la presentación) opté por utilizar el asistente (wizzard) de formularios de datos.
Es sencillo (al crear un nuevo formulario, tienen la opción de elegir dicho asistente).

1. El asistente crea todos los objetos (botones, diálogos, etiquetas, etc) con nombres en inglés.
Para cambiarlos a español, abrí el archivo del formulario (por ejemplo, frmEmpleado.frm) con notepad (algún editor de texto, para editar el código del formulario).
y reemplacé(*) todos las palabras:
"update" por "actualizar";
"add" por "agregar";
"delete" por "eliminar";
etcétera, más que nada, para la presentación (Se supone que si el profesor pide un trabajo, no lo van a presentar con botones en otro idioma).

2. La base de datos (.mdb) depende de la ubicación del ejecutable, la cual no es constante.
Nuevamente, abriendo el formulario desde un editor de texto, una vez encontradas las líneas:

Connect = "PROVIDER=Microsoft.Jet.OLEDB.3.51;Data Source=C:/carpeta1/BDx.mdb;"
OLEDBString = "PROVIDER=Microsoft.Jet.OLEDB.3.51;Data Source=C:/carpeta1/BDx.mdb;"

Donde dice Data Source=C:/carpeta1/BDx.mdb; 
Además el valor que Data Source contiene, depende de la ruta y el nombre de la Base de Datos.
Lo único para modificar, sería borrar la ruta, quedaría simplemente Data Source=BDx.mdb;
Repito: Sólo en caso que la ruta de la base de datos vaya a cambiar.

(*):reemplazar, en notepad: ctrl + R.

Como mencioné... son trucos sencillos... pero que a más de uno puede salvar de apuros, y ahorrar varios minutos encontrarle el truco. :)

viernes, 12 de septiembre de 2008

Día del Programador


Hoy es un día curioso, especial en la agenda de algunos de nosotros.
Hoy es el día 11111111 de éste año bisiesto... o sea, el día 256!
hoy, 12 de septiembre es el día del programador :)

En años no-bisiestos normales, el día 256 es el 13 de septiembre.

Así q, en promedio, la fecha sería el 12.75 de septiembre de todos los años.
Y, aplicando la media, la fecha sería el 13 de septiembre de todos los años.

El día 256... Por qué?
256 es la cantidad de valores diferentes representables en un byte de datos.
1 byte = 8 bits.
256 se obtiene de 2 a la potencia de 8 (2^8).


El artículo fue borrado de wikipedia: http://es.wikipedia.org/wiki/Dia_del_Programador
Debido a q no se encontraban referencias al respecto (en ese entonces)
Mayor explicación, aquí: http://www.ajaxman.net/261/dia-del-programador-o-no/

Así q, bueno!! a celebrar el día del programador... programando... plop! :(

Y bueno, para felicitar a los programadores de todo el mundo:

Dominados:
Portugués:
"Feliz dia do programador!"
Inglés:
"Happy programmer's Day!"
Ascii (Inglés, base hexadecimal):
48 61 70 70 79 20 50 72 6f 67 72 61 6d 6d 65 72 73 27 20 44 61 79 21
Ascii (Español, base decimal):
70 101 108 105 122 32 100 161 97 32 100 101 108 32 112 114 111 103 114 97 109 97 100 111 114 33
sha1 (Encriptación):
3B858B9E5DBA7739EF8EC98D2808490D41EEC527
Java:
System.out.println("Hola mundo! Feliz día del programador!");
C++:
cout<<"Feliz día del programador";
printf("Feliz día del programador");
Prolog:
saludos:- write("Feliz día del programador!") , nl , !.

Desconocidos:
Lituaniano: "Laimingos programuotojo dienos!"
Turco: Programci gununuz mutlu olusn!
Catalán: "Feliç dia del programador"
Polaco: "Szczęsliwego Dnia Programisty"
Hindú: "programmer divas shub kamnaye"
Hebreo: "Yom Metachnetim sa-me-ach"
Italiano: "Buona giornata del programmatore!"
Ruso: "S Dnyom Programmista"
Esperanto: "Bonan Tagon de Programisto!"
Arabe: youm bargaga sa3ed

Muy desconocidos:
Glædelige software udvikler dag
Glædelige programmør dag
Alles gut zum Programmertag!
Kanini Paniyaalar Thina Nalvaazhthukkal!
يوم برمجة سعيد

----------------------------------------------------------------------------------
Actualización:
Luego de ver que no es una simple volada, sino una iniciativa de años...
Busqué en google, y encontré más información y bibliografía al respecto!!
Páginas pseudo-oficiales:
http://www.programmerday.info/
http://www.diadelprogramador.com.ar/
http://caminantesdelaluna.net/blog/?p=82
Otras referencias:
- Microsiervos.
- picandocodig.net.
- softliux.
vía | nato.

jueves, 14 de agosto de 2008

Algoritmos de ordenación


En la vida universitaria, fue necesario ver distintos algoritmos para ordenamiento de datos.
Pero a veces, la explicación en el aula no es suficiente... así que aquí junto unos links interesantes, donde explican claramente como funcionan dichos algoritmos:

Animación en flash: http://dvegaf.iespana.es/

1. Bubble Sort (Burbuja)
2. Selection Sort (Seleccion Directa)
3. Insertion Sort (Insercion Directa)
4. Shell Sort
5. QuickSort
6. Merge Sort

Animación en java (incluye códigos fuente): http://cg.scs.carleton.ca/~morin/misc/sortalg/
En esta página se realizan comparaciones de tiempo/eficiencia de los algoritmos, y pueden entrar para ver el applet que ejecuta los algoritmos en ese link

Aquí los códigos en java:

miércoles, 6 de agosto de 2008

Secicomp 2008


Secicomp 2008, también conocido como III Semana de Ciencia de la Computación - secicomp 2008;
Es la continuación de una serie de congresos los cuales tengo el orgullo y el agrado de haber participado como organizador en sus 2 versiones previas, de los años 2006 y 2007 (II secicomp).

Está organizado por la Escuela de Informática de la Universidad Nacional de Trujillo.
Se realizará en la ciudad de Trujillo-Perú del 13 al 17 de Octubre, con el objetivo de impulsar la Ciencia de la Computación en el Perú y mostrar lo que realmente hacemos quienes nos desenvolvemos en ésta área.

La Secicomp 2008 cuenta con tres eventos principales:
ponencias oficiales, a cargo de profesionales de reconocida trayectoría en el área;
ponencias libres, en el que podrán participar los interesados que envíen sus papers los cuales serán seleccionados por un jurado especializado;
iniciación científica, en el que los estudiantes podrán participar con proyectos del área, los cuales también pasarán por un proceso de selección por un jurado.

Para suscribir un paper puede hacer lo desde aquí y para descargar los formatos válidos para suscribir papers en la secicomp puede visitar aquí.
Para cualquier duda o consulta puede escribir a papers@secicomp2008.org

La fecha límite para el envío de papers es hasta el 15 de Agosto, las notificaciones de papers aceptados serán hasta el 15 de Septiembre y la presentación de la versión final de los papers aceptados será hasta el 25 de Septiembre.
Desde aquí puede encontrar información de las fechas importantes y de las área temáticas del evento.

Para participar como asitente puede encontrar información desde aquí.
Para cualquier duda o consulta puede escribir a inscripciones@secicomp2008.org.
La web principal del evento es http://secicomp2008.org/ desde dónde pueden obtener mayores detalles.

Recopilado de , aquí y aquí.


Aquí algunos banners, para compartir en web:
(Para obtener el código, pueden entrar a éste link)
secicomp jpg 462x60, en: http://www.secicomp2008.org/imagenes/link/secicomp_up.jpg
Secicomp2008

secicomp swf 462x60, en: http://www.secicomp2008.org/imagenes/link/secicomp_up.swf







secicomp jpg 120x120, en: http://www.secicomp2008.org/imagenes/link/secicomp.jpg
Secicomp2008
>

domingo, 3 de agosto de 2008

Códigos de LPs para publicar en Web


Colorea tus códigos para publicarlos en web.
Algo muy útil para todos los que tenemos una página web, y que, de vez en cuando, necesitamos publicar código fuente de algún programa y en algún lenguaje en particular...
Con esta herramienta gratuita podrás colorear el código según las palabras reservadas y símbolos, identificadores, etc.

Es tan sencillo como escribir (copiar/pegar) el código y elegir el lenguaje de programación, y listo!
Los lenguajes de programación y marcado soportados por esta aplicación son:

ActionScript, Ada, Apache, Asm, Asp, Bash, C, C_Mac, Caddcl, cadlisp, Cpp, C# (C Sharp), CSS, D, Delphi, Diff, Div, Eiffiel, Gml, html 4 strict, Java, JavaScript, Lisp, Lua, Matlab, Mpasm, Nsis, Objp, Oobas, Oracle 8, Pascal, Perl, Php, php-brief, Python, Qbasic, Smarty, Sql, Visual Basic, Visual Basic.NET, Vhdl, Visual Fox Pro y Xml.

La página para dicha tarea es ésta: http://www.scourdesign.com/articulos/tutoriales/colorear/

viernes, 1 de agosto de 2008

Jugando con 8 reinas


Como buenos informáticos: Quién no ha resuelto el típico problema de "8 reinas", usando algoritmos genéticos o estrategias de optimización? o bueno ya, en sus primeros ciclos, con búsqueda exhaustiva (y 8 bucles anidados), o en programación lógica y aplicando backtracking.

Las reglas son sencillas:
Tienes que colocar 8 reinas en los casilleros del tablero de ajedrez (8x8) sin que se coman unas con otras.





Entonces... en lugar de poner la solución de "8-reinas usando algoritmos genéticos" que en google se encuentran muchos; pongo el problema, a manera de relax... a ver quién se anima a resolverlo sin una PC :P

martes, 15 de julio de 2008

"Hello World!" en una máquina de Turing


Hello World as a Turing machine.
Extraído desde aquí.
Algo básico: Cómo una máquina de Turing escribiría la típica frasecita: "Hello World!"
Un ejemplo Kokito para empezar a entender lo que es Máquinas de Turing

Turing-Machine


State   Read      Write     Step    Next state
------------------------------------------------
1 empty H > 2
2 empty e > 3
3 empty l > 4
4 empty l > 5
5 empty o > 6
6 empty blank > 7
7 empty W > 8
8 empty o > 9
9 empty r > 10
10 empty l > 11
11 empty d > 12
12 empty ! > STOP

Y para alivianar un poco las cosas... el "Hello World!" en Java :)
Hello World! en Java

class HelloWorld{
public static void main( String args[] ){
System.out.println( "Hello World!" );
}
}

// Todo siempre desde aquí: "Hello World!" en 366+ Lenguajes de programación.

lunes, 14 de julio de 2008

TSP en procesamiento paralelo


TSP es el típico problema en grafos: Travel salesman problem, o el problema del agente viajero.
En un computador tradicional:
La típica solución exhaustiva, es, probar todos los nodos contra todos los nodos (ciudades).
Si se tienen N ciudades, se tienen N*(N-1)*...4*3*2 probabilidades de rutas, de las cuales, en la exhaustiva, se encuentra la respuesta óptima.
La típica solución usando algoritmos genéticos, es hacer que el fenotipo contenga una ruta, y la función fitness sea la menor distancia posible... ahí, aplicar mutación y cruzamiento, etc...

En un computador paralelo, si no me equivoco, podríamos hacer esto:
Hacer que cada nodo-procesador represente una ciudad;
A continuación, cada uno calcule la distancia al resto de ciudades [O(n) para cada procesador]
Cada uno calcule la menor distancia a otra ciudad (Como el pár más próximo, pero con una sola ciudad)
Mandar esa solución al nodo-procesador principal;
Ahí verifica las mejores puntuaciones, las repetidas las almacena; las otras, las manda a corregir.
Y así así, hasta que acabe...
Complejidad total: O(n*log(n) )

Parece sencillo, no?
Corríjanme si me equivoco :)

domingo, 13 de julio de 2008

LaTeX para Web/Blogger


Este blog está hecho para publicar algoritmos, investigaciones, y proyectos que desarrollé en la universidad, o que actualmente hago...
Pero es un poco difícil manejar el lenguaje matemático en la web...
Navegando por internet, encontré que en servalx plantean 2 soluciones (desde aquí):

Opción 1: Un editor on-line de LaTeX, aquí en rogercortesi.
La fórmula te la da en formato de imagen (pero no conviene al usar muchas fórmulas = muchas imágenes)
Opción 2: Acoplar LaTeX en el editor de Blogger (La explicación completa en inglés, está aquí)
Para esto, según voy entendiendo va así:
2.1. Necesitas tener Firefox instalado.
2.2. Necesitas tener instalado el greasemonkey (un script para editar HTML de la página cargada desde firefox)
2.3. Debes ejecutar éste script (se carga automáticamente)
2.4. Debes modificar el CSS de tu blog para que las ecuaciones no tengan bordes/marco.
Añade éste código:
img.latex_eq {
padding: 0;
margin: 0;
border: 0;
}

Justo antes de la línea ]]>
Eso es todo... Necesitas conocer LaTeX y escribir tu fórmula con $$ al inicio y también con $$ al final, y escribir sobre fondo blanco (por estética para la fórmula).
Un ejemplo: escribe ésta fórmula:

$$\pi = \int_{0}^{1} \frac{4}{1+x^{2}}$$

Y luego dale clic al botón en la barra de edición de blogger.
Y obtendrás:

Un breve y muy buen manual de LaTeX aquí.

sábado, 12 de julio de 2008

Algoritmo de un AFD genérico


Este algoritmo fue desarrollado para un curso de tercer ciclo: Teoría de la Computación.
Consiste en, hacer un algoritmo que reciba como entradas un autómata, y una palabra;
y que devuelva como resultado, si la palabra es reconocida o no por el autómata.
Es decir:

Algoritmo:
Autómata finito determinista general para reconocer palabras

Entrada:
- AFD como 5-tupla: donde:
  • es el Conjunto de Estados/Variables
  • es el Alfabeto
  • es la función de transición
  • es el estado inicial
  • es el Conjunto de estados finales
- palabra a evaluar.

Salida:
- Valor booleano que determina si la palabra evaluada pertenece al AFD.

Proceso:
1. Hacer la lectura del AFD
  • Leer : estado inicial // representado por un número
  • Leer : Conjunto de estados // representado por un arreglo de números
  • Leer : vocabulario // representado por un arreglo de caracteres
    que pertenecen a
  • Dados los tamaños de y de ,
    crear una matriz de tamaño
    para representar/almacenar las transiciones
    rellenando con en donde no hay transición
  • Leer : Conjunto de estados finales
2. Leer palabra a evaluar.

3. Analizar la palabra:
Tenemos el estado actual/temporal (el cual evalúa según momento)
Tenemos el valor booleano
Para cada caracter , mientras no termine la palabra:

si y

sino
error: palabra no reconocida


Comentarios adicionales:
1. En aquella época no sabía manejar GUIs, por eso la precariedad del programa.
Ahora se vería más bonito e interesante con un creador gráfico de estados y transiciones:


2. Me quedaba la duda de: siempre S0 será el estado inicial? (Y así, omitir el paso 1.1. del algoritmo)
3. Imágenes, cortesía de Wikipedia

lunes, 31 de marzo de 2008

Algoritmos para detección del pitch


Esta investigación fue desarrollada para el curso de Tópicos en Ciencia de la Computación III (el semestre 2007-II), con tema: Reconocimiento Automático del Habla, y dictado por el profesor Jorge Guevara

Resumen:

El análisis del pitch es un área extensa de investigación, y es un factor muy utilizado en el análisis y síntesis del habla;
Esta investigación se enfoca en los distintos métodos existentes para la detección del pitch, los cuales se categorizan en función del dominio del tiempo y de la frecuencia.
El propósito de este proyecto es el de encontrar un método de detección de la frecuencia fundamental con buenas características, de manera que presente un desenvolvimiento eficiente/óptimo. Se plantean las ventajas y desventajas de cada método analizado, y se hará una implementación para llevar a cabo la comparación de los resultados según su desempeño (considerando tiempo de procesamiento, costo computacional, y los resultados obtenidos).


El paper y el programa pueden ser descargados de aquí!
(link roto, mientras busco servidor donde colgarlos!!)

jueves, 27 de marzo de 2008

La paridad del cero (0)


Mi pregunta en concreto es: el cero es un número par?
porque, si cero dividido entre cualquier otro número es cero.
Y la propiedad de la paridad (usando la función de modularidad %) es:
Un número es par si su residuo con 2, es cero:
n % 2 == 0 ; entonces n es par.
entonces... es par, o es indeterminado? (Cómo algún profesor matemático me enseñó)
Según Java:
  1. public static void main(String[] ar)
  2. {
  3. int a=0,b=2;
  4. double r;
  5. r=Math.IEEEremainder(a,b);
  6. System.out.println(r);
  7. }

obtenemos que r = 0.0
---------------------------------------------------------------------------------

Particularmente, pretendo implementar un árbol rojo-negro (red-black tree), donde, además de ciertas características como el ser binario, y ser balanceado... utiliza colores (el rojo y el negro) para distinguir cada nivel.

entonces... Al balancear el árbol, para no complicarlo (más de lo que ya es)
mejor, al realizar los cambios, le resto (o le sumo) un 1 ...
Así, siempre que el color sea par, representará al color negro (niveles pares)
cuando el color sea impar, representa al rojo (niveles impares)

Pero (entonces) ...
el cero es un número par?

Invito a los visitantes a responder este dilema :)

martes, 8 de enero de 2008

Informática Teórica: Problema de Maximum Triangle Packing


Resumen
El presente trabajo abarca, dentro del área de investigación de Informática Teórica, el análisis y desarrollo de algoritmos, con su respectiva complejidad computacional de tiempo P o NP, y siendo aplicado a solucionar ciertos problemas de Teoría de Grafos;
Dentro de estos problemas, se le dará solución, concretamente, al algoritmo de grafos MTP:
Maximum Triangle Packing, o, su equivalente en español, Máximo Empaquetamiento de triángulos, donde el problema es, dado un grafo, si entre sus nodos forman algunos triángulos (grafos completos de 3 nodos), el algoritmo debe encontrar, bajo que orden se obtienen el mayor números de triángulos, siendo éstos, conjuntos disjuntos de nodos. Se planteará el algoritmo de solución, se presenta la implementación y estadísticas en base a algunas pruebas.

Para descargar el paper... clic aquí

Informática Teórica: Problema de Maximum Triangle Packing (Abstract)