@iamemhn

EM Hernández-Novich

Ask @iamemhn

Sort by:

LatestTop

Por que no debería copiar códigos de internet?

Voy a suponer que necesitas un pedazo de código que «resuelva el problema X», usas tu buscador de confianza, y descargas el fragmento más «popular» que encontraste. Dá lo mismo si el pedazo de código es para un lenguaje de programación que crees dominar a fondo, o de un lenguaje nuevo para ti.
Si no se te ocurrió cómo escribir la solución al problema por ti mismo, lo más probable es que todavía no tengas comprensión completa del problema, y por eso no lo puedes atacar. Por extensión, cualquier pedazo de código que encuentres que es popular porque presuntamente resuelve el problema, para ti seguirá siendo inescrutable prima facie.
Si no entiendes cómo hace lo que hace, es posible que haga más cosas de las que necesitas, o que haga mal lo que necesitas en determinadas condiciones (que, por Murphy, son las tuyas). Mientras más complejo es el fragmento de códico que copias, aún mayor el riesgo.
Entonces, está bien que busques ejemplos de código que te permitan comprender mejor el problema que estás tratando de resolver. Sin embargo, es un riesgo usarlo sin comprenderlo. Mucha gente lo hace porque quiere «resolver» y no presta mayor cuidado a las consecuencias para con su propio equipo de trabajo, ni para con sus usuarios. Es una cuestión de ética.
Es preferible que estudies el fragmento hasta entenderlo, y luego lo expreses usando tu propio estilo de programación. Eso es evidencia que entendiste lo suficiente del problema, como para expresar esa solución. No hay nada de malo en imitar una solución ajena después de comprenderla; después de todo, eso es lo que uno hace cuando lee, imagina, y manifiesta su propia creatividad.
En relación a copiar librerías o aplicaciones posiblemente consolidadas, y con una historia evidente de integridad y éxito, asegúrate que sean Software Libre, copia, usa, aprende, y redistribuye.

View more

Como aprendo a programar BIEN? no me importa el tiempo que tome solo quiero programar bien sin ir a la universidad.

Programar es ser capaz de expresar la solución a un problema, de manera que se aproveche efectivamente el lenguaje de programación empleado y, quizás mucho más importante, otra persona pueda entender lo que estás tratando de hacer. Esa persona muchas veces eres tú en el futuro.
Para eso, tienes que tener dominio del idioma en el cual recibes la definición de los problemas. Sea español, inglés, o cualquier otro idioma. Porque si no eres capaz de comprender la especificación, y hacer las preguntas adecuadas, tu programa no será una solucion completa. Para dominar un idioma, tienes que leer y escribir, con buen vocabulario, mejor gramática, y efectivamente. Nuestra inteligencia está limitada por los conceptos abstractos que podemos imaginar, y la capacidad de convertirlos en una historia. Lee y escribe, de todo. Escuchar historias acompañadas de imágenes explícitas no es lo mismo que leer una historia y construir imágenes mentales. Saber contar una historia es la destreza fundamental que demuestra la inteligencia.
La única forma de saber que se domina un tema, es ser capaz de explicárselo a cualquier persona, con cualquier nivel de preparación, y lograr que haya aprendizaje proporcional. Escoge el tema que te interesa, estúdialo, y trata de explicarlo a otra persona: repite hasta que la otra persona entienda. Haces eso con los temas que te interesen, y te irá bien.
Si bien vas a comenzar por aprender algún lenguaje de programación, probablemente el «popular» en tu entorno o sugerido por otros, o «el futuro del desarrollo» (ja ja ja) es importante que aprendas varios lenguajes de programación. Con diferentes estilos de programación: imperativo, declarativo lógico, declarativo funcional, reactivo. Eso mejora tu manera de enfrentar los problemas, de la misma forma que tener mejor vocabulario te permite expresar ideas complejas de forma sucinta.
Para que tus programas sean mejores, tienes que estudiar la técnica. Eso se logra estudiando y practicando estructuras de datos, algoritmos, y cualesquiera conceptos en el área de interés, por ejemplo, programación paralela y concurrente. Muchas veces, la mejor solución para un problema no es obvia, pero alguien ya la encontró y está en un libro. Es más importante saber cuál libro, que improvisar.
Así, programar es escribir un discurso en algún lenguaje de programación. Con el paso del tiempo, encontrarás formas que son subjetivamente mejores que otras, según tus capacidades, y métodos que son objetivamente mejores que otros, según su base técnica. La manera de abandonar lo subjetivo por lo objetivo es tener experiencia, y eso sólo se logra invirtiendo tiempo: leer mucho, equivocarse mucho, aprender cosas difíciles porque terminan siendo mucho mejores que las fáciles, y no teniendo miedo a huir de la comodidad de las chuletas.
Si estás buscando una receta corta para programar bien, me temo que después de casi 40 años programando, no la conozco. Escribe programas, lee e insiste -- es divertido.

