Entradas para la categoría 'General'

Nuevo ordenador MSX

Martes 28 de Noviembre de 2006 a las 23:59

Ha salido a la venta un nuevo modelo de ordenador MSX. Ha sido creado por la empresa D4 Enterprise. Es un MSX2 con 256KB de RAM. Es de reducidas dimensiones y cuenta con entradas y salidas para los periféricos de hoy en día tales como PS2, USB, ranuras para tarjetas SD/MMC, etc. pero también para los antiguos joysticks del clásico MSX y ranuras para los viejos cartuchos.

Hay que reconocer que tiene muy buena apariencia:

Nuevo MSX.
Nuevo MSX.

Se puede encontrar más información es esta página

Y para quien sepa japonés la pagina web de la empresa. En ella se pueden ver varias fotografías del ordenador.

A este paso, por el número de post que llevo sobre el MSX, voy a tener que crear una nueva categoría solo para el MSX.

Aniversario

Domingo 5 de Noviembre de 2006 a las 23:58

Hoy 5 de Noviembre este blog cumple sus primeros cien días de existencia. Como se suele hacer en estos casos es el momento de hacer balance. Como esperaba y comente hace tiempo, el mantener este blog me esta ayudando a ser constante con el proyecto y no abandonarlo como me paso con algún proyecto anterior de dimensiones similares.

También me resulta muy gratificante compartir las experiencias, código y conocimientos con otros y pensar que probablemente a alguien le sirvan de ayuda.

Durante estos días he publicado 34 posts y he recibido 1.962 visitantes únicos que han visto 3.977 páginas.
El proyecto va avanzando lenta pero constantemente. Durante estos días el proyecto del motor de aventuras gráficas ha avanzado bastante, pero no todo lo que yo habría querido debido a la falta de tiempo. No me planteo plazos para acabarlo ya que no podrían ser realistas. La evolución del proyecto se puede ver en los sucesivos post que he publicado sobre el estado del proyecto

Nuevo sistema operativo para MSX y Amstrad

Lunes 30 de Octubre de 2006 a las 23:46

Como comenté en un post anterior hoy en día se sigue desarrollando para MSX. Y no solo juegos, sino que sorprendentemente también un sistema operativo multitarea.

Este sistema operativo se está desarrollado no solo para MSX sino también para Amstrad. El padre de la criatura es un tal Jörn Mika, el cual comenzó a desarrollarlo en el año 2000 y aunque esta muy avanzado todavía le faltan por finalizar algunos módulos.

No es simplemente un interfaz de usuario con ventanas, sino que es un sistema operativo con su propio kernel, sistema de gestión de ficheros, memoria, etc.

La página web del proyecto es la siguiente:
http://www.symbos.de/

Hay gente que además de talento tiene mucho tiempo libre :-)

Estadísticas

Domingo 29 de Octubre de 2006 a las 23:57

Para contar las visitas del sitio estoy utilizando dos sistemas: Statcounter y Google Analytics. Cada uno de los dos tiene sus ventajas y ambos son gratuitos. La ventaja de Statcounter es que se contabilizan las visitas en tiempo real, mientras que para las de Google hay que esperar un día aproximadamente para poder verlas. Las estadísticas de Google son más completas y tienen la ventaja de que se conservan todos los datos indefinidamente mientras que las de Statcounter se guardan algunos datos (los más importantes como el número de visitantes únicos, páginas visualizadas y visitantes que regresan) permanentemente pero de la mayoría solo se guardan los de las 100 últimas visitas.

Desde que estoy contando las visitas con statcounter que es desde el inicio del blog a finales de Julio he tenido 1.784 visitantes únicos y se han visualizado 3.683 páginas. Excluyendo, naturalmente, mis visitas ya que ambos sistemas permiten excluir las visitas provenientes de una determinada dirección I.P.

Los días que publico un nuevo post tengo entre 30 y 50 visitas diferentes aproximadamente y entre 50 y 100 páginas visualizadas. El resto de los días tengo entre 5 y 20 visitas únicas y entre 15 y 40 paginas vistas. Aunque hay algún día que ni llego a esas cifras o excepcionalmente las excedo.

SPAM

Miércoles 25 de Octubre de 2006 a las 23:49

Como no estoy cansado de recibir SPAM en el email ahora lo recibo también en los comentarios de los post del blog. Parece que un robot ha encontrado el blog y le ha gustado.

Espero no haber borrado ningún comentario valido por accidente al borrar los comentarios que son SPAM. Si no es así disculpad el error. Como medida inicial he configurado el wordpress para que no publique directamente ningún comentario que contenga más de un enlace y que tenga yo que autorizarlo manualmente.

Tengo intención de implantar un sistema de captcha para evitar el SPAM, espero que esta sea la solución definitiva al SPAM, aunque conlleva pequeñas molestias para los que quieran escribir un comentario. Si alguno lo usáis ya, por favor, dadme información al respecto.

Desarrollos para MSX

Lunes 23 de Octubre de 2006 a las 23:59

