Cómo crear un bot para Telegram

por:

En esta entrada os vamos a enseñar a crear un pequeño bot para Telegram paso a paso, centrándonos en la configuración del mismo.

Instalando el servidor para el Bot

Lo primero de todo necesitamos crear la infraestructura con la que se va a ejecutar el bot, en mi caso voy a utilizar Node.js y el bot va a estar programado en JavaScript. Lo único que necesitamos es ejecutar el siguiente comando para que nos instale el módulo para poder manejar la API de Telegram:

npm install node-telegram-bot-api

Creando nuestro primer bot

Ahora lo que necesitamos es abrir Telegram y buscar al creador de bots de Telegram, para ello buscamos por @BotFather:

El padre de todos los bots de Telegram

Lo primero que deberíamos hacer es consultar la ayuda, para ver como funciona. Para ello simplemente hay que abrir una conversación con él y usar /help:
Leer más

Crear notificaciones en Windows 10

por:

Una de las primeras cosas que llama la atención de Windows 10 es su centro de notificaciones, algo que ya es muy conocido para los que usamos un smartphone pero que todavía estaba poco explotado en el escritorio. En este artículo os proponemos programar una notificación para vuestra aplicación

¿Qué es una notificación?

Las notificaciones no son otra cosa que una ventana de reducidas dimensiones, en las que se suele mostrar un pequeño texto informativo. Aunque con la llegad de Windows 10 se ha procedido a incluir mayor funcionalidad y por ello las denominan notificaciones interactivas, ya que permiten algo más que mostrar una información. Cómo se puede ver en la siguiente imagen:

Una notificación en Windows 10

Leer más

Aprender a usar git para versionar proyectos

por:

Aprender a usar git para tus proyectos

Uno de los programas que se ha convertido en imprescindible en el ámbito de la gestión de proyectos informáticos es Git. Esta utilidad fue creada en un primer momento para gestionar el código del kernel de Linux y al ver que funcionaba muy bien, se empezó a usar en multitud de proyectos.

Usos de git

Git nos permite tener en un servidor (local o remoto) todo el código fuente de nuestros proyectos de manera eficiente, lo que nos permite por ejemplo crear una versión de nuestro proyecto, modificarlo y poder volver a recuperar aquella versión que funcionaba. Además git está pensado para permitir el trabajo de múltiples usuarios en un mismo proyecto de manera concurrente, por lo que permite gestionar los cambios de una manera sencilla y añadiendo lo que nos interese.

En definitiva git es una herramienta muy potente y útil tanto para proyectos unipersonales como para gestionar equipos de desarrolladores.
Leer más

Escribiendo código a más velocidad

por:

El nuevo servicio para ganar velocidad a la hora de escribir el código

Una de las cosas que notan todos los usuarios cuando empiezan con la informática, es que hay que escribir gran cantidad de texto con el ordenador. Para ello siempre recomendamos que se haga un curso de mecanografía pero en algunos casos no siempre es suficiente.

La mecanografía del código

Si tenemos algo de experiencia escribiendo código, seguro que hemos notado que los caracteres que escribimos, son algo distintos de los caracteres que escribimos cuando redactamos un texto. Esto básicamente es debido a que en informática se usan mucho los símbolos.

El problema con el que nos encontramos, por lo menos al principio es que tenemos cierta soltura para escribir palabras, pero cuando tenemos que introducir símbolos como {}[] tenemos que mirar dónde están. Esto hace perder mucha velocidad en la escritura del código.

¿Por qué escribimos el código más lento?

Si alguna vez habéis visto el teclado de algún compañero extranjero, habréis notado que la distribución de teclas es ligeramente distinta, esto es debido a que la posición de algunas teclas se adapta al idioma del usuario. Pero esto que puede parecer algo trivial, es un problema para la hora de programar, ya que los símbolos de los lenguajes de programación están pensados para el teclado inglés donde es más fácil introducirlos.
Leer más

Primeros pasos en criptografía

por:

Una de las ramas más importantes hoy en día de la informática es la criptografía, que se encarga de la transmisión segura de la información. En este artículo queremos acercarnos a los principales conceptos y enseñaros un ejemplo de su uso.

Por qué es necesario cifrar los datos

Todavía hoy en día gran cantidad de personas piensan que no es necesario cifrar los datos, puesto que estos viajan de manera segura cuando son enviados. Esta idea es totalmente falsa, todos los datos (incluidas contraseñas) viajan de la misma manera por internet y esta manera consiste en enviarlos tal cual son. Debido a ello pronto se descubrió que no era muy seguro que en nuestro tráfico figurasen cosas como “user=pepe&pass=laPassDePepe” y se empezó a aplicar el cifrado de las comunicaciones.
El cifrado por lo tanto no es una cosa que haga la implementación de Internet por nosotros, sino que es un añadido por parte de los administradores web.

Sistemas criptográficos y funciones hash

Básicamente hay dos tipos de cifrados:

  • Cifrados de clave privada: en este caso tanto el emisor como el receptor comparten una clave con la cual se cifra y descifra la información que se quiere transmitir. Tienen como ventaja el ser más sencillos y rápidos a la hora de descifrar y cifrar, pero tienen el problema de que hay que compartir una misma clave. Un ejemplo de este tipo de sistema de cifrado es AES
  • Cifrados de clave pública: en este caso el emisor y el receptor tienen distintas claves. Sus claves son más complejas y están formadas por dos partes: una pública que se anuncia a cualquier emisor y una privada que nunca se envía. La ventaja radica en que no se necesita compartir una clave y por lo tanto se puede enviar datos por canales inseguros de forma segura. Las desventajas son principalmente el mayor coste computacional y la complejidad de este tipo de comunicaciones. En este caso encontramos RSA como máximo exponente de los sistemas criptográficos de clave pública.
    Leer más

