SISTEMAS & DESARROLLO
2 meneos
16 clics

Cómo crear una copia de seguridad local de Google Photos [ENG]

Los primeros teléfonos inteligentes se conectaban habitualmente al ordenador para transferir datos, música y fotos. Hoy en día suelen depender de una conexión a Internet para hacer copia de seguridad de fotos y videos en “la nube” con lo que pocas veces se conectan a un ordenador para hacer copias de seguridad. El problema está en que se confía demasiado en “la nube”, por ejemplo en Google Photos, y se olvida tener una copia local de los datos por si algún día deja de existir este servicio. Es aquí donde aparece gphoto-sync, una utilidad de código abierto escrita en Python cuyo fin es hacer una copia de seguridad local de todas las fotos almacenadas en Google Photos.
3 meneos
41 clics

Convirtiendo cien millones de enteros a cadena de caracteres por segundo [ENG]  

Hace casi 7 años escribí un artículo comparando el rendimiento de diferentes métodos para convertir un entero en una cadena de caracteres. Muchas cosas han cambiado desde entonces, así que he decidido escribir otro artículo de seguimiento para ver cuánto se ha avanzado en los últimos años.
3 meneos
20 clics

Ultra Tesla: crear redes distribuidas de servicios, fácil, rápido y seguro  

Ultra Tesla es un proyecto de código abierto para crear redes distribuidas de servicios fácil, rápido y seguro, usando el poder de computo de múltiples ordenadores. El proyecto permite unificar los distintos servidores en una única interfaz que es proporcionada para el mismo usuario creando una sensación de transparencia.
3 meneos
19 clics
Implementando el algoritmo Raft en Go: Introducción [ENG]

Implementando el algoritmo Raft en Go: Introducción [ENG]

Este es el primer artículo de una serie de varios capítulos que describen la implementación completa del algoritmo de consenso distribuido llamado Raft en el lenguaje de programación Go. Raft es un algoritmo relativamente nuevo (2014) pero ya se usa bastante en la industria. El ejemplo más conocido de ello es probablemente Kubernetes, que se apoya en Raft a través de la base de datos distribuida de tipo clave-valor etcd. El objetivo de estos artículos es describir una implementación totalmente funcional y rigurosamente probada de Raft.
3 meneos
35 clics

Un Makefile con gestión automática de dependencias para C/C++

Para realizar un seguimiento de las dependencias de los archivos de código fuente se añaden unas reglas sin receta que permitan comprobar la fecha de modificación de las cabeceras, que recompile el código fuente cuando se haya modificado cualquiera de las mismas mediante las reglas implícitas que sí tienen receta, asegurarnos de que no falle la ejecución de Make ante cualquier cambio [...] y generar sin errores los Makefiles de dependencias a la vez que se evita que GNU Make los borre por ser archivos intermedios.
2 meneos
17 clics

Creación de DLLs maliciosas para hijacking, fácil, sencillo y para toda la familia  

EvilDLL v1.0 de thelinuxchoice es una herramienta bastante útil que nos facilitará la creación de DLLs maliciosas para obtener nuestra shell reversa en caso de que hayamos podido explotar un DLL hijacking. Además tendremos la opción de crear esa shell mediante un reenvío de puertos directo a nuestra máquina o mediante un túnel con ngrok. Probado en Windows 7 (7601) y Windows 10, lo único que necesitaremos es el compilador Mingw-w64 y asignar el auhtoken de ngrok previo registro. Después simplemente clonar el repositorio y ejecutar el script principal de BASH.
2 meneos
12 clics

Significado e historia del registro EAX de la arquitectura x86 [ENG]

Por lo general los tutoriales sobre ensamblador de la arquitectura x86 no pasan mucho tiempo explicando la perspectiva histórica de las decisiones de diseño y denominación. Cuando se está aprendiendo ensamblador de x86 siempre suelen decir lo mismo: aquí está EAX; es un registro; úsalo. Pero entonces, ¿qué significan exactamente las letras de dicho registro: E-A-X? Me temo que no hay una respuesta corta. Para explicarlo vamos a tener que volver a 1972…
2 meneos
16 clics

