jueves, 28 de febrero de 2013

Configuracion Conexiones Workbench


Para realizar las diferentes configuraciones para el gestor de bases de datos Workbench, realizamos los siguientes pasos dependiendo del motor de bases de datos:

SQL SERVER


  • Para crear una conexión en el Workbench, debemos crear primero una conexión ODBC, donde ingresamos todos los datos correspondientes a la base de datos.
  • Luego en la interface de configuración de las conexiones del Workbench, configuramos la conexión como vemos a continuación:


















Ya con todas estas configuraciones bien realizadas, es muy posible que no existan problemas con la conexión.

ORACLE

[Configuracion]

INFORMIX

[Configuracion]

miércoles, 27 de febrero de 2013

Ventana Popup En Control WPF

Para asignar una ventana popup a un control, se puede realizar la siguiente lógica. En nuestro ejemplo vamos a mostrar una ventana popup para un boton, osea al dar clic en el botón se mostrara  la ventana.
El código para mostrar la ventana se agrega en el evento clic del botón:


private void Boton_Click(object sender, System.Windows.Input.ExecutedRoutedEventArgs e)
        {
            try
            {
                Dictionary<string, string> paramUserControl = new Dictionary<string, string>();
                paramUserControl.Add("unParametro");

                //Instanciamos el control wpf que va a mostrar la información.
                UCExample u = new UCExample ();
                u.SetContext(paramStateTreatment);

                //Instanciamos la ventana contenedora del control
                Popup popup = new Popup()
                {
                    Child = u,
                    AllowsTransparency = true,
                    StaysOpen = true,
                    IsOpen = false,
                    PlacementTarget = ((System.Windows.Controls.Control)(e.OriginalSource)),
                    Placement = PlacementMode.Left
                };

                //Binding para setear la propiedad "Width" del contenedor con la ventana de la información
                Binding widthBinding = new Binding("Width") { Mode = BindingMode.OneWay, Source = popup };
                ((FrameworkElement)u).SetBinding(WidthProperty, widthBinding);

                 //Le damos un tiempo para mostrar la ventana
                DispatcherTimer activeTimer = new DispatcherTimer { Interval = new TimeSpan(0,0,7) };
                activeTimer.Tick += (obj, ea) => ClosePopup(popup);
                activeTimer.Start();

                popup.IsOpen = true;
                return;
            }
            catch (Exception)
            {
                throw;
            }
        }

Dentro de una ventana popup puede ir cualquier template. El código del usercontrol que va a ir dentro de la ventana popup, es el siguiente:

XAML

<UserControl x:Class="Servinte.Clinic.Controls.UCSeeTreatmentStatus"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             mc:Ignorable="d" Height="Auto" Width="Auto">
    <UserControl.Resources>
        <Style TargetType="Label" x:Key="lblControl">
            <Setter Property="HorizontalContentAlignment" Value="Left"/>
        </Style>
        <Style TargetType="TextBlock" x:Key="txtbControl">
            <Setter Property="HorizontalAlignment" Value="Left"/>
            <Setter Property="VerticalAlignment" Value="Center"/>
        </Style>
    </UserControl.Resources>
    <Border Background="White" BorderBrush="Black" BorderThickness="2">
        <Grid Margin="5">
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Label Content="Nombre " Style="{StaticResource lblControl}"/>
            <TextBlock Grid.Column="1" Name="txtbName" Style="{StaticResource txtbControl}"/>
            <Label Grid.Row="1" Content="Apellidos " Style="{StaticResource lblControl}"/>
            <TextBlock Grid.Row="1" Grid.Column="1" Name="txtbLastName" Style="{StaticResource txtbControl}"/>
            <Label Grid.Row="2" Content="Profesión " Style="{StaticResource lblControl}"/>
            <TextBlock Grid.Row="2" Grid.Column="1" Name="txtbProfession" Style="{StaticResource txtbControl}"/>
            <Label Grid.Row="3" Content="Fecha Nacimiento " Style="{StaticResource lblControl}"/>
            <TextBlock Grid.Row="3" Grid.Column="1" Name="txtbDateBorn" Style="{StaticResource txtbControl}"/>
        </Grid>
    </Border>
</UserControl>


C#

using System.Collections.Generic;
using System.Windows.Controls;

