domingo, 14 de abril de 2013

Debian

Bueno ya llevamos un buen tiempo viendo cosas de Windows y se me hace justo que también platiquemos un poco de GNU/Linux

¿Qué es Debian?

El Proyecto Debian es una asociación de personas que han hecho causa común para crear un sistema operativo (SO) libre. Este sistema operativo que hemos creado se llama Debian GNU/Linux, o simplemente Debianpara acortar.
Un sistema operativo es un conjunto de programas y utilidades básicas que hacen que su computadora funcione. El centro de un sistema operativo es el núcleo (N. del T.: kernel). El núcleo es el programa más importante en la computadora, realiza todo el trabajo básico y le permite ejecutar otros programas.
Los sistemas Debian actualmente usan el núcleo de Linux. Linux es una pieza de software creada en un principio por Linus Torvalds y soportada por miles de programadores a lo largo del mundo.
Sin embargo, se está trabajando para ofrecer Debian con otros núcleos, en especial con el Hurd. El Hurd es una colección de servidores que se ejecutan sobre un micronúcleo (como Mach) para implementar las distintas funcionalidades. El Hurd es software libre producido por el proyecto GNU.
Una gran parte de las herramientas básicas que completan el sistema operativo, vienen del proyecto GNU; de ahí los nombres: GNU/Linux y GNU/Hurd. Estas herramientas también son libres.
Desde luego, lo que la gente quiere es el software de aplicación: herramientas que los ayuden a realizar lo que necesiten hacer, desde editar documentos, ejecutar aplicaciones de negocios hasta divertirse con juegos y escribir más software. Debian viene con más de 25000 paquetes (software precompilado y empaquetado en un formato amigable para una instalación sencilla en su máquina) — todos ellos de forma gratuita.
Es un poco como una torre. En la base está el núcleo. Encima se encuentran todas las herramientas básicas. Después está todo el software que usted ejecuta en su computadora. En la cima de la torre se encuentra Debian — organizando y encajando todo cuidadosamente para que todo el sistema trabaje junto.



jueves, 18 de octubre de 2012

Utilizar Scanner desde C# con WIA


Bueno, me di a la tarea de buscar como adquirir imágenes desde un Scanner por un requerimiento para realizar una aplicación para un cliente, después de mucho buscar y de ver varios ejemplos encontré como realizar lo  Windows Incluye desde XP una forma de hacerlo por medio de un SDK y desde Vista y 7 ya viene con el sistema operativo mas información en :http://msdn.microsoft.com/en-us/library/windows/desktop/ms630368(v=vs.85).aspx

Para no hacerles el cuento largo la forma de hacerlo o cuando menos la que yo ejecute compile y corrí desde Windows 7 con un miltifuncional Epson es la siguiente:

  1. Importar al proyecto las librerias "Microsoft Windows Image Acquisition Libray v2.0" (WIA) de la seccion COM.
  2. Después cree una clase como se muestra a continuación:
      1. using System;
      2. using WIA;
      3. public class Scanner
      4. {
      5.          Device oDevice;
      6.          CommonDialog dlg;
      7.          public Scanner()
      8.          {
      9.                   dlg = new CommonDialog();
      10.                   oDevice = dlg.ShowSelectDevice(WiaDeviceType.ScannerDeviceType, true, false);
      11.          }
      12.          public System.Drawing.Image Scann()
      13.          {
      14.                   ImageFile imageFile=dlg.ShowAcquireImage(oDevice.Type,        
      15.                            WiaImageIntent.GrayscaleIntent,
      16.                            WiaImageBias.MinimizeSize,
      17.                            "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}", false, false, false);
      18.                   WIA.Vector vector = imageFile.FileData;
      19.                   System.Drawing.Image i = System.Drawing.Image.FromStream(new
      20.                            System.IO.MemoryStream((byte[])vector.get_BinaryData()));
      21.                   return i;
      22.          }
      23. }
  3. Como se ve en el objetio principal es ShowAcquireImage() cuya descripcion esta completa se puede ver en: http://msdn.microsoft.com/en-us/library/windows/desktop/ms630772(v=vs.85).aspx, la cadena de caracteres extraños son los ID del tipo de codificacion de la Imagen los cuales se puede ver en la siguiente pagina:http://msdn.microsoft.com/en-us/library/windows/desktop/ms630810(v=vs.85).aspx
  4. Despues de la clase es muy sencillo solo se instancia el objeto y se llama la Funcion Scann() que es la que inicializa todo lo de la clase y regresa una elemento de tipo System.Drawing.Image 
      1. Scanner oScanner = new Scanner();
      2. pictureBox1.Image = oScanner.Scann();
Bueno se los dejo ya muy sencillo solo crear la clase y mandar llamar la funcion Scann(), espero que les sea util
Saludos...

