2016-09-27

Designing with Exceptions in .NET

El articulo esta en ingles en:
https://www.infoq.com/articles/Exceptions-API-Design

Puntos clave
  • Prefiero excepciones incorporadas, o subclases de los mismos, para los tipos comunes de errores.
  • Utilice el tipo de excepción para indicar si el error está en la propia aplicación, en la biblioteca que se llama, o un problema ambiental.
  • tipos de excepción deben ayudar a las operaciones de determinar quién necesita mirar el error en primer lugar.
  • Evitar el uso de códigos de error para distinguir entre tipos de errores ajenos que pasan a ser levantado por el mismo método.
  • Nunca coger o lanzar ApplicationException.
Las excepciones son una parte integral del trabajo con .NET, pero demasiado muchos desarrolladores no piensan acerca de ellos desde una perspectiva de diseño API. La mayor parte de su trabajo comienza y termina con saber qué excepciones que necesitan para atrapar y lo que se debe permitir a golpear el registrador mundial. Usted puede reducir significativamente el tiempo que se necesita para corregir errores si el diseño de la API para utilizar las excepciones correctamente.

El articulo esta en ingles en:
https://www.infoq.com/articles/Exceptions-API-Design

2016-09-11

How to Create Timer in WPF

ver el articulo
http://www.codescratcher.com/wpf/create-timer-wpf/



Private dpTimer As DispatcherTimer
Private horaInicioIntervalo As DateTime
Public Sub New()
 
      ' Esta llamada es exigida por el diseñador.
      InitializeComponent()
 
      ' Agregue cualquier inicialización después 
      ' de la llamada a InitializeComponent().
  
      dpTimer = New DispatcherTimer
      dpTimer.Interval = TimeSpan.FromMilliseconds(1000)
      AddHandler dpTimer.Tick, AddressOf TickMe
 
      horaInicioIntervalo = DateTime.Now      
      dpTimer.Start()
  End Sub

Private Sub TickMe(sender As Object, e As EventArgs)
 
    Dim intervalo As TimeSpan = DateTime.Now - horaInicioIntervalo
    Me.textBoxTiempoTrascurrido.Text =
           String.Format("{0,2:00}:{1,2:00}:{2,2:00}",
                         intervalo.Hours,
                         intervalo.Minutes,
                         intervalo.Seconds)
 
    ' Forcing the CommandManager to raise the RequerySuggested event
    CommandManager.InvalidateRequerySuggested()
End Sub
 

2016-08-07

ConvertIco - PNG to ICO Conversion

ConvertICO.com
Convierte de PNG a ICO, y viceversa, generando incluso las diferentes variantes para cada resolución.

MEGAEPUB.com - libros gratis

Mega ePub
Multitud de libros electrónicos para descargar de manera directa.

Proyecto BASIC ZX



Proyecto BASIC ZX
Colección de listados de programas publicados en revistas de Spectrum.

Compu Saurios


Compu Saurios
Variada colección de contenidos de retroinformática.

¿Cómo programar en C (en 2016)?


Este artículo es una traducción del artículo How to C in 2016. Todo el contenido aparece originalmente en aquel artículo, yo solo me he limitado a traducirlo.


2016-08-04

Error en debuging ContextSwitchDeadLock


Problema


leyendo de forma recursiva los ficheros del disco me ha saltado este mensaje de error
'******************
Ocurrió ContextSwitchDeadlock
Message: El Asistente para la depuración administrada 'ContextSwitchDeadlock' ha detectado un problema en 'E:\users\joaqui\documents\NET\Version2015\Pruebas\RepesIneitorPruebasBorrar\SolucionWpfBusquedaFicheros20160719\WpfBusquedaFicheros20160719\bin\Debug\WpfBusquedaFicheros20160719.vshost.exe'.
Información adicional: El CLR no ha podido realizar la transición del contexto COM 0x1144008 al contexto COM 0x11440c0 durante 60 segundos. Es probable que el subproceso que contiene el contexto o apartamento de destino esté en espera sin proporcionar mensajes o que procese una operación de ejecución muy larga que no proporcione mensajes Windows. Normalmente, esta situación tiene un impacto negativo en el rendimiento y puede hacer que la aplicación no responda o que acumule continuamente el uso de la memoria. Para evitar este problema, todos los subprocesos de contenedores uniproceso (STA) deberían utilizar primitivos de espera que proporcionen mensajes (como CoWaitForMultipleHandles) y proporcionar mensajes regularmente durante operaciones de ejecución largas.
'**************

