What is a JSON feed? Learn more

JSON Feed Viewer

Browse through the showcased feeds, or enter a feed URL below.

Now supporting RSS and Atom feeds thanks to Andrew Chilton's feed2json.org service


Niclas Darville

Blog posts by Niclas Darville.

A feed by Niclas Darville


A Simple Script to Free Resources in Windows

Permalink - Posted on 2017-06-13 15:00

I have a computer that largely consists of eight-year-old components, so maintaining a stable 60 frames per second can be a challenge.

I mainly play Overwatch, and while the general performance seems to be acceptable, I started to notice some weird intermittent dips in performance—of course at the worst possible moments.

Turns out iTunes and Dropbox have a habit of just destroying users’ CPU for no good reason, which means you can’t predict when they’re going to spring a surprise on you.

On top of that, multiple apps have no compunction about using up all your bandwidth to download updates in the background; even Blizzard’s own launcher has started hogging all my internet as Overwatch was running at a speed I didn’t think I had chosen.

Closing all these miscreants is a pain and a half, both the time it takes to do the basic housecleaning every time you want to play a stupid game, as well as having to remember your checklist of programs to close.

This is where I ran into .bat scripts and Windows’s taskkill command that makes it dead simple to write your own script to close all these programs with a simple click before each session.

Just save the contents of killresourcehogs.bat to a file with a file name of your choosing and hit it before you play your game. Of course, you’ll have to configure it depending on the programs you use and don’t use; you don’t want to close the Blizzard launcher as you’re about to play Overwatch for instance.

Another scenario where you may want to retain your optimal performance is when streaming, recording or watching a video online where CPU is alpha and omega.

If you plan on doing more with this, you can also call killresourcehogs.bat from another batch script to avoid repeating yourself:

call killresourcehogs.bat

Now go rank up.

Update: Turns out this script is also excellent for quickly closing programs that might use a lot of bandwidth if you’re on mobile data or a slow internet connection.

Repeal and delay

Dropbox in particular is an awful piece of software, and on every startup, it immediately starts indexing which smothers your CPU. Most of the time, the first thing people do when their computer boots is to open a browser. Why have anything else delay that.

Rather than have Dropbox and similar apps do this, some people like myself opt for not running these applications on startup.

But it’s not like they’re unimportant apps so this is just a frustrating compromise that has its own issues. I’ve had no small amount of sync conflicts because of this.

Instead, I figured out an alternative that’s not as frustrating:

  1. Don’t run a list of apps on startup
  2. Create a list of apps with a delay after startp
  3. Implement list with batch scripting
  4. Put .bat file in the Start folder

Here are some apps I don’t need to run at startup:

  • Backup software
  • iTunes(!)
  • Dropbox(!)
  • Battle.net
  • Discord

Starting applications is little different from using taskkill to tend them.

I’ll show you what my startup.bat looks like and explain it line by line:

  • @echo off: don’t print anything
  • timeout /t 120: sleep for 120 seconds before moving on
  • iTunes: Some apps can be started with just a name
    • /min: start minimized; doesn’t work with Discord and Battle.net, and makes iTunes act weirdly
  • Dropbox: Batch scripting supports environment variables

The last part I’ll break down in more detail.

First off, if a path has whitespace ( ) or dashes (-), you will need to put your path in quotes. Otherwise, you should not put it in quotes.

If an empty terminal window opens, it’s because you messed one of these things up in one of your lines (or several).

When you put a path in quotes, you will often need to add a title argument to start. I just give it an empty one ("").

I don’t want to give you a more general explanation of how it works; just write your script through trial and error and see whether it starts. I know I have.

In light of this, let’s go over our start scripts once again:

  • iTunes: is a known app, so we just use shorthand
  • Dropbox: path has no spaces or dashes so we don’t use quotes
    • We use an environment variable, since it’s easier and prettier
  • Battle.net: path has a space so we use quotes and the empty title
  • Discord: path has a dash so we use quotes and the empty title
    • We use an environment variable, since it’s easier and prettier

One annoying thing here is that Discord creates a folder for each new version of its app so you’ll have to manually update it each time.

If you check the file location of the app in the Start Menu, you’ll see this as target application:

%LOCALAPPDATA%\Discord\Update.exe --processStart Discord.exe

I haven’t been able to recreate the execution in a batch script, but maybe someone knows how to do it in a way that isn’t too complex.

Either way, here is a a tolerable, self-made, self-controlled, exportable, shareable way to delay apps from starting up to improve your experience. You should never allow a third-party tool to do this for you.

The Start folder (on recent versions of Windows) is

%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup

You can also just use Run (Win + R) and type shell:startup. Drag and drop a shortcut for your script and you’re done.

Your computer may seem fine and fast now, but just you wait.

A Simple JSON Feed Implementation for Jekyll

Permalink - Posted on 2017-05-19 12:00

How to easily get a list of JSON feed items in the terminal.

I read about the new JSON feed spec, and I was intrigued by the novelty of it—not the ease of using JSON as much as the insurmountable pain of using Atom XML.

Since I use Jekyll for my sites, writing the code would need to be done in Liquid without any plugins and Ruby code. I decided to extend the code for my Hafnia Times site and project, in part because the whole thing is open-sourced on GitHub.

It’s borderline stupid how easy it was, but here’s the code1 it took:

A few stray comments on this.

First, fields like icon, favicon, and author depend on your particular implementation, and I didn’t feel like generalizing the code by using front-matter variables rather than just pasting the values directly.

Second, you’ll have to read the spec for the full deets on which fields are optional and mandatory; I want to get around to some fields that I’ve commented out for now in the code. Because Hafnia Times supports multiple authors, I can’t just put post.author as you would in most cases.

That’s about it; check out my JSON feed code for Hafnia Times, compare it to the Atom feed code, and see the live result on JSON Feed Viewer.

If images don’t show up, it’s because they’re hotlink protected.

It’s really just that easy.

Update: Thought why not and added one for this blog at https://ndarville.com/feed.json:

View blog in JSON Feed Viewer.

  1. It literally took me longer to write this blog post than the JSON feed code, because I couldn’t get Jekyll to escape the Liquid code example. I used the .liquid extension in the gist, because Gist forces syntax-highlighting based on your extension. ↩︎

How to Get Started with Mastodon

Permalink - Posted on 2017-04-01 12:00

(This is not an April Fools joke.)

What the h*ck is Mastodon?

A four-column Mastodon interface similar to TweetDeck
The Mastodon interface. Click the image for a larger image.

The very short answer is that Mastodon is an open-source alternative to Twitter that is already extremely polished. It almost works better than Twitter itself. It sure as h*ck is a lot faster.

Here is the nerdy answer from the GitHub repo:

Mastodon is a free, open-source social network server. A decentralized solution to commercial platforms, it avoids the risks of a single company monopolizing your communication. Anyone can run Mastodon and participate in the social network seamlessly.

An alternative implementation of the GNU social project. Based on ActivityStreams, Webfinger, PubsubHubbub and Salmon.

What Mastodon does is provide people the opportunity to create their own Twitter-like community.

Each community, or server, is called an instance. The most popular instance is the official one at mastodon.social. The second most popular is probably awoo.space.

There are many others; you can check some of them out in the list of known Mastodon instances.

You can follow and interact with people across instances and view users you don’t follow in the Federated timeline. The main distinctions are community guidelines, specific purposes of the instance, and privacy settings; not everyone wants to be public.

Furthermore, it’s up to each instance to decide which other instances to federate with. This means that if you use awoo.space, the federated timeline will only consist of updates from awoo.space and mastodon.social, whereas mastodon.social federates a lot more instances. You might want to review the instances a site federates with before deciding on where to register.

Mastodon has three kinds of timelines—feeds if you will:

  1. A timeline of the users you follow (like Twitter)
  2. A public local timeline of everyone on your instance
  3. A public federated timeline of everyone across some hand-picked instances

Let’s back up a bit and watch a brief silent video to give you a visual preview of the platform:

Here are some of my first impressions of the platform:1

I really dig the NSFW feature for photos and the content warning feature for text updates*. This makes it very easy to hide spoilers and other upsetting content—and very hard for people to excuse their transgressions. I feel very strongly about spoilers.

Just in time for the impending onslaught of Game of Thrones’s next season.

Get started

Sign up, duh

Sign up, dummy. Just start with the official instance for now.

Don’t forget to select an avatar, bio, and display name

Find friends

Use the find friends tool to connect with friends from Twitter.

Here are some people you should check out:

  • Me, obviously
  • Gargron, the creator of Mastodon
  • Sarah Jeong whom you should already know from Twitter

Update: some prominent new arrivals from the InfoSec community


You probably don’t want to use Mastodon in a clumsy browser tab if you plan on being a power user so here are your options:

You can also customize Mastodon with userstyles2 for your browser. This list does not contain all the userscripts such as this contrast-friendly userscript that’s very reminiscent of Tumblr’s design.

“Why shouldn’t I just wait and see?”

If you don’t mind being late to claiming a good username, sure.

As of now, almost 25,000 have signed up.

That’s it for now

Pretty easy, right?

Have at it—and follow me @pessimism@mastodon.social.

  1. If you want to know how I embed updates, check out the fiddle I created. ↩︎

  2. If a userstyle script isn’t working for you, you may need to add your instance’s URL pattern(s) to the list of includes at the top. ↩︎

Hvordan ser Undervisningsministeriets misbrugte trivselsmålinger ud?

Permalink - Posted on 2017-01-08 22:00

Politikens Jakob Sorgenfri Kjær har skrevet nogle glimrende artikler om, hvordan trivselsmålinger, som skolebørn skal udfylde, er kædet sammen med deres CPR-nummer og opbevaret uden samtykke fra forældrene.

  1. “Følsomme data om børn gemmes i strid med lov”
  2. “Ensomhed, stress og sexchikane kobles snart på gymnasieelevers cpr-nummer”
  3. “Vrede forældre melder Undervisningsministeriet til politiet for lovbrud i trivselsmålinger”
  4. “Børns fortrolige svar i trivselsmålinger bliver ulovligt brugt til sagsbehandling”
  5. “Danmarksmesteren i børns trivsel er på datadoping”
  6. “Efter misbrug: Kommuner beordres til at slette data om børns trivsel og orientere forældre”

Men hvilke personlige spørgsmål har skolebørnene helt konkret fået?

Der er to sæt spørgsmål til to aldersgrupper:

  1. Børnehave til 3. klasse (6–9 år)
  2. 4.–9. klasse (10–15 år)

Begge spørgeskemaer kan hentes på Undervisningsministeriets hjemmeside. Her er en backup af siden, når den engang opdateres eller ændres.

Spørgsmålene er kun tilgængelige som PDF-filer til print, hvilket ikke egner sig til andre formål. Derfor har jeg indtastet dem nedenunder.

“Spørgeramme til trivselsmålingen for elever i børnehaveklasse til 3. klasse”

Svarmulighederne er

  • “Ja, meget/tit/for det meste”
  • “Ja, lidt/nogle gange”
  • “Nej”

  1. Er du glad for din skole?
  2. Er du glad for din klasse?
  3. Føler du dig alene i skolen?
  4. Kan du lide pauserne i skolen?
  5. Er du glad for dine lærere?
  6. Har du ondt i maven, når du er i skole?
  7. Har du ondt i hovedet, når du er i skole?
  8. Er du god til at løse dine problemer?
  9. Kan du koncentrere dig i timerne?
  10. Er I gode til at hjælpe hinanden i klassen?
  11. Tror du, at de andre børn i klassen kan lide dig?
  12. Er lærerne gode til at hjælpe dig i skolen?
  13. Er der nogen, der driller dig, så du bliver ked af det?
  14. Er du bange for, at de andre børn griner ad dig i skolen?
  15. Er du med til at bestemme, hvad I skal lave i timerne?
  16. Er timerne kedelige?
  17. Lærer du noget spændende i skolen?
  18. Er det svært at høre, hvad læreren siger i timerne?
  19. Er jeres klasselokale rart at være i?
  20. Er toiletterne på skolen rene?

“Spørgeramme til trivselsmålingen for elever i 4.-9. klasse”