Las últimas actualizaciones de Windows 10 están ralentizando los PC. Soluciones. [EN]

Las últimas tres actualizaciones acumulativas de Windows 10, en particular las KB4535996, KB4540673 y posiblemente KB4551762 están siendo culpadas por ralentizar el rendimiento de las máquinas con Windows 10. ¿Qué actualización acumulativa opcional no relacionada con la seguridad está causando problemas de rendimiento con Windows 10? ¿Cómo abordar el bajo rendimiento y el arranque lento de Windows 10 si es causado por la última actualización acumulativa?
2 meneos
17 clics

Archivos ZIP: historia, explicación e implementación [ENG]  

He tenido curiosidad acerca de la compresión de datos y el formato de archivo ZIP en particular durante mucho tiempo. En algún momento decidí aprender cómo funciona y escribir mi propio programa de compresión. La implementación se convirtió en un ejercicio de programación emocionante al crear una máquina bien engrasada que desmonta datos, los mezcla en una representación más eficiente, y los junta de nuevo. En este artículo se explica el formato ZIP con gran detalle: compresión LZ77, códigos Huffman y algoritmos de deflate, además de un poco de historia y una implementación razonablemente eficiente escrita en C.
2 meneos
26 clics

Ejecutar aplicaciones Windows de 16 bits en Windows de 64 bits [ENG]

¿Alguna vez has intentado instalar en tu moderno ordenador con Windows 10 una aplicación o un juego y sólo has obtenido diálogos que indican que no se pueden ejecutar para finalmente darte cuenta de que estás tratando de ejecutar una aplicación de 16 bits en un Windows 10 de 64 bits? Juro por Dios esto me pasa todo el tiempo. Afortunadamente hay una solución para este problema. De hecho, hay varias soluciones para este problema.
3 meneos
10 clics

Miranda lanzado como software libre [ENG]

Miranda es un lenguaje de programación funcional puro, no estricto, polimórfico y de orden superior diseñado por David Turner en 1983-6. El lenguaje fue ampliamente utilizado, tanto para la investigación como para la enseñanza, y tuvo una fuerte influencia en el desarrollo posterior del campo, influyendo en particular en el diseño de Haskell, con el que tiene muchas similitudes. Miranda es, sin embargo, un lenguaje más simple.
4 meneos
44 clics

Wiki de bash para hackers [ENG]

Esta wiki está destinada a contener documentación de cualquier tipo sobre GNU Bash. La motivación principal era proporcionar documentación e información legible para los humanos para que los usuarios no se vean obligados a leer cada parte de la página de manual de Bash, lo que puede ser difícil de entender. Sin embargo, los documentos aquí no pretenden ser un tutorial para novatos. Esta wiki y todos los programas que se encuentran aquí son software libre: puedes redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General de GNU publicada por la Free Software Foundation, ya sea la versión 3 de la Licencia, o cualquier versión posterior.
3 meneos
37 clics

¿Qué hizo que el supercomputador CDC6600 de los años 1960 fuese tan rápido? [ENG]  

Cualquiera que haya tenido una clase de arquitectura de computadores avanzada ha oído hablar del CDC6600, el que fue el ordenador más rápido del mundo desde 1964 hasta 1969. Esta fue la máquina que puso a Seymour Cray en el mapa como arquitecto de supercomputadoras, aunque el arquitecto principal fue James Thornton. Uno de los conceptos de arquitectura de computadores, que luego fue usado en arquitecturas RISC, por el que el CDC6600 es conocido fue la introducción del scoreboard, que, junto al algoritmo de Tomasulo, fueron unos de los primeros conceptos de ejecución de instrucciones fuera de orden.
2 meneos
28 clics

Diseccionando el controlador de Windows Defender: WdFilter (parte 1) [ENG]