La solución

http://sergiotardio.blogspot.com.es/2008/06/error-en-el-debuging.html

Error en el debuging ContextSwitchDeadLock
Hola
Que errorcito fregado este, no se si les salió alguna vez pero a mi me hizo perder varias horas, antes de divagar en lo que significa por que la verdad es un tema un poco espeso les comento la "solución"
Hay que apagar un checkbox que corresponde al MDA (managed debug assistant) de nombre  ContextSwitchDeadLock.
Depurar / Excepciones / Managed Debuging assistants.
Apaguen el check box correspondiente ContextSwitchDeadLock
Por default no aparece la opcion de Excepciones en el submenu Debug, si ese es su caso añadanlo haciendo lo siguiente:
Vayan a
Ver / barras de herramientas / Personalizar
Una vez ahí en el panel izquierdo seleccionen Debug y entre las opciones que aparecen a la derecha estará Excepciones, tomen la opción   y arrastren hasta el menú debug
Bien ahora una pequeña explicación de esto, resulta que los MDA son asistentes y ayudas que se utilizan en el debug en coordinación con la CLR , ellos generan mensajes informativos en tiempo de ejecución sobre eventos y por lo que entiendo el error que se produce en este caso es por que el depurador lanza esta excepción ya que encuentra hilos de ejecución en la aplicación que se está depurando que aparentan estar colgados ya que no devuelven ningún mensaje y el MDA al no conocer el estado genera esta excepción.  Por otro lado he leido que es un problema en algún componente COM que la aplicación que esta haciendo burreras jeje Al inicio les coloque ¨Solucion¨ entre comillas por que si se dan cuenta en realidad el problema no se soluciona pero si se evita que el Debug lance el error, el problema muy probablemente se debe a un componente COM que no está comunicándose correctamente con el MDA y por tanto este lanza la excepción.
Bueno en fin ahí va un unos links por si quieren leer mas acerca de este error, que es toda una rareza confusa y si alguien entiende mas de esto y quiere dejarme un comentario, será bien venido

http://msdn.microsoft.com/es-es/library/d21c150d(VS.80).aspx
http://msdn.microsoft.com/es-es/library/ms172233(VS.80).aspx

2016-05-21

Easy Document in VisualBasic




Here are some of the data object that we want to save to file and read object from the file. In VisualBasic, there are two document format for the storage of simple document(*.ini, *.Csv), and 3 type of document format(*.json, *.Xml, *.dat) for the storage of complex object automatically. In this document format guidelines, we want to introduce how easily that save object instance in the VisualBasic program.


Éstos son algunos de los datos del objeto que se quiere guardar en el archivo y lee objeto desde el archivo. En Visual Basic, hay dos formatos de documentos para el almacenamiento de documentos simples (*. Ini, * .csv), y 3 tipo de formato de documento (*. JSON, * .xml, * .dat) para el almacenamiento de objetos complejos de forma automática . En este documento directrices de formato, queremos presentar la facilidad con que ahorran instancia de objeto en el programa de Visual Basic.

EasyDocument



2016-04-08

31 Atajos de teclado que podemos usar en nuestra terminal o consola