Svarmulighederne er

  • “Meget tit”
  • “Tit”
  • “En gang imellem”
  • “Sjældent”
  • “Aldrig”
  • “Jeg ønsker ikke at svare”


  • “Helt enig”
  • “Enig”
  • “Hverken enig eller uenig”
  • “Uenig”
  • “Helt uenig”
  • “Jeg ønsker ikke at svar”

  1. Er du glad for din skole?
  2. Er du glad for din klasse?
  3. Jeg prøver at forstå mine venner, når de er triste eller sure.
  4. Jeg er god til at arbejde sammen med andre.
  5. Jeg siger min mening, når jeg synes, at noget er uretfærdigt.
  6. Hvor tit kan du finde en løsning på problemer, bare du prøver hårdt nok?
  7. Hvor tit kan du klare det, du sætter dig for?
  8. Kan du koncentrere dig i timerne?
  9. Føler du dig ensom?
  10. Hvor tit har du ondt i maven?
  11. Hvor tit har du ondt i hovedet?
  12. Er du bange for at blive til grin i skolen?
  13. Hvor ofte føler du dig tryg i skolen?
  14. Er du blevet mobbet i dette skoleår?
  15. Har du selv mobbet nogen i skolen i dette skoleår?
  16. Er du og dine klassekammerater med til at bestemme, hvad I skal arbejde med i klassen?
  17. Hvis jeg bliver forstyrret i undervisningen, kan jeg hurtigt koncentrere mig igen.
  18. Hvis der er larm i klassen, kan lærerne hurtigt få skabt ro.
  19. Er undervisningen kedelig?
  20. Er undervisningen spændende?
  21. Hvis jeg keder mig i undervisningen, kan jeg selv gøre noget for, at det bliver spændende.
  22. Hvis noget er for svært for mig i undervisningen, kan jeg selv gøre noget for at komme videre.
  23. Møder dine lærere præcist til undervisningen?
  24. Er det let at høre, hvad læreren siger i timerne?
  25. Er det let at høre, hvad de andre elever siger i timerne?
  26. Lykkes det for dig at lære dét, du gerne vil, i skolen?
  27. Hjælper dine lærere dig med at lære på måder, som virker godt?
  28. Hvad synes dine lærere om dine fremskridt i skolen?
  29. Jeg klarer mig godt fagligt i skolen.
  30. Jeg gør gode faglige fremskridt i skolen.
  31. Undervisningen giver mig lyst til at lære mere.
  32. Lærerne er gode til at støtte mig og hjælpe mig i skolen, når jeg har brug for det.
  33. Jeg føler, at jeg hører til på min skole.
  34. Jeg kan godt lide pauserne i skolen.
  35. De fleste af eleverne i min klasse er venlige og hjælpsomme.
  36. Andre elever accepterer mig, som jeg er.
  37. Lærerne sørger for, at elevernes ideer bliver brugt i undervisningen.
  38. Jeg synes godt om udeområderne på min skole.
  39. Jeg synes godt om undervisningslokalerne på skolen.
  40. Jeg synes, toiletterne på skolen er pæne og rene.

Streaming privacy

Permalink - Posted on 2016-11-12 12:00

These days, it feels as if everyone’s a livestreamer. Everyone at least to entertain the idea of livestreaming their videogame forrays, and who can disagree with that.

No longer do people have to rely on abstruse software like XSplit and OBS, as graphics card manufacturer bundle their own streaming software with drivers. HDMI splitters are no longer required to livestream your console sessions, as they let you stream natively.

While software and hardware makers are slowly adapting the the new fad, their reaction to the privacy challenge posed by livestreaming has essentially been nothing.

While I can’t fix the problems for you, I can at least make you aware of them by addressing some of them.


  • Browsers
    • General:
      • Search/Address bar autocomplete
      • Recent or frequent websites
    • Chrome: name
    • Microsoft Edge
      • Display photo
      • Default language
      • Used to show full name
  • Web forms: autocompleted or pre-filled fields
  • Google: country
  • Clock: timezone (based on time) and more specific location (based on date format)
  • Windows
    • Recently or frequently used files, folders, and programs
    • Autocomplete
    • And yes, it’s usually more “compromising files” than personally identifiable information
    • Notifications and pop-ups (for screen capture)
The new-ish user tab in Chrome reveals your first name, which sucks for livestreaming privacy.
The new-ish user tab in Chrome reveals your first name, which sucks for livestreaming privacy.
Shows the File Explorer Options menu with a dedicated Privacy section.
Be sure to untick all the Privacy settings in your Windows installation's File Explorer Options.
The Indexing Options menu with the indexed lcoations.
Go to Indexing Options and click “Modify“ to specify which locations you want and do not want your Start Menu to index and feature when you hit your Start button. When you’re done, click “Advanced” and hit “Rebuild” for the changes to take effect. You’re better off using Launchy anyway.


  • User and server IP
  • Names
    • Username
    • Full name of friends (and friends of friends)
      • Eg “Real ID” on PSN and Battle.net
  • E-mail address, especially in log-in menus


  • Username (PATH) in editor and terminal chrome
Editors like Atom and Sublime Text reveal the PATH which can contain your real-life name.
Terminals and editors like Sublime Text and Atom in this case will reveal the file path in the window chrome. This will show your username on Windows—along with other potential information in the PATH dir. You can use a package like custom-title, but you’ll be putting your faith in an external piece of software that may let you and your privacy down.

“Streamer mode”

A “streamer mode” for videogame consoles won’t work, because streaming detection won’t work when people use capture cards instead of native broadcasting features—although it does go a long way.

One could, however enable a manual streaming mode switch, but this would no longer be automated—nor opt-out—which could still lead to inadvertent privacy disasters.

Another solution is to provide Twitch integration with your game so it will be able to detect whether you are live. This is probably the optimal option. This can be done on a per-game basis for PC, but it would require native support on consoles.

Speaking of native support, would it really kill Microsoft to build in features to make this as easy as possible for devs, be it Xbox or Windows.

A win-win for videogame developers

Making the lives of streamers and YouTubers easier with streaming-specific settings, automatic or manual, benefits everyone.

One way it can benefit videogame developers significantly is to use this setting in tandem with their game’s graphics settings. People don’t tend to understand how video compression works, but the more similar two contiguous frames look, the better the quality will be, because you’re able to send more information about the difference between the two images. Take a look at Tom Scott’s video on this for more info:

What this means for streaming and recording is that you’ll want to turn down or off settings like:

  • foliage detail
  • motion blur
  • depth of field

… as these make contiguous frames extremely distinct from each other.

With a streaming mode, these settings can be automatically detected and handled accordingly without the average streamer or YouTube needing to understand the ins and outs of how video compression works.

The stream or video will look better—and the game will. One might think developers would desire such a thing, but so far, game and OS developers seem to act against their own interests, concern for privacy or not.

Twitch Clips

Twitch released an “instant replay” service for their platform:

Note that you can see the clipper in the top left corner.

While convenient, entertaining, useful, and all sorts of good things, clips also serve to capture on-stream moments from VODs1 that the streamer later went on to delete. Lirik himself—one of the biggest streamers on Twitch—has accidentally revealed private information on a number of occasions, after which he went on to delete his VOD.

To repeat the point, even one of the most popular and seasoned Twitch streamers makes mistakes from time to time, and it’s absurd that there isn’t better accounting of this basic fact about human beings.

I want out

After much googling and thinking there was no way to even get clips deleted, it turns out there is:

Q: Can broadcasters removed clips created of their content?

A: Broadcasters cannot remove Clips they have not created, but they can request removal through the Clip report function found in the gear icon.

Q: I found a Clip that violates Twitch’s Community Guidelines/Terms of Service. What do I do?

A: If you need to report a Clip, you can click on the gear icon in the video player to access the report tool:

Screenshot of the pop-out menu from clicking the gear icon.

“How to use clips”

I have re-written this post a million times by now after a bunch of research, but let’s start with this “feature”.

This is a dumb UX for such an important feature. Is there a way to disable Clips of your stream by the way? Nope.

While we may defend the feature—or not—we have to recognize the fact that some demographics of streamers will be forced into a perpetual game of creepster whack-a-mole.

This is what the reporting interface looks like for viewers—ie people who aren’t the streamer:

A reporting interface that shows no direct reporting option for maliciously recorded clips. It only states that “Tell us your concern about this content so that we can review it to determine whether there has been a violation of the terms of service. (Abuse of this feature is violation of the terms of service.)’

This reporting interface is clearly designed for reporting streamers, not the behaviour of clippers. Can you tell at a quick glance how you would report a maliciously recorded Clip? I can’t.

I’m going to assume that you have to pick “Other Terms of Service Violation” at the bottom, given the literally parenthetical comment in the feature description.

I am happy that there is a feature that nominally exists to report malicious clipping of a streamer, but who will ever follow through on reporting a Clip with this reporting workflow?

Remember when I wrote that I had re-written this post a million times?

Well, one of the things I learned was that Twitch’s own Clip guide is fucking wrong. Here is what the FAQ says, as quoted before:

Q: Can broadcasters removed clips created of their content?

A: Broadcasters cannot remove Clips they have not created, but they can request removal through the Clip report function found in the gear icon.

And this is what it looks like when a streamer click the gear icon on a Clip from their stream clipped by someone else:

Two options available: “Remove All Clips’ and “Remove Clip’

And you’ll never believe what happens when you click “Remove Clip”; the fucking Clip is removed! Don’t ask me what happens when you click Remove All Clips.

I only discovered this through research and experimentation, and using the Clip list for my channel.

Repeat after me: reporting tool can never be an afterthough for any platform.

The Clips feature has no opt-out feature2, so you’re drafted into this panopticon by using Twitch. Most people will appreciate the Clips feature, but it doesn’t work for everyone, and it doesn’t have to. Let these people who feel at risk to opt out and give them a piece of mind. Surely they’ll feel more inclined to stream if they’re safer on the platform, no? This seems like a win-win for everyone.

On top of that, I think a basic, sane measure would be to automatically purge all Clips related to a VOD when it’s manually3 deleted. There’s a reason people delete the VODs, and while VODs expire, Clips go on forever.

Q: Do Clips ever expire?

A: No, just like Highlights, Clips will never expire!


Oh great, an API

On Jan 11, Twitch announced a new Clips API to much fanfare:

I was initially excited about this and toyed around with the API for a bit. I wanted to make some streamers happy by showing them a Top 5 list of their most popular Clips, but with one streamer, the only female one I tested it with, the top clips were, let’s just say, really fucking creepy.

And granted, the Clip may not have been made for wider distribution beyond the one user—the view count was very low for this fairly obscure streamer’s clip—but the bottom line is that the new Clips API is now another thing for streamers to worry about, vulnerable ones in particular, as always.

Is this a great feature for those people? I think we should consider our feelings in the same context as when companies like Facebook expand the search API for their platforms.

Have fun perusing the list of Clips for your channel.

A Clips section

As of Feb 27, channels now have a dedicated Clips section.


A competing service who were first with the “instant replay” feature are Oddshot.tv. They don’t provide a native takedown feature either, but you can apparently shoot “Joe” an e-mail, and he’ll take a look at it. That is, if you’re the streamer getting clipped, not a user who accidentally captured something compromising.

And there’s no “Alice” to look over your request if you happen to be a female support rep to handle a gendered situation.

Not that videogame communities has any issues of gender, of course.

As if Oddshot’s outreach measures weren’t absurd enough4, you can apparently sending them an e-mail to procure a key for Oddshot.tv’s clandestine API.


Aug 29, ‘17

Goes to show how clueless even behemoths like Activision Blizzard’s Bungie are:

update: the toggle does nothing

so I tested it and the name will still pop up even if you’ve turned it off so when I said something my name showed, when my brother typed in something his name still showed despite having it turned off

NeoGAF thread

UPDATE 2: Disabling REAL ID on yout account management does nothing either

update 3: It might only show your name to your real id friends on Bnet

  1. VODs are the archived videos of a livestreams. After a policy change, they expire after a certain amount of time. ↩︎

  2. Some say the feature is available exclusively to Partners, for what it’s worth. ↩︎

  3. A stream’s broadcast archive of VODs is automatically deleted after a certain duration of time—unfortunately. However, streamers tend to have a good reason to delete their VODs by themselves. There isn’t even a checkbox to purge all VOD-related clips when going through the flow of deleting your VOD, just a Cancel/Delete modal. ↩︎

  4. Reddit is not made for customer support nor a knowledge base. ↩︎

