El operador % en C

noviembre 29, 2017

A los que están iniciando con la programación en C, les dejo un video sobre el uso del operador mod (módulo) en C.

Anuncios

Curso de arreglos en C usando Linux

noviembre 25, 2017

Un tema que muchas veces es complicado para quienes están aprendiendo a programar en C es el manejo de arreglos. Aquí les dejo un enlace a un curso que tiene un precio en pesos mexicanos bastante accesible (menos de 10 dólares americanos) y ofrece acceso a los primeros dos capítulos de forma gratuita, chequenlo

Curso de arreglos en C

Este es uno de los videos del curso

Distribución GNU/Linux para niños

noviembre 3, 2017

Quienes me conocen (como los amigos de la Comunidad Software Libre Puebla) y quienes leen mi blog saben que la distribucíón GNU/Linux que uso generalmente es Debian. En el post anterior escribí sobre una distribución GNU/Linux que recomiendo a usuarios finales (basada en Debian).

Este post trata sobre una distribución GNU/Linux que recomiendo para niños; y si, adivinaron, también está basada en Debian. Se llama PicarOS y la encuentran en la página http://minino.galpon.org. De acuerdo a el texto que aparece en su propio sitio de Internet, está personalizada para la enseñanza primaria y es recomendable para niños de entre 3 y 12 años.

Conozco a una niña que aprendió a usar la computadora cuando tenía 2 años con la distribución GNU/Linux llamada DoudouLinux, también basada en Debian y ahora usa PicarOS. DoudouLinux también es bastante recomendable pero está menos actualizada que PicarOS, de hecho varios programas que vienen en DoudouLinux también vienen en PicarOS.

Estas dos distribuciones de GNU/Linux son una buena opción para que los niños aprendan a usar una PC, y que mejor que con un buen sistema operativo como GNU/Linux.

Distribución GNU/Linux recomendable para usuarios finales

octubre 4, 2017

Las distribuciones GNU/Linux que suelo instalar en servidores son Debian y CentOS (principalmente Debian porque me gusta más el sistema de paquetes .deb que el .rpm). Pero para una PC que va a ser utilizada por un usuario final suelo recomendar Point Linux que precisamente está basada en Debian.

Aquí les dejo un video de cómo descargar Point Linux y también un documento con capturas de pantalla para hacer una instalación.

Instalar PointLinux

Capturar texto en mayúsculas en un objeto Memo en C++ Builder

septiembre 30, 2017

En C++ Builder, los objetos “Edit” tienen una propiedad llamada CharCase, esta propiedad tiene por defualt el valor ecNormal. Si queremos que todo lo que se capture en ese Edit esté en mayúsculas, basta conque cambies el valor de su propiedad CharCase de ecNormal a ecUpperCase.

Los objetos “Memo” no tienen la propiedad CharCase (no entiendo porque); así que si deseamos que todo lo que se capture en ese Memo esté en mayúsculas, debemos poner el siguiente código en el evento OnKeyPress:

if (Key >= 97 && Key <= 122)
    Key = Key - 32;

Sabemos que el código ASCII de la letra “a” minúscula es 97, el de la “b” es 98 y así sucesivamente hasta llegar a la letra “z” minúscula que es 122. El código ASCII de la letra “A” mayúscula es 65, el de la “B” es 66 y así sucesivamente hasta llegar a la letra “Z” mayúscula que es 90.

Esto significa que si restamos al código ASCII de cualquier letra minúscula el número 32, obtenemos la misma letra pero en mayúsculas. Por eso si la tecla pulsada está entre 97 y 122, la convertimos al código ASCII resultado de restarle 32. Esto no funciona para las vocales con acento, pero la solución es agregar un switch para cada uno de esos casos. La función completa del evento OnKeyPress del objeto Memo en el cual queremos que automáticamente se capture texto en mayúsculas incluidas las vocales con acento queda de la siguiente forma (asumimos que el objeto se llama Memo1)

