The Idea of Lisp - <AUTHOR> https://dev.to/ericnormand/the-idea-of-lisp <comment><USER3> This article has many misstatements in its first half.

> John McCarthy wrote 6 easy things in machine code, then combined them to > make a programming language.

John McCarthy didn't implement Lisp in machine code. Steve Russell did. Implementing Lisp properly in machine code is not easy; you have to write a garbage collector. To do that in the early 60s, you had to first _invent garbage collection_. Lisp was and is brilliant, but not as easily bootstrappable as this makes it out to be.

> It's not obvious that these six things are computationally complete (AKA > Turing Complete).

`lambda` and function application alone are Turing-complete, as McCarthy would have known. The credit here belongs with Turing and Church, not McCarthy. `atom`, `cons`, `car` and all the rest are just icing on the cake of the lambda calculus when it comes to computability.

> All other meaning can be defined in terms of them.

Yes, and you can build everything on top of the SK combinator calculus if you like, but that doesn't make it a good idea. Lisp is _surprisingly practical_ given how few core constructs it has, but real Lisp implementations have always added more primitives (eg. _numbers_ and _addition_ ) for reasons of practicality.

> The language was defined in terms of itself as an interpreter. This is a > proof by construction that the language is computationally complete.

No, it isn't. To prove Turing-completeness you need to show that you are as powerful as Turing machines. To do this it suffices to show that you can interpret a language already known to be Turing-complete. Showing you can interpret yourself does not suffice. It's easy to define a language which can do nothing useful _except_ interpret itself, for example. (See also wyager's comment.)

> Well, Lisp is defined as an interpreter in terms of itself from the get-go, > just like a Universal Turing Machine.

No. Defining a language _only_ in itself is nonsense, for exactly the reason given above: it means nothing yet! It's like writing in a dictionary:

       qyzzyghlm, v. intr. To qyzzyghlm.

It explains nothing unless you already understand it!

> Lisp is a universal language because it can interpret its own code. While > you can certainly write a JavaScript interpreter in JavaScript, none of the > work is done for you.

Almost none of the work is done for you in Lisp either. The core of Lisp is just a relatively easy language to implement, while Javascript is a difficult one. Lisp is easy to implement because it has simple syntax (s-expressions) and few core constructs. The only thing that is special about implementing Lisp in Lisp is that Lisp uses s-expressions as its core data structure, so you don't have to invent an AST representation. The article, to its credit, explores this idea later.

<comment><USER4> Garbage collection is not necessary for lisp. Garbage collection only provides the illusion of infinite memory. Just like malloc/free.

<comment><USER5> I assure you that "malloc" and "free" don't "provide the illusion of infinite memory". Quite the opposite, in fact.

<comment><USER6> They do if always matched 1:1, it doesn't usually happen, specially in big codebases, thus leading to CVEs.

<comment><USER5> They surely do not. Malloc is specified in such a way such that the request for memory can fail (which leads to returning NULL).

<comment><USER3> The specification allows for this, yes. However, on some platforms (including linux glibc by default, I believe), malloc() never fails, but allocates virtual memory optimistically; the first you hear of an out of memory condition is when the system slows down due to paging, and the next thing you notice is when the OOM killer nixes a process.

Of course, other platforms, especially embedded ones, behave differently.

<comment><USER7> Actually there is one reason for malloc to return NULL even with virtual memory, your process can run out of address space.

<comment><USER8> Or run out of room in the paging file. Your addressable memory cannot be larger than physical memory without a backing store.

<comment><USER9> Depending on VM_OVERCOMMIT_MEMORY, Linux might give out address space well beyond the size of the pagefile, hoping many of those pages are never written to (e.g., most threads never get anywhere near the bottom of their default stacks).

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> The conditional expression or more specifically everything being an expression is my favorite thing about Lisp. I did not know that McCarthy pushed to add it to Algol which apparently today is the ternary operator for most languages.

It is annoying that so many languages (C, Java, C#, etc) have both a conditional statement (if-else) and conditional expression (ternary ?:). Really the if-else should be an expression (I think the ternary operator is hideous).

<comment><USER11> If you like everything being an expression, check out tcl. A lot of ideas from lisp show up in tcl, especially the idea of everything as an expression. Tcl embodies this idea while also having the look of an algol-like language. Funny it can pull this off while having basically no syntax.

<comment> vertex-four Rust also has (almost) everything being an expression - things like this aren't uncommon:

        let x = if something {
            foo()
        } else {
            bar()
        }

Things which don't have a logical value evaluate to `()` (the empty tuple), I believe.

<comment><USER12> > Things which don't have a logical value evaluate to `()` (the empty tuple), > I believe.

If Rust follows Scala then `()` is not the empty tuple, but rather Unit (void in C*).

<comment><USER13> It's the same thing. It's a type with only a single value.

<comment><USER5> `void` in C does not have a value. You can't make a variable and put a void in it because there is no such object as "void".

<comment><USER14> That is an artificial restriction if C. Also see how ! In Rust is also loosing it's artificial restrictions.

<comment><USER15> Indeed, and there has been some talk of removing this restriction in C++ because it makes certain kinds of metaprogramming a lot more cumbersome than they should be.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER16> It's interesting, I'm reading Black Swan at the moment by Nassim Taleb, and one of his big rants is about how we get blinded by idealized, platonic forms and ideas when the real world is messy and inherently unpredictable. E.g. trying to explain the forms of nature with platonic archetypal shapes like circles, rectangles and triangles. Lisp and the community around it kinda has that flavor - getting lost in a world of "pure forms" and grand ideas, but downplaying the important but messy practical reality of hardware, useful libraries, and getting cool stuff done with a minimum of fuss. I'm periodically fascinated by Lisp (I wrote an interpreter or two in C) but I wonder if its "Platonicity" is part of its downfall.

<comment><USER17> I don't think actual Lisp programmers share this obsession with purity and ideal forms. It's more something that shows up in blog posts about Lisp by people who probably don't actually use it. The title of this one is telling: it's about "the _idea of_ Lisp."

On the other hand, if you look at, say, ANSI Common Lisp, it's not at all some kind of perfectionistic attempt at divine elegance. It's a pragmatic compromise resulting from years, decades, of actual use on real computers.

Just browse around the SBCL compiler source code and you'll see that this stuff is developed by people who definitely aren't afraid of the messy practical reality of hardware:

[https://github.com/sbcl/sbcl/tree/master/src/compiler/x86-64](https://github.com/sbcl/sbcl/tree/master/src/compiler/x86-64)

Generally spend some time within the Lisp community and see how many people you see fretting over Platonic archetypal shapes and compare to people solving actual problems and using the language as just a nice way to program a computer.

Emacs is another example that demonstrates the spirit of actual Lisp programming as opposed to armchair theorizing about lambda calculus fundamentals.

<comment><USER18> ANSI Common Lisp is rather a design-by-committee monstrosity which was forced on the unwilling Lisp vendors by the Defense Department.

Most of the feature set was designed via backroom political horse trading ("We'll let you include pet feature X if you support us for our pet feature Y".) There is no coherent overall plan or design to it at all.

(Source: personal communication from a member of the committee that designed it.)

It's based on actual use on real computers of the late 1970s and early 1980s -- e.g. the file opening mechanism is a complex abstraction designed to support filesystem paradigms that nobody has used for 30 years, yet there is no standard way to open a TCP socket.

I heartily recommend Clojure (clojure.org) as an alternative: a modern, pragmatic Lisp designed for 2016-era software engineering.

<comment><USER19> Given that most of the hundreds of Lisp implementations each have their own way to open a TCP connection, Clojure just added another incompatible one. To claim that it is a standard one, is a bit funny. Each of the hundreds other implementations could claim that, too.

Clojure generally added incompatibilities, since it is fully incompatible to any other Lisp before in fundamental ways. Clojure was designed with zero backwards compatibility. Lisp concepts were removed, renamed, redesigned. Even identifiers with the same name are doing completely different things. If it did something similar to what Lisp did, Clojure sure has it renamed and redesigned.

I doubt that you ever had talked to anyone from the ANSI CL committee. It would also have been easy to find out that Common Lisp was designed by a few core people (the gang of five) with lots of community input from 1980 to 1984. This part is well documented. 1984 the first version of Steele's book Common Lisp the Language was published. The ANSI Common Lisp standardization was started later in 1986, when the core of Common Lisp was already defined. Even there the major extensions were designed by small groups with community input. See for example how CLOS was designed by a few people (Daniel G. Bobrow, Linda G. DeMichiel, Richard P. Gabriel, Sonya E. Keene, Gregor Kiczales, and David A. Moon.) and by providing a complete reference implementation (PCL).

<comment><USER18> You missed the point. Clojure's way of opneing TCP connections is standardized _within Clojure_ \-- all Clojure programs use a standard API call to do that.

Common Lisp, on the other hand, has no standard way of opening a TCP socket at all, because TCP was uncommon when it was designed. It relies entirely on (poorly documented, often unmaintained) third party libraries to do that.

As for your doubts, you can doubt all you like, that changes nothing. I am well aware of the history of ANSI CL, and I'm not sure what point you are trying to make with all the namedropping.

<comment><USER19> > all Clojure programs use a standard API call to do that.

Clojure says nothing about creating TCP sockets, since Clojure implementations (all three) need to call the hosting systems call or emulate it somehow. The JVM Clojure uses a different call than the CLR Clojure.

Which makes it worse than Common Lisp, which has widely used socket support with usocket and some others.

> Common Lisp, on the other hand

Is a real language standard with many different implementations.

> It relies entirely on (poorly documented, often unmaintained) third party > libraries to do that.

Each Common Lisp implementation has a documented and maintained way to open a TCP socket. Additionally there are compatibility layers like usocket

[https://common-lisp.net/project/usocket/](https://common- lisp.net/project/usocket/)

> I am well aware of the history of ANSI CL,

Then why are you writing obviously wrong things?

</comment></comment></comment></comment></comment></comment><comment><USER20> > This is a proof by construction that the language is computationally > complete.

The definition of Turing completeness in the article is not correct. A language being able to execute programs written in itself is not a sufficient condition of Turing completenes. Trivial example: define a language with one pre-defined term, x, which is a routine that takes as input a string, checks if it's "x", and executes it if it is. The empty language is a counter-example as well, but that's cheating.

I'm also not sure if the use of the phrase "fixed point" is a misunderstanding of the definition of a fixed point or just an unfortunate use of a term that already has great significance in LISP.

<comment><USER21> I agree...I think a real "proof by construction that the language is [Turing] complete" would just be an interpreter for Turing machine programs written in Lisp, which is pretty boring.

</comment></comment><comment><USER11> Nice article. Check out Paul graham's The Roots of Lisp for a similar exploration in which he shows how to build the metacircular interpreter.

> John McCarthy wrote 6 easy things in machine code

It was actually Steve Russel, McCarthy's grad student, who had the idea of writing McCarthy's eval function in machine code.

<comment><USER22> > It was actually Steve Russel

I seem to recall reading that McCarthy was actually surprised to discover that Lisp _could_ be run by a real computer; he intended it to be a completely theoretical tool.

<comment><USER11> I have also heard that, but only from secondary sources. Here is a clip of Russell talking about the time he wrote the first lisp interpreter. He doesn't mention McCarthy being surprised, but he seems to imply that he, Russell, was quicker to grasp the idea of translating the functions McCarthy had been writing to machine code.

[http://www.computerhistory.org/pdp-1/1020b307d766e0019de2b4a...](http://www.computerhistory.org/pdp-1/1020b307d766e0019de2b4addcc86dee/)

</comment></comment></comment><comment><USER23> I'm working on a Lisp-based introductory programming book:

[https://github.com/rongarret/BWFP](https://github.com/rongarret/BWFP)

Still very much a work in progress. Feedback appreciated.

<comment><USER24> You may be interested in checking this out for inspiration: [http://www.ccs.neu.edu/home/matthias/HtDP2e/](http://www.ccs.neu.edu/home/matthias/HtDP2e/)

(It's the Intro to CS book used at my alma mater, teaching programming in Racket)

<comment><USER25> Tried doing some of that with High School kids -- I have to admit, at the beginning it was very difficult for them to wrap their head around the basic concepts in functional programming. The other issue was that the few syntactical rules and prefix notation, while great in the long term, required the kids to do a bit more of mental gymnastics for even basic things at the beginning, so that didn't help either.

But man after the initial hump, I was convinced that this is the route to go through in order to introduce someone to programming with very solid first principles.

<comment><USER23> That's why I'm using a library ([https://github.com/rongarret/ergolib](https://github.com/rongarret/ergolib)) to smooth over some of Common Lisp's rough edges. The goal of the book, what I hope will make it unique, is to teach all of the basics without having to get too hung up on the details of CL.

The reason chapter 3 is taking so long is that I can't figure out a good way to get around one of those details. I want chapter 3 to be about parsing i.e. I want the reader to build READ before they build EVAL. So I want to introduce READ-FROM-STRING, and one of the things I want to be able to read from strings is characters. Unfortunately, CL uses the same character (backslash) as the reader dispatch macro character for characters (e.g. #\x) as it does for the escape character in strings. So if you type #\x you get the character x, but if you type "#\x" you get a reader error because the backslash is consumed as an escape character inside the string. I have yet to find a satisfactory solution.

</comment></comment></comment></comment><comment><USER26> For anyone interested, John McCarthy's original paper on Lisp is here:

RECURSIVE FUNCTIONS OF SYMBOLIC EXPRESSIONS AND THEIR COMPUTATION BY MACHINE (Part I)

[http://www-formal.stanford.edu/jmc/recursive.html](http://www- formal.stanford.edu/jmc/recursive.html)

From the page:

"This paper appeared in Communications of the ACM in April 1960. It is the original paper on Lisp."

I had mentioned it in this blog post in which I gave a few examples of doing simple computations recursively in Python (for beginners).

Recursive computation of simple functions:

[http://jugad2.blogspot.in/2016/03/recursive-computation- of-s...](http://jugad2.blogspot.in/2016/03/recursive-computation-of- simple_2.html)

</comment><comment><USER27> Lisp was developed because McCarthy needed a tool for experimenting with AI. Found a video of McCarthy talking about AI: [https://www.youtube.com/watch?v=Ozipf13jRr4](https://www.youtube.com/watch?v=Ozipf13jRr4)

And if anyone cares, here is nice Shirt with McCarthy on it ;) [https://www.teepublic.com/t-shirt/666689-john-mccarthy- lisp-...](https://www.teepublic.com/t-shirt/666689-john-mccarthy-lisp-man)

I think it should be mandatory for CS students to implement their own little Lisp using the building blocks McCarthy described! Instead they are learning Java and ist crappy OO...

<comment><USER28> Is there a kind of walkthrough/tutorial about how to develop a little Lisp interpreter? That sounds like a fun experiment.

PS: Sorry, I am a Java OO developper. But I like to learn :)

<comment><USER29> For example: [http://www.buildyourownlisp.com/](http://www.buildyourownlisp.com/)

But there's plenty more.

<comment><USER30> Another one [https://github.com/kanaka/mal](https://github.com/kanaka/mal) (quite famous AFAIK)

</comment></comment></comment></comment><comment><USER31> The thing about the way ideas about programming are "sold" to other programmers, is that it has as much to do with the actual profession of programming as a typical tween's conception of being a "rockstar" has to do with the actual profession of being a touring musician. A lot of the really vital hard work is glossed over, and huge amounts of attention are paid to certain abstracted "sexy" ideas.

When people watch someone soldering, their attention is drawn to the iron, and to the shiny melted flowing metal. However, it's really _cleaning_ the tip of the iron and having an iron that can provide enough power at the right temperature that matters.

</comment><comment><USER32> When I was a kid they made us learn C and Lisp as part of Cognitive Science degree. I don't really use either language, unless you count C++. But I do feel that between those two languages you can understand two ideals really well. One is the idea of a clean symbolic expression, the other is the idea of a portable language that lets you get to the core of what the machine is really doing. Both are useful ways to think about programming.

<comment><USER33> Some years ago, Paul Graham wrote about there being too conceptually clean approaches to programming Languages, C and Lisp. The C family is far more popular, but the trend is to take C as your starting point, and add Lisp features to it.

Gosling said that Java drug the C++ crowd halfway to Lisp.

<comment><USER34> I wonder what aspects of Lisp he was referring to. The programming model of Java is basically C++ with garbage collection, minus a lot of stuff that makes C++ unsafe and hard to parse.

<comment><USER33> Good question. Perhaps because Java's OOP is closer to Smalltalk than Simula?

Here is the context:

[http://people.csail.mit.edu/gregs/ll1-discuss-archive- html/m...](http://people.csail.mit.edu/gregs/ll1-discuss-archive- html/msg04045.html)

</comment></comment></comment></comment><comment><USER35> I wonder why lisp isn't as popular as say python for AI, ML, and stuff. I see these fields as having a strong academic tone, and it feels like racket or clojure could be bigger when it comes to that.

<comment><USER36> Well, it was. Specifically, Common Lisp was. But that language's standard was etched in stone in 1994 whereas languages like Python (where most deep learning user-facing code is done) continue to evolve.

I think Python really took off for that because it already had quality and widely-used libraries for writing the code in Python and doing the work in a more efficient place (numpy, scipy). Clojure has one of those for matrix multiplication but not much else there, and I'm not sure Racket has anything at all.

<comment><USER37> > Well, it was. Specifically, Common Lisp was. But that language's standard > was etched in stone in 1994 whereas languages like Python (where most deep > learning user-facing code is done) continue to evolve.

This is an apples to oranges comparison. The Common Lisp _standard_ hasn't been updated since 1994. The Python standard has not been written at all yet. Lisp and Python implementations both continue to evolve and be released.

<comment><USER38> To add to that, the transition from Python 2 to Python 3 is also an example of how not to evolve a language.

</comment></comment></comment></comment><comment><USER39> I can't comment too much on this article, as I have a very, very limited view on LISP - basically just a couple of minor tutorials and one of the open- source interpreters. For me, it's always been one of those "I need to learn this" kind of languages, but I've never had a use case for it, and so it remains a curiosity to me more than anything.

I do know, though, that LISP allows the creation (or at least I have heard) for DSLs - so I am curious what people here think about this.

I'm also curious if anyone has an opinion on JetBrains MSL:

[https://www.jetbrains.com/mps/](https://www.jetbrains.com/mps/)

...and whether that would be a better thing to learn before or after learning LISP, as well as how it compares to LISP?

It's yet another "thing" that has caught my eye over the years, but again - <USER2> use case, and so it remains on the back burner for now...

<comment><USER11> Lisp is an interesting thing because once you learn it, you start seeing use cases for the ideas you've picked up during the process all over the place.

</comment></comment><comment><USER40> Does anybody have a few examples of DSLs people make in a lisp (ideally clojure because I have worked with it a tad)? I've seen plenty of cases where people make a pseudo-dsl via optional arguments, but not seen this so-oft mentioned "yeah we just wrote a dsl for it because lisp" sort of deal.

<comment><USER41> [http://beautifulracket.com/appendix/domain-specific- language...](http://beautifulracket.com/appendix/domain-specific- languages.html)

<comment><USER40> Hmm, I guess I have seen datascript / datalog. My main question is more about how many articles seem to suggest that it's basically par-for-the-course in lisp programming to just make a DSL in your projects, so was wondering when that might actually occur.

</comment></comment></comment><comment><USER42> Question: what would a LISP dialect with static typing look like?

EDIT: Found an answer: [http://stackoverflow.com/questions/3323549/is-a- statically-t...](http://stackoverflow.com/questions/3323549/is-a-statically- typed-full-lisp-variant-possible)

<comment><USER43> I designed and built a statically-typed F-Expr LISP for my thesis, using some partial AST evaluation to trace and ensure every value had at least an initial value, and from that, type inference.

So it looked like:

        (define fib
          (lambda (n)
            (let loop ((a 0) (b 1) (n n))
              (if (= n 0) a
              (loop b (+ a b) (- n 1)))))

Which would do nothing by itself, and be eliminated as dead code unless called.

If we called it with:

        (fib 10)

It would expand, after the macro stage, to:

        (define fib
          ((Type/Number lambda) ((Type/Number n))
            (let loop (((Type/Number a) 0) ((Type/Number b) 1) (n n))
              (if (= n 0) a
              (loop b (+ a b) (- n 1)))))

If a value couldn't be inferred after ensuring the validity of the AST, it was supposed to error out with some helpful messages, but tracing the entire AST forward and back repeatedly always managed to type every value that was at least initialised, and if not, eliminate it as dead code.

Tradeoffs:

Compiling can be _very_ lengthy, and it would be theoretically possible to write a program that would take ridiculous times to compile.

Once compiled, we can ensure type safety, and in the underlying implementation, JIT everything for a decent amount of speed.

Edit: Forgot to add lambda return type. Then added it in the wrong place.

<comment><USER44> Do you happen to have a link to your thesis?

<comment><USER43> Unfortunately not.

I had to surrender publishing rights, and the university only publishes about 10 submissions a yeaar... So unlikely to appear anytime soon.

<comment><USER45> > I had to surrender publishing rights

Even as a pdf on your own webpage? What kind of university would do that? Even the most abusive CS publishers have a more relaxed policy…

<comment><USER43> Well, the nearest competitor requires full copyright transfer, so there's that.

And CS publishing usually happens only within STEM, not as a standalone, within this circle of Universities.

No, not in America. There is far less interest locally in CS, and so a sort of mild tyranny rules in academia.

</comment></comment></comment></comment></comment></comment><comment><USER46> Since this takes so much from things Alan has said, I'd be interested in seeing what he thinks.

Alan, if you're there, would you care to comment?

</comment><comment><USER47> Out of curiosity, what's the alternative to if/else? Assuming polymorphism wasn't around in the 50's, did people express the idea of conditional execution based on the result of evaluating some expression using and/or? Does this mean that lazy evaluation was around before conditionals?

</comment><comment><USER48> I know their is an active community around Lisp and it's still used for development, but I apparently have not dug deep enough to appreciate when it's the best choice for a new project.

Can someone mantion a few features or scenarios that make it the best choice for starting a new project?

<comment><USER43> There's two places where I find LISPs useful.

* Where I might prototype something in Python usually, I can build the Scheme equivalent just as fast, and thanks to Gambit or Chicken's speed and static compiling, it can grow to be bigger than just a prototype with few tradeoffs.

* Anytime I need a DSL, if it isn't LISP, I find myself either disappointed by slowness, or fighting with the language. Example: HTML templates. (x-expr are great!)

In short, speed and flexibility.

</comment></comment><comment><USER49> This great idea of Lisp (the simple syntax of function calls in round brackets) isn't much different than a good macro assembler even back in the 1960's. The only major difference was that more than 1 function could be defined in 1 source code line. (I think that machine code is nothing but a sequence of function calls where the function is the logic encoded in the CPU itself for each opcode.) Is it fair to compare the complexity of expression evaluation etc (Fortran) with a macro assembler? Obviously any program can be coded in a macro assembler and therefore that would also be true from a syntax like Lisp.

When I was in my 20's, I programmed at least 100,000 lines of Z80 assembler for the first micro computers. One project was at least 40,000 lines and so I know how difficult it is to program larger assembler programs. The biggest problem is that it is hard to see the structure of the loops and conditionals that we normally indent in higher level languages. (You can indent a Lisp program in any way but the language doesn't require any at all.) It is also difficult to recognize expressions. Both of these problems are also there in Lisp (unlike most other high level languages).

One last point about the linked list structure at the heart of Lisp. Linked lists are poorly executed in modern computers that rely heavily on locality of data, to optimize the L1 cache. Lisp was very easy on the compiler/interpreter writer but wasn't very good at optimizing the readability of the code for the programmer. (I don't want a religious war but I will point out that most programmers have never programmed in Lisp even though it was one of the first computer languages created.) Before I get a lot of dissing comments, I think with practice, some programmers developed an eye for the lack of structural clues and made some reasonable size code. You could say the same about some programmers making quite good large scale programs in assembler but that doesn't mean that writing in assembler or Lisp should be encouraged.

<comment><USER50> You make some specific claims here that sound a little odd to this LISP and assembly language hacker.

Assembly language doesn't provide any datatypes. LISP does. Assembly language doesn't provide any type checking. LISP does. Assembly language doesn't provide automatic storage reclamation. LISP does. Assembly language doesn't provide naming. LISP does.

You also make a claim about L1 caches and locality of reference. Every LISP compiler writer, and every LISP garbage collector writer, knows about CDR- coding. We also know about how Cheney copying garbage collectors and their descendants like the Baker incremental collector compact data, precisely for locality of reference. The compiler writer of course is thinking about cache performance and how lines are mapped in particular target architectures.

You should probably educate yourself a little more about LISP if you are so interested in it as to make statements in a public forum.

<comment><USER49> I was only talking about the 'list of function calls' aspect of assembler and Lisp, not the type system. I agree that Lisp has a type system and assembler doesn't. Forth is another language that also has very simple syntax that approximates the 'list of function calls' style that I would say isn't unlike a macro assembler either.

I am writing a new language with built-in garbage collection that I think is quite superior to other languages. I have created a full standard library with almost 1,000 built-in functions and none of my data structures (lists, maps, trees, stacks, indexes, tables etc) contain pointers or linked lists (that use pointers). I sold over 30,000 copies of a language/database system in 1987 so I think your last comment is quite inappropriate. I have know about Lisp since I started CS in University in 1975.

Linked lists are horrible data structures when being used as well as when being freed (your garbage collection comment). I use simple dynamic multi- typed arrays instead of linked lists (pointers) and they can be freed in 1 chunk or a bigger version can be freed with a few memory de-allocations. I get full cache locality and improved speed of allocation and de-allocation.

I would love to see an incremental GC that can copy all linked lists nodes into contiguous memory automatically. Nice trick if you can do it but that doesn't help you if your linked list doesn't cause a GC.

<comment><USER51> Big time array fan here. I'd love to check out your language when you publish it. Sooner the better.. we need new ideas! Email in profile if you'd like to chat about it.</comment></comment></comment></comment>


Why were comments disabled from the scribd post? - <AUTHOR>

I'm just curious.  Comments in this community are very valuable. <comment><USER2> Comments are especially valuable on the bizarre phenomenon that is scribd.

I personally hate the fact comments are disabled for job postings.

<comment><USER3> why?

I think it'd be kind of annoying if you post a job request and all you get is commentary on your company :)

<comment><USER2> I'd mind less if the job requests weren't mixed in with everything else. Put job postings over to the right there or something if they're "non interactive" adverts.

Surely it'd be nice to be able to ask the company some questions though? Like "Do you have a wii console?" "Do any hot girls work there?" etc

<comment><USER3> I have to admit the first thing I thought when I saw that scribd advert was to post a comment expressing my opinion on scribd :>

<comment><USER2> heh ok, ok same here...

To be honest, I'm surprised they didn't take the text

"Scribd is on pace for 70M uniques this month with just 5 Rails developers. Come join us!", and wrap it in a 250Kb flash file, and 'stream' it over to the front page.

<comment><USER3> Heh.

Irrespective of their project -- the devs are great guys (or the ones I've conversed with) I'd love to work there.

</comment></comment></comment></comment></comment></comment><comment><USER4> That's not a normal post -- it's a special job posting only available to YC companies. Comments aren't enabled for those posts.

<comment><USER5> Ah. Would this be followed by more job postings - paid too ?

It is a niche audience here for hacker jobs and more. Highly valuable and I guess people wouldn't have much of a problem either once in a while to look at a good job posting. But still it might be better if placed on a different link or on a small strip on the right ?

<comment><USER6> There is a jobs link in the header. <http://news.ycombinator.com/jobs>

However, it does not notify (e.g. show as a highlighted link) when there are new job postings. Perhaps that could be a new HN feature someday.

</comment></comment></comment><comment><USER7> I've often thought it might be nice to route around the lack of comments by having another post that points to the original. I'd rather have something like "job poster gets to moderate comments" than not having them at all, but I guess pg is a bit busy:-)

<comment><USER8> If you get a chance, ask him to work on the RSS feed. I've seen feeds that are worse, but not by much.

<comment><USER7> You can ask him just as much as me or anyone else. I've never met the guy and live on the other side of the world.

<comment><USER8> I know that i can ask him. It's an expression.

</comment></comment></comment></comment><comment><USER2> <http://www.scribd.com/doc/11439198/Scribd-job-posting></comment>


Google DevArt – Art Made with Code - <AUTHOR> https://devart.withgoogle.com/ <comment><USER2> I think this is an amazing initiative from Google!</comment>


How a security pro's ill-advised hack of a Florida elections site backfired - <AUTHOR> http://arstechnica.com/security/2016/05/how-a-security-pros-ill-advised-hack-of-a-florida-elections-site-backfired/ <comment><USER2> That's what happens when you compromise a site that you don't have authorization to test. You always run this risk when performing testing that isn't under the umbrella of a formal bug bounty.

<comment><USER3> Perhaps there should be some sort of bug bounty on all government (at least federal, ideally state, and in a perfect world local) sites? Would be awesome if, say, the US CTO spearheaded an effort to implement one.

<comment><USER4> Most bug bounty programs don't let you pivot and try to escalate your privileges on a live system, which is exactly what this guy did and exactly why he is in so much trouble.

</comment></comment></comment><comment><USER5> In my opinion he was likely in the wrong here, but likely had the right intentions.

As with all computer crimes they massively over-charge people, because of "hacker" moral panics and a public that doesn't understand how proportionately bad something is (or isn't).

I'd just give the dude a fine and let him walk. But he is legitimately facing jail time on this one.

</comment><comment><USER6> Did anyone notice the Flame Internet at the top left of the page? A quick google brings up flamepro.com which is in the same geographical area. They have a picture of the original website on their facebook page also. I bet this is the company responsible for developing the site. If so, I wonder how many other sites they've built have similar lapses. I wonder if they posted screenshots of others on their Facebook page?

Also I didn't hear any mention of the site not using SSL -- so, on top of the credentials being stored in cleartext, they're likely sent in cleartext also.

</comment><comment><USER7> It's strange to call this whistleblowing.

1\. security guy was not an insider, but whistleblowers usually are

2\. lax security is not illegal or illicit, just dumb

3\. security guy informed staff of vulnerability and they fixed it, so... why blow the whistle?

</comment><comment><USER8> A number of years ago, upon getting a Jury Duty notice, I took an observational look at the security of the jury registration site. It quickly became apparent, without exploitation that it was XSS and SQLi vulnerable. I immediately reached out to the local court IT director with a disclosure, ensuring that I was as clear as possible on the fact that I did not exploit the system. She contacted me within an hour and I worked with her office over the course of the next several months to confirm the vulnerabilities and in the end, retire the solution entirely by justifying the budget for replacement. I went from an annoying security researcher to valuable partner. Later that year a number of developers from her team joined me for my annual DEFCON outing and were extremely grateful for the discovery and how I handled it as they'd been trying to get the solution replaced for years.

Unfortunately a lot of people either don't know where the line is or don't have the skills to know how to not cross the line. Far too many times I see people toss a tool like SQLMap at something rather than understanding how SQLi works. If you understand SQLi, honestly there is very little need to run an automated discovery and exploitation tool against it, even in cases of blind SQLi, that comes when you have permission which in my experience isn't hard to get if you come to the table with credible observational security findings.

This particular case appears to be a cut and dried case of attempting to use hacking for political gain.

</comment><comment><USER9> Terrible security and software skill should be defenses to hacking. I have had bad auth systems come apart in my hands because I used it "wrong" and was accused of hacking.</comment>


Change we can stomach - <AUTHOR> http://www.nytimes.com/2008/05/11/opinion/11barber.html

<comment><USER2> _In fact, small farms are the most productive on earth.A four-acre farm in the United States nets, on average, $1,400 per acre; a 1,364-acre farm nets $39 an acre._

Who writes this stuff? Doesn't anybody think about it before it gets printed in the New York Times?

Four-acre farms tend to grow high-value (and probably labour-intensive) crops. There's no point owning a four-acre farm if you're going to use it to grow, say, wheat (40 bushels per acre per year, $9 a bushel, so that's $1440 a year gross).

I'm not sure what you can grow which might yield you $1400 an acre. Maybe tulips, or battery hens? Whatever it is, it's probably something you can't sensibly scale up to 1364 acres. (And where did the number 1364 come from? And let's not get started on the fact that 1364 acres isn't really what you'd call a "large" farm. )

Anyway, I'm not just nitpicking on journalistic innumeracy. I really suspect that the whole conclusion (that small farms are more productive than big farms) is completely wrong.

<comment><USER3> _I'm not sure what you can grow which might yield you $1400 an acre._

When 20 acres costs 3 million dollars, some land has to put out a lot more than that.

<http://www.bergmanvineyards.com/pf_dm.html>

Also note:

<http://countrystudies.us/russia/60.htm>

 _Private plots also played a role in the Soviet agricultural system. The government allotted small plots to individual farming households to produce food for their own use and for sale as an income supplement. Throughout the Soviet period, the productivity rates of private plots far exceeded their size. With only 3 percent of total sown area in the 1980s, they produced over a quarter of agricultural output._

<comment><USER2> Yes, I'm sure wine grapes would have to be among the >$1400/acre net crops.

As for the Soviet example, don't you think that's more likely to be telling us something about private vs collectivized farms, rather than something about large vs small farms?

I'm sure there must be data out there somewhere on the efficiency of large vs small farms. Hell, I'm sure there are people who spend their lives studying that kind of thing. Presumably there's some kind of complex productivity vs size curve which varies depending on what crop you're raising (as well as a bunch of other variables) and I'm sure if I went to hang out in the agricultural economics department for a while I could find out far more than I ever wanted to know about it.

</comment></comment></comment><comment><AUTHOR> This isn't especially intellectually interesting, but I submitted it anyway because it provides a few good web app ideas.

</comment><comment><USER4> Is there an easy way to get past the login page, or do I have to sign in to NYtimes.com?

<comment><USER5> Google the headline. Last I checked the NYT lets people in for free if they came via Google search results.

Or just use bugmenot.</comment></comment>


Ask HN: Should I drop out of my second bachelors? - <AUTHOR> Currently in my late 20s and will be transferring from a community college to my local UC for my second bachelors, which will be completed in March of 2017. First degree was from the same school with unrelated, non-math, non-engineering degree.
Had a talk with my friend who is in the industry, and he said I should just start applying for jobs and teaching myself instead of wasting money. For jobs like web and mobile dev, it makes less sense to go for a full CS degree, since in those fields you can showcase your work and get hired a lot easier. I currently have one app in the app store and I'm active in open-source, however I still feel a little too green to start applying yet.
So now I'm stuck in the middle. I quit my job in January 2015, and I feel like I am at the halfway mark of completing the CS degree. I feel like I am already in too deep to turn back.
If I do apply, I won't be able to start until late March 2016, which is when I'll be done with my first quarter at my university. Fees are already paid and I don't want to drop out in the middle of a quarter. How do I format my resume in a way that I want to put my schooling on hold, especially when they see on their that I am currently attending school?
Is this the right choice? <comment><USER2> This doesn't have to be an either/or situation. There is no reason you can't go looking for a part-time job in the industry and frame it as "looking for a job to help get your through college." Sometimes, employers have a hard time filling weird slots where they want and need quality candidates, but it isn't a full time gig or has odd hours. That might be the perfect thing for a full time student.

If you get said gig and feel like the usual course load for full time is a bit much, you can look at what the minimum hours are to be considered full time to keep whatever grants and the like you may have that are dependent upon full time student status.

When I was in college, typical course load was 3 classes each worth 5 credit hours for a total of 15 credit hours. But one quarter I took the minimum of 12 credit hours because I needed a break from the pressure but did not wish to drop out. Later, I took an overload, 4 full time (5 credit hour) classes for a total of 20 credit hours that quarter. I had to get approval to do it. I think 18 hours was the point at which it was viewed as an overload.

So dig around in the college policies a bit and consider looking for part-time jobs that would help you get your foot in the door.

Best of luck.

</comment><comment><USER3> "The right choice" is the right choice for you. Having a CS degree is unlikely to harm your career at any company worth a significant sacrifice. As a credential it may open doors.

But really it comes down to the value a degree has to you. There's usually nothing wrong with prioritizing employment over an uninteresting education over the long run. There's usually nothing wrong with prioritizing an interesting education over employment in the short run. The other corners of the matrix make one's interests obvious.

Finally, it seems that you aren't chomping the bit to drop out of school. That is what you are saying to yourself. If your friend was in your position, it's ok that they might choose differently...it wouldn't _really_ be your position.

Hoid luck.

</comment><comment><USER4> Others already commented on the whole idea, but I wanted to add:

> I currently have one app in the app store and I'm active in open-source, > however I still feel a little too green to start applying yet.

So here's the reality: a lot of people who apply for jobs the first time don't know how to program, they don't know what opensource is, could not create and publish an app to save their lives, and definitely don't have experience collaborating with others. Compared to many people applying for their first programming job, you're overqualified. You can likely find a job that's not at entry level at this point - just present your skills and current OS contributions.

</comment><comment><USER5> > So now I'm stuck in the middle. I quit my job in January 2015, and I feel > like I am at the halfway mark of completing the CS degree. I feel like I am > already in too deep to turn back.

Why is it an either-or thing? If you get full time work, do one class a semester, either a weekend class, or a class that meets at night (one or two days a week). If you're not working and have the opportunity etc., take more classes on. Working full time doesn't mean you can't take one night/weekend class a semester. Lots of people do that - I did. Also, you tend to learn that subject pretty well, and get a good grade in it.

> For jobs like web and mobile dev, it makes less sense to go for a full CS > degree, since in those fields you can showcase your work and get hired a lot > easier.

That makes sense if your life goal consists in that first hire at that first job. I am mostly doing mobile dev right now and lean on my CS degree all the time. I recently needed to figure out how to transform a binary injective function into a proper output, and then derive the variables from the output. I first thought of Gödel numbers, but knew from my computational complexity classes and processor register classes how those could get big quickly, so then I settled on a function where the output of (1, X) would always be a triangular number. Without a CS curriculum, I would have never thought of this. It also allowed for my app to exceed the capabilities of even Google's app that dealt with this feature.

A case from a year or so ago - I had to deal with a race condition in someone else's code. My knowledge of mutual exclusion, critical sections and so forth from school helped me fix the problem. In this case it was critical, as it was a bug in revenue-generating production code.

Right now, I am working with some excellent programmers on a project. My architecture and code looks like junk compared to theirs, and they fix code I wrote with major improvements and simplifications. At least I'm at the level I am now, with a CS foundation and some experience. I feel sheepish enough about the quality of my work next to theirs, I am thankful that I'm not lacking the foundation of an entire CS curriculum.

</comment><comment><USER6> Why not both? Start your portfolio and freelance.

</comment><comment><USER7> Start applying for jobs. If you've demonstrated some talent you should be able to get in somewhere.

</comment><comment><USER8> I'd start applying for jobs. You can always continue your schooling while employed. Your new employer may even have a tuition reimbursement benefit you could take advantage of.</comment>


Why Haven't We Automated Our Meetings Yet? - <AUTHOR> http://getsolid.io/blog/meeting-automation/ <comment><USER2> I always thought that it would be nice to dial a number and record a transcript of the meeting.

Also, there are only so many kinds of meetings so have templates for agendas could be useful. Status meetings, company/departmental meetings, company notification meetings(manager tells employees about talking points and answers questions), come to a decision meetings, kick off meetings, etc.

Also, some meetings could be done through other means. document with a quiz(I'd rather read talking points then meet about them). Q/A documents.</comment>


Why path lengths in .NET Framework are limited to 260 characters - <AUTHOR> http://blogs.msdn.com/b/bclteam/archive/2007/02/13/long-paths-in-net-part-1-of-3-kim-hamilton.aspx

<comment><USER2> When you read this keep in mind that decisions like this are meant to help the vast number of .NET developers in corporate America. This is something Microsoft does very well: they are willing to make compromises to functionality in order to get secure defaults. I can't think of a lot of other companies that do that.

</comment><comment><USER3> tl;dr version: to be compatible with MS-DOS, a system that was detrimentally "parsimonious" with memory.

<comment><USER4> Downvoted for being not only inaccurate, but incorrect as well. There is no such thing as "maximum path length" in DOS. Interrupt 21h, for example, used ASCIIZ path which could be up to 64k long, terminator included (due to how memory was addressed in real mode). I believe that the shell considered the path to be up to 80 characters long, but I could be wrong about that.

Had you actually read the article -- which, one hopes, would be a prerequisite for writing a "tl;dr" version -- you would've understood that 260 characters is a limit imposed by Windows API.</comment></comment>


Ask HN: How to get real SEO improvement? - <AUTHOR> I have a website (https://enlight.ml) that has really poor SEO results.<p>What kind of meta tags or strategies would work to improve rankings significantly? <comment><USER2> Your website is only about 7 months old. I was lucky to have 30-50 visitors around then. Think about the universe and you are Earth. It is kind of like that. Social media will help you get it out there. But the majority of people have no idea that you exist. You have to work to get them to notice.

Meta tags don't work anymore or at least are not very important. You should, however, have a good description and a headline that is unique for every page you have. A subheadline is recommended. Then it is just unique content from there. It looks like you are on the right track. I'd recommend getting a Twitter account and sharing those articles with some hashtags.

Remember that your audience is a niche audience and you will attract people who are interested but there are only about 20 million coders in the world, not every single one of them is going to be interested in your website, and others who might scan it once and be done.

You have the right idea on your "getting started with coding", as you can gain attention and traction to get new coders on board. So you just need some time and exposure. Any time you can, mention tutorials on your website to help others.

I run a website called [http://www.confessionsoftheprofessions.com](http://www.confessionsoftheprofessions.com) and I remember when I had just three visitors in the beginning: my mom, my girlfriend, and Googlebot. Having posted to Twitter, Triberr, LinkedIn, and other media over the years, I'd say my average daily visitor count is around 1,000, over 4 years later, but I have seen the website go viral at times, in fact, just a few weeks ago, it was getting 10,000 visitors a day for almost 2 weeks.

What's my secret? I'm not the only one writing articles for the website. I opened it up so everyone else can write and share articles. What does that do? People who are likely to have their articles on your website are going to share those articles with their fans and following. So if I have a thousand articles on the website written by different people who have their own fans and following, and you encourage them to share for maximum exposure, that amounts to at least an average of 500 people each (with generosity for exposure in mind), that is the potential reach of at least 500,000 people.

Become a community that people want to be at and write for and you will find the best SEO results that you never had to pay for.

<comment><USER3> Thank you for the tips, especially the idea of accepting other's articles. What's your process for moderating them, do they often require additional communication with an author?

<comment><USER2> Accepting others' articles means that I do not know everything nor do I claim to know everything. For my website, which focuses on jobs, careers, and the workplace, which can cover a wide range of topics, I've never been a police officer or a teacher or a judge or a mechanic, so how can I write about that kind of stuff? I let others do it for me.

Back in the day, I had a submission form right on the website where people could submit their articles, but the form got spammed so much I had to remove it. Now people just email me their articles and infographics. That was another thing -- accepting infographics increased the amount of articles on the website greatly. Every time you make a post, it is a gateway to another search on the Internet and another way for visitors to find you.

So almost every article is acceptable, though there are some rules:

\- no "self-promotion" (you cannot sell your product on the website directly -- but you can talk about it and lead visitors back your own website)

\- article must contribute some type of knowledge to the Internet

\- 500 words minimum per article or 250 word summary per infographic

For the most part, I've never had too many issues, and I think of the 2,000 articles I've accepted, I've only ever rejected less than 10 because people tried to submit a spun article, they just didn't get the concept of "no self- promotion", and there was this one time where an article was encouraging women to do works of charity in areas of the world that I would consider dangerous, so I was very skeptical about publishing something like that. Most contributors have been fans of the website for a while before they contribute so they have an idea of the types of articles we are looking for and how they should read.. though everyone has their own unique personality and writing style, which helps greatly with SEO.

I read every article and it goes through a processing phase which consists of making sure there are no spelling mistakes, making sure the actual article makes sense, preparing the article for any additional SEO (meta description), finding at least two images (one main and one featured which greatly help SEO), and adding to a feature I call Quick Glimpse (I write 4- to 5- bullet points summarizing the article which is located on the left hand side of every page, which also may help with SEO), and then I schedule the article. I also write out every single infographic in order for it to be a text-friendly version (I have blind readers who can't read infographics), and that too, is also great for SEO.

Sounds like a crazy time-consuming process, which is why it can take anywhere from a week to two weeks to get published, but actual time it takes to do all this (including writing out infographics) is anywhere from 10 minutes to a half hour per article. Every week to every other week, I'd say I get an average of about 5-10 emails contributing articles to the website. I also spend time writing my own and those get published every so often too.

The amount of work you put into your website will yield the results you want to see. In the beginning, I must've spent too many hours working on the website, but have since limited myself to no more than an hour a day, including the processing of articles.

I will say this: in the beginning, I solicited articles on Craigslist, MyBlogGuest, and later on, MyBlogU. I also would hop on Fiverr and pay people to write articles for me. After the first year, however, I stopped all of this because I was receiving so many contributions from the submission form (and I was also writing so much), and now it is no longer necessary for me to solicit anything at all.

Your website is a coding-niche but you might want to consider writing actual articles not always just focused on code, unless that is all you want to reach: people with knowledge of code. I mean... if I were visiting a website like yours with interest in coding or even a little knowledge in coding, I'd want to know:

\- Why should I learn code?

\- What kind of money can I make and what is the programming language to help me do that?

\- How can I make money with coding while freelancing?

\- What types of jobs can I do?

\- Who is hiring?

\- Why is coding important for the future?

\- Why should I teach my children to learn how to code?

The topics are numerous on what you can write about. These types of topics will draw NEW coders in and people who want to learn to code, so you aren't just after assuming everyone knows how to code, and that should likely gain some traffic to your website.

Something that is recently receiving attention in the news is that more schools are now offering courses on coding, some even mandatory. Imagine being an important website resource that helps children learn how to code. Just some things for you to think about!

</comment></comment></comment><comment><USER4> First you need to establish which keywords you want to rank for. Then, get as many high quality backlinks as possible with those keywords. Make sure to mix with other non-related keywords as well, like your domain and what not.

This is still working in 2017 even if search engines will like you to believe otherwise. Links still rule.

Now, the best would be to make some killer content on the website that would attract journalists and blogers that would want to write about it aka that would consider your content worthwile to write about and worthwile for their audience to read about.

</comment><comment><USER5> Your content is targeting nobody. Who is your target? I guess it is people learning to code.

Build your content based on that. Change your headlines to something like "Learn how to build a Twitter Bot in node.js".

Setup Google Webmasters to understand what Google is doing. Actively send your sitemap to them (it is a manual input there).

I do this content SEO a lot. People say good content is king, but after 2 years I have some websites with a lot of pageviews and the only thing I did was poor content.</comment>


Vessel joins Verizon - <AUTHOR> https://www.vessel.com/blog?nodupe=1 <comment><USER2> > It is hard for us to put into words how thankful we are to our customers

> we will be sunsetting the Vessel service at the end of this month (October > 31). All subscribers [monthly price was $2.99/month] of Vessel will be > provided complimentary access for the month of October

Less than 5 days notice?

<comment><USER3> Seriously, as if it were posted on April 1st. Mine as well should've added another disclaimer:

\+ Assuming you read this far and be able to cover your own airfare to meet us, we will buy you one Mai-Tai in Bora Bora next week as a thank you.

</comment></comment><comment><AUTHOR> Why was this title changed? The fact that they shut down with 5 days notice is pretty significant in my opinion. ( @dang ?)

</comment><comment><USER4> Submitted to [https://ourincrediblejourney.tumblr.com/](https://ourincrediblejourney.tumblr.com/) as a textbook case.

<comment><USER5> I see what you did there

</comment></comment><comment><USER6> Well at least they are giving out refunds, although this probably sucks considerably more to the actual content creators that were relying on Vessel for revenue.

On one hand I hated Vessel and the likes because they splintered the content it was tolerable because usually most of the content was timed exclusive, but now you see more and more YT channels either splintering their content across multiple premium platforms or if they are big enough starting their own premium platform (e.g. Screen Junkies Plus).

</comment><comment><USER7> In the end, all I used Vessel for was the one-year free trial they offered when they started. I think it still benefitted the channels I subscribed to (i.e. Veritasium and Minute Physics/Earth).

</comment><comment><USER8> Sooo that's why Linus stopped publishing exclusive content on there two days ago... Huh... Well, goodbye Vessel, I loved to hate you.</comment>


JPMorgan Marshals an Army of Developers to Automate High Finance - <AUTHOR> https://www.bloomberg.com/news/articles/2017-02-28/jpmorgan-marshals-an-army-of-developers-to-automate-high-finance?cmpid=socialflow-twitter-business&utm_content=business&utm_campaign=socialflow-organic&utm_source=twitter&utm_medium=social <comment><USER2> Of the many projects mentioned in the article I find the automation of contract analysis most interesting. Seems like a rich area for application of a whole variety of NLP techniques.

I would be curious if the current state is to essentially read the contract and mark up or label all the critical bits of the contract and then pass it to a human for final review and approval. Or, are they processing it using bank business rules and logic and automating approval without a human in the loop?

Anybody out there on HN who can speak in more technical depth about the contract analysis projects without giving away any trade secrets? I could imagine applying some old school controlled vocabularies and automated indexing as well as more statistical techniques such as topic modelling and Named Entity Recognition.</comment>


Ask HN: Advice for a junior Software Engineer - <AUTHOR> I am a young Software Engineer. Although content with work and salary w.r.t any other field, I always wish to be able to do something in a niche area. The general software Engineer is something everyone around me does and does it well enough so that it gets impossibly hard to be or even judge the top 10%. I feel I should chase something which is not achievable by many. 10x Engineer can be one such thing. I want to develop/master a skill that very few can achieve, which would make me highly valued and sought after. Every now and then something new in CS pops up and a million people are chasing it already. In other words, among 100 people I would like to be the one guy who is always calm, cool and confident because he has a skill that no one else can easily learn/aquire. Is it even possible?  What advice would you give? <comment><USER2> The tricky part is that there is no guarantee that the hot skill of today will still be hot once you've developed expertise. When I was a young junior software engineer in 2005-07, for example, the hot skill that everybody wanted but few people had was Javascript (recall that this was before JQuery, let alone Node). It was great for a few years, and helped me get my foot in the door at a couple places where I could learn other skills. But now basically everybody knows Javascript, and it's looked down upon as the language of junior developers.

If I were you, I'd look for a sub-field that's _interesting_ , something where you enjoy doing the work and learning the material itself. And then wait for the rest of the world to come around. When you look at people who are actually acknowledged as experts, it's usually because they got started on something before it was cool, and then had built up years of expertise when the world decided that this was suddenly the hot new thing. Note that there's plenty of risk in this: there's no guarantee that the world will actually come around, and you might end up working on something that the rest of the world thinks is a niche hobby. But at least you'll be working on something you enjoy, which is sorta the point of life after all.

</comment><comment><USER3> It's an interesting question, specialization vs generalization.

It may be easier for a generalist to get a job (any job) because there will always be somebody who needs to get X done with Y technology and somebody who can learn Y technology quickly and get X done is in demand.

On some level you are not going to be all that productive doing that since you will spend your time learning how to get the length of of a String with technology Y and then having to learn it all over against with technology Z.

At that rate, however, you will be a "junior developer" when you are 45.

On the other hand if you develop some specialized skill it may well be that this skill is not in demand or that the jobs involving this skill may not be well paying, etc. (i.e. many of the best paying jobs give you hazard pay for working with toxic people, toxic code, toxic tooling, etc. -- even if you are objectively more productive taking a "path less followed" you are bucking the dominant paradigm)

There is "no silver bullet" for careers in software development.

</comment><comment><USER4> Do ten times the amount of study and practice as the rest of the crowd.

Read the best and as many relevant books you can afford about current and next subjects you are working on. Keep reading. Don't stop reading.</comment>


Yahoo's new home page fails to learn from Google - <AUTHOR> http://www.thestandard.com/news/2009/05/05/yahoo-s-new-home-page-fails-learn-google

<comment><USER2> Yahoo's homepage has always been of the portal style. When I see people's homepages (friends, family) they're never Google but some sort of portal (whether it's a social news aggregator (Digg, reddit), an actual news network or one of the 'classic' web portals (MSN, Yahoo)). I think this is because when people start up their browser they're looking for new stuff.

Sure, while Google certainly profits from keeping its homepage clean (it can serve it much faster than any other search engine) I don't think that these ongoing comparisons between the two sites are worthwhile. One is aiming to be a search engine, one is aiming to be a portal (yes, with a search utility), at the end of the day they both follow completely different design routes.</comment>


What is going on with the Censorship post on r/pics? - <AUTHOR> https://www.reddit.com/r/OutOfTheLoop/comments/ctqpbv/what_is_going_on_with_the_censorship_post_on_rpics/ <comment><AUTHOR> The main observation is Tencent has a recent investment in Reddit.

[https://www.thestreet.com/technology/tencent- invests-150-mil...](https://www.thestreet.com/technology/tencent- invests-150-million-in-reddit-14863248)</comment>


Why is hi-tech Japan using cassette tapes and faxes? (2015) - <AUTHOR> https://www.bbc.co.uk/news/business-34667380 <comment><USER2> I have a friend in Japan who used to own a small seafood restaurant. At the end of the day, before closing up shop, she would send a fax to her supplier at the local fish market with a list of things she needed for tomorrow. Take a printed form, circle the necessary ingredients, fax it. Got any additional notes? Just write it at the bottom. Only took a minute.

A modern solution for this use case would be a custom website or a mobile app. Now, even if you disregard for a moment the cost of developing/running/maintaining those things, the UX and reliability of paper and pencil for this use case is far superior to mucking around on your phone or PC.

<comment><USER3> If it's just a shopping list, what does fax offer that SMS wouldn't?

<comment><USER4> Circle items VS awkwardly typing on a tiny screen where you can't see the whole form Ask a 50+ person to choose between large "screen" and manual big circling motion vs phone typing

<comment><USER5> The equivalent to circling things on paper is selecting check boxes next to items on a touch screen. Which is just as easy, if not even easier (easy to cancel a selection which is not so easy once something is already circled on paper).

<comment><USER6> My Dad who has Parkinson's despises small mobile phone touchscreens that require him to awkwardly press tiny areas. A4 Paper rules the day.

<comment><USER5> So he would presumably struggle with a piece of paper the size of a small mobile phone too.

Why contrast a small phonescreen with a piece of A4 paper when touchscreens also come in A4 size?

</comment></comment></comment></comment></comment></comment><comment><USER7> Has the typical software application actually gotten better with time? I feel like websites in particular and software in general have gone downhill since the early 2000s. Everything is more complicated, less clear, loads more slowly, and is wrapped in the UI-flavor of the week. Boring ugly websites, like boring ugly technologies, just get the job done.

<comment><USER8> A line-of-business application where I work was recently upgraded to be responsive with a number of useful client-side JavaScript features added. Nobody in their right mind would use it on a mobile device but it's nice to be able to resize the browser window instead of dedicating one monitor to it. And the JS library they're using for the dozens of large data tables in the system is so much more pleasant to use than the ad-hoc server side filtering and sorting they had before. I can't think of a thing they did that seems frivolous, except maybe dropping the Internet Explorer requirement, and I'm not complaining about that either. ;-)

<comment><USER6> The problem is that this is a rarity. Most "modern" web-apps are worse than their traditional desktop app replacements. It is not as if developers are worse today. It is because traditional desktop applications can build upon better frameworks, leverage better tested accessibility, compose and extend native and rich UI controls offered by the OS and all of which leads to better developer productivity and comfortable user experience.

Yes, you can do all that with JSS and CSS also. However you have to fight extreme CSS and JS bloat in order to achieve the same thing.

I really want the browser vendors to offer a large suite of standardised, modern web controls. UX Designers who love to do their own snarky, edgy stuff can keep doing so, but for us developers it would be a god-send for our sanity.

</comment></comment></comment><comment><USER9> As if this were any different in other countries.[1]

In some European countries fax is still the only official way to transfer documents digitally.

I heard similar rules exist in old companies in the US, in particular financial & health care ones.

Yet, when I lived in Japan I don't think I ever sent a fax or encountered a situation where faxing was necessary myself. Yes our company sometimes needed to send faxes to a bank and we needed to use workarounds (online fax sending service), so I know it's still a thing. However, it's a thing like legacy software and COBOL is a thing. It's just there waiting to be replaced when possible. Most businesses/companies are not setting up processes that require incoming faxes.

I guess there is a niche for it in small businesses that are too old (dying) and don't care to modernize. And why not? I don't think it's so weird to use faxes where it makes sense. They are just one communication tool among many.

These articles and their fascination with Japan. Just like the suicides and the sexless, herbivore men crap that is constantly making the rounds.

No, Japan is not like every other place, but it's also not that unique. At least I wished these journalists would properly identify how phenomenon x in Japan is different from the same one happening in let's say ...Finland. But that wouldn't be exotic enough to interest readers. Somehow with Japan it always has to be explained with some exceptional quality/pattern (Japanese people do this and that, culture, shame, homogeneous society...).

[1] [http://theconversation.com/why-do-people-still-use-fax- machi...](http://theconversation.com/why-do-people-still-use-fax- machines-109064)

<comment><USER5> > These articles and their fascination with Japan. Just like the suicides and > the sexless, herbivore men crap that is constantly making the rounds.

The other story that is constantly told is about Japan's ageing society, while very few stories are published about South Korea's situation (ageing more rapidly even if Japan has the lead) or the demographic situation in various eastern & southern European countries.

And the BBC is particularly guilty here. It produces generally very lazy foreign reporting.

<comment><USER10> Exactly, Japan's fertility rate is higher than Italy, Spain and Greece, at a comparable level to Germany. It is on the low end of things, but it's not really an outlier when compared to many other first world nations.

</comment></comment></comment><comment><USER11> This is a rant, most of it self-directed, so add salt to taste.

We live in a bubble. A bubble out of which we force ourselves not to look out of. A bubble filled with screens and frequent dopamine hits. We smile, we snicker, we chuckle, and whenever something doesn't agree with us, we instantly reply with our disagreement.

We don't want to look up, outside the window, feel the breeze and see life as it is going on around us. People walking, talking, communicate using many things beside a keyboard and emojis. Mostly using tones of voice, facial expressions, body language. Even more so with things they can touch, feel, read on things which are tangible, not worrying about going out of charge, or talking about formats, or apps.

This is life. Not the bits and bytes. Not the communication protocols, not the APIs, coding methodologies, frameworks, editors, tabs, spaces. Those are for machines to talk to other machines, not to people.

Like @dmit mentioned, analog still rules our world, if only we were to open our eyes. I don't mean analog in the electronic sense, but in the physical sense. There are myriad of colours, not just black and white, let alone greys.

We are still mechanical in our heads, and physical in our hands.

We are not the machines we use. I don't want to write on a screen. I want to write on paper. I want to give it to a machine. Let it do what it's for. Let the person the paper is given to, scribble on it, change it, send it back. I talk to the person and the deal is done. No version control required. If machines are there for both of us to fulfill the tasks we need to do, let them do it properly. That's what they are there for.

Okay, end of rant. I don't know where this is going anyway. But good for Japan to stick to what works. Making machines of people should not be considered development. Making machines for people should be.

<comment><USER12> > The danger of computers becoming like humans is not as great as the danger > of humans becoming like computers.

\-- Konrad Zuse

Another man very much worth reading: [https://en.wikipedia.org/wiki/Joseph_Weizenbaum](https://en.wikipedia.org/wiki/Joseph_Weizenbaum)

> His influential 1976 book Computer Power and Human Reason displays his > ambivalence towards computer technology and lays out his case: while > Artificial Intelligence may be possible, we should never allow computers to > make important decisions because computers will always lack human qualities > such as compassion and wisdom. Weizenbaum makes the crucial distinction > between deciding and choosing. Deciding is a computational activity, > something that can ultimately be programmed. Choice, however, is the product > of judgment, not calculation. It is the capacity to choose that ultimately > makes us human. Comprehensive human judgment is able to include non- > mathematical factors, such as emotions. Judgment can compare apples and > oranges, and can do so without quantifying each fruit type and then > reductively quantifying each to factors necessary for comparison.

</comment></comment><comment><USER13> Aside from Japan, the thing about cassette tapes that will keep a few of them around for a while is the automobile.

If you have a classic car then the period correct in-car-entertainment could be a cassette player with slots in the dashboard for a selection of cassettes. You would need period correct tapes for your 1980's hot hatch - e.g. 'Born in the USA' or 'Brothers in Arms' that were de-facto during that time for anyone owning a VW Golf Peugeot 205 GTI.

These little accessories are what makes a classic car that bit more interesting. Needless to say the market for refurbished cassettes is a bit thin but I would like to think it exists.

<comment><USER14> Hmmm.

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

</comment></comment><comment><USER15> Meanwhile in Germany doctors are still using fax machines and dot matrix printers heavily, as there's no good solution for digital signatures and some paperwork still needs physical carbon copies.

Also, in the few years since this was written I got the feeling that some genres are actually bringing cassette tapes back. Mostly out of nostalgia, of course (so _totally_ different from the vinyl craze).

<comment><USER16> I think it was just last week that I saw a headline here in Germany that after a ransomware attack on computers the only thing that still worked was fax [0]. As an administrator I would leave that old technology in place if it doesn't cost much, just in case, in addition to any of the other arguments about politics or issues around laws. Just as a backup if - or when - computers/Internet are down or unusable.

Of course, this does not explain why it is being used _regularly_. From my subjective point of view, having worked in the IT industry and as freelancer in various big customer projects for two decades, IT solutions don't look nearly as great as they appear to be in theory. Riddled with bugs and often brittle, _completely_ different interfaces depending on what software you use (much of it custom-made), bad interoperability, expensive, long-term questions about what will happen 10 years later (usually needs to be solved with even more money for new software and data migration and lots of new issues). I'm a lot more wary of shiny software solutions _in practice_ , because I think the process of creating big and especially custom niche software for special use cases seems way too political to me now and not enough interested in actually finding a good technical solution. I laugh a lot less now about people and businesses using "ancient" tech like paper.

[0] It might have been this court in Berlin: [https://www.berlin.de/gerichte/kammergericht/kontakt/artikel...](https://www.berlin.de/gerichte/kammergericht/kontakt/artikel.851552.php) (TL;DR "we are offline, only phone and fax work") -- but it could also have been something else, that's not the only case when something like this happened.

</comment></comment><comment><USER17> Meanwhile the UK national health service is apparently the largest purchaser of fax machines in the world.

[https://www.google.co.uk/amp/s/www.telegraph.co.uk/news/2018...](https://www.google.co.uk/amp/s/www.telegraph.co.uk/news/2018/07/11/nhs- worlds-biggest-fax-machine-buyer-due-stubborn-resistance/amp/)

<comment><USER18> Yet a few months later [1] [2]

[1] [https://www.theguardian.com/society/2018/oct/25/leeds-nhs- tr...](https://www.theguardian.com/society/2018/oct/25/leeds-nhs- trust-345-fax-machines-want-rid)

[2] [https://twitter.com/AxeTheFax](https://twitter.com/AxeTheFax)

</comment></comment><comment><USER19> Japan is still using these technologies because most Japanese aren't computer literate. Many are smartphone literate. Most of what I have experienced in my time in Japan so far are clients trying to move from pen/paper to smartphone/cloud.

</comment><comment><USER20> Faxes make somw sense, but audio cassette tapes remaining seems bizarre. The best explanation I can find is a combination of Sony's negotiation of a free license keeping prices low and older fans who find then easier to sing along to than a skipping CD.

<comment> frosted-flakes They were great for audiobooks though[1], because they have a physical place marker that doesn't reset when it's removed from the player (unlike CDs), they have fairly high capacity, it's easy to rewind or fast forward, they're easy to jam into the car radio without looking while driving (unlike CDs), and they can kick around a car without getting scratched (unlike CDs).

Audio quality isn't super, but it's fine for spoken word.

Oh, and unrelated to audiobooks, making self-recordings is dead easy. I have a copy of a cassette from the late 1960s of my 10-year old uncle singing a hymn before he died the following year, and I have the same of my brother from the early 2000s before he died this year. I treasure these recordings, which _probably wouldn 't exist_ if recording wasn't as simple as popping a blank cassette in and hitting the record button—unlike, say, burning a CD. So while I don't use cassettes anymore (they've all been digitized), I still think it's a great format.

\--

1 - Which might be why they continued to be used for audiobooks until the early- or mid-2000s.

</comment></comment><comment><USER21> Japanese elementary and high school students spend years learning how to memorize and hand-write 2,136 official Kanji. That's an expensive skill to learn, and has some advantages ... fax fits well.

</comment><comment><USER22> There is a conscious "capitalist Socialism" afoot in Japan.

Rather than have a large, explicit, government-run social safety net, the society instead embraces inefficiency in the name of keeping unemployment low.

When I was stationed there in the military in the '90s we marveled at seeing people in company livery out directing traffic in the parking lot at the grocery store.

There were inefficient layers of distribution for prodcuts, and cute little trucks running around making deliveries, so that everyone has a job.

Their "bridge to nowhere" infrastructure projects are legendary.

They also have a gazillion little bars where you buy your own bottle and return to the same place to chill out every night with the colleagues.

Cassette tapes and faxes? Sounds par for their sort of quirky, introverted course. I kinda miss it.

<comment><USER23> Even these days, daily and business life in Japan is something that will make an eco- or time-conscious Westerner cry. Routine documents are printed out with many copies instead of being consumed electronically, many forms and documents are handwritten, cash is still used for most purchase transactions, despite NFC readers/phones/cards being ubiquitous, and regular people take a morning trip to the ATM to get daily cash.

<comment><USER24> Eco-conscious westerners would do well if they took some lessons from Japanese daily life - the per capita carbon footprint in Japan is about half that of the US, despite all the extra documents they print at work.

</comment></comment></comment><comment><USER25> Because why fix it if its not broken?</comment>


A hacker's journey: from cook to chef (3) - <AUTHOR>

A small trick
As a developer, I'm hands-on Unix, but not very familiar with the Linux administration work. Yesterday, I was stuck at a major problem to activate the original instance of the Apache web server for the WordPress blog site. I cannot edit the httpd.conf file, although I have stopped all the other instances and made myself have root privilege to write to this file. As usual, I searched online and found people discussing some simple catches, such as caused by mistakes without root privilege, or the hosting site does not allow to edit, etc. I waited for a long time to chat with the hosting tech support and got response that it's going beyond the support area with the VPS customized environment.
Fortunately after hours of frustration, I worked out the simple answer with the root cause that I was  trapped by myself due to my previous setting. I guess this is something those chef administrators do not want to share. But I'd like to share the bits and pieces with the detailed knowledge and tricks any startup company may bump into. There is a simple answer for that. How many people have the answer on the top your head now? I'm curious to see. Please let me know if you want to have the answer, send email to danmark.clara -at - yahoo.com.
Here are the links for previous two days:
https://news.ycombinator.com/item?id=6670362
https://news.ycombinator.com/item?id=6680208 <comment><AUTHOR> For the people who are curious: the answer is here.

Since I granted sudoers privilege for a couple of accounts, I wanted to make sure httpd.conf would not be changed by anybody. If there are multiple users having the root privilege, it's a best practice to have separate HTTPD instances rather than make changes directly on top of the original instance. Otherwise, it's not easy to recover from fail over.

The command to lock: #chattr +i httpd.conf

The command to unlock: #chattr -i httpd.conf</comment>


Ten Signs a Claimed Mathematical Breakthrough is Wrong - <AUTHOR> http://www.scottaaronson.com/blog/?p=304

<comment><USER2> One of the 'fun' aspects of running a math blog is that you get to see Word documents containing "proofs" of unresolved problems or the existence of God or Allah. A true glimpse into madness.

<comment><USER3> Using logic to "prove" God exists isn't totally crazy, just mostly crazy. Gödel himself tried his hand at it [1].

[1]: [http://en.wikipedia.org/wiki/G%C3%B6del's_ontological_proof](http://en.wikipedia.org/wiki/G%C3%B6del's_ontological_proof)

<comment><USER4> Yeah, but Gödel was legitimately crazy towards the end of his life. He ended up dying because he was too paranoid to eat!

<comment><USER5> This is one of the bizarre comforts I feel when I acknowledge that I will never be a math super-genius... the fact that there is a high correlation between math super-genius and "overflowing" to insanity. Godel, Nash...

</comment></comment></comment></comment><comment><USER6> When I finally prove the Riemann Hypothesis it will be presented in HTML5 and Javascript with interactive graphs.

<comment><USER7> Make sure to include a tl;dr, 'cause ain't nobody got time for that.

<comment><USER8> > Make sure to include a tl;dr

You mean the Abstract?

<comment><USER9> Yes but label it "TL;DR" instead of "Abstract"

</comment></comment></comment></comment><comment><USER10> Site is overloaded, so here is the Coral cache:

[http://www.scottaaronson.com.nyud.net/blog/?p=304](http://www.scottaaronson.com.nyud.net/blog/?p=304)

See also the famous Crackpot Index:

[http://math.ucr.edu/home/baez/crackpot.html](http://math.ucr.edu/home/baez/crackpot.html)

</comment><comment><USER11> This is from 2008. Could you add (2008) to the title?

</comment><comment><USER12> I enjoyed the author's Beijing/Chinatown metaphor in point 10.

</comment><comment><USER13> I probably disagree on the Tex one. I know several people with PhDs in engineering and science disciplines who have never used Tex. Several of them know enough math to at least make a reasonable stab at a few of the problems, even if they are unlikely to be successful.

<comment><USER14> So what you're saying is that these non-TeX users are unlikely to successfully solve P=NP? I'd say that sort of upholds his premise.

<comment><USER15> It would be reasonable to say users, in general, are unlikely to prove P = NP. So I'd say it doesn't affect the premise at all. :)

</comment></comment></comment><comment><USER16> Note also signs 11 and 12 in the comments[1], and the later "Eight Signs A Claimed P≠NP Proof Is Wrong"[2]. (OK, so there's a bunch of overlap.)

[1] [http://www.scottaaronson.com/blog/?p=304#comment-8957](http://www.scottaaronson.com/blog/?p=304#comment-8957)

[2] [http://www.scottaaronson.com/blog/?p=458](http://www.scottaaronson.com/blog/?p=458)

</comment><comment><USER17> Most of the points require reading the whole paper first, isn't it?

<comment><USER18> No, not really. One thing that makes an expert an expert is their ability to filter signal from noise. Sometimes they can prematurely bucket ideas into relevant/not-relevant, but usually not.

Have you ever seen a novice programmer trying to find information on a StackOverflow page? The answer might be staring them in the face, but they still scroll past it once, twice, three times, etc. until I point it out.

A novice has no sense of what's important and what's not so they tend to think everything is whereas an expert has a set of heuristics (like the ones in this blog) which make them much faster. They'll look for familiar ideas, themes, likely mistakes, etc. first before going into full-on, read-this-thing-line- by-line mode.

<comment><USER19> >One thing that makes an expert an expert is their ability to filter signal from noise.

Certainly, but will you be able to spot the breakthrough insight if all your doing is filtering it against your notion of signal vs noise. Breakthroughs tend to come at a problem from a totally different angle & generally it takes a bit of time to understand why its brilliant rather than "noise".

<comment><USER18> Like I said, "Sometimes they can prematurely bucket ideas into relevant/not- relevant, but usually not." I wrote that hoping to preempt your exact response. Alas! ;)

Even if I grant your premise (which I don't), just because a breakthrough is likely to be written in crazy-talk doesn't mean something written in crazy- talk is likely to be a breakthrough. At that point it becomes a question of opportunity cost, which is exactly where heuristics come in.

In fact, what you said could be true and it could still be true that

      P(breakthrough | does not seem crazy) > P(breakthrough | seems crazy)

So, if I were on the hunt for breakthroughs I'd still be better off ignoring the crazy-seeming things.

Regarding your premise, can you name, say, ten mathematical breakthroughs since the Enlightenment that came about the way you described?

<comment><USER19> Pretty sure we're talking past each other, but I'll give it a shot anyway.

>Even if I grant your premise (which I don't), just because a breakthrough is likely to be written in crazy-talk

Who said anything about "crazy talk"?. My point is simply that your signal/noise filter is by necessity driven by information derived from the status quo. The status quo part being a really big problem if you're hunting for something _new_.

</comment></comment></comment></comment></comment><comment><USER20> I wonder if there is a context in which preparing a document in TeX would be a strong indicator that you _don 't_ know what you're talking about?

<comment><USER21> Maybe history. Or another of the humanities. :) But TeX takes time to learn to use properly and only people that expect to use it regularly go through the trouble I'd expect.

</comment></comment><comment><USER22> Are mathematicians going to be using TeX in a hundred years? Two hundred? Five hundred? Two thousand?

Math is timeless. TeX may be, but it's too soon to say. It's a recent invention. It's only been around for 35 years.

<comment><USER23> It wouldn't surprise me if they still use it in a hundred years. It just fits thinking in math. By then TeX will be on version number 3.1415926535897932384626433832795028841971693993751 :-).

<comment><USER24> IIRC, it's supposed to be set exactly equal to pi upon Knuth's death.</comment></comment></comment>


Ask HN: Use Google Forms and concerned about privacy? - <AUTHOR> There's been a movement away from Google Analytics due to privacy concerns, but are people moving from Google Forms due to similar concerns? <comment><USER2> Our company moved away for this reason. Wondering if other have thoughts one way or the other?</comment>


The Great American Bubble Machine - <AUTHOR> http://www.rollingstone.com/politics/story/29127316/the_great_american_bubble_machine

<comment><USER2> Submitted before as print version, defeating the duplicate detector:

<http://news.ycombinator.com/item?id=914827>

And submitted even earlier by link from blog:

<http://news.ycombinator.com/item?id=673610>

Hacker News thread about another columnist's take down of this piece:

<http://news.ycombinator.com/item?id=698421>

</comment><comment><AUTHOR> Just unearthed this article from my bookmarks. Very interesting read,</comment>


Bitstream Vera Sans Mono and Panic Sans: Excellent fonts for your Terminal - <AUTHOR> http://duncandavidson.com/archives/654 <comment><USER2> The DejaVu family of fonts are supposed to be a 'better' version of the Bitstream Vera fonts -- they "provide a wider range of characters while maintaining the original look and feel". Seems to be updated more often as well.

<http://dejavu.sourceforge.net/wiki/index.php/Main_Page>

</comment><comment><USER3> Looking at that on the old CRT I'm using until my laptop comes back from IBM, the anti-aliased screenshots look _very_ blurry. I could take or leave subpixel hinting on my LCD, but I actively dislike anti-aliasing on a CRT.

</comment><comment><USER4> I second Rob's recommendation of DejaVu. And for those using X11 bitmap fonts, Terminus.</comment>


Show HN: easily export balsamiq to HTML/CSS - <AUTHOR> http://aceto.armhold.com/

<comment><AUTHOR> I created this largely for my own use, but I'm considering turning it a product. It's still very beta and has limited functionality- only the basic widgets are supported at the moment, but I'm working on adding more.

Feedback welcome, thanks.

Clickable link: <http://aceto.armhold.com>.</comment>


What happened with iOS7? - <AUTHOR> https://medium.com/i-m-h-o/275a56688510

<comment><USER2> My knee jerk reaction is to agree with this post— it's design by committee, shed painting, whatever you want to call it.

"This just makes me think that each individual app team submitter their own design for an icon based on some loose guidelines and they all got thrown together into a bucket"

Probably resonates with me the hardest— personally, I think the apps look great, but the icons really just look "off" to me. To each their own, I suppose.

</comment><comment><USER3> Right on spot.

The icons are middleway between photorealist and pictograms, and end looking neither, just childish and unpolished.

The lack of affordances (no obvious buttons) will hurt usability a lot, as will the pale white backgrounds on everything.

It looks like UI designed by graphical ("paper") designers. Awful.

</comment><comment><USER4> The author seems to be incapable of making the distinction between design by committee and data-driven decisions making.

</comment><comment><USER5> Good insight from another skilled designer.</comment>


Wi-Fi helped ID teens who drew racist, anti-Semitic graffiti - <AUTHOR> https://apnews.com/b1112cb76ba44954ad0c8ede7f6e5f61 <comment><AUTHOR> They left Wi-Fi enabled on their cell phones, which automatically connected to the school network when within range. IT staff then associated the log-ins with individual students - allowing them to be identified and caught. Original article (via Washington Post): "A black principal, four white teens and the 'senior prank' that became a hate crime"

URL: [https://www.washingtonpost.com/graphics/2019/local/teen- graf...](https://www.washingtonpost.com/graphics/2019/local/teen-graffiti- hate-crime-divides-maryland-high-school/?noredirect=on&utm_term=.78f736e73113)

</comment><comment><USER2> Makes sense. The home automation platform I use (Home Assistant) can use information from wifi APs for presence detection. I have mine configured with my Unifi controller.</comment>