08.7.13

In defense of unformatted source code – breakindent for vim

Everyone knows that Opera is better than Firefox,  Vim+Bash is better than any IDE, and 4-space indenting is better than tabulators. Having established those undisputed facts of life, let’s revisit some common fuel for flame wars: the mighty 80 character line limit.

 

80x10 "IBM Card" from 1928

Fortran code punched into a 80 x 10 IBM Card from 1928

 

Some people propose 80 chars, others 79, 100, 120, 132 , and many values in between.

Some people propose it should be a soft limit (meaning you can freely ignore in rare cases), while others set pre-commit hooks to stop any infringing line from reaching repositories.

None of this really matters.

The 80 character line limit, originated by hardware limits back when computer terminals were only 80 chars wide, or even further back in time, is said to provide many advantages. To name a few:

  • Better readability when opening two files side by side (for example, a diff)
  • Quicker to read (same reason why newspapers use many columns of text, instead of page-wide paragraphs: human brain scans text faster that way).
  • It forces you to extract code into separate functions, in order to avoid too many nesting levels.
  • It prevents you from choosing overly long symbol names, which hurt readability.
  • Etc.

I propose that those advantages are real and desirable, but should not be achieved through arbitrary line length limits. On the contrary, I propose that coders should not waste time formatting their source code: their tools should do it when possible. After all, we use text editors, not word processors! The problem is that, unfortunately, most text editors are too dumb.

Fix the editors, and you fix the need for line length limits.

 

If you edit your code in vim, you’re in luck, thanks to the Breakindent functionality. Here’s some side-by-side comparisons of 80-char line limit vs. unformatted text with BreakIndent enabled:

80x35

(left: 80-char                  right: breakindent)

Traditional terminal size:

Resizing your terminal to exactly 80 chars wide, both cases look pretty similar. Nothing to see here, move along.

 

 

208x16-26

(top: 80-char                     bottom: breakindent)

Wide terminal:

If you want to edit just one file, an 80-char limit will waste the rightmost half of your screen (or more).

 

 

 

40x50

(left: 80-char                   right: breakindent)

Narrow terminal:

If you’re three-way merging (or need to keep code aside for a moment, etc) those 80 chars will either wrap around or disappear from view, making the code harder to read.

 

 

All in all: when compared to an editor featuring smart indenting, the 80-char lines artificially limit how you can resize your own windows, with no appreciable gain, and in most cases forcing you to waste many pixels of your carefully chosen 27″ dual-screen coding setup.

11.27.12

Tramitar baja de ADSL YaCom

Interrumpimos temporalmente la emisión de posts en este blog para meter un offtopicazo, porque no me cuesta nada, y si con esto consigo ayudar a algún alma perdida de dios que quiera dar de baja su linea ADSL de yacom (ahora orange), pues algo bueno habré aportado…

 

Procedimiento a seguir (comprobado el día 27-11-2012):

  1. Obtener el número de referencia de la baja:
    1. Usar el teléfono 900 900 282 (número  gratuito, aunque no aparezca a día de hoy en nomasnumeros900). Insistir varias veces si nadie coge, a la tercera va la vencida.
    2. Tras una breve charla (de verdad, es breve) sobre el motivo de la baja, se te facilitarán unas instrucciones (que proveo a continuación), así como un número de baja (de 9 cifras en mi caso concreto).
    3. Dar las gracias si la persona que te ha atendido ha hecho un buen trabajo y si te apetece (porque ir de pitufo gruñón por la vida no lleva a nada).
  2. Enviar la carta:
    • Remitente: tú mismo…
    • Destinatario: YACOM – Apartado de Correos 35809 – CP 28080 – Madrid
    • Contenido:
      • Carta escrita con:
        • Nombre y apellidos del titular de la cuenta.
        • Tu número de teléfono fijo contratado con YACOM.
        • El número de contrato
        • El motivo de la baja, por ejemplo “Cambio de domicilio”, “Defunción por suicidio tras intentar dar de baja la línea durante varios días”, o cualquier otro motivo igualmente creíble.
        • El número de baja que te han facilitado antes por teléfono.
        • Firma del titular de la cuenta.
      • Fotocopia del DNI por ambas caras.
    • Las gentes de internet recomiendan no enviar una carta tradicional, sino un burofax, aunque vale con una carta certificada. El tema es que no pongan excusas tontas para seguir cobrándote durante meses.
  3. La baja se comenzará a tramitar al de 7-10 días de recibir la carta/burofax (aunque legalmente disponen de hasta 15 días, no solamente 7 ó 10). En ese momento dejarán de facturar.
  4. Después, esperar a que cobren la última factura. Desde su adquisición por parte de Orange, los cobros de YACOM se realizan después (y no antes) de cada período de facturación (que es del día 16 del mes anterior, al 15 del actual), por lo que tras recibirse la carta/burofax, quedará por llegar la última factura. Ésta debería estar prorrateada para reflejar los días reales que se ha utilizado la línea, y no necesariamente el período completo de facturación. La factura llegara a finales de mes.).
  5. Por su seguridad, y con el justificante de envío de la carta/burofax en mano, mandar orden al banco de rechazar recibos de YACOM.
  6. Alea jacta est!

 

