WinAPI en aplicaciones de escritorio


Cuando estamos desarrollando aplicaciones de escritorio con tecnologías Microsoft lo hacemos con WPF o WinForms, pero muchas veces necesitamos acceder a funcionalidades extra que nos proporciona Windows ya que este cuenta con un gran volumen de funciones para los desarrolladores el cual podemos tener acceso desde las entrañas de Windows hasta los más altos niveles como es la interfaz gráfica, ya sea modificandola a nuestro acomodo o simplemente porque el desarrollo lo necesita.

En el desarrollo de Malware es muy común hacer uso de WinAPI porque como ya les comentaba se puede tener acceso a un nivel muy cercano de Kernel de Windows, hacer estos movimientos en aplicaciones con C++ y C es muy sencillo ya que Windows proporciona los headers para usarlos de manera muy cómoda; el problema viene cuando queremos acceder a estas funcionalidades desde C# o Visual Basic ya que por su propia arquitectura no acceder de manera convencional estas API.

Para entrar un poco en detalle, las API de Windows están contenidas en unas DLL ya compiladas ya que casi todas las aplicaciones que ves en la pantalla (si estás en Windows) acceden a estas y para hacer llamados a código nativo desde aplicaciones administradas como es el caso de las aplicaciones de .Net, me explico, acceder a funciones de DLL’s construidas en lenguajes como C++ (No Visual C++)  o C para ser usadas en aplicaciones que funcionan bajo el CLR

Sin ir más allá en teoría ya que si estás en este post es porque algo debes saber de WinAPI, les presento un portal Web donde recopilan todas las funcionalidades y ponen el código en C# y VB de como debe ser usado, en las más comunes ponen ejemplos de uso.

http://www.pinvoke.net/

How To: Escalar imágen manteniendo proporciones – JQuery


La mayoría de veces tenemos que poner un listado imágenes de manera estándar pero la peor práctica es volver todas estas imágenes al mismo tamaño una a una en un editor de imágenes, ya que por lo general estas vendrán de algún servicio web o directamente desde los clientes.

Teniendo esta necesidad me puse a la tarea de buscar en Internet y mejoré un código muy bueno que encontré en la siguiente Web: http://ericjuden.com/2009/07/jquery-image-resize/ Sigue leyendo

Primeros pasos en Node.js


Casi siempre que tengo que escribir una nueva App con Node.js me toca buscar los pasos iniciales ya que mi frecuencia de desarrollo en esta tecnología no es alta, por lo que decidí re-copilar todos estos primeros pasos que desde mi perspectiva son los más generales.

¿Cómo instalar Node.js en Ubuntu 14.x?

Desde la consola ya sea directamente o un terminal PuTTY escribir los siguientes comandos:

sudo apt-get update
sudo apt-get install nodejs
sudo apt-get install npm

Cabe aclarar que la máquina virtual debe tener conexión a Internet.

¿Cómo instalar Express?

Sigue leyendo

How To: Hacer petición POST con contentType x-www-form-urlencoded


Muchas veces tenemos que hacer peticiones con distintos contentType, como es el caso de x-www-form-urlencoded, para esto la vez pasada se había hecho con $.ajax(…) pero si se había hecho un test se podrá ver que no funciona; gracias a Esteban Ladino (un compañero del trabajo) pude ver la luz para esta situación la cual es hacer uso de XMLHttpRequest, aquí el ejemplo.

var nombre = "Camilo";
var apellido = "Rodriguez";
var xmlhttp = new XMLHttpRequest();
var url = 'http://...com/api/../';
var params = "Nombre=" + nombre + "&Apellido=" + apellido;

xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        // Refresh output

    }

    if (xmlhttp.readyState == 4 && xmlhttp.status == 400) {
        // Log
    }
}

xmlhttp.open("POST", url, true);

xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send(params);

 

How to: Habilitar acceso remoto a MongoDB


Por defecto MongoDB no viene con el acceso remoto habilitado, esto ya sea para administrarlo desde una interfaz gráfica o desde alguna aplicación externa, para ello se necesita cubrir 3 pasos.

  1. Abrir el archivo mongodb.conf y buscar la línea que dice bind_ip y comentar la ip que trae por defecto, los comentarios son con una almohadilla o numeral #
  2. Reiniciar el servicio de MongoDB
  3. Conectar la interface!

Si se está en linux y con una versión mayor o igual a la 2.6.3 sería de la siguiente manera:

How To: Consumir REST service desde WebAPI en Frontend


Este Snippet utilizará 2 verbos HTTP que son GET y POST, por lo general son los que más se utilizan.

GET

En ASP .NET Web API se debe tener el controlador de la siguiente manera

public IEnumerable<string> Get()
{
    return new string[] { "value1", "value2" };
}

Donde IEnumerable es el tipo de dato que se desea obtener, entre estos caben los tipos de datos estándares como:

string
int
double
float
etc...

Sin embargo se pueden obtener objetos definidos, este es el caso del uso de bases de datos con Entity Framework.

Como por ejemplo, se requiere obtener un usuario filtrado por cédula o identificador de país

public Usuario Get(string id)
{
    Usuario usuario = _usuarios.GetUsuario(id);
    if (usuario == null)
    {
        usuario = new Usuario() { Cedula = "-1", Contraseña = "N/N", Id_Usuario = -1 };
    }
    return usuario;
}

Ahora solo nos queda ir a nuestro frontend donde queremos consumir, para esto usaremos Ajax y JQuery.

var idUsuario = '1023925417';
 $.getJSON("/api/APIUser/" + idUsuario)
.done(function (data) {
    alert('Ud es ' + data.Id_Usuario);
});

POST

En este caso la variable de datos se llama marcador_usuarioData y contiene información en JSON de la manera.

En la petición definimos que es de tipo POST, una url hacia donde queremos apuntar, los datos, el tipo de contenido y tipo de dato.

var marcador_usuarioData = JSON.stringify({
    Id_Usuario: idUsuario[0],
    Id_Partido: id,
    Marcador_Equipo_A: marcadorA,
    Marcador_Equipo_B:marcadorB
});
$.ajax({
    type: "POST",
    url: "/api/APIGame",
    data: marcador_usuarioData,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    processData: true,
    success: function (data, status, jqXHR) {

        console.log('Ok:' + data);

    },
    error: function (xhr) {
        alert(xhr.responseText);
    }
});

Y en el código de backend debe definirse el tipo de dato conocido para si mismo, por ejemplo mirar la estructura con la que se envía “marcador_usuarioData” y mirar como se compone el controlador y la clase

public void Post(Marcador_Usuario item)
{
    // something code
}
...
public partial class Marcador_Usuario
{
    public int Id_Usuario_Marcador { get; set; }
    public int Id_Usuario { get; set; }
    public int Id_Partido { get; set; }
    public Nullable<int> Marcador_Equipo_A { get; set; }
    public Nullable<int> Marcador_Equipo_B { get; set; }
    public Nullable<int> Puntos { get; set; }
}