void __fastcall TForm1::Memo1KeyPress(TObject *Sender, char &Key)
{
 if (Key >= 97 && Key <= 122)
     Key = Key - 32;
 else
     switch(Key)
           {
            case 'á': Key = 'Á'; break;
            case 'é': Key = 'É'; break;
            case 'í': Key = 'Í'; break;
            case 'ó': Key = 'Ó'; break;
            case 'ú': Key = 'Ú';
           }
}

 

Diferencia entre un contador y un acumulador

agosto 19, 2017

En programación es común el uso de contadores y acumuladores, en este post explico la diferencia porque frecuentemente quienes están aprendiendo a programar confunden unos con otros.

Un contador es una variable que se utiliza para contar algo. Normalmente usamos un contador dentro de un ciclo y cambiamos su valor sumándole o restándole una constante, es decir, siempre se le suma o resta la misma cantidad. El caso más utilizado es incrementar la variable en uno.

En el siguiente programa en C se tiene un arreglo de 10 números enteros y se utiliza un ciclo con un contador para ver cuántas veces aparece el número 3.

Programa contador.c
#include <stdio.h>

int main()
{
 int numero = 3;
 int x=0, contador=0;
 int arreglo[10]={3,7,1,2,7,3,5,6,-2,7};
 
 // Recorre el arreglo y cuenta cuántas veces aparece el valor que contiene la variable numero 
 for (x=0; x<10; ++x)
     {
      if (arreglo[x] == numero)
          /* El nuevo valor de la variable contador va a ser igual a su valor actual más uno
             Se puede escribir como preincremento ( ++contador ) o como postincremento ( contador++ )
             pero para que sea bastante evidente, lo escribí de forma explícita ( contador = contador+1 )
          */
          contador = contador+1; 
     }
 
 printf("\n");
 printf("El número %d aparece %d veces en el arreglo\n", numero, contador);
 
 return 0;
}

El siguiente programa en C es un ejemplo de un contador que se va decrementando en uno; simula una cuenta regresiva.

Programa cuenta_regresiva.c
#include <stdio.h>

int main()
{
 int contador=10;
 
 // Imprime los números del 10 al cero
 while (contador >= 0)
       {
        printf("Despegue en %d\n", contador);
        contador = contador-1;
       }
 
 return 0;
}

Un acumulador es una variable que se utiliza para sumar valores. Al igual que el contador, se utiliza normalmente dentro de un ciclo pero cambiamos su valor sumándole una variable, es decir, no siempre se le suma la misma cantidad.

En el siguiente programa, utilizamos el mismo arreglo del programa contador.c, pero ahora no vamos a contar cuántas veces aparece un número x, sino que vamos a sumar todos los valores que aparezcan en el arreglo y que sean mayores a un número determinado.

Programa acumulador.c
#include <stdio.h>

int main()
{
 int mayores_que = 3;
 int x=0, suma=0;
 int arreglo[10]={3,7,1,2,7,3,5,6,-2,7};
 
 // Recorre el arreglo y suma todos los números mayores al valor que contiene la variable mayores_que 
 for (x=0; x<10; ++x)
     {
      if (arreglo[x] > mayores_que)
          /* El nuevo valor de la variable suma va a ser igual a su valor actual más el número 
             que se encuentra en la posición actual del arreglo
          */
          suma = suma+arreglo[x]; 
     }
 
 printf("Todos los números mayores a %d en el arreglo suman %d\n", mayores_que, suma);
 
 return 0;
}

¿Usas software libre (conscientemente)?

agosto 17, 2017

Muchas personas no saben qué es el software libre (piensan que significa software grátis), otros no han escuchado ese término y algunos lo han escuchado pero dicen que no usan software libre.