Hoy en día se sigue desarrollando para MSX, aquel ordenador con el que tanto disfrute. Existe incluso un concurso internacional de desarrollo para dicha plataforma.
Me parece interesante que se siga desarrollando para una plataforma tan antigua.

La empresa española nerlaska también esta desarrollando en la actualidad un par de videojuegos para MSX, que presentará en el msxdev’06.

Más información en castellano sobre el concurso: http://es.msx.org/MSXdev06.newspost3667.html

Terminé la aplicación de gestión

Sábado 21 de Octubre de 2006 a las 0:56

Por fin terminé la aplicación de gestión que he estado realizando estos últimos días. He tardado más horas de las que había previsto en un principio (esto suele ser normal en los desarrollos) y le he podido echar al día menos horas de las que esperaba. Es muy triste constatar el poco tiempo libre del que disponemos a diario.

Ahora ya me podré poner con el motor de aventuras gráficas. Ya tenía mono de programar cosas interesantes :-)

Aplicación de gestión

Domingo 8 de Octubre de 2006 a las 23:58

Últimamente tengo muy abandonado el blog, hace más de una semana que no escribo nada. Ahora mismo estoy liado con una aplicación de gestión que estoy realizando por encargo en mis ratos libres. Ya la tengo bastante avanzada y espero terminarla antes del puente de Octubre. Estoy deseando terminarla para ponerme de nuevo con el motor de aventuras gráficas.

El desarrollo de aplicaciones de gestión es tremendamente aburrido, es una tarea realmente monótona. Apenas requiere hacer uso del cerebro y supongo que se podría llegar a entrenar a chimpancés para que hicieran este tipo de aplicaciones.
Es tan sencillo y monótono que se puede automatizar el desarrollo de gran parte de las aplicaciones. He desarrollado varios generadores de aplicaciones que crean el 80% del código, incluyendo los procedimientos almacenados. La creación de un generador de aplicaciones es una labor bastante interesante.

Añadida descarga: Visor XML

Domingo 17 de Septiembre de 2006 a las 23:58

He añadido en la sección de descargas el código fuente completo del Visor XML así como el ejecutable del mismo.

Esta herramienta me ha sido de gran utilidad para la depuración del árbol sintáctico y semántico generados por los respectivos analizadores.

Hace tiempo desarrollé un addin para el Visual Studio 2003 que incorporaba una nueva ventana de inspección al IDE que permitía explorar variables que tuvieran XML (tanto en una variable de tipo string como XMLDocument) y ver su contenido con esta herramienta y realizar búsquedas en el XML.

 

Creando un visor de XML (Parte II)

Miércoles 13 de Septiembre de 2006 a las 23:59

Este artículo es la continuación de:

Creando un visor de XML (Parte I)

POBLANDO EL TREEVIEW:

El proceso es muy similar al descrito anteriormente, salvo que ahora en vez de transformar el árbol en una cadena de texto formateada, se irán incluyendo sus nodos jerárquicamente en un TreeView.

Para poblar el TreeView también nos basaremos en dos funciones, una para inicializar las variables y cargar el documento xml, y otra que será llamada de forma recursiva.

VB.NET:
  1. Private Sub MostrarArbol(ByVal consultar As Boolean)
  2.         Dim arbol As New Xml.XmlDocument
  3.         Dim nodoRaiz As TreeNode
  4.         Dim atr As Xml.XmlAttribute
  5.  
  6.         'Utilizados solo para hacer la consulta
  7.         Dim nodosSeleccionados As Xml.XmlNodeList
  8.  
  9.         Try
  10.             arbol.LoadXml(rtxtXML.Text)
  11.  
  12.             trvXML.Nodes.Clear()
  13.             nodoRaiz = New TreeNode(arbol.DocumentElement.Name)
  14.             For Each atr In arbol.DocumentElement.Attributes
  15.                 nodoRaiz.Text &= "   " & atr.Name & "=" & atr.Value
  16.             Next
  17.             trvXML.Nodes.Add(nodoRaiz)
  18.  
  19.             If consultar Then
  20.                 nodosSeleccionados = arbol.SelectNodes(txtConsulta.Text)
  21.                 If estaSeleccionado(arbol.DocumentElement, nodosSeleccionados) Then
  22.                     nodoRaiz.ForeColor = Color.Blue
  23.                     nodoRaiz.NodeFont = fuenteNegritaArbol
  24.                 End If
  25.                 AnadirNodosAArbol(nodoRaiz, arbol.DocumentElement, nodosSeleccionados)
  26.             Else
  27.                 AnadirNodosAArbol(nodoRaiz, arbol.DocumentElement)
  28.             End If
  29.  
  30.             trvXML.ExpandAll()
  31.  
  32.         Catch ex As Exception
  33.             MsgBox("Se ha producido el siguiente error:" & vbCrLf & vbCrLf & " - " & ex.Message)
  34.         End Try
  35.  
  36.     End Sub
  37.  
  38.     Private Sub AnadirNodosAArbol(ByVal arbol As TreeNode, ByVal nodo As Xml.XmlNode, Optional ByVal nodosSeleccionados As Xml.XmlNodeList = Nothing)
  39.         Dim hijo As Xml.XmlNode
  40.         Dim atr As Xml.XmlAttribute
  41.         Dim nodoArbol As TreeNode
  42.  
  43.         For Each hijo In nodo.ChildNodes
  44.             If hijo.NodeType <> Xml.XmlNodeType.Text And hijo.NodeType <> Xml.XmlNodeType.Comment Then
  45.                 nodoArbol = New TreeNode(hijo.Name)
  46.                 If Not nodosSeleccionados Is Nothing Then
  47.                     If estaSeleccionado(hijo, nodosSeleccionados) Then
  48.                         nodoArbol.ForeColor = Color.Blue
  49.                         nodoArbol.NodeFont = fuenteNegritaArbol
  50.                     End If
  51.                 End If
  52.                 arbol.Nodes.Add(nodoArbol)
  53.                 If textoDelNodo(hijo) <> "" Then
  54.                     nodoArbol.Text &= "=" & textoDelNodo(hijo)
  55.                 End If
  56.                 For Each atr In hijo.Attributes
  57.                     nodoArbol.Text &= "   " & atr.Name & "=" & atr.Value
  58.                 Next
  59.  
  60.                 anadirNodosAArbol(nodoArbol, hijo, nodosSeleccionados)
  61.             End If
  62.         Next
  63.     End Sub

