viernes, 22 de abril de 2016

[Soporte] Restaurar la capacidad de un pendrive


Dejo un articulo que el Mtro Ramón Rincón hace para Kobi Notes 

El pendrive, como memoria USB, es uno de los dispositivos más utilizados para el almacenamiento y la portabilidad de la información. Su diseño pequeño, ergonómico y la gran capacidad de almacenamiento, han ayudado a incrementar su uso. Sin embargo, debido al uso frecuente del pendrive, nuestra información almacenada está en riesgo. Las
causas pueden ser diversas: virus, mala escritura de un archivo, formateo accidental, entre otros.

Una causa poco usual, pero suele suceder, es la mala asignación del espacio como memoria disponible. Esto es que se han generado dos particiones en nuestro pendrive, de la cual el sistema de archivos solo reconoce una parte de la capacidad de almacenamiento, y el espacio restante, que no tiene formato, no tiene posibilidad de acceso por parte del sistema operativo. Es decir, si nuestro pendrive es de 8GB, y el sistema operativo (por ejemplo Windows) solo reconoce 200MB como el espacio total, el espacio restante no tiene formato, por lo cual no es utilizable. Pero, ¿cómo le puedo hacer para que Windows reconozca el espacio no particionado del pendrive? 

Del post que se encuentra al final de este documento, se recomienda seguir con los siguientes pasos para resolver esta situación poco común. En lo personal, estos pasos los seguí para recuperar espacio no asignado de mi pendrive y funcionó al 100%. Cabe mencionar que en el blog que está al final, menciona que estos pasos solo pueden ser aplicados en versiones de Windows 7 y anteriores. Esta afirmación, no la he comprobado. 

Pasos para recuperar espacio no asignado del pendrive en Win 7: 

1) Abrimos C:\WINDOWS\system32\cmd.exe con botón derecho y ejecutar como administrador. Es importante que lo ejecutes como administrador para que tengas acceso a comandos especiales en la consola de Windows




2) Una vez en el símbolo del sistema escribimos:

diskpart

Esta herramienta le permite administrar objetos (discos, particiones o volúmenes) mediante scripts o directamente en el símbolo del sistema. Y aparecerá la siguiente ventana





3)  Después teclea el siguiente comando:  

list disk

Los comandos list disk y list volume muestran todos los discos y volúmenes del equipo.

Es importante que observes qué numero es el pendrive mirando los GB de este y no te equivoques porque lo va a formatear. Si eliges otra unidad de disco, puedes meterte en serios problemas.  





4) Una vez observado el número de volumen de pendrive, escribe:
 

select disk + número de disco del pendrive
 

Ejemplo: select disk 5

Este comando selecciona la unidad de disco especificado y posiciona el cursor en esa unidad. Es importante que no selecciones la unidad de disco 0, porque es una unidad del sistema.



5)   A continuación teclea:
 

clean

En Diskpart, el comando clean ordena al software de utilidad limpiar un disco específico de cualquier partición y la información del sector oculto, limpiando el disco de todos los datos









Puede que marque error, pueda que la limpieza lo haga de manera satisfactoria, independientemente puedes seguir con la ejecución de los pasos para terminar de recuperar el espacio de tu pendrive. A mi me marcó ese error, pero pude recuperar el espacio de mi memoria

6)  Después introduce el siguiente comando:
 
create partition primary

El comando create partition primary crea una partición primaria en el disco básico actual. Después de crear la partición, ésta recibe el foco automáticamente. La partición no recibe una letra de unidad.




7.    En seguida introduce el siguiente comando: 

format fs=NTFS quick 


 

Este comando formatea el volumen o la partición. Esta partición ya está seleccionada desde el select disk. Si se va siguiendo los pasos de manera adecuada, la unidad seleccionada es la unidad del pendrive.

 8.    El último paso importante, escribe:
 
assign

Este comando asigna una letra de unidad al volumen al pendrive, que es la unidad seleccionada que estamos trabajando. Si no se especifica ninguna letra de unidad, se asignará la siguiente letra de unidad disponible.


Una de las maneras de comprobar que se ha generado los pasos correctamente, se abre la ventana de ejecución automática del explorador de Windows para hacer operaciones sobre la unidad.

9.    Para finalizar, introduce:
 
Exit

Este comando me permite salir de la sesión de diskpart de la consola. Puedes teclear de nuevo el comando para salir de la consola de Windows.

Ahora si, puede comprobar que el pendrive o memoria usb ha recuperado el espacio perdido. Espero que les haya servido la información


Referencias