namespace MyNamespace.Controls
{
    /// <summary>
    /// Interaction logic for UCExample.xaml
    /// </summary>
    public partial class UCExample : UserControl
    {
        public UCExample()
        {
            InitializeComponent();
        }

        /// <summary>
        /// Seteamos el contexto de la ventana que informa los datos de la persona
        /// </summary>
        public void SetContext(Dictionary<string,string> param)
        {           
            //Nombre
            txtbName.Text = string.Format(": {0}", param["Name"]);
            //Apellidos
            txtbLastName.Text = string.Format(": {0}", param["LastName"]);
            //Profesion
            txtbProfession.Text = string.Format(": {0}", param["Profesion"]);
            //Fecha de nacimiento
            txtbDateBorn.Text = string.Format(": {0}",param["DateBorn"]));           
        }
    }
}



domingo, 24 de febrero de 2013

Mando de un Formula Uno




Si te gustaría conducir un auto de Fórmula Uno, primero tienes que saber cómo funciona el volante, para eso, esta práctica de los controles del nuevo MP4-28 de McLaren es ideal.

Los controles del volante del McLaren MP4-28: izquierda arriba
La cabina del auto de F1 es un lugar frugal: un asiento moldeado, un arnés de cuatro puntos y mucha fibra de carbono a la vista. Todos los controles que hacen andar a esta máquina ultra sofisticada de valor multimillonario están ubicados en el volante, y el conductor tiene que operarlo a casi 320km/h, usando unos guantes grandotes ignífugos.
1. La 'N' verde
Empecemos con algo fácil. El botón N verde grande pone la palanca de cambios en punto muerto. Probablemente, todos hayamos hecho esto en nuestro auto y está perfecto para el as de la F1 que quiere retroceder a los boxes.

2. El '+10' verde
 El botón '+10' verde lo usa el conductor cuando está viendo información del coche, puede adelantar hasta 10 páginas por vez. Debe haber mucha información…

3. El botón alargado rojo
Al costado del volante, este barril rojo giratorio con número es el interruptor diferencial. Le permite al conductor manipular las configuraciones de los diferenciales activos del auto sobre la marcha, ajustando el agarre del auto y el uso de la energía.
4. El lápiz labial rojo
No es un término técnico pero el interruptor rojo que parece un lápiz labial es en verdad el botón de la radio. El conductor lo usa para comunicarse con los expertos de la pit lane.

5. El botón 'OT' amarillo
Ahora se pone más emocionante. El botón amarillo con la 'OT' aumental as revoluciones del motor para ayudar a pasar a otros autos. Suele operarse en conjunto con el DRS y el KERS pero hablaremos de eso más adelante. OT significa 'over take',” tomar el mando” en inglés, lo que podría ser una expresión de deseo... pero nos gusta el optimismo.

6. La 'X' blanca
Parece como que podría bajar el parche del ojo y levantar la bandera negra pero en realidad el botón de la 'X' blanca solamente acepta y activa la página de información que escogió el conductor. Un poco decepcionante.

Los controles del volante del McLaren MP4-28: centro
Ahora estamos en el corazón del volante de F1.

1. Lectura en voz alta digital superior 
No es fácil de ver con el auto apagado pero en la parte superior del volante hay un tablero con pantalla digital que le informa al conductor todo tipo de cosas: tiene un indicador de velocidad, un contador de revoluciones, una pantalla de encendido, un cuentakilómetros, por lo general, con un número aterrador.

2. El cuadrante blanco
El cuadrante blanco a la izquierda controla el balance de los frenos del auto. Los frenos suelen estar a 60:40 hacia el frente pero, al conductor, sus amigos con laptop en la pit lane podrían instruirle que altere esta disposición, posiblemente para proteger las llantas.

3. El cuadrante rojo
El cuadrante rojo ajusta la cantidad de frenado de motor que tiene el auto. Esto es particularmente útil en los circuitos rápidos que el auto recorre con fuerza de agarre baja y que requieren algo de ayuda extra para la detención.

4. El cuadrante amarillo
Éste ajusta la configuración del motor del auto. El conductor puede cambiar la proporción combustible/aire sobre la marcha para influenciar sobre el rendimiento y/o la economía.


Los controles del volante del McLaren MP4-28: derecha arriba

