Google Search Now Includes Etymology - <AUTHOR> https://www.google.com/search?q=etymology+onomatopoeia

<comment><USER2> It really worries me that whenever Google rolls out a feature within their search results, it destroys a business. For example, earlier currency conversion and dictionary word meanings required using third party sites. Now it can be done directly via their search. I no longer visit the old sites. Now with this, I will be less likely to visit etymonline.com. Quite similar to how including IE by default in Windows lead to lawsuits of unfair competition/monopoly. Is it wrong to believe something similar may happen with Google search.

<comment><USER3> Looking forwards to the day Google includes electronic component datasheets in its search results and puts all those stupid unusable SEO-gaming datasheet repository websites out of business.

<comment><USER4> Amen.

If you need an example, Google "TFK426". No, it's not a tuning fork, it's an 8-pin DIL.

Same goes for the brokers: "SAA1084P".

Those are just 2 examples I found last Friday. They're components on an old PLC I need to fix and they're just laughing in my face. I suspect they're opamps but I'll probably never know and I'll end up telling someone to just buy a new system.

</comment></comment></comment><comment><USER5> Some initial remarks after playing around with this for a bit: Currently, this seems to only include the etymology for English words. Proper nouns are not included, except those also used as common nouns, like Newton. Nor are most compound words made up of simpler words or affixes such as mainland, snowman, simply, or even disuse. This is understandable because covering all these cases will dramatically expand the number of words that have to be dealt with, and this is probably the limitation of the original source used by Google for the etymology information, which was probably an etymological dictionary with the usual space constraints. But freed from such constraints, it should be feasible in the future to add in the etymological information for such compounds.

What I like is the tree structure of the presentation. This covers not only compound words but weirder cases of combination of disparate etymological sources—check out discombobulate or typhoon. But the tree structure is misleading in cases like apple, where Dutch appel and German Apfel are indicated as if they were parent forms instead of sister forms to the English apple. The branching should occur between Germanic and the daughter languages to make the relationship clearer. Also, note that this doesn't show the Germanic form for apple—it looks like it doesn't do hypothetical forms, restricting itself to attested forms.

A welcome feature would be being able to click through to different words at each stage of the etymology, to be able to trace through to even earlier stages or to see what other words are descended from the same roots.

<comment><USER6> > Proper nouns are not included, except those also used as common nouns, like > Newton

It has Pyrex, but just says it's an invented word.

Pyrex is invented, but comes from Pyro (Fire) + Rex (King), which makes the use of it for heat proof glass easier to understand.

The new Google feature is really neat. I'm uneasy about these things being built into Google rather than Google pointing people to other websites.

<comment><USER7> Google building more and more stuff directly into search has been going on since the early 2000s. Why are you uneasy now?

<comment><USER6> I've always been uneasy about it.

Google providing me with definitions was troubling, but online dictionaries are sub-optimal. Google giving me instant conversions was so handy that I didn't care.