¿ Qué podemos hacer en nuestra terminal a un golpe de teclado ? Muchas más cosas de las que nos imaginamos. Hay muchas teclas alternativas, algunas no funcionarán en versiones muy antiguas, otras son teclas algo más fáciles pero en ocasiones algunas terminales remotas no aceptan esos códigos y pueden no funcionar. Las teclas alternativas suelen estar especificadas en /etc/inputrc . También incluyo alguna palabra clave que suele ser el significado de la tecla, o alguna aclaración mnemotécnica para no olvidarnos (o eso pretende).

Posicionamiento

  • Control + E : Ir al final de la línea (Tecla Fin). End.
  • Control + A : Movernos al principio de la línea (Tecla Inicio). La A es la primera letra del abecedario, pues al principio.
  • Alt + F : Movernos al siguiente espacio (Teclas Control + derecha). Forward
  • Alt + B : Movernos al espacio anterior (Teclas Control + izquierda). Backwards
  • Control + B : Movernos a la letra anterior (Tecla izquierda). Backwards (la tecla control suele ser para movernos más rápido)
  • Control + F : Movernos a la siguiente letra (Tecla derecha), Forward
  • Control + XX : Cambiar entre la posición actual del cursor y el inicio de la línea

Edición

  • Control + H : Borra la letra anterior al cursor (Retroceso o Backspace)
  • Control + D : Borra la letra sobre el cursor (Suprimir). ¡ Cuidado ! Esta tecla cierra el terminal si no hay nada escrito (ver más adelante). Delete
  • Alt + Retroceso (Backspace) / Control + W : Borrar la palabra anterior a nuestro cursor. Básicamente borra desde el cursor hasta el espacio anterior por lo que si estamos en mitad de una palabra borraremos la fracción desde el cursor hacia atrás. Cut Word.
  • Control + U : Corta desde la posición actual hasta el principio
  • Control + K (Alt + D): Corta desde la posición actual hasta el fin de línea. Alt + D se supone que no guarda en el portapapeles, pero en muchos casos sí lo hace.
  • Control + Y : Pega algo que has cortado desde la posición actual. Yank.
  • Control + T : Invertir el orden de las dos letras anteriores al cursor. Typo
  • Escape + T : Invertir el orden de las dos últimas palabras (Alt + T funciona si no interfiere con nuestro gestor de ventanas). Transpose.
  • Escape + U : Pone en mayúsculas toda la palabra desde el cursor hasta el final (Alt + U si no interfiere con nuestro gestor de ventanas). Uppercase.
  • Escape + L : Pone en minúsculas toda la palabra desde el cursor hasta el final (Alt + L si no interfiere con nuestro gestor de ventanas). Lowercase
  • Alt + C : Pone la letra en el cursor en mayúscula y nos vamos al final de la palabra. Capitalize.
  • Control + L : Limpiar la pantalla (igual que el comando $ clear). CLear.
  • Control + _ (a veces Control+-): Deshacer. Funciona si escribimos una línea, luego borramos una parte, volvemos a escribir… entonces deshacemos. Si no hacemos mucho, directamente aparecerá la linea vacía. Es lógico, el estado inicial es así.

Historial

  • Control + R : Acceder al historial (escribimos parte de una línea que hayamos escrito antes y nos sugerirá un comando anterior. Si nos sugiere algo y queremos que siga buscando cosas parecidas, debemos pulsar de nuevo Control+R.). Reverse.
  • Control + G : Salir del como de búsqueda de Control + R
  • Control + O / Control + J : Enviar el comando (Tecla enter de toda la vida). Aunque Control+O es más para enviar un comando propuesto por Control +R.
  • Control + P : Buscar en los últimos comandos enviados (Tecla Arriba). Previous.
  • Control + N : Buscar el siguiente comando (Tecla Abajo). Si hemos pulsado Control + P antes, con esta tecla podemos navegar. Next.
  • Alt + . (Alt y punto): Escribir la última palabra del comando anterior

