1. 3

    I wonder how LWN feels about folks posting subscriber links here. Almost every one posted is a subscriber link…

    1. 26

      (LWN editor here)

      The short answer is that the occasional posting of subscriber links to sites like this is, as far as we can tell, beneficial to LWN. It exposes our work to a wider audience, lets us pitch the occasional trial subscription offer, and leads to higher subscription numbers overall. It’s some of the best word-of-mouth advertising we can get.

      That said, posting such links could clearly turn into a problem if it causes the LWN paywall to entirely disappear. So we ask people to restrain themselves and not post too many of them to public sites.

      For those who don’t understand our model, LWN is almost entirely subscription-supported at this point. We think it is a great model; it aligns our interests with those of our readers, doesn’t require us to sell readers out to the surveillance capitalism machine, and has let us watch the collapse of the advertising market without distress. It has kept us going (more comfortably some times than others) since we adopted it in 2002.

      If you find articles like this one worthwhile, please consider supporting the creation of more of them with a subscription of your own; we would love to see you around more often!

      1. 3

        Often, for topics I’m investigating, I notice that the definitive online resources are links to LWN articles. I started my LWN subscription to support the creation of more articles like that.

        As I mentioned above, for a few years I simply read the articles that were freely available on LWN. After some introspection, I realized that for more or less the same reasons that I make my contributions to free/open software, I could and should also support reporting and writing about that software, even if I didn’t absolutely need access to those articles during the one-week subscriber-only period. In other words, my supporting LWN was one way for me to give back to the wider community that’s given me so much.

        Finally, I’m also very happy with the absence of intrusive advertising and tracking on LWN site.

        1. 1

          There was a collapse of advertising market?

          Anyway, I do believe it’s a better model in the end and I’m happy to see you sticking with it.

            1. 1

              I’m not keeping track of the advertising market, but my impression is that adblock users are still a tiny minority. Is there data on adblock user stats and ad market revenues? This is getting offtopic of course…

        2. 3

          From the page when you attempt to create a subscriber link:

          The “subscriber link” mechanism allows an LWN.net subscriber to generate a special URL for a subscription-only article. That URL can then be given to others, who will be able to access the article regardless of whether they are subscribed. This feature is made available as a service to LWN subscribers, and in the hope that they will use it to spread the word about their favorite LWN articles.

          If this feature is abused, it will hurt LWN’s subscription revenues and defeat the whole point. Subscriber links may go away if that comes about.

          I interpret that as they are okay with it as as long as it’s not abused.

          1. 3

            I don’t think it matters to them if everyone reads a story for free, it matters to them if all stories can be read for free. People who click on the link here are either:

            • People already subscribed to LWN. This is only a problem if they see all of the stories that they read here (and elsewhere) and drop their subscriptions.
            • People who can’t afford to subscribe to LWN or won’t ever subscribe for other reasons. It costs a small amount for LWN to serve web pages to these people, but it’s likely to be in the noise.
            • People who hadn’t considered subscribing to LWN before. For these people, there’s a balancing act. If they see all of the stories that they’re interested in without subscribing, then they’re a small cost. If they see some of the stories they’re interested in without subscribing then this is a small cost (and a lost potential customer) but if they only see some of them then this makes them more likely to subscribe.

            LWN posts subscriber-only stories almost every few days and lobste.rs posts one every week or two. I expect that this ratio is pretty good for advertising. That said, they could probably do a lot better if they did a little bit of in-site advertising. They’d probably see a much higher conversion if every article visited via a subscriber link contained normal links to 2-3 other relevant subscriber-only stories so that people get an immediate view of what they’re missing by not subscribing (I didn’t even realise LWN has subscriber-only stories until I saw these comments because I completely blank out boxes like the one at the top and I’d therefore never considered subscribing, though they do run a lot of things I’m interested in). It would also be nice if they put a small text banner on the top saying something like

            1. 2

              “subscriber only” is bit misleading: LWN stories are subscriber only for one week, after that they are public. So everyone can access all the stories, but most people probably wouldn’t remember to share something interesting to others after waiting for week.

              1. 1

                Correct. They’re “subscriber only” in the sense that only a subscriber can create them. I lurked on LWN or a few years and read only 1-week old articles before I decided that I wanted to spend my hard-earned cash to support them. Not to read the articles fresh off the press.

            2. 0

              Well, that’s the question. Is it abuse (almost exclusively) posting subscriber links to a site like lobste.rs, which has many active users?

              1. 2

                If this feature is abused, it will hurt LWN’s subscription revenues…

                I don’t think these links would hurt their subscription revenues. Instead, high-quality content can be great advertisements on Lobsters. I assume by “abuse” they mean using a bot to generate subscription URLs for every single article and resell them, etc.

                1. 0

                  The same link was posted to Hacker News and Proggit:

                  http://gerikson.com/hnlo/#gmy7ub_23240800

                  1. 0

                    As the note states, let them worry about it. If you feel bad and are not subscribed to LWN then subscribe or buy it for a friend!

                2. 2

                  Limiting the number of people who can access a subscriber link would be easy (almost trivial), and I think it’s safe to say that LWN is aware that these links frequently get shared on HN, Reddit, Lobsters, etc. So it seems that LWN is okay with this.

                1. 1

                  The main part of my $HOME is a hierarchy:

                  std/bin
                  std/cfg
                  std/cfg/templates
                  std/lib
                  std/lib/perl
                  std/lib/perl/...
                  std/lib/sh
                  std/lib/vim
                  std/lib/vim/...
                  std/libexec
                  

                  which contains almost all of my configuration. Various dotfiles like .bashrc and .vimrc are symlinked into $HOME from std/bin. I replicate this hierarchy across 1000+ servers to give me my standard environment on those servers. I have a separate $HOME/bin for local additions applicable to only a single server environment. Almost all of my non-dotfile $HOME is symlinks.

                  1. 19
                    jtm@x1c ~ % ls
                    TODO acme aux bin doc down git go mail mnt music rom www xen 
                    
                    • acme - additional scripts for acme.
                    • aux - synonymous with “junk”.
                    • doc - images, documents, slides, etc.
                    • down - downloads
                    • mail - emails in Maildir format.
                    • www - source code for a static site.
                    • xen - vm configurations.

                    I’ve been meaning to add a cron job to delete anything in down that’s older than three days.. that folder tends to blow up.

                    To keep junk from accumulating in $HOME, I use a shell function called “t” that will automatically cd to a temporary scratch space, so I don’t have to think about cleaning up junk that I don’t intend to keep. I use this almost every day.

                    function t {
                      cd $(mktemp -d /tmp/$1.XXXX)
                    }
                    
                    1. 15

                      Instead of a t function, I have a ~/tmp folder.

                      Because ~/tmp is persistent, I end up with stuff in there that I’m afraid to delete, so I made a ~/tmp/tmp for stuff that’s actually temporary.

                      Because ~/tmp/tmp is persistent, I occasionally end up with stuff in there that I'm afraid to delete. I once just needed a temp folder quickly, but didn't feel like stuff in ~/tmp was safe to delete yet, so I made a ~/tmp/tmp/tmp`.

                      I should add that t function to my rc.

                      1. 3

                        Ooo, I love the t function. I make temp dirs for stuff all the time. So simple, but really helpful - thanks for sharing!

                        1. 2

                          I have a similar j function which creates a named (default: junk) subdirectory in the current directory and cds to it. There is a corresponding jjj function which is essentially rm -fr junk. Because the new directory is under the current directory, I find it is easier to reference the original directory with .. rather than using "$OLDPWD".

                        1. 1

                          Why use a loop at all? In java: foo = Joiner.on(”,”).join(bar);

                          My real answer is that high-level code is better than low-level code, unless there’s some really important justification for preferring a low-level implementation. That you know how to write the low-level code doesn’t mean that you should. What you should do is write lucid straight-line code (few or no indentation changes) and use abstractions to make that simple for yourself.

                          1. 4

                            The real real answer is Json requiring that there must be no last comma causes a huge number of programmers a small twinge of pain each.

                            void damnJson( char ** string, size_t len)
                            {
                               if( len == 0) // You're always going to have to have a horrid corner case
                                  return; // The early return pattern coupled with small functions equals cleaner code.
                            
                               // The Happy Path
                               fputs( string[0], stdout);
                               for(int i=1; i < len; i++) { // Note the offset by one start to loop.
                                  fputc( ',', stdout);
                                  fputs( string[i], stdout);
                               }
                            }
                            
                            1. 2

                              And that’s why language designers who care about the language’s “user experience” allow for a final trailing delimiter in lists. Perl does this and every DSL I design also does this, for exactly this reason. @arnt: I agree that using a higher level construct can often eliminate the problem. But sometimes (e.g. when streaming data), that’s not possible.

                              1. 2

                                And go mandates it, which is even nicer imo.

                          1. 3

                            sh -c 'sep=; for f in {a..g} ;do printf "$sep%s" $f; sep=,; done; echo'

                            1. 3

                              Sure, this is an example of bringing state into the loop from outside: before your first time through the loop, sep=; #semi-colon is a character the shell takes so this is like sep=. After, sep=,, so printf gets the ,.