But etymologies are handled nicely by [http://www.etymonline.com/](http://www.etymonline.com/) and it's sad to think they're going to get a lot less traffic now.

</comment></comment></comment></comment><comment><USER8> All in all, people really seeking etymology data won't use this, I don't think a single website is a reference, so one needs to combine many sources.

Personally I blend etymonline.com, [http://www.lexilogos.com/etymologie.htm](http://www.lexilogos.com/etymologie.htm), [http://www.cnrtl.fr/etymologie/](http://www.cnrtl.fr/etymologie/), www.wiktionary.org, and others to get a broader view.

This news will be little free publicity for them too, although I'd wish google to include a little set of premade links into his in-search proxy box. That would be a nice little touch, or maybe a commercial pain.

<comment><USER9> That would be nice, though I wonder if it would last if the even did it.

It used to be, if you searched for a map, Google would show a link to its own map (with thumbnail) + links to other mapping services (mapquest, maporama, etc). It used to be ...

</comment></comment><comment><USER10> The compiler cannot compile itself yet.

[https://www.google.com/search?q=etymology+etymology](https://www.google.com/search?q=etymology+etymology)

:(

<comment><USER11> Try again. That was fast.

<comment><USER10> I mean it does not display that nice graph.

<comment><USER9> Yes, I was under the impression the graph was the feature. The textual description of the etymology, I thought, was already often an included part of the snippet.

</comment></comment></comment></comment><comment><USER12> It seems more and more clear with every new announcement, that Google has adopted the "embrace, extend and extinguish" strategy and it's taking it farther than what we thought possible in the past.

These are worrisome news for every believer in choice and freedom. Google, a former supporter of free software, is now determined to exert its power to get rid of competitors and then lock us in. Our only option is to not give in to momentary convenience, but to cultivate the habit of comparing alternatives and choosing by ourselves instead.

<comment><USER13> Why should open, factual data, require Google to send users to third party websites, thereby increasing the latency and number of clicks for all users? The data for these almost surely comes from openly available word databases.

If I ask my computer or phone for the definition or history of the word 'Foo', I don't want to be sent off to historyoffoo.com as the top link, I just want it to give me the answer, followed perhaps by links to other stuff.

Do you think if you ask what time is it, Google should respond first and foremost that you need to click and go to dateandtime.com to see the answer?

Google's mission is the organize the world's information and make it universally accessible and useful, not to organize only the world's websites into 10 blue links.

The ultimate goal of Google is to built the Starship Enterprise's Computer. Could you imagine Captain Picard's frustration if he said "How long to Starbase Alpha at Warp 9" and the Computer replied "I can't give you the direct answer, but please visit StarbaseMaps.com and it will be able to answer your question."

This becomes all the more clearer if you imagine voice or mobile user, where multi-step latency is huge and queries should be answered in the fewest steps possible. Why it is evil for Google to do this, but not Apple+Siri I can't fathom.

<comment><USER9> Does Apple profit from ads embedded in Siri?

<comment><USER13> Siri advertises 'Bing' on some results, I'm sure they get paid for that.

</comment></comment></comment></comment><comment><USER14> There's also the good ol' Etymonline ([http://www.etymonline.com/](http://www.etymonline.com/)) which I prefer over the Google search.

<comment><USER15> Which of course has a !bang on DuckDuckGo: !etym or !etymology

For a good comparison of how much more information Etymonline has, look up the word "silly". Etymonline gives a much better sense of the almost unbelievable shift in meaning over time.

<comment><USER14> and, of course, "nice".

[http://www.etymonline.com/index.php?allowed_in_frame=0&searc...](http://www.etymonline.com/index.php?allowed_in_frame=0&search=nice&searchmode=none)

</comment></comment></comment><comment><USER16> As a native Hebrew speaker, I would love to see the reverse lookup. Enter a biblical Hebrew word and see how it propagated to other languages. Two words that I could come up with were leviathan and behemoth, but that was easy since these sound almost the same in Hebrew.

</comment><comment><USER17> Now I'll wait for a blog post from etymonline.com and wiktionary about how their traffic went to zero.

</comment><comment><USER18> You've always been able to search for bugs on Google, silly.

</comment><comment><USER19> My wife has been using this for about a month to help teach Greek and Latin roots to her 7th grade language arts students. It's a great tool for them to use since they already know how to google.

</comment><comment><USER20> Has done for a while, but wasn't aware of using the "etymology" query; I used to hit the drop-down on "define:" queries.

</comment><comment><USER21> Neat. Wonder how they're generating those images. Using go + doing it as they're queried maybe (similar to [http://blog.golang.org/from-zero-to-go- launching-on-google](http://blog.golang.org/from-zero-to-go-launching-on- google) )?

</comment><comment><USER22> I googled war.

[https://www.google.com/search?q=etymology+onomatopoeia#q=ety...](https://www.google.com/search?q=etymology+onomatopoeia#q=etymology+war)

War never changes.

</comment><comment><USER23> I'm a little sad it doesn't include the Proto-language root.

</comment><comment><USER24> It seems they have pre-processed images of etymologies of most of the words and just indexing it.

</comment><comment><USER25> Looks like a normal search to me...

</comment><comment><USER26> startpage.com does not have this "feature".</comment>


Zed Shaw's New Blog - <AUTHOR> http://www.zedshaw.com/index.html

<comment><USER2> Key Quote --

"I've found that while I've moved on from the Rails scene, the scene has not moved on from me"

The true quality of a community is not just a measure of how forceful or big it is, but how easily it can adapt to change. This quote, plus the fact that the plan for "moving forward" was to pull in another framework wholesale, does not bode well for the Rails community. It by no means indicates that the Rails community is doomed, but it does not bode well.

I'd also like to take this moment to point out that this is yet another indication that the Ruby community != the Rails community. Quite to the contrary, I think you'll find the Ruby community quite flexible and robust when faced with opposition. (Just read some of the recent ruby-talk discussions on 1.8.6 vs. 1.8.7 if you don't believe me...)

<comment><USER3> The fact that a guy who's been known to be somewhat of a troll states, anecdotally, that an entire community is still "consumed" by him proves that the community must therefore be in trouble? Don't agree.

<comment><USER4> It was parody.

<comment><USER3> Ah, guess I don't know the source well enough.

</comment></comment></comment></comment><comment><USER5> From his site's source code, he's using YUI it seems, but there is one gem:

Zed Shaw

Enjoy the show.

</comment><comment><USER6> God, that persona's much better. It's like the neighbours turned the 3am rap music down.

<comment><USER7> Does he have a link to the old page? I can't sleep without that music.

<comment><USER8> <http://web.archive.org/web/*/http://www.zedshaw.com/>

</comment></comment></comment><comment><USER9> It's oddly work safe. I wonder what Zed's up to.

<comment><USER10> He dropped the tough-guy stuff a bit ago, admitted to creating said persona for (more-or-less) the purposes of trolling, and announced that he would be acting a lot more serious in the future.

<comment><USER11> Got a hard time finding another job due to his 'fame', maybe?

<comment><USER9> Seriously doubtful. Zed may have had a website that featured him talking like a pirate, but I think it's pretty well known that he can code like a motherfucker.

<comment><USER11> just a theory. Even if he couldn't code at all, he speaks VERY well (seen him at a Canadian conference) - that alone is enough to land a job in most pointy- hair-managed companies out there...

<comment><USER10> He said he wanted to focus more on music than code. I think he's doing pretty well for himself.

Also, he can absolutely code - and the code of his that I've looked at has been pretty awesome on all accounts.

</comment></comment></comment></comment></comment></comment><comment><USER12> Keep feeding the monster, folks.

</comment><comment><USER13> The comments here are interesting. They either breath a sigh of relief and welcome the change in persona with open arms, or they let out a "pfft," uninteresting and wish for the old Zed. Any mediators out there?

<comment><USER14> " Any mediators out there?"

The silent majority who likely don't give a rat's ass either way?

</comment></comment><comment><USER15> How is this Hacker News?

</comment><comment><USER16> Looking forward the new projects and coming articles

</comment><comment><USER17> Is this the death of Zed Shaw as we know it? Goodbye interesting articles...

<comment><USER18> If that's what you think, then you're not thinking this through. Look, I don't like Zed -- especially the jackass persona he adopted -- and he doesn't like me, either. (I've had a few run-ins with him for various reasons.)

When he's not ranting like in the Rails Rant, or his odious performance "art" (insulting friends of mine when they weren't there to defend themselves) at RubyFringe this summer, Zed's an intelligent guy who deserves a lot of credit for his positive contributions. His essay about statistics is an absolute must-read (and he's _right_ ). Zed's essays are worth reading because they are well-considered, even if I disagree with the conclusions therein.

I personally look forward to his non-ranting on-line personality.

</comment></comment><comment><USER19> to tell the truth I liked the old design better, this one is kinda boring

</comment><comment><USER20> "I've found that while I've moved on from the Rails scene, the scene has not moved on from me. It's time to do something else with your lives."

I see the, uh, "elevated self-esteem" remains. As a member of the "Rails scene" myself I don't feel particularly stuck on Zed, and I don't get the impression many others are either, if they ever were. Maybe a couple of curmudgeons whose nose he tweaked or something, but on the whole the scene is much too large for any one attention-seeker to disrupt for long.

Note to Zed: Reddit users != "the Rails scene". Anyone who got bent out of shape by your rant != "the Rails scene". The real Rails scene is too busy, you know, working.

Not that I don't like Zed, I do. As our gentle host PG once put it, he "offends the right people", and I respect anyone who gets things done. But his antics have been a drop in the ocean. Zed's work on Mongrel affected the Rails scene far more than his rants ever did, so on balance his influence has actually been pretty positive.</comment>


What This Medieval Wine Jug Can Tell Us About Islam - <AUTHOR> http://www.prospectmagazine.co.uk/blogs/sameer-rahim/what-this-medieval-wine-jug-can-tell-us-about-islam <comment><USER2> The OP has fallen into the common trap of applying the Christian concept of sin to the Islamic context. Christianity is generally a binary system of sins. Things are forbidden or they are not. Islamic is full of more subtle interpretations. Things are good and bad, some worse or better than others. This allows for contradictions, such as an Islamic wine jug. I chalk this up to how the hadith were compiled.

This medieval jug can also no more tell us about "Islam" than a pot from 13th century Ireland can tell us about Lutheranism . At best they are tiny snapshots within an epic history.

<comment><USER3> That's an important difference. Christians believe good is from God and evil is from Satan. (Forgive me if I'm mistaken, I know that's a gross oversimplification.) Muslims believe good and evil are both creations of God. So most things have both good and evil in them, including alcohol:

 _They ask you about wine and gambling. Say, "In them is great sin and [yet, some] benefit for people. But their sin is greater than their benefit."_

\-- 2:219 [http://quran.com/2/219](http://quran.com/2/219)

Keep in mind that the Quran was revealed piece by piece over two decades. The later parts add to the earlier parts. That can be a source of ambiguity to Western readers (not to mention that the chapters are not in chronological order), which is why it's important to understand it as a whole rather than its individual verses or chapters.

<comment><USER2> Careful. Two or more people agreeing on Islam in a positive way probably triggers a MIB bot. And I've got a flight in a couple hours.

</comment></comment></comment><comment><USER4> "The Rubaiyat" [1] by Omar Khayyam [2] has numerable references to wine.

Omar Khayyam was one of the great Islamic Scientist-Scholars and a famed son of Khorasan.

[1] [http://classics.mit.edu/Khayyam/rubaiyat.html](http://classics.mit.edu/Khayyam/rubaiyat.html)

[2] [http://www.muslimheritage.com/article/'umar-al-khayyam- omar-...](http://www.muslimheritage.com/article/'umar-al-khayyam-omar-khayyam)

<comment><USER5> Khayyam was also a skeptic and had very hostile attitudes to all religions at various times. Very, very far from being orthodox in any sense.

<comment><USER6> And very, very far from being supported by the Islamic clergy of today.

Khayyam died in 12th century. What's with some nine hundred years afterwards? What's with the state today with to which we have to know? Whoever wants to argue what "Islam is" must observe what the clergy and "the learned" promote _today_ and since oil rich countries started to pump their money all through the world (billions and billions), hijabs, jihad and sharia are more popular than ever. The ideal becomes exactly a country like Saudi Arabia with prohibition, beheadings and hand cutting. Because they are the most capable in spreading their values, and they do support their values with the quotes from the holy texts. You can't "catch them" in "misquoting."

That's the dangerous development, compared with what was common in a lot of mostly Muslim countries until just some decades ago. And also the role of the US in that development is far from positive (as documented by the Washington Post):

[https://www.washingtonpost.com/news/worldviews/wp/2014/12/08...](https://www.washingtonpost.com/news/worldviews/wp/2014/12/08/the- taliban-indoctrinates-kids-with-jihadist-textbooks-paid-for-by-the-u-s/)

"The Taliban indoctrinates kids with jihadist textbooks paid for by the U.S."

And nobody should pretend all this doesn't exist. Especially not based on what was centuries ago: we have to take the stance to what is happening now.

Anyway, Omar Khayyam was a fantastic poet. Absolutely joy to read, but don't expect that many of those who are religious today would share his views.

</comment></comment></comment><comment><USER7> [https://en.wikipedia.org/wiki/Timeline_of_ancient_history](https://en.wikipedia.org/wiki/Timeline_of_ancient_history)

</comment><comment><USER8> Pfft. Islam is way broader than medieval Iran, but even in medieval Iran people were good at wine. Hopefully this article does bust some really ignorant stereotypes, but it doesn't go far enough. Shiraz, anyone?

</comment><comment><USER9> A medieval camel found in Austria will tell you more about Islam. It came to it's present location when Islam almost conquered Europe.. for the second time.

[http://www.cnn.com/2015/04/02/europe/austria-camel- ottoman/i...](http://www.cnn.com/2015/04/02/europe/austria-camel- ottoman/index.html)</comment>


Shipwreck Is Everywhere - <AUTHOR> http://hudsonreview.com/2017/10/shipwreck-is-everywhere/#.WjoGMdvMzmF <comment><USER2> That was extremely interesting! I learned many new things and really enjoyed the writing.

I wanted to subscribe or leave a donation, but the form is non-HTTPS, so unfortunately I did not.

If anyone from the Hudson Review is reading this, fix that, for the safety of all your users, and you'll make a subscriber out of me.

<comment><USER3> It looks like it collects payment info via Paypal but it does leak personal info (name, address, email) via HTTP.

</comment></comment><comment><USER4> I was surprised that it didn't mention the 'Birkenhead drill,' which featured in Kipling, Heinlein & Weber: [https://en.wikipedia.org/wiki/HMS_Birkenhead_(1845)#Birkenhe...](https://en.wikipedia.org/wiki/HMS_Birkenhead_\(1845\)#Birkenhead_drill)

</comment><comment><USER5> I don't really have anything intelligent to say about the article, but I love rambling surveys of history and literature like this and I'm glad they get posted here from time to time.

<comment><USER6> Same thought. Also, I'm in a playbypost pirate DnD adventure, so makes good reading</comment></comment>


Alternative Internet - <AUTHOR> https://github.com/rossjones/alternative-internet <comment><USER2> Since I know the skill gap on HN is pretty wide, I just wanted to chime in to say that if this is some kind of counter-intelligence measure, it's not really going to work considering that the US government is collecting information at layer 1 (i.e. directly gathering information from the wire).

A true "alternative internet" would, at this point, require its own infrastructure due to the routers and switches of the Internet using the TCP/IP stack. (assuming that an alternative internet would be a variation on the IP protocol).

The entire issue with the government surveillance of today is that they're (allegedly) storing _all_ data, even the encrypted data, and holding it to either brute-force crack, waiting until whichever cipher/protocol gets broken, or waiting until computing power is abundant enough to crack the encryption- du-jour in a reasonable amount of time.

This is why ideas like Raspberry Pis on balloons have been proposed as true "alternative" internets. Not to get all tin-foily, but I would assume that any undertaking that ambitious would have government agents working from the inside.

If you're transmitting any data that could be illegal, your safest bet is to use some kind of encryption that would take longer than the statute of limitations for whichever crime you're committing to break (you'd probably also have to factor Moore's law into your calculation and pray that quantum computing doesn't become viable in the next x years).

<comment><USER3> Additionally, it is worth noting that the weakest target is very often the human element. Although this was noted by Mitnick in his "hacking" (which generally was just clever social engineering), it is equally true when governments are targeting you. The stasi (or other pernicious organizations organized to carry out state censorship) could easily have someone smeared in the press, dismissed from their job, or many other means short of official imprisonment.

To the point of encryption, as noted by the NSA (inclusive of present revelations), it actually makes you a target for state surveillance. This is a bizarre catch 22. If you are using facebook and "rah rah-ing" about Obama or the latest political fever you probably are at very little current risk of long term data retention. The government doesn't care about you. If you slip into politically suspect views and/or start encrypting your messages simply because you don't want the government to read them, you attract government attention, including the likely possibility that your communications will be retained.

Moreover (and this is where it gets scary, even if it wasn't already), the likelihood is that the many people that are part of your social graph (even if you aren't involved in social networks, some friends likely are and have probably shared their email contacts at the very least), governments can very easily figure out your social circles, and how suspect they may be from any standpoint that the government cares about.

Today this may be "terrorism" (itself a vague term, but one that at least nominally includes the threat of violent acts), tomorrow it may simply be having politically incorrect opinions of some variety. As noted by many, even the nominal but legally actionable protections for American citizens have been eroded to the point that the executive branch can hold anyone in infinite detention without trial. A world without borders has become the panopticon, a jail where we are bound by ever-peering eyes of our peers.

"What you say, can and will be used against you in a court of law" \-- even if you said it 10 years ago when you were drunk in a private message on Facebook.

Welcome to the Brave New World.

<comment><USER4> _" encryption.. actually makes you a target for state surveillance"_

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

<comment><USER3> Fascinating. My preferred choice for transmitting arcane knowledge is poetry (in fact, there is a long tradition of exchanging alchemical poetry in cipher).

</comment></comment></comment></comment><comment><USER5> I think one problem with these initiatives is that money is usually not involved. When things like bandwidth are free, the demand tends to be higher than supply. Limited bandwidth then limits the possibilities.

I'm not proposing a system where you would pay to "TOR Ltd" for their services. Instead the "economy" should be network based, with no single entity controlling it. If I wanted to send stuff through the network I could say that I'm willing to pay x coins for this. The network would figure out cost efficient route and the participating nodes would get the payment. If I wanted to earn money (or credits), I could do so by putting my machine as part of the network and offering my network capacity to others.

If thinks would work out well, there would be people earning some money by running nodes on the network. Just like they are people investing in Bitcoin mining rigs.

<comment><USER6> At least right now, the problem is that the payments themselves might undermine what the system is set up to do, because the payments might be traceable.

There are proposals for truly anonymous and decentralized digital currencies (ZeroCoin comes to mind). However, they are not exactly practical because their overhead is quite high.

</comment></comment><comment><USER7> Something that seems to be missing from the current world: A P2P noise network.

A sufficient amount of encrypted noise emitting from many nodes makes the task of capturing and decoding _everything_ quite a bit more challenging for an intrusive regime. Effectively, this is steganography: Everything should be encoded in cat pictures with an accompanying text of hot keywords.

<comment><USER8> Ive been thinking about this and how to implement it, my conclusion was that NSA has the resources to filter out noise, especially seemingly random communication, as they already possess the social graph and have pretty good idea of who talks to whom and when. If suddenly a browser extension or app started sending "noise", to whom will it send it? A network? Where to get the list of IPs to spam? Just randomly? Just randomly is detectable! Thats easily filtered out - just exclude the network from the important data they tap. What if you randomly send a bunch of cat pictures and random noise to people of your contact list? This is called spam and receiving such, is not nice, as we can filter it on the receiving end, so can NSA filter it from their important calculations. But then you might think, lets send noise randomly and in the random noise let us communicate... meh, basically what a "P2P noise network" would do is increase the hassle and usability of computing systems for everyone involved but wouldnt really offer privacy for us.

When you kind of begin to make it less random, then you basically introduce plausible deniability and onions and begin solving problems that people are already working on and who need your help there more than "p2p noise network", then youre back to "lets make a good usable p2p anonymous/deniable communication system that can withstand NSA as advesary".

Still, it is an interesting idea, how to flood NSAs/FRA/GHCQs systems? Can we make a browser extension thats easy to use that would randomly GET pages from your history while you are actually away from computer - generating false content and increasing bandwidth usage, or a configurable spider to follow links/pages or even friends streams of choice? Would you use spammers techniques of markov chains to post random crap on open systems? Meh, thats still just an inconvenience for NSA.

What seems to be really important is who talks to who then how do you get in contact with strangers on the internet without NSA knowing? How would you know the stranger youre talking to isnt a cover agent?

<comment><USER7> > _Just randomly is detectable!_

Only after analysis, and only after some confidence level has been exceeded. And that is the point: Such analysis takes time and resource.

<comment><USER8> I believe the time and resources required for us to develop such a tool and the time invested of users to run it is much more than the total inconvenience it would cause to surveillence systems.

But please prove me wrong, Id love to run such a tool quite easily, even if it doesnt work, just for shits and giggles and just perhaps for that extra cent of cost and resources wasted of powerful organizations. (still kind of our taxpayer cents but...)

Would you run a simple browser extension that would GET pages while you are away, pages that your browser has seen in your history, and an advanced mode, pages on pastebin and a selection of forums/sources? Meh, could be done with a simple bash script and curl I guess for the advanced users. Would be nice if it could also crawl most news sources.

Stepping the idea up a bit, random but seemingly valid User-Agents, exchange of tracking cookies with other users of the extension, and click on all the ads! Would you use such a tool?

</comment></comment></comment></comment><comment><USER9> Most (if not all) of the "Currency Clones" listed are scams. Be careful. Generally, the only coins you want to pay attention to are BTC and LTC.

Here you can watch the steady stream of altcoins and their scam practices.

[https://bitcointalk.org/index.php?board=67.0](https://bitcointalk.org/index.php?board=67.0)

<comment><USER10> I'd like to keep them for completeness sake, but will try and make it more obvious that they should be avoided.

<comment><USER11> If you want a "complete" list you're missing a lot of other scams: [https://bitcointalk.org/index.php?topic=134179.0](https://bitcointalk.org/index.php?topic=134179.0)

I'd suggest only including the "major" ones listed on that page. The rest are trivial knockoffs.

<comment><USER10> Okay. At least fourth person who's told me now. Will remove the non-major ones.

</comment></comment></comment></comment><comment><USER12> Suggested Pull:

@user: NSA

\---

+++

In order to comply with NSA Directive [REDACTED] and FISA Court Order [Classified], anyone using these technologies will be required to install LiterallySpyingOnYou.exe or an equivalent binary for your OS of choice.

Failure to comply will result in <strikeout>your immediate offshore imprisonment</strikeout> a fair and impartial trial by your peers.

+++

</comment><comment><USER13> I've always been curious about I2P. I2P is more decentralized than TOR, as TOR has the weakness of needing exit nodes, and today it is very hard to set one up yourself (and not be arrested/shutdown). However, I don't know enough about network/protocol security to even be able to tell if I2P is legitimately secure, and I haven't seen any scientific analysis of it. Anyone else aware of such an analysis?

<comment><USER14> Well the reliance on exit nodes isn't really what separates Tor from I2P; the latter requires exit nodes for accessing publicly-facing servers as well. Neither requires them for accessing servers that are internal to their network. This is sometimes confused because Tor puts more emphasis on outproxying, and I2P on inproxying, but both networks are capable of both activities.

</comment></comment><comment><USER15> Haven't heard of Drogulus before, sounds interesting.

Anything that implements a Kademlia-like decentralized key-value datastore (basically, a DHT) gets my curiosity. Kademlia is a system/protocol how to implement a DHT and how to perform searches on it. The idea is that all network nodes are identified by a (traditionally, 160bit I think) hash. If you want to implement a P2P filesharing network based on Kademlia (like Gnutella), you hash each file to a bitstring of the same hash length.

Now, when you want to reach a particular node (and you have its hash but not its IP), you can do an efficient search by traversing the nodes in the _direction_ of the target nodes. For direction, a distance metric is needed in this case. The distance between two given hashes is simply the result of [hash1] xor [hash2]. This is rather simple and ingenious: you get a value representing the amount of bits by which the two hashes differ. Hence you have a way to measure distances in the hashspace.

Therefore, when trying to locate a node, you don't need to do an exhaustive exponential "ping all my neighbours and get all _their_ neighbours" search; one could say that you are able to follow a vector in the hashspace. _edit:_ by which I simply mean, the most simplistic way to achieve this would be - pick a node from pool/neighbourhood with id/hash _closest_ to target; get id/hash from its pool closest to target; continue until reaching a critical distance within which nodes will be responsible for holding the desired key->value pair. (I'm sure the actual algo will need to be somewhat more complex, as it's very easy to run into dead-ends this way, and so on.)

When there are files involved, nodes whose hashes are close enough to a given key (which is a hash of a file, more or less) are responsible for storing those key->value pairs ('value' differs on implementation, but basically it's another hash pointing to the node which actually has the file in question, if I'm not mixing things up; the whole thing is more complex, with a way to search using (hashed) keywords, etc.) Hence one can implement an efficient distributed search algorithm, where you focus on the hash-neighbourhood of a particular file hash, and get key->value responses from the nodes responsible.

This kind of a system has its disadvantages and possible points of attack. See the wiki article on Kademlia. [1] Probably the most well known type of attack is Sybil attack: [2]

        In a Sybil attack the attacker subverts the reputation system of a peer-to-peer network by creating a large number of pseudonymous identities, using them to gain a disproportionately large influence. A reputation system's vulnerability to a Sybil attack depends on how cheaply identities can be generated, the degree to which the reputation system accepts inputs from entities that do not have a chain of trust linking them to a trusted entity, and whether the reputation system treats all entities identically.

Now, Drogulus seems to propose at least a partial way around this, though I suppose it'd still be possible to actually flood/populate the hashspace with garbage(?): [3]

        The drogulus has three core components:
        * A distributed hash table (DHT) that provides the data store and replaces DNS.
        * Trust and identity enforced via cryptographic signing of digital assets.
        * Logos [...] (say "log-oss"), a simple implementation of a Lisp like programming language for asynchronously working with data stored in the DHT.

        The drogulus implements a version of the Kademlia distributed hash table. The innovation the drogulus brings is that keys and values (items) are signed in such a way that their provenance can be proven and content shown to be intact. Furthermore, users cannot interfere with each other's items stored within the distributed hash table unless they have access to the same private key. Items are self contained and any that do not pass the cryptographic checks are ignored and nodes on the network that attempt to propagate such values are punished by being blocked by their peers.

I don't have time to actually delve into this now, but the next paragraph piqued my curiosity even more - if anyone is into this, would be interesting to hear some comment :)

 _Logos programs are themselves values stored within the DHT, run in asynchronous "ensembles" that arrive at a consensus and process other items of data stored within the DHT. They are sandboxed and intentionally limited in terms of time (how long a computation may last) and space (how much memory may be used). Since Logos programs are also data there is a mind-bending side effect that Logos programs can rewrite other Logos programs in order to extend the Logos programming language itself. This is an important property: users have the autonomy to grow the Logos programming language to suite their own needs._

So, something something - Kademlia-like crypto-signed homoiconic datastore - something. Hmm.

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

[2]: [http://en.wikipedia.org/wiki/Sybil_attack](http://en.wikipedia.org/wiki/Sybil_attack)

[3]: [http://drogul.us/how.html](http://drogul.us/how.html)

<comment><USER16> Hi,

I'm the originator of the drogulus.

First things first: it's an unfinished work in progress and an _experiment_ on which I've been hacking during my 40 minute train journey in to work. So, yes, "something something - Kademlia-like crypto-signed homoiconic datastore - something" just about sums it up.

I can't spend a lot of time answering right now, but I gave a short presentation about the drogulus at this year's Opentech in London which resulted in the following blog post (giving a high-level overview of my motivations and intentions): [http://ntoll.org/article/ppdd](http://ntoll.org/article/ppdd) I followed up with some clarifications in this post: [http://ntoll.org/article/drogulus- questions-and-clarificatio...](http://ntoll.org/article/drogulus-questions- and-clarifications)

I have several more blog posts in draft form about other aspects of the system.

It's very early days and I'm pretty sure there are lots of problems with what I'm doing. But, as I mentioned in the first post referenced above, I'm having too much fun to stop. ;-)

Happy to answer questions and constructive feedback, comment and critique is most welcome.

N.

<comment><USER17> I've been working on a similar project for about a year now. Interested in exchanging notes? We are basing ours on a Chord DHT for better robustness. email@example.com

<comment><USER16> Hey, I get user unknown from cs.gsu.edu.

<comment><USER17> And that is my fault. I left out a letter. Now that you have displayed interest and I feel less awkward about directly approaching you I just went ahead and emailed you.

Thanks!

</comment></comment></comment></comment></comment><comment><USER18> There's also Hyperboria, which is based on cjdns nodes.

[https://github.com/dansup/Hyperboria](https://github.com/dansup/Hyperboria)

</comment><comment><USER19> Makes sense to have good decentralized tools but what about endpoint security ? We have to suppose that average OS does have many 0day vulnerabilities so it's easy to get all important data from your computer.

To have good firewall & IDS, automatic analysis, secured kernel - that's was should concern you people.

And that's not all - we cannot be sure if hardware itself does not send any unique IDs to vendors... or network card can mark some packet by unique signature and agency can capture those packet as they pass through internet. I remember i read that few years ago : [http://www.slideshare.net/the_netlocksmith/defcon-2012-hardw...](http://www.slideshare.net/the_netlocksmith/defcon-2012-hardware- backdooring-slides) I would bet there is many backdoors hidden in hardware.

</comment><comment><USER20> Some time ago I wrote a requirements document for the "Alternative Internet", published by Internet Society Journal:

[http://www.internetsociety.org/articles/moving-toward- censor...](http://www.internetsociety.org/articles/moving-toward-censorship- free-internet)

This was discussed within the IETF and slowly moving forward. Key point is: too many fragmented single-person projects exist. No structured approach with documentation, unit testing and related work tracking.

</comment><comment><USER21> Why is Project Byzantium not on the list when FNF is.

These guys work on a very advanced mesh network, and would love community collaboration & support.

project-byzantium.org

<comment><USER10> Because nobody sent a pull request? Have added it.

</comment></comment><comment><USER22> Why is Tor not on the list?

<comment><USER10> Because it was so obvious I missed it. I'll add it now.

<comment><USER23> Also cjdns[0] is a good one to add!

[0] [http://cjdns.info/](http://cjdns.info/)

</comment></comment></comment><comment><USER24> Does anyone know anything about Project Meshnet? [http://projectmeshnet.org/](http://projectmeshnet.org/)

I discovered it a few days ago and it sounds promising but some of the cjdns whitepaper was over my head. Apparently there are a few hundred people participating in their alternative internet on a daily basis already.

</comment><comment><USER25> Oooohh!! Hey I will have a look at some of these myself. But what would some of ye with experience recommend for... irc/sharing some files with a network of friends only? I'd like to be able to have private chats with only one or multiple people aswell. cheers!

</comment><comment><USER26> I2PBote[0]: distributed, p2p, encrypted, anonymous (internal) email. It uses I2P's DHT.

[0] [http://i2pbote.i2p.us/](http://i2pbote.i2p.us/) (or [http://i2pbote.i2p](http://i2pbote.i2p) from inside I2P)

</comment><comment><USER27> Anybody who hasn't taken a look at Namecoin in the last month or so should take another peek.

A GUI client with name registration platform came out recently and it's quite the change from the command-line-only options we have had available for the last few years.

</comment><comment><USER28> It's things like these that are illegal in a SOPA[0] nation

[0]: [https://en.wikipedia.org/wiki/Stop_Online_Piracy_Act#Autocra...](https://en.wikipedia.org/wiki/Stop_Online_Piracy_Act#Autocratic_countries)

</comment><comment><USER29> What about the Phantom Protocol? Is it abandoned? Not feasible? I haven't heard much about it in the past few years:

[https://code.google.com/p/phantom/](https://code.google.com/p/phantom/)

<comment><USER10> I've added it because the homepage has links to some interesting papers.

<comment><USER29> I know, that's why I've been such a fan of it. In theory it sounds almost perfect, but I haven't seen anyone put it into practice yet.

</comment></comment></comment><comment><USER30> Firecloud is an architecture currently being explored within Mozilla that should be added to this list:

[http://literaci.es/firecloud](http://literaci.es/firecloud)

<comment><USER10> Yeah, I'm just waiting on Vinay to give me a full list of what's involved.

</comment></comment><comment><USER31> for the uninitated, what does he mean decentralization?</comment>


The Flying Nimbus – A high-power, self-balancing transportation contraption - transistor-man http://transistor-man.com/flying_nimbus.html

<comment> transistor-man Recently finished a self-balancing skateboard contraption, and thought you folks might be interested. Its more intro micro-controller and heavier on the machining side, but, it was an interesting experience on iterative design.

<comment><AUTHOR> Looks way better than the MotoTec Wheelman.

[http://www.toysrus.com/product/index.jsp?productId=42682786&...](http://www.toysrus.com/product/index.jsp?productId=42682786&cagpspn=plat_19199621&camp=PLAPPCG- _-PID19199621:TRUS&eESource=CAPLA_DF:42682786:TRUS)

<comment><USER2> I owned an earlier generation of the Wheelman: [http://www.dersh.com/dershstock/DS05/Wheelman.jpg](http://www.dersh.com/dershstock/DS05/Wheelman.jpg)

It was really hard on your shins!

My favorite part was that the drive train in that generation meshed directly into the knobs on tires.

</comment></comment></comment><comment><USER3> Do I have to be pure of heart to be able to ride it?

</comment><comment><USER4> If it balances to be perfectly level, does that mean on hills it scrapes?

If so, any plans to put proximity sensors under the sides to help it determine what "level" is?

</comment><comment><USER5> Looks amazing and fun, thanks for sharing! Please post if they are ever going on sale or kickstarting as I'd love to have one.

</comment><comment><USER6> That is so cool. Not quite as cool as a hoverboard, but closer than anything I've seen so far!

<comment><USER7> [http://mobile.nytimes.com/2014/10/21/technology/hoverboard-s...](http://mobile.nytimes.com/2014/10/21/technology/hoverboard- still-in-the-future.html)

Their hoverboard works. I believe they now have a kickstarter too.

<comment><USER8> It works only using a specific metallic surface.

</comment></comment></comment><comment><USER9> Reminds me of [http://solowheel.com](http://solowheel.com)

</comment><comment><USER10> holy CRAP that's cool. I want one. (and one for my kid)

</comment><comment><USER11> finally we can do mounted archery in da city!

</comment><comment><USER12> Presenting: the Schmoboard :-)

</comment><comment><USER13> Cha La Head Cha La!<comment>~

KA ME HA ME HA!!!!</comment></comment>


Why I Don't Teach SOLID - <AUTHOR> http://qualityisspeed.blogspot.com/2014/08/why-i-dont-teach-solid.html <comment><USER2> [https://hn.algolia.com/?query=why%20i%20don%27t%20teach%20so...](https://hn.algolia.com/?query=why%20i%20don%27t%20teach%20solid&sort=byPopularity&prefix&page=0&dateRange=all&type=story)

</comment><comment><USER3> When I started coding, I just hacked stuff out any which way. This code was hard to extend, because it had no structure.

When I arrived at university, I tried to use all the "appropriate" design patterns and software engineering techniques. This code was hard to extend, because it had 60 separate extension points, all of which were in the wrong place (and none of which had ever been used).

When I arrived at my first internship, I killed a project or two though grotesque over-engineering.

Today, I'm just happy if the code is simple, readable, and does one thing well, and if it has enough unit tests to prevent bit rot. If I add an extra layer of abstraction, I do it because it makes the code simpler, or because it eliminates duplication.

<comment><USER4> "This code was hard to extend, because it had 60 separate extension points, all of which were in the wrong place (and none of which had ever been used)"

I've been working with "enterprise" systems for ~20 years and I swear that most of the extension points I've seen in custom-built systems have never been used to extend anything and simply complicate the original system.

Of course, a lot of products (particularly EPR and CRM) are extensible - sometimes quite elegantly, sometimes with Lovecraftian horrors, but at least they actually get used.

</comment></comment><comment><USER5> I've been the elephant in the application architecture room for years. I was opposed to Dependency Injection for years for the primary reason of Complexity, Readability, and Teachability.

As a consultant, I have the opportunity to traverse many different development environments managed by diversely capable development teams. This experience has led me to the conclusion that there are many more entry-level, mid-level, and worker-bee developers than senior programmers and architects.

So when architects design new systems, you'll see a lot of highly complex, loosely-coupled code that's simply unreadable, and no amount of "knowledge- transfer" will bridge the gap with the wider audience of developers who are not as skilled.

You end up with those mid-level developers altering code in ways that break the original intent with the primary concern of being productive and completing tasks. I can't tell you how many times I've had to unravel shoddy code baked on top of or into an otherwise "normal" architecture.

This is why I eventually postulated that complexity trumps loosely-coupled architectures. Our "customer" as architects are those mid-level developers. We need to build frameworks and code bases that _anyone_ can maintain and enhance.

So let's change it to SOLID-C. SOLID principals minus the Complexity. If we can achieve that, everyone will succeed.

<comment><USER6> It's funny to me from a mathematical POV. Dependency injection is clearly "just" function abstraction. It could not be simpler.

Yet here we are belabored by whole frameworks to achieve it.

<comment><USER5> There are ways to talk about it that help developers understand. Instead of focusing on the pattern overall, talk about the core dependency manager as often as possible. If a junior or mid-level developer gets it pounded into their heads that there's a magical piece of code doing some stuff they can't see, then they might just figure things out.

But that's only a band-aid. It's my experience that they still won't truly understand why they can't just call A from B and they certainly don't understand how to get B in A through an injection.

<comment><USER6> It always just feels like unnecessary terminology and technology. Here's the core pattern.

        function app(injected) {
          return injected.doSomething();
        }

        function main() {

          var injectable = new Injectable();
          var result     = app(injectable);
          console.log(result);

        }

Everything else is around obscuring that core pattern or making it "convenient" by providing some kind of naming abstraction. That at least makes a little bit of sense in Javascript, like above, since you need the stringy names to simulate types... but in any language with nominal typing you're just killing yourself with unnecessary complexity.

</comment></comment></comment></comment><comment><USER7> If you learn only 1 thing from SOLID, it would be the Single Responsibility Principle (SRP). Honestly, this is over 80% of the value of SOLID.

The Interface Segregation Principle is a special case of SRP, and Open-Closed Principle and Liskov Substitution Principle are most applicable to deep inheritance hierarchies, which are rarer than they were. SRP pushes you towards "composition over inheritance" which is also good.

Yes, using a lot of interfaces and an IoC container does push you towards a particular style, but it's not that hard to read once you know it.

<comment><USER8> > Liskov Substitution Principle are most applicable to deep inheritance > hierarchies, which are rarer than they were.

The Liskov Substitution Principle is applicable wherever inheritance is used, and failing to follow it anywhere when using inheritance pretty much guarantees bugs will eventually emerge. If its "most applicable to deep inheritance hierarchies", its because the cost of finding and fixing the source of the bugs resulting from violating the LSP is greatest in such hierarchies.

<comment><USER6> This is key!

Most people try to at least ad hoc'edly treat "inherits from" as "is subtype of". Many typed languages even encode this directly. This is a _total lie_ unless LSP is followed, however. LSP doesn't do much more than actually define what the necessary and sufficient properties of the "is subtype of" are.

</comment></comment></comment><comment><USER9> It's hard not to empathize with the author. However, I think Sandi Metz put it well in Practical Object-Oriented Design In Ruby when she said:

"Concrete code is easy to understand but costly to extend. Abstract code may initially seem more obscure but, once understood, is far easier to change."

So, as with most things in life, it's all about balance: Readability vs Maintainability.

<comment><USER10> Sandi Metz seems to offer the most sane advice on the topic imho [https://www.youtube.com/watch?v=x1wnI0AxpEU&list=PLE7tQUdRKc...](https://www.youtube.com/watch?v=x1wnI0AxpEU&list=PLE7tQUdRKcyYYHU2QwS8gQzkQkaOn_lHr)

</comment></comment><comment><USER11> I believe a lot of these principles came out of the observation that some good codebases followed them, and this was taken as a sign that _all_ good codebases should; it's a sort of "if X is good, then not doing X is bad" type of fallacy. If you try to analyse them in detail they all have an element of subjectivity and vagueness (e.g. "what is a 'responsibility'?" ) that tends to encourage _over_ abstraction and unnecessary, misguided extensibility. Blind, dogmatic application of a set of principles with little reasoning behind them is basically cargo-cult-programming in disguise. Trying to follow the indirections in such a codebase where SOLID has been applied liberally, which is particularly troublesome when debugging, does _not_ make it any easier to maintain or extend.

There is no replacement for careful thought (including foresight) and pragmatic design.

</comment><comment><USER12> I think a big issue is that a lot of these rules need to be revised as language features evolve. A lot of productive paradigms are no longer "pure" code.

I see a lot of comments kindof poo-pooing annotations, but one of the better Java devs I know is convinced that annotations are the solution to code readability/overengineering in Java -- in essence, custom annotation processors can replace both the need for interfaces and abstract classes.

One of the biggest problems I see is simply that the schism-ing of modern design paradigms means that debugging tools have to play catchup and therefore make code seem a bit less linear. But the reality is, through IoC/AOP/annotations, developers are often reducing the number or interfaces to traverse and making the code more readable, while at the same time actually making it _more_ generic (your class doesn't have to conform to so many standards if you can tack the annotations on whatever fields/methods you want). Should someone be introducing a proxy layer for every class just in case they need to fit it into a more advanced design in the future? Or would it be easier to just code more literally while language/container designers work on a more seamless replacement method?

In a way, it does just seem like some of these new techniques are a hacky way of forcing FP into OOP. Lots of different design paradigms playing nicely within the same VMs, ecosystems is a nice problem to have though. :)

</comment><comment><USER13> I came to the conclusion a while ago that IOC containers are a real "two problems" solution. I still heavily use constructor injection in my code, but I wire the constructors by hand. Keeps you honest and actually forces you to think through abstractions more clearly.

<comment><USER14> Exactly. You can follow SRP, use clean constructors and do it by hand. An IoC container is a nice /mechanical/ helper to do the wire up for you. I really dislike that the majority (all?) of the javaland IoC containers work with annotations; I believe that your object graphs should have no idea if they were built "by hand" with manual calls to new, or resolved from a container.

<comment><USER15> Uncle Bob imho has a pretty good strategy for this problem: [https://twitter.com/unclebobmartin/status/308983161143058432](https://twitter.com/unclebobmartin/status/308983161143058432)

<comment> UK-AL He basically just described what a container does. You put objects in the container in main, then it resolves everything else.

<comment><USER15> That's exactly what it's not. A container is a dependency in itself. Secondly, the wiring of the dependencies happens in one place in the code, not littered in the codebase or a proprietary obstruct XML file. And lastly, a loose container tends to be abused. When a dependency can be included with a simple annotation, everything depends on everything.

<comment> UK-AL Errr, you setup up the container in one place, normally main or somewhere at the start. Very few containers are xml only these days.

There's normally section at the start like

container.RegisterType<IMessageQueue, MSMQMessageQueue>

container.RegisterType<IGeocoder, GoogleGeocoder>

Modern containers don't even use annotations, they just scan the constructor parameters.

<comment><USER13> Yes, but they still magically figure out what goes into what. In the case that you've got a relatively flat structure (services injecting into lots of handlers) this is convenient. When you're building a complex tree, it reduces your understanding of the structure of your code.

</comment></comment></comment></comment></comment></comment></comment><comment><USER16> I always struggled to understand the appeal of the open/closed principle.

"The idea was that once completed, the implementation of a class could only be modified to correct errors; new or changed features would require that a different class be created."[1]

This sounds a lot like bolt-on coding, always adding code rather than assimilating new features into a codebase. This doesn't seem like a sustainable strategy at all. Yes you don't risk breaking any existing functionality but then why not just use a test suite? The major problem though is that instead of grouping associated functionality into concepts (OO) that are easy to reason about, you are arbitrarily packaging up functionality based upon the time of it's implementation... (subclassing to extend).

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

<comment><USER17>
      > ...you don't risk breaking any existing functionality but
      > then why not just use a test suite?

The examples fail to make explicit that there are two programmers: One is building and distributing a library, the second is building an application using that library.

The library programmer can easily distribute the test suite so that the application programmer can run the tests, but that doesn't change the fact that if the library programmer changes an object's interface, it breaks the application programmer's code. By committing to keep the old object's interface intact, the library programmer is giving the application programmer time to migrate their code to the new objects.

<comment><USER10> I like your library/application distinction.

For applications I'm not sure open/closed makes as much sense - [http://codeofrob.com/entries/my-relationship-with-solid--- th...](http://codeofrob.com/entries/my-relationship-with-solid---the- big-o.html)

<comment><USER17>
      > For applications I'm not sure open/closed makes as
      > much sense.

I agree with you. If the same programmer (or team) is maintaining "both sides" of an object's interface, i.e. both implementing the behavior of the object AND consuming the object in their application code, I think we can assume that they'll know that if they change one side they'll need to immediately change the other.

I'm not sure I agree with Rob Ashton's points, though. In his blog post, Rob trivializes the utility of third-party libraries:

        > * These [libraries] are either replicable in a few
        >   hours work, or easily extended via a pull request.

This is simply not the case with any truly useful library. Useful libraries often represent years of careful design work and debugging. (Think networking libraries, UI frameworks, etc.)

He also underestimates the amount of time it takes to continuously change application code to keep up with breaking changes from third-party libraries:

        > * These [libraries] can be forked for your
        >   project and changes merged from upstream with
        >   little effort.

Again, if the library distributes a breaking change, it may require many, many hours of code changes and re-testing to make sure everything's still working properly. Hours that could be spent building new features. For that kind of tradeoff there'd better be a damn good reason for the change: Improved security or performance or ease of use.

</comment></comment></comment></comment><comment><USER18> In general I think that a lot of these design "principles" are just mislabeled. A better label is generally "rough hewn guideline to use in a first pass at design". Many of them contradict each other, or even themselves, especially when rotely applied beyond sensibility.

Take for instance DRY - if you follow it too far, you end up with InterfaceFactoryFactoryFoo. And of course all those FactoryFactories start to look like violations of DRY anyway.

Or the over-application of SRP ends up with 40 classes that are tiny slices of something that could easily be 1 class.

Amusingly both are the result of myopic application, going fractal if you will, on the principle, rather than setting a decent "scope" for the application of the ideas.

Further as you go through design and implementation, you find places where the design abstractions were wrong, and the "single thing" or "unrepeated task" is violated, in the large (rather than in the tiny) and you have to accept it or do some refactoring. Such is life.

None of these things takes away the value of DRY or SOLID or any of the other design principles - it's just that there is a very hard orthogonal problem of "proper scoping" for these principles.

<comment><USER8> > Take for instance DRY - if you follow it too far, you end up with > InterfaceFactoryFactoryFoo. And of course all those FactoryFactories start > to look like violations of DRY anyway.

Right. DRY runs into limits when you use languages with limited expressiveness -- and, particularly, Java-like class-oriented languages where classes are not, themselves, first-class are problematic here.

The problem isn't with the DRY principle, its with a language that doesn't really let you follow it, because certain things cannot be effectively abstracted out into reusable library code and require boilerplate. Most of these things are not problems with, e.g., Lisps.

<comment><USER19> > _Most of these things are not problems with, e.g., Lisps._

This is where the Lisp macros start to shine - you can DRY up the code structure itself. The need for that doesn't come that often (I'm personally in the camp of avoiding macros until you're really sure they're the best tool for the job) but when you are really starting to get sick of that repetitiveness that obscure the intention behind your code, macros are really godsend.

</comment></comment></comment><comment><USER20> Reading this article and its sequel, I feel like the author is handwaving one key bit. I absolutely agree with his position on dependency elimination as a primary goal, but by saying "Oh, a class that operates on a dependency is hard, so let's not write those", and "We're not going to deal with interfaces" he's punting on the entire problem -- handwaving the hard bits and then ignoring the fact that they exist.

At some point, your code does have dependencies. The entire purpose of an interface is to be able to specify what your dependencies are -- to be able to say "This is the smallest thing I need in order to be able to work". When untangling dependencies, adding that bit in there makes it very clear what the seams are -- where you can say "I depend on something that does Foo -- Feel free to replace it", rather than "I depend on this thing that comes entangled in its own network of dependencies".

</comment><comment><USER21> > It came from really important people in our field.

I must say that's my _least_ favorite argument as to why something is important...

<comment><USER22> Those people because important because of good ideas, the ideas are not good because they are important.

<comment><USER23> That goodness is also relative, and good ideas will often expire if you give them time. Conflating importance with goodness makes it hard to move into the future, (but it also means you'll have to make your case much more clearly.)

</comment></comment></comment><comment><USER24> I personally thought the follow up to this article. Available at:

[http://qualityisspeed.blogspot.com/2014/09/beyond-solid- depe...](http://qualityisspeed.blogspot.com/2014/09/beyond-solid-dependency- elimination.html)

Was way better than this one.

</comment><comment><USER25> I would add "don't repeat yourself" as another not-so-good rule of thumb. In one of my past projects one of the most serious problems we faced was too much generalisation on early phase of development when requirements at this time were quite straight forward, but when we meet with real need of using "advantages" of our generalisation and avoidance of repeating things... well, it didn't work smoothly and even maintanance of over-engineered libraries were harder.

Of course of I am not saying that we should copy-paste everything, but adding a lot of layers of abstractions also doesn't seem neat.

</comment><comment><USER26> Personally, I find that taking a very aggressive approach to the Liskov substitution principle is the most helpful rule of thumb. I follow it to the point of practically never using inheritance. If you are using inheritance to modify behavior, then you are probably ignoring LSP and making your code "unintelligible".

</comment><comment><USER27> I think this is about finding a balance between pragmatism and perfectionism. We should strive to find the simplest, cleanest solution to problems and continually refactor to keep complexity at bay. The SOLID guidelines, practically applied, may help in achieving that goal, so they are worth having in your toolbox.

</comment><comment><USER28> The whole point of SOLID was "Only Apply When Necessary." Not everything needs an interface

</comment><comment> UK-AL I think this just highlights the ridiculousness of software development.

You can get two highly skilled, well renowned software developers and they can completely disagree.

How are you meant to objectively evaluate code quality of developers then?

<comment><USER29> Because software development is more art than science in a number of ways, and because it's not equal to much of anything else.

Suggested reading: [http://thecodelesscode.com/case/154](http://thecodelesscode.com/case/154)</comment></comment>


Ask HN: Why are newspapers not talking about Wikileaks? - angry-hacker I always thought the media being "liberal" and skewed was overblown, but I'm amazed no one is talking about Wikileaks right now. Neither HN.<p>CNN has on the front page news a woman who is "accusing" Trump on sexual abuse. Am I going crazy and starting to believe conspiracy theories? <comment><AUTHOR> Objective media is dead my friends.

I do not believe it is overblown. I am appalled at Twitter, facebook, youtube, and definitely the more traditional media outlets. Their selective enforcement of policy violations shows that they truly wish to censor.

There is definitely a bias against a lot of sites with a right/alt-right lean. Sadly, I believe that bias exists here on HN.

It would appear that all links to breitbart.com are hellbanned/auto-flagged or the community here simply wont tolerate it. [1]

I'm glad there are people like Andrew Torba and his gab.ai [2] project. (A twitter alternative, not artificial intelligence).

1 - [https://news.ycombinator.com/from?site=breitbart.com](https://news.ycombinator.com/from?site=breitbart.com)

2 - [http://gab.ai](http://gab.ai)

<comment><USER2> There is excellent coverage at The Intercept, by Zaid Jilani and Lee Fang.

</comment></comment><comment><USER3> I've seen articles in the past few days about the email leaks on the washington post, and looking on CNN right now I see an article on the Podesta emails on the politics page. I've seen a lot of talk about hacking and emails this election. I would say the media is talking more about Trump's sexual assault accusers right now because either: a) The emails haven't been verified (as far as I know) b) There's nothing in them as scandalous as a sex scandal (as far as I can tell) c) Trump keeps saying scandalous things, which draws attention to himself.

A lot of the problems with the media, as far as I can tell, stem from the fact that no one is paying for it anymore. This leads the media to going for attention grabbing headlines, which means a sex scandal will always win out over any allegations of corruption.

</comment><comment><USER4> I flagged this mostly because I'm part of the vast international Zionist conspiracy, but partly because I believe it leads to no productive discussion at all.

Not to mention that what Wikileaks is doing is unethical, and paying attention to it enables them.

Read @zeynep's Twitter feed for a forceful argument against these document dumps, and the harm they do to democracy.

<comment><USER5> Is the way how documents had been obtained ethical or not? Well, too late for this is it not? The question should really be what the origin of those documents is - are they genuine or not.

It's like mounting provocation against officials so they accept a bribe. Is it ethical? Well - in some countries this is how unethically-acting people are being caught red handed. The only way they actually can be caught red handed.

<comment><USER6> The whole point is there's no way to prove they are true or not. or which parts are true or not. Now if you trust wikileaks as some kind of authority on truth...

<comment><USER5> There is a way to prove if those sources are genuine but you don't have resources to do so. However to say "there is no way to prove they are true or not" is far from true. Such documents can be cross-referenced with other documents we know are genuine, simply this requires research you have no time nor resource to conduct. But there are others out there who have both time and resources. I have seen some documents about my home government (not USA) which were all (to the last one) true.

<comment><USER6> They can't insert words into the documents they published that were originals.

</comment></comment></comment></comment></comment><comment><USER7> No. The Podesta emails are damning but have got very little acknowledgment.

This is the phenomenon of circling the wagons.

I've been going through them and there's all kinds of fascinating stuff. For example if you do a search for 'ocra100' you'll see John Podesta receiving three emails that sound like he's getting intelligence reports from Moldbug. Too many WTFs to explain here. Just go and see.

[https://wikileaks.org/podesta- emails/emailid/1637](https://wikileaks.org/podesta-emails/emailid/1637)

[https://wikileaks.org/podesta- emails/emailid/295](https://wikileaks.org/podesta-emails/emailid/295)

[https://wikileaks.org/podesta- emails/emailid/197](https://wikileaks.org/podesta-emails/emailid/197)

Well done to Glenn Greenwald though.

<comment><USER8> Receiving emails isn't damning, you'd want to establish a pattern of mutual communication and reliance on the information contained in them.

(think about it this way, if my comment replying to you is really stupid, does that somehow impugn you?)

<comment><USER7> I think the orca100 emails are more interesting than damning, both the content and the context, I am very curious to know about how this happened since everything orca100 is saying is totally orthogonal to the mainstream liberal positions.

It's just amazing in general how overwhelmingly two-faced the system is. They say one thing to each other and then the opposite to the public.

If the Americans don't trust their politicians it's probably because they're not insane.

<comment><USER8> Look at the cc list on [https://wikileaks.org/podesta- emails/emailid/1637](https://wikileaks.org/podesta-emails/emailid/1637)

It's a bunch of liberal reporters. Either it's a crank sending their crank to people they think need to hear their crank or a bunch of 30 something politics beat reporters are deep insiders.

<comment><USER7> I thought that too initially but now am starting to wonder. Some of the emails sound like they were written by cartoon villains and if orca100 is a crank, it's crank that sounds like they have been put up to this, cranks are normally on the defensive and expository but this just sounds like a report with the occasional personal opinion thrown in.

I suspect that political groups send out requests to see the perspective of different factions and this may be what this is.

</comment></comment></comment></comment></comment><comment><USER9> I would argue it's 3 large factors.

1\. Scandal fatigue. People are tired of talking about Clinton's e-mails. Had this release been before the previous e-mail controversy it would have been picked up far more.

2\. Sex - Sex sells. Sex scandals always blow up more than non-sex scandals. If Hillary Clinton has e-mails about banging interns it would be all over the major newspapers.

3\. Sound bityness - There is a video where Trump says "Grab them by the pussy". There's nothing like this in the Clinton e-mails. There's no big damning quote they can throw up on headlines and get a billion clicks.

</comment><comment><USER10> It's not a conspiracy, it's a prospiracy -- [http://esr.ibiblio.org/?p=67](http://esr.ibiblio.org/?p=67) The prestige media -- NY Times, Vox, NPR -- all see themselves as being on the same team. They seem themselves as having a public responsibility to guide America toward a better, more progressive future, and to limit the errors of the retrograde, perhaps bigoted middle American. Thus, they all slant their coverage to fit that narrative and worldview. And if members fail to fit the narrative, if they say, "illegal immigrants" instead of "undocumented immigrants", they catch a lot of flak from their fellow teammates, they risk getting ostracized, and so over time everyone falls in line with a certain consensus.

</comment><comment><USER11> NH is a techie site, so most people don't care (or aren't from US)

As about the US news outlets, just google who owns whom and go up that ownership chain. No conspiracy theories of any kind, just money as usual.

<comment><AUTHOR> Sure, but twitter, facebook, and youtube have been in the news lately about their selective enforcement of policy violations. THAT is definitely of interest to this community.

</comment></comment><comment><AUTHOR> ... and now this Ask HN thread is getting flagged? C'mon HN! We're better than this...

<comment><USER5> Your post was flagged too. Nobody bothered to provide some feedback as to why... Truly we are better than this...</comment></comment>


"Our vaccine is into human beings" - <AUTHOR> https://twitter.com/kizzyphd/status/1244061838050025475 <comment><USER2> Does anyone here have more context to share on this trial?</comment>


Why I Like ZODB - <AUTHOR> http://plope.com/Members/chrism/why_i_like_zodb

<comment><USER2> I'm sorry but I hate ZODB with a passion.

\- It does not scale.

\- Poor support for replication or sharding.

\- It is slow. Really slow. Un-pickle every time you get something from cache.

\- It is error prone. Forget a commit or forget to handle conflict errors and you're in big trouble.

\- No interoperability. Want to write a service in C++ to access your db? You're out of luck.

\- As your system grows you'll have conflicts all over the place.

\- Some server side stuff needs to have your objects, e.g. if you want to do conflict resolution.

\- Migrations/change to schemas are painful, once you change your object you're no longer going to be able to de-serialize it.

\- You have to roll your own if you want change notifications.

So if you're just looking to persist some Python objects in a small system, great. Otherwise I'd stay away from this.

<comment><USER3> Note: I'm being brief, not trying to be snarky -- I'd love to hear what's behind your statements.

> \- It does not scale.

What does this mean? I'm not saying you're wrong, but without some context, that doesn't say a whole lot.

I recall one big consulting company dropping Plone (and zodb) some five years ago because zodb/plone scaled to about 10.000 documents, and using a custom index solution based on lucene they managed to scale to around 100.000 documents for their cms -- but they ended up needing something else for "their biggest" clients. Can't find the link or remember the company now (I believe it was a German design shop). But it's the only story I've heard about zodb not scaling for it's typical use case?

> \- Poor supprt for replication and sharding.

Are you aware that ZRS is now free and open source?

[http://www.zope.com/products/x1752814276/Zope-Replication- Se...](http://www.zope.com/products/x1752814276/Zope-Replication-Services)

> \- It is slow. Really slow. Un-pickle every time you get something from > cache.

You have to marshall structures that you load in a different way too -- is this really something specific to zodb? Are you saying unpickle is slower than other ways to marshall python objects?

> \- It is error prone. Forget a commit or forget to handle conflict errors > and you're in big trouble.

As opposed to not handling transaction errors with a postgres backend?

> \- No interoperability. Want to write a service in C++ to access your db? > You're out of luck.

>

Well, it's an object database. The only other I know of off the top of my head that I know people are actually using, is Gemstone. You could of course wrap zodb in a xml/json api -- but yes, I don't think interop with other languages is a good fit for zodb.

> \- Some server side stuff needs to have your objects, e.g. if you want to do > conflict resolution. > \- Migrations/change to schemas are painful, once you > change your object you're no longer going to be able to de-serialize it.

This is a problem I'm constantly running into with Plone and a more or less well understood set of third party add-ons. I really think the smalltalk image approach is better (if you have the "data" you also have the "behaviour" \-- with zodb you might have a serialization of a complex class, but not the ability to marshal it).

<comment><USER2> I wasn't aware ZRS is now free/open source. I would need to look at what that brings to the table but it's unlikely to change my views. I'll check it out though and thanks for the heads up!

Ignoring ZRS- As your number of clients and transactions go up you're still bottlenecked in a single server. That's what I mean by doesn't scale. For various reasons (e.g. objects can refer to each other) you're basically stuck. A scalable database provide various means of growing as your load grows and ZODB does not.

There are a few problems with pickling. First of all it is slow. Under some assumptions there are faster ways of marshalling in Python. Secondly your granularity of access is the entire object. You can't just get a certain field out of a large object. Thirdly because objects in the client cache are pickled you are spending a whole lot of time serializing/de-serializing them when you don't really need to do that. In one of my applications that happens to account for 80% of the execution time.

I haven't spent a lot of time with SqlAlchemy but I think an ORM that maps well to some performant database is a better approach in Python.

<comment><USER4> It's best to keep object records small when using ZODB. This does mean you need to do some planning about object structure. Objects that inherit from "persistent.Persistent" are kept as separate records in ZODB, so you can break up a large object into several smaller ones by attaching persistent attributes to another object. If you just make a big structure out of nonpersistent objects, ZODB will have all the downsides of plain old pickle (like slow loading time for large objects) indeed, but its entire purpose is to allow you to not do this.

</comment></comment></comment></comment><comment><USER5> The ZODB is and was a Python pickle store in the first place. The question about what makes a "database" can be answered differently. Functionality like indexes and query languages are in the Zope world application level functionality build on top of the ZODB. The ZODB turned out being a database solution for many large scale projects (up to several 100 GB). There are options for sharding (mount points) and replications (ZRC, Relstorage). The ZODB is unlikely the solution that you would use nowadays for "big data" however keep in mind that the ZODB is already 15 years old and severed many people in professional solutions for more than a decade. We know of many businesses still using the ZODB in mission critical applications. But yes, the ZODB is an object store and not a RDBMS - it's a completely different beast - like always: use the right tool for each project. And the ZODB was already "NoSQL" by the end of the 90s of the last millennium. No need to hate the ZODB - it is just another database option - and in some case I would still use the ZODB today over tinkered garbage database solutions like MongoDB having a braindead replication and sharing model.

</comment><comment><USER6> I had to work with ZODB on a couple of projects and it has been overall a rather painful experience. Inability to run ad hoc queries and necessity to manage indexes and maintain consistency at the application level has been a source of annoying bugs for me. Not worth it IMHO.

<comment><USER7> One of the problems people may experience when trying out something like ZODB is trying to use it as they would use a relational database management system rather than as they would manage a normal object structure inside their program. Things like list comprehensions and careful design of the structure of the objects can improve things a lot, but I will agree that sometimes the fact that you can't as easily run ad hoc queries is sad. Also very often you simply won't _need_ to use an index, and for a very large range of problems the graph nature of ZODB (compared with the tabular nature of the RDBMS, where you'll need indices to avoid full-table scans) is liberating.

Certainly there are some types of problems which ZODB won't work well with, but overall I quite enjoyed the experimental project I made early this year in Pyramid with ZODB. Combine it with traversal-based URL generation and you get very interesting results.

I think it's the sort of tool that I'd recommend people at least _try_ ; once they've broadened their horizons, then they can go back to using their RDBMS when they wish to. (In this it's just like Pyramid's traversal; many developers have forgotten that pattern matching is not the only good way of routing URLs.)

<comment><USER8> I've used Durus a lot (a simpler version of ZODB) and indexing was always the biggest issue I ran into. Normal object associations don't need traditional indexing but object lookup based on attribute values gets pretty painful without some indexing support.

</comment></comment></comment><comment><USER9> ZODB is kind of neat, but how does it fare with non-python client libraries? I note the phrase "you can store anything that is pickleable" so I am thinking not?

<comment><USER7> Correct, ZODB is exclusive to Python.

</comment></comment><comment><USER10> If you like ZODB (like me), you might also like DyBASE: [http://www.garret.ru/dybase.html](http://www.garret.ru/dybase.html)

BTW I used ZODB to add persistence and acknowledgment to the Python Queue class: [http://blog.databigbang.com/adding-acknowledgement- semantics...](http://blog.databigbang.com/adding-acknowledgement-semantics-to- a-persistent-queue/)

</comment><comment><USER8> If you are interested in object-oriented databases for Python check out Durus: [https://www.mems-exchange.org/software/DurusWorks/](https://www.mems- exchange.org/software/DurusWorks/)

It's design is based on ZODB but with a number of simplifications and no dependencies on Zope.

<comment><USER11> In what way does ZODB depend on Zope? It has a dependency on zope.interface, which is pretty minimal, and seems to be widely used outside of the Zope Community (e.g., Twisted).

<comment><USER8> Whoops. That was a presumption on my part.

</comment></comment></comment><comment><USER12> Urgh! Isn't Zope dead yet?

<comment><AUTHOR> ZODB != Zope</comment></comment>


How Dread Pirate Roberts got caught - <AUTHOR> https://medium.com/p/d48995e8eb5a

<comment><USER2> >it's clear this guy was an amateur for someone running the largest drug dealing website in the world.

That's a bit obnoxious to say about someone who seems to have only slipped up once, during development, by linking his real name to that "altoids" handle. In what way is that amateur?

<comment><USER3> Honestly, that was kind of a rookie mistake.

</comment></comment><comment><USER4> I assume the first one, the slip-up with the Altoids username, was what tipped them off and allowed them to gather all the other evidence. Without that they'd have known he used a coffee shop in San Francisco and maybe they could have caught him there, but that's it.

The internet never forgets.

<comment><AUTHOR> > The internet never forgets

& never forgives...

</comment></comment><comment><AUTHOR> The complaint [PDF] : [http://www1.icsi.berkeley.edu/~nweaver/UlbrichtCriminalCompl...](http://www1.icsi.berkeley.edu/~nweaver/UlbrichtCriminalComplaint.pdf)

</comment><comment><USER5> a reminder of this presentation: [http://www.slideshare.net/grugq/opsec-for- hackers](http://www.slideshare.net/grugq/opsec-for-hackers)

DPR made a few of these mistakes, it seems. also remember, "pigs get fed but hogs get slaughtered." 80mn (allegedly) in sales is a hog.</comment>


Twitter isn't your audience. It's your community. - <AUTHOR> http://hiddenfrequency.com/post/999094726/twitter-isnt-your-audience-its-your-community

<comment><USER2> Finally. I've been saying something similar to this for ages: all these people squawking about Twitter are typically doing it wrong. It _can_ be used for one-way, one-to-many communication like that, but it shouldn't be. The people (and companies!) who are using it most successfully are using it as a way to actually engage people, talk to them, interact with their tastes and network, form relationships beyond the join record in the database.

<comment><AUTHOR> I think it's really hard for mass media people to understand its value.

I produce television, but I understand that Twitter is a totally different medium than people just consuming what I produce.</comment></comment>


Ask HN: Dark Sky is gone. How can it be rebuild sustainably? - <AUTHOR> What I want: Weather applications on my smartphones without necessarily sharing my current location. If I do share my location, I don't want my location data to be sold or shared.
What else I want: Privacy respecting mobile applications for other use cases. But let's start with the weather.
I noticed today on my Android phone that Dark Sky was finally shut off and no longer received weather data. A few Google/DuckDuckBingo searches suggested there is no clear privacy oriented successor weather app with similar functionality.  Any future successors that come from Kickstarter or cool startup kids will fall victim to the same scenario.
Are there any projects working on these areas now, like a 501(c)(3) that's both more modern and less rigid than the FSF? Billions of people just want to know the weather. <comment><USER2> Here are some options, saw this article shortly after posting my last comment here [https://www.theverge.com/21307332/dark-sky-alternatives- weat...](https://www.theverge.com/21307332/dark-sky-alternatives-weather-apps- apple-android)

</comment><comment><USER2> It isn't an app, but would you be satisfied to check a website like weather.gov, or the many other weather websites? If they want to track you you could get an ad/tracker blocker.

<comment><AUTHOR> That's an option, the NWS is the United States is good and I suspect other countries have similar organizations.

</comment></comment><comment><USER3> How do you want to pay for the app and the infrastructure to deliver the data? In my experience the overwhelming number of users expect to get apps for free and data for free

<comment><AUTHOR> Dark Sky had no issues charging a fair subscription fee for their app, and it got the acquired by Apple.</comment></comment>


Ask HN: Confused by a friend in discussion of variables - <AUTHOR> A friend of mine is not a programmer, but does program.  My friend has a degree in mathematics, works in the supply of a specific type of computer hardware, uses Perl to accomplish various scripting tasks, and is very capable in doing so.
In discussion about programming languages I mentioned that "variables" are boxes to put things in, and the thing we put in them are "values".  "Values" can be complicated, and may actually be references to other things.
My friend went thoughtful, and then said:
Suppose I have a hash:

    $next{"thingy"}="whatname";
    $next{"whatname"}="wotsit";
    $next{"wotsit"}="doohickey";
 Then I would have said (my friend said) that:

    $next{$next{$next{"thingy"}}}
 is another name for "doohickey" and hence is a variable.
Is this a common point of view? <comment><USER2> Kinda. Sometimes these are called "lvalues" (because they go on the left-hand side of an assignment statement), or perhaps "places", or some similar name. It depends on the language, and what languages the designer was influenced/inspired by when they were doing the design work. That leaves "variable" to just refer to the simplest case.

Oh, and just for the record, your friend _is_ a programmer. Maybe it's secondary to the mathematics, but nobody is ever just one thing.

<comment><AUTHOR> Thank you for the reply - interesting.

Just to clarify, saying that my friend is not a programmer was meant to set expectations, not to be disparaging. My friend write short scripts to accomplish specific tasks, but is not employed to write programs, has never studied programming or computer science, has never written a program longer than about 50 to 100 lines, has never written a program for someone else to use, and actively refuses to be called a programmer.

Neither of us consider that a problem or criticism, but simply a statement of fact. I play music, but I'm not a musician. I sing, but I'm not a singer. I dance, but I'm not a dancer. I write stuff, but I'm not a writer. I program, but I'm not a programmer. I do math, and use math, but I'm not a mathematician. On occasion I run, but I'm not a runner. Yes the exact boundaries are fuzzy, it's difficult to create clear and precise definitions, but to describe someone who cooks the occasional dinner "a chef", or even "a cook", is to lose distinctions I think are worth retaining, and to dilute the terms to the point of being effectively worthless.

Oh, and my friend doesn't use the mathematics particularly either, and refuses now to be called a mathematician.

But it's unlikely we'll reach agreement on this, so I just thought I'd make my position clear.

</comment></comment><comment><USER3> What you have there is an l-value, which is an expression that evaluates to a location into which a value can be placed.

A variable is a single name and is the simplest example of an expression that is an l-value.</comment>


Game change: iOS 7 welcoming game controllers is a big deal - <AUTHOR> http://reviews.cnet.com/8301-31747_7-57589005-243/game-change-ios-7-welcoming-game-controllers-is-a-big-deal/

<comment><AUTHOR> I've always felt that no physical controller access was a limiting factor for Apple killing the console.

The next (and IMHO inevitable) step, would be to open up the Apple TV via an SDK.</comment>


Ask HN: How to celebrate my project's first anniversary? - <AUTHOR>

A year ago next week, I started my project, a "learn something new every day" email newsletter.<p>The list has grown to over 5,000 people since, and (again) I'm celebrating one year next week.  I'd like to do something to mark the occasion and do something cool for my readers.  I really have no idea what, though.  Any ideas? <comment><USER2> A recap of the best (most-read, most-shared, etc.) newsletters.

</comment><comment><USER3> Give away free stuff. I can help.

<comment><AUTHOR> How can you help?

<comment><USER3> Company I work for does giveaways to get market penetration / market share / market grab. So can give free 1 yr subscription (in the hopes they'd renew after 1yr) worth b/w $35 - $50 in retail.</comment></comment></comment>