WdFilter es el componente principal del núcleo de Windows Defender. Este controlador funciona como un minifiltro del grupo “FSFilter Anti-Virus”, lo que significa que está conectado a la pila del sistema de archivos (en realidad, bastante arriba) y gestiona las operaciones de entrada/salida mediante callbacks. Además este controlador implementa otras técnicas para obtener información de lo que está sucediendo en el sistema. El objetivo de esta serie de publicaciones es comprender de forma sólida cómo funciona este sistema a bajo nivel.
2 meneos
28 clics

¿Cómo funciona realmente HTTPS? [ENG]

HTTPS es simplemente el protocolo HTTP estándar untado con una generosa capa de delicioso cifrado SSL/TLS. A menos que algo vaya muy mal (y puede), SSL impide ver o modificar las peticiones que componen la navegación web. SSL es lo que mantiene las contraseñas, las comunicaciones y los datos de las tarjetas de crédito seguros entre el ordenador y los servidores.
3 meneos
44 clics

Cello, biblioteca para llevar la programación de alto nivel a C [ENG]

Cello es una biblioteca que lleva la programación de alto nivel a C. Actuando como un moderno y potente sistema de ejecución, Cello hace muchas cosas fáciles que antes eran poco prácticas o difíciles de manejar en C, como: estructuras de datos genéricos; funciones polimórficas; interfaces/clases de tipos; constructores/destructores; recolección de basura opcional; excepciones; y reflexión. Además, Cello funciona a la perfección junto al estándar de C obteniendo el resto de beneficios, como un gran rendimiento.
4 meneos
72 clics

Doce errores comunes y oportunidades de optimización perdidas en SQL [ENG]

La mayoría de los lenguajes de programación están diseñadas para desarrolladores profesionales con conocimiento de algoritmos y estructuras de datos. SQL es diferente. SQL lo utilizan analistas, científicos de datos, gerentes de producto, diseñadores y muchos más. Estos profesionales tienen acceso a bases de datos, pero no siempre tienen la intuición y la comprensión para escribir consultas eficientes. En un esfuerzo por hacer que mi equipo escriba mejor SQL, he recompilado fallos comunes y oportunidades de optimización perdidas.
2 meneos
31 clics

Infraestructura automática de documentación con Python, Wordpress y Foreman. [ENG]

No está terminado hasta que esta documentado. Cuando creamos nuestro nuevo entorno de I+D a gran escala con nuestro pequeño equipo DevOps de 2 personas, decidimos que nunca más editaríamos manualmente la documentación del servidor/conmutador/fuera-de-banda. Los humanos somos demasiado propensos a errores, y esos errores importan cuando algo sale mal. Es una tarea que adormece la mente y preferiamos pasar nuestro tiempo construyendo cosas que escribiendo sobre ellas.
4 meneos
38 clics

Análisis comparativo de Linux y Open Source Unix [eng]

Análisis comparativo entre Linux, varias distribuciones BSD e Illumos sobre cuestiones relativas a licencias, abuso corporativo de dichas licencias, rendimiento y características de dichos sistemas operativos. vía soylentnews.org/article.pl?sid=19/11/05/0424205
2 meneos
44 clics

La edición de texto en pantalla te odia [ENG]

Hace más o menos un mes se publicó la entrada de Alexis Beingessner sobre cómo te odia el dibujado de texto en pantalla, entrada que me dio fuerte en el corazón. Allá por 2017 estaba creando un nuevo editor de texto para navegadores. Viendo lo poco satisfactorio que era el API pensé: “reimplementaré la selección de texto yo mismo. ¿Cuán difícil será?”. Era joven e iluso. Pensé que me llevaría dos semanas, pero en realidad ha consumido varios años de mi vida.
3 meneos
85 clics

Ahorrando dinero cambiando de PHP a D [ENG]

