Ask HN: Great coding stories - <AUTHOR> Anyone have some good coding stories and lessons learned. <comment><USER2> One of my most memorable ones:

We we're developing an Android app that involved a custom camera implementation. In the camera we we're getting the actual frames (about 15 fps was all we could manage on most Gingerbread devices) and saving them out in a custom file format.

We we're dealing with lots of device specific camera issues (HTC had one device with 2 back facing cameras that gave us a lot of trouble), and one day our QA person comes up to us and says: "It's working fine on this device, except it crashes when I try to film out the window."

We we're already feeling stressed about all the issues and didn't believe her. We figured it was just some race condition that it was a correlation != causation thing. We asked her to show us, and sure enough time after time you would turn the camera to face the window and it would crash.

We showed our manager and the designers, because we couldn't believe how weird it was.

The cause and fix turned out to be simple enough. We kept the lights off in the office for the most part, and the camera frame rate was jumping way up when the scene was bright. When the camera turned to the window, the fps went above what we had achieved before, and our app was throwing an OutOfMemoryException, since we weren't dealing with the frames fast enough, and they were stacking up.

It drove home the importance of real world testing to us.

</comment><comment><USER3> The apple graphing calculator story - [http://www.pacifict.com/Story/](http://www.pacifict.com/Story/)

<comment><USER4> That is an excellent story. It was told on This American Life.

[http://www.thisamericanlife.org/radio- archives/episode/284/t...](http://www.thisamericanlife.org/radio- archives/episode/284/transcript)

</comment></comment><comment> kim-toms Once, long ago, I worked at a company that made hardware that plugged into a Unibus backplane. This backplane was used by DEC (an early minicomputer) systems. The backplane, much like those of today, was a series of card-edge connectors.

We had a product which communicated across this backplane using programmed I/O with a driver installed into the kernel of the machine (running RSTS-E).

We'd developed a new version which was able to use DMA to directly access the buffer memory of the system processor; it was pretty small, only 256K bytes.

We had a system we tried to install this on in England, and there was some problem we could not figure out. It just wouldn't work. Now, the installation procedure involved the backplane intimately. In those days, the backplanes weren't a printed circuit card, but rather a series of connectors connected by wire-wrap wire. To install a DMA card, you had to unwrap the DMA grant line from the backplane. We even had special cards to insert which jumpered it back if you needed to remove one of the DMA cards. After several days of trying various things, we gave up.

About 11 years later, the installer and I were talking over beers, and we finally figured out the problem. Of course, by that time we were both working at a new company. The issue was that the grant line was damaged or removed in another slot of the backplane, but wasn't correctly jumpered back. When they moved around a card to 'test' the slot, it didn't use DMA, and so worked fine.

</comment><comment><USER5> Room for a DevOps story?

I was managing a very busy Cassandra cluster of 14 nodes, these machines had 16GB of ram, and as a very horrible hack for OOM problems, had 8GB of swap space too. With Cassandra - you have to always have at least N megabytes of space free on the disk where N is the size of your largest table, this is because during "Major compactions" it's possible the table will have to be rewritten.

One of these machines was desperately running out of disk space, so I turned the swap space off to claim the extra 8GB (I just had to get the compaction out of the way, then these machines would be upgraded and this all wouldn't be a problem anymore)

So turning off the swap space, I could see the kernel moving data back into RAM, and I was also watching the diskspace fill up from the compaction. They were both going at a fairly linear rate, but the system was going to run out of disk space BEFORE the swapfile was released.

But not by much, the system would run out of diskspace about 30 seconds before the swapspace would be free --- now I know that this cassandra configuration was set so that a node wouldn't be considered "dead" unless it was out of communication with the cluster for longer than 10 seconds --- so I used KILL to freeze the cassandra process a few times, but never longer than 10 seconds.

I was able to freeze the process enough so that the swapspace was free'd before the diskspace ran out -- and the node communicated with the cluster enough to remain "active"

Lesson Learned: These machines were severely underspec'd!

</comment><comment><USER6> Scratch Monkey - Its a sad classic of computing lore. Here is a brief and less harrowing version of it: [http://www.catb.org/jargon/html/S/scratch- monkey.html](http://www.catb.org/jargon/html/S/scratch-monkey.html)

<comment><USER7> The Jargon File is always a good source for stories like that :D "Do what I mean (DWIM)" is another good entry for that ([http://www.catb.org/jargon/html/D/DWIM.html](http://www.catb.org/jargon/html/D/DWIM.html))

</comment></comment><comment><USER8> I was recently doing some win32 coding, getting an odd access violation that hits JUST before winmain/main exits, only on x64 and only in Release mode. I deleted/un-deleted nearly every bit of code to find my problem. Turns out I had the wrong string going into UnRegisterClass on my window handling class. Took me ~4 hours to find the bug and all of 10 seconds to fix it. Always double & triple check when copying & pasting.

Now I'm using SDL, since it's just a little hobbyist game. :) Also don't reinvent the wheel. Especially if someone else is offering free wheels.

</comment><comment><USER9> There's a couple of great ones from Dave Baggett during the development of Crash Bandicoot.

[https://www.quora.com/How-did-game-developers-pack-entire- ga...](https://www.quora.com/How-did-game-developers-pack-entire-games-into- so-little-memory-twenty-five-years-ago/answer/Dave-Baggett?srid=z9ZA&share=1)

[https://www.quora.com/Whats-the-hardest-bug-youve- debugged](https://www.quora.com/Whats-the-hardest-bug-youve-debugged)</comment>


The bugs that don't exist - <AUTHOR> https://www.statnews.com/2017/03/22/insect-delusional-parasitosis-entomology/ <comment><USER2> And I though it was about system malfunctioning but in some intended way, so that it produced wrong results but wasn't a bug.

Edit: computer bugs, I mean.

</comment><comment><USER3> Delusional Parasitosis reminds me of the Pearl Jam song _Bugs_.

</comment><comment><USER4> The title is misleading. Please use the orignal one.

</comment><comment><USER5> And sometimes DP is actually an allergy.</comment>


Can you give me feedback on my website? - <AUTHOR> Hi I created http://www.didyouhearyet.com I was wondering if I could get some feedback on it and suggestions on improving it.
Here's a little bit of information about the product:
It is a content/link aggregation site similar to reddit/hacker news. The things that makes this different from other sites is that after 24 hours the post is deleted from the site, also there is no voting system in place so when people comment is it actually contributing to the conservation rather than a competition for internet points.
Let me know if you have any other questions regarding the product. Thanks in advance. <comment><USER2> What's the advantage of removing posts and comments after 24 hours? I'll list the negatives.

1\. You kill all of your organic traffic. Google isn't going to index your deleted posts and comments, so no one is going to be visiting your site through search engines.

2\. If I write a thoughtful comment, I can't return the next day to see replies, because everything is gone.

3\. I can't bookmark interesting discussions, or share them on social media.

The voting system is actually a positive for Reddit/HN, since it separates the interesting submissions and comments from the low quality ones. That's the reason most people sort submissions and comments on Reddit/HN by 'Best' instead of 'New'. However, you took the 'New' section that no one likes to browse, and made it the only way to view your site. That's not good.

On a side note, the navigation drop downs don't open when viewing a post.

As for positives, you made a basic Reddit/HN clone, congrats. I'm not being sarcastic, the site is functional, it's easy to browse, and easy to read. You have the skills to make a successful project, you just need a different idea, or a much better spin on the Reddit/HN concept.

</comment><comment><USER3> What is your concept for this? Why did you make it so it deletes everything after 24 hours?

I have been on email lists with no archive. It was done to protect the privacy of individuals. I have also run an email list with no archive. It was done to protect privacy and also to make it a live conversation.

What are your goals here? Are you just trying to "be different" for the sake of being different? I don't think that works. I think there has to be a purpose to the difference. It has to be done for a reason that creates value.

</comment><comment><USER4> Some errata:

3) One a post is 24 hours old the post... 3) Once a post is 24 hours old, it...

1) Anything illegeal 1) Anything illegal

3) Threatens, harrasses, or bullies other users 3) Threats, harassment, or bullying on other users

3) Removeal of content from the site 3) Removal of content from the site

Some bug report:

I couldn't comment (I wanted to post a test spam comment), plus the "Subhears" and "About" links in the comment window wouldn't work.

IMHO needs polish and a sound spam strategy, but you may get an interesting feed if you get some traction, good luck and congratulations!

<comment><AUTHOR> I fixed the 3 points you said. Also regarding the issue where you couldn't comment. I currently have it set to where you can only reply to a comment anonymously but I think that based on feedback people have given me I will be making it to anyone can comment. Also I am looking into the issue where Subhears and the About links won't open in the comment window.

Also regarding the spam strategy do you think passing it through a filter would work? Or should I implement a moderation system?

</comment></comment><comment><USER5> You need to briefly introduce your product first before asking for opinion. Others might misunderstand what you wish to achieve if you never claim about your mission.

<comment><AUTHOR> Thanks for the feedback, I updated the main post with a little bit of information regarding the site.

</comment></comment><comment><USER6> If the content will be deleted after 24 hours, what about the comments and all the discussion? I think this is not the case like Snapchat, which has been a chat/messenger app. Comments and discussion for certain contents needs to be preserve. If you are deleting the content after 24 hours for a clean interface, why not just remove the comment?

<comment><AUTHOR> Thanks for your feedback!

Currently I have it set so bot the post and comment data is wiped from the server. If I decide to keep certain comments and discussions preserved for certain contents where do I draw the line and wouldn't that go against the goal of the site?

</comment></comment><comment><USER7> Seems like this might be useful for people who want to remain anonymous... perhaps you could emphasize that?

<comment><AUTHOR> So currently you do not need an account to post a reply to a comment but do you think I should make it so you do not need an account to comment in general?