Sin importar en cuál de los grupos anteriores te encuentras, lo más probable es que si hayas usado software libre alguna vez, o incluso actualmente lo estés usando sin saberlo. Por ejemplo, si usas algún dispositivo (tablet, smartphone, etc.) que funciona con sistema operativo Android, entonces estás usando software libre ya que el sistema operativo Android se distribuye bajo la licencia Apache versión 2.0 y algunas otras partes del código bajo licencia LGPL, GPL versión 2.0 o algunas otras licencias de software libre.

A los escépticos les dejo este enlace https://www.android.com/everyone/facts/ en donde pueden verificar el Android Fact #18 que dice:

“The Android Open-Source Project (AOSP) is the core software stack behind the Android OS and consists of the operating system, middleware, and open-source apps like a phone dialer, email, and messaging. Mobile operators, device makers, and developers can use this to build devices and apps.”

Y este otro https://source.android.com/source/licenses en donde pueden ver la licencia del Android Open-Source Project (AOSP)

Me propuse hacer una encuesta para saber cuántas de las personas que leen mi blog saben lo que es el software libre, si lo usan o no y ¿por qué?.

Si usas software libre, no importa si es todo un sistema operativo como alguna distribución GNU/Linux, o algún otro software libre funcionando sobre un sistema operativo privativo, puede ser una suite de oficina como LibreOffice o sólo una aplicación como el VLC media player por favor deja tus comentarios. Y si no usas software libre, también me interesa mucho escuchar las razones, puede ser simplemente por desconocimiento, de cualquier forma agradezco el tiempo que te tomes para contestar la encuesta, sobra decir que puedes expresar libremente tu opinión siempre que lo hagas de manera respetuosa.

¿Cómo identificar un sistema de videovigilancia confiable?

agosto 15, 2017

Últimamente la demanda por los sistemas de videovigilancia ha crecido y cada vez es más frecuente ver personas y/o empresas que venden e instalan estos equipos. Hay una gran variedad de marcas y la clave para elegir el sistema de videovigilancia con el que obtengamos el mejor costo-beneficio es tomar en cuenta los siguientes puntos:

  1. Determinar cuál es la información que más me interesa obtener de las imágenes que capture el sistema de videovigilancia que quiero instalar, ya que de esto dependerá el sistema de grabación y el tipo de cámaras. ¿Me interesa únicamente poder determinar cuántas personas o vehículos hay en el área de cobertura de la cámara?, ¿Es importante para mi poder identificar a las personas cuando están a cierta distancia de la cámara?, etc.
  2. Lo barato puede salir caro. No tiene caso comprar el sistema de videovigilancia más económico que encuentre en el mercado si no va ser el que satisfaga mis necesidades, que falle después de unos cuantos meses, que la calidad del video sea mala, etc. Por eso debe considerar lo siguiente:
  • Aunque los equipos de grabación utilizados en los sistemas de videovigilancia (ya sea DVR o NVR) utilizan un disco duro como medio de almacenamiento, se debe utilizar un disco duro especialmente diseñado para ser utilizado en un sistema de videovigilancia. Estos discos duros son idénticos en apariencia a los discos duros utilizados en las computadoras de escritorio, la diferencia radica en que los discos duros especiales para videovigilancia están diseñados para funcioanr 24/7 (las 24 horas los 7 días de la semana) y alcanzar altas temperaturas. Desde luego un disco duro diseñado específicamente para ser utilizado en un sistema de videovigilancia es más caro que un disco duro estándar, aún cuando ambos sean de la misma capacidad.
  • Que el cable que van a utilizar para la instalación sea 100% cobre, no es recomendable usar cable CCA (Copper Clad Aluminum) ya que aunque es mucho más barato, se corre el riesgo de que el video no sea de la mejor calidad que los equipos (el DVR o NVR y las cámaras) pueden alcanzar debido a que la red experimentará una mayor pérdida de paquetes (entre otras cosas). Si están interesados en más de los detalles técnicos vayan a este enlace What CCA Wire Can Do To Your Network
  • Debe utilizarse cable especialmente diseñado para intemperie cuando se instalan cámaras en el exterior (obviamente la cámara también debe estar diseñada para poder instalarse en exteriores). He visto infinidad de instalaciones en las que se instalaron cámaras en exteriores y a pesar de que la cámara si es para exteriores, se utilizó cable que no es para exteriores. Recién instalado funciona bien, pero eso puede durar unos meses o poco más de un año dependiendo de las condiciones ambientales del lugar de la instalación, ya que el cable que no está diseñado para exterior no soporta el sol y la lluvia por mucho tiempo. Personalmente he hecho instalaciones ya sea de enlaces punto a punto, punto-multipunto o de sistemas de videovigilancia que llevan más de 5 años y el cable para exteriores instalado no ha causado problema alguno. Al igual que en el caso de los discos duros especiales para videovigilancia y el cable 100% cobre vs cable CCA, el cable para exteriores cuesta más que el cable que no es para exteriores, pero se debe considerar que es más caro volver a cablear cada año (además del costo del nuevo cable, hay que tomar en cuenta el costo de la mano de obra) que invertir al principio de la instalación para no tener problemas después.
  • Cuando compare el costo de las cámaras, no sólo tome en cuenta la resolución de las mismas, sino además la tecnología y funciones extra que incorporan, como DNR (Digital Noise Reduction), WDR (Wide Dynamic Range), etc. ¿Por qué esto es importante?, vea la diferencia de la imágen en una cámara con el WDR encendido y apagado https://www.youtube.com/watch?v=sYLc6U4X8PU