2night nació en 2000 como una revista en línea centrada en la vida nocturna y restaurantes en Italia. Con los años, nos hemos convertido en una agencia de marketing experimental en toda regla. Empezamos a usar D en 2night en 2012 cuando desarrollamos un servicio web utilizado por nuestras aplicaciones de Android e iOS. Ha funcionado bien desde entonces, pero fue solo un pequeño experimento. En 2019, después de muchos otros experimentos, decidimos dar el gran paso: cambiamos el sitio web completo de PHP a D.
3 meneos
41 clics

Las cadenas literales generan rangos incorrectos en C++ [ENG]

C++20 vendrá con lo que llamamos la biblioteca de rangos, aunque la interfaz de rangos ha sido compatible desde C++11 en el bucle `for`. El bucle `for` que usa rangos puede detectar cualquier cosa que sea un rango y trabajar con él. En particular, puede funcionar con cadenas literales. El problema en este caso es que las cadenas literales tienen un carácter NULL al final y eso puede llevar a errores ya que hay un elemento que no se ve fácilmente visible en el rango formado por la cadena. Para solucionarlo existen varios métodos.
4 meneos
15 clics

Internet depende de personas que trabajan gratis. [ENG]

¿Quién debería ser el responsable del mantenimiento y la resolución de problemas en proyectos de código abierto? Cuando compra un producto como las luces inteligentes de PhilipsHue o un iPhone, se asume que las personas que escribieron su código están siendo pagadas. Aunque eso es cierto para aquellos que crean directamente el software, prácticamente todas las empresas de tecnología confían también en miles de bits de código gratuito, disponible a a través de proyectos de código abierto en sitios como GitHub/Lab.
3 meneos
20 clics

bic: intérprete de C y explorador de API [ENG]  

bic es un proyecto que permite a los desarrolladores explorar y probar API usando un bucle de lectura, evaluación e impresión (REPL, Read, Eval and Print Loop en inglés) similar al que tiene Python o al propio BASH.
3 meneos
67 clics

Cómo escribí un compilador de C que se compila a sí mismo en 40 días [ENG]

He escrito un compilador de C que se compila a sí mismo al que llamé 8cc. Y lo he escrito en 40 días. Esta entrada es un registro de todos los pasos que he dado para escribir el compilador. El código fuente y su historial están disponibles en GitHub.
3 meneos
35 clics

Construyendo módulos C++, planteamiento N+1 [ING]

Los módulos fueron votados en C++20 hace algún tiempo. Están pensados para sustituir a las sentencias #include para aumentar la velocidad de compilación y también para aislar las unidades de traducción de modo que, por ejemplo, las macros definidas en un archivo no afecten al contenido de otro archivo. Hay tres compiladores diferentes y cada uno de ellos tiene su propio prototipo de implementación disponible (documentación GCC, documentación Clang, documentación VS).
2 meneos
29 clics

Limitar el tamaño de peticiones HTTP con Nginx

Supongamos que tienes montada una web bastante simple sobre un servidor NGINX. Una rollo «próximamente». Estas webs y en general la mayoría no suelen requerir peticiones HTTP más grandes de 1024 bytes. Suelen contener un archivo index.html, algún javascript que puede ir incluso inline e incluso css que puede ir también inline. Este tipo de webs son sencillas y se pueden trabajar más o menos. Se puede trabajar para que sean «responsive» por ejemplo y para que tengan los estilos y el javascript ordenaditos sin mezclarlos con el HTML.
2 meneos
13 clics

¿Necesita Haiku aplicaciones empaquetadas como .app en Mac o .AppImage en Linux? [ENG]

¿Necesita Haiku migrar la funcionalidad de aplicaciones empaquetadas como directorios de aplicaciones (.app en Mac) y/o imágenes de aplicaciones (AppImage en Linux)? Creo que sería interesante y, además, mucho más fácil de implementar en Haiku que en otros sistemas ya que la mayoría de la infraestructura ya está instalada para mantener los paquetes HPKG.
4 meneos
56 clics

Cómo conocer la telemetría de Windows 10 que maneja Microsoft