<comment><USER7> That would be interesting, but would it be economical?</comment></comment></comment>


Why would anyone leave a comment for an advertisement on IG? - <AUTHOR> Take for example this Landrover photo on IG:
https://www.instagram.com/p/BS5xqWvAj3c/?taken-by=landrover
What percentage of these comments do you think are real?
It's very easy to build a bot that leaves generic comments. This guy open sourced his code:
https://medium.freecodecamp.com/my-open-source-instagram-bot-got-me-2-500-real-followers-for-5-in-server-costs-e40491358340
Maybe I'm missing something, but I can think of only handful of reasons to leave a comment for an ad like this.

  1. You are a bot.
  2. You are friends of the photographer.
  3. You are somehow associated with Landrover marketing.
  4. You really love Landrovers (???).
 <comment><USER2> To complain about it?</comment>


Apple: First Public Beta of TvOS 12.3 - <AUTHOR> https://www.macrumors.com/2019/03/28/apple-releases-first-public-beta-of-tvos-12-3/ <comment> crooked-v I really hope this doesn't have auto-playing content while browsing.</comment>


Racket vs Clojure (it's all about the data structures) - <AUTHOR> http://programming-puzzler.blogspot.com/2010/08/racket-vs-clojure.html <comment><USER2> I actually have very similar thoughts on clojure versus racket. I admire both languges for different reasons, but if I were to pick one to get the job done it would be Clojure. I cry every time I see the idiomatic construct in any Scheme of converting a vector or string into a list just so you can do the normal core operations on it, and then converting it back to a vector or string, but this kind of code is quite common due to the design of almost every Lisp.

Another issue I have with racket, which the article touched on a little, is the overall lack of cohesion between different libraries and language features. I believe this is an unfortunate consequence of starting out with such a simple core language as all Scheme's do. Everything that is built has a different style to it and doesn't necessarily interoperate well with other parts of the language.

For example, structures are entirely orthogonal to objects and the class and interface system are entirely orthogonal to units, even though these two pairs of features can heavily overlap in their use cases.

When it comes down to it, if I want to get something done in Clojure I feel like I have a clear path as to how to go about it, but in Racket it seems much easier to get lost inside the language for the reasons mentioned in the article.

<comment><USER3> > this kind of code is quite common due to the design of almost every Lisp

Scheme != Lisp (maybe a "lisp")

I was trying to figure out what you mean from a Common Lisp perspective. Are you referring to the author's example?

      All of Clojure's collections can be treated as if they
      were a list, and you can write algorithms to traverse
      them using the same pattern of empty?/first/rest that
      you'd use on a list. This means that all the powerful
      higher-order functions like map/filter/reduce work just
      as well on a vector as a list.

Just off the top of my head, CL's map and reduce can operate on lists or vectors. Pretty much anywhere you see the word "sequence" in the spec, you can work with a vector or a list (and several other types). I can understand the point that it might be awkward in Racket; does it get awkward in CL?

I cannot speak for Racket/Scheme's limitations, but I am looking to see where Clojure might be a better choice for me than CL other than interoperability with Java. I have not seen a good data structures argument yet.

<comment><USER4> CL ostensibly comes with a built-in sequence class. The problem is none of the various utility methods that are included are generic functions, so in practice it doesn't do much good. Christophe Rhodes worked on an extensible sequence standard:

[http://www.doc.gold.ac.uk/~mas01cr/talks/2007-04-03%20Cambri...](http://www.doc.gold.ac.uk/~mas01cr/talks/2007-04-03%20Cambridge/ilc- talk.pdf)

It's implemented in SBCL, I think there may be ports to other implementations.

This is the sort of thing the CDR (<http://cdr.eurolisp.org>) process is supposed to address. Right now they only have proposals for a generic hash table interface (<http://cdr.eurolisp.org/document/2/index.html> \- not integrated with sequences!), and fixes to concatenate-sequence (<http://cdr.eurolisp.org/document/3/index.html>).

In summary: CL comes with some nicer datastructures than Scheme (hash tables, multidimensional and adjustable arrays), but other than that it has the same problems.

<comment><USER3> That was good information. Thank you.

My takeaway for this is this -- If the utility methods are not generic functions, it is fairly trivial to write a generic function that wraps around the utility method and then play with additional types as needed. So if the problem with the data structures in scheme and Lisp are that people are spending a whole lot of time repeating conversion patterns, shouldn't those people be developing abstractions, at least for their own use/libraries?

When I read this kind of complaint, I get the feeling people tend to want Batteries Included Their Way. They do not go the one step further to wrap things in the manner they desire. Like-minded folks do not get the benefit of those wrappers. jQuery was a hit because someone deployed his library of common JavaScript patterns.

<comment><USER4> The problem is that any time you want to interface to code outside of that library, you run into the same "convert vector to list" problem the OP was talking about. The solution really is to cram down Rhodes' proposal into every implementation's throat, so that all existing code can start handling new sequence types.

</comment></comment></comment></comment></comment><comment><USER5> While this is a decent article in its core argument, it's a bit misleading in some of the details.

 _Methods are not true closures, and can't be passed directly to higher-order functions._

You can trivially wrap a Java method in a fn, and Clojure has syntactic sugar (the #() notation for anonymous function literals) to help with this.

 _Slow numeric performance._

This is true in the 1.2 release, but the next version of Clojure addresses this problem in (IMO) a very elegant way. Search on the mailing list for discussion of the num branch for more information. If numeric performance concerns your problem domains, please use the branches that resolve this.

 _Slow startup time._

Yes, the JVM starts slowly. I restart Clojure REPLs about once a week. I don't exactly notice this problem. Clojure isn't like Python or Ruby or Perl, where you start new interpreters all the time.

</comment><comment><USER6> Very interesting perspective. I never thought about it that way, but it's true that one of my principal pleasures working with Clojure was about the data structures, and their very nice integration into the language.

The concurrency features sounded exciting but were never of any use to me. But the consistent and extremely powerful data structures and associated libraries were my main subject of wonder, even if i didn't really notice it.

Now that i'm working with python all day, even though i really really like this language, i can't help but hate the inconsistent way data structure works (and the fact that they are mutable, and that mutable and immutable operations are mixed up in the API without a clue). And i used to consider python as being quite nice data-structures wise.

</comment><comment><USER7> This guy puts his finger on precisely the thing that might get me to switch from Common Lisp to Clojure someday. The Java interop aspect is vastly overrated on a technical level. (That's not to say it is overrated in general; it's a marketing master stroke without which the language would have been stillborn.) The concurrency innovations are at best experimental, seem kitchen-sinky, and don't attract me much. But boy do I envy those data structures.

<comment><USER8> > The concurrency innovations are at best experimental, seem kitchen-sinky,

Could you expand on that statement. I don't think there is anything experimental about Clojure's concurrency features. They are quite robust and build on proven technology.

<comment><USER7> What I had in mind is close to what the OP says:

 _Clojure has a number of cool new ideas, but many of them are unproven, and only time will tell whether they are truly valuable._

We don't know yet what will become the dominant concurrent programming style(s). For all the talk about the multicore future, nothing has yet emerged that's compellingly better than traditional approaches. Or maybe it has and it just hasn't made its way through the noise into general consciousness; I don't know. Clojure's approach here strikes me as a sort of experimental groping: add several different new concurrency primitives and see what sticks. That aspect seems quite different from the improvements Clojure offers that came from years of experience programming Common Lisp and a resultingly deep intuition about what constructs would make it more comfortable.

Perhaps Clojure has hit the concurrency jackpot and come up with a better way of writing parallel programs. That would be significant. It would even be significant if it offered a better way of writing a particular class of parallel programs. So far, though, I haven't seen convincing evidence of that. I'm more excited about Clojure being an incremental improvement over Common Lisp that is winning over a new audience of hackers.

</comment></comment></comment><comment><USER9> Racket's hygienic macro system seems to be a heavier cognitive load as well (although it certainly has its own benefits, and some would say it's essential). I really like in Clojure and Arc how easy it is to pound out a macro when you need one.

I have less experience in CL and Racket. I would think that since CL's macros are unhygienic, they would be easy to write as they are in Clojure. It could be that I just haven't gotten the hang of Racket's macros yet, and that once you do they aren't any harder. Let me know if this is the case.

<comment><USER10> For purposes of writing macros, CL seems to be identical to Arc, other than the name for the macro-defining construct ("defmacro" instead of "mac"). Which, of course, can be fixed with a macro.

There are three "things" about Racket's macro system: hygiene, pattern- matching, and phases. The sort of built-for-you way to do things (define- syntax with syntax-rules or syntax-case) is both hygienic and pattern- matching-based. But you can also make something that is hygienic but not pattern-based, or pattern-based but not hygienic, or neither; this last one is done for you in the library "mzlib/defmacro".

However, what you _can't_ do, at least not without doing something like creating a new file and inserting (require (for-meta 2 <new file>)), is define a macro that you use in a macro body. For example, if you wanted to define "w/uniq", so that you could write

      (define-macro (swap a b)
        (w/uniq tmp           ;instead of (let ((tmp (gensym)))
          `(let ((,tmp ,a))
              ...etc

Simply writing (define-macro (w/uniq var . body) ...) will not work; a macro must be defined at phase level 2 for it to be used by a macro that is defined at phase level 1 (which is when macros are normally defined). And I have not succeeded in finding any way to make this work other than, as I said, creating another file and requiring it. (And, of course, if you want to use anything that isn't base Racket when defining 'w/uniq or whatever, you'll have to require that somehow, or do without.) This might be a minor complaint, but it does annoy me.

See also: <http://arclanguage.org/item?id=11529>

<comment><USER11> First, you don't need `w/uniq' in Racket - hygenic macros do that for you automatically. Here's `swap' in Racket:

      (define-syntax-rule (swap a b)
        (let ([tmp a]) (set! a b) (set! b tmp)))

But if you wanted to implement it, here's an easy way to do it in the same module

      (define-syntax (swap stx)
        (define-syntax (w/uniq stx) ...)
        (syntax-parse stx
          [(swap a b) ...]))

That said, the fact that you can't define macros to be used in macros in the same file can be annoying, and is something that we plan to add to the language.

</comment></comment></comment><comment><USER12> Where Racket has a clear edge on Clojure is learning about it. <http://racket- lang.org/> is very good, and the included IDE means you can hit the ground running and start typing code from a tutorial within minutes.

Clojure by comparison is like moving to a new city and trying to make friends (with emacs).

<comment><USER9> Racket is good that way, but you can get immediate gratification from things like Try Clojure too.

And of course, the Clojure setup is actually attractive if you're already using Emacs, especially since it offers integration with SLIME. No one has been able to do that with Arc yet, as far as I know. (With Racket, I'm not sure.)

</comment></comment><comment><USER13> "Frankly, I have yet to find a Java library I'd actually want to use."

HyperGraphDB, and the Google App Engine jars, for starters.

</comment><comment><USER14> I had horrific experiences trying to get Racket namespaces to work correctly (in Racket, a namespace is a value rather than simply a name). I found I couldn't get files to use the same namespace no matter how hard I tried, and without a specific namespace some code I was eval-ing simply refused to work.

I suspect Clojure lacks this 'feature' :-)

It's frustrating because I'm sure Racket has a lot to offer but not being able to do something really simple (even after hours and hours of trying) completely put me off.

</comment><comment><USER15> _Some people love Clojure specifically because it sits on top of Java and gives them access to their favorite Java libraries. Frankly, I have yet to find a Java library I'd actually want to use. Something about Java seems to turn every library into an insanely complex explosion of classes, and Java programmers mistakenly seem to think that JavaDoc-produced lists of every single class and method constitutes "good documentation"._

Amen!

<comment><USER16> Love it or hate it, Java's back catalog of libraries is gargantuan. One of the biggest obstacles in getting a new language adopted is library support. The fact that Clojure gets all that for free is a way to get people using the language now. As Clojure matures, I'm certain more and more native libraries will emerge negating a lot of the need for Java.

<comment><USER17> quantity != quality

<comment><USER18> I absolutely agree, but if you have no choice but to cooperate with the usual "enterprise" hodgepodge with its myriads of standards and protocols, not having to write something that will allow you to do that, is a huge benefit.

You'll have to suffer the environment, you don't have to suffer the language.

But I think it's going to be interesting whether the clojure community will re-write the innards of the libraries they're wrapping already. Will we see e.g. compojure that's turtles all the way down?</comment></comment></comment></comment>


How to Benchmark Your Server Using SysBench - <AUTHOR> http://syscoding.com/tutorials/17/how-to-benchmark-your-server-using-sysbench-on-ubuntu-1504/ <comment><AUTHOR> Also be sure to share your benchmarks and and if you use a hosting service, what provider do you use for your servers.</comment>


WWDC Keynote WiFi woes may have been due to iPhone 4 drivers - <AUTHOR> http://arstechnica.com/apple/news/2010/06/wwdc-keynote-wifi-woes-may-have-been-due-to-iphone-4g-drivers.ars/

<comment><USER2> Umm. No.

I was there. Unless my iPhone 3G, MacBook Pro, and iPad all have mysterious pre-release drivers as well, it most certainly was not a driver problem causing the wifi mess. It was unreliable throughout the week.

People who were there last year claimed that the wifi worked quite well. That was before the MiFi became popular, though. (And the crowd size was about the same as this year so Apple clearly knew what to prepare for.)

In a crowd of over 5,000 people there were at times over 500 hundred wifi networks! There should have only been one - the official WWDC network.

<comment><USER3> Yep I had the same experience with my iPhone 3G and MacBook during the keynote and much of the week, it got more reliable on thursday and friday when there were fewer people around.

I would also confirm the second point, last year I had no problems connecting.

</comment></comment><comment><USER4> So the failure in a demo of a prerelease hardware device with pre-release drivers having a problem to connect to WiFi in a room in which there are around 500 access points and who knows how many connected wifi nodes warrants this much of analysis and an article of this length?

Wifi does fail here and then. That's just a fact. Even more so if you factor in pre-release devices.

On a different note, in china a sack of rice just fell over.

</comment><comment><USER5> TL;DR

iOS 4 may or may not have a driver problem that only effects it in highly congested networks.

</comment><comment><USER6> Click bait article. But what I find interesting about the whole affair is apple didn't plan for it to happen. Guarantee there'll never be another demo done over WiFi. If they need wireless, I bet they'll setup some very short- range signal in another frequency. Or would that be illegal?

<comment><USER7> The problem is that it seems to me Apple wants to demonstrate their products using the same connectivity options that their customers will be using. If they start using other connectivity options that aren't available to the end user then a credibility gap could easily be formed in the demonstration of their products.

</comment></comment><comment><USER8> There's something wrong when journalists have to bring their own MiFis to cover the event. Apple should be providing ethernet - it's more reliable and doesn't cause any interference.

<comment><USER9> They already do. Apple provide WiFi and Ethernet connectivity at WWDC, but they're hardly going to roll out 5,000 individual cables.

<comment><USER8> They don't need to provide it for all attendees, just those that are liveblogging. The rest have little need to use the internet during the keynote.

<comment><USER10> True. At TechCrunch50, I remember that the first 3 or 5 rows (for journalists) all have an Ethernet cable per seat. The rest of us in the back get to enjoy WiFi connectivity.

</comment></comment></comment></comment><comment><USER11> Why don't they support 5GHz for 802.11n?</comment>


Fast Ordered Collections for Swift Using In-Memory B-Trees - <AUTHOR> https://github.com/lorentey/BTree <comment><USER2> Sounds very similar to the copy-on-write-friendly b-trees used in Btrfs, originally researched by by Ohad Rodeh: [http://liw.fi/larch/ohad-btrees- shadowing-clones.pdf](http://liw.fi/larch/ohad-btrees-shadowing-clones.pdf)

</comment><comment><USER3> Absolutely awesome readme, comprehensive and covers an huge chunk of background. I know more about in-memory tree data structures than when I started. Beautiful API. This is how a data structure library should be done.

</comment><comment><USER4> I'm very sceptical that in-mem B Trees can beat hashes, given their huge size overhead and cache unfriendlyness

<comment><USER5> Quote the readme: "B-trees were originally invented in the 1970s as a data structure for slow external storage devices. As such, they are strongly optimized for locality of reference: they prefer to keep data in long contiguous buffers and they keep pointer derefencing to a minimum. (Dereferencing a pointer in a B-tree usually meant reading another block of data from the spinning hard drive, which is a glacially slow device compared to the main memory.)"

Sounds like it could be pretty cache friendly. Besides, a B-tree can be used to implement a hash/dict/map.

<comment><USER4> I know b-trees. Still patricia trees or the optimized variant judy hashes are more cache friendly, and non fucked-up hashes even more. For OrderedDict it makes sense, but I would still consider judy or patricia better.

<comment><USER6> Tries are awesome; but they're more specialized. So, as long as you have to choose which one to implement first (and I do), B-trees provide better bang for the buck.</comment></comment></comment></comment>


Structural insight: Lisp and interpreted programming languages - <AUTHOR> http://fexpr.blogspot.com/2016/08/interpreted-programming-languages.html <comment><USER2> > _Technically, a compiler translates the program into an executable form to > be run thereafter, while an interpreter figures out what the program says to > do and just does it immediately._

Though this isn't wrong _per se_ , it glosses over the fact that the compiler is just translating the program into another language _which is then interpreted_ : that representation is fed to some machine which figures out what the compiled programs says to do and does it immediately.

Therefore, most of this article is basically misguided.

The main differences between compilation and interpretation (particularly _of Lisp_ ) are:

* in the interpreted program, there is no difference in representation between a part of the program which quotes itself as a datum, and the unquoted parts that are being interpreted. In the compiled version, a quoted '(if x y z) is still the four-element list, but a (if x y z) form has been translated to some other form, such as the instructions for a VM.

* in the interpreted version, environments, such as the lexical environment, are likely accessed using the same symbols that appear in the source code, so that if the current environment object is made available to the program, it can dynamically inspect it using variable names as keys. In the compiled verison, the representation of environments has changed to something else, which is not necessarily susceptible to such introspection. It might not be a searchable structure at all, and not all bindings visible in the source code are necessarily even in that structure (e.g. variables replaced by constant propagation).

We compile because the representation change is such that the program loads and runs faster. (Also, the translated program is harder to understand and modify, which helps us earn a living. The proprietor who has the source code of the program has a competitive advantage in providing services and future versions of the program to that program's customers, compared to third parties who don't have that source code.)

(The first difference, by the way, doesn't apply to languages that don't resemble Lisp. Since, say, the C language cannot quote a for (;;) {} construct as a symbolic datum, it cannot be in any way sensitive to its representation change between interpreting and compiling.)

The tricks we can perform with fexprs are not easy to replicate under compiling for mainly these reasons. Fexprs are user-coded extensions to the interpreter; if an interpreter is not used, they are not relevant. A fexpr could, each time when it is invoked, read some code from a file or other external input, and evaluate that code in the scope of the lexical variables. But that doesn't mean interpretation is made of self-referential magic that can't be duplicated under compilation. The fexpr has an ready analogy in the compiled model: we could make an extensible virtual machine, where the user is able to define a new kind of instruction whose actions is to fetch some piece of machine code from somewhere and execute it such that it has access to the current environment frame. (What would be additionally needed would be some compiler hook so the user can define a macro which expands to some blurb that makes the compiler generate that new instruction.)

Sure, the custom machine instruction wouldn't be interpreting Lisp source, and accessing Lisp variables. But the complementary fact is true about the fexpr: the fexpr doesn't interpret VM code and doesn't know how to access a compiled stack frame. (With effort, both directions could be bridged to some extent.)</comment>


Hydroxychloroquine lowers Covid-19 death rate, Henry Ford Health study finds - <AUTHOR> https://www.detroitnews.com/story/news/local/michigan/2020/07/02/michigan-henry-ford-health-study-finds-hydroxychloroquine-lowers-covid-19-death-rate/5365090002/ <comment><USER2> Do they have a control group? From the press article it looks like they are comparing with the global average that is meaningless because there is too much variation.

This is probably a good hospital with good staff and good equipment. Globally many hospitals are not so good.

There may be some involuntary selection of the patients. For example here in Argentina the retired people have a special health plan that include only some hospitals. That may change the population that goes to each hospital and change the expected death rate. Some hospitals get more rich patients. Some hospitals may get more athletes. It is very difficult to be sure, so you need a randomized control group.

<comment><USER3> > _The study analyzed 2,541 patients hospitalized among the system's six > hospitals between March 10 and May 2 and found 13% of those treated with > hydroxychloroquine died while 26% of those who did not receive the drug > died._

<comment><USER4> Worthless without control group

<comment><USER5> Technically people who did not take the drug are a control group. It's just not placebo controlled. (Which is quite a big no. Unless there's a known working treatment, which should be used as the control then.)

The big question is, how well randomized are these, and what's the effect size - could be suspiciously small.

If it's not randomized at all, the results do not necessarily show the drug is good - just that it's given to healthier patients. You can try to reduce such artifact by considering matching reference subgroups.

<comment><USER2> Did they have the same inclusion criteria? The people in the treatment group probably have to sign a conformity form, this implicitly exclude people that is too wasted to even hold a pen and that probably have a worse prognosis than the average. Did they include people with more than 90 years old? People with a recent previous heart attack? Small children (parents are annoying)?

Without the same inclusion criteria it's not a control group but a unrelated bunch of guys.

<comment><USER5> Also known as randomized control group. That said, it should be equivalent to treatment group. Which is exactly what I said.

That's the reason why in RCTs treatment and control groups are split from the same pool - less need to make sure they are.

<comment><USER2> I think we agree.

Just remember that the first study by Raoult claims to have a control group, but it's better described a a unrelated bunch of guys in another city. And there are other studies with similar tricks.

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> If Covid has done anything for me, is that it's teaching me how little we understand drugs and how unreliable are studies.

I have seen Hydroxychloroquine go from promising to helpful to not-helpful to damaging to promising again.

<comment><AUTHOR> pg talks about this phenomena - I think it's less about the studies themselves but rather how they are covered and described by third parties with vested interests:

[http://www.paulgraham.com/submarine.html](http://www.paulgraham.com/submarine.html)

[https://www.wsj.com/articles/covid-19-drug-remdesivir-to- cos...](https://www.wsj.com/articles/covid-19-drug-remdesivir-to- cost-3-120-for-typical-patient-11593428402)

</comment></comment><comment><USER7> Still not voting for Trump.

</comment><comment><USER8> Flagged article because even the slightest chance of Trump being right is not worth positive coverage of a drug he endorses that might be effective in fighting this pandemic.

</comment><comment><USER9> Let's all pray that it isn't true. Let's all hope really hard that it doesn't help and Trump is still wrong. That is the most important thing.

<comment><USER10> I sense sarcasm but I could be wrong

</comment></comment><comment><USER11> So does several immunity-based herbals but we since we can't patent those, they are scam and HCQ with side effects is the "real deal".

<comment><USER12> HCQ is a generic drug it's not restricted by patents, you can only get a short term application patent for a new use of a drug if the original patent still hasn't expired.</comment></comment>


The Grooveshark Settlement [pdf] - <AUTHOR> http://beckermanlegal.com/Lawyer_Copyright_Internet_Law/umg_escape_150505Settlement.pdf <comment><USER2> Two thoughts on this.

First:

I was an occasional user of Grooveshark, and whenever I used the service (which had a brilliant UI, by the way) I found myself wondering how they could still be operating, given that they weren't licensed by the major labels. It felt like Napster in a web app, only _more centralized_ (and thus, easier to take down, one would think).

Well, the answer seems to be that they have been fighting the major labels in the court this whole time (~5 years). Unlike maybe everyone else who has faced up against the major labels, Grooveshark forced them to fight. When the labels didn't give them a licensing deal, and told them to stop operating, Grooveshark responded, "Make us."

They created their tech, built a loyal following, grew their business, all the while fighting this lawsuit. In the end, the only thing that stopped them from pursuing their vision was a judges' order. This settlement seems to be a judge-mediated settlement of only the damages portion of the trial after liability had been established. It seems that the judge ruled against Grooveshark by summary judgement in September, which means they have known for more than 7 months that this was inevitable. They shut down their service 2 days ago.

People have called Grooveshark "shady", and many people believe that their business model was "illegal". Both adjectives may be accurate descriptions. I think the best adjective to describe these guys, however, is "gutsy".

Second:

The front-end system that Grooveshark built, which is the best that I have used for music playback and discovery, is now jointly owned by the major labels. They cannot possibly be short-sighted enough just to throw that away. Will we see Grooveshark resurrected as a label-owed alternative to Spotify, et al? Will they try to maintain any portion of the Grooveshark organization, especially the engineering team? Again, they would be foolish not to try, although maybe I'm giving them too much credit.

<comment><USER3> I hope that you're logically consistent and also consider other people who make their money by trampling on rights to be gutsy. for instance, gangsters, fraudsters, spammers... all have a similar business model in that they make money by ignoring the legal framework of their chosen business. certainly does take guts!

<comment><USER4> To be fair, the same can be said of Uber and Airbnb, both of which are largely praised on HN in the same way.

<comment><USER5> How are those services trampling on anyone's rights?

Despite loving Grooveshark, I tend to agree that copyright has some meaning and purpose. I don't think taxi companies have a right to business just because they were there first.

<comment><USER6> The subtext is that they're pushing on and in many cases breaking regulations (on carriage service and short-term tenancy), and also externalizing their costs. I happen to believe that's actually true in both cases, but that doesn't make what they're doing equivalent to building a business on someone else's proprietary IP.

<comment><USER7> > I happen to believe that's actually true in both cases, but that doesn't > make what they're doing equivalent to building a business on someone else's > proprietary IP.

Drop the "intellectual" part of "intellectual property" and that's exactly what AirBNB is doing - tenants are literally using property that isn't theirs (they've leased it, but they don't own it)[0] and are making money off it.

And in doing so, they are also impacting others' property rights, since the externalities of short-term tenancy are borne by neighbors, not by the person who lists a whole-apartment rental on AirBNB.

[0] And given how hard the music industry has been pushing the line "you don't own the music you buy; you're only leasing rights to access it" for digital downloads (not just streaming), this isn't really that different a situation.

<comment><USER6> I agree, but that part of Airbnb's usage pattern is bound to change, and the service will easily survive that change. Grooveshark, on the other hand, can't survive a correction from proscribed uses.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> It's really unfortunate that they were taken down. Sure, there exist paid services like Spotify, but when there's only licensable content you miss out on all weird obscure stuff that Grooveshark had, like video game soundtracks, chiptunes, and international music not licensed abroad.

If only every one of these large record labels could just instantly go out of business, simultaneously. That would be wonderful...

<comment><USER5> I'd be perfectly happy to pay for music streaming like I pay for Netflix: unlimited access for a flat monthly fee. However, I'm not willing to pay for a monthly service from every individual record label I want to listen to, and _still_ miss out on content I want.

Unfortunately, I don't think it's very likely that a paid service which behaves in a more legitimate way than Grooveshark can really have all of the content in one place, because of all of the agreements necessary.

For some reason I don't mind Netflix having only a subset of TV shows and movies, but I would mind a music service that doesn't have a nearly-complete catalog of everything I might want. I don't want to have to care what label owns the tracks. Perhaps I'm just spoiled by having Grooveshark for so long.

<comment><USER6> Isn't that a weird thing to say? You pay for Netflix. Far more so than for Spotify or Rdio, you miss _tons_ of content, so much so that there are regular columns on Slate about what good movies are coming and going from the service every month. Netflix has extraordinarily spotty coverage; it's like a version of Spotify where they have Pixies albums, but only every other song from the albums.

The difference in entitlement (I don't mean that as a loaded term) between music and video services is interesting to me.

<comment><USER5> I know exactly what you mean.

Perhaps it has something to do with decades of TV being available over the air, and over different varying cable packages. People are used to the idea that if you don't pay for cable you can watch a subset of TV shows, and if you do pay for cable, you're only buying a subset of the channels.

Music has always been free on the radio, but it works differently. Multiple radio stations might play the same song if it's within their genre. This is in contrast to multiple TV stations which own non-overlapping programming. You can't find ABC programming on CBS, but you can hear the Pixies on multiple radio stations.

To rephrase a little: Television content distribution has always been linked to the owner of the content. The networks that buy the programs distribute them exclusively. Music distribution is often separate from the ownership, and is based on royalties. Anyone can play any music, as long as they pay the royalties. As such, nobody is used to having to think about who owns the work of a certain artist they want to listen to.

<comment><USER9> My theory continues to be that the music industry is just unlucky. They entered the internet era with a product that was perfectly positioned to be annihilated by Napster, iTunes, and YouTube.

The pop single was a great product in its day. The recording industry invented pop singles and then spent fifty years perfecting the machine to market them.

To focus the marketing, singles were released a few at a time, and radio stations were encouraged [1] to play the same small playlists relentlessly, over and over, day and night. We all got used to the fact that there were only a few hundred songs on the radio and that they weren't merely free, but inescapable.

To further focus the marketing, the audience was relentlessly diced into genres, and high walls were built between the genres. Sorry, no hip-hop here, this is a rock station; Sorry, no zydeco here, this is a country station. We all got used to the fact that each of our local radio stations had a sound that never changed, and that you could name the songs that would be playing in a bar before you walked in. (Hint: _Hotel California_.)

For a while there, bands would release carefully-crafted albums that were designed to be listened to in a sitting, but the radio would never play whole albums except on very special occasions. Also, long songs would generally be abridged or avoided. We all got used to the fact that music came in randomly- shuffled three-minute chunks, which just happen to be really quick to download and easy to stuff onto USB sticks.

Then Mephistopheles appeared, holding the first compact disc, and the industry's doom was sealed as it realized that it could make an easy fortune by selling the baby boomers' music to them over again in a new format. And, indeed, that fortune was made. The industry's focus shifted to the past, and parked there. They made a lot of money selling copies of _Rumours_ and _Dark Side of the Moon_ to multiple generations of listeners, and they invested in branding juggernauts like Madonna and Michael Jackson that promised to sell albums for the next fifty years, and we all got used to the fact that one could pick up a copy of _Rolling Stone_ and have difficulty figuring out which year it was from.

Plenty of people complained about this system at the time, but it did make money. Until Napster and Apple came along and said "Hey, your entire musical universe fits inside a small box like this, would you like one? It won't take more than a week to build a collection that is better than the radio." And then, whoops, the meteor hit the dinosaur right between the eyes.

\---

[1] This kind of encouragement: [https://en.wikipedia.org/wiki/Payola](https://en.wikipedia.org/wiki/Payola) .

<comment><USER6> It's "Rumours". If you're going to make a mom-rock jab at Fleetwood Mac, get the spelling right. :P

<comment><USER9> Fixed.

Don't get me wrong, I own and rather like _Rumours_ , though I cannot spell it. It helps that, after spending a decade mostly not listening to classic- rock radio, I can hear the thing with fresher ears.

</comment></comment></comment></comment></comment></comment></comment><comment><USER10> I'm curious to know what will happen with all the user data on their systems. There was a site floating around which allowed you to access your playlist information just by entering your account email. I assume that was old public data.

And with services like this, is there any threat to users who access 'illegal' material?

<comment><USER11> I thought I read that the site pulled the info from the browser's local storage.

EDIT: which they obviously shouldn't be able to do. So they probably scraped it, right.

<comment><USER12> A different domain can't possibly access the local storage for grooveshark.com right?

<comment><USER11> Good point. People discussed different ways to get to the parts stored in localstorage, but that obviously only should work locally. Since Groovebackup got shutdown as well we can't check what they did.

<comment><USER13> You can still go to grooveshark.com and see your localStorage.

</comment></comment></comment></comment></comment><comment><USER14> I find it interesting that by virtue of point 5, they are not allowed to open source anything related to Grooveshark. Unless I'm interpreting it wrong.

<comment><USER15> You're not. It's to prevent Grooveshark from becoming the next Popcorn Time.

</comment></comment><comment><USER16> Can anyone comment on the potential implications for Apple iTunes, Google Play Music, and Amazon Prime Music? Each of these services allow users to upload content from their personal libraries. As far as I know, these services make no technological effort to assert the users' ownership of the content. Rather, I assume their Terms of Service mandate content ownership prior to uploading. Do their TOSs protect them from the complaint levied by the Plaintiffs in the Groovershark case stating that Groovershark was: "liable for direct and secondary infringement of certain of the Plaintiffs' copyrighted works;". Was Grooveshark's TOS materially different than that of the services mentioned above?

If I were to illegally upload a copyrighted work to Prime, iTunes, or Play; would I expose the parent companies to any liability or is the legal onus entirely on me as the user infringing on the TOS?

</comment><comment><USER17> 50 mil...ouch

<comment><USER18> There have been large settlements in the past that turned out to be false. They want a high number for shock value, but nobody's actually paying it. (There was something to that effect in the sony docs iirc.) See: Hotfile, Isohunt, etc.

<comment><USER19> Sounds like a player getting eliminated at the end of a Monopoly game when one owes a lot of money and goes bankrupt.

</comment></comment></comment><comment><USER20> The message they posted a day before this settlement - [http://grooveshark.com/](http://grooveshark.com/)

I'm confused, didn't Grooveshark just provided aggregation and a streaming player with playlist management? The music was not hosted by Grooveshark right?

<comment><USER21> I thought you could upload to Grooveshark.

<comment><USER22> You could, I've uploaded stuff from some bands home burned demo discs before. I probably don't have access to any of that stuff anywhere now.

</comment></comment></comment><comment><USER23> Is there a tl;dr version in simple English?</comment>


Infinite Loop is adictive never ending game to connect all the pieces together - <AUTHOR> http://loop.lekevicius.com/

<comment><USER2> it's very hooking! :-)</comment>


Should biologists study computer science? - <AUTHOR> http://arstechnica.com/science/news/2009/07/should-biologists-study-computer-science.ars <comment><USER2> In case you guys are wondering about current college curriculum, I just graduated with a BS in biotechnology-bioinformatics so I can provide a little insight.

My core classes consisted mainly of biology, chemistry, organic chemistry and physics. Other classes that my degree required was advanced mathematics (with biological application), advanced statistics, and computer science.

About the computer science portion of my degree: I was required to learn C, C++, discrete math, Perl, and data structure/algorithm design. I chose to take machine language as an elective.

What I've learned in industry: The CS foundation I built in college was critical. Although Perl is widely used where I work, languages like R and C are used more often (for my particular projects). I've also learned that my job is to bridge the gap between biologists and computer scientists.

Biologists say what they want to get-> Statisticians/Mathematicians think up a procedure -> I make sure the formulas make sense with the subject at hand, program it in Perl or whatever -> CS people optimize it and do their magic to make it run super fast -> checked by everyone to make sure its okay. -> stats analyze and feedback to the biologists.

My point being, I always think everyone should learn more math, but the industry has found a way to get around everyone needing to learn everything (jack of all trades master of none) to having experts work together towards a common goal (an oceans 11 type set-up). Everyone has something special to offer. Personally, I think the current set-up is working fine. Although everyone should learn more advanced math (or biologists should learn more CS), not everyone is willing and/or capable.

I hope this was helpful.

<comment><USER3> Upvoted for comparing science work to oceans 11.

</comment></comment><comment><USER3> I'm conflicted about this. A little knowledge can be far more dangerous then no knowledge. I have seen things... things I can't unsee. Things done to software by biology and chemistry Ph.Ds that still give me nightmares.

But make no mistake, modern science is neck deep in serious computering. Not being computer literate is almost as bad as being just plain illiterate.

So here's what I think about this. Every scientists who's not a physicist, mathematician, or computer scientists needs to study more math, more stat, and more cs.

In fact I would go so far as to say everyone needs the equivalent of an associate degree in cs to get a Ph.D. in anything. For mathematicians and physicists this would happen almost without any extra effort, for biologists it might be quite a bit of extra effort, but well worth it.

<comment><USER4> "A little knowledge can be far more dangerous then no knowledge. ... Not being computer literate is almost as bad as being just plain illiterate."

Need examples before I can know whether I agree or strenuously disagree.

<comment><USER3> Vis-à-vis A little knowledge :

One particular Ph.D who I worked with had created a much lauded database. It was done in MS Access. It stored natural numbers. Each sample contained a few gigs of natural numbers. Numbers could be anywhere form 0 to 99999. _So each entry contained all possible numbers in increments of 0.02, with Null in all places where the sample did not contain that number._

This is what happens when people have never heard of foreign keys or a one-to- many relationship or a many-to-many relationship.

This could have been done so it's a lot smaller and faster to search. The place holder could have been a negative int, instead of Null, so that it would evaluate to something other then Null in searches. An infinity of things could have been done better.

But when you have Ph.D and you legitimately think of yourself as brilliant. AND you are used to doing a lot of HARD work, then heroics with MS Access just seem natural, right, that's what hard science is damn it. And this is why a little knowledge can be worse then no knowledge.

If that guy had instead hired almost anyone else to design the database, he would have been better off. It's hard to imagine anyone who could have screwed up worse AND had the tenacity to stick with it.

PhDs are not just smart, but they also are used to working hard so when things get hard they don't quickly perceive that as signal to try something else.

As to being computer illiterate:

A field biologists might get away with it, but anyone working in a lab will sooner or later measure something with an instrument entirely controlled by and accessed though a computer.

Let me say that again, a computer is the gate keeper.

And it's not enough to simply know how to use the GUI/API what ever. You have to also know at least something about the algorithms involved in the analysis. _Because a lot of analysis of things that can't be seen with the naked eye is actually statistical inference of what's there._

Let me say that again, a whole of of stuff is not measured in the way a lay person thinks of measuring, _it is inferred using fancy math_.

But make your math a bit too fancy and you're just making stuff up now. Use a second order polynomial and you're good, use a 3rd or higher order and you can see anything you want. There's a reason we use cubic b splines for computer graphics, it's because we can fit them to any shape we want!

And oh yeah I've seen 3rd order polynomials used in science, no they were not used correctly.

<comment><USER4> "So each entry contained all possible numbers in increments of 0.02, with Null in all places where the sample did not contain that number."

OK. That is heinous. It makes me cringe. And if the person who made it thought that it was an example of brilliance, that's cocksure ignorance coupled with a needy ego.

___but___

There are a lot of biologists out there who run computers at the the level of how a business person deals with Microsoft Word: what the computer can do equals what paths are available through the GUI.

In the example you give, the biologist got the computer to do something it couldn't do before, something that made life in his domain easier, and presumably made science possible that would otherwise have been impossible.

Many biologists don't have the money or time to hire a consultant to do it right.

If a heinous kludge lets you do biology that you otherwise couldn't do, then by god that kludge has merit. You can make fun of the person for being proud of the kludge -- but you should admire them for their willingness and ability to make foreign tools do something new.

My work spans biology and CS, and unlike 99% of the other biologists I know, I have experienced what a well managed project feels like -- version control, a build process, bug tracking, etc. To me, the Mythical Man Month is not a novel concept; it's a given. The level of ignorance among biologists about how to get computers to do useful work in novel ways is stunning, and the biologists _don't know how ignorant they are_.

Again: ___but___

The computer scientists these biologists hire are often so averse to kludging their way forward, that the result is stasis. Adherence to notions of architectural purity, reusability, the 'right' libraries or platform, all result in long iteration cycles where the biologists get no feedback as to whether or not a given line of inquiry is promising or not. And the biologists don't get what's happening -- they can't say, "No, don't do a 'proper' object model and code a 'proper' solution yourself; instead, write a perl script to munge this other tool's backend XML to achieve a similar effect, so I can find out whether or not that functionality will be useful; and if it is useful, maybe then we can do it 'properly'." The biologist doesn't know what Perl is, and doesn't know what XML is.

And anyway, this approach is likely to be anathema to a good computer scientist. People don't get into computer science to make ugly kludges; they get into it to make things of beauty. Reusable libraries. Infrastructure. Clean GUIs. Excellent data structures. Etc.

So there's this huge tension between the biologist PI and the computer scientist he hires to build stuff, and neither one really speaks the other's language.

If a biologist knows a bit of computer science -- say, enough to understand his own limitations and ignorance, enough to communicate effectively with computer scientist employees or collaborators -- he can be tremendously effective. If he can write a little bit of perl and munge his own XML to find out if an approach is promising, he can show his computer scientist employee the kludge, and say, "Make this better."

So, a little bit of CS can be a very good thing. I suspect I'm violently agreeing with you. As you can tell, the topic is near & dear to my current life's work. :)

<comment><USER3> Indeed I think we are in agreement.

Definitely in the need for enough cs to understand your own limitations. That's actually quite a bit of cs, but then again obtaining a Ph.D. can take a while, so I'm sure a little more time for extra study can be found :)

And taking a look at your work... Are you really trying to create a high throughput electron microscopy workflow? Whoa! If you make electron microscopy even close to high throughput that would be awesome!

But how much of the brain structure are you able to preserve during sample prep? For that matter, how quickly does brain structure degrade after death? Minutes, hours, days, weeks, months? Are you imaging the sections in a light microscope first? Correlating the light and electron results of the same slice in software? Freezing the sample in liquid nitrogen so as to freeze it faster then ice crystal can form? Man science is fun, too bad it's not a good way to make a living.

<comment><USER4> "Are you really trying to create a high throughput electron microscopy workflow?"

Yes. We've increased acquisition rates by a factor of ~15-20x over what is available using commercially available TEM systems. We now have tens of terabytes of image data in the can, and when I'm not reading HN (argh!) I'm working on collating & analyzing these data.

Light level microscopy preceded embedding of the material for EM, the anatomy is correlated between the two modalities, and the sample preparation method (this is of mouse brain) is by perfusion with an aldehyde mixture, so there is essentially no deterioration of the ultrastructure.

So, I wonder what you do -- no home page in your profile -- but I do remember what it's like to make a living. I like biology better. :)

<comment><USER3> 20x? That's awesome!

I used to work in a bioinformatics startup - tons of fun with cutting edge science. But the startup tanked, and I moved on to a high paying corporate software engineering job. But I hope to be back in bioinformatics before long.

<comment><USER4> Thanks. :) It's been a long road, hope to get a paper out in the next ~6 months or so. Shoot me an email (address on my home page) if you ever want to be in touch outside of HN.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER5> This article is timely for me, having recently started a new job in bioinformatics. Specifically, building a centralized database (warehouse) for a variety of cancer research study data.

I'm coming from the opposite direction - a computer science background to the biology. A huge challenge for me is rapidly learning enough of the biostats and process to understand how to allow researchers to leverage having all this data in one place, easily accessible, and with a front-end that makes "sense" to the those MD/PhD types. A starting point is understanding what type of questions researchers can ask now that they have all the different data in one spot.

Fred Brooks said something like "computer scientists are toolsmiths." We build tools for user needs that simplify and strengthen the user's work. This requires the ability to somehow understand the user's needs, communicate with them effectively, and implement usable tools for them.

I sometimes feel like it is a failure on our part as builders to make it necessary for people who need software tools to build their own. I'm more than happy for other fields to add more CS type education to their required courses, but I'd rather be able to give researchers tools so that they stay on their critical path, rather than having to learn enough to hack together their own full solution.

</comment><comment><USER6> This is a bit like the welder and the diver question, is it easier to teach a welder how to dive or a diver how to weld ?

For divers and welders the answer appears to be that it is easier to teach welders to dive than the reverse, even if both are far from trivial activities.

For biologists and computer scientists the answer is probably that it is easier to teach programmers to do biology than the reverse.

(good) Programmers have something universal about the way they apply themselves to problems and that way generalizes to problems in a different domain.

<comment><USER7> I admit I don't have much to go on, but it seems like biology is a full load of study, whereas at least undergraduate 'computer science' ie programming can be picked up by a smart person almost incidentally. I've seen that done, and I think it /is/ done more often than the other way around. As for writing /good/ code, that can come from practice and aesthetics. But knowing biology (or another science) takes real study.

<comment><USER8> I _think_ (please correct me if I am wrong, always glad to learn) that one key difference would be that learning computer science would (mostly) need books ,the internet and the time and willingness to buckle down, while a proper study of biology would involve serious _lab_ work, with a need for costly equipment and instructions.

</comment></comment></comment><comment><USER9> Well, as a reformed biologist and current informatician, I certainly think that biologists should study CS. However, even more important than studying CS, they absolutely NEED to learn how to program. I've seen lab scientists use extremely convoluted and error-prone workflows to conduct their analyses and experiments- workflows that, if they knew just a little bit of Python, would have been much simpler. I'm actually teaching a class in the fall on "utility scripting" to a mix of molecular biology PhD students and informatics master's students for just this reason.

Regarding the age-old question of "should biologists learn CS or should CS people learn biology", I'm firmly in the camp of biologists learning to do their own CS, or at least learning enough CS to productively work with CS people. A little bit of CS really goes a long way towards improving a biologist's workflow. A little bit of biology, however, is almost completely useless for a CS person who wants to get involved in lab science. It really takes a surprising amount of domain knowledge to be productive in a laboratory, or even to understand the nitty-gritty details of an experiment at a deep enough level to write or modify an existing bioinformatics tool.

<comment><USER10> Haha, you have the opposite opinion of me, but you also pretty-much have the exact opposite experiences too. Maybe we both know a lot in our "main" subjects and think of all the underlying knowledge/related material is required to be useful, but in reality you can just pick up the knowledge you need on its own without any background knowledge on how it all works, you'll be confused when that stuff in mentioned or brought up, but if you stay in your niche you'll be fine.

</comment></comment><comment><USER9> One aspect of the article that I haven't seen much discussion of is the second part- about representing biological processes using an algebraic notation. While this might be really helpful for computational biology, it strikes me as a lousy idea for general work, because it presents an overly reductionist view of what's going on. Biomolecular pathways are almost never as simple as they seem at first, and they always interact in weird and complex ways. Presenting them as a big, gnarly, nasty diagram communicates this to readers... explaining them using nice neat equations makes the whole thing seem both simpler and better-understood than it probably really is.

</comment><comment><USER11> EVERYONE should study Computer Science. The questions are, how much and what parts?

</comment><comment><USER12> The article is about computers as "part of biological research". I _wish_ it had been about the real place I want biologists: designing the computer systems themselves.

Biological systems have scaling and reliability that we computer scientists only dream about. (Can you name a self-repairing computer system that runs for 80 years?) I want computers with the kind of systems thinking that biological systems have, not just more x86 cores on a single chip.

The only biologist I know who switched to designing computer systems is Alan Kay. I think we could do with a few more like him.

</comment><comment><USER13> short answer, yes. Otherwise how can anything useful or meaning be effectively done with the huge volumes data that biologists now have quite frequently. They should also work on their statistics background to so that they can do more sophisticated model / hypothesis testing, but that's a whole separate issue that gets into the matter of education and community incentives and this is not the appropriate forum for that latter topic.

<comment><USER10> A computer scientist can effectively analyse large volumes of biological data, I'm not convinced a biologist could do the same because there is just so much computer science related to visualisation, graphics programming and data modelling and their prerequisites.

A person who did 1/2 and 1/2 would likely not have enough knowledge or experience to do either the biology or cs side particularly well.

Not to mention, there are very few people I know who are good at both biology and cs.

<comment><USER14> I know of one good example, Alan Kay, the inventor of Smalltalk.

<comment><USER10> I briefly looked it up, molecular biology would be a good fit though its pretty-much chemistry. It entirely depends on which areas are studied in biology.

<comment><USER14> Sure, but what's more interesting is that he credits what he knows about biology as the inspiration for Smalltalk and its particular flavor of OO.

</comment></comment></comment></comment></comment><comment><USER15> How about having biologists work side-by-side with experts in data analysis and statistics, rather than requiring the scientists be be experts in all fields?

<comment><USER16> Often leads to the statisticians giving the biologists tutorials in statistics and the biologists giving the statisticians tutorials in biology. Which is okay, but then you have to wonder if more formal study up front would have been more efficient. Which brings us back to this topic.

</comment></comment><comment><USER17> Useful links for those interested in this crossover:

Great Principles of Computing: <http://cs.gmu.edu/cne/pjd/GP/GP- site/welcome.html>

90 min talk by Peter Denning about Great Principles: <http://www.youtube.com/watch?v=5a_pO3NYJl0>

</comment><comment><USER18> Corollary: should Computer scientists study biology? _Yes_

<comment><USER6> Agreed! If you can get your hands on a copy of a university level textbook in genetics that will be some of the best time you could invest in learning something about another field unrelated to the one you are currently in.

<comment><USER18> From the 10,000 foot level I think it _is_ related, and will become more and more related as time goes by. DNA seems to be a pretty robust information encoding and executing system. There's a lot we could learn from it.

<comment><USER6> Absolutely.

The first time I read what a ribosome does my immediate thought was CPU/Turing machine. There are so many analogies it is scary.

Nano technology is here to stay, it's called life.

<comment><USER18> Not sure why you where getting downmodded - that's an interesting observation.

<comment><USER6> Some people seem to have a way to express their disagreement with the 'down' vote instead of saying what is on their minds. It comes with the territory it seems.

</comment></comment></comment></comment></comment></comment><comment><USER19> Probably both could do with more math.</comment>


T-Mobile Agrees to Buy Layer3 TV in Preparation for TV Service - <AUTHOR> https://www.bloomberg.com/news/articles/2017-12-13/t-mobile-agrees-to-buy-layer3-in-preparation-for-new-tv-service?cmpid%3D=socialflow-twitter-tech <comment><USER2> > While most of the industry is trying to lure cost-conscious consumers by > offering cheaper packages with fewer channels, Denver-based Layer3 has gone > in the opposite direction. It sells an online-TV subscription with hundreds > of channels that starts at $75 a month. Layer3 is betting there's a market > for consumers who are willing to pay a premium for TV that is delivered in > high definition and is easier to navigate.

I don't see how T-Mo succeeds at that price point when streaming w/sports + Netflix or Hulu is about half that cost.

<comment><USER3> _I don't see how T-Mo succeeds at that price point when streaming w /sports + Netflix or Hulu is about half that cost._

I pay a little over 50 bucks a month for Hulu's Live TV service but the interface and UX is absolute garbage. If I could get everything I get from Hulu Live with a real honest channel guide + easily managed cloud DVR I would pay an extra $25 a month and drop Hulu in a flash.

I'll definitely be giving the T-Mobile service a look as the only thing keeping me on Hulu is lack of _good_ alternatives (I'm looking at you DirectTV).

<comment><USER4> Curious...why don't you like DirectTV? It's the first service I signed up for...so I don't have much to compare. But the quality is excellent.

<comment><USER3> It may have improved since the initial roll out. I had wanted to ditch my cable service for quite a while so I gave DirectTV a try when it launched, when service wasn't yet up to par and the interface wasn't any better than what Hulu has now. It maybe time to give it another look.

</comment></comment></comment></comment><comment><USER5> This seems like a big bet that the net-neutrality fight is over. Buying a TV service makes it much easier to prioritize your own content...

<comment><USER6> It's become clear that the Internet as we know it was too vulnerable in its current configuration. We need the Internet 2.0 that is designed to be neutral from the ground up.

No one has solved the last mile problem because everyone was content to pay the ISPs and now look what's happened.

We need alternatives and we need them fast.

<comment><USER7> Internet 1.0 will be "good enough" for most people, so only geeks will be on Internet 2.0. That's not a bad thing, but the internet of today is a way nicer place to be than the internet of the 90s was. And the reason it's nicer is because basically everyone I know is on it.

<comment><USER8> I completely disagree for the exact same reason.

Progress of humanity, etc.

</comment></comment></comment></comment><comment><USER9> This is interesting as it presents T-Mobile with three new areas to make money in, existing license agreements, OTT video delivery, and the existing wireline infrastructure that Layer3 says they have. They saw Comcast get into their game, so they're going to get into theirs.

</comment><comment><USER10> > a TV service that lets you watch "what you want, when you want, where you > want"

I hope this means full on-demand and not the half-assed cable/satellite game of a broadcasting model with a DVR tacked on. I didn't become a cord cutter for the sake of a lower bill, but because I was spoiled by DVD box sets that I can (re)watch anytime at my own pace. Traditional channels are just grating to me now, and I have no idea why that model should be imposed on IP-based services.

</comment><comment><USER11> Why didn't they buy Dish which includes Sling TV. And a lot more spectrum?

I'm an ATT subscriber and with our data plan Direct TV Now is offered for a small added fee. GreAt svc and it allowed two family members to ditch their Comcast tv svc.

No Brainer other wireless carriers will follow.

<comment><USER12> > Why didn't they buy Dish

They probably tried and couldn't work out an agreement. Dish is sort of infamous for being hard to work with, and has inflated the cost of their company by squatting on large amounts of spectrum they have zero intention of ever using. And that's all before getting into personality conflicts between both companies CEOs.

</comment></comment><comment><USER13> I kinda wish they'd buy up frontier and get into the fiber market.

<comment><USER14> That would require taking on Frontier's dysfunctional management.

<comment><USER13> Replace the lot of em.

</comment></comment></comment><comment><USER15> I read this as T-Mobile agrees to buy Level3... imagine the shock that had

<comment><USER16> Same here, 2 seconds of "what does TV have to do with that" 10 seconds of "that's going to take 20 years to integrate those two networks..." and 4 seconds of "wait, would there be anti-trust issues" then I read more carefully.

</comment></comment><comment><USER17> I think the title here should be updated to reflect that they're explicitly purchasing Layer3 TV, not the networking company that most people are probably assuming the headline is referring to.

<comment><USER18> The networking company is called Level 3.

<comment><USER17> Yeah, total misread on my part there. They're pretty close in name and it threw me off.

<comment><USER18> And more confusingly the name Level 3 looks like it won't be around much longer. They were acquired by Centurylink last month:

[http://www.level3.com/en/](http://www.level3.com/en/)</comment></comment></comment></comment>


A Tour of Machine Learning Algorithms - <AUTHOR> http://machinelearningmastery.com/a-tour-of-machine-learning-algorithms <comment><USER2> Here's an interesting series of tutorials on intro to data learning / machine learning. I've been able to read through several of them and it is very beginner friendly but still useful.

Main website: [http://guidetodatamining.com/chapter-1/](http://guidetodatamining.com/chapter-1/)

The actual pdfs [http://guidetodatamining.com/guide/ch1/DataMining- ch1.pdf](http://guidetodatamining.com/guide/ch1/DataMining-ch1.pdf)

[http://guidetodatamining.com/guide/ch2/DataMining- ch2.pdf](http://guidetodatamining.com/guide/ch2/DataMining-ch2.pdf)

[http://guidetodatamining.com/guide/ch3/DataMining- ch3.pdf](http://guidetodatamining.com/guide/ch3/DataMining-ch3.pdf)

[http://guidetodatamining.com/guide/ch4/DataMining- ch4.pdf](http://guidetodatamining.com/guide/ch4/DataMining-ch4.pdf)

[http://guidetodatamining.com/guide/ch5/DataMining- ch5.pdf](http://guidetodatamining.com/guide/ch5/DataMining-ch5.pdf)

[http://guidetodatamining.com/guide/ch6/DataMining- ch6.pdf](http://guidetodatamining.com/guide/ch6/DataMining-ch6.pdf)

[http://guidetodatamining.com/guide/ch7/DataMining- ch7.pdf](http://guidetodatamining.com/guide/ch7/DataMining-ch7.pdf)

(edit: formatting)

</comment><comment><USER3> Good write-up, but IMO these kinds of posts are not useful for most people (despite there being many just like it) - the 30,000 foot view is too much information for a beginner but too basic for someone who is knowledgeable in the field. In my ten years of being fairly immersed in machine learning there was maybe a one month period where an article like this would have been very useful, and that was a couple of years in after I had mastered the basics of the more useful techniques (like generalized linear models and SVMs) and was ready to learn what else was out there. Honestly, learning the high-level overview was not hard at that point.

I think a solid machine learning book coupled with a chart like this ([http://scikit- learn.org/stable/tutorial/machine_learning_map...](http://scikit- learn.org/stable/tutorial/machine_learning_map/)) is the most useful way to approach machine learning.

<comment><USER4> This table of contents is beginning to seem very familiar (I've done Google's internal machine-learning course and looked at several other courses/tutorials on the net), but what I'm wondering is: how do you do the more basic operations of feature and parameter selection? When I've tried using machine learning in my daily work, I usually top out at "not quite good enough", largely because the features I end up choosing have a lot of noise in their data. Meanwhile, more experienced experts (those who have been doing this for 10+ years) produce much better results in much shorter time periods because they use totally off-the-wall features that I would never have considered. When they've presented at these classes, they've said that feature selection is really the vast majority of the work in practical machine learning. How do you develop an intuition about which features will be useful? Are there any resources that are more like "A practitioner's guide to machine learning", talking about the stuff that's useful in practice and not just in theory?

<comment><USER5> Experience, as there is no canonical feature set that applies to all problems. Feature sets instead tend to be domain-specific.

The usual iteration loop for a machine-learning system is:

1) Try features.

2) Evaluate your system. If you are happy with your scores/metrics, stop.

3) Do error analysis/run diagnostics. Go to 1.

It is the last step I find inexperienced people usually lacking. You need to examine your errors and find commonalities among them.

For example, is there a certain class of error that hints at a certain feature you haven't tried? Do your existing features provide decent results to begin with? Or maybe you should just get more data? Whatever path you take, it needs to be defensible.

So, in terms of general advice:

1) Realise it's an iteration loop, not a fixed recipe.

2) Be able to justify why you are trying whatever it is you are trying.

With time, you'll develop intuition for given domains.

<comment><USER6> "2) Be able to justify why you are trying whatever it is you are trying."

This is just a restatement, I think, of the question you are responding to. I suspect a book on this topic would be quite popular.

</comment></comment></comment></comment><comment><USER7> I wrote a series of didactic posts actually deriving and implementing some of these algorithms, with long-term plans to get the heftier ones like SVM and boosting.

[http://jeremykun.com/main-content/](http://jeremykun.com/main-content/)

<comment><USER8> For an earlier, non-stultifying version of the site with an actually usable, tablet-scrollable wordpress theme, see:

[https://web.archive.org/web/20121114212050/http://jeremykun....](https://web.archive.org/web/20121114212050/http://jeremykun.wordpress.com/main- content/)

Great content, otherwise. But I swear all this 'web 3.0' gimmickry has set the web back at least a decade.

<comment><USER7> TIL that "stultify" is a word. And that my theme is bad for tablets.

</comment></comment></comment><comment><AUTHOR> Some are saying they're getting a 500 response "Internal server error." It's working for me, but just in case, here's the Google cache:

[http://webcache.googleusercontent.com/search?q=cache:wt- Qc3D...](http://webcache.googleusercontent.com/search?q=cache:wt- Qc3DtiBYJ:machinelearningmastery.com/a-tour-of-machine-learning-algorithms/+)

 _Edit: fixed link_

</comment><comment><USER9> This is a tour like being handed a list of animals is a tour of a zoo.

</comment><comment><USER10> It seems every week now there is a new guide to Machine Learning coming out. Is it just that I have started noticing them, or is there a real resurgence of popularity for these algorithms?

</comment><comment><USER11> Why are there so many post about Machine Learning for beginners, all these posts are basically saying the same things (I'm part of the problem as I did it as well some time ago)

My explanation is that it's easy to write about that and feel good after.

</comment><comment><USER12> I wasn't aware of Association Rule Learning, which seems like a very interesting and useful concept.

</comment><comment><USER13> there are so many machine learning algorithm out there, it is hard to decide where to start, I know it isn't realistic to learn one by one, no one have that much energy, any suggestions for who love this field, and don't know much about it? very appreciate.

</comment><comment><USER14> Nothing for recommender systems?

</comment><comment><USER15> broken

<comment><AUTHOR> In what sense "broken" \- it loads for me and is extremely useful as a catalog and description.

Can you be more specific?

<comment><USER16> I'm getting a 500 response "Internal server error."

<comment><USER17> same here, 500 and "This site is hosted by HostGator!"

<comment><USER18> Snappy strikes again!</comment></comment></comment></comment></comment>


Solarpunks - <AUTHOR> http://solarpunks.tumblr.com/

<comment><USER2> We're solving problems all the time

Energy storage efficiency is growing

Homeowners are selling power to their utility during the day and buying it back during the night

People are refraining from buying cars so they can buy flats downtown, and a few good bikes.

DIY-ers with did-it-themselves electric japanese subcompacts are blowing people's mind at drag racing strips

Freeways are being torn down

People are growing food in their backyards

A company with a stated goal of sending people to Mars are landing rockets on barges named after _Culture_ ships

The future is a nice place

</comment><comment><USER3> Hmm I still mix punkrockshows every now and then, "punk" as I see it is about "moving fast and break things" and is not really calm. But well you can define "punk" as you want and if the want to use it this way so be it.

<comment><USER4> It seems the "punk" in Solarpunk is there for contrast with Cyberpunk.

<comment><USER2> Punk is a suffix usually employed to evoke one part of another of the punk ethos of independence, DIY, peaceful anarchist self-governance, respectfulness, abstention from consumerist abuse (of hardware or of drugs) and so on.

Or for strong and non-mainstream aesthetics.

Depends.</comment></comment></comment>


Weapons of Math Destruction (The Dark Side of Data Science) - <AUTHOR> http://boingboing.net/2016/09/06/weapons-of-math-destruction-i.html <comment><USER2> The problem with most of these is not adjusting for cohort changes. For instance, in the SAT example, the author writes:

> In the 1980s, the Reagan administration seized on a report called A Nation > at Risk, which claimed that the US was on the verge of collapse due to its > falling SAT scores.

Suppose that low-income individuals start to take the SAT in 1980 whereas they didn't in 1970. The _wrong_ way to analyze SAT scores is to evaluate:

sum over cohorts P(SAT Score | cohort, Y)

where Y is the year. For instance, you might compare the total average score in 1980 vs. 1970. Doing so will show a decrease in SAT score because of the increase in low-income individuals taking the SAT, _not_ because the high- income individuals are doing worse. (This assumes that low-income people have less access to SAT training materials, and those training materials affect the score).

The correct way is to only compare scores _within a cohort_ :

P(SAT Score | cohort, 1980) > P(SAT Score | cohort, 1970)

That is, did the same cohort do better in 1980 vs. 1970?

(There might _still_ be some differences between the cohorts in 1980 vs. 1970. Maybe the low-income individuals who took it in 1970 had high confidence in school, whereas the 1980s kids were from a broader background.)

<comment><AUTHOR> The article addresses that a couple of paragraphs down. Thats her whole point.To quote:

"The Nation at Risk report that started it all turned out to be bullshit, by the way -- grounded in another laughable statistical error. Sandia Labs later audited the findings from the report and found that the researchers had failed to account for the ballooning number of students who were taking the SATs, bringing down the average score.

In other words: SATs were falling because more American kids were confident enough to try to go to college: the educational system was working so well that young people who would never have taken an SAT were taking it, and the larger pool of test-takers was bringing the average score down."

<comment><USER2> I was converting her text into math-ish notation. She's saying that

P(SAT Score > 700 | 1970) > P(SAT Score > 700 | 1980)

is inaccurate, and that we should instead use:

P(SAT Score > 700 | cohort, 1970) ~ P(SAT Score > 700 | cohort, 1980)

</comment></comment></comment><comment><USER3> > These brokers are training their model on the corrupted data of the past. > They look at the racialized sentencing outcomes of the past -- the outcomes > that sent young black men to prison for years for minor crack possession, > while letting rich white men walk away from cocaine possession charges -- > and conclude that people from poor neighborhoods, whose family members and > friends have had run-ins with the law, and "predict" that this person will > reoffend, and recommend long sentences to keep them away from society

This is an extremely important point to our times. Be aware that this sort of algorithm is harming society when it comes to prison sentences, and you're paying for it at multiple levels.

> Amazon carefully tracks those customers who abandon their shopping carts .. > interested in knowing everything they can about "recidivism" among shoppers > .. [and they seek out and talk] to their subjects -- to improve their > system.

 _If the prison system was run like Amazon ... [it would be] oriented toward rehabilitation ..._

(emphasis mine) (edit:formatting)</comment>


Daniel D. McCracken Dies at 81; Wrote Best-Sellers on Using Computers - <AUTHOR> http://www.nytimes.com/2011/08/13/technology/daniel-d-mccracken-dies-at-81-wrote-best-sellers-on-using-computers.html

<comment><USER2> His book on Fortran was the first programming book that I read in depth. I had 8 hours before the Empire Builder left Union Station in Chicago for Montana on my way home for Christmas. The book was for the next quarter.

I did not realize that he also started out in Montana in a small town that is small even by _Montana_ standards.

My relationship with Fortran deteriorated over the years, however. It was a welcome introduction.</comment>


Federal Appeals Court: No Copyright for Public Law - <AUTHOR> https://epic.org/2018/10/federal-appeals-court-no-copyr.html <comment><USER2> Things that shouldn't even be up for debate:

1\. Public access to the laws governing their behavior should be free

2\. All laws and decisions involving interpretation of the law should be available to the public.

This is a federal court (not the supreme court alas) saying that 1. Is clearly true.

Alas 2 continues to not be true in the US at least...</comment>


An event bus framework for event driven programming - <AUTHOR> https://github.com/acionescu/event-bus <comment><USER2>
        logger.info("...");

versus:

        EventHandle eh = EBus.getHandle(
            eventBuilder.executing().name("some operation").build());
        if (eh.isAllowed()) {
            eh.addParam("p1","v1").addParam("p2","v2").post();
        }

That's a lot of typing.

It needs a more compact API.

<comment><USER3> Yes, that's pretty full of boilerplate, even for Java, which is notoriously boilerplate.

There are more established event buses in Android with simpler syntax, like greenrobot's: EventBus.getInstance().post(new LogEvent("v1", "v2"));

Seen here: [http://greenrobot.org/eventbus/documentation/how-to-get- star...](http://greenrobot.org/eventbus/documentation/how-to-get-started/)

You can have multiple event buses and other customization there as needed, but you have sensible defaults to keep code small most of the time too.

Square also has one called Otto. If you want a lot of syntax and Java rather than Android, you might as well go full streaming with the RxJava library.

<comment> V-2 I think Otto is a fork, and simply an enhanced implementation of Guava's built-in EventBus

<comment><USER4> meanwhile Otto has become deprecated and the authors suggest going with RxAndroid

</comment></comment></comment></comment><comment><USER5> Event Bus often get abused, I made this framework for Android so that the framework can scale as you have more and more features and developers working on it: [https://github.com/edisonw/PennStation](https://github.com/edisonw/PennStation)

</comment><comment><USER6> Ill see your event thingy and raise you mine - [https://github.com/kashifrazzaqui/again/blob/master/again/ev...](https://github.com/kashifrazzaqui/again/blob/master/again/events.py)

</comment><comment><USER7> I vastly prefer typed events. All the really important string values scream "you sure aren't testing all of that" to me.

</comment><comment><USER8> Dupe: [https://news.ycombinator.com/item?id=12159452](https://news.ycombinator.com/item?id=12159452)

But you knew that, because it was you who submitted it.

<comment><USER9> I think that the site auto reposts in some cases when the post gains no traction

<comment><USER8> Sometimes, but not in less than an hour.</comment></comment></comment>