No se deje engañar con el argumento que le dan los vendedores de los tianguis en donde comercializan tecnología “es lo mismo pero más barato” y también tome en cuenta lo aquí expuesto antes de comprar su sistema de videovigilancia en el club de precios en donde compra su despensa.

Les dejo otros enlaces de interés:

http://www.topsystems.com.mx/Videovigilancia/

https://www.facebook.com/Top-Systems-570057519841810

Libre no significa “gratis” ni “sin licencia”

junio 1, 2017

Es asombrosa la cantidad de personas relacionadas con el área de tecnologías de la información (ya sea estudiantes, profesionales y académicos) que aún piensan que “Software Libre” es sinónimo de software gratis o que el software libre no tiene licencia.

Ya comenté en uno de los primeros post que escribí en este blog (Software Libre, Open Source, Freeware) las características que debe cumplir cualquier software para ser considerado software libre, y entre esas características no se incluye el que tenga que ser gratis o que tenga que distribuirse sin licencia.

Hay muchas licencias bajo las que se puede distribuir software libre, probablemente la más conocida es la GPL (General Public License). Las licencias de software libre se pueden clasificar en dos tipos: con copyleft y sin copyleft.

Un software que tiene licencia con copyleft obliga a que las modificaciones o trabajos derivados del mismo se distribuyan bajo la misma licencia y por lo tanto sean también software libre (una vez más, esto no implica que se distribuya de forma gratuita).

Un software que tiene licencia sin copyleft permite que las modificaciones o trabajos derivados del mismo se distribuyan bajo una licencia diferente, incluso bajo una licencia que haga que dicho trabajo derivado ya no sea software libre (no cumpla con las 4 libertades del software libre) como el caso de las licencias tipo BSD por ejemplo.