View more

Para aprender sobre programación sobre el kernel de linux que libros y documentación recomedaría?

Hace muchos años que no hago nada de eso.
Cuando lo hice, leí «Understanding the Linux Kernel» y «Linux Kernel Programming», ambos publicados por O'Reilly. Al menos el segundo libro lo mantienen al día, así que si lo encuentras reciente, tendrá la información sobre el kernel LTS conveniente.

Related users

Digamos que tengo una función add_comment en PostgreSQL que recibe 2 parámetros: articleId y comment, es necesario o prudente, hacer una consulta de articleId en articles_table dentro de la función para asegurar que la fila con el articleId exista? Gracias

Pareciera que tienes una tabla para comentarios que tiene una clave foránea para artículos. Es una relación maestro-detalle típica. No parece necesario, ni prudente.
Si la tabla comentarios tiene un CONSTRAINT FOREIGN KEY haciendo referencia a la clave primaria en tabla artículos, el INSERT sólo va a tener éxito si el artículo ya existe en la tabla. Más aún, si intentas asociar un comentario a un artículo que no existe, vas a recibir una excepción indicando el identificador de artículo inexistente.
Si no es así, agrégalo. Los CONSTRAINTS existen para que no tengas que hacerte éstas preguntas.

¿instalar un firmware -distinto al original- en un router es una necesidad o solo un plus? ¿bajo qué criterios? ¿usas varios distinto acorde a requerimientos?

Para mi es una necesidad, considerando el tipo de control que quiero tener sobre la red. La mayoría de los firmwares «de caja» suelen tener limitaciones impuestas por las regulaciones de la FCC en USA, sin contar deficiencias de seguridad o desempeño que no habían sido detectadas cuando se ensambló el equipo.
En el caso de las regulaciones, lo habitual es que la potencia de transmisión este limitada artificialmente. Con un firmware abierto, puedo subir la potencia de transmisión al máximo, con lo que la señal llega bastante más lejos.
En el caso de las deficiencias, los vendedores de AP apuntan al usuario que sabe poco y nada de redes, y sólo quiere «WiFi y compartir internet». Por ejemplo, no tienen caching DNS (desperdicio de tráfico), no tienen (buenos) mecanismos para QoS, o tienen mecanismos precarios para VPN o S/D-NAT.
Cuando compro, o recomiendo comprar, un AP, lo primero que verifico es si puede correr OpenWRT. Si no puede, no lo compro. Si puede, lo primero que hago es instalar OpenWRT porque incluye las capacidades adicionales para VPN, caching-DNS, mejor manejo de filtrado y control de tráfico. usar el USB para ser servidor de archivos/medios...

View more

Liked by: Marcos Mora

Es correcto decir dispositivos "empotrados" o "embebidos"?

La traducción directa al español neutro del inglés «embedded» sería «integrado» o «incorporado»; son las que prefiero. Las traducciones «empotrado» y «embebido», también son correctas. Es cuestión de decidir cuán sofisticado quieres presentarte ante la audiencia.
También serían correctas «incrustado» y «encastrado», que he utilizado Porque Puedo®, cuando el interlocutor es de aquellos que usan «colocar» cuando es suficiente «poner».
Liked by: Juan Rodriguez

¿Es posible montar tu propio mail server corporativo (es decir, para que los empleados tengan email con el dominio de la empresa) en un VPS con linux (por ejemplo: con Digital Ocean)?, ¿o es necesario contratar ese servicio aparte?. ¿Que buenas prácticas recomiendas para montar tal cosa?

