Charlas “Programming Style” por Douglas Crockford

Posted: Julio 1st, 2017 | Author: | Filed under: Sin categoría | Tags: , , , , , , | No Comments »

Otra de las series de charlas más conocidas de Crockford, son en las que habla de la importancia del estilo de código que empleamos.

A good style can help produce better programs. Style should not be about personal preferences and self-expression. Douglas Crockford

De esta serie creo que la más interesante es:

  • YUIConf 2011. 66′. Douglas Crockford. Programming Style & Your brain. En esta charla Crockford explica lo importante que es usar un estilo de código adecuado, y como hay estilos mejores que otros (según el lenguaje que estemos usando). Al programar no debemos tratar de demostrar lo listos que somos, si no escribir código para que otros puedan entenderlo, y hay estilos que favorecen esto además de reducir los bugs que podamos cometer. La charla se centra en Javascript y la herramienta JSLint, pero el porqué de usar un estilo y herramientas es importante vale para cualquier lenguaje.

Otras charlas similares serían:

Escogiendo un estilo de código

Crockford dice que al escoger un estilo, debemos priorizar (y en ese orden) que:

  1. Evite errores (aunque sea errores que raramente sucedan)
  2. Sea legible. Comuniqué claramente su intención al resto de programadores. Y se debe preferir esto sobre ahorrar memoria o velocidad.

Algunos comentarios de estilo de su charla con los que estoy de acuerdo

La llave va a la derecha

La llave va a la derecha, porqué el siguiente código en js produce un error silencioso:

1
2
3
4
return
{
ok: false
};

Mientras que esto funciona correctamente:

1
2
3
return {
ok: false
};

Usar Strict Equality Comparison

No usar nunca “==” usar siempre “===”. Evita resultados indeseados al hacer casting.

No usar el slash para generar strings multilínea

No usar el slash para generar strings multilínea porqué si hay un espacio después del slash se produce un error

1
2
"hola \
mundo"

Usar siempre las llaves para los bloques de código

Usar siempre las llaves aunque sea para escribir en la misma linea if (flag) { doSomething(); }

No usar pre/post incremento

No usar pre/post incremento. En lugar de ++x o x++ usar x+=1; Los primeros casos obligan a pensar más en lo que se está haciendo de que valor va a tener x cuando se ejecute algo, e introduce más errores.

No usar asignación transitiva

No usar la asignación transitiva var a = b = 0. Porqué no está claro si lo que se quería hacer era

1
2
3
4
5
var a = 0,
b = 0;

b = 0;
var a = b;

En los switch usar siempre break

En el switch usar siempre break después de cada caso. Es muy fácil usarlo mal, y que se presente un bug difícil de depurar.

Forma de usar las IIFE

Al usar Immediately Invocable Function Expression, preferir la tercera forma que aparece aquí

1
2
3
4
5
6
7
8
9
10
11
function () {
...
}(); // Syntax error!

(function () {
...
})(); // Bien

(function () {
...
}()); // Mejor. Queda más claro lo que estamos haciendo según Crockford

Usar siempre el “;”

Usar siempre el ; para evitar el Automatic Semicolon Insertion que puedo provocar bugs difíciles de depurar.

Algunos con los que puedo estar de acuerdo, pero debería revisar

Declaración de variables en el top