COMPLETANDO LA HERRAMIENTA:

Con esto se habrá terminado el núcleo de nuestra aplicación, habiéndola dotado de la funcionalidad básica para la que se ideó, es decir, el mostrar el xml formateado para que resulte más legible, mostrarlo mediante un árbol y permitir seleccionar nodos mediante XPath visualizando aquellos que respondan a la expresión de búsqueda resaltados.

Vayamos ahora a dotarla de ciertos elementos adicionales para completar la aplicación.

En primer lugar le añadiremos la funcionalidad de permitir ajustar las líneas para que todo el texto de una línea se muestre en pantalla, ocupando las líneas que sean necesarias para mostrarse. Esto es tan sencillo como añadir un checkBox, y establecer la propiedad WordWrap de los RichTextBox al valor de la propiedad Checked del checkBox

Le añadiremos también la funcionalidad de cargar y guardar ficheros. Con este fin se crearán dos elementos de menú y se les asociarán teclas de acceso rápido, CTRL+C y CTRL+G respectivamente. El documento que guardaremos será el xml ya formateado, no el original.

Según vayamos cargando ficheros, éstos se irán incluyendo en la lista de recientes hasta un máximo de cinco. De igual forma incluimos en la lista de ficheros recientes aquéllos documentos que guardemos. El código que realiza esta inserción es el siguiente:

VB.NET:
  1. Private Sub InsertarEnRecientes(ByVal nombreFichero As String)
  2.         Dim menu As MenuItem
  3.         Dim i As Integer
  4.         Dim encontrado As Boolean
  5.  
  6.         Try
  7.             i = 0
  8.             While i <= mnuRecientes.MenuItems.Count - 1 And Not encontrado
  9.                 'Si ya estaba lo quitamos
  10.                 If mnuRecientes.MenuItems(i).Text = nombreFichero Then
  11.                     mnuRecientes.MenuItems.RemoveAt(i)
  12.                     encontrado = True
  13.                 End If
  14.                 i = i + 1
  15.             End While
  16.             menu = New MenuItem(nombreFichero, AddressOf FichReciente_Click)
  17.             mnuRecientes.MenuItems.Add(0, menu)
  18.             If mnuRecientes.MenuItems.Count = 6 Then
  19.                 mnuRecientes.MenuItems.RemoveAt(5)
  20.             End If
  21.         Catch ex As Exception
  22.             MsgBox("Se ha producido el siguiente error:" & vbCrLf & vbCrLf & " - " & ex.Message)
  23.         End Try
  24.  
  25.     End Sub

Cuando se cierre el formulario, se guardará la lista de ficheros recientes en un fichero XML, para que dicha listas persista entre ejecuciones de la aplicación.

VB.NET:
  1. Private Sub GuardarRecientes()
  2.         Dim arbol As New Xml.XmlDocument
  3.         Dim nodo As Xml.XmlNode
  4.         Dim menu As MenuItem
  5.  
  6.         Try
  7.             nodo = arbol.CreateElement("Recientes")
  8.             arbol.AppendChild(nodo)
  9.  
  10.             For Each menu In mnuRecientes.MenuItems
  11.                 nodo = arbol.CreateElement("Fichero")
  12.                 nodo.InnerText = menu.Text
  13.                 arbol.DocumentElement.AppendChild(nodo)
  14.             Next
  15.  
  16.             arbol.Save(Application.StartupPath & "\Recientes.xml")
  17.  
  18.         Catch ex As Exception
  19.             MsgBox("Se ha producido el siguiente error:" & vbCrLf & vbCrLf & " - " & ex.Message)
  20.         End Try
  21.     End Sub

 

Primera parte de este artículo:

Creando un visor de XML (Parte I)