Entre todo el mail que me llega, encontré algo interesante: el CodeGear Latin America Developer Conference, evento de tres días, que se realizará en línea. Habrán charlas de distintos expositores de latinoamérica (hay uno de Guatemala), y se mira interesante para conocer
¿Pero quién es CodeGear? CodeGear es la nueva "marca" de las herramientas de desarrollo de Borland. Muchos buenos recuerdos con los famosos Turbo (Pascal, C, C++, Prolog), que ahora son consideradas "históricas".
Información del evento está disponible aquí: http://info.borland.com.br/LATAM/EventRegistration/edm/online/javaday2008/edmes.html
TV: Hoy comienza The Office otra vez!
TV on DVD: Star Trek Captain's Log Fan Collective (vino del wishlist)
Libro: The Pillars of the Earth
Música: Borré mi iPod con 70 gigaz de música...estoy poniendo ahora sólo los "picks"
Este blog está orientado a la Ingeniería de Lenguajes de Programación y otros temas de interés en el área de ciencias de la computación y sistemas de información.
9 de abril de 2008
2 de marzo de 2008
Iron Maiden en Costa Rica
¡Qué espectáculo! El concierto de Iron Maiden en Costa Rica fue de lo mejor que he visto. Entre lo notable fue:
- El orden y entusiasmo de los fans
- El show que puso Dickinson, con disfraces y todo
- La calidad de músicos del grupo
- Canciones diferentes a lo esperado
Lo malo:
- La salida del estadio, no era posible sacar a tanta gente por unos pequeños túneles
- El sonido no fue de lo mejor
- La apertura del concierto
El "Set List" fue:
0 - Transylvania (instrumental, mientras se mostraba un video de la llegada
1 - Aces High
2 - 2 Minutes to Midnight
3 - Revelations
4 - The Trooper
5 - Wasted Years
6 - The Number of the Beast
7 - Can I Play with Madness
8 - Run to the Hills
9 - Rime of the Ancient Mariner
10 - Powerslave
11 - Heaven Can Wait
12 - Fear of the Dark
13 - Iron Maiden
Encore
14 - Moonchild
15 - The Clairvoyant
16 - Hallowed be Thy Name
25 de febrero de 2008
Take them....to the iron maiden!
¡Extra credit para el que sepa en qué película dicen la frase del título! Mañana salgo para Costa Rica al concierto de Iron Maiden, va un buen grupo de gente de toda Centroamérica, va a ser un evento muy grande. A ver si salen buenas fotos!
4 de febrero de 2008
Primer post del año - rentando videos en Internet
Un poco tarde para el 2008. En realidad he visto algunos temas interesantes que contar por acá, pero el primero que voy a tocar es sobre la renta de películas en el iTunes Music Store (iTMS).
Antes que nada, para que la iTMS funcione en estos trópicos, se puede habilitar con una tarjeta prepagada de iTunes, que algún amigo, familiar o remesador puede traerse de los Estados. El sistema permite redimir las tarjetas prepagadas haciendo caso omiso de la ubicación geográfica de nuestra computadora, lo que habilita servicios como por ejemplo la bajada automática de Album Artwork, la compra de juegos para iPods, etc.
Resulta que había comprado hace un tiempo una tarjeta de $15, principalmente para tener la cuenta habilitada, y poder tener el artwork. Entonces, cuando ví el keynote de Steve Jobs de este año, anunciando la renta de películas pensé en probarlo.
La oportunidad se dió cuando me dieron ganas de ver Star Trek II: The Wrath of Khan, que en realidad nunca la había visto, y los fans la consideran la mejor de la serie. Entonces, la fui a buscar a varios video clubs, y por lo vieja que es la película, ninguno lo tenía.
Por esto me decidí a probar la renta del iTMS. La busqué, estaba lista y me daba la opción de comprarla por $9.99 o rentarla por $2.99. Como el precio es más o menos lo que se pagaría aquí, incluyendo la gasolina, tiempo, etc. entonces le dí click al botón de Rentar.
La película era un archivo de 1.2 GB, que se tardó como 4 horas en bajar. Cuando estuvo lista me dijo que tenía 30 días para verla, pero que cuando presionara PLAY, entonces me quedarían sólamente 24 horas para verla. La dejé para el viernes.
No voy a hacer review de la película como tal, si uno es fan de Star Trek, pues es bastante buena.
La calidad del video es buena, resolución de DVD. Como era una película vieja, el film como tal era de mala calidad, oscuro y con poco detalle. El archivo traía cortes de capítulo, pero no sonido alterno (otro lenguaje), ni subtítulos/captions.
Y el servicio? Bueno, me gustó mucho poderla rentar por Internet y así ver cómo será en el futuro la distribución digital de contenidos. No me gustó la gran cantidad de protecciones exageradas que traía la película: 24 horas para verla, no funcionaba en mi iPod 5.5G, pero si en un Nano 3G, 30 días para tenerla máximo, si usaba un cable de iPod video normal no podía verla en la TV, y si quiero verla en TV, tengo que usar un Apple TV o un cable nuevo.
Poco a poco mejorarán estos métodos. ¿Qué tal sería un servicio como éste para los partidos de la liga nacional?
Libro: The Pirate's Dilemma y Sick Puppy
Música: Iron Maiden (preparación para ir al concierto)
Videogames: Wii Sports, especialmente Wii Tennis
27 de noviembre de 2007
You can't hide from the Grim Reaper. Especially when he's got a gun.
Una cita clásica de Grim Fandango, uno de los mejores juegos de Lucas Arts, y tema de este post: jugando en la Macintosh. Sólamente haré referencia a un par de juegos que he probado, y que me ha resultado buenísimo el funcionamiento:
1) Grim Fandango (por supuesto), usando GrimX, que es un "wrapper" alrededor de Residual, un motor de LUA parte del proyecto SCUMMVM para correr los juegos 3D. Según la documentación, se puede llegar hasta cierta parte del año 2 del juego, pero luego hay problemas que detienen el programa. No he llegado hasta allí.
2) Diablo II y la expansión Lord of Destruction, funcionan increiblemente bien en OS X Tiger y Leopard, luego de bajar el instalador basado en Carbon directamente desde Blizzard. Los CDs originales traen un instalador OS 9, pero como Leopard ya no trae el subsistema Classic, los ejecutables viejos ya no corren, aún en Rosetta. De todas maneras el nuevo instalador permite ponerles los últimos parches al juego, y que funcione en Battle.net. Por cierto, para evitar el tener que meter el CD cada vez que uno juega, se puede hacer un disk image del Play Disk (.DMG) con Disk Utility, se monta cada vez, y el juego lo acepta para arrancar. Nice.
Música: Led Zeppelin
DVD: Looney Tunes Golden Collection
Libro: iWoz
OS: Leopard 10.5.1
1) Grim Fandango (por supuesto), usando GrimX, que es un "wrapper" alrededor de Residual, un motor de LUA parte del proyecto SCUMMVM para correr los juegos 3D. Según la documentación, se puede llegar hasta cierta parte del año 2 del juego, pero luego hay problemas que detienen el programa. No he llegado hasta allí.
2) Diablo II y la expansión Lord of Destruction, funcionan increiblemente bien en OS X Tiger y Leopard, luego de bajar el instalador basado en Carbon directamente desde Blizzard. Los CDs originales traen un instalador OS 9, pero como Leopard ya no trae el subsistema Classic, los ejecutables viejos ya no corren, aún en Rosetta. De todas maneras el nuevo instalador permite ponerles los últimos parches al juego, y que funcione en Battle.net. Por cierto, para evitar el tener que meter el CD cada vez que uno juega, se puede hacer un disk image del Play Disk (.DMG) con Disk Utility, se monta cada vez, y el juego lo acepta para arrancar. Nice.
Música: Led Zeppelin
DVD: Looney Tunes Golden Collection
Libro: iWoz
OS: Leopard 10.5.1
31 de octubre de 2007
¿¡¿Adelantándose a los sitios de noticias?!?
Bueno, mi post sobre la Mac Mini hablaba acerca del firewall de OSX, que está apagado por default...y ahora veo en Digg, Slashdot, Macrumors, etc. que unos investigadores alemanes acaban de descubrir esto en Leopard...creo que hay que poner un site de investigaciones ahora...
29 de octubre de 2007
Habemus Pomum
En spanglish, el título de este post es "tenemos Apple". Cambié la Pentium III que había comentado en el blog antes (que estaba ya desahuciada, nadie la quería usar, hacía un ruido fuertísimo, no tenía espacio en disco, etc.) por una Mac Mini.
Al instalarla, el primer snafu fue el teclado. Por alguna razón Apple no ha tomado mucho en cuenta el mercado de América Latina, y considera que se puede utilizar el teclado en español, como se maneja en la península ibérica. Sí, es el mismo lenguaje. Pero por ejemplo, los acentos están en una posición diferente (por eso, a veces vemos gente que escribe asì con tildes al revès), aparece la cedilla y otros cambios a los que no estamos acostumbrados. Entonces, las teclas no aparecían adecuadamente y tuve que instalar un mapa de teclado que encontré en Internet para que OS X reconociera el layout latinoamericano.
Es importante notar que se considera que OS X es muy seguro, pero por ejemplo, el firewall viene desactivado por default. Hay que entrar a las preferencias de Sharing para activarla.
Le instalé también un poco de software comercial para probar, como VMware Fusion (funciona muy bien) y Notes.
En otro post hablaré sobre la impresión (not looking good al momento con mi impresora de $39.99 usada en la red), y la integración con Windows.
Música: Across the Universe (soundtrack)
Libro: iWoz
TV on DVD: Battlestar Galactica season 3.0
11 de septiembre de 2007
Concursito
Entre todo el spam que llega, de pura casualidad leí uno que venía de Intel, sobre un concurso que patrocinan, el cual consiste en enviar historias de ciencia ficción que hablan sobre computadoras o tecnología multicore o de procesamiento paralelo. En lo personal envié una entrada sobre Shalmaneser, el computador omnisciente en el libro Stand on Zanzibar de John Brunner. A ver que tal.
Al postear mi entrada, me mandaron un email que decía:
"Thank you for participating in the Reading for Multi-Core contest. Your entry will be posted live on the contest website as soon as one of theIntel judges validates your entry. Head back to www.intel.com/software/readingformulticore and be sure to cast votes for your favorite entries."
A ver si lo visitan y votan por mi ;-)
Al postear mi entrada, me mandaron un email que decía:
"Thank you for participating in the Reading for Multi-Core contest. Your entry will be posted live on the contest website as soon as one of theIntel judges validates your entry. Head back to www.intel.com/software/readingformulticore and be sure to cast votes for your favorite entries."
A ver si lo visitan y votan por mi ;-)
Two easy pieces
El título de este post es parafraseando un poco a Feynman, espero que no se revuelva en su tumba, jejeje.
Los dos temas rápidos que quería tocar son:
1) Windows XP tiene problema con el formato "lógico" de particiones o discos grandes, de más de 32GB con el sistema de archivos FAT32. Esto continúa el experimento que venía haciendo con el famoso disco de 200GB y la computadora vieja. Como le hice un clonado a la partición que tenía en NTFS, quería regresar el disco a FAT32 para facilitar el manejo como disco externo USB.
2) ¿Por qué no NTFS en un disco externo? Bueno, NTFS es un journaling file system, y generalmente debe hacerse un flush del cache de disco para que las actualizaciones se graben, no permitiendo la extracción rápida. Además, la seguridad de NTFS hace que archivos grabados con un user en una computadora no sean legibles en otra computadora, a menos que se les otorgue permisos de Full Control a Everyone. Es decir, perder todas las mejoras de NTFS...
Entonces, a conseguir un Windows 98 boot disk para formatear el disco.
TV on DVD: Battlestar Galactica season 2.0
Música: Podcasts de Security Now
Libro: Rainbow's End (por cierto, lo compré en marzo, lo comencé a leer hace poco, y me acabo de dar cuenta que se ganó el Hugo 2007)
Los dos temas rápidos que quería tocar son:
1) Windows XP tiene problema con el formato "lógico" de particiones o discos grandes, de más de 32GB con el sistema de archivos FAT32. Esto continúa el experimento que venía haciendo con el famoso disco de 200GB y la computadora vieja. Como le hice un clonado a la partición que tenía en NTFS, quería regresar el disco a FAT32 para facilitar el manejo como disco externo USB.
2) ¿Por qué no NTFS en un disco externo? Bueno, NTFS es un journaling file system, y generalmente debe hacerse un flush del cache de disco para que las actualizaciones se graben, no permitiendo la extracción rápida. Además, la seguridad de NTFS hace que archivos grabados con un user en una computadora no sean legibles en otra computadora, a menos que se les otorgue permisos de Full Control a Everyone. Es decir, perder todas las mejoras de NTFS...
Entonces, a conseguir un Windows 98 boot disk para formatear el disco.
TV on DVD: Battlestar Galactica season 2.0
Música: Podcasts de Security Now
Libro: Rainbow's End (por cierto, lo compré en marzo, lo comencé a leer hace poco, y me acabo de dar cuenta que se ganó el Hugo 2007)
31 de agosto de 2007
Ingreso a Technorati
Este post es un experimento, para ver de qué se trata la cosa. Me acabo de suscribir a Technorati después de leer un artículo sobre cómo buscar sin Google. Uno de los primeros motores de búsqueda que mencionaba era Technorati, especializado en blogs. Vamos a ver qué resulta de meterse a éste metaíndice.
Abajo el código para que Technorati acepte mi blog:
Technorati Profile
Abajo el código para que Technorati acepte mi blog:
Technorati Profile
17 de julio de 2007
Computadora en busca de la Fuente de la Juventud
Resulta que tengo una computadora vieja, Pentium III 800EB Mhz, con 512 MB de RAM y un disco de 30GB de la famosísima marca Partner. Ya tiene unos 8 años esa computadora, pero bueno, allí sigue trabajando, y durante su vida le he hecho algunas mejoras: monitor flat de 17" (se quemó el CRT original...hablando de eso, estaba escuchando en un podcast que Google está experimentando poner su página en color negro para ahorrar energía de los CRT en este website...vale la pena probar!?!), tarjeta Nvidia de 64MB, lector de DVD 16X (no alcanza el performance para escribir DVD), tarjeta con puertos USB 2.0, tarjeta TV Tuner & Capture (que no sirve para capturar, sólo para ver tele, pero igual, es por performance).
El último upgrade que le estoy haciendo es un disco IDE de 200 GB. Para variar, cada cosa nueva es Plug & Pray: al conectarle el disco no fue reconocido, el BIOS se quedaba colgado y ni siquiera intentaba bootear.
Investigando qué pasaba, resulta que los BIOS de cierta edad (pre-2000) no reconocen discos de más de 128/137GB debido a que usan Large Block Addressing de 28 bits, mientras que los BIOS más recientes usan 48 bits, lo que les permite soportar, dentro de los límites de los filesystems de 32bits hasta 2.2TB. Más información sobre esto aquí.
Lo interesante es que Windows y Linux incluyen dentro de sus versiones recientes (XP SP1 al menos) drivers de LBA 48bits que eliminan la necesidad del BIOS especializado, pero claro, es necesario que primero el sistema haya booteado de un disco que sí reconozca. Me dí cuenta de esto en una de las muchas pruebas que hice: puse el disco nuevo como secundario, y fue reconocido completamente por el OS, sin que el BIOS se diera cuenta que ese disco estaba instalado.
Traté de buscar una actualización del BIOS de la computadora, y sorprendentemente existe...pero vale $30. Pensando que ya no vale la pena seguir invirtiendo esta computadora, entonces me quedaron dos opciones:
1) Dejar el disco original de 30GB como primario, y poner el disco nuevo como secundario, o
2) Comprar un enclosure USB y usarlo como disco externo portátil.
Al final tomé la opción #2, me costó los mismos $30 que hubiera costado el update de BIOS, pero ahora lo puedo hacer transportable, y que me funcione como unidad de respaldo para mis archivos, etc.
Libros: Computer Architecture, 4ta edición.
Música: Rolling Stones iTunes Essentials
DVD: The Simpsons, 10th season
El último upgrade que le estoy haciendo es un disco IDE de 200 GB. Para variar, cada cosa nueva es Plug & Pray: al conectarle el disco no fue reconocido, el BIOS se quedaba colgado y ni siquiera intentaba bootear.
Investigando qué pasaba, resulta que los BIOS de cierta edad (pre-2000) no reconocen discos de más de 128/137GB debido a que usan Large Block Addressing de 28 bits, mientras que los BIOS más recientes usan 48 bits, lo que les permite soportar, dentro de los límites de los filesystems de 32bits hasta 2.2TB. Más información sobre esto aquí.
Lo interesante es que Windows y Linux incluyen dentro de sus versiones recientes (XP SP1 al menos) drivers de LBA 48bits que eliminan la necesidad del BIOS especializado, pero claro, es necesario que primero el sistema haya booteado de un disco que sí reconozca. Me dí cuenta de esto en una de las muchas pruebas que hice: puse el disco nuevo como secundario, y fue reconocido completamente por el OS, sin que el BIOS se diera cuenta que ese disco estaba instalado.
Traté de buscar una actualización del BIOS de la computadora, y sorprendentemente existe...pero vale $30. Pensando que ya no vale la pena seguir invirtiendo esta computadora, entonces me quedaron dos opciones:
1) Dejar el disco original de 30GB como primario, y poner el disco nuevo como secundario, o
2) Comprar un enclosure USB y usarlo como disco externo portátil.
Al final tomé la opción #2, me costó los mismos $30 que hubiera costado el update de BIOS, pero ahora lo puedo hacer transportable, y que me funcione como unidad de respaldo para mis archivos, etc.
Libros: Computer Architecture, 4ta edición.
Música: Rolling Stones iTunes Essentials
DVD: The Simpsons, 10th season
14 de mayo de 2007
I Say Tomayto, You Say Tomahto...
El fin de semana pasado cambié el firmware de mi router Linksys WRT54Gv4, pasándo de dd-wrt a Tomato.
Es un cambio que aprovecha de una manera increíble las capacidades de este pequeño router. Incluye despliegues del uso de ancho de banda en tiempo real, manejo de seguridad, Wireless Mesh Distribution (para pegar varios routers en una sola "tela" de equipos inalámbricos y facilitar el roaming de usuarios) de una manera bien amigable.
Si bien el dd-wrt incluye muchas de esas capacidades, la interface de usuario de Tomato es superior, y mucho más clara.
Por ejemplo, el Site Survey de dd-wrt sólamente muestra los SSIDs y la potencia de la señal que están emitiendo. En Tomato, es posible mostrar los canales de transmisión que están usando, la potencia y las características de encriptación que usan. Al momento de seleccionar el canal de transmisión del propio router, incluso hace la recomendación de cuál canal usar.
Aquí vale la pena anotar que por razones de cobertura de espectro RF, sólamente los canales 1, 6 y 11 son los que no interfieren entre sí. He visto redes inalámbricas que ponen APs cercanos, y usan canales 1,2 y 3 por ejemplo, y esto hace que los mismos APs se interfieran.
Otro tema interesante es el manejo de Quality of Service (QoS), ya que es posible clasificar el tráfico y reservar un ancho de banda para ciertos protocolos y dejar lo disponible para lo demás; tiene como 5 niveles de clasificación. Esto si es un cambio que se nota cuando uno está usando aplicaciones tipo P2P, que consumen mucho ancho de banda, y con el firmware anterior bloqueaban la conexión, pero ahora permiten un uso más balanceado del enlace de Internet.
El tuning del aparato ahora tomará un poco más de tiempo, pero los resultados justifican esta inversión de tiempo.
TV on DVD: 24 season 1
Música: Dark Side of the Moon
Libro: Misquoting Jesus
Gaming: M3 DS Simply (Google it)
Es un cambio que aprovecha de una manera increíble las capacidades de este pequeño router. Incluye despliegues del uso de ancho de banda en tiempo real, manejo de seguridad, Wireless Mesh Distribution (para pegar varios routers en una sola "tela" de equipos inalámbricos y facilitar el roaming de usuarios) de una manera bien amigable.
Si bien el dd-wrt incluye muchas de esas capacidades, la interface de usuario de Tomato es superior, y mucho más clara.
Por ejemplo, el Site Survey de dd-wrt sólamente muestra los SSIDs y la potencia de la señal que están emitiendo. En Tomato, es posible mostrar los canales de transmisión que están usando, la potencia y las características de encriptación que usan. Al momento de seleccionar el canal de transmisión del propio router, incluso hace la recomendación de cuál canal usar.
Aquí vale la pena anotar que por razones de cobertura de espectro RF, sólamente los canales 1, 6 y 11 son los que no interfieren entre sí. He visto redes inalámbricas que ponen APs cercanos, y usan canales 1,2 y 3 por ejemplo, y esto hace que los mismos APs se interfieran.
Otro tema interesante es el manejo de Quality of Service (QoS), ya que es posible clasificar el tráfico y reservar un ancho de banda para ciertos protocolos y dejar lo disponible para lo demás; tiene como 5 niveles de clasificación. Esto si es un cambio que se nota cuando uno está usando aplicaciones tipo P2P, que consumen mucho ancho de banda, y con el firmware anterior bloqueaban la conexión, pero ahora permiten un uso más balanceado del enlace de Internet.
El tuning del aparato ahora tomará un poco más de tiempo, pero los resultados justifican esta inversión de tiempo.
TV on DVD: 24 season 1
Música: Dark Side of the Moon
Libro: Misquoting Jesus
Gaming: M3 DS Simply (Google it)
28 de marzo de 2007
Snakes on my program
Volviendo un poco al blog, después de muchos meses de ausencia, estoy de vuelta para comentar acerca de mi encuentro cercano con Python. Este es un scripting language desarrollado en 1991 por Guido Van Rossum, pero que ustedes pueden leer más sobre sus características en la Wikipedia, así como en su sitio oficial.
Bueno, ¿por qué Python? En realidad, tuve que modificar un programa de código abierto que encontré en Internet, y cambiarle su funcionalidad en una gran parte. Mis primeras impresiones sobre este lenguaje no fueron muy positivas: la necesidad de pretty print, la falta de separadores de sentencia, etc. Más adelante, cuando ya estuve trabajando con el binding a la librería GTK+ entonces me comenzó a gustar: rápido prototyping de interfaces gráficas, excelente manejo de objetos, y facilidad de hacer system programming. Voy a seguir profundizando con este lenguaje a ver que tal. Por cierto, el programita llego a estar a las specs que quería en aproximadamente 5-6 horas de jugar con él.
Ya el programa está suficientemente alejado del código original, que lo voy a enviar al autor original para que saquemos una derivación de su programa. Allí lo verán en Sourceforge al rato (espero!).
Música: Your body is a Wonderland, John Mayer (por cierto, llegué a esta canción por medio del karaoke que salió en el episodio de navidad de The Office, incluso le dieron un Dundie a John Mayer por el uso de esta canción en la serie).
Televisión: Heroes, The Office, Ugly Betty (está buena, de veras!)
DVD: Simbad and the Eye of the Tiger
Bueno, ¿por qué Python? En realidad, tuve que modificar un programa de código abierto que encontré en Internet, y cambiarle su funcionalidad en una gran parte. Mis primeras impresiones sobre este lenguaje no fueron muy positivas: la necesidad de pretty print, la falta de separadores de sentencia, etc. Más adelante, cuando ya estuve trabajando con el binding a la librería GTK+ entonces me comenzó a gustar: rápido prototyping de interfaces gráficas, excelente manejo de objetos, y facilidad de hacer system programming. Voy a seguir profundizando con este lenguaje a ver que tal. Por cierto, el programita llego a estar a las specs que quería en aproximadamente 5-6 horas de jugar con él.
Ya el programa está suficientemente alejado del código original, que lo voy a enviar al autor original para que saquemos una derivación de su programa. Allí lo verán en Sourceforge al rato (espero!).
Música: Your body is a Wonderland, John Mayer (por cierto, llegué a esta canción por medio del karaoke que salió en el episodio de navidad de The Office, incluso le dieron un Dundie a John Mayer por el uso de esta canción en la serie).
Televisión: Heroes, The Office, Ugly Betty (está buena, de veras!)
DVD: Simbad and the Eye of the Tiger
27 de marzo de 2007
Haciendo que Flash funcione bien en Windows Vista
Luego de instalar Windows Vista Enterprise, me encontré que los sitios que hacen uso de Flash, como Youtube, Disney, etc. siempre mostraban un error, indicando que tenía que actualizar la versión del Flash Player.
Traté de actualizarlo, y el sitio de Adobe siempre me mostró que ya estaba instalado correctamente, y que no había ningún problema, pero de todas maneras siempre me impedía ver páginas con animaciones de este tipo.
Me puse a buscar en Google, y encontré una solución en un foro:
Si al entrar a sitios que usan Flash y te da el error "You need Javascript or a newer version of Flash", entonces se resuelve corriendo el siguiente "incantation":
C:\Windows\System32\Macromed\Flash\FlashUtil9b.exe
Algo interesante es que el error únicamente se da en IE7, no en Firefox.
Traté de actualizarlo, y el sitio de Adobe siempre me mostró que ya estaba instalado correctamente, y que no había ningún problema, pero de todas maneras siempre me impedía ver páginas con animaciones de este tipo.
Me puse a buscar en Google, y encontré una solución en un foro:
Si al entrar a sitios que usan Flash y te da el error "You need Javascript or a newer version of Flash", entonces se resuelve corriendo el siguiente "incantation":
C:\Windows\System32\Macromed\Flash\FlashUtil9b.exe
Algo interesante es que el error únicamente se da en IE7, no en Firefox.
28 de agosto de 2006
Dos libros importantes en formato electrónico
De la lista de correo de los CISSP, me llega la información que el excelente libro Security Engineering está disponible por parte del autor en formato electrónico aquí.
En esa página muestran también el link a un libro interesante (también en formato electrónico) de Teoría de la Información y Codificación, disponible aquí.
DVD: Pink Floyd Pulse
Libro: 10 años con Mafalda
En esa página muestran también el link a un libro interesante (también en formato electrónico) de Teoría de la Información y Codificación, disponible aquí.
DVD: Pink Floyd Pulse
Libro: 10 años con Mafalda
13 de julio de 2006
Textos clásicos de Computer Science
Llevo muchísimo tiempo sin postear, por la cantidad de actividades que he estado haciendo últimamente. Terminó el semestre de Compiladores, y ahora es tiempo de entrarle a Sistemas Operativos. Estoy contento del cambio.
Una joya que encontré, no sé si en digg o reddit, es la siguiente: Classic Texts in Computer Science, una página que recoge links a documentos famosos o clásicos sobre CS, que han impuesto nuevas tendencias o forman parte de los cimientos de nuestra querida área de estudio.
En otras cosas, estoy probando discos encriptados, usando TrueCrypt, que provee de particiones o discos encriptados para Windows y Linux. Una de las ventajas que me gustan sobre otras soluciones (aparte que es gratis y de Código Abierto), es que no está atado a un hardware en específico y que los discos encriptados son transportables. Hay que hacer más pruebas, pero en lo poco que he visto está buenísimo. Me falta trabajar en los temas de usabilidad del software para la facilidad del usuario.
Video: Star Trek: The Original Series Season 1
Una joya que encontré, no sé si en digg o reddit, es la siguiente: Classic Texts in Computer Science, una página que recoge links a documentos famosos o clásicos sobre CS, que han impuesto nuevas tendencias o forman parte de los cimientos de nuestra querida área de estudio.
En otras cosas, estoy probando discos encriptados, usando TrueCrypt, que provee de particiones o discos encriptados para Windows y Linux. Una de las ventajas que me gustan sobre otras soluciones (aparte que es gratis y de Código Abierto), es que no está atado a un hardware en específico y que los discos encriptados son transportables. Hay que hacer más pruebas, pero en lo poco que he visto está buenísimo. Me falta trabajar en los temas de usabilidad del software para la facilidad del usuario.
Video: Star Trek: The Original Series Season 1
17 de junio de 2006
Ejercicios para conocer un lenguaje de programación
En digg salió hace poco un artículo titulado "15 exercises to learn a new programming language", que está interesante pero me ha parecido que le falta algo de estructura, y que son ejercicios con una dificultad moderada, que permiten mas o menos agarrarle la onda a un nuevo lenguaje. Al respecto de esto, una persona en una lista de correo sugirió ver esta página en vez de la anterior.
En verdad que la segunda opción me ha parecido buenísima, ya que tiene el toque de lo que se espera de un programador que trabaja actualmente en la industria global de desarrollo, como lo menciona el autor. Sería interesante tomar el reto, y hacer los ejercicios que propone.
Me llamó la atención también que los primeros ejercicios menciona que son más fáciles en Lisp, Ruby o Perl que en C/C++, pero que los siguientes se implementan mejor en C/C++. La tercera parte de ejercicios son de OOP.
En verdad que la segunda opción me ha parecido buenísima, ya que tiene el toque de lo que se espera de un programador que trabaja actualmente en la industria global de desarrollo, como lo menciona el autor. Sería interesante tomar el reto, y hacer los ejercicios que propone.
Me llamó la atención también que los primeros ejercicios menciona que son más fáciles en Lisp, Ruby o Perl que en C/C++, pero que los siguientes se implementan mejor en C/C++. La tercera parte de ejercicios son de OOP.
5 de junio de 2006
Es Minix!
Bueno, ya es oficial que el próximo semestre estaré cambiando los compiladores por los sistemas operativos. Estuve investigando acerca de qué proyecto sería lo mejor y que tuviera un buen nivel de reto, y me recordé del viejo Minix...alguien tiene por allí prestado mi libro de la primera edición de Tanembaum, y no me lo ha devuelto en al menos unos 10 años, creo que ya sé quién lo tiene...
En fin, ahora ya existe la versión 3 de Minix, etc. y se ha vuelto a renovar el debate entre Linus y Tanembaum que viene desde hace varios años, y recientemente ha salido la 3ra. edición del libro de Operating Systems: Design and Implementation.
Encontré varios papers sobre el uso de Minix en la educación, y me ha parecido una buena opción. En realidad, también estoy de acuerdo que estar revisando 176 MB de líneas de código (Linux) como que no nos daría tiempo en el semestre, así que mejor nos vamos a 4.5 MB (Minix).
Entonces, con la ayuda de los amigos de ICOMS he creado un sitio dedicado a Minix, pero con contenido en español. El URL es: http://www.es-minix.org y ya tenemos los foros instalados.
En el transcurso de estas vacaciones de UNITEC estaré actualizando el sitio y dejándolo listo para el curso.
Video: Firefly y Star Trek: The Next Generation Season 1
Música: Red Hot Chili Peppers - Stadium Arcadium
Libros: The world is flat
Juegos: Nintendo DS Brain Age y PSP Burnout Legends
En fin, ahora ya existe la versión 3 de Minix, etc. y se ha vuelto a renovar el debate entre Linus y Tanembaum que viene desde hace varios años, y recientemente ha salido la 3ra. edición del libro de Operating Systems: Design and Implementation.
Encontré varios papers sobre el uso de Minix en la educación, y me ha parecido una buena opción. En realidad, también estoy de acuerdo que estar revisando 176 MB de líneas de código (Linux) como que no nos daría tiempo en el semestre, así que mejor nos vamos a 4.5 MB (Minix).
Entonces, con la ayuda de los amigos de ICOMS he creado un sitio dedicado a Minix, pero con contenido en español. El URL es: http://www.es-minix.org y ya tenemos los foros instalados.
En el transcurso de estas vacaciones de UNITEC estaré actualizando el sitio y dejándolo listo para el curso.
Video: Firefly y Star Trek: The Next Generation Season 1
Música: Red Hot Chili Peppers - Stadium Arcadium
Libros: The world is flat
Juegos: Nintendo DS Brain Age y PSP Burnout Legends
20 de abril de 2006
Arqueología de código
Hace poco me econtré en mi disco duro con un programati que había hecho para divertirme hace algunos años. Lo posteo aquí para recordar la forma "real" de programar directamente el Windows API en C++, sin usar visual tools.
La idea es que ahora acabo de instalar Visual Studio 2005 y estoy comenzando a hacer una aplicación que por medio del los web services de Amazon traiga los nombres de las canciones de un CD (no estoy seguro siquiera que Amazon provea esta info, pero bueno hay q investigar) para renombrar archivos MP3...a ver que tal...
Libro: Masters of Deception
Video: Lost Season 1
Música: Show your bones - The Yeah Yeah Yeahs
---------------------- AQUI VA EL CÓDIGO VIEJO -------------------------
------------------- FALTAN RESOURCES E ICONOS PARA QUE FUNCIONE
// basura.cpp - Programa para actuar como el basurero de Macintosh. Acepta Drag & Drop bajo
// Windows 3.1 unicamente.
// Escrito por Egdares Futch H. 14-Jun-93
// Compilador : Borland C++ 3.1
#include
#include
#include
#include
#include
const UINT CM_ABOUT = 42;
const UINT CM_RECUPERAR = 43;
const UINT CM_BORRAR = 44;
// ****************************************************************************************
// **************************** LISTAS.CPP ************************************************
// ****************************************************************************************
// list.cpp - Manejo de listas encadenadas genericas en C++
// Escrito por Egdares Futch H. para el curso de Programacion III, 1992
// Clase abstracta para descender de ella todos los nodos que se desean
// encadenar
class Node
{
protected:
Node *next;
public:
Node(void) { next = NULL; }
virtual ~Node(void) { }
virtual char *getname(void) const = 0;
Node *getnext(void) { return next; }
void setnext(Node *n) { next = n; }
};
class List
{
protected:
Node *top;
public:
List() { top = NULL; }
List(Node *node) { top = node; }
~List(void) { }
void insert(Node *node) { node->setnext(top); top = node; }
void append(Node *);
};
void List::append(Node *node)
{
Node *tmp = top;
if (top == NULL)
top = node;
else
{
while (tmp->getnext() != NULL)
tmp = tmp->getnext();
tmp->setnext(node);
}
node->setnext(NULL);
}
class IterationList : public List
{
Node *iterationpointer;
public:
IterationList() { }
IterationList(Node *node) : List(node) { }
void InitIteration(void) { iterationpointer = NULL; }
Node *iterate(void);
void iteratedelete(void);
};
// Protocolo : si llamo con itptr == NULL, implica inicializar las cosas
Node *IterationList::iterate(void)
{
if (iterationpointer == NULL)
iterationpointer = top;
else
iterationpointer = iterationpointer->getnext();
return iterationpointer;
}
void IterationList::iteratedelete(void)
{
if (iterationpointer == NULL)
iterationpointer = top;
while (iterationpointer != NULL)
{
Node *next = iterationpointer->getnext();
delete iterationpointer;
iterationpointer = next;
}
top = NULL;
}
// Definicion de clases concretas, basadas en herencia para sacar de ellas la lista de
// archivos para el programa de Basura
class TrashFile : public Node
{
char *name;
public:
// Constructor default, no hace mucho
TrashFile(void) { name = NULL; }
// Constructor con un nombre de archivo
TrashFile(const char *);
virtual ~TrashFile(void);
char *getname(void) const { return name; }
};
// Implementacion del constructor
TrashFile::TrashFile(const char *n)
{
if (n != NULL)
{
name = new char[strlen(n)+1];
strcpy(name,n);
}
else
name = NULL;
}
// Implementacion del destructor
TrashFile::~TrashFile(void)
{
unlink(name);
delete [] name;
}
// *****************************************************************************************
// ********************************** FIN DE LISTAS.CPP ************************************
// *****************************************************************************************
// ********************** Definicion de clase para la aplicacion *************************
class TBasuraApp: public TApplication
{
public:
TBasuraApp(LPSTR AppName,HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) : TApplication(AppName,hInstance,hPrevInstance,lpCmdLine,nCmdShow) { };
virtual void InitMainWindow(void);
virtual void InitInstance(void);
};
// *********************** Definicion de clase para la ventana **************************
_CLASSDEF(TBasuraWindow)
class TBasuraWindow : public TWindow
{
public:
TBasuraWindow(PTWindowsObject Parent,LPSTR Title) : TWindow(Parent,Title) { };
virtual void SetupWindow(void);
virtual void GetWindowClass(WNDCLASS &WndClass);
virtual void Paint(HDC hDC,PAINTSTRUCT _FAR & PaintInfo);
virtual BOOL CanClose(void);
// Funciones virtuales de respuesta de mensajes
virtual void WMSysCommand(RTMessage Msg) = [WM_FIRST + WM_SYSCOMMAND];
virtual void WMDropFiles(RTMessage Msg) = [WM_FIRST + WM_DROPFILES];
// Componentes de datos
HDROP hDrop;
int nFiles;
HICON hVacio,hLleno;
IterationList FileList;
};
// ******************** TBasuraWindow::SetupWindow() *****************************
void TBasuraWindow::SetupWindow(void)
{
nFiles = 0;
hVacio = LoadIcon(GetApplication()->hInstance,"VACIO");
hLleno = LoadIcon(GetApplication()->hInstance,"LLENO");
}
// ******************** TBasuraWindow::GetWindowClass() **************************
void TBasuraWindow::GetWindowClass(WNDCLASS &WndClass)
{
TWindow::GetWindowClass(WndClass);
WndClass.hIcon = LoadIcon(GetApplication()->hInstance,"VACIO");
}
// ********************* TBasuraWindow::Paint() ***********************************
#pragma argsused
void TBasuraWindow::Paint(HDC hDC,PAINTSTRUCT _FAR & PaintInfo)
{
Node *it;
char buffer[50];
int ypos = 0;
FileList.InitIteration();
while ((it = FileList.iterate()) != NULL)
{
TextOut(hDC,0,ypos,it->getname(),strlen(it->getname()));
ypos += 20;
}
TextOut(hDC,0,ypos,buffer,sprintf(buffer,"Número de archivos = %d",nFiles));
}
// *********************** TBasuraWindow::CanClose() *********************************
BOOL TBasuraWindow::CanClose(void)
{
if (nFiles > 0)
{
if (MessageBox(HWindow,"El basurero tiene archivos. Desea terminar?\n (Los archivos no se borrarán)",
"Hay basura!",MB_ICONINFORMATION | MB_YESNO) == IDYES)
{
DestroyIcon(hVacio);
DestroyIcon(hLleno);
DragAcceptFiles(HWindow,FALSE);
return TRUE;
}
else
return FALSE;
}
DestroyIcon(hVacio);
DestroyIcon(hLleno);
DragAcceptFiles(HWindow,FALSE);
return TRUE;
}
// ************************* TBasuraWindow::WMSysCommand() ********************************
void TBasuraWindow::WMSysCommand(RTMessage Msg)
{
switch(Msg.WParam)
{
case CM_ABOUT:
MessageBox(HWindow,"Basura fue escrito por Egdares Futch\n usando Borland C++ 3.1",
"Acerca de Basura",MB_ICONINFORMATION | MB_OK);
break;
case CM_BORRAR:
nFiles = 0;
FileList.InitIteration();
FileList.iteratedelete();
InvalidateRect(HWindow,NULL,TRUE);
SetClassWord(HWindow,GCW_HICON,(WORD)hVacio);
FlashWindow(HWindow,FALSE);
break;
default:
DefWndProc(Msg);
}
}
// ************************* TBasuraWindow::WMDropFiles **********************************
void TBasuraWindow::WMDropFiles(RTMessage Msg)
{
char buffer[80];
hDrop = (HDROP)Msg.WParam;
int NewFiles = DragQueryFile(hDrop,-1,(LPSTR)NULL,0);
if (nFiles == 0)
{
SetClassWord(HWindow,GCW_HICON,(WORD)hLleno);
FlashWindow(HWindow,FALSE);
}
nFiles += NewFiles;
for (int i = 0 ; i < NewFiles ; i++)
{
DragQueryFile(hDrop,i,buffer,80);
FileList.append(new TrashFile(buffer));
}
DragFinish(hDrop);
if (!IsIconic(HWindow))
InvalidateRect(HWindow,NULL,TRUE);
Msg.Result = 0;
}
// **************************** TBasuraApp::InitMainWindow() *******************************
void TBasuraApp::InitMainWindow(void)
{
MainWindow = new TBasuraWindow(NULL,Name);
}
// **************************** TBasuraApp::InitInstance() ********************************
void TBasuraApp::InitInstance(void)
{
TApplication::InitInstance();
HMENU SystemMenu = GetSystemMenu(MainWindow->HWindow,FALSE);
AppendMenu(SystemMenu,MF_SEPARATOR,0,NULL);
AppendMenu(SystemMenu,MF_STRING,CM_BORRAR,"&Eliminar basura");
AppendMenu(SystemMenu,MF_STRING,CM_RECUPERAR,"Recu&perar basura");
AppendMenu(SystemMenu,MF_STRING,CM_ABOUT,"&Acerca de Basura ...");
DragAcceptFiles(MainWindow->HWindow,TRUE);
}
// ************************* WinMain (programa principal) **********************************
#pragma argsused
int PASCAL _export WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
TBasuraApp Basura("Basura", hInstance, hPrevInstance,lpCmdLine, SW_SHOWMINNOACTIVE);
Basura.Run();
return Basura.Status;
}
La idea es que ahora acabo de instalar Visual Studio 2005 y estoy comenzando a hacer una aplicación que por medio del los web services de Amazon traiga los nombres de las canciones de un CD (no estoy seguro siquiera que Amazon provea esta info, pero bueno hay q investigar) para renombrar archivos MP3...a ver que tal...
Libro: Masters of Deception
Video: Lost Season 1
Música: Show your bones - The Yeah Yeah Yeahs
---------------------- AQUI VA EL CÓDIGO VIEJO -------------------------
------------------- FALTAN RESOURCES E ICONOS PARA QUE FUNCIONE
// basura.cpp - Programa para actuar como el basurero de Macintosh. Acepta Drag & Drop bajo
// Windows 3.1 unicamente.
// Escrito por Egdares Futch H. 14-Jun-93
// Compilador : Borland C++ 3.1
#include
#include
#include
#include
#include
const UINT CM_ABOUT = 42;
const UINT CM_RECUPERAR = 43;
const UINT CM_BORRAR = 44;
// ****************************************************************************************
// **************************** LISTAS.CPP ************************************************
// ****************************************************************************************
// list.cpp - Manejo de listas encadenadas genericas en C++
// Escrito por Egdares Futch H. para el curso de Programacion III, 1992
// Clase abstracta para descender de ella todos los nodos que se desean
// encadenar
class Node
{
protected:
Node *next;
public:
Node(void) { next = NULL; }
virtual ~Node(void) { }
virtual char *getname(void) const = 0;
Node *getnext(void) { return next; }
void setnext(Node *n) { next = n; }
};
class List
{
protected:
Node *top;
public:
List() { top = NULL; }
List(Node *node) { top = node; }
~List(void) { }
void insert(Node *node) { node->setnext(top); top = node; }
void append(Node *);
};
void List::append(Node *node)
{
Node *tmp = top;
if (top == NULL)
top = node;
else
{
while (tmp->getnext() != NULL)
tmp = tmp->getnext();
tmp->setnext(node);
}
node->setnext(NULL);
}
class IterationList : public List
{
Node *iterationpointer;
public:
IterationList() { }
IterationList(Node *node) : List(node) { }
void InitIteration(void) { iterationpointer = NULL; }
Node *iterate(void);
void iteratedelete(void);
};
// Protocolo : si llamo con itptr == NULL, implica inicializar las cosas
Node *IterationList::iterate(void)
{
if (iterationpointer == NULL)
iterationpointer = top;
else
iterationpointer = iterationpointer->getnext();
return iterationpointer;
}
void IterationList::iteratedelete(void)
{
if (iterationpointer == NULL)
iterationpointer = top;
while (iterationpointer != NULL)
{
Node *next = iterationpointer->getnext();
delete iterationpointer;
iterationpointer = next;
}
top = NULL;
}
// Definicion de clases concretas, basadas en herencia para sacar de ellas la lista de
// archivos para el programa de Basura
class TrashFile : public Node
{
char *name;
public:
// Constructor default, no hace mucho
TrashFile(void) { name = NULL; }
// Constructor con un nombre de archivo
TrashFile(const char *);
virtual ~TrashFile(void);
char *getname(void) const { return name; }
};
// Implementacion del constructor
TrashFile::TrashFile(const char *n)
{
if (n != NULL)
{
name = new char[strlen(n)+1];
strcpy(name,n);
}
else
name = NULL;
}
// Implementacion del destructor
TrashFile::~TrashFile(void)
{
unlink(name);
delete [] name;
}
// *****************************************************************************************
// ********************************** FIN DE LISTAS.CPP ************************************
// *****************************************************************************************
// ********************** Definicion de clase para la aplicacion *************************
class TBasuraApp: public TApplication
{
public:
TBasuraApp(LPSTR AppName,HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) : TApplication(AppName,hInstance,hPrevInstance,lpCmdLine,nCmdShow) { };
virtual void InitMainWindow(void);
virtual void InitInstance(void);
};
// *********************** Definicion de clase para la ventana **************************
_CLASSDEF(TBasuraWindow)
class TBasuraWindow : public TWindow
{
public:
TBasuraWindow(PTWindowsObject Parent,LPSTR Title) : TWindow(Parent,Title) { };
virtual void SetupWindow(void);
virtual void GetWindowClass(WNDCLASS &WndClass);
virtual void Paint(HDC hDC,PAINTSTRUCT _FAR & PaintInfo);
virtual BOOL CanClose(void);
// Funciones virtuales de respuesta de mensajes
virtual void WMSysCommand(RTMessage Msg) = [WM_FIRST + WM_SYSCOMMAND];
virtual void WMDropFiles(RTMessage Msg) = [WM_FIRST + WM_DROPFILES];
// Componentes de datos
HDROP hDrop;
int nFiles;
HICON hVacio,hLleno;
IterationList FileList;
};
// ******************** TBasuraWindow::SetupWindow() *****************************
void TBasuraWindow::SetupWindow(void)
{
nFiles = 0;
hVacio = LoadIcon(GetApplication()->hInstance,"VACIO");
hLleno = LoadIcon(GetApplication()->hInstance,"LLENO");
}
// ******************** TBasuraWindow::GetWindowClass() **************************
void TBasuraWindow::GetWindowClass(WNDCLASS &WndClass)
{
TWindow::GetWindowClass(WndClass);
WndClass.hIcon = LoadIcon(GetApplication()->hInstance,"VACIO");
}
// ********************* TBasuraWindow::Paint() ***********************************
#pragma argsused
void TBasuraWindow::Paint(HDC hDC,PAINTSTRUCT _FAR & PaintInfo)
{
Node *it;
char buffer[50];
int ypos = 0;
FileList.InitIteration();
while ((it = FileList.iterate()) != NULL)
{
TextOut(hDC,0,ypos,it->getname(),strlen(it->getname()));
ypos += 20;
}
TextOut(hDC,0,ypos,buffer,sprintf(buffer,"Número de archivos = %d",nFiles));
}
// *********************** TBasuraWindow::CanClose() *********************************
BOOL TBasuraWindow::CanClose(void)
{
if (nFiles > 0)
{
if (MessageBox(HWindow,"El basurero tiene archivos. Desea terminar?\n (Los archivos no se borrarán)",
"Hay basura!",MB_ICONINFORMATION | MB_YESNO) == IDYES)
{
DestroyIcon(hVacio);
DestroyIcon(hLleno);
DragAcceptFiles(HWindow,FALSE);
return TRUE;
}
else
return FALSE;
}
DestroyIcon(hVacio);
DestroyIcon(hLleno);
DragAcceptFiles(HWindow,FALSE);
return TRUE;
}
// ************************* TBasuraWindow::WMSysCommand() ********************************
void TBasuraWindow::WMSysCommand(RTMessage Msg)
{
switch(Msg.WParam)
{
case CM_ABOUT:
MessageBox(HWindow,"Basura fue escrito por Egdares Futch\n usando Borland C++ 3.1",
"Acerca de Basura",MB_ICONINFORMATION | MB_OK);
break;
case CM_BORRAR:
nFiles = 0;
FileList.InitIteration();
FileList.iteratedelete();
InvalidateRect(HWindow,NULL,TRUE);
SetClassWord(HWindow,GCW_HICON,(WORD)hVacio);
FlashWindow(HWindow,FALSE);
break;
default:
DefWndProc(Msg);
}
}
// ************************* TBasuraWindow::WMDropFiles **********************************
void TBasuraWindow::WMDropFiles(RTMessage Msg)
{
char buffer[80];
hDrop = (HDROP)Msg.WParam;
int NewFiles = DragQueryFile(hDrop,-1,(LPSTR)NULL,0);
if (nFiles == 0)
{
SetClassWord(HWindow,GCW_HICON,(WORD)hLleno);
FlashWindow(HWindow,FALSE);
}
nFiles += NewFiles;
for (int i = 0 ; i < NewFiles ; i++)
{
DragQueryFile(hDrop,i,buffer,80);
FileList.append(new TrashFile(buffer));
}
DragFinish(hDrop);
if (!IsIconic(HWindow))
InvalidateRect(HWindow,NULL,TRUE);
Msg.Result = 0;
}
// **************************** TBasuraApp::InitMainWindow() *******************************
void TBasuraApp::InitMainWindow(void)
{
MainWindow = new TBasuraWindow(NULL,Name);
}
// **************************** TBasuraApp::InitInstance() ********************************
void TBasuraApp::InitInstance(void)
{
TApplication::InitInstance();
HMENU SystemMenu = GetSystemMenu(MainWindow->HWindow,FALSE);
AppendMenu(SystemMenu,MF_SEPARATOR,0,NULL);
AppendMenu(SystemMenu,MF_STRING,CM_BORRAR,"&Eliminar basura");
AppendMenu(SystemMenu,MF_STRING,CM_RECUPERAR,"Recu&perar basura");
AppendMenu(SystemMenu,MF_STRING,CM_ABOUT,"&Acerca de Basura ...");
DragAcceptFiles(MainWindow->HWindow,TRUE);
}
// ************************* WinMain (programa principal) **********************************
#pragma argsused
int PASCAL _export WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
TBasuraApp Basura("Basura", hInstance, hPrevInstance,lpCmdLine, SW_SHOWMINNOACTIVE);
Basura.Run();
return Basura.Status;
}
2 de abril de 2006
El misterioso caso del DVD writer que sólo escribe a 1x (PARTE 1)
Este es uno de los misterios más recientes que me han tocado resolver, y precisamente fue sobre mi computadora nueva, que no tiene más que tres meses de estar en uso.
Hace poco comenzé a tener problemas al quemar archivos en DVD: probé cambiando de marca de media, de formato DVD-R, DVD+R, DVD-RW, DVD+RW, etc. Luego me dí cuenta que también los CDs de audio salían con ruidos, fallas, canciones sin sonido!
Intenté ahora quemar sin carga de procesos en el sistema, sin antivirus, sin antispyware, desconectado de la red, etc. El problema que veía es que la computadora quemaba a una velocidad bajísima. Luego de muchas consultas a Gugle, no encontraba nada, tal vez era la licencia del Nero, etc.
También sospeche que la media que estaba usando era de procedencia dudosa...
El Nero incluye una herramienta llamada Nero Infotool, que permite obtener información muy completa sobre el drive, la media (aquí verifiqué que si era original), y otras características del caso.
Como seguía con las fallas y había agotado mis opciones, lo declaré fallido. Con la excelente garantía que me dieron, de tres años, entonces lo llevé donde el representante autorizado para que revisaran la computadora.
Al final, la empresa decidió cambiar la unidad DVD-writer completa, y poner una nueva. El tiempo fue rapidísimo, no más de dos días. Por motivos de viaje tuve que ir a recogerla cinco días después.
La volví a colocar en el escritorio, reconecté los cables, potencia, monitor, etc. y me puse a hacer una prueba. Se veía que la unidad era nueva, se sintió mucho más silenciosa.
(ALAGRAN! PERDI LO QUE SEGUIA...A ESPERAR LA PARTE 2)
Hace poco comenzé a tener problemas al quemar archivos en DVD: probé cambiando de marca de media, de formato DVD-R, DVD+R, DVD-RW, DVD+RW, etc. Luego me dí cuenta que también los CDs de audio salían con ruidos, fallas, canciones sin sonido!
Intenté ahora quemar sin carga de procesos en el sistema, sin antivirus, sin antispyware, desconectado de la red, etc. El problema que veía es que la computadora quemaba a una velocidad bajísima. Luego de muchas consultas a Gugle, no encontraba nada, tal vez era la licencia del Nero, etc.
También sospeche que la media que estaba usando era de procedencia dudosa...
El Nero incluye una herramienta llamada Nero Infotool, que permite obtener información muy completa sobre el drive, la media (aquí verifiqué que si era original), y otras características del caso.
Como seguía con las fallas y había agotado mis opciones, lo declaré fallido. Con la excelente garantía que me dieron, de tres años, entonces lo llevé donde el representante autorizado para que revisaran la computadora.
Al final, la empresa decidió cambiar la unidad DVD-writer completa, y poner una nueva. El tiempo fue rapidísimo, no más de dos días. Por motivos de viaje tuve que ir a recogerla cinco días después.
La volví a colocar en el escritorio, reconecté los cables, potencia, monitor, etc. y me puse a hacer una prueba. Se veía que la unidad era nueva, se sintió mucho más silenciosa.
(ALAGRAN! PERDI LO QUE SEGUIA...A ESPERAR LA PARTE 2)
Suscribirse a:
Entradas (Atom)