Como javascript no tiene (¿tenía?) block scope, si no sólo function scope, hay que declarar todas las variables en la parte de arriba y declarar todos los métodos antes de usarlos. Esto deja claro como funciona el hoisting en javascript que puede introducir errores. Esto incluye el no declarar variables dentro del for – for (var i …) {, para dejar claro que la variable i es válida para toda la función, y tiene valor antes (undefined) y después del for (el último valor que haya tomado en el bucle). Habría que ver como se conjuga esto con let, const, …

Espacio entre paréntesis y resto de elementos

Una serie de reglas sobre donde y como usar los paréntesis, del tipo:

  • No space before ( when used to invoke a function
  • No space between a function name and a parameter list
  • One space between all other names and (

Uso equivocado según crockford:

  • foo (bar);
  • function foo (b) {…}
  • function(x) {…}
  • return(a+b);
  • if (a=== 0) {…}

 


Charlas “The better Parts” por Douglas Crockford

Posted: Mayo 28th, 2017 | Author: | Filed under: Sin categoría | Tags: , , , , , | No Comments »

Seguramente las charlas más conocidas de Crockford son las basadas en su libro The good parts y o algunas más modernas a las que llama de “The better parts” donde revisa alguna de sus anteriores prácticas y comenta features de ES6.

Dentro de esta serie de The Better Parts se pueden encontrar varias dadas en distintas momentos, entre ellas.

  • The Better Parts | .concat() 2015. El problema de esta charla es que no se ven las transparencias (y a pesar de ser similares) a las slides que usa en otras se hace un poco complicado seguir el hilo. Creo que una de las novedades de esta charla respecto a otra es cuando habla de los Template Literals.
  • The Better Parts. Infoq. Agosto/2014. Las transparencias de esta charla, que también valen de guía para el resto están aquí. La de la JSConfUY me pareció un poco más fluída que esta. Pero hay al menos dos secciones que en esta están mejor explicadas o ampliadas la que llama en las transaprecias New Good Parts in ES6 que empieza en el minuto 12 y acaba en el 25. Y cuando explica su constructor pattern (slide 46) a partir del minuto 34. El constructor también lo explica en la JSConfUY pero aquí se entienda mejor.
  • The Better Parts – JSConfUY Septiembre/2014. En apareciencia esta tiene un poco más de carga filosófica que la de Infoq.

Yo ví la charla de JSConfUY, ojee la de concat, y fuí a algunas partes concretas de la de InfoQ. Mi recomendación es que veas la de InfoQ. O si no que veas de la JSConfUY y las partes concretas que mencionó de la de InfoQ.

A nivel contenidos las charlas son similares.

Arranca con una cita de Saint-Exupéry, “It seems that perfection is attained not when there is nothing more to add, but when there is nothing more to subtract.” y de como los programadores deben buscar la perfección. Por ello hace incapié en uno de sus habituales, que un lenguaje nos dé un montón de características no significa que tengamos que usarlas todas si no sólo las “buenas”.

Luego habla de jslint y de su libro de “The good parts”. Combate algunas de las criticas que se hacen de jslint y defiende porqué el estilo de desarrollo no es simplemente un “acuerdo”, si no que hay estilos mejores que otros, y que escribir de una determinada forma elimina bugs y por tanto te acerca a la perfección.

Continúa con una mini revisión de esas buenas partes de JavaScript en general mezclándolo con como debería ser el lenguaje del futuro (tiene otra charla sobre esto llamada The Post JavaScript Apocalypse), centrándose en su propuesta para un nuevo tipo de datos numérico llamado DEC64.

Y termina hablando un poco de JSON.

The better parts

Entre las prácticas que menciona como mejores están.

* No usar for. Sólo array.forEach y derivados
* No dice nada de for..of, supongo que en el momento todavía no habría una propuesta al respecto, pero si habla de evitar for..in y emplear unicamente Object.keys(object).forEach
* Y dice que tampoco usa ya while si no que usa una construcción de este tipo

1
2
3
4
5
function repeat(func) {
  if (func() !== undefined) {
    return repeat(func);
  }
}

Como vemos, y como el mismo dice, estás Better Parts van en la línea de usar JavaScript como un lenguaje funcional.

Especial atención merece su nuevo patrón para la construcción de objetos. Hace tiempo que aboga por no usar new pero también ha dejado de usar Object.create, de hecho ha dejado de usar this para evitar problemas de seguridad. También defiende que la herencia basada en prototipos es una mejor idea que las jerarquías clásicas. Porqué, las jerarquías son en general erróneas, y además suelen establecerse al principio del proyecto, cuando menos información se tiene de como debe ser.

Su patrón para la construcción de objetos tendría este aspecto

1
2
3
4
5
6
7
8
9
10
11
12
function constructor(spec) {
  let {member} = spec,
      {other} = other_constructor(spec),
      method = function () {
        // member, other, method
      };

  return Object.freeze({
      method,
      other
  });
}

Donde

  • spec será generalmente un object literal, que permite inicializar el objeto
  • member será un miembro privado de la clase, no accesible desde el exterior
  • Esta construcción permite que se pueden llamar tantas veces como se quiera a otros constructores (other_constructor), de ese modo se obtiene herencia múltiple, y se pueden copiar, las funciones de interés de esos otros objetos en nuestro objetos
  • También puedo crear nuevos métodos (method), que tendrán acceso a los miembros privados, a otros métodos, a lo que proporcione other. En este caso method es público porque se devuelve al llamante pero con el mismo diseño podría ser un método privado
  • Se devuelve un nuevo objeto (el literal dentro de freeze, con todos los métodos de interés)
  • Lo congela para hacerlo inmutable, con todas las implicaciones que eso trae. Seguridad, comparaciones más sencillas, …
  • Comenta que este sistema tiene un costo en memoria. Al contrario que otras estrategias que reaprovechan los métodos, en esta method sería creado cada vez. Pero a cambio es muy rápido, porque no hay que recorrer el prototype chain para encontrar las claves si no que están directamente en el propio objeto

En otro momento, me gustaría hacer un artículo con los distintos patrones de creación de objetos de Javascript, pero debo decir que este me convence mucho, porque debe ser de las pocas veces que veo algo de este tema en JS que parece tener sentido a la primera. Lo que no comprendo es porque llama “constructor” a su función de ejemplo cuando en realidad es una “factory”.


Modelado de datos booleanos en la base de datos

Posted: Febrero 9th, 2017 | Author: | Filed under: Sin categoría | Tags: , , , , | No Comments »

Cuando definimos la información que un usuario puede visualizar o modificar a través de un formulario nos encontraremos datos aparentemente booleanos. Por ejemplo: ¿Hay un pozo en esta aldea?.

La primera aproximación para implementar esta información es poner un checkbox en el formulario y definir el campo como booleano en la base de datos.

1
CREATE TABLE aldea (id serial, pozo BOOLEAN);

Haciéndolo de este modo existen varios posibles problemas:

  • A nivel usabilidad. Que pasa si el usuario no sabe si hay un pozo. Lógicamente dejará el checkbox sin marcar, pero cuando se revise esa información no se podrá saber si a conciencia se dejo en blanco indicando que no había pozo, o si se desconocía el dato.
  • A nivel implementación. Por defecto, a no ser que la lógica implementada en cliente lo gestione de otra forma, en la base de datos almacenaremos un valor NULL y no un valor FALSE. Al tener valores nulos las queries que hagamos se pueden complicar, por ejemplo un SELECT * FROM aldea WHERE pozo IS FALSE; no nos devolverá los valores nulos. Si empleamos la tabla para hacer un informe o exportarla a una hoja de cálculo tendremos que lidiar con los nulos, …

Por tanto cuando modelemos una información que parezca binaria, preguntémonos (y preguntemos al cliente) si es necesario distinguir entre falso, y desconocer el dato. Si estamos en la segunda situación debemos huír de usar checkboxes y emplear otro tipo de widget, como un combobox donde el usuario pueda escoger “Existe”, “No existe” o dejar en blanco si no conoce el dato. A nivel implementación la información del combobox la guardaremos en general como un texto o un tipo enumerado. Y si eres un producto owner que usa algún tipo de documento para definir el modelo de datos a los desarrolladores asegurate siempre de especificar esta información.

Habrá situaciones en las que aún presentando al usuario la información mediante un combo, nos interese modelar el campo como un booleano. En este caso la lógica por encima de la base de datos sería la responsable de traducir el campo en blanco por un nulo, el ‘Existe’ por un true y el ‘No existe’ por un false.

Cuando modelemos un campo en la base de datos que sea verdaderamente binario para evitar confusiones deberíamos implementarlo de esta forma.

1
2
3
4
CREATE TABLE aldea (
id serial,
pozo BOOLEAN NOT NULL DEFAULT FALSE
)

Cliente de correo para Linux

Posted: Mayo 15th, 2016 | Author: | Filed under: Sin categoría | Tags: , , | No Comments »

Llevo usando aplicaciones web para usar el correo desde que abrí mi primera cuenta de mail. Gmail tiene tiene una interfaz genial, funciona en cualquier dispositivo y es rápido. El único problema es que tus correos no son tuyos. Estos días he tenido que cerrar una vieja cuenta de correo en gmail y para descargar los mails a modo de copia de seguridad he estado revisando clientes de correo de escritorio:

  • Que se lleven bien con gmail/imap, respetando etiquetas, …
  • Que permitan agrupar conversaciones al modo en que lo hace gmail
  • Que tenga buenas funcionalidades de búsqueda
  • Que no use Qt

En las recomendaciones y quejas de clientes sobresalen un par de ellos:

  • Claws Mail. Que no parece tener el “modo conversación”
  • N1. Que tiene una pintaza, algo así como el Atom de los clientes de correo, el problema es que todo el correo pasa a través de sus servidores o tienes que instalar uno en local.
  • Evolution. Que parece pesado, poco documentado y con demasiada gente quejándose de bugs.
  • Thunderbird.
  • Geary.

Tanto Thunderbird (con plugins) como Geary (por diseño) cumplen todos los requisitos, pero la búsqueda de Thunderbird parece mejor, y la mayor base de usuarios y documentación hace que sea el que vaya a probar.

Siguiendo la documentación de thunderbird, la documentación sobre IMAP de Google es fácil de configurar. Si hay problemas de conexión se puede deshabilitar el acceso seguro en google o habilitar OAuth2 en thunderbird como método de autenticación.

Para configurarlo bien hay que revisar un poco la configuración pero en general funciona todo sin problemas.


Portátiles entre 600 y 700€ para CAD y Diseño

Posted: Agosto 8th, 2015 | Author: | Filed under: Sin categoría | Tags: , , | No Comments »

Estos días un amigo me pidió ayuda para comprar un ordenador. Los requisitos:

  • Ofimática, CAD y Diseño sin grandes necesidades
  • Entre 600€ y 700€
  • Pantalla de 15.6”

Échando un ojo a lo que había en el mercado empecé a hacer una hoja de cálculo. Descarté todas los que tuvieran una gráfica peor que una 820M y un micro peor que un i5-4210 porque son configuraciones habituales en ese rango de precios. Luego comparando precios, características y preferencias personales llegamos a esta lista.

Están separados dos rangos de precios los que están más cerca de 600 y los que están más cerca de 700, con mis preferencias resaltadas en amarillo. Si alguién está buscando un portátil así espero que le sirva. El hecho de hacer la hoja de cálculo ya lleva un buen rato, igual hay espacio aquí para hacer un scrapper. ¿Algún programador en la sala :P?


Buscando un portátil – Listado de candidatos entre 900 y 1150€

Posted: Marzo 21st, 2015 | Author: | Filed under: Sin categoría | Tags: , , | 10 Comments »

Decidido el tipo de procesador que queremos, podemos echar una ojeada a las páginas de distintas tiendas.

Lo mejor es entrar en varias, ver lo usables que son en función de como puedes filtrar los portátiles, y quedarse con aquellas en que la búsqueda sea más o menos rápida. Como mínimo porque nos dejan filtrar por rango de precios y tipo de procesador.

Después de ver varias yo he usado las siguientes porque me parecieron las más cómodas:

Lógicamente buscando en varias tiendas salen portátiles repetidos, pero está bien para comparar hay veces que de una tienda a otra el mismo portátil puede variar en 100€. Así que una vez escogido uno toca buscar una tienda fiable con el precio más barato.

De la búsqueda anterior me he quedado por distintos motivos con unos 25 portátiles. Esta es una tabla resumen:

Y por lo que se ve, hay varias decisiones clave que tomar (a parte del precio):

  • Resolución de la pantalla.[1] [2]Sin duda yo me iré a 1920×1080 antes que a 1366×768. Creo que la inversión merece la pena para el eclipse
  • Tarjeta gráfica. Tras leer un poco descarto las Ati RM9M265X que vienen con los Toshiba de la lista. Tienen muy buena pinta, sobre todo el P50B-11M, pero veo que podrían dar problemas con linux [1] [2] [3]. Hay que investigar un poco el resto de nvidia de la lista, por si es un factor clave para descartar más ordenadores o no. Aunque basándome en estas tres páginas las he clasificado
  • 8 o 16 de RAM. O ver si es ampliable a posteriori.
  • Si hay una diferencia real entre los discos duros de 5400 rpm y los de 7200 rpm
  • Si el VGA es fundamental o llega con HDMI. Con el uso que yo le doy al ordenador, teniendo en cuenta que cualquier pantalla moderna soporta HDMI y que cada vez más proyectores sólo tienen HDMI, la existencia de VGA no es un factor clave

Disco Duro

El rendimiento de un disco duro no viene sólo determinado por las rpm, pero averigüar el modelo concreto que monta cada ensamblador y comparar es una tarea demasiado complicada como para que la búsqueda compense. En general la gente parece notar diferencias entre los 7200 rpm y los de 5400 rpm [1] [2][3].

Los discos duros híbridos (con cache SSD) parecen dar un mejor rendimiento que los tradicionales [1] [2] [3], aunque también hay algunas opiniones a favor de los de 7200 sobre 5400 híbridos o de que depende del uso que se le de.

Así que como criterio para descartar portátiles elimino los de 5400 que no tiene cache ssd y/o no tiene 16 GB de RAM y no le doy relevancia a los hibridos sobre los de 7200 rpm.

Tarjeta gráfica

En esta página tenemos un listado de las diferentes gráficas de nvidia. Siendo las que nos interesan, ordenadas de mayor rendimiento a menor:

Tras investigar un poco no he sido capaz de determinar que tarjeta gráfica necesito o cuales son las ventajas reales de unas sobre otras si no te dedicas a jugar. Entre lo poco que he creido entender está que si vas a trabajar con resoluciones altas (como es mi caso al usar monitor extendido) debería priorizar la cantidad de RAM sobre la velocidad de la misma. Es decir mejor 4GB de RAM DDR3 que 2GB de RAM DDR5. Si te vas a dedicar a jugar es mejor priorizar al reves.

Además revisando las especificaciones de las tarjetas, la 740, la 840, la 850 y supongo que la 845 también, tienen soporte para la misma resolución, así que entre estas creo que cualquiera es suficiente para mis requisitos, por lo que puedo descartar los portátiles más caros cuya diferencia principal sea mejor gráfica.

 Conclusiones

Con el listado final de 8 ordenadores donde todos cumplen los requisitos que me había fijado quedan pocas decisiones para descartar.

  • Fundamentalmente si sacrificar rendimiento a cambio de quedarme con mountain en formato ultrabook. Lo que no me interesa en este momento teniendo en cuenta que mi portátil actual es de 2.9 kg y eso no me molesta.
  • Si 16 de RAM es un requisito. Que en principio para mi no lo es, aunque que sea ampliable a 16 sí.
  • Si alguna review de alguno de los modelos que quedan aporta algo muy negativo que lo descarte o algo muy positivo que le de puntos sobre los más económicos

Resto de artículos de esta serie


Buscando ordenador portátil – Micros

Posted: Marzo 10th, 2015 | Author: | Filed under: Sin categoría | Tags: , , | 3 Comments »

En el último artículo veiamos que para encontrar un ordenador portátil adecuado (en rendimiento y presupuesto) uno los factores más importantes era el micro. Centrándonos en los Intel, la wikipedia nos da un buen punto de entrada. Lo primero a saber es que existen varias generaciones.

  • La 5 generación de nombre Broadwell (o Intel Core 5th Gen) salió (aproximadamente) en Enero de 2015 y utiliza tecnología de 14nm
  • La 4 generación de nombre Haswell (o Intel Core 4th Gen) salieron en Junio de 2013 y utiliza tecnología de 22nm
  • La 3 generación lleva por nombre Ivy Bridge y es de 2012 así que la descartamos en el análisis.
  • Por el medio tenemos el Haswell-E (Agosto de 2014) y el Ivi Bridge-E (Septiembre de 2013) de los que sólo hay versiones i7 también en 22nm.

Hasta donde he podido entender a pesar de ser un logro tecnológico importante hasta finales de año probablemente no tenga mucho sentido comprar un ordenador con micro de 5 generación. Tras la generación la forma de clasificarlos es por “familia” o “gama” (o “product line”). Donde las fundamentales para portátiles como el que buscamos serían:

  • i3. Los de gama baja.
  • i5. Gama media. En versón mobile, tienen 3M de cache, 2 cores y TDP de entre 11.5 y 47 con muy pocos siendo de 47.
  • i7. Gama alta. En versión mobile, tienen entre 4 y 8M de cache, los hay de 2 y de 4 cores y TDP de entre 11.5 y 47 siendo la mayoría de 47.

Tanto los i5 como los i7 tienen Hyperthreading, Virtualización por hardware (VT-x) y Turbo Boost. Hay otras tecnologías (menos importantes para nuestro caso) como VT-d que dependen del modelo concreto y no de ser i5 o i7. Además hay que tener en cuenta que en algunos portátiles se montan micros de desktop y no de mobile. Por ello al final es necesario consultar las características concretas de cada micro. Para orientarnos con los modelos es bueno saber que suelen tener cuatro números y a continuación 1 o más letras. El primero de los números hace referencia a la generación, y las letras del final depende. Si son:

  • K, X, S o T se refieren a modificaciones concretas sobre el micro
  • Una M significa que es versión mobile con dos cores (aunque puede tener otro sufijo en lugar de la M y ser mobile igual)
  • MQ o HQ significa que es mobile pero tiene cuatro cores. La diferencia entre HQ y MQ es que los HQ van soldados a la placa (más difíciles de cambiar por tanto, pero mi impresión es que ligeramente superiores para el mismo modelo) y los MQ no.
  • U e Y significa que son pensados para ultrabooks porque tienen un menor consumo. Y menor consumo que U

Por ejemplo un  i7-4600M, es un i7 de cuarta generación mobile con dos cores mientras que un i7-4770HQ es un i7 de cuarta generación mobile con 4 cores. Otro ejemplo, un i5-4210Y consumirá menos que un i5-4210U que consumirá menos que un i5-4210M. Pero generalmente a menor consumo también menor velocidad de reloj y peor rendimiento.

GPU

Los micros actuales llevan “incluida” una tarjeta gráfica en el propio micro, y por tanto sería algo a considerar a la hora de escoger micro pero por ahora vamos a obviarlo.

Conclusiones

Lo que hemos visto en este artículo nos permite identificar a grandes rasgos las diferencias entre un micro y otro. Pero la pregunta más importante a resolver es al final si escoger un i7 con cuatro cores o un i5 con dos. Entender si para un caso concreto como el de escoger un ordenador para desarrollo es mejor más cores o más velocidad de reloj es algo que resulta difícil de responder. ¿Alguna opinión? Pero teniendo varias aplicaciones, incluidos servidores y máquinar virtuales funcionando a la vez, sin ser ninguno de los procesos muy intensivos, parece lógico pensar que más cores aunque sea reduciendo la velocidad es la decisión acertada. Para tratar de reducir el precio en la página de intel vemos que los modelos i7 del 470x al 472x serían buenas opciones, aunque como siempre al final dependerá de como cada fabricante monte el portátil.

Referencias

Resto de artículos de esta serie


Buscando un portátil – Impresiones sacadas de foros y reviews

Posted: Marzo 9th, 2015 | Author: | Filed under: Sin categoría | Tags: , , | 3 Comments »

Tras pensar un poco en los requisitos que debería cumplir mi futuro portátil una búsqueda en DuckDuckgo y google usando combinaciones de palabras entre best, laptop, linux, 2014, 2015, programmer, developer,… Dan un montón de enlaces para hacerse una idea general del mercado y ajustar requisitos.

Sacando de la lista los de 17 pulgadas, compañías que no venden en España, y los que tienen hilos en los que se quejan claramente del funcionamiento en linux. Los más populares parecen ser:

  • En ultrabooks, la Serie T (T440 por ejemplo) o S (S220 por ejemplo) de Thinkpad, y en menor medida también los Yoga y la serie X (especialmente el X1 Carbon y el x240). Pero hay que tener cuidado con con algunos modelos cuya distribución de teclado es bastante mala. Yéndose a un thinkpad con linux esta página puede ser de ayuda.
  • Tras los ultrabook de Thinkpad el entusiasmo parece recaer en Dell XPS 13 Developer Edition con Ubuntu preinstalado. Lo más leído es que es muy parecido en rendimiento y prestaciones a los MacBook. Pero en la web de Dell ya no parece disponible.
  • En cuanto a worksation de los mejor valorados está el Thinkpad W540, que con una docking station y la nueva tecnología de puerto Thunderbolt permitiría conectar varios monitores. El punto negativo es que lleva una nvdia con tecnología optimus a la que por ahora no se puede sacar mucho partido en linux por lo que hay que quedarse con la intel integrada. Y no es precisamente barato.
  • Otras workstation bien valoradas con ventajas y contras parecidos al W540 son el HP Zbook 15 y el Dell precision m3800 developer edition con ubuntu preinstalado.
  • En portátiles con Linux preinstalado la compañía system76 tiene productos interesantes como el Gazelle Professional, pero con los gastos de envio y aduanas puede complicarse un poco
  • En el sector medio, están el lenovo Y50. La línea de Asus N550JK (como el DS71T). Los Asus S551LN (como el 4500U) que si se puede comprar con 16 GB de RAM tiene muy buena pinta.

Otras consideraciones

Si se quiere meter más criterios en la búsqueda:

Impresiones generales

Revisando foros y reviews me quedo con algunas ideas, basadas en impresiones personales y seguramente poco objetivas y sesgadas por las páginas en las que entré.

  • Para tener menos problemas en linux se prefiere Intel y Nvidia sobre Amd y Ati. Aunque las nvidia con tecnología optimus tampoco funcionan bien ahora.
  • También hay que tratar de evitar Broadcom en chipset para wireless.
  • Los discos duros SSD parecen gustar, o al menos combinar un SSD pequeño con otro magnético y se recomienda irse a 16GB de RAM
  • No escoger ninguna resolución de pantalla por debajo de 1366×768
  • En cuanto a fabricantes en los reviews de revistas Lenovo y Dell parecen los más recomendados y luego HP y Asus. En los foros Lenovo, Asus y MSI aparecen bastante, y con Dell y HP hay opiniones contrapuestas, hay a quien le gustan mucho y quien ha tenido muy malas experiencias

Conclusiones

Es bastante complicado escoger un ordenador simplemente en base a las reviews y las opiniones. Para acertar con lo que se necesita manteniendo un precio lo más bajo posible, como mínimo hay que conocer los diferentes micros.

En general las reviews y los foros parecen bastantes inclinados hacia las gama alta y los ultraportátiles cuando en general, sobre todo si esperas una vida útil para un ordenador de trabajo de 4 o 5 años. Pudiendo luego reciclarse el ordenador hacia usuarios con menos requisitos y comprar otro de gama media para otro ciclo de trabajo.

Al principio valoraba mucho tener 1 Tb de disco duro, ahora me inclino más hacia un SSD de 500GB o un SSD pequeño y otro magnético mayor o incluso uno externo.

Referencias

Recomendadores y “certificaciones” linux para portátiles

Resto de artículos de esta serie


Buscando un portátil para programar

Posted: Marzo 7th, 2015 | Author: | Filed under: Sin categoría | Tags: , , | 3 Comments »

Ha llegado el momento de comprar un portátil nuevo para trabajar y la elección no es fácil. Demasiadas marcas, modelos y siglas para hacer una compra medianamente informado, así que antes de volverme muy loco, si alguno de mis estimados lectores tuviera alguna sugerencia sería muy de agradecer.

Precio: En torno a 1.000€, si es menos mejor.

Sistema operativo: Tiene que ser usable con linux al 100%

Objetivo principal, poder ejecutar a la vez:

  • Una máquina virtual con Tomcat (geoserver) y postgresql, que se llevaría 2 o 3 GB de RAM
  • Eclipse o emacs
  • Un virtualenv con una aplicación en python
  • Chrome con las dev tools
  • Firefox con un par de pestañas
  • Un par de cosas más, como un par de terminales, el reproductor de música, pidgin,…

Requisitos hardware:

  • 8 o 16 GB de RAM
  • 1 TB de disco duro
  • Pantalla de 14 o 15 pulgadas
  • Gráfica que no se coma RAM del ordenador. Si tuviera salida para dos pantallas sería ideal
  • Si tuviera VGA y HDMI por compatibilidad con distinta cacharrada sería preferible pero no imprescindible
  • Virtualización por hardware
  • El 90% del tiempo estará conectado a la electricidad, con teclado y pantalla externa, así que no hace falta que tenga mucha batería ni poco peso (mientras esté por debajo de 2.6kg)

Resto de artículos de esta serie


Algunos consejos para comprar un portátil

Posted: Noviembre 30th, 2007 | Author: | Filed under: drivers, linux, migracion, portatil | Tags: , | 6 Comments »

Como comenté voy a tratar de dar una serie de consejos a la hora de comprar un portátil e instalarle linux. La primera decisión a tomar a la hora de comprar un ordenador debe ser en que horquilla de precios vamos a movernos. Particularmente considero que cualquier portátil de entre 700 y 1000€ debería satisfacer las necesidades de la mayoría de la gente por un período de unos 4 años. Invertir más dinero no significa necesariamente que el portátil nos vaya a durar mucho más tiempo, sino que obtendremos algunas características adicionales o servicios de valor añadido proporcionados por el fabricante.

La segunda decisión es si vetamos alguna marca. Particularmente considero que existen una serie de marcas como Sony o Toshiba que ofrecen una confianza adicional, pero por el precio de una de estas marcas podemos comprar un portátil mucho más potente de otra. No me gusta hacer recomendaciones negativas porque no suelen ser muy objetivas pero por lo que he estado leyendo la única marca que en principio me desagrada es Asus. Es conveniente además considerar el comprarse un ordenador clónico. Franquicias como PCBOX ofrecen este servicio y suelen ser de buena calidad.

El siguiente punto a considerar es si queremos un portátil linux friendly. A día de hoy no suelen existir muchos problemas para conseguir drivers para cualquier hardware que funcionen en linux, pero algunos funcionan mejor que otros. Personalmente he optado por aquello fabricantes que sacan por si mismos drivers funcionales como una forma de premio por tratar de forma adecuada el software libre.

El último punto general es que uso le vamos a dar al portátil. Y este está muy relacionado con la pantalla. Si lo vamos a usar como un remplazo del de escritorio porque no tenemos sitio en casa y apenas lo vamos a mover podemos optar por uno con pantalla de 17”. Si tenemos ordenador en casa y el trabajo y necesitamos algo muy movible para consultar el correo y trabajar durante viajes etc… podemos plantearnos uno con pantalla de entre 12” y 14”. Para otros usos, moverlo a menudo pero tampoco estar cargando con él todavía lo mejor suele ser optar por una panorámica de 15.4”. Es muy conveniente que antes de comprarlo pidamos ver el portátil encendido y juguemos con el brillo de la pantalla para comprobar lo buena que es.

Pasemos a considerar los aspectos más técnicos del asunto. Téngase en cuenta que mis comentarios son generalizaciones, seguro que los expertos en la materia se pondrían por las nubes, pero a la hora de la verdad poca gente encuentra diferencia entre un ordenador u otro.

Procesador: Es el cerebro del ordenador, pero no nos dejemos engañar por número extraños o vendedores desinformados. A día de hoy cualquier procesador que no ponga Celeron o Semprom será más que suficiente para nuestras necesidades. Es en general preferible gastar algo de dinero en más RAM que en un procesador mejor. Optar por un procesador de intel o por uno de AMD es en principio indiferente. Lo único que resaltaría es que todos los procesadores AMD Athlon permiten la virtualización por hardware mientras que sólo los intel con un número igual o superior a T5600 lo hacen. Si no vais a virtualizar esto os dará igual. Para comparar entre distintos procesadores podeis ver las características de los amd en esta página (usar la parte que pone “model number”) o los intel en esta otra (usar la parte que pone “processor number”).

RAM: Es fácil, cuanta más mejor. A día de hoy 1GB obligatorio y 2GB recomendable. El rendimiento también mejora si es a 667MHz en lugar de a 533MHz

Disco Duro: A partir de 100GB es en general más que suficiente si no vamos bajar películas o música de forma compulsiva. Tengamos siempre presente cual es el uso que le vamos a dar al portátil y que los discos duros externos están baratos.

Peso: Si vamos a moverlo yo no cogería nada que en sus especificaciones pusiese más de 3kg (aunque fuese (3.01kg). 2.7kg más o menos puede ser una buena opción.

Wifi: A día de hoy todos los portátiles traen wifi, pero debemos ver que especificaciones cumplen. En principio todos cumplen la norma b/g (que es el wifi absolutamente mayoritario que hay en cafeterías, universidades, …) pero algunos cumplen también la norma a (suelen nombrarse como a/b/g). Que cumpla la 802.11a (nombre oficial) no lo consideraría como algo limitante pero si interesante. Por otro lado podemos preguntar al vendedor que tarjeta wireless lleva para comprobar si existen drivers nativos para linux, podemos emularlos con ndiswrapper o no va. Si es una intel funcionará perfectamente.

Tarjeta Gráfica: A no ser que seamos muy jugones cualquiera vale. A día de hoy tanto las gráficas intel como las nvidia funcionan correctamente en linux (incluida la aceleración 3d). Las ati aún no están al nivel apropiado pero están haciendo esfuerzos en el camino correcto, tal vez en 6 meses si sean una opción a considerar. De todas formas cuidado con las nvidia porque no todas tienen soporte en linux, aquí está la lista de tarjetas soportadas por el último driver. Con la tarjeta más sencilla de intel la GMA 950 yo no he tenido ningún problema y los efectos gráficos en 3d en linux han funcionado sin que haya hecho nada.

Puertos, conectividad y otras cosillas.

  • Todos los portátiles traen puertos USB y tarjeta de red. La mayoría incluyen también modem (aunque yo no me preocuparía si no lo trajera).
  • Algunos traen Firewire (IEEE1394) pero tampoco es muy habitual que lo vayamos a necesitar, podemos pasar de ello.
  • Todos traen también salida para un monitor externo (para conectar un proyector por ejemplo). A mi particularmente me gusta que traigan salida de s-video porque de este modo se puede enchufar el ordenador a la televisión muy fácilmente y usarlo a modo de dvd portátil por ejemplo.
  • La nueva moda es incluir lectores de tarjetas pero yo no lo veo mucha utilidad.
  • Cuidado si necesitáis disquetera porque la mayoría ya no trae dentro del portátil (aunque si existen dispositivos externos)
  • Bluetooth/Infrarojos. Puede ser útil si tienes un móvil que lo tenga para descargar imágenes y otras cosillas del móvil. En caso contrario tampoco le veo mucha utilidad (ratones y teclados inalámbricos suelen traer su propio adaptador. En todo caso tampoco debería ser un factor limitante a la hora de la compra puesto que hay dispositivos USB que dan conectividad bluetooth por alrededor de 20€.
  • Webcam. Si no somos fanáticos de las videoconferencias no es necesario, generalmente no haremos una videoconferencia desde un lugar público por lo que tampoco nos importará mucho comprar una externa. (También alrededor de 25€)
  • Si vamos a usar el ordenador de forma más o menos fija, podría ser muy útil que tuviera puertos PS2 para conectarles un teclado y un ratón externo (Si va a ser ocasional con los USB es suficiente)

Batería: No comento nada, porque es difícil dar un criterio sobre esto, y lo cierto es que hoy en día hay enchufes en prácticamente cualquier sitio donde necesitemos usar un portátil.

Si llegado el momento final tenéis dudas entre varios podéis inclinaros por los fabricantes más responsables en temas medio ambientales.Otras recomendaciones, opiniones, críticas y preguntas en los comentarios :)

Actualización: 14 de Mayo de 2016. Si tienes dudas de cuando comprarlo dicen que la mejor fecha es verano.