A partir de la actualización Windows 10 April 2018 Update (y sucesivos), Microsoft finalmente redujo parte del secreto en torno a la recopilación de datos del sistema. Con ello se pueden ver los «datos de diagnóstico» que tu PC está enviando a casa a Microsoft.
3 meneos
35 clics

VPN en Windows 10, misión imposible tras la última actualización

Un error en la última actualización del sistema provoca el mal funcionamiento de las VPN en Windows 10. El fallo de las VPN en Windows 10, se produce cuando los usuarios o administradores configuran un perfil VPN activada permanentemente (Always On VPN). Si configuras una conexión VPN y la usas en modo manual, RASMAN no debe fallar.
2 meneos
44 clics

D como reemplazo de C [ENG]

Mi historia es como muchas historias de programadores de sistemas: usaba C para la mayoría de mis programas, pero un día me di cuenta de que la mayoría de mi código en C reimplementaba cosas de C++: arrays dinámicos, mejores cadenas, clases polimórficas, etc. Así que intenté usar C++; y me gustó en un primer momento. Pero cuanto más aprendía peor se hacía mi código. Asumámoslo: C puede ser difícil de usar, pero tiene una “elegancia” que nunca se ve en C++, por lo que muchos programadores de C++ vuelven a C. Pero en mi caso descubrí D.
3 meneos
47 clics

Rust no es un buen reemplazo para C [ENG]

Tengo un dicho que resume mi opinión sobre Rust en comparación con Go: Go es el resultado de que los programadores de C diseñen un nuevo lenguaje de programación, y Rust es el resultado de que los programadores de C ++ diseñen un nuevo lenguaje de programación. Esto no es solo una metáfora: Go fue diseñado por ex alumnos de plan9, un sistema operativo escrito en C y la fuente de inspiración para muchas de las funciones de Go, y Rust fue diseñado por la gente de Mozilla, cuyo producto estrella tiene una de los más grandes bases de código en C++.
2 meneos
46 clics

Cosas que he aprendido por el camino difícil (en 30 años de desarrollo de software) [ENG]

Estas son algunas de las cosas que he aprendido en 30 años trabajando como desarrollador de software y que, generalmente, he aprendido por el camino difícil.
5 meneos
41 clics

La perlificación de Python

En las posibles novedades para Python 3.8 hay algunas bastante controvertidas que han hecho saltar la voz de alarma. No ha faltado gente que ha opinado que cada vez Python se parece más a Perl. Este proceso habría empezado con Python 3 pero se habría ido haciendo más evidente hasta llegar a hoy. Cada vez con más sintaxis poco utilizada, con más elementos, más cómodo de escribir para el experimentado aunque menos legible si no dominas el lenguaje. Y resulta curioso, porque Python es en parte una respuesta a la excesiva complejidad que podían tener los programas hechos en Perl. Su popularidad se debe a que es fácil de aprender y eso parece que ya no está tan claro.
3 meneos
53 clics

Análisis de archivos ELF en Linux [ENG]

Parte de la verdadera artesanía en el mundo la damos por sentado. Una de esas cosas son las herramientas comunes en Linux, como ps y ls. A pesar de que los comandos pueden ser percibidos como simples, hay más cuando se mira debajo del capó. Aquí es donde entra en juego ELF (Executable and Linkable Format en inglés). Un formato de archivo que se usa mucho, pero que solo unos pocos entienden. ¡Entendamos este formato con este tutorial de introducción!
3 meneos
35 clics

Compila y recorre las instrucciones en ensamblador de un programa con penguinTrace [ENG]

penguinTrace es una herramienta que nos permite escribir código y ver cómo se ejecutan las instrucciones que lo componen. El objetivo es ayudar a las personas a comprender cómo se ejecutan los programas y/o mejorar la comprensión del ensamblador. Al escribir programas en C, es posible hacer que el compilador genere el ensamblado generado o desensamblar un binario para ver las instrucciones. [Vía HackPlayers].
8 meneos
50 clics