Programacion paralela en C : Semaforos

por:

Te enseñamos a utilizar semaforos para la programación paralela
Uno de los contenidos fundamentales de la programación paralela es la sincronización con semáforos. Este concepto es el que os vamos a explicar en este artículo.

¿Qué es un semáforo?

Por si quedaba alguna duda, no son semáforos de tráfico, es un concepto usado en informática para indicar una estructura con unas características específicas.

Un semáforo es una estructura u objeto que nos va a permitir la sincronización multiproceso o multihilo de nuestro programa. Básicamente se basa en un contador, una función de incrementar el contador y otra de decrementar el contador. El control de acceso se realiza mediante el valor de ese contador, si el contador es negativo el hilo o proceso se suspenderá hasta que ese contador deje de ser negativo, momento en el cual el hilo o proceso empezará a ejecutarse automáticamente.

La implementación de los semáforos varía entre plataformas, por ejemplo en Linux están implementadas a nivel del sistema operativo dentro de los IPCs.

Si estáis más interesados en cómo funciona un semáforo por dentro podéis leer los problemas: problema del barbero y el problema de los filósofos.
Leer más

Programacion paralela en C : Acceso concurrente

por:

Te enseñamos como lidiar con el acceso concurrente en programacion paralela
En la entrada anterior os contaba que había realizado un pequeño truco para que el programa funcionase. Esto es debido al acceso concurrente.

Acceso concurrente

Esto de acceso concurrente a un recurso puede parecer a simple vista algo raro o complejo de entender, así que veámoslo con un ejemplo:
Si por ejemplo tenemos dos teléfonos fijos en casa, que los llamaremos A y B en la mayoría de los casos solo uno de los dos puede utilizar la línea para hablar. Así si A y B se ponen a llamar a la vez seguramente ocurrirá que se entrecruzan las conversaciones y hay interferencias entre las mismas. Por ello si A está llamando B tiene que esperar a que A acabe de usar la línea para luego utilizarla él.

Recursos y usuarios

Normalmente se suele utilizar estas dos palabras como terminología básica en el acceso concurrente:

  • Recursos: son los elementos, dispositivos o datos a los que se quiere acceder.
  • Usuarios: son las personas, programas o cualquier otro sistema que necesita acceder a un recurso.

Leer más

Usando números grandes en C

por:

Usando números grandes en C
Una duda que surgió hace tiempo en el foro pero a la que no me había enfrentado hasta ahora, es el uso de números grandes en C.

La necesidad de usar números grandes

En mi caso estaba trabajando con algoritmos de cifrado de datos, que usan números enteros de varios miles de bits, lo que implica que son números que no “entran” en ningún tipo de dato entero de C. Sin embargo estos números hay que almacenarlos de alguna manera, para ello surgen los números grandes.

¿Qué son los números grandes?

Básicamente es una implementación de un tipo de dato numérico, que permite trabajar con números de cualquier longitud, donde no hay un numero máximo que podamos almacenar. Para ello trabajan a con memoria dinámica y reescriben las operaciones aritméticas y lógicas.

Bibliotecas de números grandes

Como experiencia personal yo he trabajado con dos:

  • OpenSSL que trae un tipo de dato denominado BIGNUM que tiene implementado la mayoría de las operaciones (básicamente las que necesitan ellos para cifrar los datos).
  • GMP que traen una implementación completa de números grandes, siendo la biblioteca de este tipo más potente que he encontrado y una de las más usadas.
    Leer más

Programacion paralela en C : Memoria compartida

por:

Utilizando memoria compartida para la programacion paralela
Si el otro día hablábamos de los inicios en programación paralela, hoy os vengo a hablar del paso de datos cuando realizamos un programa con varios procesos. Como repaso del otro día podemos decir que hay dos tipos de intercambio de datos, memoria compartida ( todos acceden a la misma posición de memoria) y paso de mensajes (se envía los datos a un proceso en concreto).

¿Qué es la memoria compartida?

Cuando nosotros creamos un proceso, se reserva una zona de memoria con acceso exclusivo para nuestro proceso, de tal manera que si otro proceso quiere acceder a esta zona de memoria, generalmente nos dará un error. El error suele aparecer con cierta frecuencia cuando no manejamos bien los punteros en C y es el famoso segmentation fault.
Leer más

Programacion paralela en C : Inicio

por:

Los inicios de la programacion paralela en C para Linux

En esta serie de entradas que hoy empezamos, nos vamos a enfocar en la programación de sucesos paralelos en C. Este tipo de programación implica conocer una serie de conceptos especiales y saber cómo funcionan como los semáforos.

Programación paralela

La decisión de utilizar programación paralela parte de la base de que muchas veces queremos agilizar nuestros cálculos y para ello queremos usar todo el potencial de nuestra CPU. Actualmente seguramente muchos tendremos una CPU con varios núcleos, así que por qué no utilizarlos todos para agilizar los cálculos. Por ejemplo si queremos sumar (por fuerza bruta) el primer millón de números, tardaremos menos si distribuimos la carga entre varios núcleos que si hay que realizarlo todo de manera secuencial.

Conceptos de programación paralela

Básicamente hay dos maneras de realizar la programación paralela, mediante hilos o mediante procesos:

  • Todos los hilos comparten los recursos, es decir si nosotros cambiamos con un hilo el valor de una posición de memoria, ese valor nuevo lo tendrán el resto de hilos.
  • Todos los procesos realizan una copia de los recursos del proceso padre, especialmente de su memoria y sus variables. En este caso un valor que cambiemos en un proceso no tiene repercusión en otro proceso, son entornos totalmente aislados.

Leer más