miércoles, 3 de octubre de 2012

Servicios de direccionamiento dinamico

Alguna vez han tenido la necesidad de publicar un trabajo, proyecto o prototipo en internet ?, y al intentarlo se dan cuenta de que desde su casa con una conexión de infernitum o de cualcuier ISP tu ip no es fija... y que pedir a personal de su ISP una IP fija sale de su presupuesto... la solución es un servicio de direccionamiento dinámico... hay varios gratuitos que son baste útiles son gratuitos; de estos el que yo eh usado pro años es el servicio de  http://www.no-ip.com/ es muy fácil basta con registrarse, abrir en la pagina la opción Hosts/Redirects, agregar un host, buscar en dominio deseamos que se cree el sub dominio de nuestro re-direccionamiento  y dar clic en crear host



descargamos la aplicación en la opcion Download Client que es la encargada de estar refrescando nuestra IP variable al servicio de DNS la instalamos e iniciamos la session creada en la web


Elejimos el DNS creado 




 y Listo... podemos accesar a nuestro equipo desde un dominio como : patos.no-ip.org; también si se desea se puede usar un dominio propietario pero me parece que eso si ya tiene un costo...


martes, 18 de septiembre de 2012

Short Cut ASP C# + javascritp

Alguna vez han tenido la necesidad de realizar alguna función tipo Short Cut en una Pagina web?

Es clásico nos piden una pagina web con pestañas y luego a algún simpático se le ocurre la "brillante idea" de navegar por medio de las pestañas con comandos del teclado es decir Ctrl+1 para la pestaña 1, Ctrl +2 para la pestaña 2 y asi sucesivamente...

Buscando y navegando  la verdad ya no recuerdo donde fue que encontré la siguiente librería:

http://www.openjs.com/scripts/events/keyboard_shortcuts/

Esta librería es facilisiama de implementar simplemente se sigue el ejemplo


shortcut.add("Ctrl+Shift+X",function() {
alert("Hi there!");
});


Pero como utilizar JavaScript para invocar programación de ASP.Net?


El resultado no fue fácil de encontrar después de buscar y de analizar las paginas HTML generadas finales generadas por el servidor ASP me percate de que los componentes generan una llamada a un javascript para  realizar los eventos PostBack

lunes, 30 de mayo de 2011

Recuperación de password del Usuario Root de MySQL en Windows

Hace ya algún tiempo publique una forma de recuperar los datos de MySql de cuando una Base de datos no responde peor ahora se me presento que realizando pruebas entre distintos proyectos confundi la clave que al root de la Base de Datos y pues tuve que buscar la forma de accesar, encontre muchas paginas de como hacer esto en Linux pero en Windows tuve algunos problemas aqui les muestro los pasos para realizar el cambio de clave al usuario root en Windows...


  1. Iniciar una consola de comandos, en modo administrador, si no lo ejecutas como administrador no podrás realizar los cambios.
  2. Paramos el servicio :  C:\> net stop mysql
  3. Ejecutamos desde el directorio bin (es decir donde lo tengamos instalado + \ bin\):
    • C:\MySQL\bin> mysqld --skip-grant-tables --user=root
  4. Desde otro teminal (también como administrador), también desde el diretorio bin: 
    • C:\MySQL\bin> mysql -u root
  5. Accedemos automáticamente y sin necesidad de contraseña a mysql
  6. Ejecutamos:
    •  mysql> UPDATE mysql.user SET Password=PASSWORD('contraseña') WHERE User='root';
  7. y después
    •  mysql> FLUSH PRIVILEGES;
  8. Salimos del editor mysql: 
    • mysql> exit;
  9. Desde el administrador de tareal paramos mysql, el proceso se llama mysqld.exe o ejecutamos de nuevo 
    • C:\> net stop mysql
  10. Y Volvemos a arrancar el servicio desde un terminal:
    • C:\>net start mysql
Luego volemos a intentar entrar con la calve: contraseña y ya podremos accesar claro que podemos cambiar Contraseña en el Query por la clave que deseemos usar... y eso sera suficiente.

viernes, 18 de marzo de 2011

Vulnerabilidad en la seguridad de las aplicaciones ASP.NET

Hoy en día el tópico de la seguridad es muy discutido, es importare el saber que al desarrollar una aplicación y sobre todo una web las aplicaciones pueden ser un punto importare de entrada para aquellas personas que de forma mail intencionada o "ética" intentan vulnerar los sistemas.Y como siempre descuidos del hombre son los mas fáciles de encontrar. Pues bien navegando en la red buscando las funciones de unas clases me tope con la advertencia de esta vulnerabilidad la cual es fácil de resarcir y no presenta mucha dificultad. y de alguna forma es responsabilidad de nosotros como programadores el tomarla en cuenta.