Por último, no hace falta que leais este párrafo a partir de este punto, porque esgrimiendo mis increíbles habilidades de ese-e-o, escribiré algunas palabras clave para que la gente que quiera dar de baja, cancelar, eliminar o dejar de pagar su línea de conexión de acceso a Internet de banda ancha de ADSL con teléfono fijo del proveedor de Internet y telefonía fija YACOM, a veces también llamado ya.com, y comprado recientemente por Orange, pueda encontrar este post mediante busquedas tan típicas como “Quiero dar de baja mi linea de YACOM”, o “Cómo cancelo mi conexión de internet con ya.com 10 megas”, o tal vez “Hoygan no consigo dar de baja mi adsl de yacom, ¿cómo hago?”, o incluso “Me gusta el olor a ISP quemado por la mañana”, en su buscador preferido.

 

Muchas gracias por su atención, y tengan un buen día.

 

12.2.09

En defensa de los derechos de los ciudadanos en Internet

Ante la inclusión en el Anteproyecto de Ley de Economía Sostenible de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, bloggers, usuarios, profesionales y creadores de internet manifestamos nuestra firme oposición al proyecto, y declaramos que…

1.- Los derechos de autor no pueden situarse por encima de los derechos fundamentales de los ciudadanos, como el derecho a la privacidad, a la seguridad, a la presunción de inocencia, a la tutela judicial efectiva y a la libertad de expresión.

2.- La suspensión de derechos fundamentales es y debe seguir siendo competencia exclusiva del poder judicial. Ni un cierre sin sentencia. Este anteproyecto, en contra de lo establecido en el artículo 20.5 de la Constitución, pone en manos de un órgano no judicial -un organismo dependiente del ministerio de Cultura-, la potestad de impedir a los ciudadanos españoles el acceso a cualquier página web.

3.- La nueva legislación creará inseguridad jurídica en todo el sector tecnológico español, perjudicando uno de los pocos campos de desarrollo y futuro de nuestra economía, entorpeciendo la creación de empresas, introduciendo trabas a la libre competencia y ralentizando su proyección internacional.

4.- La nueva legislación propuesta amenaza a los nuevos creadores y entorpece la creación cultural. Con Internet y los sucesivos avances tecnológicos se ha democratizado extraordinariamente la creación y emisión de contenidos de todo tipo, que ya no provienen prevalentemente de las industrias culturales tradicionales, sino de multitud de fuentes diferentes.

5.- Los autores, como todos los trabajadores, tienen derecho a vivir de su trabajo con nuevas ideas creativas, modelos de negocio y actividades asociadas a sus creaciones. Intentar sostener con cambios legislativos a una industria obsoleta que no sabe adaptarse a este nuevo entorno no es ni justo ni realista. Si su modelo de negocio se basaba en el control de las copias de las obras y en Internet no es posible sin vulnerar derechos fundamentales, deberían buscar otro modelo.

6.- Consideramos que las industrias culturales necesitan para sobrevivir alternativas modernas, eficaces, creíbles y asequibles y que se adecuen a los nuevos usos sociales, en lugar de limitaciones tan desproporcionadas como ineficaces para el fin que dicen perseguir.

7.- Internet debe funcionar de forma libre y sin interferencias políticas auspiciadas por sectores que pretenden perpetuar obsoletos modelos de negocio e imposibilitar que el saber humano siga siendo libre.

8.- Exigimos que el Gobierno garantice por ley la neutralidad de la Red en España, ante cualquier presión que pueda producirse, como marco para el desarrollo de una economía sostenible y realista de cara al futuro.

