Rust Essentials, reseña del libro

Dicen que a las personas importantes les pide la gente su opinión. Así que no entiendo porque tengo ahora que dar opiniones…

Hoy voy a hablar del libro Rust Essentials de Ivo Balbaert. En primer lugar quiero agradecer a la editorial Packt Publishing por haber contado conmigo a la hora de valorar este libro para que todos vosotros conozcais algo más acerca de él.

RustEssentials

Rust Essentials es un libro de introducción al lenguaje de programación Rust, lenguaje del que ya he hablado anteriormente. El libro está en inglés y asume que no conoces nada o muy poquito de Rust pero sí que has programado con anterioridad. Así pues, el libro no explica conceptos de programación tales como funciones o variables sino que directamente expone sus peculiaridades. Es recomendable haber programado C para entender algunas partes del libro al 100%.

El libro se estructura en 9 capítulos, a saber:

  • Starting with Rust
  • Using variables and types
  • Using functions and control structures
  • Structuring data and matching patterns
  • Generalizing code with high-order functions and parametrization
  • Pointers and memory safety
  • Organizing code and macros
  • Concurrency and parallelism
  • Programming at the boundaries

En estos temas se tratan desde cosas tan triviales como los comentarios (que no lo son, pues según explica el libro, puedes hacer comentarios de RustDoc, que serán compilados como documentación en HTML y tienen marcado Markdown) hasta la gestión multihilo de Rust, para aprovechar uno de los 3 apartados en los que se enfoca Rust: la concurrencia.

Veremos la magia de Rust, respetando la convención de estilo (esto es importante, no vaya a pasar como con JavaScript) y las características que hacen de Rust un gran lenguaje de programación. El libro contiene ejercicios e incluso analizarás porque en determinados lugares obtenemo un error de compilación.

Hacen falta un tiempo para que dejes de ver al compilador de Rust como un protestón sin sentido y lo empieces a ver como tu mejor amigo en la programación

El libro también se adentra a explicar las partes de programación funcional de Rust, no sin antes explicar las closures y las funciones de primer orden. Más tarde nos adentramos en las traits, que posibilitan la programación orientada a objetos pero no como se plantea desde C++, C# o Java. En Rust, es mucho más flexible y unido a las funciones genéricas podemos evitar la repetición del código en un 100%. DRY (don’t repeat yourself). El capítulo 6 es interesante y quizá algo denso para alguien que venga de lenguajes donde la gestión de memoria es administrada por una máquina virtual o intérprete. No es difícil, pero hay que saber las diferencias. Rust tiene muchos tipos de punteros y he de decir que este libro los explica mejor que mi antiguo libro de C de Anaya.

Rust

Más tarde se ve el sistema de módulos y la creación de macros en Rust. Las macros en Rust son muy potentes, más que en C donde también son bastante usadas. El capítulo 8 se dedica por completo a los hilos y la gestión de datos entre distintos hilos. El capítulo 9 nos explica cosas interesantes pero que no tienen mucha densidad y no se merecen un capítulo propio como la intercomunicación entre C y Rust o instrucciones en ensamblador directamente en el código.

Me gusta que tenga ejercicios para practicar (las soluciones están en GitHub), que use las herramientas disponibles de Cargo, que explique porque un determinado código no compilará, que hable de como desarrollar tests unitarios y de que explore todas las características del lenguaje de manera incremental, muchas veces modificando ejemplos anteriores.

No me gusta que quizá sea un libro muy rápido que presupone algunos conceptos y que casi no explora la librería estándar mas que para hablar de ciertas traits muy útiles y la gestión de hilos. No habla en ningún momento de como leer archivos por ejemplo aunque en el anexo menciona librerías para leer distintos tipos de archivos.

En definitiva es un libro que recomiendo a todos aquellos que ya tengan experiencia programando y quieran aprender un nuevo lenguaje, lleno de peculiaridades diseñadas para trabajar en: velocidad, seguridad y concurrencia. No se lo recomendaría a alguien que no hubiese programado nunca.

NexCono, tu sitio viral preferido