¿De qué forma impacta es ta vulnerabilidad?

ASP .NET utiliza el cifrado para ocultar datos confidenciales y proteger a los mismos de manipulación por parte del cliente. Solo existe un problema en la implementacion del cifrado permite al atacante descifrar y manipular los datos.

Pero, ¿qué puede hacer el atacante con esta capacidad? Parte de la respuesta depende de la aplicación ASP.Net ala cual se va atacadar. Por ejemplo, si la aplicación ASP.Net almacena información confidencial, como contraseñas o cadenas de conexión de base de datos, en el objeto ViewState estos datos podrían verse comprometidos. El objeto ViewState se cifra y se envía al cliente en una variable de formulario oculto, por lo que es un posible objetivo de este ataque.


       Si la aplicación ASP.Net utiliza ASP.Net 3.5 SP1 o posterior, el atacante podría utilizar esta vulnerabilidad de cifrado para solicitar el contenido de un archivo arbitrario dentro de la aplicación ASP.Net. La revelación pública demostrado mediante esta técnica para recuperar el contenido de web.config. Cualquier archivo en la aplicación ASP.Net que este ejecutando el proceso de trabajo si se tiene acceso se devolverán al atacante.

Como funciona esta Vulnerabilidad

` Para entender cómo funciona esta vulnerabilidad, necesita saber acerca de los oráculos criptográficos. Un oráculo en el contexto de la criptografía es un sistema que proporciona sugerencias a medida que se le hacen preguntas. En este caso, existe una vulnerabilidad en ASP.Net que actúa como un oráculo de relleno. Esto permite a un atacante enviar el texto cifrado elegido al servidor y aprender si se descifra correctamente examinando qué código de error fue devuelta por el servidor. Haciendo muchas peticiones, el atacante puede aprender lo suficiente como para correctamente descifrar el resto del texto cifrado. El atacante puede alterar el texto sin formato y cifrarlo.

Como solucionar esta Vulnerabilidad

Una solución que puede utilizar para evitar esta vulnerabilidad es para activar la función CustomErrors de ASP.NET, y explícitamente configurar sus aplicaciones para volver siempre la misma página de error - sin importar el error encontrado en el servidor. Mediante el mapeo de todas las páginas de error a una sola página de error , esto impide que un hacker pueda distinguir entre los diferentes tipos de errores que se producen en el servidor.
El ejemplo que se describe a continuacion pretende como solucionar la vulnerabilidad existente en las Aplicaciones ASP.NET o para tener mas informacion acerca de como funciona esta vulnerablidad.
Si está utilizando ASP.NET 3.5 o ASP.NET 4.0, entonces debería seguir los siguientes pasos para habilitar CustomErrors y mapear todos los errores a una sola página de error.
  1. Editar el archivo de su aplicación ASP.NET raíz Web.config. Si el archivo no existe, crear uno en el directorio raíz de la aplicación.
  2. Creación o modificación de la sección de CustomErrors del archivo web.config para tener la siguiente configuración Observe el uso de redirectMode = "ResponseRewrite" con NET 3.5 SP1 y NET 4.0.               
  < customErrors mode ="On" redirectMode ="ResponseRewrite" defaultRedirect ="~/error.aspx" />
 

miércoles, 2 de febrero de 2011

Cortar Imágenes con un rectángulo

Hoy necesitaba cortar una imagen de una fotografía para dejar únicamente la cara de la persona, así que me di a la tare de buscar como cortar la imagen usando un rectangulo dobre un picturebox y recortando pegarlo en otro:


Para Cortar la Imagen se utiliza un rectángulo y en realidad es bastante sencillo de realizar.
Simplemente se utiliza el siguiente código


private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                CordenadaX.Text = e.X.ToString();
                CordenadaY.Text = e.Y.ToString();


                pictureBoxOrigen.Refresh();
                
                int A = 250;
                int B = 50;
                int C = 150;
                int D = 200;
                try
                {
                    A = Convert.ToInt32(CordenadaX.Text);
                    B = Convert.ToInt32(CordenadaY.Text);
                    C = Convert.ToInt32(Largo.Text);
                    D = Convert.ToInt32(Ancho.Text);


                    Bitmap imagen2 = new Bitmap(C, D);
                    Graphics lienzo = Graphics.FromImage(imagen2);


                    Pen cropPen = new Pen(Color.Red, 3);
                    cropPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid;
                   
                    Rectangle recorte = new Rectangle(A, B, C, D);
                    pictureBox1.CreateGraphics().DrawRectangle(cropPen, recorte);
                    lienzo.DrawImage(pictureBoxOrigen.Image, 0, 0, recorte, GraphicsUnit.Pixel);
                    this.pictureBoxDestino.Image = imagen2;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Surgio un Error: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

Código Completo : Codigo Completo