9.- Proponemos una verdadera reforma del derecho de propiedad intelectual orientada a su fin: devolver a la sociedad el conocimiento, promover el dominio público y limitar los abusos de las entidades gestoras.

10.- En democracia las leyes y sus modificaciones deben aprobarse tras el oportuno debate público y habiendo consultado previamente a todas las partes implicadas. No es de recibo que se realicen cambios legislativos que afectan a derechos fundamentales en una ley no orgánica y que versa sobre otra materia.

11.11.09

Google’s “go” simple & stupid benchmark (1st round: I/O)

Systems programming language? They gotta be kiddin…

$ cat hello.cpp && g++ hello.cpp &&
> time for i in $(seq 100); do ./a.out >/dev/null; done

#include <stdio.h>
int main (int argc, char** argv)
{
    for (int i=10000;i--;)
    {
        printf("hello, world\n");
    }
}

real 0m0.427s
user 0m0.220s
sys 0m0.164s

$ cat hello.py &&
> time for i in $(seq 100); do python hello.py >/dev/null; done

for i in range(1,10001):
    print "hello, world"

real 0m3.809s
user 0m2.800s
sys 0m0.724s

$ cat hello.go && 8g hello.go && 8l hello.8 &&
> time for i in $(seq 100); do ./8.out >/dev/null; done

package main
import "fmt"
func main()
{
    for i:=10000;i>0;i--
    {
        fmt.Printf("hello, world\n")
    }
}

real 0m7.528s
user 0m6.388s
sys 0m0.664s

Continued in Round 2: memspeed

02.24.09

Bash 4.0 on the loose!

Parece que hay una nueva version del omnipresente y monopólico shell default en casi cualquier distribución GNU/Linux:

Bourne-again Shell

El changelog de la nueva 4.0 no parece sugerir grandes cambios a primera vista, sino más bien pequeños tweaks por aki y por allá, pero son bienvenidos de todas formas. Al fin y al cabo, existen mil y una shells alternativas en caso de que no nos mole mucho la forma a veces warra de implementar funcionalidades en bash 😉

Happy bashacking!

01.20.09

Consistent Desktop UI proposal

I’ve always been a bit particular with my desktop preferences. After using WindowMaker, Gnome+Sawfish, Ion2, WMII, Kde+Kwin, Gnome+Metacity, Compiz Fusion+AWN and testing out some more, I’ve yet to see one that fully addresses my needs.

One of my main complaints is the waste of screen real estate. Both window managers and applications themselves are at fault for this. The influence of Windows UI style in panels and windows has prevented most designers from getting the most out of the users’ screens. Ion2 is the window manager i’m currently most happy with, but it’s still not perfect if applications don’t properly cooperate, which is only possible if they follow some sort of guidelines (such as those discussed and published by the FreeDesktop project).

This blog post shows a suggestion that could, IMHO, improve the desktop experience, although maybe at the cost of reduced usability for computer illiterates.

As an introduction, here’s a quickly gimped draft of the idea I had some months ago:

simple UI draft

The increase in usable space is obvious (well, at least to power users). The famous and ancient “title bar” is gone. We already have the window title in the so-called task bar, so why repeat it again using a whole horizontal bar for it? And what’s with the habit of dedicating another whole bar for 5 tiny application menues? Furthermore, the old status bar can be set to automatically hide for additional real estate (with a behaviour similar to that of Google browser Chrome).

Most interactive widgets have been moved to the top of screen (but they might as well have been placed on the bottom or aside). Personally, I see no reason for spreading buttons all over the screen, other than following the current desktop environment trends. Having them all close together greatly reduces the need to move the mouse.

Keep in mind that the tabs depicted in that draft are not supposed to be fullscreen-only, but have a mixed TDI & MDI behaviour (similar to Opera but, instead, leaving the management of those document windows to… well, the window manager 🙄 ).

But it doesn’t stop there. While we’re at it, why not merge the ideas behind desktops and apps? Here’s the natural evolution of the original idea:

evolved draft

There, the concept of virtual desktops is applied as a way to organize tabs (instead of using yet more windows for the same application instance).

The key is what I’ve just decided to name generic-bar. This bar contains an “app” icon (gnome icon, firefox icon, favicon…), abstracted pager, “tabs” and applets (menues, buttons, traditional applets…) in any desired number and order. For example, in the last draft there are two generic bars: the first one contains “applications”, while the second one contains what we currently know as “tabs”. In essence, both applications and tabs would be handled the same way by the proposed desktop environment. Furthermore, this hypothetical desktop environment could handle generic-bar nesting of any depth.

