¿Cómo diferenciar un buen desarrollador de software en Ruby del resto?

abril 11, 2017

Rails != Ruby

La primer diferencia entre un buen desarrollador de software en Ruby de uno malo no tan bueno es que el primero sabe que una cosa es Ruby y otra cosa es Rails. Ruby es un lenguaje de programación y Rails es sólo un framework para desarrollo web con Ruby.

Si alguien usa indistintamente (como si fueran sinónimos) Ruby y Rails (o RoR) ya sabemos que no es un buen desarrollador de software en Ruby y desafortunadamente hay muchos. Si tú quieres ser un buen desarrollador de software en Ruby lo primero que debes tener claro es que Ruby existe sin Rails pero Rails no existe sin Ruby, es decir, puedes desarrollar software usando Ruby sin usar Rails (incluso puedes desarrollar una aplicación web usando Ruby sin usar Rails) pero no puedes usar Rails con un lenguaje de programación que no sea Ruby.

Sólo usa Rails para desarrollo de aplicaciones web si te ves obligado

Rails es sin duda el framework más famoso para desarrollo de aplicaciones web con Ruby pero eso no significa que sea el mejor, de hecho es un framework que definitivamente yo no recomiendo si se trata de hacer una aplicación web profesional y robusta

Si alguien quiere aprender Ruby, lo peor que puede hacer es empezar con Rails. ¿Por qué opino que Rails es tan malo?; voy a exponer sólo algunos puntos y se que a quienes son fans de Rails estos puntos (ni cualquier otro argumento) los va a convencer, pero este post no está dirigido a ellos, como dice el dicho “No hay peor ciego que el que no quiere ver”.

