viernes, 13 de junio de 2014

Aumentar el tamaño de los discos VDI en VirtualBox

¿Te has quedado corto en el disco duro de esa máquina virtual que usas para evaluar las aplicaciones de Windows Server y ahora no te llega para instalar la última barbaridad de Giga y pico que ha lanzado Microsoft? Si usas VirtualBox puedes aumentar el tamaño de tus discos duros en formato VDI en segundos con un sencillo comando. Por ejemplo, si queremos que el disco duro que se guarda en el archivo w2008r2.vdi pase a tener 25 GBytes, escribimos lo siguiente:

VBoxManage modifyhd w2008r2.vdi --resize 25600
 
Este comando sólo sirve para aumentar el tamaño de los discos y no para reducirlos (aunque el mensaje de error que nos da hace suponer que se implementará en una versión futura). Además, la máquina debe de estar apagada y debes que tener en cuenta que estamos modificando el tamaño del disco pero no el de la partición que usa tu máquina virtual. El espacio adicional aparecerá como espacio libre a continuación de la partición o particiones que estés usando. Si vas a crear nuevas particiones para usar ese espacio no tendrás ninguna complicación. Pero si lo que quieres es aumentar el tamaño de alguna de las ya existentes y el sistema operativo que contiene la máquina no puede extenderlas en caliente (como hace el windows 2008 que tomamos como ejemplo), tendrás luego que arrancar la máquina con algún sistema externo y realizar estas operaciones (cualquier Live de Linux te proporcionará una herramienta válida para esto como, por ejemplo, gparted)

sábado, 7 de junio de 2014

Instalación Virtualbox OpenSuse

Buenas a todos.

En esta ocación, voy a instalar Virtualbox en OpenSuse. Para esto vamos a seguir los siguientes pasos:
  1. Descargamos el paquete rpm
  2. Vamos a la carpeta donde lo descargamos y con clic derecho le decimos que lo vamos a instalar con yast
  3. Descargamos el VirtualBox Oracle VM VirtualBox Extension Pack
    desde la misma página anterior.
  4. Ya deberia funcionar, pero si te sale el error que me salio a mi (Kernel Driver Not Installed (rc=-1908)), entonces vamos a seguir los siguientes pasos. Ejecutamos el siguiente comando como root:

    # /etc/init.d/vboxdrv setup

    Si te sigue presentando algun problema, es porque debes instalar los siguiente programas:

    # zypper in make gcc gcc-c++ kernel-source kernel-syms

    Vuelve y ejecuta el primer comando:

    # /etc/init.d/vboxdrv setup

    Lanza nuevamente Virtualbox y listo.

jueves, 29 de mayo de 2014

Filtrar Datos Por Hora en Oracle

Para filtrar datos de una tabla por la hora unicamente, sin tener en cuanta la fecha, entonces podemos utilizar la siguiente sentencia:

SELECT VISCAIHOR
FROM FAVISCAI
WHERE TO_CHAR(VISCAIHOR,'HH24:MI:SS') = TO_CHAR(?,'HH24:MI:SS')

SELECT VISCAIHOR
FROM FAVISCAI
WHERE TO_CHAR(VISCAIHOR,'HH24:MI:SS') = '17:53:04'

En la primera, el signo de interrogación se cambiaria por un DateTime que llegue como parámetro.
En la segunda, la hora se pasaria como un String, pero se corre el peligro que no se castee bien, por lo cual es mejor utilizar la primera opción.

viernes, 21 de marzo de 2014

Setear error en las filas de un grid Devexpress

Para validar la información de un registro y si no pasa dicha validación setear el icono del error en la fila y columna del registro, hacemos algo como lo estamos haciendo en el siguiente ejemplo:

* La clase que estamos utilizando como fuente de datos, la heredamos de IDXDataErrorInfo

public class Person : object, IDXDataErrorInfo {
        public Person(string firstName, string lastName, string address, string phoneNumber, string email) {
            this.FirstName = firstName;
            this.LastName = lastName;
            this.Address = address;
            this.PhoneNumber = phoneNumber;
            this.Email = email;
        }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Address { get; set; }
        public string PhoneNumber { get; set; }
        public string Email { get; set; }

