domingo, 28 de abril de 2013

.Txt Viewer PRO Privacy Policy (Politicas de Privacidad)

Español

Esta aplicación solo hace uso del Internet para aplicar la función de "text - to speech" , nunca hará uso de su información personal. 

English

This application only makes use of the Internet to implement the function "text - to speech" will never use your personal information.

miércoles, 27 de marzo de 2013

Translator English-Spanish PRO Privacy Policy (Politicas de Privacidad)

English

This app only uses the internet to translate, never will expose your personal data

Español

Esta app solo hace uso de internet para obtener las traducir texto , jamás expondra tus datos personales

martes, 26 de marzo de 2013

Currency-Convertor privacy statement (politicas de privacidad)

English

This app only uses the internet to obtain the currency of the day, never will expose your personal data

Español

Esta app solo hace uso de internet para obtener las divisas del día , jamás expondra tus datos personales

martes, 1 de enero de 2013

ARCHIVO HOST Y .NET

Hola compañeros bueno les comento que hace unos meses se me ocurrió la idea de crear alguna aplicación que bloqueara paginas web. Estuve investigando un poco y encontré el poderoso Archivo Hosts al principio no sabia en realidad en que lenguaje programar la aplicación ya que hay una gran gama de estos (Java , C# , JavaScript ,Vb.net , etc.) pero finalmente me decidí por crear la aplicación en .Net (C# y Vb.net). Pero primero me gustaría comentarles como funciona el archivo hosts es solo un pequeño archivo de texto que Windows utiliza como un servidor DNS en nuestra PC, cualquier petición de una dirección URL que se introduzca en el navegador, Windows comprobará primero si existe alguna referencia a ella en el archivo hosts, si es asi utilizará la dirección IP registrada en el para realizar la conexión. El archivo hosts se encuentra en la siguiente ruta en todos los equipos:

C:\Windows\System32\drivers\etc

Todas las líneas que comienzan con el carácter # son solo comentarios. En la última fila, la combinación de números en la primera columna es la dirección IP donde Windows buscará el dominio. Para impedir el acceso a una página web, solo es necesario incluir en el archivo host una dirección IP que no le corresponda o preferentemente no sea válida, es decir que no conduzca a ningún lado. Por ejemplo para impedir el acceso a la página de ejemplo: http://sitio.com/pagina.htm puedes usar la IP 127.0.0.1 que es la del equipo local o la que se muestra en este caso que es una dirección IP inválida:

Ahora empezando un poco con la programación

Primer paso creamos nuestro algorimo

  • Ubicamos la ruta C:\WINDOWS\system32\drivers\etc
  • Abrimos el archive llamado hosts
  • Escribir la url de la pagina web
  • Cerrar el archivo
*Nota importante debe existir un espacio entre la dirección IP y el nombre del dominio Es muy importante porque enserio que no funciona si no ponemos ese espacio XD

Agregar permisos de administrador

Debemos de tomar en cuenta que el archivo hosts es un archivo protedigo es por esto que debemos de modificar nuestra aplicación para esto debemos de hacer los siguiente pasos

  1. Abrir el explorador de soluciones
  2. Dar click derecho y escojer la opción agregar componente
  3. Escojemos la opción que dice archivo mainifiesto

Nos saldra el app.manifiest como el de la siguiente imagen

lo unico que tenemos que cambiar es el requestedExecutionLevel level="asInvoker" uiAccess="false"

por esto

requestedExecutionLevel level="requireAdministrator" uiAccess="false"

Lo unico que hacemos es que nuestra app corra con permisosde administrador

Tercer paso“Crear una clase”

Como segundo paso vamos a crear una clase llamada EdicionArchivo.cs ( C#) ó EdicionArchivo.vb (Vb.net) esta clase básicamente tendrá tres procedimientos

  1. EscribirPagina Este procedimiento toma como parámetro un string llamado PaginaWeb donde insertaremos la url de la pagina web que queremos bloquear, como podemos ver hacemos uso del namespace system.io para poder tener acceso al archivo

  2. LeerArchivo Este procedimiento toma como parámetro una variable de tipo object llamadamilistadespués dentro de este procedimiento hacemos un cast para convertilo en un objeto de tipo listbox declaramos una variable llamada myarray y utilizamos el método File.ReadAllLines(Básicamente lo que hace es abrir un archivo de texto, lee todas sus líneas, las introduce en una matriz de cadenas) ; sin embargo no queremos leer todas las líneas del archivo es por esto que hacemos uso de linq para hacer nuestra query.Despues de crear la query convertimos los resultados obtenidos en un array y con un ciclo for llenamos el listbox con cada elemento del array

  3. BorrarPagina Este procedimiento vuelve a tomar como parámetro un string llamado PaginaWeb igual como mencioné anteriormente es donde inserteremos la url de la pagina web también volvemos hacer uso del método File.ReadAllLines lo único nuevo es que utilizamos es el procedimiento remplace y el método WriteAllText que lo que hace es escribir una cadena especificada en archivo y, a continuación, lo cierra. Si el archivo de destino ya existe, se sobrescribe. y en el método remplace lo que hacemos es “remplazar” el string obtenido de la url y remplazarlo por Nada

[C#]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Diagnostics;
using System.Collections;
using System.Windows.Forms;
namespace ArchivoHost
{
   public  class EdicionArchivo
    {
       //variable globla en la cual obtengo acesso al archivo hosts
       private String rutaArchivo=Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "drivers/etc/hosts");

       //Procedimiento en el cual escribiremos dentro del archivo hosts
       public void EscribirPagina(String PaginaWeb)
       {
           
                    using(StreamWriter Miwriter =File.AppendText(rutaArchivo))
                    {
                       
                        Miwriter.WriteLine(String.Format("127.0.0.1\t {0}",PaginaWeb));
                        Miwriter.Close();
                    }

                    
                    //Mandamos un msgbox para ver si el usuario quiere ver el archivo

                    if(MessageBox.Show("Desea abir el archivo ahora?","",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes)
                    Process.Start(rutaArchivo);//abro el archivo host
        
       }

       public void LeerArchivo(Object milista)
       {
          ListBox lista = (ListBox)milista;//Hago el cast de mi objeto a un listbox
          var miarray = File.ReadAllLines(rutaArchivo).Where(m => m.StartsWith("127.0.0.1")).ToArray();//Hago una consulta con linq  y la convierto en un array
          for (int j = 0; j < miarray.Length; j++) 
          {
              lista.Items.Add(miarray[j]);//Lleno mi lista con cada elemento de mi array 
             
          }



       }

       public void BorrarPagina(String PaginaWeb)
       {
           String  strFile = File.ReadAllText(rutaArchivo);//Obtengo todo el texto del archivo

           strFile = strFile.Replace(PaginaWeb,String.Empty);//Remplazo  el string obtenido osea la pagina web
           File.WriteAllText(rutaArchivo, strFile);// Vuelvo a escribir el archivo
           MessageBox.Show("Pagina web desbloqueada exitosamente");//enviamos mensaje de confirmacion
       }


    }
}


[VB.NET]

Imports System.Linq
Imports System.IO

Public Class EdicionArchivovb
    '//variable globla en la cual obtengo acesso al archivo hosts
    Private rutaArchivo As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "drivers/etc/hosts")
    '  //Procedimiento en el cual escribiremos dentro del archivo hosts
    Public Sub EscribirPagina(ByVal PaginaWeb As String)
        Using Miwriter As StreamWriter = File.AppendText(rutaArchivo)
            Miwriter.WriteLine(String.Format("127.0.0.1{0} {1}", vbTab, PaginaWeb))
            Miwriter.Close()
        End Using
        '//Mandamos un msgbox para ver si el usuario quiere ver el archivo
        If (MessageBox.Show("Desea abir el archivo ahora?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes) Then
            Process.Start(rutaArchivo) '//abro el archivo host
        End If
    End Sub
    Public Sub LeerArchivo(ByVal milista As Object)
        Dim lista As ListBox = DirectCast(milista, ListBox)
        'Hago el cast de mi objeto a un listbox
        Dim miarray = File.ReadAllLines(rutaArchivo).Where(Function(m) m.StartsWith("127.0.0.1")).ToArray()
        'Hago una consulta con linq  y la convierto en un array
        For j As Integer = 0 To miarray.Length - 1
            'Lleno mi lista con cada elemento de mi array 
            lista.Items.Add(miarray(j))
        Next
    End Sub

    Public Sub BorrarPagina(ByVal PaginaWeb As String)
        Dim strFile As [String] = File.ReadAllText(rutaArchivo)
        'Obtengo todo el texto del archivo
        strFile = strFile.Replace(PaginaWeb, [String].Empty)
        'Remplazo  el string obtenido osea la pagina web
        File.WriteAllText(rutaArchivo, strFile)
        ' Vuelvo a escribir el archivo
        MessageBox.Show("Pagina web desbloqueada exitosamente")
        'enviamos mensaje de confirmacion
    End Sub
End Class

Crear un formulario para ver los resultados

Bueno ahora lo que necesitamos es construir nuestro formulario el cual contendrá los siguientes objetos:

  • Un textbox que nos servirá para poner el url de las paginas web
  • Dos botones uno sera para bloquear paginas y el otro para desbloquearlas
  • Un listbox para llenarlo con el texto que esta en el archivo hosts

Nuestro formulario debe quedar algo así como el de la siguiente imagen


Lo que necesitamos ahora es declarar un par de variables gloables en la clase de nuestro formulario

[C#]

private EdicionArchivo miedicion = new EdicionArchivo();//Declaro y hago instancia a mi clase 
         private String PaginaWeb;//Variable que se utilizará para obtener el texto de mi textbox
         private ErrorProvider Mierror = new ErrorProvider();//Control que servirá para el control de errores

[VB.NET]

Private miedicion As New EdicionArchivovb() '//Declaro y hago instancia a mi clase 
    Private PaginaWeb As String '//Variable que se utilizará para obtener el texto de mi textbox
    Private Mierror As New ErrorProvider() '//Control que servirá para el control de errores

En el evento load de nuesto formulario hacemos referencia a nuestro procedimiento llamado LeerArchivo

[C#]

 private void Form1_Load(object sender, EventArgs e)
        {

            miedicion.LeerArchivo(listBox1);//LLamamos al procedimientyo de mi clase 
        }

[VB.NET]

  Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        miedicion.LeerArchivo(ListBox1)
    End Sub

Ahora por ultimo lo que necesitamos hacer controlar el evento click de nuestro boton

  • En el boton llamado Bloquear debemos de verificar si la url esrita es correcta , se que no es el mejor procedimiento pero lo que yo hice es recorrer cada caracter de mi variable y verificar si tiene las "3 w" si es así procedemos a llamar a nuestro procedimiento que se llama EscribirPagina

  • En el boton llamdo desbloquear lo que debemos verificar es que este seleccionado un item de nuestro listbox , de caso contrario mandara un msgbox advirtiendo que no ha seleccionado ningún elemento, si esta seleccionado un item de nuestro listbox llamamos a nuestro procedimiento BorrarPagina

[C#]


        private void btnBloquear_Click(object sender, EventArgs e)
        {
            PaginaWeb = textpagina.Text;

            if (!String.IsNullOrEmpty(PaginaWeb))//Verifico que mi string no este vacio
            {
                int cont = 0;

                for (int j = 0; j < PaginaWeb.Length; j++)//Recorremos cada uno de los caracteres de mi string y verifico si contiene la letra 'w'
                {
                    if (PaginaWeb[j] == 'w')
                        cont++;
                }

                //Si el contador es igual a 3 , es decir www
                if (cont >= 3)
                {
                    miedicion.EscribirPagina(PaginaWeb);
                    listBox1.Items.Clear();
                    miedicion.LeerArchivo(listBox1);
                }
                else
                    Mierror.SetError(textpagina, "URL NO VALIDA :(");
            }
        }

        private void BtnDesbloquear_Click(object sender, EventArgs e)
        {

            if (listBox1.SelectedIndex != -1)//Verificamos que el usuario haya seleccionado un elemento de mi listbox
            {
                miedicion.BorrarPagina(listBox1.SelectedItem.ToString());

                listBox1.Items.Clear();//Limpio los elementos contenidos en el listbox para proceder actualizarlos
                miedicion.LeerArchivo(listBox1);//Llamamos a mi procedimiento para volver a llenar la lista
            }
            else //De caso contrario si no ha seleccionado ningun elemento
                MessageBox.Show("Seleccione un elemento de la lista por favor", "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }

[VB.NET]

Private Sub btnBloquear_Click(sender As System.Object, e As System.EventArgs) Handles btnBloquear.Click
        PaginaWeb = textpagina.Text

        If (Not String.IsNullOrEmpty(PaginaWeb)) Then '//Verifico que mi string no este vacio

            Dim cont As Integer = 0

            For j As Integer = 0 To PaginaWeb.Length - 1
                'Recorremos cada uno de los caracteres de mi string y verifico si contiene la letra 'w'
                If PaginaWeb(j) = "w"c Then
                    cont += 1
                End If
            Next

            ' //Si el contador es igual a 3 , es decir www
            If (cont >= 3) Then

                miedicion.EscribirPagina(PaginaWeb)
                ListBox1.Items.Clear()
                miedicion.LeerArchivo(ListBox1)

            Else
                Mierror.SetError(textpagina, "URL NO VALIDA :(")
            End If
        End If

    End Sub

    Private Sub BtnDesbloquear_Click(sender As System.Object, e As System.EventArgs) Handles BtnDesbloquear.Click
        If ListBox1.SelectedIndex <> -1 Then
            'Verificamos que el usuario haya seleccionado un elemento de mi listbox
            miedicion.BorrarPagina(ListBox1.SelectedItem.ToString())
            ListBox1.Items.Clear()
            'Limpio los elementos contenidos en el listbox para proceder actualizarlos
            'Llamamos a mi procedimiento para volver a llenar la lista
            miedicion.LeerArchivo(ListBox1)
        Else
            'De caso contrario si no ha seleccionado ningun elemento
            MessageBox.Show("Seleccione un elemento de la lista por favor", "", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        End If
    End Sub

Les dejo unas capturas de pantalla de la aplicación

Desbloqueando pagina web

Bloqueando pagina web

Descarga las soluciones!!

Espero que les haya gustadó espero sus comentarios gracias

lunes, 31 de diciembre de 2012

[ADO.NET] LOGIN CON MYSQL

Buenas tardes compañeros antes de empezar me gustaria comentar que esta es mi primera entrada y espero que les guste.Como sabemos un login es el proceso mediante el cual se controla el accesso a un sistema, es por esto que es de suma importancia a la hora de crear un sistema de información pero bueno empezemos con la programación

Lo que necesitamos saber es lo siguiente:

  • Tener conocimientos básicos de vb.net
  • Tener conocimientos básicos de sentencias sql
Como primer paso vamos abrir la consola de mysql y vamos a crear una tabla llamada usuarios la cual tendrá tres columnas
  • ID TIPO DE CAMPO INTEGER AUTONUMERICO
  • NOMBRE TIPO DE CAMPO VARCHAR
  • PASSWORD TIPO DE CAMPO VARCHAR
Segundo paso deberemos de agregar la referencia de la dll que nos provee mysql sino la tienes la puedes descargar del siguiente link:Ado.net mysql conector
















Tercer paso vamos a crear una clase llamada sentencias.vb(en caso de vb.net) ó sentencias.cs(en caso de c#) y agregaremos el siguiente código fuente pero ¿qué es exactamente lo que hace esta clase? Bueno básicamente contiene un procedimiento llamado login que es donde nosotros tendremos la comunicación con nuestra base de datos, es por esto que en el constructor de la clase pusimos un parametro de tipo String Despues igualamos ese parametro de tipo String con mi variable llamada Miruta. En el procedimiento llamado Login También tomamos dos variables de tipo string como parametros que son el Nombre de usuario y su Respectiva password Una vez obtenidos estos parametros declaramos un variable de tipo MysqlCommand(Esta es la que nos permitira realizar las instrucciones sql) y por supuesto también creamos una conexión con la rutaObtenida gracias al constructor de mi clase, Despues de esto creamos la instrucción sql y agregamos como paramtros los string obtenidos(NomUsuario y Password).Yo creo que el punto importante de este procedimiento es la instrucción ExecuteScalar básicamente lo que hace es devolver la primera columna de la primera fila del conjunto de resultados devuelto por la consulta. Las demás columnas o filas no se tienen en cuenta Una vez obtenida la columna lo que hacemos es un simple cast y con un if verificamos si la consulta devolvió un valor nullo(osea 0) ó devolvió un valor no nullo.Es aqui donde se aplica un poco la lógica, si devolvió un valor nullo quiere decir que el Nombre del usuario y la password no se encuentran alojados en la base de datos. Si devuelve un valor no nullo quiere decir que si estan alojados en la base de datos

[VB.NET]

Imports Mysql.Data.MySqlClient   'Agregamos la referencia para poder utilizar los metodos de la dll importada

Public Class Sentencias
    Private Miruta As String
    '//Constructor de la clase donde agregamos la ruta de conexion de la bd 
    Public Sub New(ByVal RutaBd As String)
        If (Not String.IsNullOrEmpty(RutaBd)) Then '//Verifico que la ruta de conexion no este vacia
            Me.Miruta = RutaBd
        End If
    End Sub

    '//Metodo donde revisaremos todos los datos

    Public Sub Login(ByVal NomUsuario As String, ByVal Password As String)
        Try 'Utilizaremos el bloque try catch... para controlar exepciones 

            Using MibdConexion As New MySqlConnection(Miruta)

                'Declaro comando para poder realizar mis instrucciones sql
                Dim micomando As New MySqlCommand
                '//Abrimos la conexion para poder realizar los sig pasos
                MibdConexion.Open()
                '//Establecemos propiedades al comando
                With micomando
                    .Connection = MibdConexion
                    .CommandText = "SELECT*FROM usuarios WHERE Nombre=?Nom AND Password=?Pass"
                    .Parameters.AddWithValue("?Nom", NomUsuario) '//Agrego los parametos en este caso es el string obtenido
                    .Parameters.AddWithValue("?Pass", Password)
                End With

                Dim NumEncontrado As Integer = CType(micomando.ExecuteScalar, Integer)

                If (NumEncontrado = 0) Then '//No se encontro ningun registro
                    MessageBox.Show("Lo siento no encontré ningun registro")
                Else
                    MessageBox.Show("Bienvenido te he encontradó en la bd XD")
                End If

            End Using

        Catch ex As Exception
            Throw New Exception(String.Format("Ha ocurrido un error {0}", ex.Message))
        End Try

    End Sub

End Class

[C#]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace sql
{
   public  class sentencias
    {
      private String Miruta;
       //Constructor de la clase donde agregamos la ruta de conexion de la bd
       public sentencias(String RutaBd) 
       {
           if (!String.IsNullOrEmpty(RutaBd))//Verifico que la ruta de conexion no este vacia
               this.Miruta = RutaBd;
       }

       public void Login(String NomUsuario, String Password)
       {
           try //Utilizaremos el bloque try catch... para controlar exepciones
           {
               using (MySqlConnection MidbConexion = new MySqlConnection(Miruta))
               {
                   MidbConexion.Open();//Abrimos la conexion para realizar los siguientes pasos
                   // 'Declaro comando para poder realizar mis instrucciones sql
                   MySqlCommand micomando = new MySqlCommand { Connection = MidbConexion, CommandText = "SELECT*FROM usuarios WHERE Nombre=?Nom AND Password=?Pass" };
                   micomando.Parameters.AddWithValue("?Nom", NomUsuario);
                   micomando.Parameters.AddWithValue("?Pass", Password);

                   int NumEncontrado = Convert.ToInt32(micomando.ExecuteScalar());

                   if(NumEncontrado==0)//No se encontro ningun registro
                         MessageBox.Show("Lo siento no encontré ningun registro");
                   else
                    MessageBox.Show("Bienvenido te he encontradó en la bd XD");


               }
           }
           catch(Exception ex)
           {
               throw new Exception(String.Format("Ha ocurrido un error {0}", ex.Message));
           }
       }
    }
}

Cuarto paso tenemos que crear un form que tenga el siguiente diseño
  • 2 TEXTBOX(UNO PARA LA EL NOMBRE DE USUARIO Y EL OTRO PARA LA PASSWORD)
  • 2 LABELS (UNA PARA EL NOMBRE DEL USUARIO Y LA OTRA PARA LA PASSWORD)
  • 1 BOTON SERVIRÁ PARA LLAMAR A NUESTRO PROCEDIMIENTO ALMACENADO EN NUESTRA CLASE
Quedaría algo así

Ahora bien en el evento click de nuestro boton haremos instancia a nuestra clase pero antes de esto es importante hacer unas cuantas validaciones de datos.Debemos de estar seguros que el textusurio y el txtpassword no esten vacios sino estan vacios entonces ahora si procedemos a declarar y hacer instancia a nuestra clase y llamamos a nuestro procedimiento llamado Login que es el que esta alojado en nuestra clase. Es importante resaltar que el string de la ruta de conexion en mi caso es el siguiente:"Data Source=localhost;Database=tutorial;Uid=root;Password=1234" si tu no tienes idea de cual es tu ruta de conexión deberia de checar este enlace rutas de conexión

[VB.NET]

    Private Sub BtnEntrar_Click(sender As System.Object, e As System.EventArgs) Handles BtnEntrar.Click

        Dim MierrorProvider As New ErrorProvider
        '//Validamos los textbox
        If (String.IsNullOrEmpty(txtusuario.Text)) Then
            MierrorProvider.SetError(txtusuario, "Inserta tu nombre de usuario")
        ElseIf (String.IsNullOrEmpty(txtpassword.Text)) Then
            MierrorProvider.SetError(txtpassword, "Inserta tu password")
        Else '//Si pasa por los dos parametros entonces llamo al procedimiento de mi clase
            Dim InstanciaMiclase As New Sentencias("Data Source=localhost;Database=tutorial;Uid=root;Password=1234")
            InstanciaMiclase.Login(txtusuario.Text, txtpassword.Text)
        End If

    End Sub

[C#]

  private void BtnEntrar_Click(object sender, EventArgs e)
        {
           ErrorProvider  MierrorProvider = new  ErrorProvider();
               //Validamos los textbox
             if (String.IsNullOrEmpty(txtusuario.Text))
                      MierrorProvider.SetError(txtusuario, "Inserta tu nombre de usuario");
             else if (String.IsNullOrEmpty(txtpassword.Text)) 
                      MierrorProvider.SetError(txtpassword, "Inserta tu password");
             else //Si pasa por los dos parametros entonces llamo al procedimiento de mi clase
           {
        sentencias InstanciaMiclase = new sentencias("Data Source=localhost;Database=tutorial;Uid=root;Password=1234");
        InstanciaMiclase.Login(txtusuario.Text, txtpassword.Text);
 
        }
        
        }

Finalmente para que el textbox que es asignado al campo password tenga la mascara de tipo password lo unico que tenemos que hacer es lo siguiente:

En el evento load de nuestro formulario agregamos lo siguiente:

[VB.NET]

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        txtpassword.UseSystemPasswordChar = True

    End Sub

[C#]


 private void Form1_Load(object sender, EventArgs e)
        {
            txtpassword.UseSystemPasswordChar = true;
        }
Ahora veremos el comportamiento de nuestro form en la siguiente imagen

Link de descarga de las soluciones!!

Espero que me hayan entendido espero sus comentarios un gran saludo XD