Uncategorized

EXT4, el nuevo sistema de Archivos para Linux

Julio 4th, 2010  |  Publicado en Uncategorized

Como un gran regalo de navidad, el pasado 25 de diciembre  se liberó la cuarta versión del popular sistema de archivos usado por sistemas operativos linux, el fourth extended filesystem, como sucesor al ext3, el cuál fue introducido a los sistemas operativos linux en 1999.  Sabemos que durante esto diez años se le han introducido nuevas mejoras al ext3, pero creo que la tecnología ya demandaba un nuevo sistema de archivos para este sistema operativo, o por lo menos un buen rediseño.

Para los que no saben que es un sistema de archivos, les dejo esta entrada de Wikipedia sobre los Sistemas de Archivos (http://es.wikipedia.org/wiki/Sistema_de_archivos) :

Los sistemas de archivos (filesystem en inglés), estructuran la información guardada en una unidad de almacenamiento (normalmente un disco duro) de una computadora, que luego será representada ya sea textual o gráficamente utilizando un gestor de archivos. La mayoría de los sistemas operativos poseen su propio sistema de archivos.

Lo habitual es utilizar dispositivos de almacenamiento de datos que permiten el acceso a los datos como una cadena de bloques de un mismo tamaño, a veces llamados sectores, usualmente de 512 bytes de longitud. El software del sistema de archivos es responsable de la organización de estos sectores en archivos y directorios y mantiene un registro de qué sectores pertenecen a qué archivos y cuáles no han sido utilizados. En la práctica, un sistema de archivos también puede ser utilizado para acceder a datos generados dinámicamente, como los recibidos a través de una conexión de red (sin la intervención de un dispositivo de almacenamiento).

En general, el sistema de archivos es el responsable de que podamos guardar toda nuestra información en un dispositivo de almacenamiento, ya sea un disco duro, un floppy o un USB, y que esta este bien organizada dentro de estos dispositivos. El sistema de archivos es el que organiza en qué lugar debe de guardarse la información y mantiene la lista de dónde esta esa información para que podamos acceder rápidamente a ella cuando la necesitemos. Es gracias a los sistemas de archivos que podemos guardar nuestra información en “carpetas” llamadas rutas.

Si vieramos a un disco duro como si fuera la caja de rompecabezas, un sistema de archivos es el que decide de que tamaño van a ser las piezas del rompecabezas. Estas “piezas” son llamadas sectores, y es la medida en la que se divide nuestro disco duro, y todos nuestra información debe de grabarse en estas piezas, el problema es que a veces esta información es demasiado grande para que quepa dentro de una sola pieza. El sistema de archivos mantiene un “mapa” para saber que piezas de nuestra información deben de ir juntas para formar un archivo, y cuales piezas no tienen nada escrito.

Estas son las principales mejoras que se le han hecho al sistema de archivos desde la versión de ext3.

  • Compatibilidad: El sistema de archivos ext4 es totalmente compatible hacia adelante con su predecesor el ext3.  Basta con hacer algunos comandos en modo de solo lectura de tu sistema para hacer que tu sistema de archivos anterior se convierta al nuevo.  No hay necesidad de reformatear tu disco duro ni cambiar tu información, pero recuerda siempre hacer back-ups de ésta. Para tener compatibilidad hacia atrás, también se puede montar una unidad ext4 en una ext3 cómo si fuera una de estas,  pero se perderían las ventajas del nuevo sistema de archivos
  • Capacidad extendida para archivos: Anteriormente,

XNA Game Studio: Cómo guardar y cargar saves en el XBOX360

Febrero 26th, 2009  |  Publicado en Uncategorized

Hemos notado que existen muchos lugares en internet donde se muestra cómo cargar y guardar savestates para los juegos desarrollados con el XNA Game Studio. Sin embargo, los ejemplos que muestran son un poco complicados para las personas que empiezan a experimentar con la programación, por lo que decidimos explicarlo de la manera más simple posible, de hecho, esta es una version simplificada del ejemplo que puedes encontrar en XNA Creators Club.

Este tutorial asume que el usuario ya cuenta con los siguientes requisitos:

  • Cuentas con un XBOX 360 Game Project creado en el Visual Studio
  • Este proyecto guarda todas las variables del jugador en una clase llamada Jugador.cs
  • El proyecto cuenta con una clase llamada Control, la cual tiene como atributo publico el objeto Jugador que guarda todos los datos.

Una vez que cuentas con estas cosas, lo primero que vamos a hacer es hacer serializable tu clase Jugador.cs, lo cual es muy simple, lo único que debemos agregar es la siguiente etiqueta antes de la declaración de la clase:

[Serializable]
public class Jugador{

//Cuerpo de la clase, se queda exactamente como lo tenías anteriormente

}

Listo! tu clase se encuentra lista para poder ser guardada en un archivo, y poder ser cargado una y otra vez. Nota importante: Si en vez de guardar datos primitivos (int, double, String, etc..) guardas clases hechas por tí, debes poner la etiqueta [Serializable] también a estas clases, de otra manera XNA no sabrá cómo guardarlas y no servirá

Lo siguiente que haremos será agregar a tu proyecto de XBOX 360 una clase llamada Serializador.cs, que contará con dos métodos: GuardarJuego y CargarJuego.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Storage;
using System.IO;
using System.Xml.Serialization;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework;

namespace MiNamespace
{
///
/// Utilizado para guardar y cargar los datos del jugador
///
public class Serializador
{

StorageDevice device;

public void GuardaJuego() {
if(!Guide.IsVisible){
device = null;
Guide.BeginShowStorageDeviceSelector(PlayerIndex.One, GetDevice, null);
}
}

private void GetDevice(IAsyncResult result)
{
device = Guide.EndShowStorageDeviceSelector(result);
if (device.IsConnected)
{
DoSaveGame(device);
}
}

private void DoSaveGame(StorageDevice device)
{
// Cambiar MiJuego por el nombre de tu juego en particular
StorageContainer container =
device.OpenContainer("MiJuego");

// Get the path of the save game.
string filename = Path.Combine(container.Path, "SaveMiJuego.sav");

// Open the file, creating it if necessary.
FileStream stream = File.Open(filename, FileMode.Create);
// Convert the object to XML data and put it in the stream.
XmlSerializer serializer = new XmlSerializer(typeof(Jugador));
serializer.Serialize(stream, Control.jugador);

// Close the file.
stream.Close();

// Dispose the container, to commit changes.
container.Dispose();
}

public void AbreJuego()
{

if(!Guide.IsVisible){
device = null;
Guide.BeginShowStorageDeviceSelector(PlayerIndex.One, GetLoadingDevice, null);
}
}

private void GetLoadingDevice(IAsyncResult result)
{
device = Guide.EndShowStorageDeviceSelector(result);
if (device.IsConnected)
{
DoLoadGame(device);
}
}

private static void DoLoadGame(StorageDevice device)
{
// Cambiar MiJuego por el nombre de tu juego.
StorageContainer container =
device.OpenContainer("MiJuego");

// Get the path of the save game.
string filename = Path.Combine(container.Path, "SaveMiJuego.sav");

// Check to see whether the save exists.
if (!File.Exists(filename))
{
return;
}

// Open the file.
FileStream stream = File.Open(filename, FileMode.OpenOrCreate,
FileAccess.Read);

// Read the data from the file.
XmlSerializer serializer = new XmlSerializer(typeof(Jugador));
Control.jugador = (Jugador)serializer.Deserialize(stream);

// Close the file.
stream.Close();

// Dispose the container.
container.Dispose();
}

}

}

Ya tenemos nuestra clase Serializador. Ahora cada vez que necesitemos guardar el juego lo único que tenemos que hacer es mandar llamar a Serializador.GuardaJuego() o Serializador.CargaJuego().

Esperamos que les sirva de mucho este tutorial. ¡No olviden escribir su comentarios!