The good thing is that this desktop proposal does not remove any functionality currently found on most desktop environment UIs, but actually adds more while freeing up even more space for your valuable applications to use.

10.29.08

Cómo “arreglar” Ubuntu

Soy de los que opinan que Ubuntu por defecto apesta un buen rato (y cuando digo Ubuntu, también quiero decir Kubuntu, Xubuntu, Edubuntu…). Le salva que es facilísima de instalar. Con este minitutorial espero conseguir que Ubuntu sea usable para alguien más que Joe Sixpack.

Supongo que la mayoría de pegas que tengo son respecto a la filosofía de Ubuntu, pero como es mucho más facil quejarse y escribir en blogs que hacer mi propio fork de Ubuntu, prosigo con mis pataleos. 😀

Lo primero, no sé para qué diablos deshabilitan la cuenta de root, si cualquiera puede hacer un sudo -s o un sudo bash. Por tanto, vamos a ahorrarnos teclear chorradas redundantes, que con el su de toda la vida vale y sobra:

sudo passwd

Por supuesto, nos metemos como root para los siguientes pasos. Hay dos formas:

su    #para la gente normal

su -c bash   #para la gente acostumbrada a sudo

Lo siguiente, no sé a quién se le ocurrió que para tener permisos de administrador, vale con saberte tu propia clave. Así que vamos a evitar que cualquier luser con una cuenta en el sistema pueda ganar permisos de root:

perl -pi -e ‘s/env_reset/env_reset, rootpw/g’ /etc/sudoers

Otra tema que me enerva bastante es ese asqueroso feto de engendro abortado llamado vim-tiny. No podían poner vi, qué va. Tenian que coger vim, partirle las piernas, extirparle el lóbulo frontal, y ponerle de nombre vim-tiny. Y al vim normal, ya puestos a liarla, le renombramos como vim-full, qué leches…
Después diran que la gestión de paquetes de Gentoo y de BSD son un coñazo, pero por lo menos no necesitamos recurrir a semejantes warrohacks para bastardizar un simple paquete!

apt-get remove vim-tiny

apt-get install vim-full

perl -pi -e ‘s/”syntax on/syntax on/g’ /etc/vim/vimrc   #démosle un poco de color a las tareas de sysadmin, en honor al difunto Tiny

SSH, absolutamente imprescindible, pero capándolo a solo quien lo necesite.

apt-get install ssh

usuarios=”root hombreman lusuario”

addgroup sshlogin

for i in $usuarios; do adduser “$i” sshlogin; done

echo “AllowGroups sshlogin” >> /etc/ssh/sshd_config

Lógicamente, esta gentucilla debería tener una política de contraseñas mínimamente digna:

for i in $usuarios; do chage -m 50 -M 60 -W 10 “$i”; done

También queda el tema de que cualquier usuario puede apagar el ordenador cuando quiera, incluso si otro luser tiene abierto un openoffice sin guardar en su sesión.

El equipo donde he metido Ubuntu ha quedado un poco más severo, pudiendo solamente el usuario root reiniciar/apagar/hibernar/suspender el equipo. Por desgracia, debido a las sabias decisiones del equipo de Gnome, uno se ve obligado a elegir entre:

a) Hacer clicks en noséqué clon de regedit.exe.

b) Editar archivos XML a pelo.

c) Dar palos de ciego con gconf-tool desde consola.

Por supuesto, si estais en remoto (como yo), existe otra opción igualmente agradable:

d) Averiguar uno mismo si es solamente una leyenda urbana, o si realmente el ser humano es capaz de meterse su propia cabeza por el weeeeno, como ibamos diciendo, que se puede configurar con algo de paciencia.

Nuestra Ubuntu ya pinta un poco mejor, no os parece?


Esto es otra cosa. 😎

Otro día más y mejor!

P.S.: Antes de que se enciendan las llamas, comentar unos pares de cosas:
– Respeto la libertad de cada uno de tener su propia opinión sobre el software mencionado.
– De hecho, estoy seguro de que a alguien le puede gustar semejantes fustañas como Gnome y Gconf.
– Odio casi por igual a Gnome y a KDE.
– La mayor parte de este post la he escrito de coña, incluído este comentario, pero podéis flamearme igualmente 😉