NexCono es uno de mis últimos proyectos. Se trata de un sitio de noticias fácilmente viralizables (eso creo yo) pero bajo mi propia línea editorial. Todo el contenido es propio. Dispone de aplicación para Firefox OS y Ubuntu Phone.

NexCono

NexCono se ha dividido en las siguientes secciones:

Y podemos encontrar artículos muy interesantes y variados como los Pensamientos de Thomas Edison en París o una demostración interactiva del teorema del seno

Participación de los usuarios

Para NexCono es muy importante la participación de los usuarios. Todas las páginas tienen comentarios de Disqus. Además de tener un formulario para proponer temas. NexCono dispone de un newsletter para recibir las novedades del sitio directamente en tu buzón de correo. Las secciones Tests y Preguntas están diseñadas especialmente para fomentar la participación

Monetización

NexCono ha sido diseñado para tener el menor coste posible de infraestructura. De hecho, ahora mismo no estoy pagando nada. Uso AppEngine de Google como hosting pero solo como almacenamiento estático pues el sitio está construido en Jekyll. Mucha gente me hubiese recomendado WordPress, pero decidí quedarme con Jekyll por los costes y porque es una plataforma que ya domino. Los ingresos son por la publicidad. Estoy probando muchas combinaciones de anuncios: Adpv, AdPrimary, PropellerAds, ExoClick, YesAdvertising, Anonymous Ads, etc aunque todavía no tengo muy claro con quien quedarme.

Mi pregunta

Os pido a vosotros, los lectores de esta entrada que entreis a NexCono y me digais lo que debería mejorar en cualquier apartado (diseño (la fuente, la disposición), contenido (más largo, más corto, otros temas, más imágenes), categorías, etc) para así poco a poco ir mejorando ese portal.

Easter egg en Linux: la syscall reboot

Ayer me encontré con un curioso easter egg en el interior de Linux que no conocía. Se trata de la syscall reboot usada para reiniciar el ordenador. Primero veamos lo que nos dice el manual sobre reboot

man-reboot

Tiene algo interesante. Los dos primeros parámetros para llamar a reboot se llaman magic y magic2 y no son muy importantes realmente porque reboot también admite una versión sin esos parámetros.

Si leemos algo más podemos ver que magic debe ser igual al valor de LINUX_REBOOT_MAGIC1, que es 0xfee1dead (feel dead ?) y que para magic2 se admiten varios posibles valores

  • LINUX_REBOOT_MAGIC2 que es 672274793
  • LINUX_REBOOT_MAGIC2A que es 85072278
  • LINUX_REBOOT_MAGIC2B que es 369367448
  • LINUX_REBOOT_MAGIC2C que es 537993216

¿Por qué la constante primera está en hexadecimal y el resto no? ¿Qué pasa si pasamos los posibles valores de magic2 a hexadecimal?

672274793 = 0x28121969

85072278 = 0x05121996

369367448 = 0x16041998

537993216 = 0x20112000

¿A qué se parece? ¿Serán fechas? Veamos la primera. 28 de diciembre de 1969. ¿Qué ocurrió? ¡Pues que nació Linus Torvalds ese día! Y el resto de fechas son las fechas de nacimiento de sus hijas. Así que ya sabes, cada vez que reinicias en Linux estás usando fechas de nacimiento de la familia Torvalds.

Torvalds

 

Un repaso por las aplicaciones de Haiku

Haiku dispone de un catálogo pequeño pero interesante de aplicaciones que merecen la pena ser vistas. Voy a probar estas aplicaciones en una versión nightly recién descargada del sitio de Haiku (hrev49344)
Solo voy a usar los paquetes binarios. En Haikuports hay todavía más software, pero requiere compilación y puede estar desactualizado.

HaikuDepot

Se trata de la tienda de aplicaciones de Haiku. Similar a Ubuntu Software Center. Desde aquí podemos instalar cientos de aplicaciones ya compiladas para Haiku. Además permite comentar los progranas con una valoración.
HaikuDepot dispone de una versión web

HaikuDepot