Es posible, tanto en un CoLo, como en virtuales de DigitalOcean o AWS, según el gusto y presupuesto. También puedes entregarle todos tus mensajes de correo e información a Google o Microsoft para que lo administre en sus plataformas. Las herramientas de gestión son muy bonitas y si no sabes, ni te interesa, como funciona el flujo de correo, es una linda experiencia a cambio de la privacidad de tus mensajes.
Tienes que configurar toda la maquinaria de transporte de correo, certificación de origen, certificación de contenido, control de contenido, buzones, y posiblemente un webmail. sin olvidar completa y correcta configuración de DNS, con DNSSEC para maximizar la credibilidad en el envío. Además, tienes interactuar con el proveedor de hospedaje para que autorizen el flujo de correo: generalmente los proveedores de hospedaje bloquean SMTP para evitar spammers, y querrán asegurarse que tu despliegue va a ser usado con responsabilidad.
La mejor práctica que puedo recomendarte es contratarme el servicio.

View more

Liked by: marytex

Estoy creando una BD en PostgreSQL y tengo que decidir usar el pseudo tipo SERIAL or UUID version 4 como clave primaria para una tabla que va a ser muy grande y por eso quiero particionarla lógicamente por año usando herencia, pero leí que hay controversias en usar UUID como PK. Que recomienda prof?

Si vas a particionar por fecha, no tiene nada que ver el tipo de la clave primaria. Particiona por el campo que tiene la fecha y ya está. La decisión de usar BIGSERIAL o UUID es ortogonal.
En cuanto a usar SERIAL o UUID, la diferencia en espacio puede resultar importante a gran escala: el UUID que se almacena ocupa 16 bytes, y un BIGSERIAL ocupa 8. Aunque el espacio en disco sea barato, cuando haces consultas que involucran esos campos, hay que leer y comparar los valores. Eso cuesta más tiempo de CPU y RAM: si los índices se hacen tan grandes que no caben en memoria, perdiste.
El UUID tiene una «presentación» visual tal que sirve como «código para entregar» y no revela ningún orden implícito. No es lo mismo poner Código de Cliente 42 que Código de Cliente 11c0f127-0f1c-4eab-aa82-2cc78f67ed72. El segundo es completamente opaco, y así deberían ser las claves primarias sintetizadas.
Así mismo, el UUID tiene la garantía de unicidad en la creación, mientras que con un BIGSERIAL necesitas una secuencia. Consultar la secuencia para tomar el siguiente número compite con otros procesos; generar un UUID no. Si el sistema es masivamente concurrente, podría ser mejor usar UUIDs en lugar de BIGSERIAL. No es un argumento suficientemente fuerte porque son muy pocos los sistemas masivamente concurrentes que tengan problemas como ese.
Los BIGSERIAL son simples números, con sus ventajas y desventajas. Para el humano es más fácil hacer «debugging» cuando las claves son números. Al mismo tiempo es fácil asociar orden implícito usando esa secuencia, que en realidad no tiene nada que ver con la naturaleza de los datos. Más de un desubicado piensa que el serial de la tabla Factura es el número de factura, pero no es, y hay otro campo que lo tiene y ¿por qué no lo usaste de clave primaria natural?
La clave primaria natural tiene que provenir de los datos reales (número de factura, número de parte, placa del carro, coordenadas del objeto, etc.). Si la fila no tiene una clave primaria natural, sintetizarla con UUID puede ser más fácil por su opacidad, que forzar usar números.
No tengo una preferencia particular. Te diría que uses UUID cuando lo necesites (ausencia de clave primaria natural, que deba mostrarse al usuario final), y (BIG)SERIAL el resto del tiempo.
Es probable que el tiempo de CPU adicional necesario para calcular el UUID sea más o menos equivalente al tiempo esperando por I/O para obtener el siguiente número de la secuencia, así que el desempeño debe ser similar. El espacio si te va a costar, así que no lo desperdicies si no lo necesitas.

View more

Liked by: Carlos Torres

En un comentario sobre rust usted dijo que: “el problema de seguridad en presencia de aliasing no es decidible -- punto”. ¿Podría ahondar un poco más en este tema?