http://www.taringa.net/post/hazlo-tu-mismo/9092024/Solucion-Espacio-no-asignado-en-Pen-Drive-y-Memorias-USB.html 

 https://technet.microsoft.com/es-mx/library/cc766465(v=ws.10).aspx
 

miércoles, 6 de abril de 2016

[J2ME] Re-dimensionar una imagen




El re-dimensionamiento de una imagen no trae muchas complicaciones en Java ME en este caso probado en WTK2.5.2, para esto solo necesitaremos hacer lo siguiente: 

1) Importar la clase Image

  import javax.microedition.lcdui.Image;

2) Invocar el método "redimensionar" con la imagen y el ancho y alto que quieren que quede:


/**
     * Metodo para redimensionar el tamaño de la imagen 
     * @param image objeto con la imagen que se quiere cambiar de tamaño 
     * @param ancho  ancho que quedaria la imagen 
     * @param alto alto que quedaria la imagen 
     * @return retorna el objeto Image ya redimensionada
     */
private Image redimensionar(Image image, int ancho, int alto) {
        int anchoOriginal = image.getWidth(); 
        int alturaOriginal = image.getHeight();
        int[] inicial;  
        int[] ifinal = null;
        inicial = new int[anchoOriginal];
        int i = 0;
        int dy, dx;
        ifinal = new int[ancho * alto];
        for (int y = 0; y < alto; y++) {
            dy = y * alturaOriginal / alto;

            image.getRGB(inicial, 0, anchoOriginal, 0, dy, anchoOriginal, 1);

            for (int x = 0; x < ancho; x++) {
                dx = x * anchoOriginal / ancho;

                ifinal[(ancho * y) + x] = inicial[dx];
            }
        }
        Image redimensionada = Image.createRGBImage(ifinal, ancho, alto, true);
        return redimensionada;
    }


Al mostrarla en un canvas, quedaría re-dimensionada. 







jueves, 31 de marzo de 2016

[Android] ButterKnife: Enlazar componentes de vista al codigo rapidamente





Logo de la librería que se muestra en github https://github.com/JakeWharton/butterknife


ButterKnife es una librería desarrollada por Jake Wharton que permite enlazar rápidamente los componentes de la vista de android, mediante inyecciones de código permite  la interacción de los elementos con el código, es fácil de usar e implementar, aquí dejo un video sobre un pequeño ejercicio que realice. 




Referencias: 
Codigo de la aplicación ButterKnifeTest 
Pagina de ButterKnife 
GitHub de ButterKnife 

lunes, 21 de marzo de 2016

