Ask HN: What are the best books for learning information security? - <AUTHOR> For topics like: common vulnerabilities and mitigations, secure programming techniques, static analysis, reverse engineering, fuzzing, cryptography, and so on.<p>Looking for some good tomes to expand my mind and bookshelf. <comment><USER2> Glad you asked. This is a list I like to call, "how to become an extremely effective and formidable security engineer."

1\. _The Web Application Hacker 's Handbook_

Probably the first book you want to read; this will teach you the core mindset you need for finding security flaws in web applications as well as give a very strong foundation for the different classes of vulnerabilities.

2\. _The Mobile Application Hacker 's Handbook_

Good supplement to #1 for application security, obviously focused on mobile apps.

3\. _The Art of Software Security Assessment_

The bible of the security industry. Especially instructive for source code review.

4\. _Security Engineering_ (Ron Anderson)

Supplements #3. Very instructive for injecting security into the overall SDLC and designing secure software.

5\. _The Tangled Web_

Excellent historical background and good high level overview of many information security topics. Every engineer should read this, even if they don't work in security.

6\. _Gray Hat Python_

Very hands on, good introduction to aspects of reverse engineering and the typical work an e.g. security consultant will do at a top firm.

7\. _Practical Malware Analysis_

Very good introduction to malware analysis.

8\. _Practical Reverse Engineering_

This book, along with #9 will teach you everything you need to know to effectively reverse engineer software for security-focused analysis.

9\. _Reversing: Secrets of Reverse Engineering_

10\. _The IDA Pro Book_

You'll want this if you have any plan to work with IDA Pro at all, which is the gold standard for decompiling and reversing software.

11\. _The Shellcoder 's Handbook_

If you'd like to write exploits after you're done reversing software to find an exploitable bug, this is a good book to pick up.

12\. _Cryptography Engineering_

Very solid and broad introduction to cryptography. Every engineer should read this, even if they don't work in security.

13\. _Introduction to Modern Cryptography_

This book, along with #14 is what you want to read if you're going to work as a cryptographer or cryptanalyst professionally.

14\. _Handbook of Applied Cryptography_

\</comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment>--

Theoretically, these books should resolve your known-unknowns and your unknown-unknowns. Anyone who reads and _works through_ the list should be capable of designing secure software, finding errors in white and black box source code reviews and finding errors in white and black box penetration tests.

If you're looking to get into this professionally, feel free to contact me if you have any questions and I'll do my best to help.

<comment> Creepy-ish If you're interested in iOS, I would also include "iOS Application Security" [0] by David Thiel. It's relatively up to date, very practical and actionable. David's resume [1] is also a good example of what a successful career in "cyber security" can look like.