Es importante respetar la licencia del software libre que usamos (sobre todo si haces modificaciones o trabajos derivados), sin importar si lo obtuvimos de forma gratuita o no. Desafortunadamente hay personas y empresas que por ignorancia o deliberadamente ignoran las licencias con copyleft y esto puede hacerlos acreedores a una demanda, como un caso reciente en donde la empresa CoKinetic Systems, Corp. demandó a Panasonic Avionics Corporation por $100 millones de dólares (http://www.4-traders.com/PANASONIC-CORPORATION-6492473/news/Panasonic-CoKinetic-Systems-Corp-files-Monopolization-Claim-Against-Panasonic-Avionics-Corporati-23976492/) por violar deliberadamente la licencia GPL.

Para más información sobre licencias bajo las que se puede distribuir software libre, consulten https://www.gnu.org/licenses/license-list

Una licencia sin copyleft aún más permisiva que las tipo BSD es la licencia “Do What The Fuck You Want To Public License (WTFPL)” que aunque si califica como una licencia de software libre, no es recomendable.

Uno de los objetivos del proyecto gpl-violations.org  es hacer del conocimiento público los casos de usuarios que violan la licencia GPL específicamente, pero el objetivo más importante es  sin duda hacer que las empresas que distribuyen trabajos derivados de software libre que tiene licencia GPL entiendan que dicho software no es del dominio público y que deben cumplir los términos de la licencia. Afortunadamente varias demandas interpuestas por esta organización han tenido éxito y los infractores han tenido que pagar multas más los costos del juicio.

El Software Freedom Law Center proporciona asesoría legal a la comunidad de desarrolladores de software libre y open source.

¿Son buenos los hackathones?

mayo 6, 2017

Tiene algún tiempo que los hackathones están de moda, les recomiendo que lean WTF is a hackathon?

En mi opinión los hackathones aportan diversión a los asistentes y una forma de socializar y conocer a otras personas con interéses comunes pero tienen muchas cosas negativas.

El desarrollar un proyecto de TI de mediana calidad (ya sea desarrollar una aplicación web, una aplicación móvil, una aplicación de escritorio, un gadget, o cualquier hardware) es imposible en 48 horas o un fin de semana y menos si no duermes (si tu mente y tu cuerpo están cansados, no tienen un rendimiento óptimo).

Un hackathon fomenta el escribir código de mala calidad, malos hábitos alimenticios, malos hábitos de trabajo (no descansar lo suficiente) y trabajar bajo presión. No dudo que muchos de los jóvenes que asisten a un hackathon crean que están aprendiendo mucho, ya sea de tecnología o de cómo es la vida laboral de alguien que se dedica a desarrollar software, pues dejenme decirles que están equivocados, un buen proyecto de desarrollo de software implica hacer el análisis y diseño del sistema antes de teclear una sola línea de código, hacer un buen diseño de base de datos y seleccionar la plataforma y herramientas de desarrollo que ayuden a obtener un software de buena calidad al final.

Se deben hacer pruebas conforme se va avanzando en el desarrollo del sistema y no sólo hasta el final, además de que se debe ir documentando el código.

Hackathon 2013 taking place at Politehnica University of Bucharest

Exsiten muchas personas que desarrollan software como se hace en un hackathon, pero ese software está muy lejos de ser algo de buena calidad.

No falta quien argumente “pero la app x o z salió de un hackathon” (reemplazar x o z con el nombre de cualquier app muy popular y mayormente usada por jóvenes). El hecho de que un software sea muy popular no significa que sea de calidad, un caso muy concreto es el sistema operativo Windows, que es el sistema operativo más usado en el escritorio y todos sabemos que es de pésima “calidad”, el que en pleno año 2017 crea que Windows es un software de buena calidad tiene un concepto muy equivocado de lo que es la calidad.

Si asisten a un hackathon no imiten las malas prácticas que ahí verán, la mejor forma de aprender es adquiriendo conocimento formal (generalmente en la Universidad) y llevándolo a la práctica (adquirir experiencia laboral, no necesariamente trabajando en una empresa o para alguien más).

Si quieren ser ricos y famosos probablemente lo logren asistiendo a un hackathon y desarrollando la próxima killer app, pero si quieren aprender realmente, no pierdan su tiempo asistiendo a esos eventos.

Si su interés es pasar un fin de semana con algunos de sus amigos programadores tomando cerveza, comiendo comida chatarra y develarse mientras programan sin preocuparse por hacerlo bien y de paso tener la posibilidad de conocer a otras personas, entónces asistir a un hackathon puede ser una buena opción.