[C#] Una pequeña clase para conectar con MYSQL


Vamos a explicar el proceso de conexión a una base de datos Mysql con ayuda de una pequeña clase ya diseñada, que nos ayuda a gestionar las conexiones. Esta compuesta por 7 métodos que mas o menos cumplen las funciones basicas. 



Explicare una manera sencilla de implementarla. 

Lo primero que tenemos que hacer es para trabajar con Mysql tenemos que tener instalado el conector .Net el cual lo podemos descargar desde la siguiente dirección: 


Una vez instalado, podemos crear un proyecto como Windows Form, abrimos Visual Studio y añadimos las referencias que necesitaremos para trabajar con MYSQL, en este caso usaremos unicamente el conector Mysql.data. Para poder agregarlo le damos clic derecho en el proyecto y escogemos la opción de agregar referencia  


 Una vez que agregamos la referencia, agregamos la clase la cual puedes descargar desde el repositorio de GitHub que pongo en la parte de abajo del Post, la clase esta compuesta por el siguiente código: 


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using MySql.Data.MySqlClient;
using System.Configuration;


namespace BackEndMysql.Controller
{


    /// 
    /// Clase para el manejo de las conexiones con Mysql
    /// Author: Cobymotion
    /// 
    public class ManageConnection
    {
        //variables de para la conexion 
        protected string ConnectionStringLocal;
        protected MySqlConnection SQLConexion;

        /// 
        /// Permite inicializar de las configuraciones la cadena de conexion y genera una conexion nueva 
        ///          
        public ManageConnection()
        {
            try
            {
                ConnectionStringLocal = ConfigurationManager.ConnectionStrings["ServerDb"].ConnectionString;
                //MySqlConnection SQLConexion = default(MySqlConnection);                
            }
            catch (Exception e)
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                ConnectionStringLocal = config.ConnectionStrings.ConnectionStrings["ServerDb"].ConnectionString.ToString();
                Console.WriteLine(e.ToString());
            }
            SQLConexion = new MySqlConnection(ConnectionStringLocal);
        }

        /// 
        /// Valida que se abra la conexion y la mantiene abierta
        /// 
        private void openConexion()
        {
            try
            {
                if (SQLConexion.State == ConnectionState.Closed)
                    SQLConexion.Open();
            }
            catch (MySqlException ex)
            {
                Console.WriteLine("Ocurrio un error  " + ex);
                closeConexion();
            }
        }

        /// 
        /// Cierra la conexion que se vaya a generar. 
        /// 
        protected void closeConexion()
        {
            if (SQLConexion.State == ConnectionState.Open)
            {
                SQLConexion.Close();
                SQLConexion.Dispose();
            }
        }

        /// 
        /// Metodo utilizado para ejecutar sentencias de SQL que tienen que ver con ingresar, 
        /// modificar o borrar
        /// 
        /// Sentencia de SQL completa que se quiere ejecutar
        /// Numero de parametros que se necesitan para utilizar
        /// Regresa verdadero si no ocurre ninguna exception 
        protected bool executeQueryUpdate(string sentencia, List parametros)
        {
            bool accept = true;
            openConexion();
            try
            {
                MySqlCommand comando = new MySqlCommand();
                comando.CommandText = sentencia;
                comando.CommandType = CommandType.Text;
                comando.Connection = SQLConexion;
                foreach (MySqlParameter parametro in parametros)
                    comando.Parameters.Add(parametro);
                comando.ExecuteNonQuery();
                accept = true; 
            }
            catch (MySqlException e)
            {
                accept = false;
                Console.WriteLine("Error al tratar de ingresar al archivo");
                Console.WriteLine("Codigo error: " + e.ToString());
            }
            finally
            {
                closeConexion();
            }
            return accept; 
        }

        /// 
        /// Metodo utilizado para ejecutar procedimientos almacenados de SQL que tienen que ver con ingresar, 
        /// modificar o borrar
        /// 
        /// Sentencia de SQL completa que se quiere ejecutar
        /// Numero de parametros que se necesitan para utilizar
        /// Regresa verdadero si no ocurre ninguna exception 
        protected bool executeStoredProcedureUpdate(string nombreProcedimiento, List parametros)
        {
            bool accept = true;
            openConexion();
            try
            {
                MySqlCommand comando = new MySqlCommand();
                comando.CommandText = nombreProcedimiento;
                comando.CommandType = CommandType.StoredProcedure;
                comando.Connection = SQLConexion;
                foreach (MySqlParameter parametro in parametros)
                    comando.Parameters.Add(parametro);
                comando.ExecuteNonQuery();
                accept = true;
            }
            catch (MySqlException e)
            {
                accept = false;
                Console.WriteLine("Error al tratar de ingresar al archivo");
                Console.WriteLine("Codigo error: " + e.ToString());
            }
            finally
            {
                closeConexion();
            }
            return accept;
        }

        /// 
        /// Metodo principal para acceso a la base de datos retorna un reader mediante un procedimiento almacenado
        /// 
        /// 
        /// 
        /// MysqlDataReader
        protected MySqlDataReader buscaRegistroStoredProcedure(string nombreProcedimiento, List parametros)
        {
            MySqlDataReader reader;
            try
            {
                openConexion();
                MySqlCommand sqlComando = new MySqlCommand();
                sqlComando.CommandText = nombreProcedimiento;
                sqlComando.CommandType = CommandType.StoredProcedure;
                sqlComando.Connection = SQLConexion;
                foreach (MySqlParameter parametro in parametros)
                    sqlComando.Parameters.Add(parametro);
                reader = sqlComando.ExecuteReader();
            }
            catch (MySqlException ex)
            {
                Console.Write("ocurrio un error al leer " + ex);
                reader = null;
                closeConexion();
            }
            return reader;
        }

        /// 
        /// Permite tener acceso a la base de datos mediante una sentencia SLQ y regresa un Reader con los datos
        /// 
        /// 
        /// 
        /// MysqlDataReader

        protected MySqlDataReader buscaRegistroSQL(string sentencia, List parametros)
        {
            MySqlDataReader reader;
            try
            {
                openConexion();
                MySqlCommand sqlComando = new MySqlCommand();
                sqlComando.CommandText = sentencia;
                sqlComando.CommandType = CommandType.Text;
                sqlComando.Connection = SQLConexion;
                foreach (MySqlParameter parametro in parametros)
                    sqlComando.Parameters.Add(parametro);
                reader = sqlComando.ExecuteReader();
            }
            catch (MySqlException ex)
            {
                Console.Write("ocurrio un error al leer " + ex);
                reader = null;
                closeConexion();
            }
          
            return reader;
        }

        /// 
        /// metodo que toma una sentencia SQL y la ejecuta para que pueda traer una tabla del dataset 
        /// Lo utilizo para meterlo en los grid o en los combos       
        /// 
        /// 
        /// 
        /// 
        protected DataTable getListSentenciaSQL(String sentencia, List parametros)
        {
            DataSet miDataSet = new DataSet();
            bool ban = false;
            try
            {
                openConexion();
                MySqlCommand sqlComando = new MySqlCommand();
                sqlComando.CommandText = sentencia;
                sqlComando.CommandType = CommandType.Text;
                sqlComando.Connection = SQLConexion;
                foreach (MySqlParameter parametro in parametros)
                    sqlComando.Parameters.Add(parametro);
                MySqlDataAdapter myAdap = new MySqlDataAdapter(sqlComando);
                myAdap.Fill(miDataSet, "permitidos");
                sqlComando.Dispose();
                ban = true;
            }
            catch (MySqlException ex)
            { Console.Write(ex); }
            finally
            { closeConexion(); }
            if (ban)
                return miDataSet.Tables[0];
            else
                return null;
        }

    }
}


