Ir al contenido principal

Ralsina.Me — El sitio web de Roberto Alsina

Un Verificador de links simple para Nikola

Es­te script es un muy sim­ple ve­ri­fi­ca­dor de li­nks que se ase­gu­ra que las pá­gi­nas que Niko­la ge­ne­ra no ten­gan li­nks ro­to­s. Va a ser par­te de Niko­la pro­pia­men­te di­cho una vez que es­té más pu­li­do y doit so­por­te lis­tar los tar­ge­ts

Para probarlo, bajalo y ejecutálo desde el mismo lugar donde está tu conf.py, inmediatamente después de un doit.

import os
import urllib
from urlparse import urlparse

import lxml.html

def analyze(filename):
    try:
        # Use LXML to parse the HTML
        d = lxml.html.fromstring(open(filename).read())
        for l in d.iterlinks():
            # Get the target link
            target = l[0].attrib[l[1]]
            if target == "#":  # These are always valid
                continue
            parsed = urlparse(target)
            # We only handle relative links.
            # TODO: check if the URL points to inside the generated
            # site and check it anyway
            if parsed.scheme:
                continue
            # Ignore the fragment, since the link will still work
            # TODO: check that the fragment is valid
            if parsed.fragment:
                target = target.split('#')[0]
            # Calculate what file or folder this points to
            target_filename = os.path.abspath(
                os.path.join(os.path.dirname(filename), urllib.unquote(target)))
            # Check if it exists, or report it
            if not os.path.exists(target_filename):
                print "In %s broken link: " % filename, target
    except Exception as exc:
        # Something bad happened, report
        print "Error with:", filename, exc

# This is hackish: we use doit to get a list of all
# generated files. Minor modifications would let you check
# the non-generated files as well.

for task in os.popen('doit list --all', 'r').readlines():
    task = task.strip()
    if task.split(':')[0] in (
        'render_tags',
        'render_archive',
        'render_galleries',
        'render_indexes',
        'render_pages',
        'render_site') and '.html' in task:
            # It looks like a generated HTML file
            analyze(task.split(":")[-1])

Confessions of a Troll

And then he told me "Rober­to's a known trol­l" and I was like "re­al­ly?" he seems like a nice guy!

—Not say­ing who said it

So, that hap­pened a while ago in a din­ner. And I am that trol­l. I must con­fess it, so here it is. I have a long, long, long his­to­ry of trolling. Per­haps I could ra­tio­nal­ize it in­to just be­ing ar­gu­men­ta­tive, or just en­joy­ing a good ar­gu­men­t, but no, re­al­ly, I de­rive plea­sure from see­ing peo­ple re­act to what I say.

That could maybe be in some way con­struc­tive, I could just do it to make peo­ple see things from a dif­fer­ent an­gle, and in my good mo­ments I do that. But in oth­ers I just find some­one I dis­like, or some­one who says some­thing that rubs me the wrong way, and I ... well, it's not pret­ty.

What I usu­al­ly do is up the ante. I es­ca­late. I say out­ra­geous things. Usu­al­ly just slight­ly more out­ra­geous than what the oth­er guy says, so I can still ra­tio­nal­ize it as "he start­ed it", or "he de­serves it" but hon­est­ly, deep in­sid­e, I know it's not true. I know I am be­ing nasty be­cause I like it. And that suck­s. It sucks that I have this mean streak in me, and I can't get rid of it. It sucks that I have fun in­sult­ing the oth­er poor bas­tard.

I could even say that most of the peo­ple I troll are trolls them­selves. But that's not re­al­ly an ex­cuse. If they de­served con­tempt for their trolling, then I am just as de­serv­ing for mine. I am sure they, al­so, have their rea­sons and those rea­sons sound per­fect­ly ra­tio­nal to them­selves.

I could say that I of­ten troll those who spread poi­sonous speech. That I troll those who are spread­ing mis­in­for­ma­tion and evil ideas. And yes, that is true, but again, I could re­ply with­out trolling. I could re­ply ra­tio­nal­ly, and just point out where they are say­ing non­sense, where they are spread­ing stu­pid­i­ty, and avoid the flair, avoid the gra­tu­itous in­sult.

