Ask HN: How to Learn OOP - <AUTHOR> I want to learn Object-oriented programming. When I was in college I had learnt few concepts, but now I don't remember most of the things. Also, presently my work doesn't demand to learn object-oriented concepts or OOP.<p>Any suggestions on:
 how/where to start?
 which book to refer? <comment><USER2> Here's the OOP model:

A program can be modelled as a set of communicating black-box objects, with their own state.

The idea is to separate concerns, abstracting away implementation behind well- defined interfaces, which can in turn be implemented by other objects to cleanly replace parts of the application.

The rest of OO is pretty much just understanding Design Patterns (a set of names for common interactions between objects, and methods for setting these interactions up), grokking inheritance, and the difference between inheritance and composition, and grasping how to design a good OO system (how thickly to layer your classes, how much abstraction and what sorts, etc.)

The best languages for learning OO are Ruby and Smalltalk.

<comment><USER3> This is actually a really good summary. I also agree on learning Smalltalk to learn OOP since it has a really easy syntax, you can deep dive into implementation details if you want to easily and it enforces some best practices like setter and getter instead of giving you the ability to just declare members public. I learned Java in University and switched soon to Objective-C and it took me a while to see reasons behind getters and setters especially since I worked only in small teams on short living projects at that time. Also s Smalltalk is purely OOP so you won't get distracted by numbers and bools behaving differently. And finally it gets you to think in data structures thanks to the collection methods.

<comment><USER2> Yup.

Getters and setters only really work in programming languages with good metaprogramming support. In Java and Objective-C, they're ungainly and awkward. In Smalltalk and Ruby, they just kind of happen.

</comment></comment></comment><comment><USER4> I didn't learn OOP very well in school, but once I wrote enough code I started to see that it was becoming a massive cluster fuck and I couldn't remember what I wrote half the time. So I broke it down into functions, but then I was passing huge amounts of arguments into some of the functions. Then I realized I had a lot of functions where the 90% of same thing was happening so I passed a keyword into the function to make it do something slightly differently in an if else. Then I realized I could create a class, store the variables in the class and call the class methods without passing the arguments, which was much cleaner. Then I realized that I could create a class that inherits and overrides the 10% difference of the other class, which was again much cleaner. Those are the basic two problems that OOP solved for me and I've taken it many steps further a couple of times, but it can definitely be abused. If you get to that point, you should start looking at design patterns to learn how OOP is used correctly. Lynda.com has some good videos on OOP design patterns you can use their free trial for. They're by the author of one of the highest rated books on design patterns and pretty short.

<comment><USER5> This is a great explanation of how to really start seeing objects. Like you, I just look for data that travels together. Then I find code that only ever gets used on that data. I pull it out and figure out a name for it. This observational approach avoids a ton of architecture astronautics, where people dream up giant object hierarchies and stick with them no matter what the code is telling them.