Muchos de los que usan Rails creen saber Ruby y en la mayoría de los casos no es así, ejemplo: en muchas aplicaciones desarrolladas con Rails encontrarán en el código el uso de blank?. Abran una sesión de Ruby y tecleen algo como “prueba”.blank? y verán algo como NoMethodError: undefined method `blank’ for “prueba”:String. Eso es porque blank? no existe en Ruby, es una extensión de Rails. Pero muchos de los que usan Rails no saben eso, porque creen que blank? es una instrucción válida en Ruby.

Otra de las cosas por las que Rails no es un framework recomendable es porque está muy ligado a un ORM llamado Active Record y es uno de los peores ORM que existen para Ruby, el mejor ORM para Ruby que yo he usado es Sequel, seguido de DataMapper.

Active Record no soporta llaves primarias compuestas, el default es que la llave primaria de las tablas en la base de datos este formada por un solo campo llamado id, de tipo entero y además autoincrementable. Si en la Universidad tuviste un profesor(a) de Bases de Datos que más o menos supiera de lo que estaba hablando sabrás que una base de datos en la cual la llave primaria de todas sus tablas esté formada por un solo campo que además se llame igual en todas y tenga que ser de tipo entero es una base de datos que no te encontrarás en producción en el mundo real; a menos que esa base de datos la haya creado alguien que no tiene idea de lo que es el diseño de base de datos, o que sea una base de datos que usa una aplicación hecha en Rails.

Supongamos que tienes que desarrollar una aplicación web para el área de control escolar de una institución educativa. Tienes una tabla de asignaturas en donde cada asignatura tiene una clave que es un campo alfanumérico, tienes otra tabla de estudiantes en donde cada estudiante tiene una matrícula que también es un campo alfanumérico. Lo lógico es que no existan dos asignaturas con la misma clave y tampoco existan dos estudiantes con la misma matrícula. ¿No sería razonable que la llave primaria en la tabla de asignaturas fuera la clave de asignatura y en la tabla estudiantes la llave primaria fuera la matrícula?. Aquí hay un post que ejemplifica lo que hay que hacer en Rails para usar una llave primaria que no sea de tipo entero Non-Integer primary keys in Rails

Y dado que la relación entre estudiantes y asignaturas es del tipo muchos a muchos, tendremos una tabla para saber qué estudiantes están inscritos en una asignatura o visto de otra forma, todas las asignaturas en las que está inscrito un estudiante; ¿no sería lo mejor que la llave primaria de esta tabla estuviera formada por los campos clave de asignatura y matrícula? y además esos campos serían también llaves foráneas ya que son heredados de las tablas de asignaturas y estudiantes respectivamente. Para cualquiera que sepa lo básico de bases de datos relacionales esto es obvio.

Aquí están los diagramas Entidad-Relación (obvio las tablas tendrían más campos además de los que se muestran en el ejemplo y la base de datos contendría otras tablas además de estas)

Base de datos bien diseñada

Base de datos estilo Rails

Hay una gema llamada composite_primary_keys cuyo propósito es solucionar esta situación, pero no funciona 100% como debería.

El argumento de los fans de Rails es que no “luches” en contra de las “convenciones” de Rails, el problema aquí es que esas “convenciones” están mal diseñadas, si para desarrollar una aplicación web usando rails tengo que seguir sus “convenciones”, lo que implica que haga un mal diseño de base de datos (entre otras malas prácticas) o si intento hacer un diseño de base de datos decente tengo que estarme peleando con la herramienta y “parches” para hacer que las cosas funcionen como deben entonces lo mejor es no usar Rails.

Existen otros frameworks para desarrollo web en Ruby, Sinatra por ejemplo es un framework que a diferencia de Rails, no se interpone en tu camino. Eso si, Rails puede hacer algunas cosas automáticamente por ti y en Sinatra tu tienes que programar todo, así que podemos elegir entre usar un framework con el que desarrollemos una aplicación en la que escribamos menos código pero muy probablemente esté mal hecha (si seguimos sus “convenciones”) o usar un framework en el que todo el código lo hayamos tecleado nosotros pero las cosas pueden estar bien hechas (si nosotros las hacemos bien).

Si eres flojo, no te gusta mucho programar, o si no te importa que la aplicación que vas a desarrollar utilice una base de datos mal diseñada por ejemplo, puedes usar Rails, o si en tu trabajo te obligan a usarlo porque son de los que se van con lo que la mayoría usa sin conocer realmente las implicaciones de esa decisión.

Otra muestra de porque en mi opinión Rails no es un buen framework: Estos son los archivos y directorios que tendrías si usas Rails para desarrollar una aplicación web que lo único que haga sea mostrar la hora actual

Para desarrollar la misma aplicación web usando Sinatra sólo necesitamos un archivo con el siguiente código

require 'sinatra'

get '/' do
“La hora acutal es: #{Time.now}”
end

Si usas Sinatra es más fácil que sepas exactamente qué código es Ruby y qué codigo pertenece a instrucciones del ORM (sin importar si el ORM que usas es Active Record, DataMapper, Sequel, etc.), un buen desarrollador de software en Ruby jamás intentará usar blank? si no está desarrollando en Rails; pero ningún buen desarrollador de software en Ruby usaría Rails, a menos que en su trabajo se vea obligado desde luego.

Si tú eres un buen desarrollador de software en Ruby pero te obligan a usar Rails en tu trabajo te aconsejo que busques otro trabajo o que trates de convencer a tus jefes de que usen otro framework, aunque eso muchas veces es más difícil.

Si tú eres un buen desarrollador de software en Ruby y por lo tanto no usas Rails, te felicito, no conozco a muchos

Si programas en Ruby y hasta ahora has estado usando Rails cuando necesitas desarrollar una aplicación web, espero que esta información te ayude a empezar a usar otro framework, yo uso Sinatra pero existen otros como Cuba, Padrino, etc. Te invito a que investigues y encontrarás muchas más buenas razones para no seguir usando Rails

Para algunos existen buenas razones para usar Rails, aunque esas razones para mi no son suficientes, algunas de estas razones son que hay mucha más documentación para Rails que para otros frameworks, la mayoría de las ofertas de trabajo para desarrolladores de software en Ruby son usando Rails, etc. Estos argumentos son ciertos, y el último de ellos de hecho es lamentable, pero si tu objetivo es aprender y ser un buen desarrollador de software en Ruby y no tanto usar x framework porque es el que la mayoría usa o porque con eso te será más fácil encontrar un trabajo, entónces probablemte tampoco para ti esos argumentos sean suficientes.

Motivos para seleccionar PostgreSQL en lugar de MySQL

febrero 14, 2017

MySQL es un RDBMS muy popular y como seres humanos tendemos a aplicar la política del menor esfuerzo, así que cuando se requiere desarrollar una aplicación en donde es necesario utilizar una base de datos, la mayoría piensa inmediatamente en MySQL.

Yo siempre he preferido PostgreSQL sobre MySQL, a continuación expongo algunos de los motivos

La configuración por defecto de PostgreSQL respeta todas las restricciones y validaciones que se indican en el diseño de la base de datos, MySQL no, uno debe configurar el servidor en modo “Strict SQL”, de lo contrario, se insertarán valores “ajustados”.

Por ejemplo, no importa si una tabla se creó con un campo numérico con una restricción de NOT NULL, la configuración por defecto de MySQL permitirá insertar registros en esa tabla aún cuando no se especifique un valor para ese campo, almacenando un cero como valor. Aún seleccionando el modo “Strict SQL”, MySQL no soporta check constraints.

El único de los nueve motores de almacenamiento de MySQL que soporta integridad referencial y transacciones es InnoDB (MyISAM no soporta integridad referencial ni transacciones), PostgreSQL sólo trae un motor de almacenamiento y soporta integridad referencial y transacciones.

PostgreSQL cumple con ACID (Atomicity, Consistency, Isolation, Durability) al 100%, MySQL no, el mismo manual de MySQL no indica “full ACID complaint” sólo dice “follows ACID”

PostgreSQL soporta más tipos de datos y estructuras que MySQL

El tamaño máximo por renglón en una tabla de PostgreSQL es de 1.6TB mientras que en MySQL es de 65,535 bytes

Algunas cosas que MySQL no soporta y PostgreSQL si:

  • Full Outer Joins

  • Window Functions

  • CTE (Common Table Expressions) para SQL recursivo

  • Table functions

  • JSON (JavaScript Object Notation)

Para extender el servidor, MySQL cuanta con un plugin para C/C++, PostgreSQL soporta C/C++, Java, .Net, Perl, Python, Ruby, Tcl, ODBC y otros más

PostgreSQL es mejor que MySQL en cuanto a consistencia de datos, estabilidad, mantenimiento y recuperación de datos.

Algunas lecturas recomendadas:

http://www.slideshare.net/anandology/ten-reasons-to-prefer-postgresql-to-mysql

https://www.compose.io/articles/what-postgresql-has-over-other-open-source-sql-databases/

Procesamiento de archivos con Ruby

febrero 1, 2017

En este post voy a mostrar un ejemplo de procesamiento de archivos con Ruby haciendo referencia a un caso real que se me presentó.

Se tiene un archivo csv llamado datos_clientes.csv y un archivo txt llamado solo_correos.txt; el archivo csv contiene una lista de clientes con datos como nombre, correo electrónico, teléfono, etc. y el archivo txt sólo contiene direcciones de correo electrónico.

El contenido del archivo datos_clientes.csv puede ser algo como esto:

NAME,E-MAIL
SALOMON RINCON TORRES,rtmex@yahoo.com
TOP SYSTEMS S.A DE C.V.,ventas@topsystems.com.mx
SALOMON RINCON TORRES,salomonrincon@softwarelibrepuebla.org
JOHN DOE,ejemplo@gmail.com

y el contenido del archivo solo_correos.txt podría parecerse a esto:

ventas@topsystems.com.mx
ejemplo@gmail.com
rtmex@yahoo.com

Imaginemos que ambos registros tienen cientos o miles de líneas

El objetivo es leer cada uno de los correos del archivo solo_correos.txt y buscarlo en el archivo datos_clientes.csv, si se encuentra, guardar el correo y el nombre del cliente al que pertenece dicho correo en un nuevo archivo csv (en este caso el archivo se llamará resultado.csv).

Aquí el código

require 'csv'

# Declara el encabezado para el archivo que se creará
encabezado = ['correo', 'nombre']
correo = nil
nombre = nil
num_linea = 0

CSV.open('resultado.csv', 'w', write_headers: true, headers: encabezado) do |archivo_nuevo|
    # Abre el archivo que contiene cada una de las líneas que se van a buscar en otro archivo
    File.open("solo_correos.txt") do |archivo|
         archivo.each do |linea|
             num_linea += 1
             puts "Linea #{num_linea} del archivo solo_correoa.txt = "+linea.strip
             # Abre un archivo delimitado por comas
             # En la segunda columna de este archivo, se busca la línea que se leyó del primer archivo
             CSV.foreach('datos_clientes.csv', headers: true) do |linea2|
                 if linea2[1].strip == linea.strip
                    puts "El correo "+linea.strip+" pertenece a "+linea2[0].strip
                    correo = linea.strip
                    nombre = linea2[0].strip
                    archivo_nuevo << [correo, nombre]
                    break
                 end
             end
         end
    end
end

El programa va mostrando el número de línea y su contenido conforme va procesando el archivo solo_correos.txt. Cada vez que en el archivo datos_clientes.csv encuentra el correo que leyó del archivo solo_correos.txt, muestra a que cliente pertenece dicho correo.

Lo que iría mostrando el programa mientras va procesando el archivo solo_correos.txt sería algo como esto:

Linea 3 del archivo solo_correos.txt = rtmex@yahoo.com
El correo rtmex@yahoo.com pertenece a SALOMON RINCON TORRES

Cuando el programa termina, tenemos un archivo csv llamado resultado.csv con 2 columnas, la primera contiene el correo electrónico y la segunda el nombre del cliente al que pertenece dicho correo.

Películas que recomiendo a mis estudiantes

diciembre 12, 2016

Estudiar una carrera universitaria relacionada con las tecnologías de la información implica retos que en ocasiones pueden causar frustración en algunas personas.

Además de temas relacionados con computación, tecnología, etc. soy aficionado a ver buenas películas (no necesariamente en el cine), así que para animarlos a superar esta frustración y como una forma de motivarlos, les recomiendo a los estudiantes ver las siguientes películas, todas basadas en casos de la vida real (dejo un enlace a la reseña de Rotten Tomatoes para que sepan más de que se trata la película y puedan ver un trailer)

The Man Who Knew Infinity (2016)

Es la historia del genio matemático Srinivasa Ramanujan

Homeless to Harvard: The Liz Murray Story (2003)

El caso de Liz Murray es una historia de superación personal increible

The Imitation Game (2014)

Todo el que en la universidad llevó la asignatura de automatas recuerda la máquina de Turing, y en inteligencia artificial el test de Turing. Esta película es la historia de Alan Turing

A Beautiful Mind (2001)

La historia del matemático John Nash, conocido principalmente por sus contribuciones a la teoría de juegos

La siguiente película no está basada en un caso de la vida real pero también sirve como motivación para buscar la superación académica

Good Will Hunting (1997)

Si ya las han visto todas, los felicito, tienen buen gusto cinematográfico, y si no las han visto, creo que no se arrepentirán si lo hacen

Software para music scheduling

agosto 12, 2016

Hace ya varios años, cuando estudiaba los últimos semestres de la licenciatura, recibí en la noche (como a las 11:00 p.m., yo ya me encontraba durmiendo) una llamada de un amigo mio que estudiaba los últimos semestres de ciencias de la comunicación y era el responsable de la programación de una estación de radio; la llamada era para pedirme ayuda porque tenía problemas con el software que tenían en esa estación para hacer el music scheduling. Pasó por mi y fuimos a la estación de radio, recuerdo que si tenía un bug el software, pero no tenían el código fuente, así que no me era posible arreglarlo.

Recuerdo que le comenté que además estaba muy mal diseñado, la interfaz de usuario era pésima y en tono de broma le dije que era mejor hacer uno nuevo que arreglar ese. No se si el lo tomó como broma o no pero me dijo que no era mala idea, a lo que yo contesté que el problema era que yo no sabía acerca de cómo programar una estación de radio; inmediatamente el replicó “pero yo si”. Así que el me explicó que es lo que hacía el software que tenían en esa estación, pero también me dijo qué cosas consideraba que le hacían falta o funciones que serían de gran ayuda.

Para cuando terminé de desarrollar la aplicación, aunque sólo fueron unos cuantos meses por las clases, etc. el ya no trabajaba en esa estación de radio. El sistema estaba terminado y el pensó que sería muy útil para cualquiera que estuviera a cargo de la programación de una estación de radio, así que empezó a ofrecerlo entre sus colegas. El software tuvo buena aceptación; incluso una estación en Nueva York compró una licencia.

Fui mejorando el software con la retroalimentación de los usuarios. Veinte años después, he desarrollado otro software para music scheduling que supera desde luego al de aquel entonces.

Es una aplicación web que desarrollé utilizando Ruby y Sinatra. Aquí les dejo una captura de pantalla, pero para más información pueden ir a la página http://www.topsystems.com.mx/SGP

playlist

La aplicación permite registrar varios usuarios para que hagan uso del sistema, cada uno con su propia contraseña. Si el servidor en el que se instala la aplicación tiene acceso a internet, cualquier usuario puede usar la aplicación desde cualquier lugar en donde se encuentre si cuenta con una computadora y conexión a internet.

Las máquinas cliente no requieren tener muchos recursos, puse un servidor de prueba (con 600 registros) y un amigo me hizo favor de probar remotamente la aplicación utilizando una raspberry pi y me comentó que funcionaba bastante rápido.

Dando mantenimiento al ventilador de la fuente de poder de una PC de escritorio

junio 12, 2016

En ocasiones las PC de escritorio hacen un ruido que proviene de la fuente de poder, generalmente el problema es el ventilador, les comparto un video que hice en donde muestro como darle mantenimiento para deshacernos de ese molesto ruido.

Honor a quien honor merece

mayo 23, 2016

Me asombra lo fácil que la mayoría de las personas sobrevaloran lo hecho por ciertos personajes en un área que desconocen; específicamente me refiero al campo de las tecnologías de la información. Pero más que asombro siento decepción al ver que incluso personas que tienen estudios en dicha área (computación, informática, etc.), estén titulados o no, no den la justa dimensión a los aportes hechos por estos personajes.

La mayoría de las personas vinculadas al área de TI han escuchado de Steve Jobs, pero son pocos los que saben quién fue Dennis Ritchie. Menciono específicamente a estas dos personas porque Steve Jobs murió el 5 de Octubre de 2011 y Dennis Ritchie murió tan sólo 7 días después, el 12 de Octubre de 2011. A pesar de que es mucho más importante y trascendente para el campo de las tecnologías de la información lo que hizo Dennis Ritchie que lo que hizo Steve Jobs, muchos medios hicieron muchos homenajes y destacaron lo que hizo Steve Jobs y casi ninguno habló sobre Dennis Ritchie.

Para empezar, Steve Jobs no fue un “genio de la computación” como algunos ignorantes lo han llamado, el cerebro en cuanto electrónica, computación, etc. en Apple era Steve Wozniak. Jobs tenía una gran habilidad para detectar necesidades no satisfechas en los consumidores principalmente de tecnología y también tenía buen gusto en cuanto a diseño. Pero eso desde luego no lo hace un “genio de la computación”, de hecho dudo mucho que supiera de programación de computadoras.

Muchos creen (erróneamente) que el ipod fue el primer reproductor de MP3 cuando lo cierto es que los reproductores de MP3 de marcas como Creative-Labs ya existían mucho antes (más de un año antes) de que existiera el ipod. Lo que Steve Jobs detectó es que había que pulsar muchas veces el botón + (más) o – (menos) para empezar a escuchar una canción específica, así que se le ocurrió que un reproductor de MP3 en donde pudieras empezar a escuchar la canción deseada de una forma más rápida tendría mejor aceptación y dejó a los ingenieros esa tarea (no fue a él a quien se le ocurrió la interfaz).

Como no faltan los fan boys de Apple o de Steve Jobs que para este punto estén enojados y asegurando que miento, dejo sólo algunos enlaces para que lean

http://ipod.about.com/od/understandingipodmodels/a/invented-ipod.htm

http://www.macworld.com/article/1163181/ipods/the-birth-of-the-ipod.html

Y así básicamente sucede con todas las cosas que muchos creen que “inventó” Steve Jobs. Debo aclarar que no tengo nada en contra de Steve Jobs y que reconozco (como ya mencioné) el talento que tenía para identificar si un producto iba a tener aceptación entre los consumidores (aunque también tuvo equivocaciones como con la computadora Lisa)

Para quienes no sepan qué hizo Dennis Ritchie, sólo les diré que fue quien creó el lenguaje de programación C y junto con Ken Thompson fue uno de los principales creadores del sistema operativo Unix.

Hoy en día muchos jóvenes admiran a ciertas personas sólo porque tienen mucho dinero y son “famosas”, yo prefiero admirar a las personas por la importancia de sus contribuciones a la humanidad, eso incluye no sólo el conocimiento que aportan sino también el ejemplo de vida que dan

Taller de redes de área local

mayo 20, 2016

En colaboración con http://www.softwarelibrepuebla.org/ estoy promocionando un curso/taller sobre redes de área local que voy a impartir en la ciudad de Puebla.

slack-imgs.comEsta es un breve desglose de lo que se tratará en el curso:

Capítulo 1

Veremos qué es una red informática y su clasificación de acuerdo con la distribución geográfica de la misma

Capítulo 2

Se describen los diferentes medios de transmisión que se utilizan en una red informática

Capítulos 3 y 4

Explicamos los estándares que existen para el armado de cables UTP y las reglas que se deben seguir para el cableado de una red informática. Aquí se incluye la primera práctica (armar cables de red)

Capítulo 5

Identificaremos los principales componentes de una red de área local a nivel de hardware

Capítulos 6 al 12

Hablaremos sobre las direcciones IP, qué son, las dos principales versiones de IP que existen, clases de direcciones IP, etc.

Capítulos 13 y 14

En estos capítulos se tratan las subredes

Capítulos 15 al 17

Explicamos que son y para que sirven TCP, DNS y DHCP

Capítulo 18

Finalizamos con redes inalámbricas, los diferentes estándares, seguridad y se hace la segunda práctica

Instalar Scratch 2 en Debian

abril 30, 2016

Scratch es un software diseñado por el MIT (Massachusetts Institute of Technology) para acercar a los niños al mundo de la programación de computadoras enseñándoles los principios de la lógica de programación https://scratch.mit.edu/about.

Instalar Scratch 2 Offline Editor en GNU/Linux puede ser un poco complicado para un usuario final debido a que Scratch requiere que esté instalado Adobe Air, y las últimas versiones de Adobe Air ya no son compatibles con GNU/Linux. La última versión de Adobe Air para GNU/Linux es la 2.6. En este post explico como instalarlo en Debian pero el procedimiento debería funcionar también en la mayoría de las distribuciones de GNU/Linux basadas en Debian, lo probé también en Point Linux y funcionó.

Empecemos:

Descargar Adobe Air 2.6 para GNU/Linux

Se puede descargar directamente de la página de Scratch https://scratch.mit.edu/scratch2download/

Descarga_AdobeAir

o de http://airdownload.adobe.com/air/lin/download/2.6/AdobeAIRInstaller.bin

Desde una terminal nos vamos al directorio en donde descargamos el archivo AdobeAIRInstaller.bin y le damos permisos de ejecución

chmod +x AdobeAIRInstaller.bin

Ejecutamos el instalador sudo ./AdobeAIRInstaller.bin

Nos aparece la siguiente ventana

instalacion_AdobeAir

Hacemos click en Acepto.

Si en lugar de que aparezca un mensaje diciendo “Instalación completada” nos aparece algo como “Adobe AIR could not be installed. Install either Gnome Keyring or KDE KWallet before installing Adobe AIR”, entónces hay que verificar que en /usr/lib se encuentren los archivos libgnome-keyring.so.0 y libgnome-keyring.so.0.x.x (en dónde x.x son números, por ejemplo 1.1, o 2.0). Si esos archivos no están ahí, seguramente están en /usr/lib/i386-linux-gnu, así que demos hacer enlaces simbólicos

Ejemplo suponiendo que el segundo archivo es libgnome-keyring.so.0.2.0

sudo ln -s /usr/lib/i386-linux-gnu/libgnome-keyring.so.0 /usr/lib

sudo ln -s /usr/lib/i386-linux-gnu/libgnome-keyring.so.0.2.0 /usr/lib

Ejecutar el instalador nuevamente (sudo ./AdobeAIRInstaller.bin)

Instalar Scratch

Descargar Scratch https://scratch.mit.edu/scratch2download/

Descarga_Scratch

El día de hoy que estoy publicando este post, el archivo que se descarga es Scratch-446.air

Desde la terminal, estando en el directorio en donde descargamos scratch, ejecutamos

sudo /opt/Adobe\ AIR/Versions/1.0/Adobe \AIR\ Application\ Installer /home/salomon/Scratch-446.air

Con eso estamos indicando que queremos instalar Scratch en el directorio /opt.

Aparece la siguiente ventana

Instalacion_Scratch

hacemos click en Instalar, aparece otra ventana en la que sólo debemos hacer click en Continuar y eso es todo. Queda instalado Scratch 2 Offline Editor

Algunas cosas que debes saber sobre Windows 10

marzo 29, 2016

A muchos usuarios de cualquier versión de Virus, perdón, Windows (la costumbre), anterior a la versión 10 les ha aparecido una ventana indicándoles que pueden actualizar a Windows 10 de forma gratuita. Antes de aceptar dicha “oferta” hay cosas que deben saber respecto a la “privacidad” que ya no tendrán al usar Windows 10, están resumidas en el post que se encuentra en el siguiente enlace https://www.maketecheasier.com/windows-10-privacy/

El artículo está en inglés, así que para los que no entiendan mucho, les traduzco (no textualmente) algunas partes:


Cortana (el asistente personal) recolecta información sobre sus correos electrónicos (no sólo las direcciones de correo sino también el contenido de los correos), el historial de su navegación en internet, etc. Toda esta información es recolectada por Microsoft quien en cualquier momento puede enviar dicha información a la NSA (National Security Agency), sin importar si el usuario se encuentra o no en los Estados Unidos de Norteamérica

Algo de lo más preocupante es que la funcionalidad conocida como telemetría no puede ser desactivada, la telemetría recopila datos y estadísticas, se especula que alguna información que recopila es qué aplicaciones se ejecutan, qué tan seguido se ejecutan, datos sobre la red como dirección IP, a qué redes se conecta, con qué dispositivos se conecta, etc.


Así que si Ud. aún no usa un sistema operativo que se distribuya bajo una licencia de Software Libre, espero que esto le ayude a tomar la decisión de hacerlo lo antes posible, hay muchas distribuciones GNU/Linux que son buenas opciones para un usuario final, y además la mayoría son gratuitas.

Pueden leer este artículo http://www.makeuseof.com/tag/making-linux-a-genuine-windows-replacement/

Pueden checar las siguientes distribuciones GNU/Linux: http://pointlinux.org/, https://www.linuxliteos.com/, https://linuxmint.com/https://www.deepin.org/ y si quieren una lista más completa pueden ir a http://distrowatch.com/