Hay todavía más controles en el lado derecho del volante de F1.

1. El botón '+1' verde
Éste le permite al conductor hojear las páginas de información del tablero de a una a la vez.

2. El botón 'P' amarillo
Éste es el botón limitador de velocidad de la pit lane. Pínchalo y el auto baja de golpe a 80km/h para evitar un ticket por acelerar hacia dentro de los boxes.
3. El interruptor barril verde 
Este interruptor numerado controla el Sistema de Recuperación de Energía Kinética (KERS, por sus siglas en inglés). Almacena energía kinética en forma de electricidad y permite que salga toda junta en un chorro de rendimiento extra. Con este control, el conductor puede determinar cuánta energía almacena el auto.

4. El botón 'solapa' rojo
Controla el Sistema de Reducción de Arrastre. Mueve una solapa en la parte trasera para reducir el arrastre y aumentar la velocidad en el camino. Sólo recuerda volver a poner la solapa hacia atrás en la próxima esquina.

Los controles del volante McLaren MP4-28: derecha abajo
Ahora estamos en la parte derecha inferior del volante de F1 McLaren, esperamos que estés entendiendo todo.

1. El botón 'confirm' azul
Se usa cuando los boxes te están dando un regaño bienintencionado justo cuando estás esquivando una arremetida kamikaze a 250km/h en el interior de Michael Schumacher. Al presionarlo se confirma que el conductor recibió el mensaje sin que haya que hablar. Tal vez el botón podría decir 'ahora no' en lugar de 'confirmar'... o algo por el estilo.

2. El botón 'drinks' (bebidas)
Pedalear un auto de F1 es una tarea sedienta y este botón dispara un poco de ese refresco tan necesitado por la garganta del conductor. En tan sólo unos milisegundos después de presionarlo, desearás haberles pedido a los chicos del garaje que te dieran agua mineral fría y no sopa de minestrone.

3. El cuadrante de las llantas
El cuadrante grande, de aspecto impresionante en la parte inferior de esta foto es el cuadrante de las llantas. El conductor lo ajusta para decirle a la computadora qué llantas están puestas en el auto y así poder cambiar la configuración correspondiente.


Los controles del volante del McLaren MP4-28: izquierda abajo
El botón a la izquierda, minimalista en comparación, del volante del MP4-28 funciona de la siguiente manera.

1. El cuadrante púrpura
El cuadrante púrpura que está abajo a la izquierda del volante parece bastante inofensivo pero es el control multifunción y gobierna más de 50 configuraciones diferentes en todo el auto: desde el tablero que lee en voz alta hasta los parámetros del motor.
2. Distintivo Mercedes-Benz 
Les recuerda a los conductores McLaren quién construyó el motor.

Los controles del volante del McLaren MP4-28: parte posterior
¿Pensaste que ya habíamos visto todo? Piensa de nuevo, hay más en la parte posterior.

Fuera de la vista, en la parte detrás del volante, los conductores tienen palancas de cambio para cambiar la velocidad, el botón que dispara el chorro de energía del KERS y el embriague, aunque ese sólo se usa para encender el auto.



jueves, 21 de febrero de 2013

Desarrollo .NET


A continuacion voy a ir pegando enlaces de los tema sobre desarrollo en .NET:


sábado, 16 de febrero de 2013

miércoles, 13 de febrero de 2013

La memoria virtual baja usando Visual Studio

Este error no se produce cuando la memoria virtual en su máquina es baja, sino más bien cuando Visual Studio se está quedando sin espacio de direcciones. Por lo general, este error se produce en equipos que ejecutan 32-bit sistemas operativos, lo que limita Visual Studio para 2 GB de espacio de direcciones. Cuando se trabaja con procesos de 32 bits, la aplicación puede abordar sólo 4 GB de memoria (2 ^ 32 bits). Sin embargo, versiones de 32 bits de Windows reserva 2 GB de espacio en un proceso de direcciones virtuales para uso interno (por ejemplo, para trabajar con la tarjeta de la máquina gráficos u otros conductores del sistema). Por lo tanto, el proceso de 32-bit sólo puede utilizar 2 GB para sus propósitos internos. Los usuarios pueden configurar el modificador / 3GB para asegurarse de que Windows se reserva sólo 1 GB para sí mismo y da 3 GB para el proceso. En la mayoría de los casos, el rendimiento no disminuye con un límite de sólo 1 GB para Windows.