Una vez generada buscara en tu App.config de tu proyecto la variable ServerDb ques es la información que tiene que ver con la conexión y los datos de tu servidor. Esto lo puedes hacer directamente en el asistente, dando clic derecho en el proyecto, ir a la opción de propiedades y por ultimo dirigirnos a la opcion de settings, estando ahí puedes agregar una cadena de conexión que gracias al conector el asistente te guiara.


Una  vez que tengan la configuración púedes checar en el archivo app.config que tengas algo como esto, si es que te antecede el nombre de tu proyecto solo quitalo. Tendras algo como esto: 

     


Una vez que tengas esa configuración ya solo tienes que utilizar la clase en este caso supongamos que guardar los registros del cliente crearemos una clase como esta, y crearemos el metodo para utilizar dicha clase y simplemente vemos que es muy simple el trabajo con la clase . Note que heredamos al controlador del cliente la clase que maneja la conexión con esto solo tendremos que armar la sentencia o nombre del procedimiento que queramos ejecutar, agregar a una lista de parametros que necesitara la sentencia y solo mandarla a llamar


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

namespace BackEndMysql.Controller
{
    /// Heradamos para tener las conexión activa
    public class CtrlClientes:ManageConnection
    {
        /// 
        /// Metodo para buscar los registros de los articulos
        /// 
        /// retorna una tabla variable
        public DataTable FindAllResumen()
        {
            //sentencia que se ejecutara 
            String sentencia = "SELECT * FROM resumencliente";
            //Lista de parametros, si no se necesitan solo mandamos el elemento sin datos
            List parametros = new List();
           // mandamos llamar el evento de obtener lista a partir de sentencia y ya tendremos un DataTable con los datos
            DataTable tabla = getListSentenciaSQL(sentencia, parametros);
            return tabla;
        }


        /// 
        /// Metodo para agregar los clientes 
        /// 
        /// 
        /// 
        /// 
        /// 
        public bool addCliente(Cliente clienteDatos, int idusuario, string descripcion)
        {
            //El nombre del procedimiento 
            String procedimiento = "addcliente";
            //La lista de los parametros y el agregado de cada uno de ellos 
            List parametros = new List();
            parametros.Add(new MySqlParameter("@pnombre", clienteDatos.Cliente1.Nombre));
            parametros.Add(new MySqlParameter("@pdireccion", clienteDatos.Cliente1.Direccion));
            parametros.Add(new MySqlParameter("@ppoblacion", clienteDatos.Cliente1.Poblacion));
            parametros.Add(new MySqlParameter("@ptelefono", clienteDatos.Cliente1.Telefono));
            parametros.Add(new MySqlParameter("@pife", clienteDatos.Cliente1.Noife));
            parametros.Add(new MySqlParameter("@pidaval", clienteDatos.Aval.Idpersona));
            parametros.Add(new MySqlParameter("@plimite", clienteDatos.LimiteCredito));
            parametros.Add(new MySqlParameter("@pidusuario", idusuario));
            parametros.Add(new MySqlParameter("@pdescripcionmov", descripcion));
            Ejecución de la sentencia. 
            bool res = executeStoredProcedureUpdate(procedimiento, parametros);
            return res;
        }


       
    }
}