Livet med YouSee-internet og Danmarks dårligste kundeservice

Permalink - Posted on 2016-09-14 08:00

Hvis nogen skulle undre sig over, hvorfor jeg i sin tid oprettede en troubleshooting-guide, er det, fordi jeg efter 16 måneder som YouSee-kunde har været alle trinene igennem med midlertidig succes.

Og fredag 09/09 var den gal igen-igen-igen.

Fredag 09/09

En Game Over-netgraf for google.com
Sådan ser det ud, når min computer forsøger at forbinde til det der google over en ethernetforbindelse.
Til sammenligning er der ingen problemer med at forbinde til routeren
Til sammenligning er der ingen problemer med at forbinde til routeren.
28 kb/s ifølge Fast.com
28 kb/s ifølge Fast.com. Der er langt op til 102.400 (100 Mb/s).

Dags dato er der stadig problemer, og med YouSee starter man forfra hver gang, fordi ingen er interesserede i at fikse det grundlæggende problem; i stedet kommer de altid med en midlertidig løsning, der gør, at problemet kommer igen efter et par uger og måneder, som jeg og YouSee selv må kaste telefon- og fritid efter.

Jeg tror efterhånden, jeg har haft over fem teknikerbesøg, og jeg tør ikke tænke på, hvor mange timer jeg har tilbragt i telefonen med YouSee-medarbejdere, der intet kan eller vil; mit første opkald til dem omhandlede NAT-indstillinger på min PlayStation 4, og selv deres udvidede tekniske support anede ikke, hvad det drejede sig om, på trods af at jeg selv efterfølgende kunne få et Google-diplom i stoffet og selv fikse det, nu hvor der ingen hjælp var at hente hos YouSee.

Jeg har prøvet deres support på telefon, e-mail, Twitter og sågar TrustPilot i et forsøg på at udskamme dem til at gøre deres arbejde, men dét resulterer ofte i en henvisning til en e-mail-adresse, der ikke engang svarer. (Tricket er at skrive til facebook@yousee.dk i stedet for isupport@yousee.dk, fandt jeg senere ud af omkring den fjerde, femte eller 117. gang mit internet ikke virkede.)

Mine problemer har manifesteret sig på alle mulige sjove måder, men det seneste tilbagevendede problem opstår som regel på en fredag eller i weekenden. Jeg har på fornemmelsen, at nogen eller noget skaber en signalforstyrrelse, som det skete for nogen, der var heldig nok til at have en internetudbyder, der var interesseret i at fikse problemet.

Således mit eget forløb. Her følger, hvad YouSee-kunder generelt kan se frem til, uanset hvad deres problem måtte være.


Her er, hvad du kan vente dig, når du ringer op til YouSee:

  • I snit 20 minutters ventetid for at komme igennem hver gang.
    • Nogle gange 10, nogle gange 40.
    • Dernæst skal jeg som regel stilles om til den udvidede tekniske support, som også har ventetid—og forfærdelig ventemusik.
  • Mindst 20 minutter for at komme igennem til en tekniker.
  • Ingen mulighed for at blive ringet op når nogen er ledig.
  • På trods af at jeg er fast inventar i deres supportdagligdag, har jeg intet særligt telefonnummer eller noget overordnet sagsnummer, der kunne spare min og YouSees tid med at forklare problemet igen helt fra starten gang på gang på gang på gang.
  • Opstår der problemer i weekenden, kan du først bestille en tekniker om mandagen. Læs en bog.

Hvis du er i denne situation, kan du overveje selv at gå trinene i min troubleshooting-guide igennem.

I øvrigt er PingPlotter et fint værktøj til at se, om der er problemer med forbindelsen. Det findes både til Windows, Mac og iOS. Graferne i toppen af indlægget er fra programmet.

I øvrigt bliver du altid ringet op af et pisseirriterende automatiseret opkald, hvor du kan tilkendegive din tilfredshed med dit supportopkald. Jeg har ingen anelse om, hvor mine tilfredshedstilkendegivelser er havnet hos dem.


YouSee gør alt for ikke at hjælpe deres kunder. Når man siger, man har problemer med sit internet, får man at vide, at hvis de sender en tekniker afsted, og det viser sig, at problemet er selvforskyldt, skal man selv betale hele gildet. Det har en afskrækkende virkning, og når jeg fra tid til anden selv kan “fikse” problemet midlertidigt ved at fifle med routeren, skaber man et incitament til aldrig at fikse det grundlæggende problem. Det er ikke tilfældigt.

Bestiller jeg alligevel en tekniker, skal jeg stille mig til rådighed i otte timer, som regel i tidsrummet 8–16. De ringer med 30 minutters varsel, siger de, men det er nok langt de færreste, der med sikkerhed kan nå til og fra arbejde i det tidsrum. Hvem har i øvrigt tid til at vente 20–40 minutter i telefon på teknisk support, om det så er i arbejds- eller fritiden?

Der er i øvrigt ingen garanti for, at teknikeren dukker op.

Når teknikeren—lejlighedsvist—ankommer, får jeg at vide, at jeg sikkert har gjort et eller andet galt—i et tonefald, der om ikke andet skulle være forbeholdt mig min erfaring med YouSee taget i betragtning. Dét på trods af at teknikeren har været på forgæves besøg hos mig så mange gange, at han efterhånden har sin egen dørnøgle.

Man kan nok ikke bebrejde ham, hvis han ikke kan huske, han har været her før, men nogen hos YouSee må vel kunne se vanviddet i at rykke ud med tekniker for femte gang?

Eller at udskifte mit modem for anden eller tredje gang.

I øvrigt har jeg aldrig nogensinde fået nogen undskyldning eller godtgørelse for mit defekte internet; jeg har bare at betale de ~350 kroner om måneden for en tjeneste, der ikke virker. Gang det med 16 måneder, og så har du en nogenlunde kvantificering af YouSees kundeforagt.

Sidste nyt fra YouSee

Der er som sagt ingen garanti for, at YouSees tekniker dukker op, efter de har bedt dig om at stå til rådighed mellem 8–16 med 30 minutters varsel. Jeg har før oplevet, at teknikeren ikke dukkede op, og tirsdag 13/09 skete det fandme igen.

Tirsdag 13/09

Efter at have ventet otte timer på en tekniker fra 8 til 16, ringede jeg til YouSee klokken 17 for at spørge, hvad fanden meningen var.

Da jeg endelig kom igennem, var svaret, at problemet havde at gøre med en ekstern central, hvorfor der ikke var behov for at sende en tekniker ud—eller at spilde hele min dag. De gad bare ikke lige sige det til mig, fordi min tid er tilsyneladende ligegyldig ifølge YouSee.

Problemet gik ifølge en supportmedarbejder tilbage til en sag, jeg oprettede omkring juni, og de havde ingen idé om, hvornår problemet ventedes løst.

Jeg bad om at blive holdt opdateret. Det var det mindste, man kunne forlange, syntes jeg.

Onsdag 14/09

Dagen efter den udeblevne tekniker ringer jeg klokken 12 til YouSee for at få en opdatering, nu hvor jeg ikke havde fået nogen om formiddagen.

Det viser sig, at YouSee har overdraget fejlretningen, og at vedkommende vil tage ud at se på det eksterne problem … fredag—en uge efter mit problem (gen)opstod.

Jeg fik ydermere at vide, at deres politik ikke er at opdatere kunderne, før problemet er rettet; med andre ord ville jeg først have fået en opdatering fredag 16/09.—såfremt de altså overhovedet formår at løse problemet dér.

I øvrigt fortæller YouSee ikke deres andre kunder om det eksisterende problem:

Ingen driftsinfo på min adresse ifølge YouSee, selv om de selv har bekræftet problemet

Hvorfor ikke vælge en anden udbyder?

I øjeblikket har jeg kabelinternet fra YouSee med 100/30.

Før havde jeg kobbernet (xDSL) fra TDC med 10/2—eller deromkring.

Siden mit skifte til YouSee, er YouSee smeltet sammen med TDC, og selvom der var færre tekniske problemer med TDC, er det i sidste ende den samme forfærdelige kundeservice, jeg vil skulle døje med.

Men hvad er der ellers af alternativer?

Går jeg ind og ser på https://tjekditnet.dk, får jeg følgende alternativer:

Internetudbydere til min adresse—ingen andre end YouSee, hvis man ikke vil have en 20/1-forbindelse
Oversigt over internet udbydere og -løsninger på min adresse.

Hurra for fri konkurrence!


Onsdag 14/09, 15:50

Det gav ikke nogen mening for mig at vente på at høre fra YouSee om fredagen, hvor de måske, måske ikke, ville fikse problemet og måske-måske ikke opdatere mig.

Derfor valgte jeg at dedikere en-to timer på at genstarte mit modem et dusin gange på flere forskellige måder. Som regel virkede internetttet kun i ti sekunder, men til sidst var der lidt hul igen.

Fik nettet op at køre igen, men i en sørgelig forfatning
Semifunktionelt internet med konstante afbrydelser.

Internetforbindelsen var stadig i dårlig forfatning, men i det mindste havde jeg min oprindelige downloadhastighed igen.

Torsdag 15/09

18:10 om torsdagen er den gal igen.

Nettet gik ned igen
Nede igen.

Små tyve minutter af mit liv jeg aldrig får tilbage får jeg igen liv i skidtet.

Nettet kom op at køre igen med lidt mere knofedt
Fikset igen.

Lørdag 16/09, midnat

Surprise, surprise, intet opkald fra YouSee.

Der er internet, men med sporadiske afbrydelser, der ikke kræver manuel indgriben. Jeg glemte at tage et screenshot, men internettet skal nok ryge igen—det er ganske vidst.

Mandag 19/09

Så “lykkedes” det at få et screenshot af én af de sporadiske afbrydelser:

Endnu en sporadisk afbrydelse
Endnu en sporadisk afbrydelse.

Torsdag 22/09

Så kom der en SMS:

“Fejlen er rettet”, står der i SMSen
Mod hvis forventning?.

Ingen undskyldning, ingen forklaring, ingen refundering. Ingenting. Som altid.


En kopi, tak

Efter hele miseren prøvede jeg at få en kopi af hele mit kaotiske YouSee-forløb:

Er det muligt at få en kopi af samtlige sager, der er blevet oprettet på vores adresse, forud for teknikerbesøget i morgen? Så kunne man forhåbentligt komme et tilbagevendende til livs én gang for alle til alles bedste.

Hertil fik jeg svaret 12/09:

Hej Niclas

Tak for din mail.

Nej det er desværre ikke muligt at nå det til i morgen. Hvis du ønsker alle dine sager skal du kontakte vores kundeservice på tlf. 70704040

Venlig hilsen

I dag, 11/10, ringede jeg så endelig til YouSee for at få en kopi af mine sager, og I gætter aldrig, hvad de sagde: Jeg skulle sende YouSee en e-mail.

Jeg er nu blevet henvist til deres kontaktformular, og så må vi se, hvad der så sker:

Jeg kunne godt tænke mig en digital kopi af mine supportsager og logs for både internet og kabel-TV hos jer som kunde.

Jeg fik først at vide af e-mail-support, at jeg skulle få dem via kundeservice på telefon; så ringede jeg til kundeservice og fik at vide, at jeg skulle bruge kontaktformularen her, så jeg håber det er sidste stop på vejen.

Vh., Niclas

DR Kontant-program

Så fik YouSee DR Kontant på nakken med et indslag om deres kundeservice. De fik ikke med fløjlshandskerne:

Jeg kan varmt, varmt anbefale at se indslaget, der dokumenterer adskillige måder, YouSee tørrer deres kunder. Og indslaget fokuserer endda primært på kabel-TV—ikke kabelinternet som mit.

Så kunne YouSee pludseligt godt se, der skulle gøres noget:

Problemer igen

I gætter aldrig, hvad der skete:

Onsdag 02/11 12:00

85 kb/s ifølge Fast.com

PingPlotter slår totalt ud

Kigger man på driftsinfo, er der ikke umiddelbart noget at finde:

Ingen fejl er registreret på adressen

Men kigger man på historikken nedenunder, tegner der sig et billede:

Planlagt afbrydelse af bredbånd og telefoni i hele landet natten til 02/11, “afsluttet” 04:30

Jeg har på fornemmelsen, at arbejdet i mit område ikke er “færdigt”.