Comunicación de procesos en Linux II: tuberías y colas de mensajes [ENG]

Este es el segundo artículo de la serie sobre comunicación entre procesos (IPC) en Linux. El primer artículo se centró en IPC a través del almacenamiento compartido: archivos y memoria compartida. Este artículo se dirige a las tuberías (pipes), canales que conectan procesos para la comunicación con un punto de escritura para escribir bytes y otro punto de lectura para leer estos bytes en orden FIFO (primero en entrar, primero en salir), y colas de mensajes, donde se añaden mensajes a colas FIFO que luego se procesan.
8 meneos
81 clics

Comunicación de procesos en Linux I: archivos y memoria compartida [ENG]

Este es el primer artículo de una serie sobre comunicación entre procesos (IPC) en Linux. La serie utiliza ejemplos de código en C para aclarar los siguientes mecanismos de IPC: archivos compartidos; memoria compartida (con semáforos); pipes (con nombre y sin nombre); colas de mensajes; sockets; y señales. Este artículo revisa algunos conceptos básicos antes de continuar. Los dos primeros de estos mecanismos: archivos compartidos y memoria compartida.
3 meneos
21 clics

Cifrado de repositorios Git

Esto de tener un repositorio en GitHub, o incluso en GitLab, por no decir, en cualquier otro de los servicios que hay disponibles, es algo que ha pasado de ser extraño a estar a la orden del día. No solo se utiliza para el trabajo colaborativo en el desarrollo de software, sino que también se usa para multitud de otras actividades: desde guardar tus archivos de configuración hasta para escribir libros, ya sea solo o de forma colaborativa. Lo cierto es que es posible que guardes información sensible. En este sentido la solución es el cifrado de repositorios Git.
4 meneos
15 clics

Google revela un error de “alta severidad” sin parchear en el núcleo de Apple macOS

Investigadores de Google Project Zero han hecho pública una vulnerabilidad en macOS, después de que Apple no haya liberado un parche en los 90 días previos a la publicación. Descubierta por el investigador Jann Horn y demostrada por Ian Beer, la vulnerabilidad reside en la forma que el kernel de macOS, XNU, permite a un atacante manipular el sistema de ficheros sin informar al sistema operativo.
2 meneos
33 clics

Cuatro herramientas de gestión de secretos cifrados en Git [ENG]

Hay una gran cantidad de excelentes herramientas de código abierto para almacenar secretos en Git. Puede ser difícil determinar cuál es el mejor dependiendo del caso, así que para ayudar a comparar y elegir, vamos a ver y comparar cuatro de las herramientas de código abierto más populares para la gestión de secretos en Git.
4 meneos
31 clics

Convirtiendo números en coma flotante a cadenas de caracteres [ENG]  

La conversión de números de punto flotante (FP) a cadenas de caracteres es una tarea sorprendentemente complicada. Si bien es probable que se pueda escribir un conversor de enteros a cadenas de caracteres decente en cuestión de minutos, un buen algoritmo de formateo de números en coma flotante merece un artículo en una revista científica. Florian Loitsch publicó un algoritmo, o más bien una clase de algoritmos, llamado Grisu, en el documento “Impresión rápida y precisa de números de punto flotante con números enteros” en 2010.
2 meneos
40 clics

Compiladores e intérpretes de ‘bytecode’ [ENG]

Aquí hay una entrada de blog sobre cómo escribir un pequeño compilador e intérprete de ‘bytecode’ en pequeños fragmentos, comenzando con las opciones más simples y aumentando el resto de la pila cuando necesitemos otros componentes.
3 meneos
38 clics

Liran Zvibel (WekaIO) cuenta cómo usar D para crear el sistema de archivos más rápido del mundo [ENG]

WekaIO es una startup con sede en San José, California, que ha creado Matrix, el sistema de archivos más rápido del mundo, y lo ha escrito en D. WekaIO es un ejemplo de objetivo de diseño de D: poder escribir prototipos rápida y fácilmente para luego continuar trabajando en la misma base de código hasta alcanzar calidad de producción en lugar de crear prototipos en lenguajes de alto nivel diferentes. Liran hizo un hueco en su apretada agenda para responder algunas preguntas sobre WekaIO y el uso que hacen de D.
3 meneos
61 clics