El «aliasing» ocurre cuando una misma posición de memoria es accesible para modificación a través de más de un nombre. Eso es habitual en lenguajes imperativos donde hay pasaje de parámetros por referencias, o manipulación explícita de apuntadores. El «aliasing» puede ser local a una subrutina, puede ser inmediato entre la subrutina y su llamador, o global entre la rutina y variables globales o en alcances superiores.
Para generar código correcto y eficiente («bueno, rápido, económico», escoge dos), es necesario que el compilador aplique varios análisis estáticos sobre el código. En particular, sería deseable determinar si dos nombres particulares SIEMPRE son aliases o A VECES son aliases. Eso permitiría escribir código seguro en unos escenarios, y astuto en otros.
Sin embargo, se ha demostrado [1] que ambos problemas son «no decidibles». Un problema es «no decidible» (o «indecidible») cuando es IMPOSIBLE escribir un algoritmo que lo resuelva. Imposible hoy, imposible el año que viene, imposible con computación cuántica. No se puede. De hecho, uno de los dos problemas ni siquiera es recursivamente enumerable («simulable») lo cual es aún más bonito.
Como es (y será) IMPOSIBLE determinar si dos nombres particulares son aliases, en presencia de aliasing los compiladores para lenguajes imperativos generan el código más conservador posible, que usualmente requiere más instrucciones y más espacio. Nota que el problema ocurre por la combinación de dos cosas: apuntadores a una misma posición, Y la posibilidad de cambiar la posición.
Una solución es, obviamente, que el lenguaje NO tenga estado mutable. Que no puedas cambiar cosas explícitamente a través de las referencias. Eso es lo que hace Haskell, por eso tiene aliasing SIN mutabilidad en prácticamente todo el lenguaje.
Otra solución es, garantizar que cada posición de memoria tenga UNA y exactamente UNA forma de accederse para modificación. Esto es, está bien tener mútiples aliases sólo para lectura, UN alias para escritura y varios para lectura, pero NUNCA más de un alias para escritura. Eso es lo que hace Rust, para mantenerse imperativo. Entonces, el compilador NO está haciendo detección de aliases para modificación cuando genera código, sino impidiendo que tengas aliases para modificación cuando escribes.
Hay una infinidad (no es exageración) de problemas no decidibles, y uno cuantos tienen que ver con generar código de máquina en lenguajes imperativos. En los lenguajes funcionales puros hay otros problems, pero ese, no.
[1] http://web.cs.ucla.edu/~palsberg/course/cs232/papers/ramalingam-toplas94.pdf

View more

Profesor, estoy desarrollando aplicaciones usando PostgreSQL, PGSQL, PostgREST para el API y PG Websockets. Sin embargo, no logro definir una estructura de archivos y directorios óptima para administrar mi código. ¿Qué herramientas o frameworks me recomienda para desarrollar con estás tecnologías?

cjtb89’s Profile PhotoCarlos Torres
Edito con `vim` en un terminal. Rara vez con `gvim`.
Usamos `git` para el control de versiones. Prefiero usarlo desde la línea de comandos, o desde `vim` usando el plugin `fugitive`. Tengo instalado `giggle` para cuando el análisis no cabe en un terminal, cosa infrecuente.
Todos los elementos de base de datos están en un directorio `db`. Allí están scripts SQL separados para extensiones, tipos, tablas, funciones, triggers, vistas, índices y constraints. Para PostgREST conviene tener esquemas, así que tenemos subdirectorios bajo `db` con la misma estructura.
Las pruebas de los componentes de base de datos están escritas usando PG TAP. Eso implica que las pruebas están en scripts SQL separados bajo un directorio `t/` de modo que pueda usar `prove` (provisto por Perl) para ejecutarlas individualmente o en masa.
Un `Makefile` para crear la base de datos en blanco, llenarla con los datos iniciales, llenarla con datos de prueba, y correr las pruebas. Cada uno como un objetivo diferente, con un objetivo principal que lo hace todo.
No tengo nada con PG Websockets, pero probablemente lo atendería como una combinación de pruebas de PG TAP y el infatigable Test::WWW::Mechanize de Perl, para engancharlo con `prove`.
Eso es lo que uso y no hay ninguna colección de botones y menúes que me resulten más interesantes. Tampoco se si es óptima, pero es lo que mejores resultados nos ha redituado.
Herramientas sencillas conectadas de manera clara. Políticas separadas de mecanismos. Interfaces separadas de implantaciones. Esa transparencia y simplicidad, conduce a su robustez. Y cuando hace falta, es mejor escribir un programa que genere los programas, que escribir cada programa a mano.
For that is the Unix way.

View more

Liked by: Carlos Torres

Cuál es la diferencia entre los procesadores de Intel x86 y los ARM? Qué implica esto para los usuarios y desarrolladores de MAC?