https://github.com/cobymotion/MysqlCSharp/


domingo, 20 de marzo de 2016

[Mysql] Como retornar el ID despues de una instrucción Insert







Mysql es un motor de base de datos que regularmente lo vamos a encontrar mas frecuentemente con la gran cantidad de servicios que utilizan este gestor, por lo que se nos presentan tareas que pensaria uno que es muy común sin embargo generan problemas. Muchas veces es necesario dentro de un procedimiento obtener el ultimo Id numérico para usarlo en la siguiente consulta en este caso te van algunas sugerencias. 

Tienes que la llave es numérica e incremental 

Cuando se tiene este caso, automaticamente sabemos que el Id es el numero mas grande podemos utilizar el método MAX para obtener el último registro

   Select MAX(idPruebas) from pruebas;


Tienes que la llave es autonumérica

Cuando tiene estas características puedes usar el Identity o la función Last_Insert_ID cualquiera de las dos te puede ayudar. 

   -- Aqui va el insert (necesario ejecutar identity despues del mismo) 
   SELECT @@identity AS id;


   -- Aqui va el insert (necesario ejecutar last_insert_id despues del mismo) 
   SELECT LAST_INSERT_ID();

En este caso, si ejecutas la siguiente operación que permite ingresar mas de un registro en una sola linea, regresara el del primer registro, ademas recordemos que last_insert_id maneja la sesión por lo que si estas en otra sesión no podrás recuperar el Id porque no esta guardado en la cache. 
   INSERT INTO pruebas(id, nombre) VALUES (1,"Uno"), (2,"Dos"), (3,"Tres");

Tienes un campo de Fecha/Hora que te permita ordenar 

En el caso de que tengas este campo y no tengas posibilidad de comparar numéricamente puedes usar un ordenamiento en inverso que permitirá traer el id. 
   Select idPruebas from pruebas order by hora desc limit 1;

Ninguna de las anteriores 

   Set @idVirtual:=0;
   Select @idVirtual:=@idVirtual+1, idPruebas from pruebas order by @idVirtual desc limit 1;

How to Get the Unique ID for the Last Inserted Row 

 

 

miércoles, 16 de marzo de 2016

[Web] CodeShare.io, publica tus fragmentos de código de manera sencilla


CodeShared es una aplicación web que permite pegar fragmentos de código de una manera muy sencilla y sin necesidad de crear una cuenta , podrás publicarlo y compartir los cambios en tiempo real. 


Entre las características mas llamativas que tiene, es que desde que entras a la pagina ya tienes un editor ya listo para empezar a escribir, en este caso tiene varias opciones en cuanto a la apariencia principalmente si estas acostumbrados a editores como lo son sublime, emacs y vim. Otra de las características especiales es que según lo que hagas en el editor se van viendo los cambios en tiempo real en las estaciones de los amigos con los cuales estas compartiendo el código, también importante es que puedes activar desde el sitio la vídeo llamada por lo que los usuarios pueden interactuar directamente con el código y su creador, que puede ya estar generado o se va generando, cosa que se en lo particular se me hace muy bien para la practica que me dedico que es la docencia. 

Ventajas 
   - No ocupas necesariamente tener una cuenta con las funciones básicas
   - Puedes cambiar la apariencia del área de trabajo
   - Las actualizaciones, selecciones y marcas son vistas en tiempo real 
   - Permite hacer notas referentes al código el cual se presentan como tip 
   - Maneja colores y separaciones basados en los principales lenguajes de programación 
   - Permite interactuar con los usuarios a través de las llamadas 

Enlace: 

Otra opción es : 


   



sábado, 5 de marzo de 2016

[MacOsX] Acentos en teclado ingles

Es una realidad que la las computadoras de apple no son necesariamente baratas aunque son una buena inversión, muchas veces cuidando la economía nos encontramos equipos que son importados por lo que la mayoría vienen con teclados incorporados en inglés (es decir sin ñ o acentos). Bueno aquí hay dos atajos que pueden ayudar.

Acentos

Para la letra acentuada sólo tendrás que poner esta combinación :

Option + e, letra a acentuar

En caso de la á sería así

Option + e, a

En el caso de las ñ la combinación será la siguiente

Option + n, minúscula/mayúscula de la n

En el caso de la ñ tendrá que ser así

Option + e, n

Nota: también en algunas aplicaciones NO TODAS en el caso de las letras acentuadas puedes dejar presionado la letra hasta que te aparezca un menú como el de ios que escoges el tipo de acento.

Si conoces alguna combinación te invitó a que agregues.