The main compliment I'd suggest to this approach is Eric Evans' book Domain- Driven Design: [https://www.amazon.com/Domain-Driven-Design-Tackling- Complex...](https://www.amazon.com/Domain-Driven-Design-Tackling-Complexity- Software/dp/0321125215)

In a bottom-up approach, you can often break things down in a variety of ways. But the most stable/useful ways are often the ones that align with the conceptual model of the domain. If I notice that certain data and behavior goes together with incoming money, I might call that an InboundMoneyWorkingUnit. But if I talk to people who've spent years working in the domain, I'll realize the object should be called Payment, and their description of what a Payment does will inform my hunt for other objects and methods.

</comment></comment><comment><USER6> You don't mention a language; I suggest you pick one then look for a good free text. For example, choose Python then go for Mark Pilgrim's Dive into Python. I'm sure others could make recommendations for C#, Java, Ruby or JavaScript. A good view of OOP in a relatively language neutral manner if the GoF patterns book: Johnson, Gamma, Helm, Vlissides Design Patterns. It summarised state of the art OOP in the mid 90s and was a big influence on Java. Things have moved on since then, and IMHO, other techniques for structuring your code are just as important as OOP. I'd highlight generic programming, asynchrony and coroutines. There's a lot to discover and enjoy - good luck!

</comment><comment><USER7> Could you tell us what kind of experience you have? There are many ways of learning OOP and they vary greatly in how approachable they are depending on your previous experience.

If you come from a procedural programming in a low-level language like C, for example, there is an excellent book "Object Oriented C", which teaches you OO concepts by implementing them in C.

If you do GUI programming in a procedural language (again, mostly C) you could download Pharo and go through "Pharo by Example".

These are just examples - there are much more languages/books combos out there.

</comment><comment><USER8> Practical Object-Oriented Design in Ruby (POODR) by Sandi Metz opened doors for me - [http://www.poodr.com/](http://www.poodr.com/)

<comment><USER9> If you only get one book, get this one. It is more about 'why' than about 'how' and shows what tradeofs are involved in one or another design, what problems you can run into with different solutions. Also, there is a new book by Sandi coming out: [http://www.sandimetz.com/99bottles/](http://www.sandimetz.com/99bottles/) Her talks are highly recommended too.

<comment><USER10> Sandi Metz is great.

This talk is such an amazing example of clear thinking:

[https://www.youtube.com/watch?v=8bZh5LMaSmE](https://www.youtube.com/watch?v=8bZh5LMaSmE)

<comment><USER11> I actually watched that talk twice. The technique of introducing a seam set off light bulbs in my head that didn't go off the first time I watched it.

</comment></comment></comment></comment><comment><USER12> Look for Uncle Bob's talks on SOLID design.

[http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod](http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod)

</comment><comment><USER13> You can always check out Object Oriented Analysis and Design by Head First ([http://www.headfirstlabs.com/books/hfooad/](http://www.headfirstlabs.com/books/hfooad/)). Their books are more about learning the concepts than the theory so they employ a lot of games and learning activities. They are a lot more interesting than a textbook on OO, even if the format seems a little juvenile at time (I mean they have word-searches and crosswords with key terms).

<comment><USER14> That's a terrible book (and series) to learn from, the level of visual clutter on each page distracts from the actual task of learning anything. I had a copy of "Head First Design Patterns" and after only a few pages I thought my eyes were going to fall out.

I found Bruce Eckel's "Thinking In Java" useful back in day to learn OO programming and concepts. Much of what you learn is transferable to other languages.

</comment></comment><comment><USER15> As soon as you know a little bit, I would start as soon as possible to learn by copying existing code. Learn by using different frameworks, which show you how to do things.

The classic OOP examples ("This class is a car, this Mercedes class inherits from the car class, it also has a method to move, and this Mercedes object is an instance of a Mercedes") are pretty easy to grasp for a person of normal intelligence. The frustration is to then apply this when you are stuck thinking in a procedural or functional model. However once you have learned for example how to handle a database connection, you start to apply that on your own and when a similar problem comes along, you start to notice patterns: "This is really similar to the db object, I know I did right, because I just copied the concept, so I will do this in a similar way." After that learning the design patterns is quite easy, too. But at first knowing what - in this example a - singleton is does not get you anywhere, because generally you do not know how to start.

<comment><USER16> If you think inheritance is central to OOP, then you are mistaken. The most important aspect of OOP is dynamic dispatch (e.g. objects accessed through Java interfaces), and that's closely related to the idea of messaging. Have a read of what other people are writing here.

<comment><USER17> A language without classes that feature inheritance (at least single) can be used for OOP, but cannot be said to have support for it. It may not be central, but it is important.

Java Interfaces are in fact an example of inheritance. Moreover, they are an example of "non OOP inheritance": it's an inheritance of type checking that actually doesn't bring any attributes to an object. It exists in support of compiler diagnostics and compile-time optimization of dispatch.

In some languages (even ones that _do_ support inheritance very well) objects of different types can be substitutable over a common set of functions without any explicit inheritance of interfaces or anything.

We can make a Dog and Cat class in complete isolation from each other, with no common dependency, and give them a speak() method. Then pass an instance of either class to some function which just calls arg.speak(). This produces "bark!" if arg is a Dog, or "meow!" if it is a Cat.

A Java-style interface just makes this dispatch easier to optimize via a static type system, and to implement checks. The function cannot call arg.speak() unless arg is a reference to an ICanSpeak type. That is assured externally because code which passes anything else to that function will not compile. Thus Dog and Cat must inherit this ICanSpeak, which causes their instances to be eligible as arguments to that function. When they implement speak(), their implementation is type-checked against ICanSpeak's speak(): to have the right number of properly typed arguments.

</comment></comment></comment><comment><USER18> What I always recommend and didn't see in the comments at a glance:

Think of something you want to build, then build it. Learn the language as you go along. Pick whichever language seems like a good choice for your particular project (based on popular opinion). Learning OOP and how to build applications in one language transfers to other languages without much effort.

You also learn how to break down projects to simple tasks with this. If you want to build Facebook, first you need to have a simple HTML file. Then it needs to be served by Apache/Nginx. Then it needs JavaScript for UI behavior, then it needs a back-end framework for routing requests, then it needs a database for data persistence. Most projects can be broken down like this to make learning not the equivalent of drinking from a fire hose.

</comment><comment><USER19> Take a behavior. Pull the nouns (classes) and what they are told to do (methods). Finally, I don't need to know how you do what you do, that is your problem, not mine.

Very oversimplified, but that is what it is. See the pieces that you are playing with, and they can receive messages asking them to do something, this will be method calling. This describes objects and message passing.

Sometimes different parts need to respond to the same message, think on a car: push pedal, it means to release gas into the engine to the gas pedal, but it means squeeze the wheels to the brake pedal. Welcome to polymorphism.

And when I press a pedal I don;t need to know how it accomplish what I am asking to do. In a gas engine means releasing more gas, but in a tesla it means reducing resistance between the batteries and the motors. That would be encapsulation.

And by the way, think also in the instrument panel, they don't go asking then engine "what are you doing now", instead they just display whatever information the engine is volunteering. The engine makes a little wire spin, and the speedometer shows the speed. That would be the bases for the observable pattern. There are others, but this one helps abstract the engine it self from the car body. In other words, the UI should be nothing but one example on how a user can interact with the engine, for this you need to build your engine without thinking in ui. This would be how to structure an oo app.

</comment><comment><USER20> If you're going to learn OOP, you need a larger project to go along with it so that you can understand ASAP that it only makes you write more code, over- complicate problems, and makes your applications hard to understand, and debug. It's going to save you from spiralling into the typical "OOP is fine, i'm just not doing it right, i should've designed that differently" loop that most college graduates go through during their first professional years.

<comment><USER21> (Over)using inheritance hierarchies can have negative effects, but if you think that in general OOP results in more code then you need to go and develop some serious C. You spend a lot of time manually accounting for multiple instances of things, in a way that you get for free in an OOP language like C++.

<comment><USER20> Right now i do iOS development mostly in pure C, outside of the unavoidable Objective-C. So i do have the right experience.

The issue with OOP is that as soon as you introduce inheritance, and things like virtual functions, you're introducing variable program behaviour based on context. And most of the time you end up having to special-case things up in the hierarchy because nothing ever goes as you envisioned it.

Structuring your code so that you have simple data and code that operates on the data means that what's happening in the code at a particular time is always explicit, and any deviations based on objects the code operates on are right there in front of you, not hidden in 4 virtual function implementations in different files.

It's all special-case code you have to write anyway, but if written in OOP fashion, the complexity of it is most of the time unclear, and it's hard to judge what code will actually be doing just by glancing at it.

</comment></comment></comment><comment><USER22> Come up with an interesting project to work on in your favorite language. Keep adding more features until some functions have a lot of parameters. Then Google to see how you can group the variables together into objects so you don't have to pass so many variables around. Then just keep doing that in your new programs. After a few months or years you will get used to organizing code that way.

One thing you should not bother doing is to order giant piles of paper just so that you can say you read X famous author on OOP or Design Patterns or whatever. That is a waste of time and money now that we have Google and blogs/online articles etc. And anyway you are going to learn by doing it for X years or months, not by reading a book.

Also, be careful because people will to make it seem much more complicated than it is. The more complex or subtle aspects you are probably only going to remember or understand if you learn them through practice anyway.

</comment><comment><USER23> [https://learnpythonthehardway.org/](https://learnpythonthehardway.org/)

</comment><comment><USER24> I'd highly recommend Dr. David West's "Object Thinking" book. It does an excellent job of (1) describing how most programmers who use an OO language fall into writing "small Cobol" programs and (2) how to avoid this.

<comment><USER25> Link for the lazy: [https://www.amazon.com/Object-Thinking-Developer- Reference-D...](https://www.amazon.com/Object-Thinking-Developer-Reference- David/dp/0735619654)

</comment></comment><comment><USER26> I remember stumbling across this book in my university library back in 2000, that really helped me understand the principles when all the other books were talking far more about syntax and functionality without really explaining the "why" part.

[https://www.amazon.com/Introduction-Object-Oriented- Programm...](https://www.amazon.com/Introduction-Object-Oriented-Programming- Timothy-Budd/dp/0201824191)

</comment><comment><USER27> Bertrand Meyer Object Oriented Software Construction is excellent. It details the concepts of OOP and remains very independent of the programming language.

<comment><USER28> How would you develop the language specific skills?

<comment><USER11> The hope behind learning paradigms, like OO or functional, is that you can transfer what you learned in one language to another. So if you're just looking to level up your OO, your best bet is to pick up the most interesting OO book you can find and just follow along. I like Practical Object-Oriented Design in Ruby by Sandi Metz.

It's going to be difficult to find excellent OO resources for every conceivable language and stack.

</comment></comment></comment><comment><USER29> I've learned a lot from building a system in Smalltalk and these books:

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

[https://www.amazon.com/Smalltalk-Best-Practice-Patterns- Kent...](https://www.amazon.com/Smalltalk-Best-Practice-Patterns- Kent/dp/013476904X)

</comment><comment><USER30> This was the book that really drilled into my head how to design in OO. It's VEEEEERRRRYYY easy to understand and will give the good heuristics to use in OO design. [https://www.amazon.ca/dp/B00AA36RZY/ref=dp-kindle- redirect?_...](https://www.amazon.ca/dp/B00AA36RZY/ref=dp-kindle- redirect?_encoding=UTF8&btkr=1)

<comment><USER5> Might I suggest you include the title and author in your comment?

I also suggest you drop everything in Amazon links that isn't necessary, which is most of it. I rarely click on a link without looking to see where it goes, and Amazon links are particularly suspicious because the affiliate program gives people a financial motive to get link clicks.

</comment></comment><comment><USER31> \- Read SICP

\- Understand how all programs can be written as lists of lists of lists... and so on

\- Pick up the language that you work in. Identify what construct of that language allows you to approximate scheme/lisp lists. For me this is objects in java & php, and functions in javascript

\- Code your program as a list of lists of lists... in the language of your choice.

\- Congrats, you got OOP

<comment><USER32> Doesn't SICP stress closures more than lists? (And this list-heavy approach only really works in a dynamically typed language.)

<comment><USER31> I have used it just fine in Java. "dependency injection" looks a lot like lists-of-lists...

And SICP talks about a lot more than any particular constructs. Its the sort of book you can come back to, and take what you need to go further.

<comment><USER32> I've recently actually done the latter, and gone back to SICP. Alas, it shows its age badly: it's too untyped for my tastes these days.

Yes, you can emulate dynamic typing in statically typed languages---but why would you want to if the static type system is expressive enough? (I can see how in Java dynamic typing might be the smaller hassle.)

</comment></comment></comment></comment><comment><USER33> What kind are you after? There's sort of two: 1\. The Philosophical OOP, brought to us by Alan Kay's mind, which probably has to be experienced through a language with sufficient OO-ness. It's always the ship on the horizon.

2\. Working OOP, which you can learn in an afternoon from a handful of blog posts and/or library examples.

</comment><comment><USER17> _Object Oriented Analysis and Design_ , by Grady Booch.

That's the fellow who invented UML, and wrote the foreword to the GoF Design Patterns Book. [https://en.wikipedia.org/wiki/Grady_Booch](https://en.wikipedia.org/wiki/Grady_Booch)

</comment><comment><USER34> If you're looking for Java style OOP specifically, this would be a good place to start: [https://docs.oracle.com/javase/tutorial/java/](https://docs.oracle.com/javase/tutorial/java/)

</comment><comment><USER35> The best way is to refresh your 'memory' with a good course[1].

[1] "CS 108 Object Oriented System Design":

[https://web.stanford.edu/class/cs108/](https://web.stanford.edu/class/cs108/)

</comment><comment><USER36> Check out Robert Nystrom's _Game Programming Patterns_ :

[http://gameprogrammingpatterns.com/contents.html](http://gameprogrammingpatterns.com/contents.html)

</comment><comment><USER37> Just stay away from Elixir language. The community will do anything to keep you away from OOP concepts.

</comment><comment><USER38> Implement a OOP programming language will really help you understand Inheritance, Polymorphism, etc

</comment><comment><USER39> Would like to know if there are some good language-agnostic resources?

</comment><comment><USER32> May I ask why you want to learn OOP? You don't need it at work right now, and you'll probably never need it. Not even in interviews.

<comment><USER5> To be a better programmer?

I don't think I'll ever work in a purely functional language, but I still took an online course to learn something about functional approaches. It was great; it has definitely changed how I program for the better.

<comment><USER40> Yeah, I was going to say, OO is brutally overused and seems to be fading quite quickly in the new world of highly scalable systems, e.g. Spark, CouchDB and so on. Objects still have a place in widget sets, datetimes, etc.

Overall though they were often used by default where there were better ways and just as often abused to allow a ton of shared state (globals in disguise), which almost always makes code harder to follow.

<comment><USER5> That's definitely true. I think classic OO works a lot better in a context where objects are relatively long-lived.

The problem is that the way most modern systems are scaled, they are very short lived. When the purpose of a code base is to turn HTTP requests into SQL queries and SQL results into HTML responses, then the objects end up being a thin layer between function calls.

That's not a necessary outcome; in a parallel universe something like Prevayler would have given us long-lived object graphs in a lot of the places where we now use OO languages on top of external databases. But that's sure not the world we live in.

Another factor that I think made things worse was the massive increase in the number of programmers during the Internet boom. I love working with code from master OO developers, especialy those of the test-driven, domain-driven sort. But OO approaches allow so many degrees of freedom that it's easy for relatively junior developers to make giant messes. Messes that I don't even think of really as OO, just snarls that happen to be in OO languages. Regardless, I think the September That Never Ended kept the average OO code base in a state much worse than the best ones.

Anyhow, I'm excited to see the state of practice moving forward, inch by inch.

</comment></comment></comment></comment><comment><USER41> Search for the history of the discipline, find the crucial names and study the papers + listen to talks, then think all by by yourself and decide whether / to which degree things are applicable to the contexts of your interest.

That would be the best way.

Names would be: Dijkstra, Parnas, Kay, Booch, and many others. Once you assemble a nice collection of notes, links and questions, you'll be allright and will never fall for "OO is A, B and C!" oversimplified nonsense many books attempt to sell.

Do not believe any comment in this thread either, rather take things with a (huge) grain of salt -- remember, we're dealing with a Holy Grail here, and everyone interested is quite opinionated :)</comment>


Help my startup pick a new logo - <AUTHOR> http://www.surveymonkey.com/s/LPRWKT5

<comment><USER2> Hey guys

As an employee at Top Hat Monocle, I hope I can answer some of the questions that have been brought up:

We started out as an iphone gaming company, but did a 180 shift very early on and are now in the process of relaunching the company as an education software company.

One of the goals with the logo redesign was to retain the quirkiness of the name (it's been scoring very well among our current users), but we want to shift the focus more towards the icon, for a couple of reasons:

\- we want to be able to use the logo on stationary, tshirts, the product, application icons

\- we're targeting the academic market

\- it gives us a lot more flexibility with how we name our products in the future

Thanks for all the feedback! It's all incredibly helpful

<comment><USER3> _it's been scoring very well among our current users_

Sampling bias at its best :-)

</comment></comment><comment><USER4> It depends on what the rest of the site design is as well - it's hard to judge the logo in isolation. It's the same concept as pairing wines with cheese.

For example, A is the most neutral and could go well with a modern layout, G is minimal while still having an old school flourish and can match up with a similar design if the designer had the chops to pull it off, and the rest are bit crowded and overdone, which means they probably wouldn't sit well in a cluttered interface but could look good if they were showcased on a simple site.

</comment><comment><USER5> Ah, the lazyweb at it's best.

Have you thought about a rename? That's a hell of a mouthful for a company that's not the result of some kind of international M&A event.

</comment><comment><USER6> It would help to know what your business name is, and what your business does. Otherwise there is nothing to base a decision on, other than "it's pretty."

<comment><USER7> I'm guessing this is the startup: <http://tophatmonocle.com/>

"Top Hat Monocle develops mobile applications for the Apple iPhone with focus on games and interactive applications."

</comment></comment><comment><USER8> Being honest, I'm not particularly enamoured by any of those in the main link or singularly any in the second.

I'd probably go for the hat in this: <http://99designs.com/designs/3702194-original> Combined with the monocle and text placement in this: <http://99designs.com/designs/3682895-original>

Although not with those particular fonts. Something deco and 20's would be nice. Cicle or even Futura would work at the right weights.

</comment><comment><USER9> Man, only if <http://www.modernballots.com> (from this thread earlier today -> <http://news.ycombinator.com/item?id=1115385>) supported images (or better yet, some kind of web markup, i.e. textile) as "candidates" this would make for a great use of the site, seeing as I don't love or hate any of the logos and would find giving each a star rating much more appropriate.

bradbeattie, i hope you're reading this thread :)

<comment><USER10> Styling needs a bit of work, but textile is up and running. See <http://modernballots.com/photo/vote> as an example. Enjoy!

</comment></comment><comment><USER11> Design isn't merely taste. That you can't immediately rule out half of them says you don't really know what you want the logo to convey. Some of these logos say "playfully campy," some "serious" and some "5 year old with clipart." We can help pick which achieves any particular goal, but you better start by being sure about the goal.

<comment><AUTHOR> Ah, good point. If you look at the brief at 99designs it does a better job of explaining what we're going for. <http://99designs.com/contests/36804>

But I'd say "playfully campy" is a pretty good summary :)

</comment></comment><comment><USER12> My criteria for this is always can I print it on a t-shirt in one color (i.e. black ink on white t-shirt in this case). If it works on t-shirts it works on business cards, stickers, etc. Keeps it simple and keeps promo items cost down in the early days.

So in short B (that's how I voted).

</comment><comment><USER3> The grayscale one will give you fits when/if you need to use cheap printing in black and white.

Similarly, the ones with a lot of fiddly detail will be harder to render well on paper.

</comment><comment><USER13> I would suggest the ones that don't look like sperms :)

</comment><comment><USER14> Given no other information I think I prefer (c).

<comment><USER15> (f) for me but it depends on how you intend to fit it in the design, (f) is a bit tall.

Also I'd call it "Top Hat & Monocle" as I think this flows better, turn the cord into an ampersand.

</comment></comment><comment><AUTHOR> Also: <http://99designs.com/contests/36804>

<comment><USER16> I'd go with this one instead: [http://99designs.com/logo-design/contests/logo- shiny-tech-st...](http://99designs.com/logo-design/contests/logo-shiny-tech- startup-36804/entries/83) Just modify the text so it's not 3D, and the other elements so they translate well to a black & white printing without the need for shading.

</comment></comment><comment><USER17> i dont know what it is, so i don't know. is it a pharmacy or a search engine?</comment>


Hearth Surgery (2009) - <AUTHOR> https://www.newyorker.com/magazine/2009/12/21/hearth-surgery <comment><USER2> I was worried at the beginning they were just doing a gloss but the article is pretty accurate. I have been around these folks for decades.

A few memories, first a typical geeky well meaning do gooder buddy build paraboloid soar collectors and took them down to a village in central America where the locals were extremely pleased with them when he returned a year later he did not see them right away and the local were evasive ... he eventually spotted them doing duty as the benches in the outhouse. The materials he brought were perfect for that.

The next is after they went to Africa, they came to see the people of Central America they had been helping for all those years as middle class in comparison, not really poor because they had never seen really poor.

And the final thought is the author through no fault of their own wrote the piece too early to include Ken Goyer who worked incessantly making the stoves with less and less till they had a six brick stove one could make for pennies.

He has passed on now, but a childhood friend of his picked up his 'Aid Africa' foundation.

[0] [http://www.aidafrica.net/](http://www.aidafrica.net/)</comment>


Hypothes.is: An Open Annotations Platform - <AUTHOR> https://web.hypothes.is/ <comment><USER2> I tried them a while ago. Really liked it but put it aside till they implement [https://www.w3.org/annotation/](https://www.w3.org/annotation/) as promised. Just checked [https://h.readthedocs.io/en/latest/api/](https://h.readthedocs.io/en/latest/api/) and the v2 API in development has nothing to do with the W3C standard.

UPD: there is not a single issue open on the main repo wrt W3C standard implementation: [https://github.com/hypothesis/h/issues?q=is%3Aissue+is%3Aope...](https://github.com/hypothesis/h/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated- desc+w3c). The post I took as a promise: [https://web.hypothes.is/blog/annotation-is-now-a-web- standar...](https://web.hypothes.is/blog/annotation-is-now-a-web-standard/)

<comment><USER3> If your use of a piece of software is contingent on something like that, it sounds like you didn't really have a need for it in the first place

<comment><USER4> Rather, OP is probably already using one and don't see the point of migrating to yet another closed system.

<comment><USER5> Hypothesis has an open API - [https://h.readthedocs.io/en/latest/api/](https://h.readthedocs.io/en/latest/api/)

<comment><USER4> It's not the matter.

If you use a saas, unless it's open source and you can self host, you are at the mercy of it.

If the service is good enough and the team behind it seems in good faith, it can give you confidence for the switch.

But promising to adopt a standard then not doing it doesn't inspire confidence.

The system being closed source (no open API can change that), they need to build trust with some users. Particularly the tech saavy ones that have been burnt in the past and hold data that is precious to them.

<comment><USER6> Both the frontend and server seem to be open source.

[https://github.com/hypothesis/h](https://github.com/hypothesis/h)

[https://github.com/hypothesis/client](https://github.com/hypothesis/client)

<comment><USER4> Then I stand corrected.

If it's open source, and it's just a matter of following a standard, I don't think it's a reason for not giving it a try.

<comment><USER7> I tried the docker some time back and it was broken. Has anyone ever managed to set it up or are there any tutorials or blogs of any one outside the org using their own setup?

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> My PhD work would not have been possible without Hypothes.is. My group uses it for a variety of information extraction and curation tasks, and I'm fairly certain that one of my colleagues has the highest number of human made annotations in the system (though in private groups).

Hypothes.is is great for prototyping curation workflows to explore what is possible before spending time implementing yet another tool. It also hits the sweet spot for having a UI that is just accessible enough for non-technical users that can display annotations made by bots. We have been using hypothes.is as the backend to crawl [0] research resource identifiers from the scientific literature for 4 years, and it has been solid the whole time.

I see some questions/concerns about the w3c compliance of the API. I'm pretty sure that there is just a switch the needs to be flipped, and that it has been implemented. Yep, it has [1]. Also as others have suggested it is fairly straight forward to set up your own annotation store, though it is not simple to replicate the Hypothes.is setup.

I hope that the pivot to education continues to go well so that it can fund the infrastructure, because Hypothes.is provides a very valuable (if hard to capture the value of) service.

0\. [https://github.com/SciCrunch/scibot](https://github.com/SciCrunch/scibot) 1\. [https://github.com/hypothesis/h/blob/master/h/presenters/ann...](https://github.com/hypothesis/h/blob/master/h/presenters/annotation_jsonld.py)

<comment><USER7> Did you guys use your own setup?

<comment><USER8> No, we retain a local copy of the annotations, but that's about it. Last time I checked the hypothes.is client didn't have the ability to use an arbitrary backend. We did at one point create a fork of the web extension that could point to an arbitrary backend but the maintenance overhead ended up not being worth it.

</comment></comment></comment><comment><USER9> Quick background. Hypothes.is was founded by Dan Whaley:

[https://www.linkedin.com/in/danwhaley](https://www.linkedin.com/in/danwhaley)

Dan built and sold an Internet travel app in the 90s, and then became involved in climate work. He's been committed to it for many years.

Hypothes.is was created in order to address the problem of disinformation on the Internet, especially related to climate change; e.g. the Wall Street Journal publishes an Op-Ed from Charles Koch denying that human activity is contributing to global warming, and an annotation channel run by climate scientists can dissect it point by point.

I respect and admire that vision, and I think it's trying to get to one of the root causes of climate change denialism.

(Obviously, Hypothes.is has many other great uses!)

<comment><USER10> Wow that's interesting. This makes total sense as to why you can't change URLs then (which I just posted my use case needs), I suppose to maintain provenance on the original documentation. I hadn't considered that.

</comment></comment><comment><USER11> The idea of collaborative annotation has been around since the beginning of the web. I tried to launch an annotation startup myself back in 2000, and there were several funded competitors back then. It never catches on. It would be interesting to analyze why people just don't use these systems when given the opportunity. Is this a solution in search of a problem?

<comment><USER12> I think generalized annotation has the following problem:

Draw a graph of all web pages ordered by how many times they are visited. You get a power law distribution. On the left are things like CNN's front page, on the right things like a text file containing a cheesecake recipe someone posted in 1995 that is technically still online but nobody has visited in years.

On the left side are pages that are visited too often, and public annotations inevitably descend into madness and chaos, even worse than comment sections which have the courtesy to at least be isolated on the page to a certain area. On these pages, trying to use the annotation software is worse than not using it at all.

On the right are the pages that nobody visits, so when you visit them, there is no chance of any annotations being on the page, nor any chance that if you leave any annotations anybody will ever see them, or care if they do (i.e., just giving people a directory of "rarely annotated pages" doesn't solve the problem, the problem is that nobody cares about these pages anyhow). Annotation software doesn't harm these pages technically, but the user experience is at best that the user will just forget about their annotation software, and at worst, they'll feel alone on the page, a concept not previously in their mental model and one that is not contributing to a positive assessment of the annotation software.

In between is the sweet spot, where participation is adequate that the annotation software brings some sort of value, but it isn't just overwhelming chaos.

I submit to you that viewed through the power law lens, that sweet spot is actually fairly narrow. Moreover, if you slice through a single user's browser history looking for when they hit pages in that sweet spot, it'll still be the minority of pages that they viewed, so basically by statistical necessity, the pages where the software added value must be a tiny minority of the pages you visit. The majority of pages they visit, the annotation software experience ranges from extremely net negative to at best neutral, and it's hard for the positive experiences to make up for that.

Moreover, this sweet spot is _moving_. As more of the general public tries out your software, the sweet spot moves to the right, which also has the effect when viewed from a single user's point of view of making the pages where it is useful become more rare. When you're just starting out and you've got a 100 users, the useful pages are things like "the front page of CNN" and "the hot wikipedia article about $CURRENT_EVENT", but as your user count increases it moves down to specific articles on CNN and only the linked content from the $CURRENT_EVENT, then only to archival content on CNN and random Wikipedia pages, and just in general into stuff that becomes increasingly difficult for it to be any significant percentage of the pages you visit.

I think this is why A: They can't get popular B: the ones that I know about that have been around for a while and are therefore presumably successful enough for someone to consider them worthwhile can only stay so provided they don't get more popular and C: there's no chance you can make money in this space because you get an _anti-_ network effect... the more users you get, the _less_ valuable the service becomes to every existing user!

I think this is also why it seems like such an appealing idea. You create a prototype, get a couple of friends on it, it seems like fun and to be useful. You annotate some popular pages, you have some similar interests and you annotate, I dunno, the latest game console announcement or something, and it seems like fun. The problem is, rather than this being the worst the experience will ever be as it just gets better and better as more people come online, this is the _best_ it will ever be.

Also, I can tell you from the first couple of times around that if this did become popular, the content producers of the Internet would fight you tooth and nail. They did the first couple of times when the math sort of worked to at least get to the point that these things could get in the news. With the web so much larger and power-law-y and the anti-network effect correspondingly so much more powerful, now this sort of thing can't even be successful enough to so much as get noticed by anyone before it has already collapsed.

(I specifically said "generalized" annotation at the top, because specialized use cases can get around some of these issues. But it's going to be hard to make any money on the size of user base you can support, because while you can mitigate the anti-network effect, it's always going to be looming over you if you try to get large enough.)

<comment><USER13> Annotation systems don't have to be public. The default should be private with an option to make parts public as necessary. Comments in some sense are annotations that are anchored at the wrong place and with the wrong visibility (public instead of private).

The main value of annotations is as a personal knowledge system anchored on top of public knowledge. As one's private knowledge grows it eventually reaches a point where it needs to be summarized. A good annotation system helps with this summarization process (which mostly comes down to having a good search and navigation system).

I think annotations can be made to work but the starting point has to be about personal use and not public use.

<comment><USER12> The person I was responding to specifically mentioned "collaborative annotation" and startups. Non-collaborative annotation has different tradeoffs. It may be useful to you, but I can't imagine there's any money there for a startup. It avoids the anti-network effects that kill annotations, and it avoids publisher objections too, but it also doesn't have a very compelling value proposition for very many people. It's like trying to make money off of people who like mind maps, literate programming, or who use personal wikis.... it's non-zero amounts of people, often very passionate people, but it's not much of a market.

<comment><USER13> Why is there no money in a personal annotation system? I'd think any large organization would be willing to pay a lot of money to use a tool that would make its members more productive and effective.

In fact, Coda and Notion.so are very successful products and they're basically personal/private annotation systems (modulo storing everything in the cloud). I can imagine extending Coda and Notion.so with programmatic capabilities and adding offline storage and turning them into pretty successful personal annotation systems with premium features for supporting organizational work and collaboration.

There is plenty of money in this market when viewed from the right angle.

</comment></comment></comment></comment></comment><comment><USER14> I've long felt that annotation was one of the greatest missed opportunities of the web. Every major content website implements commenting differently and often poorly. I'd much prefer to have comments come from a third party system where I can: own my own comments, not be subject to removal by the author of the content, and choose the group of people I want to discuss with. Imagine if hackernews discussions appeared right along the content instead of being hidden away where no reader of the content could find them.

<comment><USER15> Hey I'm working on exactly this with [https://histre.com/](https://histre.com/)

<comment><USER16> Nice idea! Some cheapshots:

1\. The comments aspect of this doesn't really jump out at me from the landing page.

2\. The words "knowledge base" scare most people.

3\. "You will be our customer and we promise to treat you the way we'd like to be treated too… with respect" is much more ominous with ellipsis than it would be with an em dash or a colon.

<comment><USER15> Thank you. Great points. I'll fix that.

</comment></comment></comment></comment><comment><USER17> A little-known feature of NCSA Mosaic for Windows was a sort of annotation system built into it. So little-known, in fact, that by the time Netscape Navigator 1.0 shipped, nobody on the Mosaic team claimed any knowledge of how the damned thing worked. That information left with the original team.

Every so often over the years I have recalled that feature and wished it had survived, especially when some organization desperately needs a watchdog group calling them on their bullshit.

Comment systems carved out a piece of that problem domain, but I've always wished for comments curated by an independent party. Which I am sure is how we got Digg, Reddit, and HN.

</comment><comment><USER18> Love this project. I definitely have some long-term concerns around filtering out spammers and being able to grok a heavily annotated page with resolved/unresolved conversations but I have faith they'll figure them out.

In the meantime, I've embedded the sidebar into my site [0] and hope more people do the same! Original idea from this [1] post.

0 - [https://jborichevskiy.com/about-blog](https://jborichevskiy.com/about- blog)

1 - [https://blog.cjeller.site/annotate-this- post](https://blog.cjeller.site/annotate-this-post)

</comment><comment><USER19> Love this but please for the love of everything holy make a firefox extension. The bookmarklet works but you only see annotations if I click on the link. It's sad and clear chrome is the new IE and mozilla is again the underdog.

<comment><USER20> It's so insulting they have an open issue and said they're working on it for more than 2 years when Firefox extensions framework is 99% compatible with Chrome extensions. Probably just have to repackage and publish, but apparently they can't be bothered.

<comment><USER21> It's open source, either do it yourself or quit complaining.

</comment></comment></comment><comment><USER22> I interviewed with this little company back in 2014 trying to land my first dev gig. Didn't get the job but I would've taken it for less money if they'd offered.

Impressed they're still going! I've worked for two failed startups since.

</comment><comment><USER23> Hypothes.is is great, but: annotations and living documents don't mix. I learned angular 3 years ago by annotating angular.io. Mistake. Now most of my annotations point to deep space because the text is gone or altered beyond recognition. I should have made my annotations stand by themselves.

</comment><comment><USER24> I wonder if anyone else remembers hoodwink.d by _why

For those that don't, it was a locally running proxy service that would inject its own annotation UI into any site you wanted. Basically your own pocket comment/discussion board where you could discuss whatever URL you were on with other users of hoodwink.

[https://github.com/whymirror/hoodwinkd](https://github.com/whymirror/hoodwinkd)

Also, wow, I can't believe that was 14 years ago. I miss _why.

</comment><comment><USER10> Hi, I started using this as a training tool for people I'm trying to help in meetups and my community (people who have never used AWS, GCP, etc) but a huge problem I found out after writing a lot of annotations (and clearly having the wrong expectation) was that you can't edit or have any control over the URLs that the annotations are based on.

If the devs are interested in my use case (understood if not) which is basically a poor mans onboarding tool, I'd love and happily spend some money (not onboarding tool money, those seem to be $1k+/month) on the ability to edit urls, share these, etc.

What I envisioned this as letting me do was creating versioned annotations that let me share them to anyone and they can superimpose those annotations on top of any URL that has the same basic structure behind it amazon.com/$myuser/$mycluster$/$myportal etc. I thought it'd be a really killer tool to use for helping new devs learn AWS more easily than digging constantly digging through AWS documentation, ie: "What is lamba? _click button_ 10 quick bullet points on Lambda" sort of thing.

A lot of these users will be using localhost, their IP, digitalocean IPs, etc instead of a concrete domain name. It'd be great if we could regex the url strings or something like that.

Thanks for your work!

<comment><USER5> Making the annotations portable across the same site hosted in difference places is an interesting idea.

I use Hypothesis a lot to highlight e.g., the few important lines of codes, commonly used config values, etc buried in longer dev docs.

This mostly works pretty well. But I do lose my highlights when the URLs change e.g. version 1.0 to 1.1. Sometimes there is a "latest" docs site available to work around this issue but not always.

I imagine that a script could be made with the Hypothesis API to migrate annotations across pages and approximately re-anchor them as much as possible.

</comment></comment><comment><USER25> It seems like annotation is coming into its own. In addition to the W3 standard, there are a lot of interesting UI/UX ideas in the space for instance this UI/UX that was posted by Azlen Elza (in Twitter) that would be perfect for annotation.

[https://twitter.com/azlenelza/status/1272600877493137408](https://twitter.com/azlenelza/status/1272600877493137408)

</comment><comment><USER26> I'm the founder of a new service in this space: [https://www.kontxt.io](https://www.kontxt.io). Check it out, and let me know what you think.

Enterprise - It's Slack, but on top of digital content.

Education - LMS with interactive layer for notes and assignments.

Website - It's Disqus, but inline with your content.

Personal - It's Pocket, Genius, and Reddit combined.

</comment><comment><USER27> My biggest problem with it was the lack of support for frames. Many sites I use serve documents in frames making hypothes.is unable to see them. Also, why not work with NextCloud and create an app to annotate documents there. NextCloud over public or private share?

<comment><AUTHOR> In a way, Nextcloud is a silo (even though it's open source and can be selfhosted). If you annotate documents there, you'd have to snapshot the page and move it into the app which kills the social function?

In contrast, Hypothesis only keeps track of the metadata and uses fuzzy anchoring to make it resilient to the markup changes.

</comment></comment><comment><USER28> These guys have been working on this problem for years and have a cool solution if you have a budget: [http://www.myire.com](http://www.myire.com)

</comment><comment><USER29> Does this fingerprint text to be annotated and collect annotations, allowing the "top rated annotation" to be the most strongly "trusted" annotation for this unique slice of text?

And does it ensure the integrity of the text, so that no bad actor may modify the text to turn it into "fake news"?

I think that ^^ could help diminish corruption of knowledge / the negative impact of information distribution which the Internet enables.

<comment><USER5> I'm not entirely sure that these fully answer the questions you're asking, but:

\- The annotations get "anchored" to the text in place at a given URL. There's a video online of Rap Genius [née Genius] discussing fuzzy annotation anchoring [1]. I would guess Hypothesis does something similar. Also, their client code is on GitHub.

\- Annotations can be replied to but as far as I know there is no mechanism for voting or any one particular annotation being more trusted than others. The site owner could make an official group for their site I suppose.

\- The underlying page can be modified at any time. If something is annotated and that underlying text is significantly changed or removed, the annotation becomes "orphaned" and shows in a separate area. If you really want to, you could archive the page first with e.g., archive.is and then annotation an archived version.

\- I do think that Hypothesis maintains an archived version of an annotated page, or at the very least the portion of its text which you've anchored annotations to so that you can view them outside of the context of the page.

[1]: [https://www.youtube.com/watch?v=FJyqfRcyYIQ](https://www.youtube.com/watch?v=FJyqfRcyYIQ)

</comment></comment><comment><USER30> Privacy question: is this typical wording? "By giving us this information, you agree to it being collected, used, disclosed, transferred to the USA and stored by us."

Does "USA" here mean the geographical USA, the legal jurisdiction, citizens of the USA or the government of the USA?

<comment><USER31> It probably means their servers are hosted in the USA (geographical) under it's jurisdiction. Not sure what "citizens of the USA" means in this context, but you can assume the US government may access the data if needed.

</comment></comment><comment><USER32> Just last year I was looking at annotations in general and potentially using Hypothesis as the initial MVP implementation to solve a problem in a very different, well different from research, market.

Unfortunately I got distracted, but I still believe in it and may come back to it again.

</comment><comment><USER33> It's so amazing to see them on HN, I learned a ton about python, pyramid, sqlalchemy and elastic on it's repos. So happy to see traction on open source projects! Thank you!

</comment><comment><USER34> i wonder if they have any concrete plans to prevent abuse of their platform, a la [https://slate.com/human-interest/2016/03/news-genius- wants-t...](https://slate.com/human-interest/2016/03/news-genius-wants-to- annotate-the-entire-web-at-what-cost.html)

</comment><comment><USER35> I tried to see myself out, but all that happened was that the wall behind the door became blue. In all seriousness, I was just curious if he had some cool "see-yourself-out" site that he'd send you to, like some people do, but no such luck this time. So I guess I'm stuck with linear regression, then. It's a pretty interesting topic anyway. :)

</comment><comment><USER36> Web Graffiti as a Service!

Seriously though, I always wondered why something like this didn't exist. Very cool.

</comment><comment><USER37> Like dissenter but instead of a comments section you can annotate anywhere?

</comment><comment><USER38> how does this compare to Genius?

edit: looks like Genius moved away from aiming to annotate the web, and focused instead on their core business of annotating music.

<comment><USER5> Exactly what you said. Also Hypothesis has more features around privacy (private annotations) and groups.

For me Genius's annotations were more of a tool for surfacing authoritative knowledge on a song. I use Hypothesis more for personal notes across the web, but other people use it collaboratively as well.

</comment></comment><comment><USER39> I've used Hypothesis for years. Very good blog support (plugin for WordPress) and built with WC3 in mind. Very fast support. Great tool.

</comment><comment><USER40> Clever domain!</comment>


Writing simple-check, a QuickCheck library for Clojure (2013) - <AUTHOR> http://reiddraper.com/writing-simple-check/ <comment><USER2> simple-check eventually became an official Clojure Contrib project, test.check[0]. In recent years it has been ported to Clojurescript (even allowing Javascript applications to benefit from property-based testing[1]) as well as seeing useful integrations into structural-typing and validation libraries such as Schema[2] and Spec[3].

Many thanks to Reid for introducing the Clojure world to QuickCheck! We gained an indispensable tool to leverage as Clojurians (notably in Onyx[4]).

[0] [https://github.com/clojure/test.check](https://github.com/clojure/test.check)

[1] [https://github.com/leebyron/testcheck- js](https://github.com/leebyron/testcheck-js)

[2] [https://github.com/plumatic/schema- generators](https://github.com/plumatic/schema-generators)

[3] [https://clojure.org/about/spec#_generative_testing_and_robus...](https://clojure.org/about/spec#_generative_testing_and_robustness)

[4] [http://www.onyxplatform.org/jekyll/update/2016/07/06/Onyx-0....](http://www.onyxplatform.org/jekyll/update/2016/07/06/Onyx-0.9.7-Refactoring.html)

</comment><comment><USER3> Should probably add a (2013) to the title.

<comment><USER4> Thanks, added.</comment></comment>


Getting annoyed by a website? Blow it up! - <AUTHOR> http://explode.website/

<comment><USER2> Nothing happens?

<comment><AUTHOR> Left click on the page and it should work :)</comment></comment>


Ask HN: How to find the right startup to join - <AUTHOR>

My problem, I don't fall into a neat little box. Been doing it on my own for a few years but have been thinking about joining a team for quite some time. Started a company recently from a side project, did all the design and programming work myself but it failed to gain traction. Going to turn it back into a side project and find a startup in NYC or SF to join. Have been self-employed in the few years since grad school, previously started a consumer electronics / design company and have helped launch web startups in healthcare, apparel, and adolescent products.
Can program (rails, php, iOS, embedded, design work), build just about any physical product, manage operations, have a couple engineering degrees and an MBA. At first glance I wouldn't think I'd have a hard time but my background and experience doesn't conform to the standard 'job description'. Looking specifically for a young startup, my thoughts were that at the start I can help with development/design. Then move into a more specialized role as the company grows. Would a startup want or need someone with that flexibility and experience? While I've only talked with a couple, they seem to be wary of the breadth of my background. How should I sell myself?
Any thoughts? Is my logic flawed? <comment><USER2> We could potentially use you. Drop me a note: firstname.lastname@example.com. <http://www.linkedin.com/in/mattmunson></comment>


T. Rex Might Be the Thing with Feathers - <AUTHOR> http://nautil.us/issue/101/in-our-nature/t-rex-might-be-the-thing-with-feathers-rp

<comment><USER2> I feel silly even writing this... but I wanted more pictures. I know the imagination is a powerful thing, but an artist's rendering based on a scientist's description helps me a lot.

What can I say. I like picture-books :)

</comment><comment><USER3> Obligatory xkcd [https://xkcd.com/1104/](https://xkcd.com/1104/)

This leads me every time our budgies or finches or the birds outside do something odd or silly, I nudge the wife, point at them and say "Dinosaurs."

</comment><comment><USER4> Evolution sort of makes the whole idea of extinction and "survival" blindingly complex.

The simple idea that "birds==dinosaurs (maybe)" led to us having pet birds for a while ( through the influence of our youngest ), which was very rewarding. With smarter birds, there's more of a sense of a cognitive "there" there than most animals. Almost what you get with dogs - although dogs have been ...engineered so heavily as our "familiars" that this takes some of the fun out of it.</comment>


Ask HN: Can a tautology be serious? - <AUTHOR> Let's write a tautology : A = A Let's rewrite it : A = A/B * B
Now, I often see people (in economics, mostly) do this little trick :
ΔA = Δ(A/B * B) Δ * ln(A) = Δ * ln(A/B) + Δ * ln(B)
Then, they will show that, empirically, A/B has always been constant (more or less), thus, if you want to increase A, you just have to work on increasing B.
Can this kind of equation actually say something about reality ?
Can it be falsified, so it can be taken seriously to be used for predictions ?
(to add some context, I'm thinking here about Kaya identity) <comment><USER2> The Kaya identity (just like the GDP accounting identity abused by all sorts of interventionists) is devoid of empirical content.

<comment><AUTHOR> Could you generalize to other identities ?

Or, on the contrary, give an example of such equation with some actual empirical value ?

<comment><USER2> Well, at least the GDP identity is an accounting identity, so it has some value, but the causal relationships are not there.

Every mathematical statement is a tautology (in that they are inevitable conclusions logically derived from a set of axioms). If the axioms constitute a decent abstraction of reality, then you can try to test causal relationships uncovered by logic, or use them in practical ways (Euclidean geometry, Newton's laws etc).

You can read Kaya's identity as per capita CO2 emissions from human sources is equal to per capita GDP times energy use per GDP unit times CO2 emissions per energy unit production. So, you have three ways of reducing per capita CO2 emissions if you are a global central planner (pushing aside the miserable implications of having a global central planner): 1) reduce living standards; 2) use energy more efficiently; and 3) generate less CO2 when producing energy.

And, if all you care about is reducing total CO2 emissions, start culling people or reduce the birth rate. This appeals to the 1970s neo-Malthusian, "the world is going to run out of food" crowd cause they make a living selling catastrophe. Combined with neo-Marxists who like to emphasize distribution much more than the absolute level of wealth, they like to ignore how living standards have improved[1] contemporaneously with increased CO2 emissions.

[1]: [https://www.vox.com/the-big- idea/2016/12/23/14062168/history...](https://www.vox.com/the-big- idea/2016/12/23/14062168/history-global-conditions-charts-life-span-poverty)

<comment><AUTHOR> Thank you again for this answer.

What I really don't understand here is the transition between :

1 - You can read Kaya's identity as per capita CO2 emissions from human sources is equal to per capita GDP times energy use per GDP unit times CO2 emissions per energy unit production.

and

2 - So, you have three ways of reducing per capita CO2 emissions...

What is the logic behind this ? I mean, if you pose [ CO2 = CO2/pop * pop ] (simplified, but indeed always true by definition), how can you say that one way of reducing the CO2 emissions is reducing the [pop] term ?

I don't know if I'm clear enough...

<comment><USER2> > What is the logic behind this?

I guess my disdain for this kind of approach was not obvious.</comment></comment></comment></comment></comment>


How to record audio in Chrome with native HTML5 APIs - <AUTHOR> http://codeartists.com/post/36746402258/how-to-record-audio-in-chrome-with-native-html5-apis

<comment><USER2> It's a shame that the article doesn't really go into any detail about the Recorder.js library, because that's really the most interesting part of this whole thing.

The use of a Web Worker for background processing plus all of the typed array stuff for creating a RIFF blob out of PCM data is actually pretty cool, and something that most JS developers probably haven't been exposed to much.

<comment><AUTHOR> Great idea for a new blog post. :)

<comment><USER2> I'm actually working on a project right now for an in-browser guitar amp simulator and the ability to record whatever you've played. Planning on doing a pretty in-depth writeup when it's done.

<comment><AUTHOR> Very cool .. I am also a guitar fan .. did you see this site: <http://www.soundslice.com> .. they've done an amazing job.

<comment><USER2> Yeah, agreed. Super impressive. On that same token, you should check out <http://getinstinct.com/> if you haven't seen it. Those guys are doing some really cool stuff.

<comment><AUTHOR> Crazy .. Love it!

</comment></comment></comment></comment></comment></comment><comment><USER3> The takeaway here is its not possible to record audio in chrome (in osx at least) without asking users to either enable Web Audio Input in their settings or disable the PPAPI flash plugin.

It's sad when you end up having to put messages like this in your app:

"Custom voicemails are not currently supported in Chrome on OSX. Please use another browser to record your custom voicemail."

<comment><AUTHOR> Agreed ... and even more disappointing is when you have to say to your users to use Safari when 2 weeks ago you said to them to switch to Chrome :(

</comment></comment><comment><USER4> Good article. I was actually working on my own demo[1] for recorder.js, though it's a bit out of date now. It's a tiny but impressive little library.

Worth noting that, besides exporting to a WAV and adding the object URL to an <audio> tag, recorder.js will also (using the getBuffer method) let you use the buffers directly as an actual Web Audio API source. This lets you do further processing during playback on the recorded audio.

I'm hoping by the time that I finish my silly little app (a loop box that you can add effects to, Reggie Watts[2]-style, using recorder.js and the wonderful effects library Tuna[3]), web audio recording in Chrome will be enabled out of the box on stable.

[1] <https://github.com/thomasboyt/web-audio-recording-demo>

[2] <http://www.youtube.com/watch?v=344OpaQCAQI>

[3] <https://github.com/Dinahmoe/tuna>

</comment><comment><USER5> Wow, I was recording audio in Chrome hooking Windows APIs.

<comment><USER6> You can do that?

<comment><USER5> Yes. To every Windows application: <http://www.nektra.com/products/audio- recorder-api/>

</comment></comment></comment><comment><USER7> What's the security model for browser-native audio recording?

That's a worrying security hole, if you can record without getting any permission from the user -- sites could eavesdrop on visitors and upload the audio to who-knows-where (knowingly or not, via an XSS hole...).

I believe Flash needs to prompt you to access your microphone and webcam; browsers should too (even more so, because someone who has disabled all plugins may feel safer...).

<comment><USER8> It's one thing to prompt the user when you start recording and another to need to go to chrome://flags.

Permissions for privacy invading features should IMO have a unified interface like they have in the OS like Mountain Lion.

<comment><USER2> The need to go to chrome://flags has nothing to do with privacy.

<comment><AUTHOR> You need to go to chrome://flags to enable Web Audio Input. The request for the microphone has nothing to do with that .. it's working with or without Web Audio Input.

</comment></comment></comment></comment><comment><USER9> Flahs, an evil old thing everyone seem to want to avoid. But the fact is, it usually works better than other alternatives.

Seeing many html5+js+css > Flash posts, and it's so nice when everyone is pointing out how awesome it is, until you try to do something useful like dubjoy. Where it turned out for you guys that flash is the only logical way to do it. I hope alternatives will get better soon, until then, we're stuck.

<comment><USER10> _But the fact is, it usually works better than other alternatives._

They switched to HTML5 because Flash no longer worked in Chrome, it's explained in the article. That said, this "HTML5" solution looks very much like a WebKit-only solution instead, so meh.

<comment><USER9> No, they switched because chrome no longer has flash. Not because it didn't work. My point was, chrome solution for replacing flash doesn't work as good as flash.

<comment><USER11> If _X_ lacks flash, then flash definitely doesn't work in _X_.

</comment></comment></comment></comment><comment><USER12> Its frustrating how much is the progress of web development is held to the whims of the chrome team.

<comment><USER13> Really? Personally I'm not frustrated that the majority of innovation in the web seems to fall to the Chrome team because no-one else is doing it.

<comment><USER14> This Chrome bug is affecting all the businesses that rely on voice recording. Still waiting for a fix, while users are going away from real-time web chat services.

<http://code.google.com/p/chromium/issues/detail?id=157613>

<comment><USER15> It's open source. If you're a startup at the cutting edge of web tech you can and should be contributing to the platform you run on.

</comment></comment></comment></comment><comment><USER16> Great article/tutorial. Bookmarked.

P.S. Good luck with DubJoy ;)</comment>


In praise of property-based testing - <AUTHOR> https://increment.com/testing/in-praise-of-property-based-testing/ <comment><USER2> Property-based testing is great but people should approach this with equivalence class partitioning [1] first. That always seems simpler before people think about it.

And they should be prepared to deal with combinatoric explosion [2] with pair- wise testing [3].

And it's no replacement for high-level behavioral tests. Because we care most about how the software actually works for the customer.

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

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

[3] [https://en.wikipedia.org/wiki/All- pairs_testing](https://en.wikipedia.org/wiki/All-pairs_testing)

</comment><comment><USER3> We have a fair bit of property tests in KAZOO now, using PropEr[0], an open source implementation in Erlang.

Fred (of Learn You Some Erlang) wrote a great book/site[1] on property testing in Erlang and Elixir, well worth the price of the book.

I find property testing is a muscle; the more time I can spend writing them, the "better" I get at writing useful tests. But the muscle atrophies quickly for me, so having the existing tests helps speed up getting into the mindset again.

I think the model checking (proper_statem in the PropEr code) is the real winner though. We can model a part of our system, write state transitions and then test those against both the model and a running system and compare our results. Any discrepancy points to either the model or the system being wrong (which is its own joy/pain to figure out).

[0] [https://github.com/proper-testing/proper](https://github.com/proper- testing/proper)

[1] [https://propertesting.com/](https://propertesting.com/)

</comment><comment><USER4> Property-based testing is awesome. I try to write prop-tests by default, with unit tests for explicit 'must test'.

The author doesn't mention that Hypothesis directly supports combining explicit testcases with your generated testcases. So you can write something like:

'Test list == reverse(reverse(list))`

And ensure that it always tests cases like 'empty list'.(I don't recall the exact syntax and wasn't able to find it with a quick search).

I think this is a nice way of testing because I get to define the testcases I can think of, the edge cases I expect, and also use generated tests where possible.

The downside to using this approach is performance. Especially if you're using this for something that performs IO, this can slow your tests down by 100x (since you run the tests 100s of times more).

</comment><comment><USER5> Property-based testing is amazing. However: it's rather difficult to wrap your head around it and start writing years for real-life non-toy examples.

Workshops and training helps, but there's not that many of those. Having a colleague who's already grokked it also helps immensely.

<comment><USER6> The John Hughes talk is also super cool. Not a substitute for experience, of course.

[https://www.youtube.com/watch?v=zi0rHwfiX1Q](https://www.youtube.com/watch?v=zi0rHwfiX1Q)

<comment><USER5> Yes, if you search for QuickCheck on YouTube, you get a few talks which are worth seeing

</comment></comment></comment><comment><USER7> In praise of being paid to write unnecessary tests that break within hours after writing them and then spending hours incrementally fixing these tests as they break with every. fucking. commit

<comment><USER8> My first knee-jerk reaction to your post was the same as the people who downvoted you: Here's another person incorrectly implementing a process, and then blaming the process when it fails.

But, real talk: Automated testing is borderline impossible without buy-in from the developers maintaining the code under test.

You get developers changing function signatures so tests no longer compile. You get changes to function invariants that invalidate the tests. You get UI changes that break tests that look for component placement, or that search for certain strings in the UI.

If your developers insist on changing these things (or are forced to change these things by constantly-shifting project requirements) without updating the tests, then you are just treading water.

In that case, you probably are better off with manual tests.</comment></comment>


Show HN: Cortris – A Simple Url Shortener written in Go - <AUTHOR> https://adalricus.nand.sh/projects/cortris/ <comment><USER2> Good job on getting your first project out there, there is a lot to be improved upon here.

First off, it's standard practice to listen for PORT over the environment variable. You can always set a default, I often do, but it should able to be overriden.

Second, you are opening and closing your DB on every request, it may not cause too much latency, but you should 'open' the database upon application start, then use a service to allow your controllers access to the DB. If the project was larger, I would recommend some abstraction so you can use different types of storage solutions and the controller doesn't need to have any idea what is used behind the scenes.

errChk will cause the entire application to crash on any 'err' thrown in it that isn't nil. Errors should be handled a bit more gracefully, a common pattern is:

        if err := datastore.Get(c, key, record); err != nil {
            http.Error(w, err.Error(), 500)
            return
        }

You are definitely on the right path though! If you have any questions, feel free to leave a comment. I can create a PR later with the suggested updates if that would be of any interest to you.

Oh, also Heroku or Google Cloud Run may be of interest to you, both services have free tiers that you can get started on, but you will want to change your datasource to use something beyond sqlite.

<comment><AUTHOR> > it's standard practice to listen for PORT over the environment variable

I didn't think of this, I was thinking of making something like config file where user can specify it. This will be a lot better than that, so I could ask users to set CORTRIS_PORT & read that?

edit: I'm now reading port from environment & setting it to 8080 if it doesn't exist.

> you are opening and closing your DB on every request

I don't understand about controllers part, could I open the db at start & put db.Close() at end of main (?), is there more I have to think of (like what happens after program fails & the connection is still open?)

> http.Error(w, err.Error(), 500)

Is it safe to pass the error to the user? Could something go wrong considering the source is already world readable?

It would be nice if anyone could set it up on heroku free tier, where do I learn about it?

I'm planning on getting a cheap vps to deploy my little projects. Thank you for looking at my project!

<comment><AUTHOR> I've implemented these since then, I also read the database file from environment now.

</comment></comment></comment><comment><AUTHOR> It's nothing fancy, I'm learning how to write programs. This is one of my first projects. I don't have resources to deploy it on the web, the code is short & it really doesn't do much. Previously I used cgi for all my projects, decided to try this reverse-proxy thing this time.

Source Code: [https://github.com/adalricus/cortris/](https://github.com/adalricus/cortris/)

License: ISC License

Images: linked on the page</comment>


Pentagon officially releases UFO videos [video] - <AUTHOR> https://www.youtube.com/watch?v=mW9g_gx2BqM <comment><USER2> This links to a quick morning show clip that doesn't really say a whole lot; here's the official press release from the Pentagon:

[https://www.defense.gov/Newsroom/Releases/Release/Article/21...](https://www.defense.gov/Newsroom/Releases/Release/Article/2165713/statement- by-the-department-of-defense-on-the-release-of-historical-navy-videos/)

<comment><USER3> @Dang what do you think about changing the url to this?

</comment></comment><comment><USER4> And here's the pilot of that encounter in an interview: Joe Rogan Experience #1361 - Cmdr. David Fravor & Jeremy Corbell ([https://www.youtube.com/watch?v=Eco2s3-0zsQ](https://www.youtube.com/watch?v=Eco2s3-0zsQ))

</comment><comment><USER5> As stated in the video, this was leaked years ago. They're just confirming the authenticity of the videos.

Here's an older, non-region locked video: [https://www.youtube.com/watch?v=pUT3rgT3P6E](https://www.youtube.com/watch?v=pUT3rgT3P6E)

</comment><comment><USER6> Trying to distract the conspiracy theorists away from COVID-19, to minimize the harm that misinformation may be causing? Is this conspiracinception?

<comment><USER7> Are the covid and the UFO conspiracy theorists the same ?

<comment><USER8> Well if you believe covid is transmitted via 5G cell towers or that injecting disinfectant may cure you, they are pretty mich in the trash bin.

<comment><USER9> I'm not sure there's a big population of people who want to inject anything or that 5G transmits covid - in fact, even in those quarantined subs on Reddit, those aren't mentioned.

Many of them were called "conspiracy nuts" when they accused China of mass burning bodies and lying about death rates - something the US intelligence community has now confirmed.

<comment><USER8> >> I'm not sure there's a big population of people who want to inject anything or that 5G transmits covid - in fact, even in those quarantined subs on Reddit, those aren't mentioned.

There is a "big population" that believes anything the orange man tells them. It's been probed and will be probed again.

As far as China is concerned there is no news that communist regimes are pathological liars. It's part of the (censorship) system

<comment><USER9> > There is a "big population" that believes anything the orange man tells > them.

This kind of hyperbole is not appropriate for this site.

> As far as China is concerned there is no news that communist regimes are > pathological liars

Except that every media source, the John Hopkins tracker, every major health department including the WHO, the virologists and epidemiologist communities, and nearly every gov't was repeating the Chinese data - EVERY DAY.

None of them contradicted them.

The people in "those communities" were calling bullshit the entire time, and collecting tons of first-hand accounts of the lies.

...only to be lumped in now as "conspiracy theorists" with the real nuts that are "injecting disinfectants" (which hasn't actually been reported anywhere)?

So aren't you doing a tremendous injustice to those (now arrested) people in China who leaked the truth? ...all because you have this emotional hatred of Trump?

</comment></comment></comment></comment></comment></comment><comment><USER10> How come noone is considering these to be man made phenomena? I.E projections designed to look like solid objects? I saw this phenomenon with my own eyes in the 90's and it's very real but space aliens over made made projections? And before this projection idea gets debunked by the fact that this was caught on radar. Recent advancements have enabled the detection of projections via radar.

[https://books.google.com/books?id=AZoSALzL3V4C](https://books.google.com/books?id=AZoSALzL3V4C)

I talked to someone who has a relative that flys high altitude spy planes about this and he said, "I'll put it this way. There is nothing flying in the air that we don't fully understand".

<comment><USER11> Gimbal and Gofast lack enough info to not be explained by a baloon or a far away jet confusing the camera operators (i doubt the gimbal explanation due to context but again we lack the data...)

As for the projection idea, that would explain the ability to reach impossible speeds. However as long as this is not demonstrated by anyone your guess is as good as the alien probe guess

> I talked to someone who has a relative that flys high altitude spy planes > and he said, "I'll put it this way. There is nothing flying in the air that > we don't fully understand".

You see why this might be considered annecdotal at best?

</comment></comment><comment><USER12> Mick West debunked these before:

[https://www.youtube.com/watch?v=Q7jcBGLIpus](https://www.youtube.com/watch?v=Q7jcBGLIpus)

<comment><USER13> He's mostly "debunked" them for the group of viewers who really want this to be phenomena we already understand.

The broader group of researchers, who are open to anything from atmospheric physics phenomena to straight up aliens, are worth giving a listen regarding his debunking. IMO they ask good questions.

<comment><USER14> Have you watched his debunking of the "Go Fast" video? ([https://www.youtube.com/watch?v=PLyEO0jNt6M](https://www.youtube.com/watch?v=PLyEO0jNt6M)) I don't see any wiggle room around what he lays out, certainly not enough to warrant putting 'debunk' into "scarequotes". The object simply was not 'going fast'; it was a weather balloon sized object moving at weather balloon speeds that only looks like it's going fast due to parallax.

The only question in my mind is whether the USN is filled with fools who couldn't figure out what he figured out, or whether they're deliberately fucking with us. I'm strongly inclined to think it's the later.

<comment><USER15> Dude, navy pilots are trained to recognize this. They've had years now to come out with a statement saying it was a balloon and make it go away. They haven't and this story continues to pester their PR guys. But 'ol Mick here is way smarter than all of the pilots and the Navy experts and he says its a balloon, so they're all full of it and it's a balloon? I can't even begin to describe how dumb this sounds. Get real.

<comment><USER14> Did you miss the _" I'm strongly inclined to think it's the later."_ part? _They 're fucking with us._

<comment><USER15> Lol, let's mind-fuck the public and tell em there's shit running around that can radically outperform our best jets/pilots... Um, No. That's even dumber.

<comment><USER14> If there is an error in Mick West's debunking of the 'go fast' video that changes the conclusion, then please point it out. How fast do you think it's moving, and why do you think that? Otherwise I'm afraid I have a contrary opinion about who's being dumb here. All you've done in this thread is appeal to authority.

<comment><USER15> I do not know how fast it is going, but I also don't think this Mick guy can tell from the video either. We can't tell from the video because it does not have the required information for either me or Mick to make a determination. The pilots who took the video are very sure its going fast and I think they are correct. They had the extra sensory info to make that determination and I will side with them over what Mick or I can determine by looking at the video. I'm really surprised I have to say that on a board like this which is supposed to cater to intelligent professionals, but apparently I have to. There is no appeal to authority here, I am pointing out that the people who took the video obviously had information available to them that made them say it was moving and fast, plus they are trained to make precisely that determination. I mean, go believe the ex-dev who makes videos for a living if you want, I'm sticking with the pilots.

<comment><USER16> I tend to agree that the debunking video is a little too sure of itself with regard to the speeds, though I think we could also be over-estimating the competence of the crew in the videos. Maybe they thought it was moving fast because they didn't take the time in those moments to read their instruments. As for the shapes of the objects, I would accept that they are most likely planes, and the rotation an artifact, but this doesn't rule out the possibility they are some classified new aircraft.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER17> Harry Reid was U.S. Senator of Nevada, where Area 51 is located. He was one of the most powerful people in Washington D.C. as Senate Majority leader for a decade and a member of the Senate Intelligence Committee. He was in the best position to know everything about UFOs, captured alien craft, and reverse- engineering alien technology. Here is his statement on Twitter:

"I'm glad the Pentagon is finally releasing this footage, but it only scratches the surface of research and materials available. The U.S. needs to take a serious, scientific look at this and any potential national security implications. The American people deserve to be informed."

<comment><USER18> Or perhaps he's trying to garner more funding with this news story _shrugs_

<comment><USER19> Funding for what? Isn't he retired?

<comment><USER20> Retired, yes, though from what I hear still a player in Nevada politics, and I assume has some sort of lobbying-related incoming. (I'm speculating, didn't run a search.)

But he's also really getting up there in years, and he has been agitating about UFOs for a while, so maybe he legitimately wants to know what is up.

</comment></comment></comment></comment><comment><USER21> Are there any recent, somewhat credible sightings? I mean we have millions of highquality lenses watching the skies, almost everyone has a camera in their pocket. Every piece of video nowadays should be in at least 720p quality, quite clear, even in lower light situations. Quite an upgrade from the potato camera's of yesteryear.

I'm a skeptic and love to proven wrong, but is this a bit like how there are hardly any miracles anymore?

<comment><USER18> Looks like the thing was flying at thousands of miles per hour if not more. Probably hard to capture it in clear detail. Or could be that it was intentionally unclear to mislead folks.

</comment></comment><comment><USER22> Can't watch as I am from Canada :( do we not have UFO's in Canada!?

<comment><USER23> Sorry, we're not allowed, this content is for Americans only. I mean, they went through the effort to specifically block everyone else, so it must be really important to them, so we should just back off, for important reasons of course.

<comment><USER24> That's funny because the main news broadcaster in the Netherlands just copied the video and self-hosts it.

</comment></comment></comment><comment><USER9> The folks over at ArmsControlWonk Slack channel are saying they are probably tests of guided MRV warheads.

It's easy to get objects with no wings to travel at incredible speeds if they are in re-entry. It also explains multiple objects flying in formation.

<comment><USER10> How about being able to actively camouflage, hop around like a ping pong ball, stop in midair and turn on a dime? The projections idea, as unscrutinized as it is seems much more in line with the description of the objects.

<comment><USER9> None of those properties are apparent in the videos that have been released. It seems more likely that they'd be a property of the turbulence and relative velocities of the planes vs the re-entry vehicles.

From the videos, you see extreme-speed objects that are banking aggressively, and audio confirmation of them flying in formation. Is there direct evidence of "actively camouflage, hop around like a ping pong ball, stop in midair and turn on a dime"?

<comment><USER10> Actually this is from the account of the incident

[https://youtu.be/NTLSQCF6ohQ](https://youtu.be/NTLSQCF6ohQ)

Paper: [https://media.lasvegasnow.com/nxsglobal/lasvegasnow/document...](https://media.lasvegasnow.com/nxsglobal/lasvegasnow/document_dev/2018/05/18/TIC%20TAC%20UFO%20EXECUTIVE%20REPORT_1526682843046_42960218_ver1.0.pdf)

<comment><USER9> The "History" Channel is not an authoritative source, and the pilot himself said on the Joe Rogan podcast that they were taking creative license with a lot of "facts" on the case.

Your 2nd source is a collection of wikipedia snippets and unsourced writting. There's no original source on any of it - nor any indication of authorship. It's scanned and has a few things blacked out to make it look like a gov't document, but there's no indication this was written by any government source.

<comment><USER10> The pilot repeatedly described the objects as moving erratically. This has been the hallmark description of the objects. Here is another source [https://www.cnn.com/2017/12/19/us/pilot-david-fravor-ufo- jim...](https://www.cnn.com/2017/12/19/us/pilot-david-fravor-ufo-jim-sciutto- outfront-cnntv/index.html)

Additionally when I saw the objects, they were moving erratically.

It's not at all surprising that the community your talking about would come to this conclusion although wrong.

<comment><USER9> Right, but "erratically" is kind of vague. It doesn't mean coming to a complete stop - nor does it mean a turn/acceleration at an "impossible" rate - since they were not able to ever verify their range to the target.

So maybe it was just traveling at high speed, either away or towards them. From that perspective, turns _seem_ to ping-pong despite the object having constant speed.

But, listen - I'm not saying it's definitely not aliens. It might be aliens - I have no idea. But the videos and the pilot's testimony aren't very strong evidence.

...there's also the possibility that the military _knows_ these are MRVs and they had that pilot make a bogus report to help cover their MRV tests.

I hope if the gov't isn't responsible, that they're investing in catching one of these things.

<comment><USER10> PROJECTION's. Not aliens. NYT isn't reporting the reality of what these are. And nobody is. It's impossible to argue with people who won't take the description of the objects at face value. Bouncing around like a ping pong ball at super sonic speed and then hovering over the water isn't something any object with mass can do.

<comment><USER9> Nobody is? The pilot himself literally said he thought it was aliens.

...and why would you take verbal descriptions of aliens at face value? Extraordinary claims require strong proof. The videos are compelling and warrant further investment in investigation tech.

Also, claiming the objects "moved as if they had no mass" is not supported by either the video NOR the verbal reports.

<comment><USER10> Apparently there is a higher resolution video. This should help sort this out, my own account is that in the 90's I witnessed this "object" with two other witnesses within eye sight of the now closed El Toro marine base in Orange County, CA. It was in fact moving like a ping pong ball, that is what made it appear so different from anything else in the sky that looked similar to it like stars. With my own personal knowledge I completely believe the pilots and they're accurate and much more detailed descriptions. If you agree that an "It's Aliens" [https://imgur.com/rrV0EeO](https://imgur.com/rrV0EeO) argument requires extra ordinary proof then maybe it makes more sense that we were testing some of this hot new radar tech on our state of the art projection technology. See here for further context: [https://books.google.com/books?id=vS0fAQAAIAAJ&source=gbs_si...](https://books.google.com/books?id=vS0fAQAAIAAJ&source=gbs_similarbooks)

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER15> This has been on here a number of times. Given how skeptical people are on here, I'm deeply curious what sort of mental gymnastics will be wheeled out to explain this. My bet is 100% on ET space probe. Anyone care to explain how these things move, what is powering them, or who built them?

<comment><USER25> It is one logical solution to the Fermi paradox: there is no Fermi paradox.

The problem with UFOs is that there is so much cultural and folklore baloney surrounding the topic. But ignore all that and look at actually reliable case data like this. This is not enough to prove anything but it's enough to suggest that we might want to look.

Personally I would not mind seeing an ultra-wide-field (fish eye?) infrared space telescope watching the solar system. Unless ET found a way around the second law of thermodynamics, anything using non-trivial amounts of energy is going to light up like a beacon in the sky in the infrared spectrum far beyond what can be accounted for by normal solar albedo. For example a large nuclear fusion reactor in space would require enormous heat sinks to not melt itself and the entire spacecraft, and any propulsion system capable of fast movement around the solar system or especially _interstellar_ flight is going to be blindingly bright in the infrared when it executes a burn. Call it near field SETI.

<comment><USER26> Hypothetically, if an alien civilization powered itself through a mesh of evenly-distributed orbiting solar power stations (a Dyson sphere with one- billionth coverage would still produce in an insane amount of power), would we have any way of noticing?

My hunch on the Fermi paradox is that the space-faring phase of a civilization requires transitioning into immortal software, dodging around the speed limit of _c_ by becoming very old, and very patient. I suspect such life forms ("Space Ents") wouldn't bother trying to communicate with such rapidly churning species as ourselves, other than perhaps collecting data via probes to be perused hundreds of millennia later.

<comment><USER25> This expands into an infinite tree of _maybes_. My point is that its worth looking because a satellite with a fish eye IR camera wouldn't be that expensive and the benefit would be huge.

We know for a fact that such a satellite would have a good chance of spotting any star farers that are _remotely_ like us, even if they are significantly more advanced but still "fast" in terms of their energy use and general way of doing things.

Space Ents belong to a long tail of other possibilities, but they also must obey the second law...

</comment></comment></comment></comment><comment><USER27> Weather balloons?

</comment><comment><USER28> Why now?

</comment><comment><USER29> This would have more weight if it wasn't from the era of a government that lies about everything.

</comment><comment><USER30> Is it a coincidence that XCom Chimera Squad was recently released?</comment>


Markerless motion capture - <AUTHOR> http://www.faceshift.com/

<comment><USER2> Beta tester here. Unable to think of any significant negative points about the software, it works, it works well. Huge expense savings for character animation production.</comment>


What's the Latest on the VMWare GPL Violation Topic? - <AUTHOR> The most recent that I can find is http://laforge.gnumonks.org/blog/20160225-vmware-gpl/ <comment><USER2> Here's a more recent announcement: [https://sfconservancy.org/news/2016/aug/09/vmware- appeal/](https://sfconservancy.org/news/2016/aug/09/vmware-appeal/)</comment>