El x86 es CISC y el ARM es RISC. Wikipedia tiene más detalles.
https://ask.fm/iamemhn/answers/148091507540
No desarrollo ni para ni con una Mac, así que no puedo saber como les afectará. Supongo que como mínimo, no van a poder (o va ser costoso en recursos) emular las máquinas Linux x86 que al final son las que corren el software desarrollado cuando lo llevan a la nube, y que muchos fabricantes de software van a tener que producir nuevas versiones de su software. Además, entiendo que confirmaron la intención de que NO se pueda instalar otro sistema operativo que no sea el de Apple.
Supongo que los fanáticos de Apple dirán que es lo mejor que les ha pasado en la vida :-)

Do you recommend to use Secure boot on a laptop running Debian? I read it’s not possible to use the hibernation feature.

The only reason I use UEFI Secure Boot on my Thinkpad running Debian, is because it allows applying firmware updates from within Linux without needing to resort to lesser operating systems or bootable media. Suspend and hibernation work fine.

¿Opina que es mejor usar el kernel de Debian o uno compilado a la medida? GKH recomienda usar el último kernel estable publicado porque tiene parches de seguridad que no tienen las distribuciones todavía.

Cuando uno no sabe nada, usa el kernel de la distribución. Cuando uno aprende más, compila su propio kernel. Cuando uno aprende lo que tiene que aprender, usa el kernel de la distribución.
Debian, y todas las distribuciones, emiten parches de seguridad con regularidad. Entre esos parches están kernels actualizados: no tienen el último número de versión, sino que retrotraen los parches relevantes desde la última versión hasta la que Debian provee. Funciona muy bien.
Cuando aparece un parche de seguridad, tanto en el kernel como en servicios fundamentales, dependiendo de su criticidad se le avisa a las distribuciones antes de publicarlo, de manera que tengan oportunidad de preparar paquetes actualizados. No siempre es así, pero es la costumbre.

si cada usuario que se conecta a PostgreSQL, representa una conexion, es prudente aumentar el max connection limite a mas de 100? (En caso que sea cierto y se estime que habran mas de 100 usuarios), gracias

Ajústalo a la cantidad de conexiones necesarias. Al mismo tiempo, ajusta el kernel para permitir ese número alto de conexiones.
Cada conexión requiere recursos en el sistema operativo, tanto en la tabla de archivo abiertos, semáforos, descriptores de memoria compartida, y otras cosas. Para poder aumentar la cantidad de conexiones simultáneas, tienes que estar seguro que el sistema operativo también está ajustado. Cambiar 100 por 256 no es gran cosa, pero si necesitas 1024 o más conexiones, presta atención a la cantidad de memoria por proceso: el ejecutable y sus datos locales, más los espacios de trabajo que PostgreSQL reserva *por* conexión. Todas están explicadas en la documentación de PostgreSQL.
Para soportar miles de conexiones, necesitas unos cuantos Gb de RAM, y requiere ajustar el kernel Linux. Como mínimo
kernel.shmmax
kernel.shmmall
kernel.sem
que haya suficiente espacio en segmentos de memoria compartida y semáforos para manejar la concurrencia. Si tienes más de 32Gb de RAM, también tienes que ajustar cosas como
vm.dirty_background_ratio
vm.dirty_ratio
de lo contrario generarás más I/O del necesario.
Después puedes considerar usar cosas como pg_bouncer o pg_pool, cuando tienes *varias* conexiones del mismo usuario (para que se compartan sobre una sola) o si tienes conexiones que viven poco (para que no haya que reconectar el backend a cada rato). Esto puede ayudarte a reducir la cantidad de conexiones totales y minimizar las reconexiones, que son sumamente caras.

View more

Como distribute/instala/hace que llegue la aplicacion al servidor? Habia pensado en un Docker, pero no me parece practico, gracias he aprendido mucho de usted

Para el tipo de aplicaciones y ambientes de operación con los que trabajo, la manera más práctica ha resultado preparar paquetes Debian a la medida, y desplegarlos vía APT usando un repositorio privado de paquetes.
Construir el paquete Debian la primera vez toma una cantidad de tiempo proporcional a su complejidad. Lo que más demora es asegurar que cumplan con todos los preceptos del Debian Policy. Es «fácil» hacer un paquete incompleto que «funciona», que a la larga traerá problemas. Dependiendo del lenguaje de programación particular y su ecosistema, tienes herramientas que asisten en la creación del paquete. Para liberías es más fácil que para una aplicación completa. Claro que una vez que el paquete está construido, actualizarlo para nuevas versiones es mucho más fácil.
Hasta ahora ninguna de las familias de contenedores me ha satisfecho enteramente. Me resulta más fácil y rápido hacer observable un sistema Debian al cual le instalo paaquetes, que un contenedor monolítico. Se tarda bastante más con el segundo, al menos en mi experiencia intentando hacerlo con las aplicaciones que opero. Eventualmente intentaré de nuevo, pero no es para nada prioritario.

