`three = 1` in the linux sourcecode - <AUTHOR> https://github.com/torvalds/linux/blob/d158fc7f36a25e19791d25a55da5623399a2644f/fs/ext4/resize.c#L698 <comment><USER2> [https://github.com/torvalds/linux/blob/d158fc7f36a25e19791d2...](https://github.com/torvalds/linux/blob/d158fc7f36a25e19791d25a55da5623399a2644f/fs/ext4/resize.c#L652)

Variables `three`, `five` and `seven` are better described as `next_power_of_three`, `next_power_of_five` and `next_power_of_seven`. Since the `ext4_list_backups` function should iterate through 1 (= 3^0 = 5^0 = 7^0), 3, 5, 7, 3^2, 5^2, 3^3, 7^2, ... and 1 should not repeat three times, the initial value of `next_power_of_three` (or any of others) should be 1 and those of others should not be 1. The naming is a bit unfortunate (couldn't they be `threes` etc., for example?) but actually makes sense.

<comment><USER3> A perfect example of a missing code-comment.

<comment><USER4> The explanatory comment is 40 lines _earlier_ in the same file where the function those variables are being passed to is defined. It need not be repeated every couple lines; "being clear to outsiders linked to a specific line of a specific file without context" is not a reasonable concern.

<comment><USER5> The function declared earlier is perfectly fine, the comment is sufficient to explain what it's doing, but functions should be understandable simply by reading their source and in that respect the linked function fails. This would be really simple to solve with a simple comment, E.G.

      // current power of three, init to 3^0
      unsigned three = 1;

The fact that this looks like a bug at first glance is a pretty good indication that there should be some explanation of what exactly it's doing.

<comment><USER6> This is actually contrary to Linux kernel "good style". Functions should be short and understandable. Comments should be on the top of the function, describing what the function is for. Comments describing variables in functions are discouraged.

<comment><USER7> Are you supporting that dogma or just stating it?

This brings to mind the Orwell essay on language usage[1]: _Break any of these rules sooner than say anything outright barbarous._

IMO having "three = 1" with no immediate context qualifies as barbarous. Yes it would be best to rename the variable, but, failing that, just toss in a freaking comment for common sense's sake.

[1][https://www.mtholyoke.edu/acad/intrel/orwell46.htm](https://www.mtholyoke.edu/acad/intrel/orwell46.htm)

</comment></comment></comment></comment></comment></comment><comment><USER8> Read the comment above ext4_list_backups right above:

[https://github.com/torvalds/linux/blob/d158fc7f36a25e19791d2...](https://github.com/torvalds/linux/blob/d158fc7f36a25e19791d25a55da5623399a2644f/fs/ext4/resize.c#L652)

        /*
         * Iterate through the groups which hold BACKUP superblock/GDT copies in an
         * ext4 filesystem.  The counters should be initialized to 1, 5, and 7 before
         * calling this for the first time.  In a sparse filesystem it will be the
         * sequence of powers of 3, 5, and 7: 1, 3, 5, 7, 9, 25, 27, 49, 81, ...
         * For a non-sparse filesystem it will be every group: 1, 2, 3, 4, ...
         */

I'm not sure what's so noteworthy about that. There's ton of arcane code in any kernel, as long as it's commented correctly there's no issue.

<comment><USER9> See this comment: [https://news.ycombinator.com/item?id=7296586](https://news.ycombinator.com/item?id=7296586)

Good commenting is no substitute for good naming. For a variable containing the number 1, "three" is a shitty name.

<comment><USER8> Okay? Is that really worthy of being submitted to hn however?

The function being called is directly above this declaration. It's a static function not used outside of this file. What are the chances that someone would edit this code without understanding what "three" is used for in this context? Pretty slim I wager.

It's good that people are auditing the linux source code but if you stumble upon some weird looking code (which again, is not the case here in my opinion) the right way to deal with it is not to post it on hacker news. Contact the maintainer (look at the MAINTAINER file at the root of the kernel) if possible with a patch to fix the issue.

<comment><USER5> Depends on the intent of submitting it. If his intent was to point out a potential bug in the Linux kernel then yes, it shouldn't have been submitted. On the other hand what has resulted has been a rather interesting debate about the merits of variable naming vs. proper commenting, with some side commentary about what a shitty name something like three and five make for variables.

</comment></comment></comment></comment><comment><USER10> If only there was a system for fixing the code yourself instead of having to post about it to a widely read tech site.

<comment><USER11> It's not a bug, as shown by the currently top comment. It is however, misleading and could be better documented or named. Still, it is at least a little amusing, worth posting here?

<comment><USER12> I think its worth posting. It's the first piece of code I've seen on hacker news in a while. It also makes a great point about good variable names making code clear.

</comment></comment></comment><comment><USER13> > There are only two hard things in Computer Science: cache invalidation and > naming things.

> \-- Phil Karlton

<comment><USER14> I've always thought that the "naming things" refers to the more subtle problem of giving things unique identifiers in distributed systems, rather than coming up with variable names.

"Naming things" includes systems like MAC address allocation, IP address allocation, DNS, URLs for documents, process IDs, name to inode mapping in filesystems, autoincrement primary keys in databases, etc.

Any ideas on what Karlton really meant with the quote?

<comment><USER15> I always assumed it was the more general "coming up with names" \- for variables, hostnames, project names etc.

The non-human-readable things like MACs, IPs and auto-increment keys are easy. But when I have to come up with a short, memorable and non-confusing name for something like a script that can take me longer than writing the code.

<comment><USER14> Unique IDs are easy on a single machine, but (just like cache invalidation) become surprisingly complex in a distributed system.

For example, how to assign unique MAC numbers to network cards _without a centralised database_ that has to be modified for each card manufactured? Vendors get address space blocks, and probably split these further into blocks for factories and production lines.

Generating unique autoincrement row numbers in a distributed database or process IDs in a cluster is also a complex problem if it has to be _faster_ than any communication between the nodes.

Designing the layout of IP addresses, architecture of DHCP and DNS, and the very idea of URLs are fantastic pieces of Computer Science work. Easy to use, but a hard problem for the original designers!

But of course, I have no idea what Karlton had in mind with the quote. "Naming things" as "assigning unique identifiers" always felt appropriate with cache invalidation, as both are problems that are easy for single cores/machines, but very complex in distributed systems.

</comment></comment></comment></comment><comment><USER16> /yawn

[https://github.com/torvalds/linux/blob/d158fc7f36a25e19791d2...](https://github.com/torvalds/linux/blob/d158fc7f36a25e19791d25a55da5623399a2644f/drivers/md/bcache/bset.c#L406)

<comment><USER17> The comment on that function is a bit more entertaining than the original post.

</comment></comment><comment><USER18> Lot's of people suggesting to add explanatory comments. I don't think that's a good idea, it would be better to change the names of the variables:

        unsigned counter1 = 1;
        unsigned counter2 = 5;
        unsigned counter3 = 7;

or use an array:

        unsigned counter[3] = {1,5,7};

No more confusion. That being said, I doubt that the names of these local variables is actually a real source of confusion and is not a problem that needs to be fixed.

<comment><USER19> > or use an array

That's absolutely horrible: you've now introduced the possibility of accidental out-of-bounds access where there previously was none, not to mention that you just forced the compiler to put those variables on the stack instead of using registers.

Contrived example:

      int array(int lol)
      {
            unsigned counter[3] = {1,5,7};

            for (int i = 0; i < lol; i++)
                    counter[i % 3]++;

            return counter[0] + counter[1] + counter[2];
      }

      int vars(int lol)
      {
            unsigned counter1 = 1;
            unsigned counter2 = 5;
            unsigned counter3 = 7;

            for (int i = 0; i < lol; i++)
                    switch(i % 3) {
                    case 0: counter1++;
                    case 1: counter2++;
                    case 2: counter3++;
                    }

            return counter1 + counter2 + counter3;
      }

The output is quite different (gcc -c -O3 -std=gnu99):

      Disassembly of section .text:

      0000000000000000 <array>:
       0:   85 ff                   test   %edi,%edi
       2:   c7 44 24 e8 01 00 00    movl   $0x1,-0x18(%rsp)
       9:   00
       a:   c7 44 24 ec 05 00 00    movl   $0x5,-0x14(%rsp)
      11:   00
      12:   c7 44 24 f0 07 00 00    movl   $0x7,-0x10(%rsp)
      19:   00
      1a:   7e 5f                   jle    7b <array+0x7b>
      1c:   41 b8 01 00 00 00       mov    $0x1,%r8d
      22:   31 c9                   xor    %ecx,%ecx
      24:   be 56 55 55 55          mov    $0x55555556,%esi
      29:   eb 1f                   jmp    4a <array+0x4a>
      2b:   0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)
      30:   89 c8                   mov    %ecx,%eax
      32:   f7 ee                   imul   %esi
      34:   89 c8                   mov    %ecx,%eax
      36:   c1 f8 1f                sar    $0x1f,%eax
      39:   29 c2                   sub    %eax,%edx
      3b:   8d 04 52                lea    (%rdx,%rdx,2),%eax
      3e:   89 ca                   mov    %ecx,%edx
      40:   29 c2                   sub    %eax,%edx
      42:   48 63 c2                movslq %edx,%rax
      45:   44 8b 44 84 e8          mov    -0x18(%rsp,%rax,4),%r8d
      4a:   89 c8                   mov    %ecx,%eax
      4c:   f7 ee                   imul   %esi
      4e:   89 c8                   mov    %ecx,%eax
      50:   c1 f8 1f                sar    $0x1f,%eax
      53:   29 c2                   sub    %eax,%edx
      55:   8d 04 52                lea    (%rdx,%rdx,2),%eax
      58:   89 ca                   mov    %ecx,%edx
      5a:   83 c1 01                add    $0x1,%ecx
      5d:   29 c2                   sub    %eax,%edx
      5f:   39 f9                   cmp    %edi,%ecx
      61:   48 63 c2                movslq %edx,%rax
      64:   41 8d 50 01             lea    0x1(%r8),%edx
      68:   89 54 84 e8             mov    %edx,-0x18(%rsp,%rax,4)
      6c:   75 c2                   jne    30 <array+0x30>
      6e:   8b 44 24 ec             mov    -0x14(%rsp),%eax
      72:   03 44 24 e8             add    -0x18(%rsp),%eax
      76:   03 44 24 f0             add    -0x10(%rsp),%eax
      7a:   c3                      retq
      7b:   b8 0d 00 00 00          mov    $0xd,%eax
      80:   c3                      retq
      81:   66 66 66 66 66 66 2e    data32 data32 data32 data32 data32 nopw %cs:0x0(%rax,%rax,1)
      88:   0f 1f 84 00 00 00 00
      8f:   00

      0000000000000090 <vars>:
      90:   85 ff                   test   %edi,%edi
      92:   7e 52                   jle    e6 <vars+0x56>
      94:   31 c9                   xor    %ecx,%ecx
      96:   41 b8 07 00 00 00       mov    $0x7,%r8d
      9c:   41 b9 05 00 00 00       mov    $0x5,%r9d
      a2:   41 bb 01 00 00 00       mov    $0x1,%r11d
      a8:   41 ba 56 55 55 55       mov    $0x55555556,%r10d
      ae:   89 c8                   mov    %ecx,%eax
      b0:   89 ce                   mov    %ecx,%esi
      b2:   41 f7 ea                imul   %r10d
      b5:   c1 fe 1f                sar    $0x1f,%esi
      b8:   89 c8                   mov    %ecx,%eax
      ba:   29 f2                   sub    %esi,%edx
      bc:   8d 14 52                lea    (%rdx,%rdx,2),%edx
      bf:   29 d0                   sub    %edx,%eax
      c1:   83 f8 01                cmp    $0x1,%eax
      c4:   74 09                   je     cf <vars+0x3f>
      c6:   83 f8 02                cmp    $0x2,%eax
      c9:   74 08                   je     d3 <vars+0x43>
      cb:   41 83 c3 01             add    $0x1,%r11d
      cf:   41 83 c1 01             add    $0x1,%r9d
      d3:   83 c1 01                add    $0x1,%ecx
      d6:   41 83 c0 01             add    $0x1,%r8d
      da:   39 f9                   cmp    %edi,%ecx
      dc:   75 d0                   jne    ae <vars+0x1e>
      de:   45 01 d9                add    %r11d,%r9d
      e1:   43 8d 04 01             lea    (%r9,%r8,1),%eax
      e5:   c3                      retq
      e6:   b8 0d 00 00 00          mov    $0xd,%eax
      eb:   c3                      retq

Arrays mean memory - don't use them unless you actually want the compiler to use memory.

<comment><USER18> Your example has nothing to do with the actual code in the kernel. In the original code, the counters are passed by reference to a function. That means they need to be in memory anyway, right? The compiler can't pass the address of a register.

<comment><USER19> > That means they need to be in memory anyway, right?

Actually no, GCC can optimize out pointer indirection like that if it ends up inlining the function (which it could in the kernel example, since it's static, relatively short, and has only three callers).

Another contrived example:

      static int inlineme(int *lol, int lolol)
      {
            *lol += lolol;
            return *lol * 5;
      }

      int test(int x)
      {
            int tmp = 5;
            tmp += inlineme(&tmp, x);
            return tmp;
      }

... all of which compiles to (with -O2):

      0000000000000000 <test>:
       0:   83 c7 05                add    $0x5,%edi
       3:   8d 04 bf                lea    (%rdi,%rdi,4),%eax
       6:   01 f8                   add    %edi,%eax
       8:   c3                      retq

Note that "tmp" doesn't have to be a constant for that to happen.

As far as the actual kernel function, GCC ends up emitting: (The only uncompressed kernel binary I had laying around was for my beaglebone black, sorry)

      c0136fa0 <verify_reserved_gdb>:
      c0136fa0:       e92d4ff0        push    {r4, r5, r6, r7, r8, r9, sl, fp, lr}
      c0136fa4:       e24dd02c        sub     sp, sp, #44     ; 0x2c
      <snip>
      c0136fbc:       e3a03001        mov     r3, #1
      c0136fc0:       e58d301c        str     r3, [sp, #28]
      c0136fc4:       e3a03005        mov     r3, #5
      c0136fc8:       e58d3020        str     r3, [sp, #32]
      c0136fcc:       e3a03007        mov     r3, #7
      c0136fd0:       e58d3024        str     r3, [sp, #36]   ; 0x24
      c0136fd4:       e1a00007        mov     r0, r7
      c0136fd8:       e28d101c        add     r1, sp, #28
      c0136fdc:       e28d2020        add     r2, sp, #32
      c0136fe0:       e28d3024        add     r3, sp, #36     ; 0x24
      c0136fe4:       ebffffd4        bl      c0136f3c <ext4_list_backups>

... so in this case it does actually pass by reference.

That doesn't change my argument: an array is the more confusing way to do this, and in similar situations could prevent the compiler from making the optimization it did in my example.

</comment></comment></comment></comment><comment><USER20> Why don't you all "deserves better comment" people send a patch?

<comment><USER21> > Why don't you all "deserves better comment" people send a patch?

Trying to get a patch into Linux as a new developer without personally knowing one of the (sub-)lieutenants is a futile exercise.

<comment><USER22> I did it (and repeated a few times) and I didn't know anyone. I did it by reading about the process, formatting my patch correctly, and sending it to the appropriate list. If it were so difficult, Linux would not be a success. Now, just like other large projects, maintainers might dislike comment-only nit patches, but if it objectively increases readability it might work.

<comment><USER23> It's probably easier to get it in when you're solving a real problem.

</comment></comment></comment></comment><comment><USER24> That's a very... awkward of doing quite a simple thing, generating ascending interleaved powers. I'd probably use one or more arrays of multipliers to maintain the counters. Simpler and more general -- not often that you can get a solution with both these two attributes.

</comment><comment><USER25> And here's how the "rainbows and butterflies" world of "code perfectionists" come crashing down.

Yes, the naming is unfortunate. No, there's probably no way to make it better (and if you think code reviews suck, wait until you see a kernel code review) (Well, this came directly from Linus but there's usually some discussion as well)

But in the end this has shipped and is running. (Well, the double goto from Apple as well, but I doubt that went through a code review)

</comment><comment><USER26> there are many, many problems in this code style which lead to this kind of problem.

localised comments may help but naming things properly would help more (and negate a comment being required at all), actually adopting some better practices would be a better fix going forward.

looking at the called function's comment:

The counters should be initialized to 1, 5, and 7 before * calling this for the first time.

so how about making a function with the same name, ending in '_first' (maybe rename the original _next) which initialises these variables internally before calling the version intended to be called multiple times...?

since the parameters are not well described by their names renaming them would help too... it is not a pointer to a 3 a 5 or a 7. it might not even be pointing at multiples... but current_multiple_of_three etc. would be better. there is some reason why these values are significant in this algorithm (which I do not know) and the best names would capture that.

the code is moderately difficult to read in the function itself - the method of swapping around a local copy of a pointer based on the conditions is not very easy to follow. although makes sense here to avoid excessive code... comments would help make it clearer what is going on.

</comment><comment><USER27> At line 655: "... In a sparse filesystem it will be the sequence of powers of 3, 5, and 7: ..."

So I think this means three = pow(3, 0);

<comment><USER28> Doesn't explain why it's not 1, 1, 1 or 1, 5, 49.

<comment><USER29> It does, you're just not paying attention. The comment appears over the function that uses those variables; it's not 1,1,1 because they want to hit 1 only once in the sequence 1,3,5,7,9,25,27,49,81,125, etc.

It doesn't explain why it's not 3,1,7 or 3,5,1, but that's because there is no reason for that.

<comment><USER28> The full comment in the source explains it fine, but that's not what I'm replying to; who's not paying attention here?

The abbreviated quote I was replying to just confuses things by leaving out critical parts.

</comment></comment></comment></comment><comment><USER30> Wasn't there a similar thread a few months back about "two" being corrected to equal 2?

<comment><USER20> Speaking of...

      kernel/sysctl.c

      #ifdef CONFIG_LOCKUP_DETECTOR
      static int sixty = 60;
      #endif

      static int __maybe_unused neg_one = -1;

      static int zero;
      static int __maybe_unused one = 1;
      static int __maybe_unused two = 2;
      static int __maybe_unused three = 3;
      static unsigned long one_ul = 1;
      static int one_hundred = 100;
      #ifdef CONFIG_PRINTK
      static int ten_thousand = 10000;
      #endif

</comment></comment><comment><USER31> Seems like a perfectly reasonable naming scheme to me. Anyone foolish enough to think that the variables are there to hold the values 3, 5 and 7 is probably wasting their time on the code in the first place.

Besides, it made you read the code and the comments.

</comment><comment><USER32> Reminds me of 'how to write unmaintainable code':

[http://mindprod.com/jgloss/unmaincamouflage.html](http://mindprod.com/jgloss/unmaincamouflage.html)

</comment><comment><USER33> I finally have an answer to the "what's your favorite line of linux source code" question.

<comment><USER34> This is a great one too: [https://github.com/torvalds/linux/blob/d158fc7f36a25e19791d2...](https://github.com/torvalds/linux/blob/d158fc7f36a25e19791d25a55da5623399a2644f/drivers/md/bcache/bset.c#L393)

</comment></comment><comment><USER35> Is this because there is some inconsistency in the GDT documentation?

</comment><comment><USER36> Trinitarian theology?

</comment><comment><USER37> That deserves an explanation in the code comments...

<comment><USER9> Better still, it deserves to be replaced with a better name. Comments should not be our first port of call when we notice an issue like this in code. Fix the name. If you can't fix the name, you hang your head in shame and _then_ you write a comment.</comment></comment>


Kickstarter just became the new buzzfeed - <AUTHOR> http://www.geektime.com/2014/07/06/a-new-ingredient-for-potato-salad-how-about-3k-from-kickstarter/

<comment><USER2> The link to "silliest Kickstarter campaign ever" currently points incorrectly to the human-powered helicopter (again). The correct link is here:

[https://www.kickstarter.com/projects/324283889/potato- salad](https://www.kickstarter.com/projects/324283889/potato-salad)

Also the tie-in for how Kickstarter is the new Buzzfeed is pretty much non- existent. May as well connect the dots yourself without reading the article.</comment>


A car designer who turned a sailfish into a supercar (2014) - <AUTHOR> https://www.bbc.com/future/article/20140828-how-a-fish-inspired-a-supercar <comment><USER2> > "We have systems that are going to eliminate the need for windscreen wipers > – you don't see animals with windscreen wipers on their eyes," asserts > Stephenson.

Sure I do, they're called eyelids.

</comment><comment><USER3> BEST Fish Story I've heard ALL day!

</comment><comment><USER4> Nature has had quite some time to figure out what works well (or at least better than before).</comment>


Simple steps to implementing a programming language - <AUTHOR> http://kjetilvalle.com/posts/implement-a-programming-language.html <comment><USER2> Inventing your own programming language is something I can highly recommend. If you've never done it before it will dramatically broaden your programming horizon. It's a journey.

About a year ago I decided to make a language mainly because I wanted to experiment with some programming paradigms. I had made little domain-specific "languages" many times before, but this was going to be different.

I'd suggest that you try to figure out most things on your own, however. It's way more rewarding to think about the problems you're trying to solve, go ahead and implement them. That way you're also forced to have eye-opening meta thoughts about programming in general. Only after you've gained some appreciation for the issues involved, look them up and see how other people solved them. This worked very well for me.

Lisps and Schemes are certainly easier to implement than most syntaxes, but consider doing something else so you can get a better understanding of the complexities of parsing a non-Lisp.

In my case, I did my prototype in Java, that's the lexer, parser, runtime and standard library. While I wouldn't necessarily want to do it that way again, it was a great learning experience and I was pleased with the result.

About two months ago I decided to give it another try, but this time in C, using the Lua codebase. So far this has been a very good choice for a second stab at the idea. And I was pleased that I could recognize a lot of the patterns in the Lua codebase where I had implemented equivalent parts in my earlier project. If I hadn't taken the hard route back then, I probably would have a harder time now.

<comment><USER3> How far along as a programmer should one be before attempting building a language. I am a novice (very, very much so) Rubyist, and don't think I am anywhere near being able to attempt it, but I do know that, when I was still in school, the process most likely to make a complicated subject click with me was to understand it all the way to it's origin (the starkest example was actually the quadratic formula - I had tons of trouble understanding it and how to use it until I had a teacher who made us actually derive it, and all of a sudden I was one of the best in the class). Building a programming language seems like it might have the same kind of effect on me, and, being a firm believer of living outside your comfort zone, would like to know if it's possible for someone who is nowhere near being able to call himself a programmer to eventually build one.

<comment><USER4> This may not be a common opinion, but building a language is certainly within the reach of a novice programmer. The base ideas are very, very simple. You do have to be careful not to be overwhelmed by either the terminology ("recursive descent parsing" is a slightly more elaborate version of "reading a file") or some of the more elaborate things that you don't need for the basics but might want for a truly useful tool ("parsing" is a deep subject built mostly around making "reading a file" simpler, for arbitrarily complicated files).

Building languages is also one of the most thoroughly studied topics, which is both a boon and a bane. On one hand, there are lots of good tutorials and excellent tools. On the other hand, there is _lots_ of stuff elaborating on the basics and much of it seems almost deliberately complicated.

Go for it! There are a lot of much worse ways of going into the rabbit hole.

<comment><USER3> Thanks! Any suggestions for resources to help me get started? I'm not afraid of complicated terminology as long as there is a way for me to easily figure out what it means (whether Wikipedia, a glossary, or simply a great example).

<comment> loup-vaillant Start with untyped lambda calculus, augmented with numbers, and addition. That's what I did. Such a language is dead simple: you only have four kinds of expressions: numbers, additions, functions, and function calls.

Write a parser and a printer (a pretty printer would be best, but you don't have to). Use one to test the other. Then write an interpreter, who takes an expression as input, evaluates it, and spits out a number.

The whole thing should fit in a couple hundred lines, tops. The only real difficulty is to evaluate function calls. The rest is only a matter of catching runtime errors (like trying to add a number and a function). To properly implement your language, you may have to learn about closures and lexical scoping, though there are tricks to sidestep the issue.

To test your language, check out the Y and Z combinators here [https://en.wikipedia.org/wiki/Fixed_point_combinator](https://en.wikipedia.org/wiki/Fixed_point_combinator) and use the Z combinator to implement the factorial function.

The next step is to flesh out your language a bit. I suggest you augment it with "let" bindings first: it's just syntax sugar over lambdas: you change your parser, but you don't have to touch the interpreter.

</comment></comment></comment></comment></comment><comment><USER5> Nice work. There's a similar article which uses Haskell as the base language instead of Python, which is also worth reading (this is actually how I learned both Haskell and Scheme..!)

[https://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_...](https://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours)

<comment><USER6> There is also SICP Chapter 4: Metalinguistic Abstraction. More precisely, 4.1 The Metacircular Evaluator [0]. Chapter 5 is about compiling to a toy register machine, as well.

I'm a big fan of the approach taking in Programming Languages: Application and Interpretation (PLAI). The Brown course from 2012 has video lectures available [2]. This one uses what is very close to Racket as the implementation language. It's typed, and called plai-typed.

The course these days uses the later chapters of Programming and Programming Languages (PAPL). This uses a new language, Pyret [3]. It's a bit more clear, due to the implementation language and source language having obviously different syntax, compared to plai-typed vs. the s-expression based language implemented.

[0] [https://mitpress.mit.edu/sicp/full-text/book/book- Z-H-26.htm...](https://mitpress.mit.edu/sicp/full-text/book/book- Z-H-26.html#%_sec_4.1)

[1] [http://cs.brown.edu/courses/cs173/2012/book/](http://cs.brown.edu/courses/cs173/2012/book/)

[2] [http://cs.brown.edu/courses/cs173/2012/Videos/](http://cs.brown.edu/courses/cs173/2012/Videos/)

[3] [http://www.pyret.org/](http://www.pyret.org/)

</comment></comment><comment><USER7> During my project I was once at the point where I actually implemented my own (interpreted) scripting language. I have never thought that I'd be one of the guys who creates something like this, but once you are so fed up with something over the years (and I was with ESQL just for being "closed source") you'd just may be starting to go for it and just try out an dig into it.

And it works. I am now saying things like "If I'd need a JIT compiler for it, I'd write one. I'll look at everything and evaluate if possible and how to be done."

Inventing wheels is great for learning and I am now back to Java (good enough ;)

</comment><comment><USER8> Yet another LISP-like language parser tutorial. Just like _Learning ??? Programming in ?? days_. This is just the beginning, guys. LISP-like languages are not always great. (I'm not to look down this tutorial! Really!) I prefer imperative programming language parser tutorial. Every time I see such title, I will think of LISP.

<comment><USER9> If you want an imperative tutorial then the Crenshaw tutorial [1] or Nicklaus Wirth's book Compiler Construction[2] are great starting points.

[1] [http://compilers.iecc.com/crenshaw/](http://compilers.iecc.com/crenshaw/)

[2] [http://www.ethoberon.ethz.ch/WirthPubl/CBEAll.pdf](http://www.ethoberon.ethz.ch/WirthPubl/CBEAll.pdf)

<comment><USER8> Thank you. I have read Crenshaw's tutorial before, and I think I should get some time to translate it with modern language with unicode support to make more fun. :)

</comment></comment></comment><comment><USER10> My rule of thumb when doing a new language: Write the debugger first, you're going to need it anyway....

<comment><USER4> Bah! If you need a debugger, you're not thinking hard enough.

<comment><USER11> Debuggers are crutches for losers. I use an oscilloscope to debug.

</comment></comment></comment><comment><USER12> This is great, but I want the _other_ things that are important but forgotten:

" We will not have:

A proper type system Error handling _Good performance And much, much more "

_Good performance is something that have a lot of literature, so can be avoided in this tutorials.

I have been in this talk at lambda:

[http://lambda-the-ultimate.org/node/4929#comment-79628](http://lambda-the- ultimate.org/node/4929#comment-79628)

Where is discussed where to talk about _implement_ compilers. I ask about the other things that bother me:

\- Debugger/ Debugging experience \- REPL \- Tracing (ie: Dtrace or similar)

and other things that I wish to understand _before_ just make another parser.

How build a "hacker news" for it? Exist some project I could use?

</comment><comment><USER13> This is nice, but I was hoping to find guidelines about designing the syntax for a new programming language. As others are saying, s-expression syntax is simple to parse because it's basically already structured like the AST. But s-expression syntax isn't so easy to develop in, especially for non- developers.

Why non-developers? I'm interested in DSLs that are used to add plugin-type scripting capabilities, so that advanced non-developer users can extend behavior on their own. Think Lua, but more specific to the domain. As far as syntax, I'm thinking about something more like BASIC for its simplicity.

<comment><USER14> > This is nice, but I was hoping to find guidelines about designing the syntax > for a new programming language. As others are saying, s-expression syntax is > simple to parse because it's basically already structured like the AST. But > s-expression syntax isn't so easy to develop in, especially for non- > developers.

IME, the "especially for non-developers" part doesn't seem to be true. People who are exposed to s-expression syntax _first_ don't seem to be any more likely to have problems with that syntax style than those introduced to programming with other syntaxes are with whatever syntax the are introduced to first; the people that are most put-off by s-expressions as a syntax of expressing programs are people who are attached to some other syntax first, and particularly people whose experience is with multiple languages all from the same syntax family, usually the ALGOL-style family.

</comment></comment><comment><USER15> I would recommend the Racket tutorial, especially, the section on using Racket's macro system to implement a slight variation of Algol 60. Working through this tutorial would give you a foundation on building your own DSLs, as well as giving you a solid foundation on using Racket and its macro system itself.

<comment><USER6> Could you please link to this? I didn't find anything when searching for the relevant keywords, or see anything of the sort at [http://docs.racket- lang.org/](http://docs.racket-lang.org/).

<comment><USER15> I found the starting point here "[http://docs.racket- lang.org/algol60/index.html"](http://docs.racket- lang.org/algol60/index.html").

<comment><USER6> I found that as well, but it is not what inetsee described in his post.

I was interested specifically in "using Racket's macro system to implement a slight variation of Algol 60", which is not what that section or the Racket guide section on macros [0] does.

It's not clear what was meant by "the Racket tutorial".

[0] [http://docs.racket-lang.org/guide/macros.html](http://docs.racket- lang.org/guide/macros.html)

</comment></comment></comment></comment><comment><USER16> Handy reference for those embarking on creating a new PL:

[http://colinm.org/language_checklist.html](http://colinm.org/language_checklist.html)

<comment><USER17> While this is still amusing, and poignant, I don't believe the goal of the original link is to encourage people to try and compete with modern languages.

For those of us (like me) who learn best by trying things out, a PL project is a great way to wrap your head around some of the more abstract concepts of modern programming languages (like closures, as mentioned in the post).

Still, +1 for amusement.

</comment></comment><comment><USER18> Fun and useful tutorial, great work, Kjetil!

<comment><AUTHOR> Thanks!

</comment></comment><comment><USER19> ... 8\. Find someone to do the most boring part - IDE - for you (most OSS languages).</comment>


How many Y Combinator startups have stayed in Cambridge or Bay Area? - <AUTHOR>

<comment><AUTHOR> I'm interested in how many Y Combinator startups have stayed in the area where they were formed, or if they've moved "Back Home" or to other cities.

<comment><USER2> Overall the more successful startups are less likely to move "home." And among successful ones that did, in all but one case, home happened to be a startup hub. E.g. Iminlikewithyou went to NYC, TextPayMe to Seattle. The one exception so far is Wufoo, who moved back to Florida.

<comment><USER3> I have it on pretty good authority that at least two of the three Wufoos would prefer to move back to the valley.

Our company is also staying in the valley for a while...though we'll eventually need a presence back in Austin (where I moved from for WFP07), because about half of the largest companies we want to sell to are in Texas.

</comment></comment></comment><comment><USER4> All I know is that the day after Startup School my cofounders and I starting scoping out places online to help with the move. :)

</comment><comment><USER5> auctomatic "moved" back to London in the sense that we're filing visa applications to get back out there asap. what's more interesting is the number of Cambridge startups that end up in SV (usually in the Crystal Towers building)

<comment><USER6> where is the crystal towers building?

<comment><USER7> It's just an apartment building in San Francisco, but a freakish number of their units are rented by YC founders at this point. It feels more like a dormitory than an apartment building.

<comment><USER6> sounds like a fun environment, rent is a little high even by SF standards, and especially for a pre-funding startup, but i guess if/after the angel and vc rounds come, it is not such a concern.

<comment><USER8> Month to month rent, furnished apts, utilities included, friends and help close by - founders have enough things to think about when running a company that they are willing to pay a premium for convenience. I am.

<comment><USER9> how much is the rent? will probably make my hair stand on end comparing it to Kansas rents. (just asking so I can get my kicks for the day and skip drinking coffee this morning)

<comment><USER8> about $2600 for a 2 bedroom.

<comment><USER10> I'm sure SF is a great social scene... but this seems cash inefficient.

For $2600 you could rent 2.6 houses in the Seattle area... and seattle ain't exactly cheap. Or put another way, you get a nice 2BR house to live in with a yard, _and_ you get a 3BR house to use as the office.... all for the rent of an _apartment_ in SF?

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER11> what about Inkling? they're in chicago, which is a decidedly lesser startup hub.

<comment><USER2> Yeah, true; ok, Wufoo and Inkling.</comment></comment>


Ask HN: Software scene in Hawaii or Astoria? - <AUTHOR> Hi HN,
I live in California, and after a crappy divorce, I'd like to get out of dodge.
I've always dreamed of living in Hawaii (I have family on the big island), and Astoria Oregon.
Can anyone tell me if its possible to find employment in these areas? And how one might go about such? <comment><USER2> Remote work bruh.</comment>


Technology Is Biased Too. How Do We Fix It? - <AUTHOR> https://fivethirtyeight.com/features/technology-is-biased-too-how-do-we-fix-it/ <comment><USER2> > Algorithms were supposed to free us from our unconscious mistakes.

Were they? Algorithms just do what we do, faster. For now. (see: AI)

> "Part of the problem is that people trained as data scientists who build > models and work with data aren't well connected to civil rights advocates > (...)"

so they could learn what reverse-biases to hardcode in the systems they build, or what facts to specifically ignore? I know I am putting it bluntly, but am I wrong?</comment>


Sony Bets on Blockchain to Reshape the Future of Public Transport - <AUTHOR> https://cointelegraph.com/news/sony-bets-on-blockchain-to-reshape-the-future-of-public-transport <comment><USER2> No crypto, so why the need for a blockchain? The real problem is siloed data behind diverse APIs</comment>


How Come This Plane Got Google's Logo Colors? - <AUTHOR> http://maps.google.com/maps?q=map:+hyde+park+Chicago+IL&ie=UTF8&hq=&hnear=Hyde+Park,+Chicago,+Cook,+Illinois,+United+States&gl=uk&ei=GNL7TKvWEseZhQeu4bWGCw&oi=geocode_result&ved=0CBkQ8gEwAA&ll=41.785401,-87.578706&spn=0.002036,0.004823&t=h&z=18

<comment><USER2> It looks like they take 4 exposures in quick succession: 3 chroma exposures (blue, green, red), and then luminance.

This is just an artifact of seeing the plane move between the 4 exposures (and then trying to composite it back into one image)

</comment><comment><USER3> Here is another.

[http://maps.google.com/maps/ms?ie=UTF8&msa=0&msid=10...](http://maps.google.com/maps/ms?ie=UTF8&msa=0&msid=100525912373773450724.000488df669787f20600d&t=h&source=embed&ll=35.0072,-81.019366&spn=0.001147,0.001837&z=19)</comment>


Researchers claim they found Atlantis in a Spanish swamp  - <AUTHOR> http://www.theglobeandmail.com/news/world/europe/researchers-claim-they-found-atlantis-in-a-spanish-swamp/article1941953/

<comment><USER2> "Atlantis" is better for headlines, but the city of Tartessos, capital of the eponymous kingdom, is more likely:

<http://en.wikipedia.org/wiki/Tartessos>

</comment><comment><USER3> No luck finding Atlantis with Google Maps, at least not for my 15 minute effort :)

<comment><USER4> I'm pretty sure this is the area:

[http://maps.google.com/maps?f=q&source=s_q&hl=en&...](http://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=Coto+Do%C3%B1ana+National+Park&sll=37.0625,-95.677068&sspn=21.53778,56.513672&ie=UTF8&hq=Parque+Nacional+de+Do%C3%B1ana&hnear=Donana+National+Park,+Aznalc%C3%A1zar,+Seville,+Andalusia,+Spain&ll=37.046409,-6.237488&spn=0.675189,1.766052&t=h&z=9)

The article talks about the Marisma de Hinojos marsh in the Coto Doñana National Park, just past the straits of Gibraltar. The map does show such a Doñana National Park, at the proper location and there is a town called Hinojos in the area. Now good luck finding the mysterious circular structures they claim to appear in the aerial photos!

<comment><USER5> I had a look and theres a few possible places, but honestly, the map resolution isn't high enough to be able to tell if its what they found or just some random noise or landscape. I doubt anyone will find it with google maps tbh.

Heres what I found, though: [http://maps.google.com/maps/ms?ie=UTF8&hl=en&t=h&...](http://maps.google.com/maps/ms?ie=UTF8&hl=en&t=h&msa=0&msid=208746125458698886187.00049e89e1f5bf14b1be8&ll=36.95826,-6.372414&spn=0.085183,0.171146&z=13)

</comment></comment></comment><comment><USER6> previous discussion: <http://news.ycombinator.com/item?id=2317243>

on Slashdot: [http://news.slashdot.org/story/11/03/13/2117222/Researchers-...](http://news.slashdot.org/story/11/03/13/2117222/Researchers- Find-Possible-Atlantis-Location)

</comment><comment><USER7> "Atlantis Found At Last!" is like urine-powered batteries (<http://www.google.com/search?q=urine+powered+batteries>) - it's a "science story" that big media editors feel that The Common Man would understand and enjoy.

</comment><comment><USER8> Again?

<comment> DanI-S By now they should have renamed it "The (Repeatedly) Found City of Atlantis".</comment></comment>


MIT cracks Tor anonymity network and identifies hidden servers with 88% accuracy - <AUTHOR> http://www.ibtimes.co.uk/mit-cracks-tor-anonymity-network-identifies-hidden-servers-88-accuracy-1513402

<comment><USER2> [https://blog.torproject.org/blog/technical-summary-usenix- fi...](https://blog.torproject.org/blog/technical-summary-usenix- fingerprinting-paper)

</comment><comment><USER3> where is the paper? article? methods?

<comment><USER4> [http://people.csail.mit.edu/devadas/pubs/circuit_finger.pdf](http://people.csail.mit.edu/devadas/pubs/circuit_finger.pdf) ([https://news.ycombinator.com/item?id=9967984](https://news.ycombinator.com/item?id=9967984))

</comment></comment><comment><USER5> Any word on the implications for the anonymity of Tor clients?</comment>


A slightly ranting personal criticism of Facebook and the like - <AUTHOR> http://everything2.com/title/Facebook+destroys+real+relationships

<comment><AUTHOR> I wrote this a while ago, when I got tired of explaining why I don't use Facebook. The phenomenon does not appear to have changed since then. I've since gotten several responses from people telling me they liked it, and they thought they were the only ones who disliked the whole Facebook movement. I still feel as somewhat of an outsider. I cannot name more than a few friends of mine who are not on Facebook.

<comment><USER2> I felt the same way for a while, and then ended up setting up an account.

Facebook is what you make of it. You can be a "friend-whore" and try to get every person you've ever met on your friends list, or you can limit it to just people you want to stay in touch with.

You can share as much or as little as you like.

From your blog post: _"I am not a Facebook user. "_ I think it's hard to have an accurate assessment of the service based only on second-hand experience.

<comment><USER3> Ditto on the last line. I don't use it - yet - but I have been dabbling in confirmation bias occasionally which of course isn't fair to Facebook.

A lot of the stories are merely about people who didn't know how to secure their privacy using pre-existing settings in Facebook.</comment></comment></comment>


Ask HN: Which book have you re-read the most times? how many times? - <AUTHOR> Question copied from Eric Jorgenson, who posted the same question on twitter: https://twitter.com/EricJorgenson/status/1016003656787857409 <comment><USER2> My current goal is to read different copies of the Bhagavad Gita. I'm on the third translation. Probably not very impressive! but a great goal for me personally.

Edit: downvotes? :(

<comment><USER3> (have an upvote)

IF I were that interested in a book,(THEN) I'd just learn the language of the original (Sanskrit for the BG) and read the original. Most translations miss many nuances.

<comment><USER2> Hey, that's a great idea! I think I'll take that on. Learning Sanskrit would be great, and reading the original BG would be so much better, you're right.

<comment><USER4> Just a heads up. Unless you have a flair for languages, you are in for a lot of pain. It will be exacerbated if you are a native English speaker with no knowledge of other Indo European languages like French or German because Sanskrit has ridiculous amounts declensions. (English, thankfully, lost those; it would have been much worse had they survived.) To add to this, the script is quite complex, more complex than Arabic but far less than Japanese (not sure how people manage to use such a complex system), but this can be somewhat ameliorated by using a transliterated text, like the ones Indologists use.

<comment><USER2> Thanks for the warning! Luckily I've already studied languages with (some) declensions like Old English, Old Norse and Icelandic, and to a lesser extent Russian and Bosnian. I used to be ravenous to learn new languages but after college and children my attention/interest/time shifted, but I think I can make time for some Sanskrit :)

<comment><USER4> Well, in that case, the road won't be as bumpy. You might actually survive and reach the other end. :)

</comment></comment></comment></comment></comment></comment><comment><USER5> The Tawny Man Trilogy by Robin Hobb, which I've re-read almost yearly for over a decade. It builds on top of The Farseer Trilogy, but (while it's good) I haven't re-read that trilogy nearly as many times.

From a story standpoint, it's your typical fantasy fiction stuff and not all that unique. But her writing style fascinates me: she leverages stream of consciousness[1] as a primary literary device, and perception and perspective are major components of her plots.

Her books triggered a subtle yet lasting shift in the way I think and communicate, which has directly and positively impacted countless aspects of my life. It caused me to take my introspective nature and apply the same mental framework to other people's thought processes, drastically ratcheting up my ability to be empathetic, spot and resolve assumptions & points of miscommunication between people, and fluidly transition between completely disparate communication styles to address widely different perspectives/concerns on things.

All because she used perspective, perception in a way that has forever-since caused me to be cognizant of and suspicious of implicit assumptions and ambiguity everywhere.

[1] [http://literary-devices.com/content/stream- consciousness](http://literary-devices.com/content/stream-consciousness)

</comment><comment><USER6> Typically religious book. I am reading "Pray, Hope, Don't Worry" for the 3rd time. It's a compilation of stories of people who've met and interacted with St. Padre Pio -- one of the only few saints who bore the wound of Christ, stigmata. As I tend too focused on work, this book is a great reminder that there are much more about live than just work, work, and work...

</comment><comment><USER7> I've read the classics, Dune (+sequels), Lord of the Rings, and the Amber books by Zelazny at least 20 times each over the past twenty years.

Other favourites include the Vlad Taltos novels by Brust which I've read at least ten times each (still thinking "WTF?" over Vallista though!) and Les Liaisons dangereuses by Pierre Choderlos de Laclos.

My tastes tend towards SciFi & Fantasy, but I have no shame about my love of romance either.

(The last set of books I read were the complete Bond novels by Ian Fleming. I don't think I'd read them again, very dated, very different to the films, and not that great.)

I've read most of Terry Pratchett's books a few times each, some more than others, along with other "comedy" writers such as Jasper Fforde, and Tom Holt (his "Portable Door" series is my favourite.)

</comment><comment><USER8> "Goodnight Moon", maybe a hundred times

"Go Dog, Go!", maybe a hundred times

"HOP ON POP", maybe a hundred times

<comment><USER9> I remember reading "Go Dog Go" to my son, many years ago. I was getting ready to turn the page, and he started reading it before I turned it. Yes he had memorized the book.

As it turns out, this was normal for kids to do, but it also ment I needed to get some new books.

What I should have done was point to each word as he said it to emphasis the the coorlation.

</comment></comment><comment><USER10> I've re-read The Belgariad series, by David Eddings, so many times I've lost count. Easily once a year, every year, since I was in my mid-teens (I'm in my late thirties). It is most firmly in the territory of "comfort reading" for me these days.

Dune, by Frank Herbert, comes a close second. I've read that at least a dozen times or more. It took me ages to get it. My dad had a copy, and I'd tried to read it probably 4 or 5 times, never getting far. Then I watched the David Lynch movie, went back to it and just devoured the book in a couple of days. Even though the two are wildly different, something about the movie gave me that kick I needed to get me in to the book.

I'm really not one for re-reading books all that much. Most books I read once. The ones I do re-read, I've read maybe 2 or 3 times.

</comment><comment><USER11> The book I have re-read the most is The Hobbit. It is comfort food to me. I have had to purchase a new copy because my old one is becoming fragile, and it has a lot of personal meaning to me. That old copy was given to me as a child by my grandfather. He was given that copy by C.S. Lewis while he and my grandmother were staying with him at the Kilns. I can only imagine one place where C.S. Lewis would have obtained a copy of The Hobbit.

There are usually two different reasons why one might re-read a book. Sometimes it is to see the book again through older eyes which have seen and known more. Other times it is to try to re-capture the emotional experience of living in that story. I find that I tend to come back to certain books much more often for the second reason than for the first one. I might feel the desire to re-read Quantum Computing without Magic or Theory of Internal Combustion Engines once a decade at most. But when I'm feeling that the world is a confusing place and I need some simplicity in my life, I'm ready to take a journey to the Lonely Mountain.

</comment><comment><USER12> I've read Dune at least 8 times, maybe 10. I could go on and on about how much I love this book.

I've read the Lord of the Rings 3 - 4 times, which I feel is a lot for a pretty thick series.

Lord of the Flies: 3 - 4 reads

1984: 3 - 4 reads

A Clockwork Orange: 3 reads

Brave New World: 4 reads

I really like dystopian fiction I guess.

<comment><USER13> Maybe you know it but I think you'd also like novels by J.G. Ballard. e.g. "Concrete Island" or "High Rise".

<comment><USER12> I'll check them out, thanks for the recommendation.

</comment></comment></comment><comment><USER14> * The Richest Man in Babylon [0]

* The Greatest Salesman in the World [1]

* Masters of Doom: How Two Guys Created an Empire and Transformed Pop Culture [2]

* [0] [https://www.goodreads.com/review/show/1875763811](https://www.goodreads.com/review/show/1875763811)

* [1] [https://www.goodreads.com/review/show/1875765552](https://www.goodreads.com/review/show/1875765552)

* [2] [https://www.goodreads.com/review/show/1875771565](https://www.goodreads.com/review/show/1875771565)

</comment><comment><USER15> "The Count of Monte Cristo" "The Man of Bronze"

What's interesting -- to me, anyway -- are the responses that are (a) books you might not be able to pay me to read or (b) books I enjoyed, but have never considered rereading.

I made it a couple of chapters into "The Lord of the Rings," tossed the book across the room, where it fell down behind some furniture and sat for years. I have never thought about reading it again.

I might need to go back and read both "Dune" and the Amber series. I enjoyed them; but, I've never thought about rereading them at all.

</comment><comment><USER16> I've read Caesar's Gallic War (Commentarii de Bello Gallico) and Civil War (Commentarii de Bello Civili) probably ~300 times but I don't have an exact count. They're relatively short texts.

I've re-read them non-stop for ~20 years any time I don't have something else I'm excited to read. I discovered them as a teenager but still find them fascinating. I find new things to think about every time I read them.

</comment><comment><USER17> I don't re-read. But the other posts in this thread conjure up many, many good memories of awesome books. I always feel there is another classic just on the horizon. So why re-read if you can expand. Time with 3 kids and work is limited. However, the depth of the understanding and impact books I love have made on others, they do tickle me to re-read..!

</comment><comment><USER18> I've read HHGTTG over and over. But I'm guessing anyone who has read it once has always wanted to do that.

</comment><comment><USER19> Hobbit/Lord of the Rings x10 at least

Travels - Michael Crichton x10 at least

Fear - Thich Nhat Hanh x10 at least

Tunnels and Trolls Rulebook x100

An Oracle Server v7 book I got on my graduate training course before everything was online and an O'Reilly Unix Handbook

Code Complete and the Mythical Man Month

Godel Escher and Bach - tried to get through it in one several times

</comment><comment><USER20> Lord of the rings at least twice a year from when I was about fifteen for the next ten years and about once a year since then.

The balgariard a good number of times.

Magician often enough that the book is now just a pile of pages.

More recently I've been working through cheap books on kindle.

</comment><comment><USER21> I've read Neuromancer and Snow Crash about once a year for nearly 20 years.

Michael Marshall Smith's early sci-fi books, Only Forward and Spares, have also had many re-reads.

</comment><comment><USER22> I read the 4 hour work week and then listened to it on audio afterwards.

I think the ideas are still very applicable, but some of the specifics might have changed.

</comment><comment><USER23> The Book of Disquiet by Fernando Pessoa.

On the Road by Kerouac.

Meditations by Marcus Aurelius.

I read Pessoa to feel not so alone. I read Kerouac to feel alive. I read Meditations to not lose my head.

</comment><comment><USER24> I keep coming back to "To Kill A Mockingbird" and "The Girl with the Dragon Tattoo". I'd say these are my two favourite books!

</comment><comment><USER25> Earth by David Brin, I think four times? It's a really good pre-Internet look at a near future.

Cryptonomicon a couple of times, and I'm planning on Anathem again.

</comment><comment><USER26> Cryptonomicon. Couldn't even say, more than 10 times.

</comment><comment><USER27> I must've read "The Tale of The Unknown Island" at least 30-40 times. A 30 minutes read that you take for your whole life.

</comment><comment><USER28> Don Quixote by Cervantes and the Tao Te ching. Former for its buffoonery and commentary on human nature and the later for its wisdom.

</comment><comment><USER29> For me it's probably _A Wizard of Earthsea_ , delightfully short at about 160 pages. I'd say...8 times.

<comment><USER7> That's a reminder I've not read that for a couple of years. I should have included it on my list - that and The Tombs.

</comment></comment><comment><USER30> Zen and the Art of Motorcycle Maintenance 1

</comment><comment><USER31> HHGTTG 42 times

<comment><USER32> Slow clap.

</comment></comment><comment><USER33> Dune, 3 or 4 times. Amber series by Zelazny, couple of times. Lots of Light by Zelazny, 4 times.

</comment><comment><USER34> I have read Zen and the Art of Motorcycle Maintenance, maybe 7 or 8 times. I have lost count.

</comment><comment><USER35> The bible and a book about C++.

</comment><comment><USER36> "Engine Summer", by John Crowley, about 15 times so far.

</comment><comment><USER37> I never read a book more than once... Am I the only one?

<comment><USER32> No. Too many books, not enough time.

</comment></comment><comment><USER38> I've read CJ Cherryh's Cyteen maybe 20 times.

<comment><USER12> Can you tell me why you like it? I've been thinking about picking up any random Cherryh book for a while now but I haven't pulled the trigger.

</comment></comment><comment><USER39> malazan book of the fallen or game of thrones (reread each season to remember what happened).

</comment><comment><USER40> "Sapiens", three times.

</comment><comment><USER41> The Cuckoo's Egg - 3 times

</comment><comment><USER42> On Intelligence - four times.

<comment><USER30> But did you read in on a Palm Pilot?

</comment></comment><comment><USER43> _man perldsc_

Hundreds.

</comment><comment><USER44> Wheel of Time

The Dark Tower</comment>


Improving Airflow UI Security - <AUTHOR> https://wecode.wepay.com/posts/improving-airflow-ui-security <comment><USER2> The addition of RBAC is so critical to making Airflow truly support a multi- user setup where not everyone with login access can modify and delete things. I'm really excited for this feature in the next version of Airflow.</comment>


The first year of our first app - an exciting journey - <AUTHOR> http://blog.fournova.com/2012/02/tower-the-first-year/

<comment><USER2> Love the fournova logo, something about it is just really aesthetically pleasing. It looked like an airline logo to me before I realized (from the more colorful logo for the app) that it was a control tower. Great job. Who designed it?

The app... I don't know why, but I never realized that I needed this. It's a private GitHub for self hosted repositories, duh. Will definitely give it a try.

<comment><USER3> If that's what you're expecting you will be disappointed: it's simply a Git client, a (very nice) GUI alternative to the command line.

<comment><USER2> I really like GitHub for browsing and reading code, something that you don't get with self-hosted repositories. That's really the feature that I was thinking of. Obviously there is a great deal more to GitHub than that.

</comment></comment></comment><comment><USER4> I read the entire article and have no idea what your app does or why I should care.</comment>


Chameleon Guitar - <AUTHOR> http://www.premierguitar.com/Magazine/Issue/Daily/News/Chameleon_Guitar_Guitar_of_the_Future.aspx

<comment><USER2> That's a very cool idea, but the video would be much more compelling if they showed the range of tones that come from the different insets.

</comment><comment><USER3> Am I wrong in thinking that the tone of a guitar isn't going to be affected that much by swapping out a small wooden inset? I mean, I get that a flat top guitar may or may not have a different wood on the top than everywhere else, but I feel like you need the entirety of the top to get the full effect of the sound.

Past that, I guess it's a good idea. The pickups look on the cheap side though. And while I would definitely be into a way to quickly switch out my pickup configuration, that's why there's a toggle switch.

It'd be neat to pit this against a Line 6 Variax.

<comment><USER4> I think you've missed the point of what they are doing. Of course, I may be wrong as well since this is the first that I've seen of this instrument, but here is my take of what they are doing. They are sampling the vibrations of the small guitar top in strategic places using piezo sensors. From this information, they are extrapolating the information using a digital computer to emulate the sound of a complete guitar. What you are hearing in the video is not just the sound of the small wooden inset. If you skip to ~1:55 in the video, you will see their animation of the vibration patterns on a full-sized guitar. My question would be whether they would really be able to determine and emulate the vibration patterns of any guitar top while only sampling 5 (?) locations relatively close to the bridge of the guitar.

As far as the pickups go, even though they might look cheap, they are insignificant and operate completely different than electric guitar pickups. All they need to do is provide the frequency information which is processed by the digital computer. You aren't actually hearing the analog output from the pickups.

I also don't see this guitar as a competitor to digital amps with effect processors.

<comment><USER3> I suppose I did. Thank you for the clarification. Perhaps I missed the boat by not watching the video.

As for the digital amp comment, is that in regards to the Line 6? The Variax is a guitar, with on-board CPU and synth modelling. It isn't a Pod crammed into a guitar, from my understanding (though I could again be wrong, and will voluntarily revoke my posting privileges for the day.)</comment></comment></comment>


AI's Research Rut - <AUTHOR> https://www.technologyreview.com/s/602157/ais-research-rut/ <comment><USER2> From what I understand, the holy grail of AI+robotics is folding laundry and doing house cleaning. Yet do we really need maids consulting on these AI projects?

More generally, the proposal of building an intelligent system based off the input from experts in fields even as erudite as medical records processing seems like a step back in AI. Trying to feed all the known first principles into machine which will then deduce insights is the methodology which seems to fail time and again outside of narrow and well defined problems like Chess.</comment>


Ask HN: What do you hate about Amazon? - <AUTHOR>

What would it take for you to switch from Amazon to another online bookseller? What do you hate most about it? <comment><USER3> I'm not sure what it would take me to switch, but the thing I hate moar about it is its absolutely horrible search engine. I can't imagine how much business they lose from people who are less persistent or experienced at searching than I am ... then again, Google could be saving them a lot of that business (when all else fails, I use Google and it generally finds what I'm looking for (in Amazon.com)).

There's really no excuse for this.

</comment><comment><USER4> Main motivation for using Amazon is the Kindle eco system, being able to read on laptop, iPad + Kindle is something I use a lot

If there was the ability to rent technical ebooks for a short period this is something I would definitely move for, which is the same as basically being motivated by the price of ebooks

</comment><comment><USER5> as a sign of how great the service is, IMHO, the only thing that annoys me is that I have to click on the password field whenever I have to log in. it looks like they've been testing a way to get the focus to the password field with a single tab, but it comes and goes.

honestly, amazon rocks. same day delivery if i need it, all-i-can-eat two day delivery for $80 per year, amazing customer service w/easy returns, rock solid security (i haven't changed my password since i created my account back in 1997 or so and haven't had one problem), nice discounts on books, etc. amazon deserves some sort of award in my opinion.

</comment><comment><USER6> If someone else did 'international' better than Amazon, I'd probably give it a whirl. If I lived in the US, I'd probably consider using Powell's just because they're awesome.

<comment><AUTHOR> Do you mean international shipping or just availability of books on Amazon's non-US sites?

<comment><USER6> I mean that Amazon has this sort of weird separation between sites; that, for instance, amazon.de isn't even available in English; that their European presence is spotty.

Ideally, I would sign in to 'amazon.com' and be able to browse in whatever language I want, and shop for books written in whatever language I'm interested in, and get them shipped to me from the nearest/cheapest/fastest/whatever location.

Like a lot of US companies, I get the feeling that they don't fully "get" Europe in some ways.

<comment><AUTHOR> That's a really good way of thinking about the interface. I reckon Amazon doesn't do it because of lots of region-specific complications and business needs.

</comment></comment></comment></comment><comment><USER7> The interface. It's too cluttered.

<comment><AUTHOR> How does that affect your buying process? Does it get in the way of looking for what you need?

<comment><USER7> Currently, I decide what items I want to buy by gathering information from any number of sources, then only go to amazon once I've decided, to buy - <USER2> I trust them and because their prices are generally good.

What I'd like to do, though, is to actually browse Amazon to, you know, find products to buy! But it's just so little fun.

</comment></comment></comment><comment><USER8> To be perfectly blunt, the 'social' aspects of Amazon drive me up the wall. I really don't care what other people bought or thought.

<comment><AUTHOR> Ok, but that's something which you can ignore. Is there anything lacking or annoying in the book buying process itself?

<comment><USER8> I shouldn't have to ignore anything. I'm there to buy books and cases of Cafe Bustelo, not to see what others are doing with their money or what others think of the coffee I'm buying.

The fact that there are reviews of 'five star' packages of diapers on Amazon is a little disturbing.

(Edited for spelling.)</comment></comment></comment>


Ask HN: Is sadism / masochism required for successful startup CEOs? - <AUTHOR> I'm reading "The Hard Thing About Hard Things" by Ben Horowitz and he just described the period of Opsware where they had a 60-day period of all-hands-on-deck, working 90 hours a week to try and save the company. And apparently all the employees were all for it, no one left, etc!
I can't see myself doing that. Yeah, maybe it works out and your 0.5% equity turns into millions, but that's a slim chance, and you can do consulting, or work at a BigCo, or start your own company and probably have a statistically better chance of getting rich.
I'm left feeling that startup CEOs are just taking advantage of their employees and sacrificing health and sanity for little reward. Which I guess I knew (HN talks about it all the time), but I think I was hoping that it's not required.
But maybe it is?
Or maybe those situations just reflect really poor management. But these stories are so widespread in startup-land that I'd want to see some examples of successful startups that have good work / life balance to think that that's the case.
In my 20s I dabbled in startups a bit, and I spent a lot of late nights and weekends working. But now I'm in my 30s with a kid and I'm much less interested in working 90 hours a week.
I've been consulting for years, and the money is great, but there's a ceiling there in terms of income. More than that, I really am missing some sense of significance in my work. I've always kind of assumed I'd start a company at some point, but now I'm wondering if I'm not cut out for it. Partly because I don't want to work 90 hours a week, and partly because I don't want to take advantage of naive employees and ask them to do the same.
I'd love to hear people's thoughts on whether you can be a sane, reasonable startup CEO that works 40-50 hours a week and asks your employees to do the same, and still succeed. Maybe that kind of sanity is only for linear growth companies? Or maybe I'm really just better-suited for another line of work :( <comment><USER2> You can succeed with fewer hours, but you may need more cash to burn. It's a tradeoff.</comment>


DEC64: Decimal Floating Point - <AUTHOR> http://dec64.com/ <comment><USER2> Why would you ever use floating point for money? You're just asking for rounding errors if you actually use the range, aren't you?

<comment><USER3> But the error is in the 17th place: insignificant. Before such an error represents single digit pennies, you're looking at astronomical money.

The main problem with ordinary, IEEE 754 binary floating point for money is that even run-of-the-mill numbers like $123.45 (nowhere near astronomical) exhibit serious problems when added together, due to 0.45 not being representable exactly in binary, and causing cumulative rounding errors.

This is cured by decimal floating point, which represents $123.45 exactly.

If you deal with quantities that stay within the 16 digits of precision, you will nigh hardly have a problem.

<comment><USER4> I use to think like that, but then there's practice over theory :

1/ When a coder thinks about writing "if a <= b", then he writes "if a <= b", he easily forgets that he should write "if a <= b + epsilon()"

2/ When people are faced with "I have to have this number with 2 decimals", they sometimes write a = round(a * 100)/100; forgetting that 'a' is a float (or double), and then they completely forget that the new 'a' is just not accurate.

3/ Issues with floats arise on simple operations such as addition. And people tend to think that simple operations have no rounding issues.

It'd be perfectly valid to work with floating point for money; but then you have to take care of the rounding issues much more often than with fixed point (or BigDecimal if you're in the java world). Once you use those BigDecimal, addition becomes safe, and "manual" rounding works as expected (when you round to 2 decimals, you get exactly 2, not an approximation).

So, after project managing several teams of developers, I can safely say that although F.P. can be fine, most people can't handle the mental load of thinking about rounding issues on each math operation they do (and "most people" includes myself). That's a human risk management issue, not a theoritical one.

<comment><USER5> Epsilons are almost worse than the floating point errors they try to solve! Now you have to work out a safe epsilon that'll always work and you create even more edge cases. A lot of the programming I do involved numbers that the user inputs, so I can't hard code an epsilon because they might enter 1e-10 and break it. Luckily though, a lot of algorithms and formulas can be reformulated so they either don't do = comparisons or if they do, it doesn't matter which case comes out when the two operands are very similar.

I think of floating point numbers as being good for representing real world quantities - things you can measure with an instrument. It never matters if you read 1.2999999999993 instead of 1.3 because every practical instrument is less accurate than that anyway. If you start needing to test for equality, that's a sign something's wrong in your design. You can never measure two lengths with a ruler in real life and check if they're equal. So maybe you should be using integers instead, or maybe you don't really need equality.

Your point 3 about rounding issues with addition disappears if you think of the value as being a physical measurement. You just don't care about those errors because they are always insignificant.

Isn't the problem with floats for money more a problem with the conventions of accountants? By rounding everything to 2 decimal places, they're obviously creating far more error than double precision's ~16 places. They just tolerate their specific type of error by convention.

</comment></comment></comment></comment><comment><USER6> I don't know if the popularity of this on HN is a case of the emperors new clothes, or if I am really missing something, but to me this is sophomoric. There is nothing inherently base-10 to finance or any other field. Finance deals in _exact_ quantities but that is because it deals in exact units. E.g. if a single stock tick is 0.1 cents, then a 0.11 cent increase is as meaningless as a 1/30 cent increase. There is no more need to represent arbitrary exact decimals as there is to represent arbitrary exact binary decimals. All that finance needs is integer multiples of the relevant unit. And presumably this is already hardcoded into their COBOL or FORTRAN code.

Nothing presented on that page made me thing that DEC64 would be useful for anything that integer arithmetic in the right units would not be better suited to.

<comment><USER7> Totally agree! If you want to calculate with cents, or tenths of cents for that matter, just use an integer based on that unit. You have not just 56, but 64 bits of precision, and no loss of generality in the money field.

<comment><USER8> And then you get a conversion rate with 1/1000 of a cent, and you have to manually make sure your fixed point gets converted correctly. Or worse, you get a conversion rate input with a variable number of digits after the decimal point, and you have to use all of them.

For simpler cases this is fine, but for more complex ones I suspect the mental overhead for developers would get problematic.

<comment><USER9> Why not just represent different currencies as different "types" and a quantity of their basic unit (cents for $, pennies for £, tambala for Kwacha) and have standard conversions between them:

        kwacha_t my_kwacha = 100000; // 1000 Kwacha
        euro_t my_euro = EU_from_kwacha(my_kwacha);
        printf("My Kwacha in Euros: %d", my_euro / 100);

Most of the problems discussed seem to resolve around trying to have some universal monetary unit, which isn't possible in practice anyway. Just settle on a universal currency for international trade (as the $ effectively is) and convert from/to as necessary for local representation.

Of course you're going to have to select an appropriate "minimum value" of your selected currency to suit your expected conversions but how is that different from selecting an appropriate epsilon?

</comment></comment></comment></comment><comment><USER10> I find it funny how the author easily dismisses IEEE decimal floating point because it hasn't seen huge adaptation since 2008 when it was released.

It since has been implemented in some CPUs: IBM z9 upwards, POWER 6 upwards

<comment><USER11> Yeah, exactly the same impression here. And it's not the case that there are no other software implementations - for example GCC supports _Decimal32/64/128 since 4.3 ([https://gcc.gnu.org/onlinedocs/gccint/Decimal-float- library-...](https://gcc.gnu.org/onlinedocs/gccint/Decimal-float-library- routines.html)).

</comment></comment><comment><USER12> Personally, I like this a lot. What are the potential downsides?

<comment><USER13> I think that the chance of this becoming prevalent is low. While it has its merit as a representation, floating point is already "good enough" for most computations. More importantly, it is ubiquitous.

Additionally, I don't know if there are enough compelling problems that require decimal numbers, can't take the hit of software emulation, and are willing to bind their performance to hardware that would take a while to be adopted, if at all.

I could be wrong though.

<comment><USER14> Floating point is really stupid for most computations. Can't store floating point numbers when dealing with money (have to store the number of cents or something equally stupid so you don't tell Paypal to sell something for $12.999999999999996 because they won't accept that price)

Can't store floating point numbers when you really need a ratio because it won't even work after you round it unless you reconcile different settings for precision. Decimal won't help here either.

So outside of niche scientific uses or something like graphics where you need performance, what do you really need floating point numbers for? I haven't had a need for floating point numbers outside of some mathematical formulae.

<comment><USER15> > So outside of niche scientific uses or something like graphics where you > need performance, what do you really need floating point numbers for? I > haven't had a need for floating point numbers outside of some mathematical > formulae.

This is... a weird thing to say. Obviously floats are going to be most useful for math, and not useful for much else. They're number types.

<comment><USER14> Yes, but decimal numbers would be useful in:

1\. Game score display where fractional points are possible

2\. Currency

3\. Any amount displayed to humans (like pounds of beef sold)

because decimal number correspond to what you're going to display to the user, while binary numbers are only useful for the result they produce inside an algorithm

<comment><USER15> So what is your point?

</comment></comment></comment></comment></comment></comment><comment><USER16> I wrote an arbitrary precision ASCII decimal floating point library. No conversion required at all!

[https://github.com/jhallen/joes- sandbox/tree/master/lib/farb](https://github.com/jhallen/joes- sandbox/tree/master/lib/farb)

(There are much faster alternatives, this was just for the fun of it).

</comment><comment><USER17> I like this idea for in the sense it makes life easier, like garbage collection for example.

It's good to understand what's going on behind the scenes, how memory is allocated and managed, and the floating point quirks and their binary nature, but for many general applications It'd be nice to have peace of mind that (0.1 + 0.2 == 0.3) returns true.

</comment><comment><USER18> > nan is equal to itself.

Why?

<comment><USER3> Because the designer is sane, and understands that A is A, no matter what A is:

[https://en.wikipedia.org/wiki/Law_of_identity](https://en.wikipedia.org/wiki/Law_of_identity)

<comment><USER19> It sounds more like the designer does not understand what NaN is. The whole point of NaN is that it propagates through all operations so making (Nan == Nan) == true defeats that purpose.

<comment><USER3> > _It sounds more like the designer does not understand what NaN is. The whole > point of NaN is that it propagates through all operations so making (Nan == > Nan) == true defeats that purpose._

In that case, making (NaN == NaN) == false also defeats it. false isn't NaN either. If true or false propagates out of a function whose inputs are NaN, NaN has failed to propagate.

<comment><USER20> > In that case, making (NaN == NaN) == false also defeats it. false isn't NaN > either.

With that logic, you could say making (1 == 1) == true is wrong, because 1 isn't true.

> If true or false propagates out of a function whose inputs are NaN, NaN has > failed to propagate.

He meant Nan propagates through _calculation_ operation, not _comparison_ operation. As in, result of calculating Nan + 1 is NaN.

So if you have "A = NaN" and "B = A + 1", you have the situation that both A and B is NaN but A does not equal B.

<comment><USER3> > _With that logic, you could say making (1 == 1) == true is wrong, because 1 > isn 't true._

1 == 1 isn't erroneous. Producing a boolean is the type of the operation: number x number -> bool.

(bool's domain could be extended with additional "nonbool" values, which are produced if some of the operands to a numeric comparison are not numbers.)

> _calculation operation, not comparison operation_

What's the difference? It's all computation. The comparison calculates a boolean result.

> As in, result of calculating Nan + 1 is NaN.

No it isn't. Proof:

      NaN + 1 == NaN  // yields false

As a hacky workaround, have to use some special predicate to test for NaN- ness, because the above doesn't work.

What would make sense would be to allocate a new NaN, so that it is legitimate that NaN + 1 != NaN. Neither side is a number, but the express different, individual ways of not being a number through their different identities. And the "isnan(X)" predicate tests whether X is an element of the set of all NaNs.

If that's not palatable, throw exceptions: don't allow NaN + 1 (why allow addition on "not a number"? Why even allow "not a number" to be stored into a variable of number type, in a static language?)</comment></comment></comment></comment></comment></comment>


Using motion effects as an un-colorblind filter - <AUTHOR> https://unblind.tech/ <comment><AUTHOR> Creator: [https://twitter.com/unconed/status/1263906138942291969](https://twitter.com/unconed/status/1263906138942291969)

[https://github.com/unconed/uncolorblind](https://github.com/unconed/uncolorblind)</comment>


Ask HN: Would You Go to the Doctor Right Now? - <AUTHOR> I have a minor doctor visit I need to make that's probably nothing serious but there's a small chance it could be. It's something that has to be looked at in-person, so I can't just do a remote appointment.
But I'm also in Texas and we're having a COVID spike right now. I'm thinking about just waiting a couple weeks to see if there will be another dip, but if there isn't then the virus situation will be a couple weeks' worse with potentially no end in sight.
What would you do? Do you think we'll keep having a seesaw effect as restrictions are lifted and then re-instituted over and over, or do you think a lot of people are just done quarantining for good? <comment><USER2> If it is something serious, how fast is it going to be? Is it something that will cause you significant issues in five years, or in a few months?

If you have, say, a 1% chance that the thing you have is fatal, well, you have a 1% chance of dying from Covid... if you get it. You aren't 100% certain to get it if you go to the doctor, though. In fact, it's probably in the single digits that you'll get it from a doctor's visit. (All numbers made up on the spot - I have no actual data.)

In fact, if your thing has some time urgency to it, maybe going _now_ is the answer. My personal impression is that Texas isn't going to get better for a long time. Six months? Two years? It's not going to get better, and it may get worse.

Note well: I am not a doctor, and this is not medical advice. I'm just some random nobody on the internet, shooting my mouth off.

</comment><comment><USER3> My scheduled physical at a medical center was last week. It was different to say the least.

I was met in the lobby by 6 nurses and guards, told precisely where to stand and to answer 10 questions which were shouted to me by a frightened nurse. She moved forward, pointed a temperature gun at my forehead and then jumped back. It was as if I were about to be arrested; very unsettling.

Once "approved" an orange sticker was put on my shoulder and I was permitted to proceed to the hallway elevators. Once inside I began to notice discarded orange stickers at random in the building.

During my visit I asked my physician about all this. He said no one with covid symptoms is allowed in the bldg. Instead they're handled by tele-medicine and/or directed to a hospital or ER. He has seen _NO_ covid patients _at all_ , nor had his starr. Here was a medical doctor in the middle of a pandemic who had _never_ seen a covid-19 patient: the irony of the situation apparently had long since escaped him.

Anyway, a medical center may be one of the safest places to go right now since a sick person, especially a covid-sick person, is unlikely to get past the guards! So likely covid will eventually enter these medical centers via the staff, cleaning workers (who can't afford to not work), someone fixing the windows, or suppliers, &c.

Unless you have covid I recommend you relax, go see your doctor and enjoy the theater of entering a locked-down secure and armed medical facility. Leave your handgun in your car or they might shoot you (seriously). Any quick move I made was _immediately_ attended by multiple guards startling. Way, way too much caffeine and imagination is fueling these places!

And FWIW my cholesterol is really looking good!8-))

Aside: for a month I've been asking everyone 2 questions:

\- do you know anyone who has/had covid?

\- has anyone _you_ _know_ ever spoken of someone _they_ know who has covid?

Results: only one person said "yes" to either question: he knew some workmen who had it: They worked through it b/c they'd lose their jobs otherwise.

So it appears covid is really, really rare, on the order of unicorns rare. I can see why some people believe the pandemic is a giant hoax.

</comment><comment><USER4> Try a remote screening first so the doctor or at least someone with an actual medical background can have a chance to tell you a technical opinion whether you can wait more or not. Men usually underestimate health issues so don't count on your "probably" from your post being nothing really, but please don't expose yourself out of pure fear just yet. If the remote screening tells your odds of needing an on site visit are over 50% then plan accordingly, then be paranoid with self-care/clothing/hygiene and good luck.

<comment><AUTHOR> Already did a remote screening and the current thing is a referral. The symptoms are definitely real and not in my head, but my doctor said the chance of it being something serious like cancer is "small".

</comment></comment><comment><USER5> I'm in AZ and going for a full body PET scan Monday. I'm also high risk for covid-19. However, medical facilities require everyone wear a mask, have temp checked on entrance, etc. And I'll probably only be out a couple of hours. TBH, the Uber ride is probably a bigger risk then the doctor. On the other hand - I won't be going to any hospitals till this all dies down. If I need biopsies, they'll have to wait.

Anyway, I think you'd be ok

<comment><AUTHOR> Yeah, unfortunately what I go to is a "medical center", which I don't believe counts as a "hospital" in terms of having emergency rooms and such, but it is a large medical complex including lots of GP offices; not just a one-off specialist's building.

<comment><USER5> Still - if its not an emergency room, people there are probably in for routine checks and not covid related. The place I'm going is an 'imaging center' \- so they do xrays, CAT scans, PET scans, etc. Probably not going to bump into anyone infectious there. My endo and pulmonologist's offices have been pretty empty, with short waits. Both the imaging center and the office's had the full mask, social distancing (empty chairs blocked), temp, and sanitizer routine at the door..

If you're going to a 'medical complex', I'd expect them to have something similar at the doors since they usually have a receptionist type desk.

</comment></comment></comment><comment><USER6> If the personnel there wear masks and require all visitors to wear masks, then go.

Many people are forgoing routine checkups, and this will lead to extra death and morbidity going forward.

EDIT: also worth checking: some facilities have been set aside for non-covid symptom patients. In some areas, whole hospitals are this way.

<comment><AUTHOR> I checked and mine filters people by symptoms at the door and has symptomatic people wait in their cars. But then, something crazy like 70% are asymptomatic, right?

<comment><USER6> I saw a recent study of an Italian town where they exhaustively tested everyone. It was something like 40% got it but had no symptoms.

The main means of transmission appears to be when people are talking, coughing, sneezing. If someone is talking without a mask on, they are spraying droplets everywhere. If they have a mask on, then the risk is much lower. If you have a mask on, too, then it is even lower.

In Singapore, medical personnel had excellent success by wearing surgical masks at all times, and wearing N95 masks only when performing procedures where lots of droplets were expected, such as extubating a patient.</comment></comment></comment>


Show HN: Kubernetes – How to Use Persistent Volume and Persistent Claims - <AUTHOR> https://youtu.be/1FTJQOvAGOY <comment><AUTHOR> In this lab session on Kubernetes Persistent Volume(PV) and Persistent Volume Claim (PVC) we will be going through -

1\. Concepts behind Kubernetes Persistent Volume(PV) and Persistent Volume Claim (PVC) 2\. How to create a Persistent Volume(PV)? 3\. Persistent Volume Claim (PVC)? 4\. How to create POD and use Persistent Volume(PV) and Persistent Volume Claim(PVC)?

Here is the link for the guide - [https://jhooq.com/how-to-use-persistent- volume-and-persisten...](https://jhooq.com/how-to-use-persistent-volume-and- persistent-claims-kubernetes)</comment>


Jaron Lainer on Microsoft (and a 1993 letter with plans to take it down) - <AUTHOR> http://www.jaronlanier.com/jaronandmsoft.html <comment><USER2> In case you're wondering who Jaron Lanier is, he's one of the early gods of 'virtual reality', he's in to just about every aspect of technology and culture. A very interesting person indeed. It's been really quiet around him in the last years.</comment>


Ask HN: How do I get developers to be interested? - <AUTHOR> Hi there,
I am a Developer focused in CRO tech (Analytics, AB testing, Tagging, etc).  Something I find very interesting.  However, historically I've had issues getting other developers to be interested in this field, and find that there is a very long training cycle if we wanted to get them up to speed and have them work independently.
Generally, a Developer would have to learn the development work, experiment design, analytics and tagging integration, basic statistics and basic analysis. It's hard to find that off the street, and training generally takes 12+ months to become independently capable.
I've generally heard feedback that this work isn't interesting, or is overly complex, and the developers will seek to avoid it or minimize their work with it.
Has anyone come across this before, and if so - how did you get a team of developers to be interested and motivated to learn this field? <comment><USER2> I have those skills, but let me play the skeptic here and amplify a few questions:

1\. What is CRO? (I just looked it up -- conversion rate optimization). Is it spammy?

2\. What is tagging? I assume it's instrumenting funnels etc. in apps. That has its own joys and sorrows, and can kind of jam up the critical path.

Some of it may be a breakdown in effort vs. reward. It's too easy to skip metrics when they're not a blocker for release, and the tentative benefits of running an experiment are less tangible than just releasing code (hence Windows 9).

<comment><AUTHOR> Correct, Conversion Rate Optimization. Use of tech such as surveys, AB tests, MVT tests, analytics, and so on to increase conversion rates for a particular action(s). A solid mix of Programming, Math and Science.

Tagging - use of pre-built tags in a Tag Manager (Google Tag Manager, Tealium) which send pre-defined data via the Tag Manager to 3rd parties.

I've also found people want to skip metrics, and I feel not only is that a bad plan, but it makes it difficult to figure out what may be going wrong without any data to prove a particular theory.

<comment><USER2> Well, if you call it Data Science, people will come running to you with their Hadoop skills :).

I don't really know the answer, as I've worked with some teams that had strong analytics/CRO penetration, and some that didn't. Probably the main difference is exec-level support; making metrics part of OKR's or the design process pretty much guarantees interest.

<comment><USER3> Well, properly done analytics of this sort can be quite interesting from a data science perspective, especially if the products or conversion goals are themselves driven by data science and machine learning. So maybe you're on to something here.

<comment><AUTHOR> Agreed, I am wondering if it could be something as simply as changing the titles people have.

<comment><USER2> Are you internal to a tech org, or is this a third-party service? How much bandwidth do you have with the CRO customer?

The reason I ask is that the role may be broader or narrower based on these factors; it may not be perceived as full-on data science.

<comment><AUTHOR> Internal to a Retail org, and I suspect it's not being viewed internally as Data Science.

</comment></comment></comment></comment></comment></comment></comment><comment><USER3> There are many ways, some more in your control than others.

Offer more compensation: cash is highly motivating.

Offer competitive work arrangements: remote work, highly flexible work hours, and highly flexible time off policies can inspire loyalty and longevity if not passion and excitement.

The work you're doing is done in the context of another industry: consider asking if that industry is interesting.

<comment><AUTHOR> Thanks, and I know it's harder to come by, but ideally I'd like to encourage passion for that kind of work if possible. It doesn't seem like that's an interesting field for most, in my experience however.

</comment></comment><comment><USER4> Curious about the motivation?

Are you looking for people to work for you?

Selling a product?

<comment><AUTHOR> I am the primary developer for what I listed, but I believe us to be fairly single threaded. While I am not looking for work - I do believe that given the range of skills required, it's not easy for someone to just jump in should something happen.

While it's not really my issue to correct - I am trying to be helpful, and attempting to figure out if a lot of people just dislike this work, or maybe it's how we're presenting it, or both.</comment></comment>