[0] [https://www.nostarch.com/iossecurity](https://www.nostarch.com/iossecurity)

[1] [http://redundancy.redundancy.org/resume.pdf](http://redundancy.redundancy.org/resume.pdf)</comment></comment>


Nine lessons from the first Internet bubble - <AUTHOR> http://thestandard.com/news/2008/05/27/lessons-i-learned-first-bubble <comment><USER2> "5. Just because people can shop on the Internet, that doesn't mean that they will." This applies to nearly every online app.

<comment><USER3> Don't like the Webvan example. NYC shops on Fresh Direct. More of a lesson in timing. How many failed ideas from the last bubble are now viable businesses now?

</comment></comment><comment><USER4> From the article: Don't hire quickly to deal with growth that may not happen, and make sure that your existing staff are used effectively.

I heard the one startup spent one round of funding buying Aeron chairs. The number of chairs was taken as indicator of the founders' certainty in the venture and this led to a larger round of investment. Antics like this led to the Aeron chair ratio for failed startups. Apparently, some failed startups had more 10 Aeron chairs for every employee.</comment>


Dear HN, what do you think of my new visual aggregator/tech magazine? - <AUTHOR>

Hey there, im hoping HN can give me some feedback on my new technology news aggregator styled as an online magazine. Please check it out and give me some feedback. Also if you have any tips on how to gain traction in terms of pageviews for a project like this please let me know. Many thanks!. http://www.planettechnews.com/ <comment><AUTHOR> anyone?</comment>


Ask HN: I use emacs and my left hand hurts. Any tips? - <AUTHOR>

All that C-x C-s etc is wearing out my left pinky and left hand generally. I've remapped a lot of functions, I try to use the right side control key, and I generally try not to use two keys with the same hand whenever I can. But I'm not perfect.<p>I can't be the only person with this problem. I bet somebody's figured this out already. (And if "use vi" is the answer I'd consider it.) Thanks. <comment><USER2> I'm a heavy emacs user and occasionally get hand pains for a few days or weeks.

As everyone else will suggest, swap your caps-lock and control keys.

I also found it useful to have a single key on my keyboard that does M-x. You might already have one by default. It might look like a wavy window flag, or a cloverleaf, or a menu, or something weird.

As you have said, start to learn to use more of the special keys on the right side of the keyboard. Don't forget shift. You shouldn't be using the left shift for capital letters whose keys are on the left side of the keyboard.

You might find it useful to put your mouse on the other side of your keyboard and use it with the other hand a few days a week. It sort of trains your hands to do things differently.

You might find it useful to try a different keyboard. I've found a Microsoft Natural keyboard to be great. Your employer will spring for this if you mention that your hand hurts.

Adjust your chair height, display location, desk height, and the way you sit. Yeah, this actually affects the way you use your hands.

Don't forget to take breaks. Go get some tea or something every once in a while. I think jwz wrote a thing that periodically makes emacs force him to do that when his hands started hurting.

Don't be afraid to go see a doctor.

Good luck!

</comment><comment><USER3> I am new to programming and emacs was the first editor I was introduced to, so it naturally became my favorite. I switched to and am starting to learn Linux and in the class we use vim.

I don't type well so I don't have the proper form that might lead to the discomfort you mention but I am starting to appreciate the intuitive functionality of vim. Like I wrote, I am new to all of this so I don't have any priors or strong feelings about either editor. I find people espouse the virtues of the editor they were introduced to.

If you like emacs and it works for you, all the advice written here is helpful but from what I read, vi avoids all the crazy multi-key typing and really might be, ultimately, the best solution.

Then again, I don't know much.

EDIT:I forgot to mention, I learned Google uses the vi commands to navigate gmail and more webapps are incorporating that functionality, so it might be something to consider.

</comment><comment><USER4> Map caps lock to ctrl. I did this about 2 years ago and I've never turned back.

</comment><comment><USER5> I use a Kinesis Advantage keyboard. You can freely remap the keys at the hardware level. You also get to put control and meta under your thumbs, and you get mirrored versions of these keys under each thumb. I find it a lot less painful.

There is a learning curve, though, and your coworkers will occasionally try to use your computer and get horrified.

Note also that all the other postural changes that you can try might wind up being as important. Get a keyboard support that can be adjusted to arbitrary heights. Get a decent chair.

</comment><comment><USER6> Change hands after 50 (uses of the control key, that is).</comment>


Two Weeks Sprint -- seeking for the like-minded - <AUTHOR>

Hey,
I've found out that I can devote two weeks to develop some nice "startup" idea (either mine -- I have some -- or yours, doesn't matter) -- most probably "anytime soon". I am currently in West Lafayette, IN but willing to move for these two weeks somewhere else -- SF Bay Area would be nice. Have a bit of cash -- not much though.
A couple of words about me: 26 yo, male, experienced Ruby/Lisp/.. developer, always willing to research, innovate and make fun, have some incorporation procedure experience, willing to make this world better :)
If you're interested, feel free to email me to email@example.com. I am able to share some ideas I have -- expecting you to be open too.
I'd rather do this thing as soon as possible.
http://rashkovskii.com <comment><AUTHOR> Actually, arrived to SF :]</comment>


Ghostcat bug impacts all Apache Tomcat versions released in the last 13 years - <AUTHOR> https://www.zdnet.com/article/ghostcat-bug-impacts-all-apache-tomcat-versions-released-in-the-last-13-years/ <comment><USER2> The Spring Boot comment should be elaborated on (I was surprised Spring guys didn't write anything about it in their blog). This is off by default, but you could be vulnerable if you configured it to be on (I'd look for a bean definition of `EmbeddedServletContainerFactory` that adds a connector with `new Connector("AJP/1.3")`). If that's the case, you can either upgrade Spring Boot to pull in an updated Tomcat, or override the Tomcat version with the `tomcat.version` property.

</comment><comment><USER3> Exposing an application server to the internet is not a good idea. It is always better to have a simple proxy that has absolute minimum set of software installed on it and let it to handle the requests coming from internet and forward them to the application server. With this kind of deployment, your attack surface will be much less and you will be protected from the bugs described in the article.

</comment><comment><USER4> > According to Snyk, apps built on the Spring Boot Java framework are also > vulnerable since they come with a pre-included Tomcat server. Per Red Hat, > Tomcat also ships with other Java-based frameworks and servers, such as > JBossWeb and JBoss EAP.</comment>


Dress to Profess: What Should Scientists Wear? - <AUTHOR> http://sciencecareers.sciencemag.org/career_magazine/previous_issues/articles/2014_04_24/caredit.a1400104

<comment><USER2> I'm a scientist. I'm at conference this second, in fact. Plenty of people are wearing suits.

Also, lab coats in lab make sense. You don't to spill acids or solvents on an expensive suit. You also want to be mobileoso you can reach into hard to access machines and spaces. A suit is not practical for mobility.

<comment><USER3> Conferences are completely different. At a conference there is a 50% chance I will wear a suit, but back at work on a regular day I am in jeans and a T-shirt which makes me _very slightly_ underdressed compared to my peers.

A conference is more similar to a job interview which is the one time that even scientists get dressed up.</comment></comment>


Business Model 101: Why startups often fail at Freemium Model - <AUTHOR> http://www.pluggd.in/freemium-business-model-and-startups-297/

<comment><USER2> With all of the freemium articles lately this is a pretty decent aggregation of the arguments. I would like to have seen more information on what did not work for others, but I understand that information may be hard to come by.</comment>


Shell code written in English - <AUTHOR> http://www.cs.jhu.edu/~sam/ccs243-mason.pdf

<comment><USER2> One still has to get the decoder through detection systems; just like encrypted code but it's impressive work & results nevertheless.

<comment><AUTHOR> But one of their main points is that the decoder doesn't differ in structure from the code itself. It's still plaintext "English". End of (2.): "In support of that argument, we provide a concrete implementation that shows that the decoder can share the same properties as benign data."</comment></comment>


Evolved Virtual Creatures (Video, 1994) - <AUTHOR> https://archive.org/details/sims_evolved_virtual_creatures_1994 <comment><AUTHOR> Really impressed about what Karl Sims managed to get out of 1994 hardware. I had no clue these kind of high res/fps renderings were possible back then!

I'm also very impressed on how life-like these models move. I think a lot of it is because of the high framerate.</comment>


State of Clojure 2020 - <AUTHOR> https://clojure.org/news/2020/02/20/state-of-clojure-2020 <comment><USER2> Former Ruby guy reporting in. Started using clojure a few years back, but have been serious about it recently. I can't explain how pleasant the language is. Everything just makes sense, and once you get the tooling sorted (which is admittedly a bit convoluted), it such a beautiful environment.

I've always been an emacs user, so clojure was a match. Emacs + cider for repl-based development has been an amazing productivity boost. I wanna shout from the rafters and tell everyone that this is how it should be done! I don't even want to imagine working in another environment anymore.

The Lisp enlightenment is real, in that I started to see code differently -- more in the sense of homoiconicity. I realized I began to lose the distinction between code and data. Everything just merged. The clouds didn't part nor did I ascend to a higher level of being as promised -- but it was definitely a "whoa" moment.

Enough of my blubbering, just wanna say keep up the good work! The language has brought back the fun of programming for me.

<comment><USER3> I am wondering how people deal with complicated domain models, I have many objects that have a lot of properties (from 10 to 30), in Clojure I should represent them somehow, probably with maps, the problem is I would have to memorize all the keys... How this is approached in Clojure in a proper "clojurian way", that is without doing something like using Java classes?

<comment><USER4> Most editors should autocomplete those keys for you if you want somewhere that is a centralised location to find those names you could consider using spec [https://clojure.org/about/spec](https://clojure.org/about/spec)

Spec 2 should separate two concepts, schema: all of the possible keys, and selection: the keys used in this particular function, Spec is also recursive

Because spec is part of the language there is a growing ecosystem for defining specification once in spec then translating them to things like database schema, GraphQL schema, OpenAPI schema etc where they can be more "traditionally" understood

You also get other cool things like you can generate conformant data examples given a spec, and use those to create generative tests, as time goes on I think our static analysis tools will start working partially with specs to further their abilities

Specs also power things like this: [https://borkdude.github.io/re- find.web/](https://borkdude.github.io/re-find.web/) and I think we're increasingly using them for validation, error detection etc in the core language too

<comment><USER5> Was going to highlight the same thing. even in OO if you are not using tooling like autocomplete, you have to mentally map all of those attributes. Fortunately autocomplete is fairly ubiquitous and it exists for Clojure as well. Visual Studio Code has pretty good support for Clojure via some contributed plugins.

<comment><USER6> In OO, autocomplete can be driven by type information, which makes it that much more reliable and relevant.

</comment></comment></comment></comment></comment><comment><USER7> I studied Java at University and then worked with it for 15 years through various companies, finance mostly. I like the language but the opportunities and my use of it felt very stale in the end.

I switched to Clojure a decade ago, around the time I started working with distributed systems. The best move I have ever made. I love working with Clojure and I find a large benefit in my understanding of the JVM.

Recently I've built a front end (Clojurescript) and some lambda services (Clojurescript on Node) to complement my startup (Clojure, [https://operatr.io](https://operatr.io) \- its a tool for Kafka). There's an advantage to using a single language/mindset through your entire stack.

I spoke at the last Conj ([https://www.youtube.com/watch?v=MnvtPzEH-d8](https://www.youtube.com/watch?v=MnvtPzEH-d8)) about my experience, broadly speaking my top reason for loving Clojure is that I am much more effective in delivery today than I was a decade ago. I simply don't believe I could have built Operatr in Java/Javascript, YMMV.

In technical terms Clojure's data-orientation coupled with host-interop is much more important to me than it being a functional language or emacs/vim etc. Turns out I still use Intellij (with the Cursive plugin) and my work setup has changed very little.

It's a great tool, if you haven't tried it you should have a play - particularly if you work with Java.

<comment> arc-in-space >I love working with Clojure and I find a large benefit in my understanding of the JVM.

Reliance on the Java ecosystem has been the biggest issue for me in trying to use Clojure. I love many things about the language, but I have zero experience with Java or the JVM. A number of my attempts at using Clojure for a project have been hindered by my lack of understanding of the underlying runtime and the tools. In a way, it almost feels like Clojure simply isn't for me.

On the other hand, I've had much more luck with ClojureScript, which I'll happily use over JS any day, though the build system still occasionally mystifies me.

<comment><USER8> I agree with this, Clojure being hosted means you have to understand the host decently enough. This is a downside and an upside since Java and JS are large, popular ecosystems. But in some cases I wish there was the option to just compile a binary. As for now, I can't recommend the language to people who don't already now Java and/or JS. (Maybe WASM/WASI will open this door at some point.)

<comment><USER4> There is now an option to compile a binary, it uses GraalVM native-image technology

We're growing a scripting ecosystem in Clojure now thanks to this, it's still relatively new

As a newcomer, I've made several native binaries for different operation systems

<comment><USER9> GraalVM does not solve the reliance on the underlying host (JVM, Java) problem.

<comment><USER4> Well that depends what you define the host problem to be

End users can certainly run Clojure programs natively without having the JVM installed on their machine

<comment><USER10> You can do that without Graal using jpackage. The only boon of Graal is native binaries and interop. But if you want to ship the JVM the user doesn't need it installed.

<comment><USER11> I wonder if native apps built with Graal or jpackage could be accepted at the Apple macOS and Windows app stores?

<comment><USER10> Graal probably. Apple seems to not like JITs so shipping the JVM might be out of the question.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER12> Fair warning to anyone picking up Clojure / ClojureScript: it can make you less productive by making your old tools insufferable.

It's like taking an automatic 2.5L turbo Subaru w/aircon for a spin and then getting back into your 1.3L Toyota Tazz - daily driving won't be as fun again for a while.

Lisp "ruined me" for a few years because after trying it I couldn't stand using anything that dit not have macros and Paredit. It's like the saying, "Beware of tasting freedom; it can make you psychologically unemployable."

For example, dealing with the abomination that is JSX when I could just write a pure ClojureScript function that returned Hiccup data structures that gets rendered to HTML. And you get isomorphism for free (one codebase on client and server).

I initially switched to Clojure for Datomic (the killer app for Clojure, IMO), but now I mainly write ClojureScript and use DataScript (datalog on the client) in every project.

<comment><USER8> Datomic really is a killer app in terms of its features, but it doesn't seem to be targeted at solo/small teams with its pricing and licensing model.

Datascript looks interesting. I guess you get disk persistence with event sourcing?

<comment><USER13> JUXT's Crux database[1] is worth looking at. It's open source and free. It is also an immutable, time-traveling, event-sourced database with a datalog query engine. Datomic is still more fully featured in a lot of ways, but Crux's concept of bitemporality is pretty interesting and something I've been wanting to explore deeper.

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

</comment></comment></comment><comment><USER14> Clojure is a decent language. I've worked with it a good deal in work. But I would take any functional language with types over it. Some thoughts:

\- its dynamic-ness makes it not suited to large projects IMO.

\- The currently-accepted attempt at a non-type-system-type-system 'spec' is not well thought out.

\- Biggest wins I think are immutability by default, homoiconicity, and "simplicity"

\- The repl is fine but can be a crutch -- see startup time

\- Clojure still hasn't really found a niche, and I'm not sure I would ever reach for it first unless I was integrating with other clojure projects.

<comment><USER15> > But I would take any functional language with types over it

Which is what? Scala? Haskell? OCaml? F#? Typed Racket? Idris?

I think Clojure really hits the sweet-spot between stupidly boring, "pragmatic" PLs and idealistic, novelty, academic ones.

Haskell is awesome, but realistically it is really difficult to quickly train someone to the point of them being able to write production-ready Haskell code.

Scala has its own warts (besides, Kotlin seems to be slowly eating its pie);

OCaml still struggling to get any recognition in the industry, despite all attempts from a few good players.

I disagree with the notion that Clojure is not suited for large projects, but I agree that Spec needs to be improved (and it is being actively worked on). And I don't think it is not well thought out. Rich Hickey is famous for slowly, carefully, patiently designing things. Stability and predictability of Clojure and its standard library is phenomenal. For every single language (even those I have never worked with) I can probably name a thing or two off my head that involved breaking changes. Not for Clojure.

<comment><USER16> >>Which is what? Scala? Haskell? OCaml? F#? Typed Racket? Idris?

These days Java works just fine. Why use anything else, that neither has dev mind share nor the library ecosystem remotely the same as Java.

<comment><USER13> When I was last at a Java shop, we we're pushing multiple-thousand line PRs every week, a good 40% of those lines were simply boilerplate generated by IntelliJ, and it would have been worse had we not fully instrumented our codebase with Lombok, and all this was for a pretty mature product that wasn't seeing any radical changes from day to day. At the clojure shops I've worked at since, we're building more and delivering product faster, and we're doing it on the JVM with less than a third of the lines of code. A thousand lines of clojure is a significant refactor or a big feature. A thousand lines of java is wednesday.

For me, clojure provides a simple-to-use API, high-level functional abstractions, an instantaneous feedback loop, access to a battle-tested JVM ecosystem, and more than fast enough performance. This is its killer combination, in my opinion. The immutable-by-default data structures are also an underappreciated boon for writing multi-threaded code without breaking a sweat.

<comment><USER17> > When I was last at a Java shop, we we're pushing multiple-thousand line PRs > every week, a good 40% of those lines were simply boilerplate generated by > IntelliJ

This actually one of the things I like about Kotlin - many of it features are similar in effect to pre-generated boilerplate - but it lives as part of the run-time, not in your code.

On the flip side, a new version of Kotlin could potentially introduce/reveal bugs - but at least you don't have to deal with four different generations of outdated boilerplate when diving into old code...

</comment></comment></comment></comment></comment><comment><USER18> Learning and switching to Clojure as my primary language is the best decision I've made in my career (which is relatively short at 10 years, I'll admit).

It's probably somewhat decreased my earnings compared to trendier languages, and I worry that the market for Clojure developers is small and fragile which might bite me in the future... but I've never been happier doing my job than I am since I've started working with Clojure!

\- The language itself is beautiful to read and write, minus a few warts that take some getting used to here and there.

\- The jobs that are there tend to be smaller teams at larger companies which is my preferred type of setup.

\- The community is mostly self-selected and tends to be fairly friendly.

\- Working with the REPL feels like having a conversation with your computer, teaching it how to do what you want it to do vs fighting with a compiler.

\- I like the "batteries not included" ethos - everything is a library and I can pick and choose what I like.

\- Working on the JVM means I get access to untold thousands of Maven packages plus the JVM itself which is a very solid system.

<comment><USER19> > It's probably somewhat decreased my earnings compared to trendier languages

Odd, considering that Clojure is the best paid language according to the Stack Overflow Developer Survey:

[https://insights.stackoverflow.com/survey/2019#work-_- salary...](https://insights.stackoverflow.com/survey/2019#work-_-salary-and- experience-by-language)

[https://insights.stackoverflow.com/survey/2018#work-_- salary...](https://insights.stackoverflow.com/survey/2018#work-_-salary-and- experience-by-language)

<comment><USER20> That effect is probably much more so about where the language is used (US vs elsewhere primarily) rather than how much people get paid for that language in a particular place.

<comment><USER21> I find that at least in The Netherlands the vast majority of job offerings are quite conservative in their 'stack'. It's nice that they are now okay with React rather than only Angular, or Python instead of just PHP, but finding a Clojure or Elixir shop is still much like finding a unicorn. And my impression is that this is true in most of the EU.

<comment><USER22> We have a few in Copenhagen. I've worked at a small startup using Clojure and a big government project using both Clojure and ClojureScript. I've also interviewed at one of the big car pooling apps here and they used Clojure. Now I'm working at a university also writing my code in Clojure and ClojureScript.

But you do have to be diligent and spend some time to search for them. That stack you mentioned is definitely extremely common here too. And in the uni department where I work now the existing research code is still all LAMP stack and Java, so I'm trying to skip a generation of tech and get straight to modernity by introducing Clojure here.

</comment></comment></comment></comment></comment><comment><USER23> I'm a Web developer the most of the time and I tried to jump back and forth between languages and communities in my spare time to check out if there are some ideas that could interest me. I found dynamic language communities are most inspiring to me, just like the old Ruby community.

I found the Clojure community is really fun. I tried Fulcro/Pathom, it's like GraphQL but much more flexible. And also there are open-source alternatives to Datomic like DataScript in the browser, and Crux is also very promising. I always wonder what if we bring some Prolog/Datalog to day to day programming, and those are the ideas well implemented and polished.

Another interesting community I found is Elixir, Phoenix Liveview is very fast to not only prototyping but also achieve high performance.

As a comparison, most statically typed languages community spent most of their time climbing the lambda cube, or in another word, struggle with correctness and expressiveness. It's not necessarily a bad thing - on the contrary, it's applausable. But I found most of the statically typed languages are focusing on those similar things rather than exploring new directions with would be more weird and fun.

</comment><comment><USER24> I tried out Clojure for a personal project about a year ago, just to see.

The tooling situation definitely needs some work. Compared to the batteries- included setup of Cargo or NPM, it felt pretty slapdash. The fact that Leiningen is both the go-to and unofficial was a tad bewildering.

Once I got set up, the development experience in VSCode was also quite underwhelming. I've never liked CLI editors and I didn't want to shell out for IntelliJ, so it was my best option, but it didn't offer much beyond indentation and inline eval (the latter was cool, but the lack of basics like autocomplete outweighed it).

These factors obviously aren't as relevant at a company that already has a standard way of doing things, and maybe the situation has improved since I tried, but it really put a damper on the "hit the ground running" experience which is important for gaining initial traction with developers.

All of that said, I can see the language being really pleasant to use in the right context. Most of my hobby projects involve GUIs and/or graphics, so I haven't done any more Clojure since. If that weren't the case maybe I would've put in the extra time to really figure out a good environment for it.

<comment><USER25> A few of these things may differ from when you tried Clojure out last:

> The fact that Leiningen is both the go-to and unofficial was a tad > bewildering.

Clojure now has an official, built-in CLI that mostly supersedes Leiningen.

You can just install Clojure itself, create a 'deps.edn' (which can be as simple as '{}') and get going at a REPL by running 'clojure' or 'clj'.

Packages are auto-installed - in some ways I find it even easier than node, where npm is a separate tool/install sometimes. :)

> Once I got set up, the development experience in VSCode was also quite > underwhelming.

There's a VSCode editor plugin called Calva[2] which has developed pretty thoroughly over the last year or so. Outside of IntelliJ/Cursive, it's starting to become one of the more feature-complete systems and it has plenty of features that you'd expect.

[1]: [https://clojure.org/guides/deps_and_cli](https://clojure.org/guides/deps_and_cli)

[2]: [https://marketplace.visualstudio.com/items?itemName=betterth...](https://marketplace.visualstudio.com/items?itemName=betterthantomorrow.calva)

<comment><USER24> I believe Calva is what I used, but it's entirely possible that it's gotten better since then

<comment><USER25> > it didn't offer much beyond indentation and inline eval (the latter was > cool, but the lack of basics like autocomplete outweighed it)

It definitely has intellisense/autocomplete now, so that at least is one point of difference from when you last saw it. :)

<comment><USER24> Good to know!

</comment></comment></comment></comment></comment><comment><USER26> EDN is a brilliant literal for data, and since it offers more types than JSON, I would love to see it catch on in the places that now use JSON, especially in APIs. JavaScript has a complicated early history and even though one can use objects as a key value map, it's not quite a map, in JavaScript. EDN does have the advantage of being a clean implementation of its idea.

On a different topic, I've read that almost 50% of computer programming work is just building database views and providing GUIs so non-technical people can interact with databases. Making this work easy used to be a major goal of multiple corporate products. One reason VisualBasic had such a devoted following is that it made it so damn easy for novices to build a GUI for a database.

In recent years the industry has moved towards HTML as the default way to build an interface for anything on a network, but HTML continues to lag when it comes to forms. You have to use a mountain of JavaScript to get the form functionality of VisualBasic. We've actually gone backwards on ease of creating database GUIs. Yes, in theory you can use something like React to build forms, but the dev using VisualBasic would be done with the project while you're still waiting for npm to finish downloading your dependencies. And React requires more skill. VisualBasic had a wonderfully gentle learning curve. Likewise, Ruby On Rails (and other frameworks including Symfony and Django) have scaffolding that allows the fast construction of HTML forms, but, again, HTML is a limited method of building forms.

I'd love to see Clojure succeed in this space, building corporate GUIs for databases. How to do that? Is a new GUI technology needed? Towards that end I'd love to see EDN used as a config language to define a scaffold for forms. There are elements of Swing that worked well and could be rescued from the larger wreckage of Java GUIs. And JavaFX represents a huge "road not taken" for the whole industry.

The tech industry has had eras when it focused on opening the door to beginners. Those eras gave us HyperCard and Flash and VisualBasic. Right now the industry seems to be undergoing an episode of gatekeeping. We are requiring beginners to learn React, which is a big eco-system, and also stuff like Docker, which is tough for beginners. The point of making so much tech mandatory for even simple projects inevitably keeps some people from discovering the joy of programming.

Clojure is the most fun language that I ever worked with, and it's conceptually simple and it has EDN as a data literal language, all of which is a kindness for beginners. If it also had a simple method for building GUIs I believe it could help lead the industry into the next era when we again focus on making programming accessible for beginners.

<comment><USER27> > I'd love to see Clojure succeed in this space, building corporate GUIs for > databases.

Looks like you're finding HyperFiddle[0].

Quoting from the website:

> Low-code databases, developer-grade

> Hyperfiddle lets you make lightweight database applications out of just > database queries.

It's Clojure based, uses the EDN notation, and doesn't require writing a lot of code. It basically translates the Datomic database[1] queries into tables (which can be exported to react components and styled appropriately).

[0] [http://www.hyperfiddle.net/](http://www.hyperfiddle.net/)

[1] [https://www.datomic.com/](https://www.datomic.com/)

<comment><USER26> No, Hyperfiddle is exactly what I think we need to get away from. This is from their introductory blog post:

" _For a high-end UI, use React.js. The above cryptocurrency invoicing MVP generates QR codes using a javascript module from github. This blog post is a hyperfiddle and includes React.js components, CSS, HTML5 video components, mailchimp & twitter integrations_"

Hyperfiddle is basic scaffolding of the type we've had for 15 years thanks to Ruby On Rails. I'm suggesting it would be good if we could get beyond this level, since we have been stuck at this level for a long time.

Hyperfiddle does use EDN for configuration, and I really like that part of it, but it's still using HTML, which, as I said above, doesn't give us the form functionality that VisualBasic did.

</comment></comment></comment><comment><USER28> I'm glad that Clojure users seem happy with their language. But it seems like a worrisome sign that their survey has roughly the same number of respondents year after year...

* 2020: 2519 responses

* 2019: 2461 responses

* 2018: 2325 responses

* 2016: 2420 responses

<comment><USER29> Because with modern Javascript you get most of the niceties of Clojure (immerjs for immmutability, lodash for data processing, babel for macros) without the disadvantages (no job market, no ecosystem). The debuggers in JS are so good that you don't need the Clojure repl. JS under v8 is also faster at raw processing(single thread but there are also workers now) unless you write Java with parenthesis, which at that point, you are not writing clojure anymore.

OTOH, Rich Hickey has influenced(in good way) a generation of programmers and doesn't get credited enough.

<comment><USER30> Debuggers are not a replacement for REPLs. The magic of the repl is to be able to recompile and reload exactly one function or form, for instance. Even if it is really fast most JavaScript setups require recompiling a whole file and likely reloading the whole page to test.

Clojure also has debuggers: you can debug from either Cider or Cursive, for instance. I'm not that familiar with debugging outside of those two though.

<comment><USER15> > Debuggers are not a replacement for REPLs.

Nothing is a replacement for a good, "true" REPL. Being able to evaluate any [sub]expression, without any kind of ceremony, anytime, from anywhere in your code is incredibly liberating. Who never used Lisp seriously, would never understand how amazing that workflow is.

I think REPL is the main reason why we still have Lisp dialects. After over six decades Lisp is still alive and thriving.

<comment><USER30> True! For a long time I was looking for the mythical "livecoding" setup, thinking some experimental programming language was needed or something, when all the while Clojure was there, just waiting for me :-)

In that way I feel Clojure's defaults to immutability go a step beyond what's offered in most Lisp's setups. Not everything "just works" though, thought is still needed in order to have certain things be easily reloadable. I'm talking things like using "defonce" forms and having a setup like described here [1].

I'm still exploring this space but I think the gist of it is to create a direct acyclic graph of dependencies, so you can start and stop exactly what you need, not unlike what build systems do.

1: [https://lambdaisland.com/blog/2018-02-09-reloading- woes](https://lambdaisland.com/blog/2018-02-09-reloading-woes)

</comment></comment></comment></comment></comment><comment><USER31> It's really unfortunate that the Clojurians Slack, being free, lacks good history. So much knowledge is disappearing, or at least becoming inaccessible (I'm sure someone has logs, probably via alternative clients or bots).

Hard to move a community though.

<comment><USER32> The clojurians zulip chat[1] offers a free, full-text-searchable archive of slack.

Also, IMHO it's much better than slack for chatting. If only everyone switched!

[1] [https://clojurians.zulipchat.com/](https://clojurians.zulipchat.com/)

<comment><USER33> It's probably me but I can never seem to get Zulipchat to work for basic things like pulling up the history of #jobs.

<comment><USER34> [https://clojurians.zulipchat.com/#narrow/stream/180378-slack...](https://clojurians.zulipchat.com/#narrow/stream/180378-slack- archive/topic/jobs)

Or you can search (/) and type stream:slack-archive topic:jobs

</comment></comment></comment></comment><comment><USER35> I started writing Clojure professionally last year. It's an incredibly relaxing experience. I attribute that to most of the code being pure functions that operate on plain data types (maps, lists), combined with the delightful experience of structural editing.

My largest issue is spec.alpha, which is far from perfect. spec-alpha2 should fix many of my complaints, so I'm looking forward to its first release.

</comment><comment><USER36> It's hard to want to choose Clojure when it's hard to know where to start. I saw "CojureScript" followed by "ColjureCLR" and just blacked out... I'd like to learn a lisp and I hear clojure is the jam, but seeing that ecosystem exists, while flexible, makes it seem like 90% of it will be learning the tooling and not the language... It just makes me think "hmmm. I need the JVM, might as well use Java... at least it'll be predicatable straightforward, and EXTREMELY well documented, in it's convoluted-ness[1]"

Can someone please sell me, or assure me, otherwise?

[1] Which is also high... I can barely get a JVM project running these days with the plethora highly foreign of build tools, IDE dependencies/configurations, and language settings. Maybe that's just par for the course in 2020 on the JVM, with great power comes great complexit?

<comment><USER30> There are all sorts of bells and whistles you can choose when it comes to Clojure, but I would recommend you focus in one thing for a start, just plain Clojure with the JVM.

Download a Clojure jar [0], the following command opens the REPL:

        $ java -jar clojure-1.10.1.jar

... you can also run the file you are editing:

        $ java -jar clojure-1.10.1.jar file.clj

... that's it! You can go a long way just like that, the start up time of running scripts is not that bad.

Gradual improvements:

* Perhaps install a clojure package [1] instead of using the jar. The jar is nice to understand the main Clojure compiler is at its core just that, a Java program... but the package installed with brew or apt will probably (depending on your OS and how up to date the packages are) also give you a global `clojure` or `clj` command that you will see around in tutorials. Just makes it easier to follow the tutorials!

* Use rebel-readline [2]. Just follow the readme!. It gives you a nice coloured command line REPL with all sorts of cool features, but you don't need to make use of all of them at once. Take your time!

* Choose an editor with good integrations. Obvious choices: VSCode+Calva extension, IntelliJ+Cursive, or Emacs+Cider. The main thing about having a good integration is the instantaneous feedback of sending chunks of code to the REPL, although for a slow start you can do the same just copying and pasting code from the editor to the REPL!

About books: I read 3 or 4 different ones... most books I read were pretty good, some of them are available online for free! Confidence comes from writing lots of code mostly, though, not just reading. I'm not proficient enough yet that I remember the APIs yet so books help to gimme a cohesive roadmap of things to learn.

Suggested little "project": I also found this library [3] that is cool to play a bit with random things to produce some graphical output. It is a wrapper around Processing.

Good luck!

Caveat: there are many ways to do teh same thing. This comes from a focus on libraries over frameworks. Also, the whole JVM API is available to you so for a lot of things you are supposed to just use the Java APIs. Don't bother about wrappers or clojars for a start, just call Java from your clojure. Is fast, fun and easy! :-) Pick one way of doing things and do it for a while... even if it doesn't give you the "fullest of the performance" for any given task, it will be an OK vehicle for you to learn and get familiar with the ecosystem. Classical example: http servers.

0: [https://repo1.maven.org/maven2/org/clojure/clojure/1.10.1/](https://repo1.maven.org/maven2/org/clojure/clojure/1.10.1/)

1: [https://clojure.org/guides/getting_started](https://clojure.org/guides/getting_started)

2: [https://github.com/bhauman/rebel- readline](https://github.com/bhauman/rebel-readline)

3: [http://quil.info/](http://quil.info/)

<comment><USER37> You can't actually use the Clojure jar like this with java -jar as it has a couple of dependent libs (spec.alpha and core.specs.alpha). But getting started with the `clj` tool is just as easy.

<comment><USER30> My bad! I tested it my system and it worked, but I'm sure I have the jars in the classpath already because I had already installed Clojure through a packet manager.

So! Clojure 1.8 still works without dependencies for trying the jar [1]. Otherwise, I'd skip to installing 1.10 through the system installer.

1: [https://repo1.maven.org/maven2/org/clojure/clojure/1.8.0/](https://repo1.maven.org/maven2/org/clojure/clojure/1.8.0/)

<comment><USER38> See my post above, just build the clojure jar yourself using the ant instructions, and it will be portable again.

</comment></comment></comment></comment></comment><comment><USER39> Clojure is hands down my favorite programming language till date, and I've used a handful at this point. Got professional experience with C++, C#, ActionScript 3, Java, JavaScript, Scala and Clojure. And I've toyed with Python, Kotlin, Rust, Haskell and Elixir a fair bit. Still, I'd say Clojure is my top. Its just well thought out, to the point, and so fun.

Wish the core team many more years of work, and I hope the ecosystem stays afloat, and prospers.

Also, kudos to never breaking my code! That quality is so underappreciated.

</comment><comment><USER40> This survey reinforces a positive feedback loop. "Clojure is great because Clojure is great".

For a " _state_ of X" survey it would be nice to see questions like "what are the biggest hurdles, problems, issues". For example, State of JS drills down to language features, syntax, overall happiness, frameworks etc.

E.g. the author of Rum and Datascript re-wrote his ICFPC submission from Clojure to Rust and gained 17x speed increase [1]. This could be something to poll.

[1] [https://mobile.twitter.com/nikitonsky/status/114850460921383...](https://mobile.twitter.com/nikitonsky/status/1148504609213833216?lang=en)

<comment><USER41> There actually is a question in the survey, "What has been the biggest obstacle to using Clojure?", but it's not highlighted in the blog post.

</comment></comment><comment><USER42> The question for me is where do I find remote clojure jobs? Playing with it is all fine and all. But how about making it a full-time thing?

Most job boards have next to no entries and clojure boards are mostly US only.

</comment><comment><USER43> Any clojure shops in Montreal? Or Canada in general?

<comment><USER44> I think yogthos (author of Web Development in Clojure (book) and Luminus (web framework) is in Toronto and leads a gang of clojurists.

</comment></comment><comment><USER6> Is Clojure ever going to treat Windows as a first-class platform?

[https://github.com/clojure/tools.deps.alpha/wiki/clj-on- Wind...](https://github.com/clojure/tools.deps.alpha/wiki/clj-on-Windows)

"Currently, clj on Windows is in an alpha state."

<comment><USER45> Leiningen is well supported on Windows, I can't speak for boot. Clojure has only had built in command-line tooling since 1.9, and the whole thing is still considered alpha.

</comment></comment><comment><USER46> Clean Code, Episode 0. The Last Programming Language by Uncle Bob (Robert C. Martin) — worth watching for those who need reasons.

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

</comment><comment><USER43> Some people say that their organization have 100+ people using clojure? Where?

<comment><USER47> The company I currently work at, FundingCircle, hosts the SF Clojure meetup and uses Clojure for a number of accounting systems.

I'm not a huge fan of the language myself, but it does have it's strengths.

<comment><USER43> I guess you mean FundingCircle? How many devs on clojure?

<comment><USER47> It changes over time with new hires and attrition, but by my last count somewhere between 30 and 40 in the SF regional office. There are more in other regions, but I'm unsure as to the total number.

</comment></comment></comment></comment><comment><USER43> Where do people find Clojure jobs??

<comment><USER48> The #jobs channel in Clojurians slack ( [http://clojurians.net/](http://clojurians.net/) ) and the sites on this list [https://purelyfunctional.tv/guide/clojure-jobs- resource](https://purelyfunctional.tv/guide/clojure-jobs-resource) are great starting points.

<comment><USER43> thanks!

<comment><USER13> I've also found them on LinkedIn and angel.co in the past.

</comment></comment></comment></comment><comment><USER49> Isn't Clojure an extremely unpopular language (outside HN)? I mean, it's not even in the top 50 in TIOBE index.

<comment><USER37> TIOBE is garbage. It is primarily based on google search hits. Red Monk's ratings are based on github and stackoverflow (which Clojurists actually don't use much) and typically has Clojure around 25, which I think it is a defensible ranking. Best estimates of devs using Clojure are 20k-50k (based on multiple sources, some public, some private).

<comment><USER13> Wow, TIOBE has Object Pascal, Assembly, D, and PERL in the top 20. Also, MatLab over Objective-C. Meanwhile, Typescript is at 46, well below Julia, COBOL, Ada, and Rust (don't get me wrong, great language, but I'd be surprised if it was more widely adopted than Typescript).

Its method for ranking seems problematic.

<comment><USER50> It has been shown that TIOBE tends to not be very robust. If you change the metric from searches of "X programming" to "X language", you can can swing the results of many languages up or down by 20 spots. [https://juliacomputing.com/blog/2019/09/16/tiobe- blog.html](https://juliacomputing.com/blog/2019/09/16/tiobe-blog.html)</comment></comment></comment></comment>


Airport Security Bins Carry More Viruses Than a Toilet - <AUTHOR> https://thepointsguy.com/news/airport-security-bins-carry-more-viruses-than-an-airport-toilet/ <comment><USER2> > Rhinovirus, the virus that causes the common cold, was detected the most. > The researchers also found traces of the influenza A virus. Swabs of toilet > surfaces did not reveal any respiratory viruses.

Is the null expectation that respiratory viruses, which are expelled through the mouth and nose, should be found on a toilet seat, where you sit?

</comment><comment><USER3> now imagine the floor, which you walk barefoot. Before putting back your shoes, which will stay on for 4~18h.

<comment><USER4> The worst was probably payphone handsets, back when they mattered.

<comment><USER5> And now we have cellphones that people take in the bathrooms with them....

<comment><USER6> Like anyone talks on the phone these days...

<comment><USER7> No, they just sit on the toilet and tap all over the screen with their fingers.

<comment><USER5> Yep.

[http://time.com/4908654/cell-phone-bacteria/](http://time.com/4908654/cell- phone-bacteria/)

</comment></comment></comment></comment></comment></comment><comment><USER8> Most stuff carry more viruses than toilets. Many of these things are found in the kitchen.</comment>


Ask HN: Is the OSCARS Biased Against African Americans? - <AUTHOR> In October 2015, Paul Graham proposed "A Way To Detect Bias." I think that it would be not boring to determine if this method can detect bias by the OSCARS against African Americans. I am busy. This is my attempt to Tom Sawyer Hacker News into doing it for me. <comment><USER2> It is not biased. While the constituency of the Oscars is ~75% white males we are talking about the _most liberal_ "white" body of individuals on the face of the Earth. This wasnt a vote in the backwaters of the South.

Actors such as Clooney, Angelina Jolie and others are world renown for their Activism. Now the media and black activists seems to be saying "well 50% of the videos aren't Black nominations".

Well, movies have to touch your heart and you have to be able to relate to them. Sorry, I don't relate directly to current black starring movies. I dont care about Medicine or Will Smith. The sum of the years black movies (for me) wasn't on topics I find interesting and which I have difficulty relating too. So why would that engender votes by Hollywood when the majority of oscar voters also aren't black and don't relate to the subject matter of the movie either -- of course other nominations (non-black) will win out.

I love star wars, and the very mainstream movies that were top box office winners this year. Someone do a study of per-month in 2015 what the top 5 grossing movies were, out of how many of were black leading roles, vs non- black roles. Show me a significant stat and that may change my opinions.

Edit: I just saw Hateful8 and it was a great movie and SLJ did an awesome job, but I assume that will be in next years Oscars maybe .... :P

</comment><comment><USER3> It's impossible to detect bias in systems that are intended to be meritocracies when "merit" is subjective or related to luck. In the case of acting, merit is highly subjective.

Furthermore, trying to turn this into a "data" experiment by looking at past results is also pointless because the Academy has changed over time and every movie is different. There are too many variables.

Trying to say that the Academy is "racist" or "not racist" based on the nominations is ludicrous.

The only possible solution is to make the Academy as representative of the United States as possible and then accept whatever nominations they put forth as "probably pretty unbiased".

</comment><comment><USER4> Not according to: [https://i.imgur.com/T2TqB9s.jpg](https://i.imgur.com/T2TqB9s.jpg)

Although that excludes the data point for 2016 where there will be zero winners.</comment>


Top 20 Replies by Programmers when their programs don't work - <AUTHOR> https://twitter.com/Binpress/status/441438275312836608/photo/1/large <comment><USER2> I'm guilty of several of them ;-)

<comment><USER3> Every programmer is.

Also it is missing the classic "yes yes, I'm aware of that problem and if people stopped telling me about it then I'd have time to fix it"</comment></comment>


Ask HN: Is what Google doing truly unethical? - <AUTHOR> The past few years have seen a rise in chants against Google's practices and its violation of privacy. But the way I see it, no company dealing with large amounts of data ever wants to let go of any data they can capture. That's how systems learn. More data = more context (usually). I do agree that algorithms can be more efficient and steps should be taken to plug hacks and data leaks, but here's mt question to you: Is it hoarding data that is considered wrong (even though it's used to improve one's digital experience)? If yes, how else would a company like Google create what they have now? If no, what is? <comment><USER2> For me, what's unethical about Google's behavior is that they have mislead people about what they do with it. They've used dark patterns in their UI to keep people from opting out. And they've turned over data to police and governments voluntarily without warrants.

</comment><comment><USER3> It's tough to say for sure what they are currently manipulating about your experience because they have so many vectors they can use. But I think the issue is that the amount of data they are collecting goes beyond the "lets improve the experience" argument. For example google "reads" all of your gmail[0]. They might want to do this for better targeted advertising which isn't nefarious (though it does exchange your privacy for the sake of their bottom line), but I think you or me would prefer they didn't in favor of less precise advertising. Same goes for your search results.

True they have the right to use your data since you used their apps, but as far as search/email goes I don't think it's too far off to suggest you don't have that many alternatives- and you probably don't have any reasonable alternatives that don't read your emails or track your search. In situations like this I think a lot of people would prefer their government step in and have a large amount of oversight into their business practices so thats probably where all the sentiment is coming from.

[0] [https://www.makeuseof.com/tag/google-third-party-apps- read-g...](https://www.makeuseof.com/tag/google-third-party-apps-read-gmail/)

</comment><comment><USER4> There is NO anonymity online. That's a fact. Data hoarding leads to behavioral profiling and centralizing behavioral profiles side by side leads to profile scoring. It's inevitable. Will it be abused for profit? Without laws, yes. Will laws be there in time to prevent the unethical abuse? We will see.</comment>


Scientists observe a new quantum particle with properties of ball lightning - <AUTHOR> https://phys.org/news/2018-03-scientists-quantum-particle-properties-ball.html <comment><USER2> Keep on physicing physicers

</comment><comment><USER3> Not new, not a particle.

Original paper: [http://advances.sciencemag.org/content/4/3/eaao3820.full](http://advances.sciencemag.org/content/4/3/eaao3820.full)

Lighter, yet still accurate reading: [https://www.sciencenews.org/article/knotted-structures- calle...](https://www.sciencenews.org/article/knotted-structures-called- skyrmions-seem-mimic-ball-lightning?tgt=nr)

<comment><USER4> True, not a particle like the Higgs boson, and not new in the sense that we've seen skyrmions in thin films. But this is the first time the phenomena has been observed in a free 3D object (Bose-Einstein condensate), with a 3D knotted magnetic field.

<comment><USER3> I'm not sure why, but your comment was dead, so I vouched for it. To your point, you're right, but the title is still quite misleading and doesn't have to be.

<comment><USER4> I personally am not a fan of phys.org for that exact reason - headlines are overhyped to the point of clickbait.

<comment><USER3> I totally agree, and besides if it's on Phys.org, they ripped it off someone else to begin with.

By the way, your comment was dead again, you might want to email a mod?

<comment><USER5> _By the way, your comment was dead again, you might want to email a mod?_

The guy only has 3 posts total to his name, including the one you are responding to.

Although I don't think it matches dang's recent comments about why some accounts are dead / shadowbanned, I'm speculating that under certain circumstances, new accounts might just start out dead and need to get a number of upvotes before their posts aren't automatically dead?

I know that sounds a little strange, but I've seen a number of relatively new accounts that are dead and yet don't seem to be spam or trolls. There's a little bit of secret sauce going on that HN doesn't want to be fully transparent about.

<comment><USER3> Ever since I turned on "show dead" I've noticed that too. Of course the sheer volume of spam that's intercepted thst way is impressive too. The mods are so responsive that I think on balance, it's a very good sauce.</comment></comment></comment></comment></comment></comment></comment>


The Exceptional Beauty of Doom 3's Source Code - <AUTHOR> http://kotaku.com/5975610/the-exceptional-beauty-of-doom-3s-source-code

<comment><USER2> I would like to see the horrible code mess of modern studio games.</comment>


A Bitcoin Transaction for over a Billion USD - <AUTHOR> https://whale-alert.io/transaction/bitcoin/4410c8d14ff9f87ceeed1d65cb58e7c7b2422b2d7529afc675208ce2ce09ed7d <comment><USER2> That's a lot of fentanyl</comment>


Why Scholars and Programmers Need to Talk - <AUTHOR> http://www.whatdigitalrevolution.com/?p=171 <comment><USER2> To pick out one particular point: "3. We need more than just the imperative mood". The author states that all programming languages are in the imperative mood (which is pretty shaky, considering the long history of declarative languages), and that this is a problem because we need programs to be "art and literature". What? Can somebody explain that to me?

Besides, to parallel his later argument about games (which I disagree with, but... maybe some other time): when was the last time you executed a great piece of literature? What does Moby Dick print when you run it?

I agree that scholars and programmers should talk to each other about their studies, but I doubt that this article contributes much to the discussion.</comment>


Robotiky: Make coding into child's play - <AUTHOR> https://www.kickstarter.com/projects/robotiky/robotiky-make-coding-into-childs-play <comment><USER2> Lost interest when I saw rewards that include "logins" and "licenses" combined with no mention of plans to open source.

I don't mind (and on occasion actually enjoy) paying to help develop or maintain software, ditto to help develop, maintain, or manufacture hardware. But something like this should be fully hackable, and these days I won't pay for anything less.

<comment><AUTHOR> It is based on the arm mbed system.

[http://mbed.org/blog/entry/Robotiky-Robot- Kickstarter/](http://mbed.org/blog/entry/Robotiky-Robot-Kickstarter/)

So it is fully hackable running anything you write on that.

<comment><USER2> From your link, emphasis mine, "The team prototyped the idea using an mbed- enabled NXP LPC1768 prototyping board, _and then transitioned to a full custom design_ using the mbed HDK for NXP LPC11U24 board based on an ARM Cortex-M0+."

So the hardware may support hacking, but their software isn't designed to be hacked (e.g., requiring licenses).

<comment><AUTHOR> I think it is important that the hardware is based on a big opensource platform – it means you are never going to have an expensive paperweight. With the software it is transitioning to use standard programming languages – so you get the full hackability of those later on. If there was sufficient demand from users then the software could be open sourced – definitely intend for people to be able to create their own programs and share them.

</comment></comment></comment></comment><comment><USER3> Those bump sensors would be snapped off in ten minutes in my household. How hard would it have been for them to slap a Sharp Infrared sensor or two on there?

[http://www.sharpsme.com/optoelectronics/sensors/distance- mea...](http://www.sharpsme.com/optoelectronics/sensors/distance-measuring- sensors)

Having come back from Botball, I have to say that overall this robot doesn't feel fully baked.

<comment><AUTHOR> Swapping out the bump sensors for IR is something that we really want to do, we just have to finalise the manufacturing details.

The robot shown is just a prototype, the shipped product will have _at least_ the functionality we have stated - and probably a lot more.

<comment><USER3> I'm sorry, but _what_? This is robot design 101. How could you not have included this in your initial prototype?

</comment></comment></comment><comment><USER4> So it's pretty much a physical Logo?

[http://en.wikipedia.org/wiki/Logo_(programming_language)](http://en.wikipedia.org/wiki/Logo_\(programming_language\))

<comment><AUTHOR> We drew some inspiration from Logo, but Robotiky progresses to a much higher level than Logo.

<comment><USER5> There is quite a bit more to Logo than turtle graphics. It is a complete programming language; essentially a dynamically scoped m-expression Lisp with support for fairly sophisticated functional programming[1]. In what way is your system "much higher level"?

[1] [http://www.cs.berkeley.edu/~bh/v1ch0/preface.html](http://www.cs.berkeley.edu/~bh/v1ch0/preface.html)

<comment><AUTHOR> Sorry - I had logo, and the turtle robot's that run it, mixed up:

[http://en.wikipedia.org/wiki/Turtle_(robot)](http://en.wikipedia.org/wiki/Turtle_\(robot\))

I was comparing the turtle robot I used when I was younger to the Robotiky robot (I appreciate that it is also possible to build a very sophisticated turtle robot).

</comment></comment></comment></comment><comment><USER6> Personally I really like the Lego NXT sets. All three of my younger brothers had the opportunity to use them through after school programs and it was a great introduction to simple programming.

I guess the disadvantage is the higher price point.

<comment><USER7> As you may know, Lego now has the EV3, which includes some enhancements.

</comment></comment><comment><USER8> It looks great but their is a lack of an About Us section on the website.

I'm worried about the website not being maintained and the Robotiky becoming an expensive paperweight.

<comment><AUTHOR> I can assure you that it will be maintained. John and I are committed to this project and have been working on it full time, and will continue to do so.

</comment></comment><comment><USER9> Sweet, the wheels it uses are from K'NEX.

</comment><comment><USER10> £80 for a robot reward seems a bit too high.

</comment><comment><USER11> Their very first argument is "But we also know that kids love playing games, interacting with real objects, and making things."

Childhood should be about goofing off on tricycles, playing tag, and creating awesome Lego towers from a big box of blocks. I love programming now, but if I had started coding as young as the children in the video, I don't know if I'd be as jazzed about it as an adult.

Maybe the kids who play with these programmer-esque type of toys can potentially write better code when they're adults, but is it possible that the kids playing outside, reading the Magic Treehouse, or drawing pictures will be more well rounded, more cooperative, and overall better colleagues?

<comment><USER12> Chances are that kids learn how to be social from their parents. My kids read (past and present tense) fantasy stories, program NXT, play lots of sports, explore the backyard alone or with each other and are unfortunately fairly independent, just like me.

I do my best to raise them to be social and to make close friendships. They are quite the social butterflies but as their main influence, they copy a lot of my habits. As I had been on my own since my late teens, this meant that I've learned not to depend on others and surprise, they copied me.

Maybe these personality traits are correlated with programming robots but I don't think programming robots causes it. It's more what they are taught at home.</comment></comment>


A better use for 4.5 billion dollars - <AUTHOR> http://www.hashcollisions.com/2011/07/a-better-use-for-4-5-billion-dollars/

<comment><USER2> Yes, obviously that 4.5bn dollars will be put on a giant pile and set aflame, gone forever.

I'm no fan of software patents but the idea that money just disappears like that is crap.</comment>


Investing in Women-led Fortune 1000 Companies - <AUTHOR> https://www.quantopian.com/posts/research-investing-in-women-led-fortune-1000-companies

<comment><USER2> One possible explanation (pure conjecture) is that this is a consequence of the still prevalent sexist/old-boys-club mentality. Only the women who are so exceptional that there can be no question about their capabilities are the ones who end up on top. And the women who are equally qualified as the typical male CEO simply don't make it through the gauntlet.

This is an effect that minorities face in general. They have to be the absolute best in order to break through the glass ceiling. There are plenty of male CEOs who are utterly mediocre, and mediocre women never get a shot at the CEO spot.

<comment><USER3> Or, female CEO's are a more risky prospect than male CEO's and companies have different risk/reward motivations based on their situations. If a company's facing a tough grind for a few years they may be risk averse and stick with "safe bets" wherever they can.

Or, years of fighting "the patriarchy" has left females uniquely qualified to lead companies in the fight against changing market conditions.

Or, prospective female executives are probably very aware of the social and political climate we live in and that may make _them_ more risk averse in regards to accepting positions, _they_ may place a higher value on taking positions at companies on the upswing.

We can do this all day but I doubt the data's going to give a clear answer, we'll all see what we want to.

</comment></comment><comment><USER4> There's no discussion here of survivorship bias [1]. Without a discussion of how it is addressed, these results are highly suspect. Specifically, the benchmark takes into account those companies that lost enough value to fall out of the "bottom" of the index and are therefore not in your current list of companies. However its far from clear that your subgroup includes similar companies.

A naive approach to this analysis is as follows. Take all the companies currently in the Fortune 1000, and look to see which of them has had a female CEO in the period under study. Backtest with buys and sells on the dates of hire/termination.

If this is indeed how it was done, the benchmark will almost assuredly underpeform simply because of the underperformance of components that are no longer in the index today.

[1] [http://en.wikipedia.org/wiki/Survivorship_bias](http://en.wikipedia.org/wiki/Survivorship_bias)

</comment><comment><USER5> Looking at your graph, it's clear that you need to adjust for volatility. Your "Women CEO" portfolio is much more volatile during that period. Compare Sharpe ratios, not total performance.

After that, you may have to worry about dividends. I'm not sure if the platform takes them into account when you send buy sell order, but if it does, make sure you look at a portfolio that purchases SPY over that period, not merely the price, as the appreciation won't reflect the dividends paid.

<comment><AUTHOR> The Quantopian backtester pays dividends out in cash, and since I am rebalancing the portfolio each time I buy or sell stocks, I think that is covered.

Looking at the volatility is a good suggestion and definitely something to consider. I noticed the trend as well, but haven't dug into it yet.

<comment><USER6> You also may want to try betting on the spread between male-only companies and ones with at least one woman on the board. If the investment thesis is sound (board gender diversity is beneficial), this would be a good way to test it. It would also bring you into market-neutral territory.

<comment><AUTHOR> I wanted originally to go for board diversity, but haven't found that data set yet. I believe Morningstar has some of it, and am hoping to get my hands on it sooner rather than later.

</comment></comment></comment></comment><comment><USER7> The conclusion I'd draw that female CEOs are a indicator of a company culture likely to be more accepting / more meritocratic / less nepotism internally which likely makes for a for a more agile company.

Regardless, stats like this hopefully help erode long standing views of women and leadership.

<comment> mkr-hn Expressed gender is not a good measure of a person's ability to create (or maintain) a good working environment.

<comment><USER8> The person above didn't claim otherwise.

They said the opposite, that the culture of the company has to be a certain way to have a female CEO in a world of mostly male CEOs. They didn't say that a female CEO creates that culture, and that would have the chicken-egg problem (i.e. how does a CEO create a culture that within itself helped cause a CEO get into the role? They could continue it however).

PS - I should clarify that I don't agree with the OP's point about culture. I actually subscribe to the notion that becoming a female CEO is so difficult the only ones who manage it are just "that damn good" that their companies do better.

</comment></comment></comment><comment><USER9> Many reject the Efficient Markets Hypothesis. Few do so while lying atop a gigantic pile of money.

<comment><USER10> So if the markets are all efficient then how did they get the pile of money?

<comment><USER11> No one has a pile of money. That's the point. Many people come up with theories on how to beat the market by using some novel theory or algorithm. These people generally have not successfully tested these theories (and made the aforementioned piles of money).

(This is why I follow patio11. Reading his tweets and HN comments is not unlike unpacking a particularly obtuse if-else-if statement block. Difficult, but rewarding!)

</comment></comment></comment><comment><USER12> If you plot based on blood types of CEO's rather than gender, you may get other type of results. So should we take blood type as another type of parameter like gender?

Point I want to make is, people are different starting from blood type, height, weight to "n" number of parameters and we can get different graphs for different parameters but that won't conclude anything.

Each person is different and just because some one belongs to a category does not make that person any extra attractive for any job.

In my personal opinion, this type of validation rather than competence,track record,experience is not beneficial to organization or society and completely shortsighted. So please stop these generalizations like "women are so and so", "men are so and so" ...etc. There are good and bad elements in every category.

<comment><USER13> I think you're looking at the trees, and you should step back and look at the forest.

The fraction of CEOs that are women is dramatically smaller than the fraction of the population that are women. There is no qualitative explanation as to why that should be true. So long as that remains true, it's worth looking into why it is true. The relative performance of the group is fair game for investigation.

<comment><USER14> _There is no qualitative explanation as to why that should be true._

I think there are plenty of qualitative explanations especially if look back a few decades (since most CEOs are in their 50s).

Women didn't obtain the name number of university degrees as men until recently. Women often step out of the workforce in order to care for family, etc, etc.

All of these would explain where there would be a smaller pool of qualified women to take a CEO role.

</comment></comment></comment><comment><USER15> This reminds me of a study I did on CEOs who came to speak to my university. I found that investing in a company if their CEO was visiting college campuses averaged an annual return of ~20%. The logic was that CEOs of poor performing companies didn't have time to visit schools.

For a disclaimer, the portfolio was also more volatile than most benchmark indexes, so looking at the Sharpe ratio in both instances (mine and OP's) is important.

</comment><comment><USER16> In the first cut of your analysis (without rebalancing) the portfolio actually goes negative (I'm looking at the first graph in the notebook). An equity portfolio cannot go negative unless you are using leverage. Then from late 2012 to 2015 the portfolio rises by 400%. Looking at the companies in the portfolio, I don't see how they could have generated that kind of return. Is this algorithm using leverage? If not, I don't see how you can get those results. If the algorithm is using leverage, then comparing to a simple investment in the S&P is not valid.

<comment><AUTHOR> You are absolutely right that the first version of my algo is using tons of leverage. I didn't realize what leverage was when I did this the first time.

The second version of the algorithm factors in leverage and there it hovers around 1.

</comment></comment><comment><USER17> How much is this skewed by Alibaba and yahoo?

<comment><USER17> Also, what would Apple look like for openly gay CEOs?

</comment></comment><comment><USER18> "Ethical" investment funds also did well for a while. Even if the women in this study are better CEOs (and that share price reflects this) any attempt to capitalize on this will change the population. ie assume equal talent pools, top 30 from each beat top 60 for either.

</comment><comment><USER19> This is really cool, but I'd love to see this narrowed down to something super scientific. Cause I can already hear the haters, screaming about control groups, sample sizes, and all that stuff. Which is actually important.

Right now I take it for what it is a quick mock up of some shallow data. But it seems compelling enough to take a deeper Nate Silver ( [http://fivethirtyeight.com/](http://fivethirtyeight.com/) ) style deep dive.

<comment><AUTHOR> I'd love suggestions about how to make this more scientific. I think the biggest potential pitfall is the variability related to the stock size. My approach is pretty simple right now. I just took all of the companies from the Fortune 1000 that had female CEOs since 2002, and bought their stock when they were women-led, and sold it when they no longer were.

From an investment perspective, I think the best thing to do next would be to make sure I have the right benchmark. Ideally they Fortune 1000 would be the best one to use, but I need the historical Fortune 1000 companies for the last 12 years….that will take some manual work to pull together.

At some point, though, the control group is an academic exercise. If the strategy makes money - invest.

<comment><USER20> In particular, your purchases aren't cap-weighted. You simply divide your portfolio evenly among women-lead companies. So aside from biases that might exist for women-led companies (they have to work harder, so they're better performers; or, they tend to be more highly represented in consumer cyclical, etc), you're also "over-weighting" small-cap equities, which have done quite well relative to the S&P500 (all large cap) over the period[0].

I would be interested in a breakdown of other factors, but I expect very little variance actually derives solely from gender of ownership once you account for other conventional biasing factors of the chosen index.

[0]: [http://performance.morningstar.com/funds/etf/total- returns.a...](http://performance.morningstar.com/funds/etf/total- returns.action?t=VB&region=usa&culture=en-US) (Compare to S&P500 TR)</comment></comment></comment>


Show HN: Choose My Smoothie–- filter out recipes using your ingredients - <AUTHOR> https://choosemysmoothie.com <comment><AUTHOR> Hi HN.

I posted this on Product Hunt last week just in case you wanted a more thorough explanation of what this is ([https://www.producthunt.com/posts/choose-my- smoothie](https://www.producthunt.com/posts/choose-my-smoothie)) but essentially I was tired of Googling smoothie recipes because I would constantly encounter authors going on and on with their essay-long content and 20 different substitutions for each ingredient.

I wanted something where I could filter out recipes based on ingredients I had at home, and get straight to the point. So Choose My Smoothie is that.

I find recipes from popular websites (and credit them) and let you filter them out. Each smoothie page will only show you what you need to know: nutritional facts, ingredients, and directions.

It's a very simple concept, but it's the first personal-project I've started and finished in only a few days and am very excited about that. Hope you find it useful too!

[https://choosemysmoothie.com](https://choosemysmoothie.com)</comment>


An intro to data structures with locality of reference-type features - <AUTHOR> http://www.borzov.ca/posts/xfast/

<comment><USER2> Link to the course mentioned at the bottom [https://www.youtube.com/watch?v=-sEdiFMntMA&list=PLFDnELG9dp...](https://www.youtube.com/watch?v=-sEdiFMntMA&list=PLFDnELG9dpVxEpbyL53CYebmLI58qJhlt)

[http://courses.csail.mit.edu/6.851/spring14/lectures/](http://courses.csail.mit.edu/6.851/spring14/lectures/) [http://courses.csail.mit.edu/6.851/spring12/](http://courses.csail.mit.edu/6.851/spring12/)

Any Demaine specific lecture is worth watching.

</comment><comment><USER3> Regarding LPM for IP forwarding, there are similar high performance data structures: Luleå algorithm [https://en.wikipedia.org/wiki/Lule%C3%A5_algorithm](https://en.wikipedia.org/wiki/Lule%C3%A5_algorithm) or hybrid trees [http://epubl.ltu.se/1402-1544/2007/15/LTU- DT-0715-SE.pdf](http://epubl.ltu.se/1402-1544/2007/15/LTU-DT-0715-SE.pdf)

</comment><comment><USER4> Nice article, but why refer to a set as {n}? Mathematicians read this as a set containing one element, n.

<comment><USER5> I thought mathematicians defined notation to mean whatever they wanted or needed for a particular text.</comment></comment>


Implantable wireless devices trigger, and may block, pain signals - <AUTHOR> http://www.sciencedaily.com/releases/2015/11/151109143616.htm <comment><USER2> They've made zone implant controls: [https://en.wikipedia.org/wiki/Forbidden_Knowledge](https://en.wikipedia.org/wiki/Forbidden_Knowledge)

</comment><comment><USER3> Will it be possible to make skulls transparent via genetic modification? For direct non-invasive optical connection to the brain with higher bandwidth than trough eyes.

</comment><comment><USER4> some day the mice will evolve and would need a "model" to run various experiments on ... Fortunately, i will not be around then.

<comment><USER3> [http://www.smbc-comics.com/?id=2881](http://www.smbc-comics.com/?id=2881)</comment></comment>


Beam: Distributed knowledge graph store written in Go by eBay - <AUTHOR> https://github.com/eBay/beam <comment><USER2> Architectural decisions explained here: [https://github.com/eBay/beam/blob/master/docs/central_log_ar...](https://github.com/eBay/beam/blob/master/docs/central_log_arch.md)

The architecture is: materialized views from a central append log.

I don't see a reference to Apache Bookkeeper[1][2] in the above. My recommendation to anyone who wants to build their own variant of this architecture is to build it on top of Bookkeeper instead of rolling your own. It is designed for this precise workload [2] and addresses the write throughput limitations of the OP 'Beam'.

[edit: pull quote from [2]]:

"what makes BookKeeper unique is its ability to offer a short-tailed, low- latency, distributed scale-out storage solution. Although this is a CP system, its greater availability makes it almost a C(A)P system. It is an apt storage for immutable data."

[1]: [https://bookkeeper.apache.org/](https://bookkeeper.apache.org/)

[2]:[https://www.linux.com/news/event/apachecon/2017/4/high- perfo...](https://www.linux.com/news/event/apachecon/2017/4/high-performance- logging-apache-bookkeeper)

</comment><comment><USER3> "some functionality is lacking before Beam could be used as a critical production data store, including deletion of facts"

It sounds like this needs a second central log to enable eviction of sensitive data before it can be seriously considered usable. One log for transactions and another other for the data itself. Or at least that is the conclusion we reached when designing and building our own knowledge graph store (with a similar use of Kafka): [https://juxt.pro/crux/docs/index.html#_unbundled](https://juxt.pro/crux/docs/index.html#_unbundled)

</comment><comment><USER4> "Beam is designed to store large graphs that cannot fit on a single server. "

What would be a good alternative for less huge datasets?

<comment><USER5> Jena TDB --> [https://jena.apache.org/documentation/tdb/index.html](https://jena.apache.org/documentation/tdb/index.html)

<comment><USER6> We used Jena for a project with 500M triples, the uncompressed file was about 80G. It mostly works fine.

</comment></comment></comment><comment><USER7> This is very interesting. The triple store space is crying out for a good solution; a good _distributed_ solution - unheard of.

<comment><USER8> Is it common to combine triple store with event logging as this seems to do?

<comment><USER7> I may have misunderstood, but I think they're using the log as a write ahead log, which is a similar, but subtly different idea to event logging.

A Write Ahead Log is an implementation detail of a distributed system, whereby the system has a log of actions it applies against a state machine. Protocols, such as Raft, exist to keep the log in sync, and the state machine is kept in sync as a consequence. The log entries would be quite abstract and low-level, like "tuple inserted".

An Event Log, on the other hand, is an application level architecture technique. The log entries would be application-specific actions, like "user logged in".

</comment></comment></comment><comment><USER9> what is the best general use case open source knowledge graph, if any? The actual graph, not the tech.

</comment><comment><USER10> OBSERVATION: 7 out of 9 comments are bikeshedding the project's name.

<comment><USER11> And if we include yours (and mine), we're at 9 out of 11!

</comment></comment><comment><USER12> Ah yes but not to be confused with apache beam.

<comment><USER13> And Erlang/OTP's BEAM. And Haskell's Beam. And probably a couple of other things called Beam…

</comment></comment><comment><USER14> I wonder if name is coincidence or it's on purpose to get some traffic from searching on Erlang BEAM.

[https://en.m.wikipedia.org/wiki/BEAM_(Erlang_virtual_machine...](https://en.m.wikipedia.org/wiki/BEAM_\(Erlang_virtual_machine\))

<comment><USER15> ... or maybe they chose an English word to make it harder to find.

<comment><USER15> using two English words as the name would already be an improvement for the common web-searcher... As an example, here is the name of two apps that do similar things: "Blue iris" and "motion".... let me know which one that you are able find more quickly.

<comment><USER14> Don't like opinion or stressing too much? Relax

<comment><USER15> I was 100% serious... I don't think that the word BEAM helps... And I probably need more stress, not less.</comment></comment></comment></comment></comment>


Tracking two years of laptop battery use, sampled every minute - <AUTHOR> http://www.ifweassume.com/2014/07/better-living-through-data.html <comment><USER2> This doesn't involve the quantified self component but:

CoconutBattery Online ([http://online.coconut- flavour.com/](http://online.coconut-flavour.com/)) has massively aggregated Coconut Battery data ("over 150,000" data points) from the last five or eight years of Apple laptop models.

It helps give a sense of laptop cohort's battery longevity.

</comment><comment><USER3> The method he's using might influence the statistics negatively a bit too much, as there's periodical data that needs to be flushed to disk, plus an useless fork going on every minute.

This popped up on HN last year, uses a much cleaner implementation:

[http://www.thregr.org/~wavexx/hacks/bcmon/](http://www.thregr.org/~wavexx/hacks/bcmon/)

</comment><comment><USER4> "A fun thing to notice: my computer apparently wakes up a few times every night... I wonder what it's dreaming about?"

The fix for this is disabling "Wake for network access" in the preferences.

<comment><USER5> Though note that "fixing" this will remove your mac's ability to handle network requests when asleep, which is a pretty cool feature that I wish the phones/pads had (they sleep the network cards to save power)

[http://support.apple.com/kb/ht3774](http://support.apple.com/kb/ht3774)

</comment></comment><comment><USER6> Maybe I'm just missing it, but one statistic I would like to see is how long it takes your battery to fully recharge, and how that statistic has changed over time.

<comment><USER7> The definition of "full" decreases steadily over time, all the way to the point where "full" is no power at all.

</comment></comment><comment><USER8> Remember, two things degrade batteries - heat and load. The former more so than the latter, but they both go hand in hand. The heat is not a data point variable the author has I imagine, but he has a decent representation of state with the graph.

The first MBA seems to have more moments of "drained" battery, represented by the orange/red colours being more predominant on the left side of the graph. This may signify more load being placed on the first MBA than the second MBA.

The second MBA seems to have had an unusual beginning to its life - lack of daily data and perhaps being left in a discharged state rather than charged. Might have some play on the initial degradation of the battery's capacity, but probably not.

</comment><comment><USER9> Would minute to minute logging effect the battery performance and thus make this data not entirely objective?

<comment><USER10> I would think that even if logging used a non-negligible amount of battery power to take measurements the data are still valid because such a load was applied consistently throughout the sample period. So, the measurements are valid within the set (you can accurately compare one day to another) but perhaps not transferable/generalizable (could not compare them to other laptops with differing monitoring periods).

</comment></comment><comment><USER11> note the temperature is an important consideration instead of just the number of charge cycles. for the whole story on a battery the log should include battery temp, even when the computer is asleep.

[https://www.apple.com/batteries/notebooks.html](https://www.apple.com/batteries/notebooks.html)

<comment><USER12> Is percent charged also a factor?

If I understand correctly, I've read that fully charging a hot battery will degrade the capacity.

If true, I'd like smart recharging to target some optimal charge, say 95% full. (I think one of the PC laptops did this.)

</comment></comment><comment><USER13> "Too much media/computer use isn't good for your brain. I worry computers are making people less creative in some ways, and too much time online is certainly bad for your soul. You need sunlight, air, dirt." Such statements abound but actually don't make much sense. It's just the progress our society is making and we should be proud and happy of it because it absolutely enhances our productivity. People just need to adapt to new things over time and overcome their resistance. I bet when pen and paper became popular similar statements were made of them! Which are of course quite nonsensical examined by time.

</comment><comment><USER14> If you want to run this can of experimentation on your own, you can easily get these data points from the command line using iStats[1].

[1] [https://github.com/Chris911/iStats](https://github.com/Chris911/iStats)

</comment><comment><USER15> >This newer 2013 MacBook Air is holding up much better than the 2012 model, and I'm consistently still getting 6-8 hours of life out of the battery at least.

It may be just my usage patterns but I never seem to get more than 4 hours on the 2013 Air. I mostly have a fair number of Chrome tabs along with a terminal window open and that seems to be enough to drain the batter rather quickly.

<comment><USER16> Chrome for MacOS seems to be quite badly behaved; you should see better results with Safari.

</comment></comment><comment><USER17> I'm confused, is he tracking computer usage, or % of battery drained? If the laptop is plugged in then battery drain won't show up. Also power draw will be different than duration of computer use, as some tasks are more CPU intensive.

<comment><USER18> He is tracking battery capacity (Current Capacity / Max Capacity), not battery drain. This is useful to track the lifetime of the battery itself, instead of its charge.

</comment></comment><comment><USER19> What tool did the author use for tracking? this seems like an interesting metric everyone should track.

edit: batlog a cronjob the author wrote

[https://github.com/jradavenport/batlog](https://github.com/jradavenport/batlog)

</comment><comment><USER20> "Measure what is measurable, and make measurable what is not so." \- Galileo

<comment><USER21> Playing Civilization V?

</comment></comment><comment><USER22> How does this show if one battery is better than the other? Doesn't it just show how often he charges his batteries?

</comment><comment><USER23> >>Too much media/computer use isn't good for your brain

I was really interested in the article until this popped up. What a gross generalization.

<comment><USER24> This is obviously and objectively true for a sufficiently high level of "media/computer use", and I think many of us will say, anecdotally, that we have bumped up against this limit. What's so offensive about it?

<comment><USER25> People in denial (in this case about the health of endless computer usage) tend to react violently when you confront the issue.</comment></comment></comment>