        #region IDXDataErrorInfo Members
        void IDXDataErrorInfo.GetPropertyError(string propertyName, ErrorInfo info) {
            switch(propertyName) {
                case "FirstName":
                case "LastName":
                    if(IsStringEmpty(propertyName == "FirstName" ? FirstName : LastName)) {
                        SetErrorInfo(info, propertyName + " field can't be empty", ErrorType.Critical);
                    }
                    break;
                case "Address":
                    if(IsStringEmpty(Address)) {
                        SetErrorInfo(info, "Address hasn't been entered", ErrorType.Information);
                    }
                    break;
                case "Email":
                    if(IsStringEmpty(Email)) {
                        SetErrorInfo(info, "Email hasn't been entered", ErrorType.Information);
                    } else if(Email != "none" && !IsEmailCorrect(Email)) {
                        SetErrorInfo(info, "Wrong email address", ErrorType.Warning);
                    }
                    break;
            }
        }
        void IDXDataErrorInfo.GetError(ErrorInfo info) {
            if(IsStringEmpty(PhoneNumber) && (Email == "none" || !IsEmailCorrect(Email)))
                SetErrorInfo(info, "Either Phone Number or Email should be specified", ErrorType.Information);
        }
        #endregion
        bool IsStringEmpty(string str) {
            return str == null || str.Trim().Length == 0;
        }
        bool IsEmailCorrect(string email) {
            return email == null || (email.IndexOf("@") >= 1 && email.Length > email.IndexOf("@") + 1);
        }
        void SetErrorInfo(ErrorInfo info, string errorText, ErrorType errorType) {
            info.ErrorText = errorText;
            info.ErrorType = errorType;
        }

jueves, 27 de febrero de 2014

StopWatch en C#

Una instancia de Stopwatch puede medir el tiempo transcurrido para un intervalo o el total de tiempo transcurrido entre varios intervalos. En un escenario de Stopwatch habitual, se llama al método Start, en otro momento se llama al método Stop y, por último, se comprueba el tiempo transcurrido mediante la propiedad Elapsed.
Una instancia de Stopwatch se está ejecutando o está detenida; utilice IsRunning para determinar el estado actual de Stopwatch. Utilice Start para empezar a medir el tiempo transcurrido; utilice Stop para detener la medida del tiempo transcurrido. Consulte el valor de tiempo transcurrido a través de las propiedades Elapsed, ElapsedMilliseconds o ElapsedTicks. Puede consultar las propiedades de tiempo transcurrido mientras la instancia se está ejecutando o mientras está detenida. Las propiedades de tiempo transcurrido aumentan continuamente mientras se ejecuta Stopwatch; permanecen constantes cuando la instancia está detenida.
De manera predeterminada, el valor de tiempo transcurrido de una instancia de Stopwatch es igual al total de todos los intervalos de tiempo medidos. Cada llamada a Start inicia la cuenta del tiempo transcurrido acumulado; cada llamada a Stop finaliza la medición del intervalo actual y bloquea el valor de tiempo transcurrido acumulado. Utilice el método Reset para borrar el tiempo transcurrido acumulado en una instancia de Stopwatch existente.
Stopwatch mide el tiempo transcurrido contando pasos del temporizador en el mecanismo de temporización subyacente. Si el hardware instalado y el sistema operativo admiten un contador de rendimiento de alta resolución, la clase Stopwatch utiliza ese contador para medir el tiempo transcurrido. De lo contrario, la clase Stopwatch utiliza el temporizador del sistema para medir el tiempo transcurrido. Utilice los campos Frequency y IsHighResolution para determinar la precisión y la resolución de la implementación de control de tiempo de Stopwatch.
La clase Stopwatch ayuda en la manipulación de contadores de rendimiento relacionados con el control de tiempo dentro del código administrado. Específicamente, el campo Frequency y el método GetTimestamp pueden utilizarse en lugar de QueryPerformanceFrequency y QueryPerformanceCounter de las API Win32 no administradas. Ejemplo sencillo:
 
Stopwatch sw = new Stopwatch();
            sw.Start();
            sw.Stop();
 
Fuente