View more

Estoy haciendo procedimientos almacenados en PostgreSQL y documentándolos en el código usando comentarios. Hay alguna forma simple de extraer esos comentarios para generar la documentación de la base de datos?

Supongo que podrías construir un flujo de datos usando psql, algún script Perl, y doxygen. Eso te daría los comentarios que hay en el procedimiento almacenado, pero está lejos de ser la «documentación de la base de datos». Esta última se maneja con COMMENT ON.

Estoy creando una BD en PostgreSQL y tengo la duda si vale la penan poner comentarios en los DDL de las tablas y las filas para generar documentación. No he visto que eso se use en la vida real. Quería saber si usted lo recomienda. Gracias

Se pierde muy poco tiempo haciendo
COMMENT ON TABLE foo IS 'whatever foo is';
COMMENT ON COLUMN foo.field IS 'whatever this field holds';
COMMENT ON INDEX foo_idx IS 'makes things fast';
COMMENT ON VIEW v_foo IS 'mirame a foo, ¿ah?';
COMMENT ON FUNCTION f_foo() IS 'foonciona';
y luego poder consultarla con `psql` (\d+, \df+, etc.) o `pgadmin`. Más aún, `postgresql-autodoc` es capaz de generar documentación HTML y diagramas en base a la información que está en la base de datos.
Esta es la flojera que funciona en la vida real. La otra, la de no escribir comentarios, es la que hace perder tiempo tratando de averiguar qué es cada cosa, y no te deja tener vida real.
Cuando las cosas no son obvias, tienes que documentarlas. Cuando crees que las cosas son obvias, usualmente estás equivocado, incluso cuando es obvio que sabes lo que estás haciendo. Definitivamente prefiero gente que es capaz de documentar por convicción y no por compromiso.

View more

¿Cómo es la mejor forma de hacer debugging de código plpgsql? ¿Alguna herramienta recomendada? ¿O hay que hacerlo al estilo printf con RAISE?

EnterpriseDB propuso una extensión que se agrega al backend Pg, y que presenta un API a través del cual se puede hacer debugging «paso a paso», con puntos de inspección y demás. Esa extensión solía estar disponible libremente aunque nunca para la versión más reciente de Pg (busca `edb-debugger` o `pldebugger``). Una vez instalada esa extensión, necesitas un debugger que sea capaz de conversar con el API. Hasta donde sé, sólo PGAdmin 4 tiene un cliente así.

Estoy instalando una laptop con Debian y me pide escoger entre modo UEFI y BIOS. Siempre he hecho mis instalaciones en modo BIOS y han funcionado bien. ¿Por que debería cambiar a usar modo UEFI? ¿Hay algo que no estoy considerando o me estoy perdiendo y no me he dado cuenta? ¿Qué me recomienda?

Si la máquina va a tener arranque dual, usa el mismo método que tenga el otro sistema operativo. UEFI y Legacy BIOS no necesariamente inicializan los dispositivos por igual, y eso podría afectar al otro sistema operativo.
Si la máquina sólo va a correr Linux, en principio es lo mismo desde el punto de vista del arranque, pues una vez que el control pasa al kernel, éste (re-)inicializa todos los dispositivos al estado necesario. Sin embargo, UEFI es más interesante que BIOS porque, entre otras ventajas derivadas de la modernidad. El arranque con UEFI es algo más rápido que con Legacy BIOS; tienes la posibilidad de usar particiones GPT, necesarias para discos muy grandes y convenientes si necesitas más de cuatro particiones; aplicar actualizaciones de firmware directo desde Linux (en los computadores adecuados); o utilizar el TPM para tener Secure Boot instrumentado.
En máquina nuevas donde sólo quieres usar Linux, actualiza el BIOS/UEFI antes de instalar, y luego instala en modo UEFI.

View more

Next

Language: English