Efter at have ringet ind, ikke én men to gange (kl. 14 og 15:30), fik jeg at vide, at der også var andre i området med problemer. Problemet ventedes løst klokken 20, men da kundeservice lukker samme tid, blev jeg anbefalet at ringe ind klokken 19, hvis intet havde ændret sig.

Da jeg ved, hvor lang tid det kan tage at få en tekniker ud, bad jeg om at få en tid så hurtigt som muligt, uanset om problemet måtte blive løst senere, så jeg ikke skulle sidde flere dage uden internet.

Jeg fik at vide, at jeg ville blive ringet op af teknikerafdelingen for at aftale et tidspunkt “i dag eller i morgen”, hvilket om muligt er endnu mere upræcist end YouSees teknikerbesøgsinterval mellem 9 og 17.

Så kunne man ellers sidde ved telefonen og blomstre.

Efter tredje opkald omkring klokken 19 fik jeg at vide, hvad jeg forventede: Der var ikke noget nyt, og jeg måtte afvente et opkald fra tekniker—eller håbe problemet blev fikset eksternt.

Der kom aldrig noget teknikeropkald dén dag.

Torsdag 03/11


Så oprandt dagen bedre kendt som “eller i morgen”. En samtale med YouSee-support gjorde det klart, at det var eksternt—ikke hos mig—der skulle rykke en tekniker ud. Adspurgt om hvorfor jeg endnu ikke var ringet op af en tekniker fik jeg at vide, at teknisk support jo ringer inden for klokken 20. Og så kan jeg eller sidde og spille bas uden internet de næste ti timer.

Efterfølgende genstartede jeg mit modem traditionen tro, og internettet lader til at virke for nuværende.


Jeg fik aldrig noget teknikeropkald, men til gengæld gik mit internet helt ned natten til fredag. Så gad jeg ikke mere og gik i seng.

Fredag 04/11


Så prøver vi igen. Jeg har ikke tal på, hvor mange teknikere jeg har alt med i løbet af ugen. Det er et sted mellem fem og otte.

Morgenopkald til YouSee support er efterhånden så fast et ritual som morgenkaffen.

Denne gang fik jeg at vide, at jeg ville blive kontaktet mellem 14 og 16 af en tekniker via telefon, og at den pågældende supportmedarbejder ville ringe klokken 16 for at følge op.


“Vi skal have en tekniker ud”. No fucking shit.

Og det kan først blive på mandag.

På trods af at jeg ville have en tekniker ud i onsdags.

Stakkels tekniker i telefonen.

Så må vi i stedet vente på, at den tidligere medarbejder ringer klokken 16 som lovet.


Endnu ingen lyd fra YouSee-medarbejderen som lovet. Vi giver hende til klokken 17, før vi ringer og klager andetsteds.

Så meget for at se BlizzCon, som jeg havde købt billet til.

Jeg ringer op på fastnet, så min mobil stadig er ledig. Ventetid op til otte minutter.

Der stod ikke noget i loggen om, at hun ville ringe tilbage, så jeg skal nok ikke regne med at høre noget alligevel.


Så ringer vi til opsigelsesnummeret.

De har lukket for telefonen om fredagen … fra klokken 16.

Det lyder, som om de har en hel strategibog.

Hold kæft noget bondefangeri.


Hvad har jeg så brugt min dag på i telefonsamtaler?

  • 11:03: 18 minutter
    • med kundeservicemedarbejderen, der ville vende tilbage 16:00
  • 14:20: 13 minutter
    • med fjernteknikeren eller udvidet support, der bestilte en anden tekniker
  • 17:00: 10 minutter
    • med en anden kundeservidemedarbejder for at høre hvor fanden det lovede opkald klokken 16 blev af

Sammenlagt 41 minutter med tre personer med dét “resultat”, at der først komme en tekniker på mandag for at fikse dét problem, jeg meldte og anbefalede en tekniker to dage før om onsdagen.

Prislister og weekendteknikere

Jeg bemærkede noget nyt i min YouSee-bekræftelse af teknikerbesøg:

“Læs mere om teknikerbesøg”, står der til sidst i SMSen
“Læs mere om teknikerbesøg”.

Sammenlign det med én af mine mange tidligere bekræftelser:

“Læs mere om, hvem der betaler for teknikerbesøget”, står der til sidst i SMSen
“Læs mere om, hvem der betaler for teknikerbesøget”.

Der lægges altså (øget) fokus på, at man selv kan komme til at betale for teknikerbesøget—som jeg tidligere har gjort opmærksom på er en skræmmetaktik til at få kunder til at lade være med at indberette fejl. Nu er det så også kommet med i slutningen af SMSen som det sidste, man læser, og vel det første man forholder sig til.

Går man ind på linket, er der en række punkter, der blandt andet forklarer dig, hvornår du selv skal hæfte for teknikerbesøget med startgebyr på 495 bananer oven i en timepris på 321.

Men der er priser for besøg på weekend og helligdag. Så jeg er ikke bare snydt for en tekniker onsdag-torsdag-fredag; jeg er reelt blevet snydt for en tekniker onsdag-torsdag-fredag-lørdag-søndag.

Adspurgt om jeg kunne få en tekniker ud i weekenden—selvom det kan koste ekstra, som jeg bliver advaret—var der åbenbart ikke nogen tekniker med plads i kalenderen til besøget. Men hvor mange af de personer i det voksende YouSee-persongalleri, jeg har talt med i ugensløb, har reelt inddraget weekenden som en mulighed for teknikerbesøg?

Vi skal i øvrigt tilføje det sidste telefonopkald om weekendbesøg fra teknikeren til min fredagsstatistik:

  • 11:03: 18 minutter
    • med kundeservicemedarbejderen, der ville vende tilbage 16:00
  • 14:20: 13 minutter
    • med fjernteknikeren eller udvidet support, der bestilte en anden tekniker
  • 17:00: 10 minutter
    • med en anden kundeservidemedarbejder for at høre hvor fanden det lovede opkald klokken 16 blev af
  • 17:49: 2 minutter

43 minutter sammenlagt. Og en ødelagt weekend.

Lørdag 01:30

Internettet virker pludseligt igen uden nogen notits fra YouSee. Men hvor længe ved man ikke, og det betyder sandsynligvis også, at jeg er nødt til at afbestille teknikeren, selvom den grundliggende fejl ikke er løst, fordi YouSee er så glade for at true deres kunder med regninger for teknikerbesøg.

Og selvfølgelig er det mig, der skal sætte tid af til at kontakte YouSee og finde ud af, hvad fanden der foregår, fordi jeg ikke får en skid at vide via SMS, telefon eller e-mail.

Det bedste er nok at vente med at ringe til søndag, i tilfælde af at internettet går ned efter jeg har ringet. Hvilket ikke virker usandsynligt.

Søndag 14:00

Så skulle jeg høre, om teknikeren skulle afbestilles. Ifølge YouSee var der ikke nogen fejl—det var der åbenbart heller ikke til at begynde med—og når man ikke selv har adgang til medarbejdernes logs, er det håbløst at føre en samtale med em.

YouSee sagde, at jeg måske skulle afbestille teknikeren, hvortil jeg spurgte, om man så som YouSee-kunde måtte vænne sig til, at internettet ikke fungerer i tre dage onsdag til fredag. Jeg endte med at sige, at det umuligt kunde være min vurdering som menigmand, om der skulle en tekniker ud, og at det derfor måtte være op til YouSee at vurdere—og betale, uanset slutresultatet. Jeg blev advaret endnu en gang om muligheden for at betale, men teknikeren blev enig om, at der skulle en tekniker ud og undlod at afmelde besøget. Husk også på at det oprindeligt var en person fra “udvidet teknisk support”, som ringede mig op og selv endte med at bestille teknikerbesøget til mandag—ikke at forveksle med den gængse medarbejder, jeg ringede op i dag.

Dertil bad jeg også om bod og bedring såsom en refundering af vores betalte abonnement i perioden, hvor internettet ikke har virket.

Man skal selv levere dokumentation for, at internettet ikke har virket, fik jeg at vide af YouSee, der ikke ville uddybe, hvilken dokumentation der skulle bruges. I øvrigt måtte jeg vride armen om på medarbejderen for, endelig, at sende mig en kopi af mine logs og sager hos YouSee. Det lod også til, at medarbejderen kun kunne se de sidste tre måneders logs, hvilket vel er belejligt, når man søger kompensation, der går 18 måneder tilbage, til da vi blev kunder hos YouSee.

I morgen, mandag, kommer der en tekniker på besøg, og så må vi se, hvad han finder, og om YouSee ender med at tørre regningen af på mig, som de truer med gang på gang.

Alternativet er at klappe i og affinde sig med YouSees elendige behandling i form af internetproblemer og timelange samtaler med YouSee-medarbejder fast basis.

Og netop som jeg har opdateret blogindlægget, sker dette kortvarige udfald:

Sekundudfald 14:21



Her er det spændende i forbindelse med teknikerbesøget.

  • Der opstår en fejl, som vi har set i ugens løb
  • YouSee er ikke i stand til at fastslå, hvor fejlen er
  • Er det YouSee eller kunden, der hæfter, hvis YouSee ikke kan finde—og løse—fejlen?

På Twitter siger YouSee:

Såfremt der ikke er fejl i vores net eller udstyr, så er det rigtigt at teknikerbesøg udløser en regning^K #

Her er, hvad politikken burde være:

Såfremt der ikke er fundet fejl hos kunden, betaler YouSee for teknikerbesøget.

Hvis YouSee ikke kan se fejlen, findes den ikke. På trods af at hele husstanden ikke kan komme på nettet.

Hvad stiller man op med dén epistemologiske fejlslutning, hvor huset vinder, selvom begge parter er stillet éns?

Det, der er på spil, er et status quo, hvor éns internet hele tiden går ned, uden YouSee kan eller vil gøre noget ved det—og hvor man på grund af monopol og underregulering ikke kan stille noget op som menig borger.

Svaret får vi i morgen.


Denne gang var der to teknikere forbi til en afveksling; der har ellers kun været én af gangene hidtil.

Der var som førnævnt rapporteret et problem i området, men de kunne ikke sige, hvor præcist det var. Måden centralerne (eller boksene) er forbundet på er, at for hver “snoning” af vejene kobles en ny boks på, således at du yderst ved en vej har Boks 1 og så fremdeles nogle bokse længere nede af vejen ved hver snoning:

  1. Vej/Boks 1
    • Vej/Boks 2
    • Vej/Boks 3
    • Vej/Boks 4

Min boks, lad os kalde den Boks 2, hører under Boks 1. Der var blevet målt støj på Boks 1—men teknikerne kan ikke placere problemet mere specifikt. Det er derfor muligt, at problemet ligger enten på min Boks 2 eller den overordnede Boks 1, som min boks kobler sig på.

Teknikerne endte med at skifte og omarrangere fordeler på min egen boks, og så må vi se, om det fikser problemet fremover.

Der blev også sat overvågning og alverdens målinger på, så YouSee/TDC har alt tænkelig data, når eller hvis problemet opstår igen.

Det er stadig ikke til at vide, hvad det oprindelige problem var, men støjen i området og den foregående vedligeholdelse natten til onsdag tyder jo på et problem, jeg ikke bildte mig selv ind.

Så det var godt, jeg med møje og besvær fik overtalt YouSee til at sende en tekniker ud.

Søndag, 13/11

DNS-afbrydelse. Var nødt til at gå af og på mit trådløse net for at fikse det.

Sidens DNS-adresse kunne ikke findes

Andre tilfredse kunder

Fredag 12:00, 09/12

DNS-afbrydelse. Varede omkring ti sekunder men ville have afbrudt et spil, hvis jeg var i gang med det. Suk.

12:20: Endnu en afbrydelse.

Mandag 12/12

Problemer igen, da jeg kom hjem til computeren om aftenen.


Problemer igen ved midnat.


Det var ikke internettet, men TV-signalet, der røg i hele landet:

De nåede dog lige at fikse det inden nytårsknaldet. Flot.

Det skal i øvrigt nævnes, at der intet var at finde om nedbruddet på YouSees driftsinfoside, da signalet først gik ned; kun via sociale media og breaking-gult på tv2.dk blev det klart, at det var et landsdækkende problem.


Nu er YouSee pludselig tilhængere af at kompensere alle deres kunder for nedetid:

Eller i hvert fald den her ene gang.

Når YouSee foretager vedligeholdelse, går det sjældent godt, 23/01

  1. 11:48: Vedligeholdelse frem til 14:30 (uden forudvarsel)
  2. 15:45: Ringer til YouSee, der siger, det er et kendt problem
    • Ingen SMS-indrømmelser som sædvanlig
    • Der kommer en internt opdatering 16:00
    • Problemet er mere omfattende end ventet (goddaw)
  3. Tidsrammen for at rette problemet er nu sat til 20:30
    • Sjovt som tidspunktet altid er efter lukketid for kundeservice (20:00)

Næsten 9 timer uden internet og en overskredet deadline på 5 timer.

SMS1.png SMS2.png

21:00: Intet internet.

Driftssiden siger nu, at fejlen “forventes” rettet 23:00:


På slaget 23 virkede internettet igen. 11 timer senere.

Fredag 15:10, 02/03


Fredag 18:00 02/17 - Glædelig fødsesldag

Så gik det ned igen. En genstartning af internetforbindelsen “fiksede” det. Havde jeg været i et internetspil, havde det smidt mig ud.


Søndag 14:00, 12/03

Nu er den helt gal igen:

Sporadiske forstyrrelser

Det hjalp ikke at logge af og på nettet eller at skifte fra 5.8 GHZ til 2.4 GHz, da jeg slet ikke kunne komme på det.

Problemet gik senere i sig selv, men jeg bemærkede, at mit livevideo stoppede, og at Google, som jeg pinger for at teste min forbindelse, havde skiftet adresse på same tid:

Google har skiftet adresse ifølge PingPlotter

Jeg har ingen anelse, om det her er et problem, men who the fuck does, når det gælder YouSee.

Torsdag 20:45, 30/03

Nu er den helt til hest:

pingplotter (TK) driftsmeddelelse (TK)

22:11 gik det i sig selv.

Tirsdag 17:00, 18/04

Efter flere dage med små udfald der næsten ikke var til at spotte, stejlede det til sidst helt tirsdag:

Udfald på udfald på udfald.

En genstart på computeren “fiksede” det.

Tirsdag 22:35, 02/05

Endnu et udfald.

Ud fald igen hvor det ikke var til at komme på nettet igen.

Denne gang løste en genstart på computeren det ikke. På ingen enheder virkede internettet ordentligt.

En genstart af routeren lader til at have virket. Indtil nsæte gang.

Søndag 14:25, 04/06

Så røg nettet igen i hele huset. Ethernet, wi-fi. En genstartning af routeren hjalp ikke.

Ringer op til dem, og den automatiserede tjeneste ender med at lægge på, angiveligvis fordi de har “for travlt”. Det lyder som et mere omfattende problem, men mit mobilnet er for

15:50 vendte nettet tilbage uden forklaring.

Opdateret: Ah, således:

Det er altid noget, at YouSees elendighed dækkes jævnligt af medierne.

Tirsdag 10:50, 28/06

I begyndelsen af juni sendte YouSee mig en mail om, at de ville opgradere min internethastighed gratis. Nej hvor fint.

Min hastighed forblev dog den samme, så jeg ringede til dem for at få lidt afklaring. Jeg brugte det direkte nummer, hvor det kun tog fire minutter at fuldføre samtalen. Hvorefter de stillede mig videre til det normale nummer, der tager væsentligt længere at komme igennem på.

Det kunne de godt se ikke gav mening, så de satte endelig hastigheden op—og installerede lige en firmwareopdatering til routeren, mens de var ved det. Det tog i øvrigt 17 minutter at fuldføre opkaldet.

Fedt. Eller hvad?

Kort tid efter forsvandt mit internet.

Endnu et opkald på 15 minutter resulterede i, at den fortabte medarbejder bestilte en tekniker (per telefonsamtale) … til næste dag. I tidsrummet 12–14. Så kunne jeg ellers klare mig uden internet.

Jeg prøvede at slukke og tænde routeren, men det resulterede i, at jeg gik fra elendigt internet (0.25 Mbps) til intet internet.

Jeg glemte i første omgang at nævne, at den første person, jeg talte med, havde installeret nyt firmware, så jeg måtte hellere ringe til YouSee og klæde morgendagens fjerntekniker på til at få det fulde overblik. Det krævede et opkald på 27 minutter.

Onsdag 13:30, 29/06

Næste dag ringede teknikeren. Han kom med råd og forslag så indsigtsrige som “har du prøvet at slukke og tænde routeren?” og “prøv at trykke på reset-knappen”. Jeg prøvede at slukke og tænde routeren og at trykke på reset-knappen. Det hjalp til stor overraskelse ikke. Jeg fik mit elendige internet tilbage, men kun de 0.25 Mbps ud af 140 med en udfaldsgraf, der ser helt råbelig ud. Så vi bestiller en tekniker til næste dag … i tidsrummet 8–16. Hvor jeg alligevel ikke har noget at tage mig til.

“Han ringer en halv time i forvejen” siger de som altid, som om det var én eller anden genistreg af en løsning direktionen selv kom på.

Sådan ser det ud, når YouSee opgraderer éns internet fra 100/30 til 140/30

En halv time efter min samtale bliver jeg ringet op af et nummer, jeg ikke genkender. Det viser sig at være en YouSee-sælger, der vil få mig til at vælge et YouSee-abonnement. Han får en ordentlig overhaling, ikke så meget på grund af mine generelle YouSee-erfaringer, men fordi jeg konstant bliver spurgt om det præcist samme—mindst ti gange i min tid med YouSee. Jeg er faktisk blevet spurgt om det I FUCKING GÅR, da jeg ringer for at høre, hvorfor min internethastighed ikke er blevet øget som lovet.

Manden siger, at “han prøver en anden dag”. Det vil jeg gerne have mig frabedt, og efter jeg gør det klart, at jeg aldrig er interesseret, forsvarer manden fandeme praksis ved at sige, at når jeg tilmelder mig konkurrencer og skriver mig på på Facebook, udleverer jeg mit telefonnummer, som andre selskaber så kan udnytte til at spamme mig til Jordens undergang.

Jeg har ikke nogen Facebook-bruger, og jeg skriver mig ikke op til danske konkurrencer; jeg indtaster mit telefonnummer, når jeg køber varer over nettet, for det er desværre obligatorisk. Men giv endelig kunderne—DER I FORVEJEN GIVER DEM PENGE AF URANSAGELIGE ÅRSAGER—skylden for den uendelig strøm af spam.

Jeg siger, at hvis jeg hører fra dem om det én gang til, så ringer jeg til Forbrugerrådet og anmelder dem fra spam, hvilket ikke lyder som den største overfortolkning af gældende forbrugerlov og om ikke andet anstændig behandling af danskere og betalende kunder. Og i samme omgang siger jeg, at YouSee you bare kan lade være med at købe de pågældende lister med telefonnumre.

Aldrig har jeg hørt nogen YouSee-medarbejder være så ivrig efter at afslutte en samtale.

Torsdag 15:30, 29/06

Ny tekniker i telefonen. Han er der om ti minutter—ikke 30. Men det er jeg vant til alligevel.

Vi endte med den “nemme” løsning, som er at udskifte routeren med en ny. Der var tilmed tale om en ny model, så jeg er på min tredje eller fjerde routermodel. Den skulle også være gearet, til når de opgraderer coaxnettet på landsplan engang næste år.

Han havde heller ikke meget positivt til overs for nogen af de to Sagem-routere.

Det var en ny tekniker denne gang; mere end fem gange hos samme kunde er nok også lidt meget. Flink og tålmodig person i modsætning til sin forgænger.

Søndag 18:52, 02/07

Så røg nettet igen.

Når jeg tilgår routeren på og først indtaster et forkert password, får jeg følgende velkomst:

“Dit modem kan ikke få forbindelse til internettet”

Jeg ser samme billede, når jeg prøver at gå på nettet med min iPad, mens det wi-fi er slået til. Det er godt nok lang tid, siden jeg har set den her besked.

Indtaster jeg det rigtige password på routeren, ser det ud til, at jeg godt kan komme ind på den. What?

Jeg kan ikke lige finde genstartsindstillingen, som jeg vist alligevel ikke skal bruge, men til gengæld kan jeg se det her:

Netværksdiagram, med et stort, fedt, rødt X mellem router- og internetikonet.

Jeg slukker, tæller til ti, og tænder igen for routeren. Intet hjælper det.

Jeg prøver at gå ind på YouSees driftsinformationsside, men de har redesignet siden, og det virker langt mere bøvlet at finde nogen information. Umiddelbart er der ikke noget.

Kort efter kommer nettet tilbage, cirka 19:07.

21:31 røg det fandeme igen:

Kort afbrydelse af et par sekunders varighed

Der er helt sikkert et eller andet galt.

Onsdag 22:45, 05/07

Så røg nettet igen.d

Samme bøvl som sædvanligt, ikke noget anderledes hér

En genstart “fiksede” det.

Torsdag 16:15, 06/07

Der er mere end ti minutters ventetid, får jeg at vide.

Et par minutter tilføjer de, at jeg er #36 i køen. Gad vide hvad der sker hos YouSee for tiden, når ventetiden er så lang. Det er vel ikke, fordi der sidder foran computeren eller TVet, når sommeren er på det højeste.

Små 20 minutter senere kommer jeg igennem. Jeg foreslog selv, vi satte overvågning på på baggrund af min store viden om emnet.

Vi aftaler at overvåge en uge, hvorefter de ringer mig op klokken 12 og ser på det.

De kan dog ikke garantere, at teknikeren, der ringer, har kigget på data forud for opringningen.

Lørdag 02:00, 15/07

Natten til lørdag var der noget, der slog mig: YouSee ringede sgu da aldrig tilbage!

Søndag 01:27, 30/07

Natten til søndag skete det igen. Dejligt.

En genstart og så var det tilbage.


Gentagne problemer. Ringede osv …

Søndag 00:18, 09/10

Nettet hoppede af et sekund og kom så tilbage. Skete mens det regnede kraftigt?

Torsdag 01:00, 09/11

Der har været en håndfuld udfald siden sidst, jeg glemte at inkludere.

Først var nettet nede. Så ringede jeg til YouSee og fik fat i én, og problemet gik vist i sig selv. Medarbejderen gav mig hans e-mail, som jeg så senere skrev til, da der igen var problemer. Jeg fik aldrig noget svar.

En del uger efter blev jeg ringet op igen af en kundetilfredshedsstarut, der vistnok prøver at sælge mig et telefonabonnement for 117. gang. Jeg forelagde ham, at jeg stadig ikke var helt tilfreds med deres internet, hvortil personen i den anden ende forsikrede mig, at “det er helt normalt”, og at han havde samme problemer(?!).

Nu i nat er internettet så gået ned igen. En genstart fik nettet tilbage.

Held og lykke hvis du nogensinde skal livetransmittere noget.

Mandag, 13/11

Meget apropos måtte jeg opgive at spille Diablo 3, da jeg fik afbrudt mit spil tre gange i træk. Ifølge PingPlotter ændrede mit DNS til google.com (ifa. en ny IP-adresse), jeg pinger, og Blizzard hard sandsynligvis ikke gjort det muligt at gendanne forbindelse til serveren, når der kommer en afbrydelse.

Fredag, 24/11

Så stejlede internettet igen. Genstart virkede ikke. Teknikeren kom med de sædvanlige dødssyge forslag, der ikke virkede. “Det ser fint ud herfra” har jeg efterhånden hørt tusind gange. Godt man har PingPlotter til at modbevise det.

Der kommer en tekniker—i det mindste kommer han allerede i morgen.

På vej ud min bil ser jeg pludselig en YouSee-vogn og et stort telt omkring et kæmpe relæ max 200 meter fra min adresse. Kunne det tænkes, at det var værd at nævne i min samtale med teknikeren? Suk,

09/01, 2018

Det er svært at huske at opdatere siden med problemer, men jeg prøver at huske det.

De sidste par dage har der igen været udfald efter nogle driftsproblemer, der efter YouSees vurdering skulle være fikset. Det er ikke tilfældet, kan jeg afsløre.

img: 2018-01-09

20/06, 2018

“Yousee: It-fejl sendte tusinder af hemmelige numre til åben nummeroplysning”