I could say that I troll those who both­er me per­son­al­ly out of their own free will. So yes, telling a Je­ho­vah's Wit­ness that I will be at the door as soon as I wash my hands of the blood sac­ri­fice I make to Sa­tan is fun­ny, but why is it any bet­ter than just telling them I am not in­ter­est­ed.

Oh, sure, I could say that telling some­one who in­sult­ed me "opin­ions are like ass­holes, and so are you" is some­what clev­er, but I could just say "y­ou are wrong, rude, and un­de­serv­ing of my at­ten­tion".

I sure could say that trolling some­one who is rude, in­sult­ing, ob­nox­ious and dis­rup­tive may teach him (it's al­ways a he, is­n't he?) a lesson, but it's just not true. They just see those re­spons­es as chal­lenges.

I could say that feed­ing the oth­er troll is just harm­less fun, but it's not true be­cause I know it hurts peo­ple, and cre­ates an ob­nox­ious en­vi­ron­men­t. I could say that trolling those who de­serve to be trolled is fair. But it's not true be­cause I am noone's judge.

So, if I have trolled you, ac­cept this post as an apol­o­gy. Not a "sor­ry if I of­fend­ed you" apol­o­gy, but a straight apol­o­gy. I am sor­ry I trolled you. I will try to stop.

I will not stop say­ing and writ­ing what I think, and I will not ab­stain from re­ply­ing to oth­er peo­ple's opin­ion­s, but I will do a hon­est try to do it in a not-trolling man­ner, of of­fer­ing my opin­ion as it is, in­stead of as a per­for­ma­ce to make the oth­er one feel hu­mil­i­at­ed or hurt or un­de­serv­ing.

Be­cause, and here is my on­ly piece of ex­cuse: I hate bul­lies. I was sent to school two years too ear­ly. So that you have an idea how that can af­fect some­one, I am of av­er­age height, but un­til I was 13 I was con­vinced I was very short. I man­aged to be­come a de­cent swim­mer, but un­til I was 12 or so, I was con­vinced I sucked at all sports and games. I was in­ceas­ing­ly bul­lied since I first ev­er met my "peer­s" un­til I was able to kick the crap out of them. I be­came a tough kid. I could take a beat­ing like you can't imag­ine, be­cause I was too small to hit back, and the on­ly way not to be a to­tal los­er was to keep get­ting up and go­ing to be beat­en again, while mak­ing sar­cas­tic com­ments.

And it turned out that those sar­cas­tic com­ments worked. I got my ass kicked, but the next day that kid re­mem­bered how I was get­ting back on my feet and jok­ing about his moth­er. And that, of course, lead to fur­ther bul­ly­ing. When I was about 12, I was so ex­treme, I scared ev­ery­one so much, they stopped. I was scary. I talked like a freak­ing psy­cho. I prob­a­bly was close to be­ing one.

And the les­son I learned was that if you make fun of peo­ple, they got hurt enough to want to avoid it lat­er. So, I was, in fac­t, a bul­ly my­self. And thus, I be­came that which I hat­ed. I have had bet­ter times and worst times, I have been more in con­trol and not so much. And it has tak­en me a long time to fig­ure this out. I don't like what I be­came. So I will stop. And I am sor­ry.

Just gen­tle rib­bing and self­-dep­re­ca­tion from now on. Prom­ise.

Esto no es Matemática

¿Cuál es el si­guien­te nú­me­ro en es­ta se­rie?

2, 12, 16, 17, 18, 19

No se me ocurrió nada. Me dicen que la respuesta es 200. ¿Porqué? Porque es una lista de los números que empiezan con "d".

O sea, es una pre­gun­ta acer­ca de una co­sa com­ple­ta­men­te in­ci­den­tal de los nú­me­ro­s, su re­pre­sen­ta­ción en cas­te­lla­no, lo que es com­ple­ta­men­te no ma­te­má­ti­co. Me pre­gun­to por­qué es­tán ha­cien­do que los es­tu­dian­tes pien­sen en eso. ¿Al­guien sa­be?

Pennies for the Ferryman (Dead Eye #1)

Review:

There are shaky rules here, and good rules are a nec­es­sary thing when read­ing about this kind of sub­ject­s, at least to me. Oth­er than that, nice, light read. Cheap on Kindle, too.


Contents © 2000-2020 Roberto Alsina