HaikuDepot2

Instalar

HaikuDepot ya viene instalado en Haiku

WonderBrush

WonderBrush se trata del editor gráfico de Haiku para imágenes de mapa de bits como PNG, JPEG o BMP.

La ventana principal puede contener cualquier número de documentos llamados Canvas. Un canvas tiene asociado un nombre y una resolución por píxel además de muchas otras propiedades. También referencia a dos archivos, uno como formato de exportación y otro como formato nativo.
Cada canvas puede tener cualquier número de capas, actualmente representadas como una lista. Cada capa representa una imagen del tamaño del canvas. Dependiendo del método de fusión de capas, estas son unidas para formar la imagen final.

WonderBrush WonderBrush2

Instalar

Lo puedes encontrar en HaikuDepot o

Icon-O-Matic

Icon-O-Matic es la aplicación de gráficos vectoriales nativa de Haiku. Trabaja con el formato HVIF (Haiku Vector Icon Format) y está pensada para diseñar iconos principalmente. También exporta a PNG y SVG.

IconOMatic

Instalar

Ya viene instalado por defecto en Haiku

WebPositive

WebPositive es el navegador web por defecto en Haiku. Usa una versión especial de WebKit adaptada a Haiku y algo retrasada en funcionalidad.

haiku-webpositive

MultiversosHaiku

Instalar

WebPositive ya viene instalado

PoorMan

PoorMan es un ligero servidor HTTP totalmente gráfico.

PoorMan

Instalar

PoorMan ya viene instalado por defecto en Haiku

Vision

Vision es un cliente IRC

Vision

Instalar

Ya viene instalado por defecto en Haiku

People

People es el gestor de contactos de Haiku

People

Instalar

Ya viene instalado por defecto en Haiku

Album

Una aplicación para tratar los metadatos de las imágenes

Album

Instalar

En HaikuDepot o pkgman install album

ArmyKnife

Una aplicación para tratar los metadatos de las canciones

ArmyKnife

Instalar

En HaikuDepot o pkgman install armyknife

BeAE

BeAE es una gran aplicación junto a Wonderbrush e Icon-O-Matic para la edición multimedia. En este caso podremos editar audio de manera muy intuitiva. En su momento fue una aplicación de pago para BeOS.

BeAE

Instalar

En HaikuDepot o pkgman install beae

BePDF

El visor de documentos PDF de Haiku

BePDF

Instalar

En HaikuDepot o pkgman install bepdf

BeShare

Haiku también dispone de un sistema de transferencia de archivos P2P propio. Se trata de BeShare y esta es la implementación referencia. BeShare como no podía ser menos, tiene un magnífico soporte para búsquedas.

BeShare

Instalar

En HaikuDepot o pkgman install beshare_x86. Para permitir la conexión entre distintos sistemas operativos a las redes BeShare se creó JavaShare

BeZilla

El port de Mozilla Firefox para Haiku. Está muy desactualizado y no lo recomiendo.

BeZilla

Instalar

En HaikuDepot o pkgman install bezilla

MailNews

El port de Mozilla Thunderbird para Haiku. Está igual de desactualizado que BeZilla pero al tratarse de correo electrónico puedes tener menos problemas al usarlo.

MailNews MailNews-2

Instalar

En HaikuDepot o pkgman install mailnews

Beam

Se trata de un cliente de correo electrónico plenamente integrado en Haiku

Beam

Instalar

En HaikuDepot o pkgman install beam

BlogPositive

Una aplicación para escribir en blogs de WordPress y otros proveedores sin tener que usar el navegador

BlogPositive

Instalar

En HaikuDepot o pkgman install blogpositive

CapitalBe

Una aplicación de contabilidad sencilla y fácil de empezar a utilizar. GnuCash, que es el que uso en Linux, es mucho más complejo de empezar a usar.

CapitalBe CapitalBe2

Instalar

En HaikuDepot o pkgman install capitalbe

Sum-It

Una sencilla hoja de cálcula para realizar operaciones no muy complejas. La mejor hoja de cálcula es la de GoBe Productive, pero sigue siendo un producto privado que no se puede adquirir.