07/07, 2018

Udfald i hele husstanden igen. Gad ikke vente og genstartede routeren.

10/10, 2018

BT: “YouSees kundeservice vakler: ‘Aldrig oplevet noget lignende’”

06/12, 2018

10/12, 2018

01/02, 2019

(Et par sporadiske udfald senere …)

Mens jeg undersøgte en VPN-tjenestes hastighed, bed jeg mærke i, at min uploadhastighed var forfærdeligt langsom. Selv når trafikken ikke gik igennem en VPN.

Mit abonnement var, sidst jeg tjekkede, på 150/30, men da jeg går ind under min YouSee-konto, står der pludselig 150/10—altså en uploadhastighed på 10 Mbps i stedet for 30.

150/10-abonnement i stedet for 150/30 (til 309 kroner)

Sammenlign de 150/10 til 309,- januar 2019 med januar 2018:

140/30 til 309 kroner i januar 2018

Og læg dertil at jeg fik opgraderet min downloadhastighed fra 140 til 150 januar 2019:

"Prisen på dit bredbånd ændrer sig ikke. Men vi har valgt at give dig en højere hastighed, så du pr. 1. januar får 150 Mbit i stedet for 140 Mbit."

Jeg ville gerne gå gamle kvitteringer igennem for at se, hvad der er sket og hvornår, men PDFerne virker ikke på profilsiden …

04/02, 2019

Jeg får bekræftet omtrent det værste af kundeservice: 28. oktober 2019 blev adskillige kunders internethastighed nedgraderet i hvad YouSee i en eufemisme kalder en “migration”.

For at få min gamle forbindelse skal jeg nu betale 40 kroner mere.

Næste opkald er til Forbrugerrådet.

150/30 til 349,- hos YouSee; hvad kan man få fra konkurrenterne?

300/60 til 360,- hos Telenor

Kun det dobbelte af YouSees hastighed til ti kroner mere.

(Og 1,- i oprettelsesgebyr skal det retfærdigvist nævnes.)

Nåja, og så får man 10–20% rabat, jo flere Telenor-abonnementer man har.

14/02, 2019

Så er der skrevet en henvendelse til Forbrugerombudsmanden.

YouSee har i øvrigt prøvet at kontakte mig flere gange efter telefonsamtalen og blogopdateringen, kan jeg se. Dog uden henvendelser via SMS, e-mail og telefonsvarer, men så ville der jo også være foreligge dokumentation for eventuelle indrømmelse. Desuden ringede de altid om aftenen på de mest ubelejlige tidspunkter.

16/02, 12:40, 2019

Så røg internet og TV i hele husstanden.

Gudskelov for at jeg meldte det til YouSee, for de kunne åbenbart ikke selv se noget problem i området, før jeg kontaktede dem.

15.30 kom signalet tilbage.

18/02, 12:37, 2019

Så røg signalet igen.

15:40 var det tilbage. Ligesom sidste gang kontaktede jeg YouSee om problemet, før de kontaktede mig. De kunne endda se et uløst problem hos dem, på trods af at de havde erklæret fejlen rettet for to dage siden.

I det mindste kunne jeg ringe til TV-afdelingen, så jeg slap for at vente 20 minutter på at komme igennem til internetafdelingen.

24/02, 2019

Og igen er internettet nede; denne gang formåede YouSee selv at sende en drifts-SMS, inden jeg kunne få fat i kraven på dem.

Tredje gang er lykkens gang?

26/02, 2019

Og igen. Fjerde gang på to uger.

Nu siger YouSee, at de på grund af GDPR ikke længere kan se, om der er problemer i éns område, hvis man ikke oplyser sit YouSee-kundenummer eller CPR-nummer. Og da internettet er nede, kan jeg ikke slå kontonummeret op. Fantastisk.

Jeg fandt kundenummeret på anden vis og kom igennem. Det viser sig, at det er teknikerne, der står for at sende SMSer etc ud til kunderne, og de har fået påbudt at være meget bedre til at gøre det arbejde. Det lyder bureaukratisk.

27/02, 2019

Nede igen.

Tror det er på tide at få genopfrisket hvordan man får penge tilbage med udeblivende service.

28/02, 2019


Tror de ikke kan finde fejlen og bare prøver at fikse det om morgenen hvorefter de giver fortabt.

07/03, 2019

08/03, 2019

Ringede til YouSee for at få kompensation for nedetiden; det er jo ikke, fordi YouSee selv opsøger det.

Så vidt jeg forstod, kompenserer YouSee, hvis der er mere end 48 timers problemer i en måned, og kompensationssatsen er fast, uanset om der er problemer i længere tid. De kunne se en generel fejl fra d. 16.-19.

11/03, 2019

I dag kom der en “Tilbagebetaling af godtgørelse” på 245 kroner.

13/05, 2019

Så kom der en ny spiler på banen: Fastspeed, som består af tidligere topfolk fra de største teleselskaber, tilbyder 250,- om måneden til 100,- i oprettelse for 1.000 Mbit.

Priserne er fornuftige, men det lyder også, som om meget af installationen og håndteringen er op til kunderne selv, og det bliver nok lidt småt med kundeservicen.

22/08, 00:27, 2019

Nedetid igen. Det kan selvfølgelig være, de har foretaget en firmwareopdatering, men vi får jo aldrig noget at vide, så det er fantastisk gennemtænkt i det hele taget.

12/12, 00:45, 2019

Udfald igen. Kom tilbage af sig selv efter to minutter.

09/02, 19:15, 2020

Sporadiske internetafbrydelser igen.


Stadig udfald.


Udfaldene fortsætter. Jeg har sat PingPlotter til at køre i baggrunden for at følge det, og det er ikke kønt at se på lige i øjeblikket.

Interpreter, a Google Translate Bot for Slack

Permalink - Posted on 2016-04-01 12:00

Screenshot of the translating bot in action.

Setting it up

  1. Install the Beep Boop bot, which will create a forked GitHub repo for you.

  2. Register an account and follow the instructions at https://cloud.google.com/translate/v2/pricing. The pricing is as follows:


    $20 per 1 M characters of text, where the charges are adjusted in proportion to the number of characters actually provided. For example, if you were to translate 500K characters, you would be billed $10.

    Language Detection:

    $20 per 1 M characters of text, where the charges are adjusted in proportion to the number of characters actually provided.

    Usage limits:

    Google Translate API has a default limit of 2 M chars/day. You can increase this limit up to 50 M chars/day in the Cloud Platform Console by following the instructions below.

    If you need to translate more than 50 M chars/day, please contact us.

  3. Since there is currently a free trial of 60 days with a $300 voucher, you shouldn’t be paying anything at all for the next two months.

  4. Create a project on Google Cloud for our interpreter.

  5. Enable the Google Translate API—and billing—for your Google Cloud project.

  6. Create the API key for your Google Cloud project. You’ll need this later.


First, you need to install the npm package for Google Translate, the aptly named google-translate.

From the terminal, you can type npm install google-translate --save, which will automatically add the package to your list of dependencies.

You can also just add it manually to the file using GitHub’s online interface:

"dependencies": {
  "botkit": "0.0.5",
  "google-translate": "^1.0.6"

In diff terms:

"dependencies": {
- "botkit": "0.0.5"
+ "botkit": "0.0.5",
+ "google-translate": "^1.0.6"

You are free to edit the rest of the information in the file, but it has no bearing on how the bot operates. The mandatory requirement is adding the google-translate dependency.


This is what the file will look out, if we delete some of the superfluous boilerplate code and hide the interpreter functionality:

var Botkit = require("botkit");

// Expect a SLACK_TOKEN environment variable
var slackToken = process.env.SLACK_TOKEN;
if (!slackToken) {
    console.error("SLACK_TOKEN is required!");

var controller = Botkit.slackbot();
var bot = controller.spawn({
    token: slackToken

bot.startRTM(function (err, bot, payload) {
    if (err) {
        throw new Error("Could not connect to Slack");

//=> Interpreter: translates Danish to English
// ...
// <=

// This goes by the end of the file; it works as an "else" function for listener events.
controller.hears(".*", ["direct_message", "direct_mention"], function (bot, message) {
    bot.reply(message, "Sorry <@" + message.user + ">, I don\'t understand. \n");

This is what our interpreter code looks like—the // ... in the snippet above:

//=> Interpreter: translates Danish to English
// Expect a GOOGLE_TOKEN environment variable
var googleToken = process.env.GOOGLE_TOKEN;
if (!googleToken) {
    console.error("GOOGLE_TOKEN is required!");

var googleTranslate = require("google-translate")(googleToken);

controller.hears(["^translate (.*)$"], ["direct_message", "direct_mention"], function (bot, message) {
    googleTranslate.translate(message.match[1], "da", "en" function(err, translation) {
        try {
            bot.reply(message, ":flag-dk: => " + translation.translatedText);
        catch (err) {
            bot.reply(message, err);
// <=

Pay attention to this part:

googleTranslate.translate(message.match[1], "da", "en", function(err, translation) {
    try {
        bot.reply(message, ":flag-dk: => " + translation.translatedText);

Because I’m from Denmark, I created this bot to assist the poor people on my Slack team who had to deal with the horrors of the Danish language. This has two implications:

  1. I’ve included "da" (Danish) as the “source language” parameter. What this means is that the Google Translate API won’t have to detect the language—which, if you recall, incurs additional fees:

    Language Detection:

    $20 per 1 M characters of text, where the charges are adjusted in proportion to the number of characters actually provided.

    You can either leave out this parameter for all-purpose translation or choose a different source language. (Or create a separate keyword for each type of query.)

  2. The translation output is ":flag-dk: => " + translation.translatedText

    Which turns into “🇩🇰 => [translation]”.

    You can change it to whatever you want.

This is what the full code for index.js looks like:

var Botkit = require("botkit");

// Expect a SLACK_TOKEN environment variable
var slackToken = process.env.SLACK_TOKEN;
if (!slackToken) {
    console.error("SLACK_TOKEN is required!");

var controller = Botkit.slackbot();
var bot = controller.spawn({
    token: slackToken

bot.startRTM(function (err, bot, payload) {
    if (err) {
        throw new Error("Could not connect to Slack");

//=> Interpreter: translates Danish to English
// Expect a GOOGLE_TOKEN environment variable
var googleToken = process.env.GOOGLE_TOKEN;
if (!googleToken) {
    console.error("GOOGLE_TOKEN is required!");

var googleTranslate = require("google-translate")(googleToken);

controller.hears(["^translate (.*)$"], ["direct_message", "direct_mention"], function (bot, message) {
    googleTranslate.translate(message.match[1], "da", "en" function(err, translation) {
        try {
            bot.reply(message, ":flag-dk: => " + translation.translatedText);
        catch (err) {
            bot.reply(message, err);
// <=

// This goes by the end of the file; it works as an "else" function for listener events.
controller.hears(".*", ["direct_message", "direct_mention"], function (bot, message) {
    bot.reply(message, "Sorry <@" + message.user + ">, I don\'t understand. \n");


As you might recall in the beginning, I asked you to create an API key to use later. bot.yml is where you tell your bot to look for an environment variable named GOOGLE_TOKEN.

name: interpreter
description: A bot that translates your queries
avatar: resources/avatar.png
  - name: GOOGLE_TOKEN
    friendly_name: Google API key
    info: API key used for Google Translate
    type: secret
    global: true

After this is done, go to your bot settings on Beep Boop and enter your Google token, so the bot can use the Google Translate API.

Testing and deploying

Every time your save and commit your bot repo, the bot is updated and rebooted. If you don’t want to test by means of trial and error, you can set up the bot locally by cloning the repo and running

npm install # Installs required packages listed in `package.json`
npm start

This will set up a, separate, local bot to run alongside the online version. This means that there are now to versions of the bot listening to what you type in Slack, which is why you will get two responses instead of one.

Keep in mind that you will have restart the bot after each change, so be sure to stop it and type npm start in your terminal again

When you are happy with the results, save and commit your changes to the repo, so the online version of the bot is updated.

This isn’t as hard as it may sound; I’ve just tried walking explaining the deails as painstakinly as possible.

Now go forth and add some features of your own!

Information og Privacy

Permalink - Posted on 2015-12-19 14:00

date:    21 September 2015 at 16:55
subject: [Website feedback] Private profiler på information.dk

Er det rigtigt forstået, at abonnenter med brugere på siden ingen mulighed har for at gøre deres profil privat, således at andre ikke har mulighed for at se éns læsning, interesser og anbefalinger?

Jeg tænker særligt på artikler om kontroversielle emner, hvor en såkaldt anbefaling vil være offentlig med navns nævnelse og link til profil, hvilket kan være anledning for et nyt publikum og personlige henvendelser.


Intet svar dags dato.

A Star Wars Filter

Permalink - Posted on 2015-12-13 14:00

So there’s this Star Wars movies coming out next week, and I don’t know if you’ve heard about it?

There is a lot of Star Wars everywhere right now; researchers have calculated that 85% of the Internet is currently Star Wars, with TV in close pursuit.

This is either bumming you out for one of two reasons:

  1. You couldn’t care less about Star Wars.
  2. You don’t want some idiot to spoil the movie for you.

In light of this, I’ve created a filter to get to at least the worst spoilers—I obviously can’t filter things I don’t know are in the movie, but filtering the names of actors and characters who might kick the bucket goes a long way.

The filter consists of three components:

  1. a word list
  2. a regular expression
  3. a Tweetbot mute filter

I’ll address these in reverse order, since you probably want to skip straight to the mute filter.

Tweetbot Mute Filter

The Tweetbot Twitter client’s mute filter uses the built-in mute filter support, which lets you to create a filter that can be imported just by clicking a link. This is what clicking that link on OS X with Tweetbot’s desktop client installed looks like:

Mute prompt in Tweetbot for Mac

As you can see, 14 of the (many, many) tweets in my timeline matched the filter. The matched tweets might look like this:

Screenshot of the tweets caught by the filter

How you choose to mute is ultimately up to you, so I leave it to you to decide on your mute settings.

If you don’t already have Tweetbot, you can buy the Mac client and the iOS client

To import my Star Wars filter, click the button below:

Click to mute Star Wars in Tweetbot

(For some reason, this only works on iOS sometimes; I’m able to get it working, as long as I don’t click the button from within Tweetbot, but from Safari instead. You can always click the button on OS X and let the mute filter carry over from there.)

When or if you get it working on iOS, this is the prompt you’ll see:

Mute prompt in Tweetbot for iOS

Regular Expression

The Tweetbot link is just a regular expression (regex) of the wordlist prepended by Tweetbot’s regex mute filter URL, which looks something like this:


The regex itself breaks the layout of this page when I feature it, but you can find it on this gist, if you want to take a peak at it. I can’t promise that someone won’t post spoilers in the comments of that page, though. You can go see the regex in action in this demo, however.

Bear in mind that I am not programmatic genius, so I’m sure there are many ways this pattern could be optimized. Right now, it looks like it gets the job done, but I can’t vouch for how it might affect the performance of Tweetbot and so on.

Word List

Finally, the list of characters, actors, and objects I try to match the filter against. It’s not perfect, I’m sure, but hopefully it won’t filter things you didn’t intend for it to do. The list does include some actors, though, so if you insist on reading about what Oscar Isaac and Harrison Ford, spoilers are not, you’ll have to fashion your own filter.

On that final note, here is the word list in its entirety; the list shouldn’t contain spoilers, unless you really don’t want to see a list of some of the actors and characters in the movie:

  • Maz Kanata
  • Han Solo, Harrison Ford+
  • Leia, Carrie Fisher+
  • Skywalker, Hamill+
  • Chewbacca, Chewie, Wookie(e), Mayhew+
  • Kylo, Adam Driver+
  • Daisy Ridley+
  • Boyega+
  • Abrams+, JJA+, J.J.A.+, J. J. A.+
  • (General) Hux, Domhnall+, Gleeson+
  • (Captain) Phasma, Gwendoline (Christie)+
  • Vader, Darth—sorry, @darth
  • Snoke
  • R2-D2
  • C3PO
  • Lor San, Tekka, (Max von) Sydow+
  • BB-8
  • (Poe) Dameron, Oscar Isaac+

  • Star Wars, Force Awakens
  • Lightsaber
  • Jedi
  • Stormtrooper
  • Millennium Falcon

  • Was Rey …, ( Rey )
  • Death Star
  • Jar Jar
  • George Lucas
  • X-wing, X wing
  • TIE Fighter

+ Refers to a filter based on the actor/director’s real name. You may not want to include this, if you want to follow the person—while risking the spoiler. You may have wondered why Lupita Nyong’o is not on the list. Go figure.

Keep in mind that I’ve only created a Tweetbot-compatible mute filter. If anyone wants to create something like a browser extension, please do and give me a link so I can enjoy a somewhat spoiler-free Internet as well.

PS: Do not contact me about straight-up spoilers to include in my mute filter. Don’t be an idiot.

Further Reading


  • Dec 22: Replace ( )? with ( |\-)? in order to filter URLs, too.
  • Dec 22: Add more keywords.

Web Fonts and Bandwidth Privilege

Permalink - Posted on 2015-12-04 20:00

We’ve given websites a lot of crap over the year for such things as

In many cases, the excuses pile up, and some challenges seem more insurmountable than others. Publishers need a revenue model, people need to know who’s visiting the website and reading the article, and non-technical editors need to build some website at one point, and might be afraid of stepping into the minefield of an outsourced code base.

But then there’s this:

Before font load: invisible text. Before font load: text is finally visible.
Flash of invisible text during load compared to the finished result.

That right here is seconds of staring of absolutely nothing on a website, because someone decided they wanted non-standard fonts, either because you had to pry them from the cold dead hands of the webdesigner, or because the typeface was considered important for #branding. (People generally don’t talk about the #branding of a website that loads execrably.)

What you see is the so-called Flash of Invisible Text (FOIT).

Most websites have this problem—it is a very common experience, because most people have got it in their head that they need to use fancy web fonts for their website.

The good news is that it’s easy to fix.

The bad news is that this means you don’t have a lot of excuses for not fixing it.


As part of a collaboration with /r/india to track the promises of the Modi administration, I first created my own mock-up in Jekyll—which was later spun off into its own project.

Given that the target demographic was largely Indian, my concept was informed by optimization as the main priority.

I was largely successful in this, and one of the accomplishments—amongst others, detailed in the GitHub issue—was bringing the size of the entire page below 100 kB.

When a project gets that small, everything starts to stand out. It caught my attention that my Raleway fonts took up more than two thirds of the entire page, which felt ridiculous to me.

I’ve grown very fond of custom web fonts, since I started using the Skeleton CSS framework, which powers the majority of this site, and many others as well.

The Dark Side of Web Fonts

But being obsessed with optimization, I always have to justify the use of it to myself. And for a project aimed at a country with varying speeds of bandwidth—compounded by the fact that one the world’s biggest CDNs only just opened data centres in a country of 1.25 billion people1 after we began on the project—playing fast and loose with fancy fonts demanded a justification.

Because two really bad things happen when you use a custom web font:

  1. Loading the font delays (blocks) the loading of the rest of the website (DOM).2
  2. Your browser renders the website, regardless of whether the font has finished loading, which creates a Flash Of Invisible Text (FOIT).

This is preventable, if developers want to do something about it. What follows is a description of how I improved the loading of web fonts on Goal Tracker, and what the results were. I’ll skip to the results first, so I don’t lose you with the boring code samples.

Your mileage may vary, but testing on a slow-ish 3G connection, I got the following results:

> Timelapse of loading with FOIT. Only the final frame has a readable web page at 3.5s
The unoptimized web page with FOIT.
> Timelapse of loading unoptimized web page with FOIT. The web page is readable from 1.3s and renders the page with the web font at 2.3s
Timelapse of loading optimized web page without FOIT.

Here they are as animated GIFs; you have to click them first, though.

This shows an animated timelapse of loading with FOIT. Only the final frame has a readable web page at 3.5s
The unoptimized web page with FOIT has 5 frames, because the site is repainted every time each of the three web fonts are loaded.
This shows an animated timelapse of loading unoptimized web page with FOIT. The web page is readable from 1.3s and renders the page with the web font at 2.3s.
The optimized web page without FOIT has 3 frames, 2 fewer, because the site is is only repainted once all three web fonts have been loaded.

Here are the main takeaways from the improvement:

  • The website first renders (ie DOM finished)
    • in 2.5s on the unoptimized version
    • in 1.3s on the optimized version
  • The website is readable
    • in 3.5s on the unoptimized version
    • in 1.3s on the optimized version—with fallback fonts
    • in 2.3s on the optimized version—with the web fonts

Again, this is for a web page with a minimal size footprint, so make of it what you will. If you can shave off a second for a website to render and two seconds for it to be readable even on a web page smaller than 100 kB, then any website will benefit.

The only “downside” is that users will see a Flash Of Unstyled Text (FOUT), a smaller—and briefer—inconvenience compared to a FOIT.


The following how-to is from my personal HTML guide for web fonts. I have abridged the code snippets from the guide to make them more readable. Some asides also wound up on the cutting-room floor.

Defeating FOIT

Change your stylesheet from including the custom font that looks like so:

body { font-family: "Raleway", Georgia, sans-serif; }

To this:

- body { font-family: "Raleway", Georgia, sans-serif; }
+ body { font-family: Georgia, sans-serif; }
+ .fonts-loaded body { font-family: "Raleway", Georgia, sans-serif; }

At the bottom of the HTML body, add the following using Font Face Observer:

<script src="/static/js/fontfaceobserver.js"></script>
    var raleway300 = new FontFaceObserver("Raleway", {"weight": 300}),
        raleway400 = new FontFaceObserver("Raleway", {"weight": 400}),
        raleway600 = new FontFaceObserver("Raleway", {"weight": 600});

    ]).then(function() {
        document.documentElement.className += "fonts-loaded";

This defeats FOIT by loading the fallback fonts first and then applying the custom fonts, once, and only once, they’ve finished downloading.

Deferred Font Loading


Either retrieve web fonts from Google Fonts:

<!-- Preconnect to external font to speed up font loading -->
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<!-- Delay download of font until document is loaded -->
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Raleway:300,400,600" media="deferred" onload="if(media!='all')media='all'" />
<noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Raleway:300,400,600" media="all" /></noscript>

Or load them locally using localfont.com.

<!-- Delay download of font until document is loaded -->
<link rel="stylesheet" href="/static/typefaces/css/fonts.css" media="deferred" onload="if(media!='all')media='all'" />
<noscript><link rel="stylesheet" href="/static/typefaces/css/fonts.css" media="all" /></noscript>

Where fonts.css looks something like this:

@font-face {
    font-family: "Raleway";
    font-weight: 300;
    font-style: normal;
    src: url("../fonts/Raleway-300/Raleway-300.eot");
    src: url("../fonts/Raleway-300/Raleway-300.eot?#iefix") format("embedded-opentype"),
         local("Raleway Light"),
         url("../fonts/Raleway-300/Raleway-300.woff2") format("woff2"),
         url("../fonts/Raleway-300/Raleway-300.woff") format("woff"),
         url("../fonts/Raleway-300/Raleway-300.ttf") format("truetype"),
         url("../fonts/Raleway-300/Raleway-300.svg#Raleway") format("svg");

@font-face {
    font-family: "Raleway";
    font-weight: 400;
    font-style: normal;
    src: url("../fonts/Raleway-regular/Raleway-regular.eot");
    src: url("../fonts/Raleway-regular/Raleway-regular.eot?#iefix") format("embedded-opentype"),
         url("../fonts/Raleway-regular/Raleway-regular.woff2") format("woff2"),
         url("../fonts/Raleway-regular/Raleway-regular.woff") format("woff"),
         url("../fonts/Raleway-regular/Raleway-regular.ttf") format("truetype"),
         url("../fonts/Raleway-regular/Raleway-regular.svg#Raleway") format("svg");

@font-face {
    font-family: "Raleway";
    font-weight: 600;
    font-style: normal;
    src: url("../fonts/Raleway-600/Raleway-600.eot");
    src: url("../fonts/Raleway-600/Raleway-600.eot?#iefix") format("embedded-opentype"),
         local("Raleway SemiBold"),
         url("../fonts/Raleway-600/Raleway-600.woff2") format("woff2"),
         url("../fonts/Raleway-600/Raleway-600.woff") format("woff"),
         url("../fonts/Raleway-600/Raleway-600.ttf") format("truetype"),
         url("../fonts/Raleway-600/Raleway-600.svg#Raleway") format("svg");

/** I prefer to place this part in fonts.css, but you can place it in your regular style.css */
.fonts-loaded body { font-family: "Raleway", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; }

Backward Compatibility

Deferred Font Loading
  • This method does not work in Android < 4.4 because the onload handler does not fire when content is available—I’m looking into a workaround for this.
  • Some browsers appear to still block CSS render despite media="none". This means CSS loads as it usually does—I’m looking into this.

Keith Clark: “Loading CSS without Blocking Render”

Deferred Font Rendering (FOIT)

FontFaceObserver has been tested and works on the following browsers:

  • Chrome (desktop & Android)
  • Opera
  • Safari (desktop & iOS)
  • IE9+
  • Android WebKit

Font Face Observer browser support section

You could say that this might not work on literally every browser, with the worst case scenario being that the page just loads as it normally would. You would also have to compare this browser compatibility list with the tech stack you’re currently using, which is probably not all-inclusive either.

Further Reading


Update: 12/04, 2017: There is now—finally—a more dedicated CSS property called font-display.

Check out Monica Dinculescu’s summary of font-display.

  1. You can see where you are receiving this article from under loc in this CDN trace↩︎

  2. The ills of this are alleviated by HTTP/2, which was just implemented by CloudFlare. ↩︎

Understanding and Navigating Privacy on Twitter

Permalink - Posted on 2015-08-20 20:00

(In our previous instalment, we learned to use Twitter in a way that promotes context, attribution, and tidiness in the timeline.)

This time, we will learn to improve your experience and privacy with regard to the notification system.

To cut to the chase, the following actions on Twitter trigger an alert in another user’s Notifications feed:

  1. Following them.
  2. Adding them to a list.
  3. @replying to them.
  4. @mentioning them.
  5. Retweeting them.
  6. Faving their tweet.
  7. Linking to their tweet.

I have bolded the triggers I consider non-obvious.

Linking to a tweet was a surprising notification trigger to me; linking is the most innocuous action on the goddamn Internet. This basic, fundamental action now comes with caveats that discourage tweeting for many users.

I can understand that Twitter’s lord and master is #brands, but it is beyond me how users don’t get a choice in the matter.

On Twitter, linking has become a privilege.

Moreover, did it occur to Twitter that we may not want to see everything people tweet about us—especially when they think we are out of earshot?

The Private, Public, and Public-Private

When you inadvertently alert someone to a private conversation of yours, the private becomes public. Of course, everything on Twitter is public by some definition of the word, albeit with an expectation of privacy similar to conversing in a bar, restaurant or café. When someone shows up to talk—or reply—to you, they had better have a good reason for their imposition.

These environments, like Twitter, are what I would describe as public-private. There is such a thing as privacy in public.

If reading this post up to this point has made your eyes glaze over, I am going to assume you are either a guy, white, part of a gender-sexual majority, or someone who won’t be perceived a Muslim.

Because, to these people, privacy is safety.

(I meant to embed a profound tweet someone once posted of the different reaction to a viral article and tweet for men vs women. Couldn’t find it.)

Twitter don’t seem to get online safety either, probably because the environs of decision-making fit into the same privileged, oblivious demographic, which results in an Kafka-esque reporting system beyond embarrassment, as detailed in WAM!’s extensive report.

(If you don’t already know about how deeply broken Twitter’s reporting system is, then you haven’t really been paying attention.)

An important, but separate, discussion is the concept of a “public figure”, which is an oft-used justification for denying someone a private space and publicizing their public-private conversations on Twitter. This argument is a common sleight of hand used to harass women and deny them public existence and peace of mind on the basis of their, perceived, popularity or heterodoxy.

Metrics Are at Often Odds with Privacy

When #brand engagement, metrics and monitoring reign supreme, privacy gets thrown out the window to placate #brands who want every conversation to be made public to them—and to placate disgruntled Twitter investors who want every user action on Twitter to be measured and datamined in the hopes of stumbling over a profitable business model.

Netflix slides into the mentions of someone expressing concern about Netflix watching users
Creepy, Netflix.

Unfortunately, the same monitoring tools are available to everyone else.

Subtweets As Safety Tweets

“Subtweeting” has been a tongue-in-cheek remark on noticing someone referring to something or someone discussed on Twitter as opaquely as possible. Only people familiar with the context would pick up on the message. It was like an office joke, because you had to be a part of the watercooler community of Twitter to get it.

Subtweets were an invitation to solve the mystery of what someone was referring to. But the obfuscation of subtweets also bears another characteristic: they increase safety from retribution.

Subtweets are also a safety mechanism.

Some of us are so privileged that the concept of defence mechanisms is alien to us. But for others, life requires them to keep adapting to new challenges, be they digital or analogue.

And Twitter excel at making small changes that surreptitiously worsen the platform experience.

Security by obscurity is a well-known concept; subtweets provide safety by obscurity. Like its security counterpart, safety by obscurity is not bulletproof, but it plays to the weakness of human nature:

Most aggressors are dumb, lazy, and intemperate.

If you ever wondered why people don’t use the word “Gamergate” in their tweets, it’s because assholes monitor the word and pounce on anyone outside the misogynist echo chamber.

As a result, defence mechanisms and vernaculars develop.

And as usual, all of this is news to Twitter HQ.

Enter the Subscreenshot?

Or “subshot”? Anyway.

Not too long ago, people responded to Twitter’s implementation of displaying media previews in the timeline by creating image-based pull-quotes and excerpts for the content they were sharing.

The media also caught on to this, and dubbed it unspeakable, ridiculous names for which they should forever be ashamed. It also spawned a nifty iPhone app.

In light of the new behaviour of Twitter links and Notifications, however, they now also serve the purpose of sharing a tweet without triggering a Notifications alert. There is nothing convenient about this, though.

While this is very fascinating, it demonstrates the constant game of safety whack-a-mole that at-risk users must play to adapt to Twitter’s changes. Changes that are not, and probably never will be, informed by the plight of people who don’t look like the non-diverse echelons of decision-making.

Privacy from a Developer and User Perspective

So how exactly have Twitter screwed up with their opaque Notifications, if we can be as specific and helpful to their developer team as possible?

The most succinct description of the concept of privacy, and one of my favourite quotes, is by Steve Jobs:

Steve Jobs on privacy
“Privacy means people know what they’re signing up for.”

The reason privacy nuts like myself tend to ask for features to be made opt-in is because no sane person will neither know nor remember all the settings for a service. The settings will usually be a mess to navigate — sometimes by design, as with Facebook.

Pop quiz! Off the top of your head, do you know how to disable Google remembering your search history? Do you know how to disable targeted ads from iAd? Do you know whether your location is included with the content you share on Twitter, Facebook, and Instagram?

When a service’s privacy sucks, your information leaks, sometimes by design, but often out of sheer cluelessness and indifference. It leaks, because it happens passively; it is not stolen by someone; the information is merely left out in the open for the taking and gawking.

The Danish Context

I’ve been meaning to write this post for a while, but this is what disabused me of my laziness:

When the foreign minister of your country faves your tweet
Translated: “If we had any doubts before, we definitely know now that [the political party] Venstre supports TTIP [tweet link]. I imagine [Danish parties] R, K, and LA will follow suit.”

That’s the foreign minister of Denmark faving a tweet of mine. My miscalculation was linking to his tweet.

(The foreign minister is the Danish Secretary of State—how’s it hanging, John Kerry!)

Of course, I live in Denmark where the short distance between constituents and politicians is an admirable, laudable advantage. But Denmark’s size is also inversely proportional to private space; when Americans say Washington is reading your tweets, they mean figuratively, not literally. In Denmark, people prefer to use Facebook, so monitoring a discussion is entirely feasible in Denmark. There is no noise to hide in.

Politicians deserve credit for engaging in democracy and meeting their constituents digitally or physically, especially at a time where our collective faith in parliament is declining steadily, giving rise to fringe none-of-the-above parties.

But there’s engaging, and then there’s sliding into your mentions. We’ve already seen extreme examples of this in Turkey, but also in the US where the governor of Kansas started a feud with a hapless teenage girl over some innocuous remarks made in the public-private forum of Twitter.

As chance would have it, one of the worst Danish political offenders in sliding into people’s mentions is our new justice minister, a tough-on-crime fellow who’s also a repeat offender in sexist remarks towards dissenters.

And bear in mind that it is technically illegal in Denmark to condone terrorism pursuant to § 136b of the Danish penal code.

When we interact in the tiny, silent space that is Danish Twitter, we must bear in mind the implications of conversing in a place where you can hear a pin drop.

Once again, I am left feeling that Twitter just don’t get it. And never will.

For others, it continues to be imperative to their existence to get it.

Be safe out there.

Further Reading

(This post originally appeared on Medium.)

Two Unwritten Rules of Twitter Etiquette

Permalink - Posted on 2015-01-15 20:00

(No, we’re not doing Twitter portmanteaus. Nope.)

1. Use the Reply Feature

Twitter’s reply feature is a secret weapon for contextualizing tweets beyond the 140-character limit.

Not a lot of people know this, but when you reply to a tweet, you create a link between the two tweets.

This feature has a long history of being utterly broken, which turned many including me away from using it—even after Twitter fixed it, and third-party developers worked around it.

Twitter would announce the thread-line feature to emphasize this component of the platform:

Twitter’s video on the thread-line feature
Twitter’s thread-line feature.

Twitter threads now rearranged the tweets in a timeline to group those that were linked, which was usually inter-user conversation.

Novelty aside, the threads displayed an underlying system that was already in place. However, up until that point, you could only see the “linked tweets”, if you visited the page for individual tweet.

Replying to your own tweets

If a tweet relates to another, write the new tweet as a reply to the other:

Chris Hayes knows how to link tweets together
The result of replying to the top-most tweet with the tweets below.

You do this by using the Reply button on the page of the individual tweet—it tends to work in third-party clients, but there may be exceptions. Use cases for this include:

  • Tweetstorms and Twitter rants. Because even if you write your tweets in rapid succession, other people’s tweets will blend into your stream profound insight in the timelines of the people who follow you.
  • Corrections and contextualizations. Some prefer to “unpublish” a wrong tweet, especially during breaking news. But with the reply feature, you can also reply to the tweet and contextualize it.
  • Save characters by linking. Because you don’t have to enter an URL for the tweet you want to link to, you save 23 characters. Same for the @handle you maybe able to save.

You are guaranteed to link the two tweets, but I’ve found Twitter’s threading to be extremely irregular.

Chris Hayes knows how to link tweets
This guy gets it.

Replying to other people’s tweets

Twitter is not a parallel universe where the rules of journalism and basic human decency are null and void, so use the feature to cite your Twitter source and give them due credit.

It’s also worth keeping in mind that some Twitter clients send an alert to the replied-to user.

Do this especially when you “RT” and “MT” tweets and take partial credit. But instead of manual retweets, you should …

2. Use the Retweet Feature

Everyone thinks they have the Smart Take on a given subject, but in the hypothetical, purely academic, scenario that you don’t have anything to add to a discussion or story, you are better off

  1. Not tweeting anything at all. #nevertweet
  2. Retweeting a popular tweet with the gist.

Why retweet and not post, say, the breaking news story yourself? Because you’ll end up with

  • Dozens of tweets saying the same thing.
  • Unsourced statements that can’t be verified.
  • If the retweeted tweet is deleted, you won’t have to do so yourself, as Twitter removes the tweet from your timeline and user profile.

Of course, the worst people in the world are not those who tweet their own version of the same joke for the fiftieth time; that distinction belongs to the people who rather than retweet that tweet with the thousands of retweets, add their own “RT” seal of approval. Such users are deplorable human beings who belong in The Hague.

Ryan J. Reilly prefaces only adds an “RT” to a tweet
History’s greatest monster.

This doesn’t mean that RTs and MTs can’t have merit, but you have to add something to the original tweets such as a humour, context or sass before (or after) the quoted tweet:

Adam Serwer prefaces a tweet with “jokes RT’
Gold star for appropriate use of manual RT AND a reply link to the original.

And on a final note, understand retweeting manual RTs makes you partially complicit; spend ten seconds trying to find the original tweet and retweet or respond to that instead; anything else is kinda mean to the author(s).

(This post originally appeared on Medium.)