En los sistemas que ejecutan versiones de 64 bits de Windows, este error rara vez ocurre porque el proceso puede utilizar los 4 GB de espacio direccionable, y Windows pueden usar direcciones de 64 bits de memoria para trabajar con los controladores de hardware y del sistema. Sin embargo, la utilización de la memoria puede superar los 3 GB o incluso 4 GB cuando Visual Studio procesa algunos conjuntos de datos.

Este error se produce normalmente cuando Visual Studio está almacenando grandes cantidades de datos o ejecutar múltiples procesos que requieren mucha memoria.

Los siguientes escenarios implican el almacenamiento en caché grandes cantidades de datos, y por lo general puede fijar mediante el reinicio de Visual Studio.

  • Ejecutar Visual Studio por primera vez después de la instalación.
  • Instalación o desinstalación de una extensión.
  • La elección o la personalización de los elementos de la caja de herramientas .
  • Cambiar la configuración de Visual Studio.
  • Permitir que el sistema para entrar en el sueño (hibernación), mientras que el modo de Visual Studio está abierto.
Los siguientes escenarios requieren grandes cantidades de memoria activa. En estos casos, se recomienda ejecutar Visual Studio con sólo los componentes esenciales abiertos o ejecutar procesos adicionales en una segunda instancia de Visual Studio.

  • La construcción de grandes soluciones.
  • Trabajar con grandes documentos XML.
  • Actualización de soluciones desde una versión anterior de Visual Studio.
  • Retargeting soluciones.
  • Running Team Explorer durante la edición de código.
  • Ejecución de IntelliTrace en varios proyectos.

Si estas medidas no impiden el error, usted puede aumentar su espacio de direcciones disponible en un sistema que ejecuta Windows 7 o si ejecuta bcedit.exe con la siguiente sintaxis:

bcdedit / set IncreaseUserVa 3072

Este comando aumenta su modo de usuario de asignación de memoria virtual de 2 GB a 3 GB en un sistema basado en x86. Si se agrega el modificador / 3GB, todo el sistema puede asignar más memoria y dar a cada solicitud un porcentaje mayor de la memoria disponible.

Nota
Debe ejecutar bcdedit.exe con permisos administrativos. Si el cifrado BitLocker está activada, debe suspenderlo, realizar el cambio, reinicie el sistema y vuelva a habilitar BitLocker.

Incluso después de aumentar su asignación de memoria virtual de 3 GB, este error puede repetirse porque una sola aplicación aún puede utilizar sólo 2 GB de memoria virtual.Si este error sigue apareciendo, reducir el tamaño de su solución, a continuación, reinicie Visual Studio. Usted puede reducir su solución, ya sea por la refactorización para eliminar proyectos que son de uso poco frecuente o mediante la descarga de los proyectos que no son necesarios. Si el error se produce al generar la solución, intentar construirlo en un símbolo del sistema.

lunes, 11 de febrero de 2013

Buscador Para Perezosos

Esta forma de ayudar a buscar algo en google para un amigo perezoso en una forma muy original.
Los pasos son los siguientes:

  1. Crea un enlace con la siguiente estructura:  http://lmgtfy.com/?q=donde+esta+Dios
  2. Las palabras de la pregunta tiene que tener el signo + uniendolas.
  3. luego le envias todo el enlace.
  4. Automaticamente el realiza la busqueda en google y muestra los resultados.

jueves, 7 de febrero de 2013

Niveles de Aislamiento


A continuación se describen los cuatro posibles niveles de aislamiento basados en bloqueos.

1. READ UNCOMMITTED
Puede recuperar datos modificados pero no confirmados por otras transacciones ( lecturas sucias - dirty reads ). En este nivel se pueden producir todos los efectos secundarios de simultaneidad (lecturas sucias, lecturas no repetibles y lecturas fantasma - ej: entre dos lecturas de un mismo registro en una transacción A, otra transacción B puede modificar dicho registro), pero no hay bloqueos ni versiones de lectura, por lo que se minimiza la sobrecarga. Una operación de lectura (SELECT) no establecerá bloqueos compartidos (shared locks) sobre los datos que está leyendo, por lo que no será bloqueada por otra transacción que tenga establecido un bloqueo exclusivo por motivo de una operación de escritura. Este nivel de aislamiento ofrece grandes beneficios de rendimiento, pero sólo deberemos utilizarlo en aquellos casos en que la ocurrencia de lecturas sucias (dirty reads) no sea un problema.