Qué hace a BeOS y Haiku únicos [ENG]  

En este artículo se describen las características propias de Haiku junto a ciertas características heredadas de BeOS que hacen que Haiku sea un sistema operativo único. Por ejemplo, cómo funcionan los paquetes de software, packagefs, simplicidad de la interfaz, formato vectorial de los iconos (HVIF), atributos del sistema de archivos, el comando hey, etc.
2 meneos
55 clics

Creando un script de completado de BASH [ENG]

La funcionalidad de completado de BASH es una característica de esta shell a través de la cual se ayuda a los usuarios a escribir comandos de forma más rápida y sencilla. Esto se logra al presentar opciones posibles cuando los usuarios presionan la tecla de tabulación (una o dos veces) mientras escriben un comando. En esta publicación intentaré familiarizarte con el proceso de creación de un script de completado de BASH.
4 meneos
67 clics

Despedazando ‘printf()’ [ENG]  

Si ‘Hello World’ es el primer programa hacen los estudiantes de C, printf() es probablemente la primera función que usan. He respondido preguntas sobre printf() muchas veces, por lo que finalmente he dedicado tiempo para hacer una reseña. Las preguntas comunes se adaptan generalmente a dos formas: fácil: ¿cómo resuelve mecánicamente el problema del formato?; compleja: ¿cómo muestra printf() el texto en pantalla? Mi respuesta habitual suele ser: abre stdio.h y búscalo. Esta tarea no es sólo una gran experiencia de aprendizaje, sino que también es una prueba interesante para el principiante dedicado. ¿Volverá con la respuesta? Si es así, ¿con qué nivel de detalle?
2 meneos
42 clics

Rincones oscuros de Unicode [ENG]

Supongo que, si estás en Internet y lees algún blog nerd, sabes qué es Unicode. Por lo menos tienes una comprensión muy general de ello, quizás un “es lo que nos da emoji”. En mi experiencia eso es todo lo que extiende la comprensión de la gente, incluso entre los programadores. Y eso es una tragedia, porque Unicode tiene mucha... profundidad. No quiere decir que Unicode sea un desastre terrible, o no más desastre terrible que el lenguaje humano, y cualquier cosa con los nobles objetivos de representarlo no estará libre de arrugas.
2 meneos
44 clics

La asombrosa plantilla que no hace nada [ENG]

Recientemente empecé a usar una nueva plantilla con más frecuencia en el nuevo código D: el uso de la plantilla de identidad. La plantilla de identidad (disponible en std.traits aunque no documentada), se declara así: alias Identity (alias X) = X;. Esta es una forma abreviada de una declaración de plantilla, sinónimo de la forma explícita: template Identity (alias X) { alias Identity = X; }. Se trata de una plantilla epónima, por lo que la instanciación se reemplaza con X (el único parámetro de la plantilla). En consecuencia, Identity!(anything) es asignado a anything. Entonces, ¿de qué sirve una plantilla que no hace nada?
4 meneos
84 clics

¿Qué hace un procesador cuando no tiene nada que hacer? [ENG]

Una CPU está inactiva si no hay tareas a ejecutar. El kernel Linux tiene varias clases de prioridad interna de procesos; una de ellas es la clase especial de procesos inactivos. Si no hay tareas a ejecutar en una CPU determinada en cualquiera de sus clases la CPU se considera inactiva. Si el hardware no soporta “desactivar” las CPU entonces la CPU tiene que ejecutar instrucciones inútiles hasta que sea necesaria para trabajo real. Sin embargo, este es un uso muy ineficiente de la electricidad, por lo que muchas CPU soportan estados de bajo consumo. Pero entrar en esos estados no es gratis.
« anterior12345

menéame