Procesos

  • Control + C : Cancelar un comando (envía una señal SIGINT para cerrar un programa. El programa internamente puede elegir cerrarse o no cerrarse.). Cancel.
  • Control + D : Cerrar la terminal. Puede ser útil cuando estemos ejecutando comandos que requieran texto de la entrada estándar y queremos dejar de escribir texto.
  • Control + Z : Pausar una aplicación (Señal SIGTSTP, que puede ser ignorada por el proceso). Una vez pausada la aplicación podemos utilizar las siguientes órdenes
    1. $ jobs : para ver todas las taras que tenemos en marcha
    2. $ fg : Para continuar en primer plano la última tarea (foreground)
    3. $ bg : Para continuar en segundo plano la última tarea (background)
    4. $ bg [número de tarea] : Para continuar en segundo plano la tarea con ese número
    5. $ %[número de tarea] : Para continuar en primer plano la tarea con ese número (o también $ fg [número de tarea]
    6. $ kill %[número de tarea] : Para finalizar la tarea y no continuarla jamás.
  • Tab : Autocompletar (si estamos en mitad de una palabra busca el comando que más se parece, si pulsamos varias veces nos da varias opciones, si las hay. En las últimas versiones, es posible que muchos programas tengan configurados sus posibles argumentos y también aparezcan).
  • Conrol + S : Parar la salida por pantalla. Si por ejemplo ejecutamos un comando que tiene una salida inmensa, podemos hacer que trabaje en silencio. Stop.
  • Control + Q: Volvemos a permitir la salida por pantalla.
Algunos sitios que podemos visitar:
Atajos de teclado para consola o terminal
Linux Terminal Command Reference

Windows Clipboard Formats

Visión general de los formatos estándar del portapapeles y de los formatos comunes con enlaces a las estructuras de datos.

http://www.codeproject.com/Reference/1091137/Windows-Clipboard-Formats

2016-02-11

Pack URIs in WPF


Apunte sobre como establecer una imagen incrustada en un recuso en WPF original


la solución - Pack URIs.

Image finalImage = new Image();
finalImage.Width = 80;
...
BitmapImage logo = new BitmapImage();
logo.BeginInit();
logo.UriSource = new Uri("pack://application:,,,/AssemblyName;component/Resources/logo.png");
logo.EndInit();
...
finalImage.Source = logo;


El URI se divide en partes:
  • Autoridad: application:///
  • Ruta de acceso: El nombre de un archivo de recursos que se compila en una referencia de ensamblado. La ruta de acceso debe ajustarse al siguiente formato: AssemblyShortName[;Version][;PublicKey];component/Path
    • AssemblyShortName: el nombre corto para la referencia de ensamblado.
    • ;Versión [opcional]: la versión de la referencia de ensamblado que contiene el archivo de recursos. Este se utiliza cuando dos o más ensamblados con el mismo nombre corto de la carga.
    • ;Clavepublica [opcional]: la clave pública que se utiliza para firmar la referencia de ensamblado. Este se utiliza cuando dos o más ensamblados con el mismo nombre corto de la carga.
    • ;componente: especifica que la asamblea se refiere a que se hace referencia desde la asamblea local.
    • /Ruta de acceso: el nombre del archivo de recursos, incluyendo su ruta relativa a la raíz de la referencia de ensamblado de la carpeta del proyecto.
Las tres barras diagonales tras application: tienen que ser reemplazados con comas:
Nota: La autoridad de los componentes de un paquete de URI es un integrado URI que apunta a un paquete y deben cumplir con la RFC 2396. Además, el carácter "/" debe ser reemplazado con el "," carácter", y caracteres reservados como "%" y "?" debe ser escapado. Ver el OPC para obtener más detalles.
Y, por supuesto, asegúrese de que configurar la acción de compilación en la imagen para Resource.



Otro ejemplo.
string packUri = "pack://application:,,,/AssemblyName;component/Images/icon.png";
_image.Source = new ImageSourceConverter().ConvertFromString(packUri) as ImageSource;