2. READ COMMITTED 
Permite que entre dos lecturas de un mismo registro en una transacción A, otra transacción B pueda modificar dicho registro, obteniendose diferentes resultados de la misma lectura. Evita las lecturas sucias (dirty reads), pero por el contrario, permite lecturas no repetibles. Es la opción por defecto en SQL Server 2000 y SQL Server 2005 . Con este nivel de aislamiento, una operación de lectura (SELECT) establecerá bloqueos compartidos (shared locks) sobre los datos que está leyendo . Sin embargo, dichos bloqueos compartidos finalizarán junto con la propia operación de lectura, de tal modo que entre dos lecturas cabe la posibilidad de que otra transacción realice una operación de escritura (ej: UPDATE), en cuyo caso, la segunda lectura obtendrá datos distintos a la primera lectura (lecturas no repetibles).

3. REPEATABLE READ 
Evita que entre dos lecturas de un mismo registro en una transacción A, otra transacción B pueda modificar dicho registro, con el efecto de que en la segunda lectura de la transacción A se obtuviera un dato diferente. De este modo, ambas lecturas serían iguales (lecturas repetidas). Para ello, una operación de lectura (SELECT) establecerá bloqueos compartidos (shared locks) sobre los datos que está leyendo, y los mantendrá hasta el final de la transacción , garantizando así que no se produce lecturas no repetibles (non repeatable reads) . Mayor consistencia en la transacción, mediante mayores recursos y bloqueos ( se evitan los problemas de las lecturas sucias y de las lecturas no repetibles , pagando el precio de necesidad de mayores recursos). Sin embargo, este modo de aislamiento no evita las lecturas fantasma , es decir, una transacción podría ejecutar una consulta sobre un rango de filas (ej: 100 filas) y de forma simultánea otra transacción podría realizar un inserción de una o varias filas sobre el mismo rango.

4. SERIALIZABLE 
Garantiza que una transacción recuperará exactamente los mismos datos cada vez que repita una operación de lectura (es decir, la misma sentencia SELECT con la misma cláusula WHERE devolverá el mismo número de filas, luego no se podrán insertar filas nuevas en el rango cubierto por la WHERE, etc. - se evitarán las lecturas fantasma ), aunque para ello aplicará un nivel de bloqueo que puede afectar a los demás usuarios en los sistemas multiusuario (realizará un bloqueo de un rango de índice - conforme a la cláusula WHERE - y si no es posible bloqueará toda la tabla). Evita los problemas de las lecturas sucias (dirty reads), de las lecturas no repetibles (non repeatable reads), y de las lecturas fantasma (phantom reads).

Saber más: Niveles de Aislamiento y bloqueos

martes, 5 de febrero de 2013

Workflows Servinte

En servinte se pueden hacer tres diferentes tipos de flujos:

  1. Plantilla: Cuando el flujo es de tipo plantilla, este se llama desde el main y realiza una serie de actividades. Como parametro, lo unico que recibe es el Context, y por lo general no devuelve ningun tipo de variable.
  2. Botón: Se llama como si fuera un botón tipo visual studio o Devexpress. Tampoco tiene valor de retorno.
  3. Expresión: Se llama desde una variable de control o componente de una plantilla dinámica. Por lo general tiene un valor de retorno el cual se debe llamar explisitamente "Result". También puede recibir el Context. Un ejemplo claro, puede verse en la plantilla de examen dental.

Resetear secuencias en tablas de SQL Server

Para resetear una secuencia de una tabla en la base de datos de SQL Server de Microsoft, utilizamos las siguientes instrucciones:
DBCC CHECKIDENT('nombre_tabla',RESEED,0)

Para saber el consecutivo de la secuencia
DBCC CHECKIDENT('nombre_tabla')

viernes, 1 de febrero de 2013

Ejecutar sentencias en BD

Para ejecutar un escalar:

object Doses = db.ExecuteScalar(query, param);
if (Doses != null)
numberDoses = Convert.ToInt32(Doses.ToString());