SumIt

Instalar

En HaikuDepot o pkgman install sum_it

Caya

Caya es una aplicación que unifica la mensajería instantánea el estilo de Pidgin. Soporta AIM, Google Talk, Jabber, Facebook, MSN y Yahoo.

Caya

Instalar

En HaikuDepot o pkgman install caya

LibreCAD

LibreCAD es una aplicación de CAD 2D escrita en Qt.

LibreCAD

Instalar

En HaikuDepot o pkgman install librecad_x86

Pe

Pe es el editor de texto más usado en Haiku. Tiene resaltado de sintaxis y soporte para extensiones.

Pe Pe-2

Instalar

Pe viene instalado por defecto en Haiku

NetSurf

NetSurf es un navegador ligero que no implementa JavaScript. Tiene una arquitectura interna muy limpia. Todo está contenido y modularizado. Está diseñado pensando en Haiku, RISC OS y otros sistemas desconocidos, aunque en Linux también funciona.

NetSurf

Instalar

En HaikuDepot o pkgman install netsurf

BePodder

BePodder es una aplicación para escuchar tus podcasts favoritos por RSS

BePodder

Instalar

En HaikuDepot o pkgman install bepodder

A-Book

Una aplicación de calendario con recordatorios

Instalar

En HaikuDepot o pkgman install a_book

BurnItNow

Una aplicación gráfica y fácil de usar para grabar CDs de todo tipo (datos, audio, rescate, …)

BurnItNow

Instalar

En HaikuDepot o pkgman install burnitnow_x86

Clockwerk

Ya hemos hablado de Wonderbrush, Icon-O-Matic y BeAE. Le toca el turno a Clockwerk, el editor de vídeo no linear open source que trabaja en Haiku.

Clockwerk

Instalar

En HaikuDepot o pkgman install clockwerk

LMMS

LMMS es una completa suite de edición de audio pensada para Linux pero que funciona también en Haiku.

LMMS

Instalar

En HaikuDepot o pkgman install lmms_x86

MilkyTracker

MilkyTracker es un programa para componer música de estilo 8 bits o tune.

MilkyTracker

Instalar

En HaikuDepot o pkgman install milkytracker

Paladin

Paladin nace con la idea de ser el IDE de referencia en Haiku. Trae plantillas y ejemplos y se integra con el resto de Haiku para no reduplicar esfuerzos. Por ejemplo, el editor de texto es Pe.

Paladin

Instalar

En HaikuDepot o pkgman install paladin

QEMU

QEMU es un contenedor de máquinas virtuales open source que permite emular arquitecturas diferentes a la de nuestro ordenador. Con QEMU podemos ejecutar Linux dentro de Haiku.

Instalar

En HaikuDepot o pkgman install qemu_x86

Yab IDE

Yab es un entorno que permite programar aplicaciones para Haiku en BASIC. Yab IDE es el IDE para este entorno espefífico.

Yab Yab2

Instalar

En HaikuDepot o pkgman install yab_ide

Juegos

En este apartado voy a mencionar algunos juegos disponibles para Haiku. Todos se pueden encontrar en HaikuDepot

BeMines

  • BeLife – pkgman install belife
  • BeMines – pkgman install bemines
  • Critical Mass – pkgman install criticalmass
  • DOSBox – pkgman install dosbox_x86
  • Flare – pkgman install flare_x86
  • FreedroidRPG – pkgman install freedroidrpg_x86
  • LBreakout2 – pkgman install lbreakout2
  • LMarbles – pkgman install lmarbles
  • LTris – pkgman install ltris
  • OpenTTD – pkgman install openttd_x86
  • Pipepanic – pkgman install pipepanic
  • Road Fighter – pkgman install roadfighter
  • Rocks’n’diamonds – pkgman install rocksndiamonds_x86
  • SDL Lopan – pkgman install sdllopan
  • Slime Volley – pkgman install slime_volley
  • Super Transball 2 – pkgman install super_transball
  • XRick – pkgman install xrick