Efficient music players remain elusive - <AUTHOR> http://www.tedunangst.com/flak/post/efficient-music-players-remain-elusive <comment><USER2> The dirty secret in software development: most think they how to write efficient software when they need to, but very few can.

Sometimes the excuse is that cpu and memory are cheap as if resources aren't under constant pressure from the hundreds of processes that all pretend they are the only one on the machine.

Many also don't know how to draw simple, low-overhead abstraction boundaries. Everybody wants to make the most generic code planning for things that will never happen or at least not in the way they think. You can't call out most people on this because this one piece of code they are working on is always the exception.

And most developers don't know how to optimize as they write code. They often don't understand the problem or have enough mechanical sympathy to understand what code you should probably be careful with and should be made quick to start off with. They probably don't understand the cache system enough to know why that linked hash table is probably the wrong data structure. Hash means fast to them, and to them this is all premature optimization even when the correct solution is probably no more difficult than what they are doing. Calling something premature optimization is often used to shut down discussion of how their code can be improved.

The field is too in love with horribly inefficient frameworks. Writing network code and protocols is now considered too low level for people. Many are too caught up it what is tech-cool. They're like the holistic medicine practitioners of software and they don't even know it.

<comment><USER3> "Sometimes the excuse is that cpu and memory are cheap as if resources aren't under constant pressure from the hundreds of processes that all pretend they are the only one on the machine."

Does anyone know if there's a generalized name for this problem? It's the same one where your teacher gives you "only two hours of homework tonight" but forgets you have four other classes all doing the same thing.

<comment><USER4> Parkinson's Law

<comment><USER3> "Originally, Parkinson's law is the adage that "work expands so as to fill the time available for its completion", and the title of a book which made it well-known. However, in current understanding, Parkinson's law is a reference to the self-satisfying uncontrolled growth of the bureaucratic apparatus in an organization."

Hmm, I can see how they're related, but it doesn't seem to be quite what I'm talking about. I'm more referring to the overuse of resources by individual elements assuming or acting as if they're the only thing using it, like in the above examples of a teacher acting like their class is your only one, or a thread consuming resources like no others are active.

Parkinson's law more seems to be the _result_ of the effect that I'm talking about (among others, like procrastination).

<comment><USER5> Tragedy of the commons?

</comment></comment></comment></comment></comment><comment><USER6> Have you tried foobar? [http://www.foobar2000.org/download](http://www.foobar2000.org/download)

<comment><USER7> Ditto for foobar, it's complete but not obnoxious and tends to focus on what's important. It's probably the one thing I miss when using my (OSX) laptop, OSX players seem to be either obnoxiously turdy (à la itunes) or exercises in minimalist style which end up inconvenient to use.

I don't know how CPU-efficient it really is though, and that seems to be Ted's main concern.

My only annoyance with it is that (AFAIK) there still isn't a 64b version of it, though that problem is so common on windows it's hardly worth mentioning.

<comment><USER8> > _OSX players seem to be either obnoxiously turdy (à la itunes) or exercises > in minimalist style which end up inconvenient to use_

I miss Audion, from the folks at Panic (makers of Coda & Transmit):

[https://web.archive.org/web/20120524030742/http://www.panic....](https://web.archive.org/web/20120524030742/http://www.panic.com/audion/)

It had a similar spirit to Winamp, so much that AOL/Nullsoft looked into acquiring them. As did Apple before iTunes existed, as documented in The True Story Of Audion:

[https://panic.com/extras/audionstory/](https://panic.com/extras/audionstory/)

<comment><USER9> I liked using VOX for some time because of its FLAC and BS2B support, but dropped it because of iTunes Match and Apple Music convenience. Now I see they introduced a FLAC digital locker too, but the price is steep.

[https://vox.rocks](https://vox.rocks)

</comment></comment></comment></comment><comment><USER10> I'm surprised not to see any mention of Clementine ([https://www.clementine- player.org/](https://www.clementine-player.org/)) here. I switched over to it last year and it's lovely. The interface is nothing special but it's quick and efficient, and the library updates are immediate (I assume it uses libnotify/equivalents). On Windows it idles at 70MB of RAM and 0.2% CPU whilst playing FLAC files for me. Similar stats on my Linux laptop too, from what I remember. Great audio codec support and it has various features for cloud streaming services, though I don't use those.

I'd recommend trying it out, I think you'll be surprised by how nice it is to use.

<comment><USER11> I'm a huge fan of Clementine. It reminds me of what Amarok used to be...back before the newfangled KDE 3 version bloated it.

<comment><USER12> Clementine is really nice (for the nyanalyzer cat alone ;)). It started as a fork of Amarok 1.4., no wonder it feels familiar.

</comment></comment></comment><comment><USER13> On Windows, AIMP 3 is king. Especially for those of us who are nostalgic about Winamp 2.95 which was for many years the best simplistic music player that got the job done and got out of the way.

AIMP 3 takes 30MB of RAM even with 20+ GB playlist, on a machine with two sound cards, playing music 10-12h a day, and I've never seen it going even above 2% of CPU.

That being said, the author's sarcastic tone is fully justified. Everybody picks a favorite language and defends it, as if it is their parents under fire. I am all for Elixir and I love it, but I already had to write Golang several times because I needed more raw speed, being one example.

Don't be fanboys, fellow programmers. You're paid to do jobs, not being cool. Too many forget that.

<comment><USER14> What does a "20+ GB playlist" mean?

That it contains more than 20 GB of song data? If so, I fail to see how that relates to the memory needed to talk about the songs.

If it's instead 20 GB of actual song meta information, then I'm both and impressed by and a bit scared of your music collection. :) And also impressed by the software's ability to deal.

<comment><USER13> Means I have 20+ GB of music. Metadata can't be that big. :O

If you find a DB that can cope with 20GB without sweating much, give me a shout! ;) You might become rich if you make one, too!

<comment><USER15> The actual amount of data in that 20GB that needs to be handled by the player for that playlist is probably on the order of a few bytes bytes per MB. If we round up to 100 bytes per MB, you're still only looking at a few MB of metadata.

</comment></comment></comment></comment><comment><USER16> While everyone else here is proposing to try different players, I liked the idea, found at the end of the article, to certify a program for efficiency. We move our digital life on the mobile and efficiency is quite crucial.

Android can show how much a app / internal program consumes in mW so I wonder if Google is collecting this data in order to classify apps based on this.

<comment><USER17> Linux (powertop) and MacOS also have ways to measure and show this. Windows doesn't have that? Where's my surprised face.

<comment><USER18> Not that I'm a huge fan of it, but Windows 10 (and I think 8) has it under the battery use section in their secondary control panel. It's not quite as accessible, it seems, as macOS' power usage that is readily available in the Finder bar, but it is present.

</comment></comment></comment><comment><USER19> I'm a big fan of mpd[1]. It's a headless music player you can run on pretty much anything with audio out. You can then control it from a client, of which many are available for nearly any conceivable platform.

[1]: [https://www.musicpd.org](https://www.musicpd.org)

<comment><USER20> I don't think OpenBSD people are interested in the kind of service that has to start as root and drop privileges just to play music ;-)

<comment><USER21> Doing it like that is sadly the most compatible (and easiest) way to open a privileged port (below 1024)

<comment><USER22> MPD runs on 6600 by default, so that shouldn't be a problem. I run it on my homeserver under a separate audio user, who's also in the pulse group to use PulseAudio on the attached speakers.

<comment><USER13> If you write a small step-by-step on that scenario, you'd bne making quite a few people happy, me included.

<comment><USER23> Running MPD as a separate user is pretty easy, there's lots of ways to do it and MPD doesn't care as long as it has access to your music and can open the socket (Neither of which require root by themselves). The easiest way is to just modify the user in mpd.conf and let mpd change to the user when it starts. But you can also just start it manually as another user, or change user in the init-script/system-service/etc.. mpd doesn't care how you do it.

PulseAudio on the other hand throws a fit. For reasons unknown to me, PulseAudio basically doesn't support running as a system-wide instance, so things get pretty messy if you want sound to come from multiple users (IE. Your user, and your mpd user). If you only ever use one user on your system, I'd recommend just running mpd under that user - I believe that's what I did to get it working on my computer. Of course, if you're not using PulseAudio then this isn't an issue in the first place.

<comment><USER24> My understanding is that the preferred way to launch PulseAudio is to launch it as part of your X session so it runs as your user. MPD supports launching in the same way. So done this way, everything runs as your user and therefore plays nicely together.

This is the approach I took, and I think it works very well.

<comment><USER23> Yeah, you could do that. There's not really much difference between launching it with X and just configuring mpd to run as your user, though launching with X might be easier to setup in some cases.

The only problem with that approach is it means that mpd is tied to your X session. I quit or restart X every once in a while and it's nice to have my music keep going during that time. But obviously that's not a use-case everyone cares about since most people don't have a reason to leave X.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER25> To see what M. Unangst is getting at in part here, one has to read some of xyr prior articles:

* [http://www.tedunangst.com/flak/post/mplayer-ktracing](http://www.tedunangst.com/flak/post/mplayer-ktracing) ([https://news.ycombinator.com/item?id=13704163](https://news.ycombinator.com/item?id=13704163) [https://news.ycombinator.com/item?id=13624174](https://news.ycombinator.com/item?id=13624174))

* [http://www.tedunangst.com/flak/post/rough-idling](http://www.tedunangst.com/flak/post/rough-idling) ([https://news.ycombinator.com/item?id=10254828](https://news.ycombinator.com/item?id=10254828))

* [http://www.tedunangst.com/flak/post/browser-ktrace-browsing](http://www.tedunangst.com/flak/post/browser-ktrace-browsing) ([https://news.ycombinator.com/item?id=11830969](https://news.ycombinator.com/item?id=11830969))

* [http://www.tedunangst.com/flak/post/accidentally-nonblocking](http://www.tedunangst.com/flak/post/accidentally-nonblocking) ([https://news.ycombinator.com/item?id=11847529](https://news.ycombinator.com/item?id=11847529))

* [http://www.tedunangst.com/flak/post/firefox-vs-rthreads](http://www.tedunangst.com/flak/post/firefox-vs-rthreads) ([https://news.ycombinator.com/item?id=11470042](https://news.ycombinator.com/item?id=11470042))

<comment><USER26> This is the kind of thing where I wonder if a shaming award wouldn't help. Imagine an award, let's say every half year, with a top twenty (one for each of the three big platforms) of needlessly inefficient popular software programs. Ideally with these kinds of breakdowns to back up the claims.

</comment></comment><comment><USER27> Everyone here is going on about cpu efficiency. When the joke is, that a 10 year old MP3 player can play music all day on a batery the size of a nickle because it's not decoding using a CPU but using a decoder built into an ARM package. The CPU is actually off most of the time when your mp3 player is playing.

<comment><USER28> The earliest MP3 players required hardware decoders, but it didn't take long for these devices to get faster CPUs that could do the decoding. This in turn enabled firmware updates (either official or unofficial, e.g. rockbox) to bring in support for new audio formats.

<comment><USER29> An updateable firmware does not necessitate a software decoder. Hardware decoders can (and do) have their own firmware, and can support additional formats if they were designed with that in mind.

Also you can have a hardware decoded MP3 path, and a software decoded OGG path, for example. They can coexist.

Most real hardware wasn't designed to be on the market long enough for any of this to come to pass, though, and you're probably 100% correct.

</comment></comment></comment><comment><USER30> I came here simply to mention foobar2000, and I am happy that many people before me did. Some mentioned they missed it on Linux.

I am a Windows user myself, but I feel "ncmpcpp" is a good alternative on linux (apparently that's an Ncurses Music Player written in CPP). Simple, console list interface with good features.

<comment><USER31> foobar works perfectly and with no noticeable performance difference on linux in wine, and is imo miles better than any of the native linux apps.

</comment></comment><comment><USER32> Audacious[1] set to the classic skin has been my media player of choice for a number of years now since Winamp went crap and I moved away from Windows. It's basically the same as the old Winamp[2], including shortcut keys.

It's simple but works perfectly; I don't understand why music players nowadays are such clunky monstrosities when the music should do all the talking.

[1]: [http://audacious-media-player.org/](http://audacious-media-player.org/)

[2]: [http://i.imgur.com/eOasdkx.jpg](http://i.imgur.com/eOasdkx.jpg)

<comment><USER33> _It 's simple but works perfectly; I don't understand why music players nowadays are such clunky monstrosities when the music should do all the talking._

Same here, I never understood why people were initially so enthousiastic about iTunes or other players after Winamp that tried to hide your audio files behind a convoluted GUI and that abstracted the files on disk into a crappy, opaque database.

For me a directory tree with well-named directories and files is still the least-worst solution and also has been, over time, the most dependable one. (On Android I use Music Folder Player due to this. iPhone I don't know, I don't have one.)

<comment><USER34> > For me a directory tree with well-named directories and files is still the > least-worst solution and also has been, over time, the most dependable one.

This. My Music is very meticulously organized on the file-system level. Every single folder (sans Soundtracks and Videogame music) is organized like so:

My Music -> Artist -> Year - Name -> Track # - Title e.g. My Music -> Black Sabbath -> 1971 - Paranoid -> 01 - War Pigs.mp3

That's it. That's all I need. I've had it this way since 1998, and it still works, across myriad computers, file systems, and operating systems. One of the reasons I stayed with Winamp so long is that I could simply right-click on a folder and click "Play in Winamp", and I was all set.

All of these other apps that try to organize my music for me inevitably fail, because the tags are rarely complete or consistent. Trying to backup all my music to Google Play Music has shown that, time and time again.

These days I'm happy that I was finally able to get that functionality back with Audacious.

<comment><USER35> The problem is that when you use a library-based solution for management, you need to stay on top of tags.

I frequently like to create playlists based on the ID3 genre tag, so a folder- based approach doesn't really work. Folders also complicate things when you're trying to maintain separate music collections -- like a folder for ripped music vs storebought.

</comment></comment></comment></comment><comment><USER36> This article is pretty silly.

\- Spotify is primarily for streaming Spotify songs. It shouldn't be inefficient, of course, but you're looking in the wrong place if you just want to play your audio files.

\- Groove: Windows built-in programs are rarely great, why expect otherwise from Groove?

\- Come on, dude. You can't just write something off because the homepage has a trendy design. And Shoutcast is ancient technology! I'm pretty sure I used Winamp with Shoutcast on my Pentium 4 and it worked fine.

\- Foobar2000 has been around forever! It was fast and efficient ten years ago, and that hasn't changed.

This guy should have done a little more research.

<comment><USER37> Wonder why you're downvoted. This is entirely true. Bitching about efficiency of music players on Windows without mentioning foobar2000 (which isn't exactly obscure) is pretty fucking silly.

</comment></comment><comment><USER38> One thing I have noticed about Spotify is it appears to make a lot of requests to various services, some outside of Spotify, if Little Snitch is to be believed.

For example, I've seen it make calls to

* Google Tag Manager

* Facebook

* CDNS - presumably for image content

I've blocked most of them.

</comment><comment><USER39> I suspect the big problem here is not decoding efficiency per se, but the music player keeping the CPU from going into the deepest sleep states. With Spotify it's likely the web-browser underpinnings (anything based on Chrome will suck down your battery even when it's doing nothing).

<comment><USER40> I can't believe that no one else commenting here is picking up on this. It's not about "tight code" or "fast code" \- it's about CPU utilization and battery usage.

</comment></comment><comment><USER41> Windows still ships with Windows Media Player, which is what I use now. No idea how it rates in terms of efficiency but it does what I need better than any of the players he reviewed, and then some.

Specifically love being able to find music by year, and while not the simplest UI, it's playlist builder does what I need. Wish I could run it on my phone.

I do suspect however that my use cases are unusual in that I don't stream music, and have a large library replicated on my PC, Surface, and my phone - and I've spent years completing and cleaning up the meta data, which Windows Media Player makes really good use of.

<comment><USER13> I don't use WMP but I am the same as you. I don't stream. I see no use in constantly wasting internet on something I can download and manage diligently by myself.

Be sure that there's quite a lot of us out there still but we don't like to tout it, lest the cool kids attack. :)

</comment></comment><comment><USER42> I recommend you try foobar2000. I remember trying to play MP3 files on 486 DLC 120MHz. WinAmp couldn't handle playing MP3 smoothly on that, but foobar worked fine.

</comment><comment><USER43> Even though a little late to the party, I just wanted to give my vote to the best Windows music client I know, XMPlay [0], which, with a minimalist skin [1], for me is unbeatable. Does anyone else use it?

[0]: [http://support.xmplay.com/](http://support.xmplay.com/) [1]: [http://support.xmplay.com/files_view.php?file_id=308](http://support.xmplay.com/files_view.php?file_id=308)

<comment><USER44> Yeah, for... I don't even know for how long. Probably at least 17 years.

</comment></comment><comment><USER45> Rockbox is an open-source project that replaces the firmware on many dedicated MP3 player devices. It's still under active development. Their most recent releases improved power usage to the point where my 6 year old Sansa Clip+ now has better playtime than it did on stock firmware when the battery was new.

It also produces objectively better sound reproduction, and can handle FLAC which the original firmware could not.

</comment><comment><USER46> Open source command line clients for streaming services are the best!

Pandora - [https://github.com/PromyLOPh/pianobar](https://github.com/PromyLOPh/pianobar)

Spotify - [https://github.com/plietar/librespot](https://github.com/plietar/librespot)

Any others for other services that still work?

</comment><comment><USER47> The author didn't look very far. I'd bet on foobar2000 fitting the bill.

</comment><comment><USER48> you can still get the old winamp (2.3), from before it got all maimed by AOL, if you look hard enough. I use it mostly for nostalgic reasons: old skins and AVS scripts.

<comment><USER49> What's maimed about current version Winamp? I'm running 5.666, using the classic skin, it's taking up 10.6MB of RAM and <0.1% CPU while playing.

<comment><USER50> OP just doesn't know what OP wants.

As you said, Winamp + classic skin, with all the "features" turned off like Winamp Agent and those other stupid things they added after the AOL acquisition, is perfectly fine. The fact that OP didn't even try out (or discover) foobar2000 tells a lot.

</comment></comment></comment><comment><USER51> In Spotify I have my entire library in the cloud, accessible from my phone, home computer, office, etc. I get weekly (great) recommendations based on what I actually listen to. I can browse related artists, share songs with my friends, stream the music to all my home speakers in sync. Of course an mp3 player use less power, it only does a fraction of what Spotify does. It's not even like comparing apples and oranges, it's like comparing your bike to a jet fighter.

And, yeah, I grew up with Winamp and MP3s (or even .MOD/.XM). But the world moves on.

<comment><USER52> However, with Spotify you're limited to the music that's in your Spotify library. On the desktop you can also add local music files, but they don't sync with the other devices.

<comment><USER53> You can actually sync local files to your mobile devices with Spotify. Might require premium.

</comment></comment></comment><comment><USER54> I have been playing with making a player to learn a few audio decoding libraries. Using dr_flac, LAME, and nuklear for the gui I made a simple player. It turned out to be extremely efficient (cpu-wise, memory is the next step).

Nuklear, the gui part, I know to be extremely inefficient. Due to it not being called that much (refresh every 10ms, IIRC) it uses an insignificant amount of cpu time.

dr_flac and LAME are efficient enough, especially considering the work they do.

Note that LAME can do fixed-point, while dr_flac uses floats. This is _very_ important when talking about power efficiency, as floats use much more power.

Sending the PCM data to the sound card (using ALSA) takes an insignificant amount of cpu time (memcpy to fill the buffer, that is ~172kB per second (44100 * 2 * 2 / 1024 ; 2 channels of 2byte samples at 44.1kHz)). Though ALSA (speex) resampling 44100Hz to 48000Hz _does_ take a significant amount of cpu time (IMO best to resample while decoding).

On "modern" linux there is also Pulse Audio, that takes that resampling overhead from the program onto itself. Note that PA (idk if still) uses floats to resample, making it very inefficient.

Floats on modern x86/amd64 cpus are fast, as fast as integers (although float operations have a delay so it turns out slower). More important is that floats use much more power to compute. Another thing with power efficiency is that modern cpu cores go to sleep to save power, so one should not wake them up every milisecond to check on something.

As for the article;

>After downloading hundreds upon hundreds of kilobytes of zip file, fire up a shell, run mpg123, and wowzers. It plays MP3s smoothly and efficiently. A remarkable feat of engineering, especially considering it's all written in plain old C without leveraging the synergies of dozens of frameworks. One wonders how they managed.

I want to say "no shit".. so... No shit. For multiple reasons.

>Time for an old standby? What's Winamp up to these days? Oh, great, looks like more internet radio nonsense. And the website has the modern flat square design I've recognized as a harbinger of impending disaster. Sigh.

Winamp doesn't even get the chance because the website looks signals an "impending disaster" ?

<comment><USER55> Yeah, that was a strange remark. Winamp's website looks like it does because development on the program is kind of in a state of flux / suspension, with nothing happening since a few years ago when AOL sold Nullsoft and the latest version (5.666) was released. I find Winamp to be pretty efficient these days to be honest.

</comment></comment><comment><USER56> Hence, why I still use Winamp 2.95.

I've tried Tomahawk, WMP, VLC, and others. But they all have some stupid social connectivity, or rating/library organizing thing (so does Winamp, but it's unobtrusive), or just takes too many resources.

All my music is already organized (Ampache), I just want to play an M3U. VLC was a close second by the UI is too clunky for me (though I'm guessing skins and some customization can change that).

<comment><USER57> Yeah, I was about to say, what's wrong with Winamp 2.95? Is it "bad" just because it's old?

</comment></comment><comment><USER46> If you can't handle playing audio you're already having a bad time.

Finding efficient software for mobile phones is worth the effort:

[https://play.google.com/store/apps/details?id=ch.blinkenligh...](https://play.google.com/store/apps/details?id=ch.blinkenlights.android.vanilla)

</comment><comment><USER58> For Windows check out billy. It's an extremely lightweight music player (single exe) which can load large collections very quickly.

[https://www.sheepfriends.com/index- page=billy.html](https://www.sheepfriends.com/index-page=billy.html)

</comment><comment><USER59> > it's all written in plain old C without leveraging the synergies of dozens > of frameworks. One wonders how they managed.

As a C programmer it seems obvious that it's efficient exactly because it doesn't use dozens of frameworks.

I wonder if the author was ironic saying that...

<comment><USER60> It's sarcasm. He's commenting on how projects today use way too many frameworks.

</comment></comment><comment><USER61> AIMP [0] is pretty much "today's Winamp" on desktop. I'm curious how it would behave on Surface.

0\. [http://aimp.ru/index.php?do=lang&lng=en](http://aimp.ru/index.php?do=lang&lng=en)

<comment><USER49> I thought Winamp was "today's Winamp". :(

I'll check out this Russian thing too though.

<comment><USER13> You should. It's extremely efficient, upgrades painlessly (your music is stopped for 5-10 seconds and boom, upgraded), has good skins and never, ever lags, or loads the system in any way.

</comment></comment></comment><comment><USER62> Has anyone tried Roon Labs? It's a high end library manager that partners with Tidal.

</comment><comment><USER63> If we remember, this was one of the key advantages of the original iPod. Read as much MP3 data into RAM as possible, then spin down the hard drive. Spin it up again when you've gotten to the end of the in-memory buffer.

<comment><USER64> To this day, the huge old Ipod 80Go has been the best mobile audio equipment I owned. So much so that I have in fact stoppes listening to music on the go when mine started going senile and replacing it was no longer possible.

Apple, this was the one product that meaningfully changed the game for me and many others. We miss it.

<comment><USER65> I mean.....ebay is absolutely full of either new or like-new iPods Classic in any capacity you want, I know it's annoying that apple doesn't sell them anymore but if you want one it's not exactly difficult to get one.

<comment><USER66> It was lack of rockbox that prevented me using ipod "classic" \-- I see the classic port is still listed as unstable. I'm a mac user but I have never understood how iTunes is to be used.

</comment></comment></comment></comment><comment><USER67> I just use command-line program on Linux. Very easily to play the music. If you want a shuffled playlist, you can use the commands such as "shuf" and "xargs". You can use "head" to limit playback time, if you use music playing program that output to stdout instead to the speaker (and then use another program to send to speaker) (as far as I know the only music players that do this are ones I wrote myself, but other ones may well exist, that I do not know of).

</comment><comment><USER68> I'm seriously considering switching away from Google Music because of this. The web interface, and every unofficial desktop app I tried, all use up 50+ percent of a cpu.

<comment><USER66> What about the phone app? I sometimes play google music on my laptop but there's usually no particular reason not to play it on my phone.

</comment></comment><comment><USER69> I thought this was going to start another Electron bashing thread, apparently the Spotify client uses the chromium embedded framework, with a C++ core. So its basically a fat web app consuming Ted's battery.

[https://www.quora.com/What-is-the-technology-behind-the- Spot...](https://www.quora.com/What-is-the-technology-behind-the-Spotify- desktop-app)

</comment><comment><USER70> VLC?

</comment><comment><USER71> I'm surprised VLC wasn't mentioned here. I've been playing SomaFM's 80's station on my work computer for weeks straight, yet the vlc.exe process still clocks in at around 1-3% CPU and 25MB of memory.

I definitely agree with Ted's conclusion, though. We need an Energy Star (TM) rating for software.

</comment><comment><USER72> My greatest affliction with music players is the UI inefficiency. They are so anxious to sell me their online services, that have bad searches, bad browsing, almost no information about the music (who's this voice singing together?), and slow to start.

Can anyone here recommend a good player for Windows?

<comment><USER73> Foobar2000.

The default UI is difficult, but it's ridiculously customizable. You can find tons of people's customization profiles for it to save effort.

</comment></comment><comment><USER74> I still use XMMS (not its slower buggier cousins like audacious or XMMS2) and it works super fast and great, having entire music library in the playlist. If I were using Windows, I'd use version 2 of Winamp which is essentially the same thing.

My other music player is Youtube :)

</comment><comment><USER75> I use Subsonic, but they have since changed their licensing to be quite expensive.

[https://www.maketecheasier.com/subsonic- alternatives/](https://www.maketecheasier.com/subsonic-alternatives/)

<comment><USER76> Much of the community has moved to Libresonic, a fork of the last open source Subsonic (6.0 beta 1): [https://github.com/Libresonic/libresonic](https://github.com/Libresonic/libresonic)

</comment></comment><comment><USER77> On Linux I use cmus in a guake window. Cmus is a curses-based music player / browser and guake lets me access it with F12 at any time. Launches almost instantly and I never worry about it consuming more resources than it needs.

</comment><comment><USER78> Tomahawk Player ([https://www.tomahawk-player.org/](https://www.tomahawk- player.org/)) is pretty nice and it supports both local files and streaming services.

</comment><comment><USER79> My music player is very efficient, it practically doesn't waste any milliwatt- hour from my laptop's battery. The audio quality is good to superb depending on the source material.

It can display the covers of albums with excellent resolution and clarity.

The compatibility with the music formats is excellent, supporting most of the formats designed for the music player. Actually i can play most music from 1948 to 2017 on it, without any change in configuration.

With optional hardware it can support 4-channel surround audio, as well, although this isn't an user-friendly setup.

Not everything is great -- my music player isn't portable at all. It is big and weights more than 10Kg. It also doesn't support remote operation. You need to be there at the user console to change tracks, etc.

My music player is called a "Lenco L75".

<comment><USER80> The downside is that source also degrades over time, is subject to atmospheric interference (aka dust), and can be subject to physical resonation.

Not to mention the required power dongle can be a real limitation, even if the weight is not.

<comment><USER79> Records are actually a very very long-lasting information storage medium, better than magnetic tapes (even when you put redundancy checks on them). So much that sometimes when music from the 1940s to 1960s is to be restored, restauration experts use the record rather than the master tape, which is more subject to degradation.

As for degradation, in theory there is degradation every time the record gets played. In practice tests done in the 60s show that records can be played over 1000 times without significant deterioration of audio quality.

However, the record surface is very susceptible to damage. This means that, play a record over a worn stylus, or under a turntable with a too heavy tracking force or a poor quality cartridge -in short, a bad turntable-, and the record will wear down rather quickly, sound quality will be degraded quickly.

<comment><USER80> Or, as is my experience, a piece of debris is missed when putting the record away, and scratches the surface significantly when put into its (usually too- tight-fitting) sleeve and cover.

</comment></comment></comment></comment><comment><USER81> I find Vox ([https://vox.rocks/](https://vox.rocks/)) for Mac to be pretty good. I certainly haven't found anything better for OSX.

</comment><comment><USER66> Cog on mac seems to be a nice simple music player. I haven't noticed high CPU usage. [https://cogx.org/](https://cogx.org/)

</comment><comment><USER35> The author forgot VLC and foobar2000, both of which I'd consider a safe bet on a laptop.

Also, for Winamp, the only version that matters is v5.623 (dated Dec 9 2011)

</comment><comment><USER82> No body mentions mediaplayer classic ? It requires to have codecs installed, but it's prety lightweight.

<comment><USER83> > It requires to have codecs installed

MPC-HC[1] ships a built-in copy of ffmpeg/libav via LAV Filters[2], what extra codecs did you need?

[1]: [https://mpc-hc.org/](https://mpc-hc.org/)

[2]: [https://github.com/Nevcairiel/LAVFilters](https://github.com/Nevcairiel/LAVFilters)

</comment></comment><comment><USER84> > the website has the modern flat square design I've recognized as a harbinger > of impending disaster. Sigh.

So true.

</comment><comment><USER85> I haven't even thought about this issue since I started sending all my music through Chromecast.

</comment><comment><USER86> There is DeaDBeeF on Linux which has the lowest appetite among GUI audio players.

</comment><comment><USER87> mpv and vlc are more than enough for all my playback needs. Besides Rockbox on a portable Sansa player, which can actually play Opus files, unlike various similar solutions.

</comment><comment> torrent-of-ions He's on Windows and didn't mention foobar2000? I've been using Linux exclusively for almost ten years now and foobar2000 is the only program I still miss. Banshee does an acceptable job, though.

<comment><USER88> Have you looked into DeaDBeeF? I find that to be the closest thing to foobar2000.

<comment><USER89> +1 for DeaDBeef. straight forward player with no fuzzing over library management etc.

</comment></comment></comment><comment><USER90> Music player

Read file > play

Spotify

Internet > dl file > convert decrypt > read file > play > remove files after max cache reached

The internet/downloading takes a lot off power.

The filesystem is also in use far more

The encryption takes a lot off cycles as well. The reason that it is there is so it won't be a glorified music piracy software ala napster/kazaa/limewire.

At one point Apple removed indy apps from their store which cached youtube music to file system for offline listening. A nice feature, but music is copyrighted and has a rich history with lawsuits. You can't just stream music, because streaming in this context is same as downloading.

All battery munching things that add up, but which are essential due to the nature off the data.

Furthermore, Spotify needs to run on ios, android, windows, linux and osx.

For this needs far more intricate code than a player for 1 OS. Optimizing individually for each and make it shared platform is no easy task

I agree a lot needs to be better, but there is quite some bias and overlooked factors.

<comment><USER22> Do I understand you correctly in that you attribute increased power usage to the intricacies of copyright law (at least in part)? Because that's an interesting angle that I hadn't even considered yet. :)

<comment><USER90> Well, I opened up my supposed music cache from Spotify once and u dont get a list with audio tracks, but encrypted data. The cache was about 12gb large so it must be the audio.

If it was the pure audio source then nothing stops me from copying it and put it in my own library, possibly shared with anyone through my own NAS avoiding ads and future subscriptions.

I could also just stream the cached folder into my own app, and while losing the ability to pick songs in real time it effectively becomes a radio given the main client keeps running, which I would do on a random cheap pi or server.

</comment></comment></comment><comment><USER91> DeliPlayer is the one I miss.

Someone else mentioned VLC's GUI sucking, and that is so true and such a pity, both for the playback and conversion/transcoding abilities it has. I don't mean graphical skins, mind you, it just needs (a lot) more love.

</comment><comment><USER92> "Spotify", "Groove" , what the heck ? This guy is clueless, he should try foobar2000</comment>


Show HN: Metareads - read the Web the way you like it - <AUTHOR> http://www.metareads.com/

<comment> olog-hai Do you have an RSS feed? A similar service <http://www.viainstapaper.com/> does.

<comment><AUTHOR> No RSS feed at the moment. I'm mainly focusing on the web reader (eg. [http://www.metareads.com/articles/read/lorem-ipsum-all- the-f...](http://www.metareads.com/articles/read/lorem-ipsum-all-the- facts/6289c192-b913-4dc7-954d-93c5149c37f5) ) and would really love to get some feedback on it.</comment></comment>


This is Your Brain on One Page: Workflowy (YC S10) - <AUTHOR> http://thestartupfoundry.com/2011/02/23/this-is-your-brain-on-one-page-workflowy-yc-summer-2010/

<comment><USER2> Has it gotten better over the past three months?

I used to use Workflowy every day, but moved back to Freemind a few months ago and can't imagine going back to workflowy. I'm generally on machines where I can freely install software, and I don't use a smartphone for viewing todo lists, so freemind fits my needs. It's also much more flexible and can export in a few nice ways (pdf and html, for instance).

</comment><comment><USER3> I love WorkFlowy. I admit I use it in waves, some days I don't open it, some days I don't leave it. I do a great deal of planning and outlining in it, but found I struggle when it comes to maintaining todo lists etc in there.

However the developers are great, they're responsive when I email them about issues, and I advocate the app on twitter a fair bit. I look forward to further innovations :)</comment>


Play a drawbar synth organ in your browser with a MIDI controller - <AUTHOR> https://pomax.github.io/music-theory-js/public/ <comment><AUTHOR> Note that the "programmable synth" part of this still works even without Web MIDI, but having a MIDI controller with built in sequencer drive the whole thing is way more fun =)

It's also more practical because the in-browser arranger is constrained by whether or not JS gets enough time to run the BMP ticker "smoothly", which your MIDI controller is unlikely to have a problem with: if you can sequence/arp with it, it has one built into the hardware and all it needs to do is send midi control codes to the browser to act on.</comment>


Show HN: MathLingua – The Language of Mathematics - <AUTHOR> http://www.mathlingua.org/ <comment><USER2> Documenting mathematics rigorously is actually hard. For example see the Formal Abstracts ([https://formalabstracts.github.io](https://formalabstracts.github.io)) project by Thomas Hales. Hales' other writings on the subject may be informative too: [https://jiggerwit.wordpress.com/2019/06/20/an-argument- for-c...](https://jiggerwit.wordpress.com/2019/06/20/an-argument-for- controlled-natural-languages-in-mathematics/)

<comment><AUTHOR> Thanks for the links. I was not aware of Thomas Hale's research even though I searched extensively to try to find related work.

His descriptions of what he wants to attain align with what I would like, a formalized way to describe what is known in mathematics.

He also describes how this can be used for machine learning, and area that I am also pursuing, but my results are still in an exploratory state.

Either way, I am really glad others are looking into this area too. I think it is something that will be very beneficial to the math community.

<comment><USER2> This is an area of my interest too, esp. if one can find something that is actually useful for a practicing mathematician. I mentioned Hales' project but based on their github project progress (a postdoc of his did some exploratory work) they seemed to have hit some road blocks, which is an example of this problem being hard. I don't know what your background is. If you are interested in further discussion I would be happy to p.m. over email.

<comment><AUTHOR> I have a PhD in mathematics, I am a software engineer working at Google, and have practical experience with programming language design and usage.

MathLingua is _not_ a Google product and is not affiliated with Google in any way. Instead it is my own work I am exploring at the intersection of math, computer science, language design, and natural language processing.

It would be great to chat more over email. My email can be found on my github page [https://github.com/DominicKramer](https://github.com/DominicKramer). Let me know if you have problems getting it.

</comment></comment></comment></comment><comment><AUTHOR> Hello, this is the creator of MathLingua.

MathLingua is still in development, and the documentation still needs work.

However, I wanted to get feedback earlier rather than later to help guide development and the writing of the docs.

Note that MathLingua is the language that powers [https://mathlore.org](https://mathlore.org).

<comment><USER3> could you explain the usecase a bit? i skimmed the docs and don't quite get what writing definitions and theorems in this format gets me, apart from an automated "go to definition". what can the tooling do, or what functionality are you planning to implement?

btw "The Language of Mathematics" sounds a bit over the top ;) how about "A Language for Mathematics"?

<comment><AUTHOR> Thanks for the feedback. I'll update the docs to make this more clear.

The goal is to allow the building of a system so someone could ask, for example, "what are the known theorems that describe when a function uniformly continuous?" or "under what conditions is a group solvable?".

To enable this, it is necessary to build a system that catalogs precise statements of math theorems, definitions, and other statements ([https://mathlore.org](https://mathlore.org) is the start of this system that uses MathLingua but currently only uses keywords and some structure for searching).

This is similar to [https://mathworld.wolfram.com](https://mathworld.wolfram.com) or the math pages in Wikipedia except the statements are not text or LaTeX, that is hard for a computer to understand the meaning of. Instead the MathLingua language is used to identify math statements by meaning.

Right now the tooling can render math statements, find duplicate definitions, and can find missing definitions. Further [https://mathlore.org](https://mathlore.org) uses MathLingua and has some basic searching.

Further, experimental work is also underway so that the MathLingua tooling can expand a math statement by expanding the definition of items used in that statement.

Yeah, I thought about using something like "A Language for Mathematics" but I thought "The Language of Mathematics" might draw more attention :) But it is only the title of my post on hacker news, not the title of the MathLingua website.

<comment><USER3> thanks!

</comment></comment></comment></comment><comment><USER4> This is an awesome effort!

Regarding a comment on possible use cases.. One component that would really compliment this would be a programming-language specific checker of definitions. In the documentation's example of "integer" it would be straight forward to write in python a function that checks if a given variable is an integer. The same can be for other definitions such as "invertible matrix" or "set of orthonormal vectors".. other languages could provide such checks for more symbolic stuff like "commutative ring" etc.

Once you have this in place, you can load your nice data into a (e.g.) numpy.ndarray object, and checks would be triggered for all possible properties. This would automatically tag your data as, e.g. "stochastic matrix" and then you could even get suggestions of the sort of "build a time- discrete stochastic system based on this matrix?". This is would be very helpful for "data scientists" who are a bit far from theory.. at least I know I would use this very often.

There is of course the issue of expressivity to be taken into account. Much of mathematical progress involves invention of new notation, not all of which is neatly written in "left to right English with only binary operators" (think of commutative diagrams for example). While the language can of course be expanded in this direction, there will be a very big temptation (and I would guess frequent pushes from the future community) to change to more and more general languages. In this case, please always keep in mind the very expressive but useless notation of Russell & Whiteheads's Principia. There is a big theory of language and expresivity, and there are also practical examples (think of OWL or other semantic-web languages) of how to reach a compromise that allows for enough expressivity for the use cases of interest.

</comment><comment><USER5> Nice project! I'm working on something similar with [http://fungrim.org/grim/](http://fungrim.org/grim/) and [http://fungrim.org/](http://fungrim.org/)

<comment><USER2> Pretty cool. Are you aware that there is a content markup part of MathML [https://www.w3.org/TR/MathML3/chapter4.html](https://www.w3.org/TR/MathML3/chapter4.html) ? There are other efforts geared towards math authoring as well if that is your focus,for example people have authored open textbooks using [https://pretextbook.org](https://pretextbook.org) .

<comment><USER5> Indeed. I decided not to use MathML for various reasons:

1\. The syntax is horrible (for writing by hand).

2\. I'm more interested in computation than presentation, so something closer to S-expressions along the lines of Mathematica feels more comfortable to me.

3\. The progress so far on defining semantics for content MathML has failed to impress me.

Concretely, I think if you are trying to do semantic mathematics, you need an implementation of the semantics in software, not just a hand-written spec. Ideally this would be backed by a formal theorem proving system. So far I just do randomized testing using symbolic evaluation and interval arithmetic. See this writeup for more details: [https://arxiv.org/abs/2003.06181](https://arxiv.org/abs/2003.06181)

<comment><USER2> Thanks! The symbolic computation aspect of your paper is very interesting. I would be very interested in checking out how conditional rewriting is achieved. Do you have more in depth writings on the theory and mechanics of your approach?

<comment><USER5> There is nothing in depth yet. I'm happy to discuss (here or by email).

<comment><USER2> Cool. I have skimmed through the code base. I will email you with further questions.

<comment><AUTHOR> It looks like there is a lot of shared interest in this area.

fspeech, fdej, and others, what do you think of having a Google group, mailing list, or something similar to have a communication channel for anyone that wants to chat more?

If you are open to this (or have another suggestion) I'll set one up and share the link here.

If you prefer email, that's cool too.

<comment><USER5> Sure, go ahead and set something up!

<comment><AUTHOR> Cool. I've setup a Google Group at [https://groups.google.com/d/forum/mathlingua- discuss](https://groups.google.com/d/forum/mathlingua-discuss).

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><AUTHOR> A Google Group has been created to discuss MathLingua and Mathematical Knowledge Management at [https://groups.google.com/d/forum/mathlingua- discuss](https://groups.google.com/d/forum/mathlingua-discuss).

Everyone is welcome to join.

</comment><comment><USER6> Is it able to transpile to Coq/Lean/Agda/etc?

<comment><AUTHOR> It is already difficult to have a formalized math language with a level of formality that matches that found in papers.

The goal of MathLingua, at this time, is to match such a level of formality that is in math books and papers.

However, the syntax was designed to allow support for transpiling to a theorem proving language to be added at a later time. It is something, in the future, that I would like to do, if possible, but I don't have a time estimate if/when it will be available.

<comment><USER6> I recommend to check also Decucteam[1][2] projects, they also convert between different formats. Even as they focus on mathematical logic mostly, it still can be useful to check.

[1] [http://deducteam.gforge.inria.fr](http://deducteam.gforge.inria.fr)

[2] [https://github.com/Deducteam](https://github.com/Deducteam)

</comment></comment></comment><comment><USER7> This is really cool!! I hope this becomes popular. Imagine having all theorems etc indexed like this!

<comment><AUTHOR> Thanks for the support! Yes, that is one of the goals, to make it really easy to find what is known in mathematics and contribute to that knowledge base. I have [https://mathlore.org](https://mathlore.org) which is a demonstration of how such as system could work.

</comment></comment><comment><USER8> It's cool and all but what's wrong with Latex?

Doesn't answer the "why" question at all.

<comment><AUTHOR> Thanks for the question. I have answered it in another question in the comments, and I'll update the docs to make the difference more clear.

</comment></comment><comment><USER9> This feels like "mathematics pseudocode" and I kind of love it. Indexable math Zettelkasten notes.

<comment><AUTHOR> Thanks! I wasn't sure how people would feel about the syntax, and I'm glad you like it.

</comment></comment><comment><USER10> Would it be possible to put the theorem name (and possibly a description) at the top instead of buried at the bottom in a metadata block?

Theorem: "Fundamental Theorem of Calculus"

<comment><AUTHOR> I thought of this, but couldn't find a nice way to fit this into the syntax.

That is,

      Theorem: "some text"

is the same as

      Theorem:
      . "some text"

Thus it would be hard to distinguish a named theorem with one statement

      Theorem:
      . "some name"
      . "statement 1"

from an un-named statement with two statements:

      Theorem:
      . "statement1"
      . "statement2"

So for now I'm leaving the name in the metadata section, but I'm open to putting the title higher if I can come up with a nice way to do so.</comment></comment>


Ask HN: How do you sell to startups? - <AUTHOR>

Hi HN,
I have a service that provides user testing for startups. I have had several customers and relatively ok revenue over the past couple months. Some have even ordered tests as repeat customers.
My product has signed up over 1000 testers chomping at the bit to test websites. This is where I am fundamentally different than usertesting(com) because we are crowd sourced user testing. My testers literally compete to get the testing job (as far as who can get to it quickest).
However, I have seen my growth reach a flat line and I think it's largely because I don't portray this value to the customer on my landing page. I don't have the budget for an explainer video either. So I would like some feedback on how I can better get across the message I want to.
When my customers have actually purchased and received user feedback I have not had a disappointed customer to date. I have worked with over 350 startups so far (not all paying customers).
http://www.betapunch.com
If you would like to try it yourself I have set up a coupon code for a free user test if you purchase at least one. Enter the coupon code: hackernews <comment><USER2> The site looks good, one thing I'd call out on the main page is if/how you segment. Can you get the right demographic for a given site or is it just whoever signs up? For more user acquisition I'd try some verifiable claims - "80% of sites who do user testing and iterate on it see an increase in site signups" etc. Also try reaching out to VCs and incubators to get in front of their companies. You might be able to send their email lists an offer for the first 3 companies to get free testing and then all the other companies that respond hoping to get a free test can be upsold to buy. Also attend meetups where startups are presenting and ask about how they use user testing and hand out business cards with a discount code on the back. Set up a twitter and quora search for relevant terms and respond to people's questions/threads and make sure to mention that user testing is a service you provide. Those are all good starting points, if they're not working then the problem is probably the sales person.</comment>


Predictably randomizing SSH server port using 2FA TOTP - <AUTHOR> https://github.com/benjojo/totp-ssh-fluxer <comment><AUTHOR> … And please don't ignore the description: "this is a bad idea, don't really use this please"

<comment><USER2> I think I'm going to ignore that advice, as least for experimental purposes.

On my servers, I keep a single ssh port open to the internet. It's as secure as possible, but for a little extra good sauce, I also run it on a nonstandard port to help evade port scanners. This sounds like an improvement on that.

Don't worry, though, I would never consider this an effective security measure. Just another layer on top of the others.</comment></comment>


How to write a complete Interpreter use Racket? - <AUTHOR> http://cs.brown.edu/courses/cs173/2012/book/

<comment><USER2> Context (including link to PDF version):

[http://cs.brown.edu/~sk/Publications/Books/ProgLangs/2007-04...](http://cs.brown.edu/~sk/Publications/Books/ProgLangs/2007-04-26/)

[http://cs.brown.edu/~sk/Publications/Books/ProgLangs/](http://cs.brown.edu/~sk/Publications/Books/ProgLangs/)</comment>


Show HN: GitHub contribution shown right - <AUTHOR> http://gh-activity.com <comment><USER2> The UI is misleading. By seeing the GitHub-like design, I thought I was on GitHub and was surprised not to see any content. Took me a while to understand that I had to input my username as I wasn't on GitHub.

Besides that, I like this tool. I was also surprised to see that a file I had uploaded in a GitHub comment, then edited/removed, was still available; your website gives me access to this upload of mine.

</comment><comment><USER3> Whenever you enter the username of a user with a website, the website link links to namial.us instead of the user's actual website.

<comment><AUTHOR> Spot on, thanks.

</comment></comment><comment><USER4> Doesn't show any activity for whatever users I try it on.

<comment><AUTHOR> What the username you tried? Do you change the activity period to other than '24 hours'?</comment></comment>


Honda's Twitter Account Compromised - <AUTHOR> https://twitter.com/Honda/status/539433750556585984

<comment><USER2> Nope, it was a pretty good PR stunt. You can see Skeletor on the main Honda site.

</comment><comment><USER3> marketing, the tv commercial has skeletor and he-man. that being said, love it.</comment>


Why does playing devil's advocate loose you HN karma? - <AUTHOR> Shouldn't dissenting/minority opinions be promoted in the HN feed? <comment><USER2> Posting an honest opinion is enough. No one needs to "guide" the discussion. If everyone agrees then that's fine, it'll just be a very short thread.

As for why you get downvoted, unless you're very good at communicating a post playing Devil's advocate looks pretty much exactly like a post espousing a contrary opinion for real. In other words, people can't tell you're playing Devil's advocate and they take you seriously.

</comment><comment><USER3> Sadly people do not appreciate debate anymore, they simply want to read statements that agree with whatever position they believe to be true, fair or what have you.

I fear for a society that no longer collaborates and grows but rather shouts into its own comfortable echo chamber.

</comment><comment><USER4> _" Shouldn't dissenting/minority opinions be promoted in the HN feed?"_

Ideally, yes.

But HN readers/commenters are human, just like those on other sites. It's a slightly more curated Reddit, with a less meme-y marquee, but the downvote button is abused just the same.

It doesn't stop me from playing Devil's Advocate sometimes, though. I welcome the intelligent responses when I get them (and there are plenty of intelligent people here to provide them), and _usually_ when I get downvoted without comment I take comfort in the fact that somebody has had their worldview challenged and is silently having a temper-tantrum somewhere.

I certainly don't intend on it to be trolling, however. I think an intelligent, civil debate is its own reward...even if one is outmatched. :D

<comment><AUTHOR> Thank you! Terrific response.

</comment></comment><comment><USER5> If you are referring to this comment ([https://news.ycombinator.com/item?id=11971989](https://news.ycombinator.com/item?id=11971989)) I wouldn't call that playing Devil's Advocate.

<comment><AUTHOR> I wasn't, but kudos on the research! That was me giving my actual, relatively uneducated, position. Don't worry, I was corrected quickly. I misunderstood the nature of the exploit. I thought it was intrinsic to the way tor works, turns out it's a browser bug.

Check out some of my other comments and posts. Also i just see a lot of unpopular comments go away quickly.

</comment></comment><comment><USER6> TBH, I think it would have to be a pretty good stance to actually warrant promotion. If everyone who took an oppositional stance to issues was promoted I don't think regular discourse would continue to occurr.</comment>


Cracking Avatar's Language Codes - <AUTHOR> http://nautil.us/issue/57/communities/cracking-avatars-language-codes-rp <comment><USER2> A new year's resolution? Learn Na'vi before the sequel is released in Dec 2020!</comment>


Google is donating $2 million to the Wikimedia Foundation - <AUTHOR> http://twitter.com/jimmy_wales/status/9215187878

<comment><USER2> It makes sense to me. The Wikimedia foundation greatly enriches the quality of Google's search results for the majority of users. I almost always want the Wikipedia article when I search for something.

<comment><USER3> I agree--- to a large extent the consolidation of useful information on almost any topic _Foo_ at Wikipedia has compensated for what'd otherwise be an overall decrease in the quality of Google's results for _Foo_ over the past few years. If you look at what you get back for many general topics _excluding_ the Wikipedia result, it's a morass of SEO'd blogs, referral bait, and other such not-really-content content.

</comment></comment><comment><USER3> The formal announcement is actually semi-officially available already: [http://lists.wikimedia.org/pipermail/foundation-l/2010-Febru...](http://lists.wikimedia.org/pipermail/foundation-l/2010-February/056841.html)</comment>


Show HN: Cloudsplaining, an AWS IAM Security Assessment Tool - <AUTHOR> https://github.com/salesforce/cloudsplaining <comment><USER2> Damn. The report guidance is really good. I'm going to use this in an assessment next week :) Have to review an account that has hundreds of IAM roles but this should help a lot,.

<comment><AUTHOR> Thanks! I'm glad you like it. Let me know if you have any feedback - here, in the Gitter channel (link in the Readme), or on Twitter (kmcquade3)

<comment> chmod-noobs What kind of privileges do I need to run it? I don't see any details in the documentation. You should probably add this there.

<comment><AUTHOR> You just need a single IAM action - iam:GetAccountAuthorizationDetails ([https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetA...](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountAuthorizationDetails.html)).

I'll definitely add that to the README. Thanks

</comment></comment></comment></comment><comment> chmod-noobs Cool project. How is this different from PMapper though? I use that it some of my assessments (underrated tool IMHO).

<comment><AUTHOR> PMapper is definitely a great tool. It's best used in Pentests for validating some privilege escalation paths. It has the benefit of analyzing IAM trust policies, resource based policies, viewing escalation paths in a graph based approach. Very underrated indeed.

Cloudsplaining is faster at creating a more comprehensive report. We realize that there is lots of damage that can be done just by being able to modify Infrastructure, even when your privileges fall short of legit privilege escalation.

I think the example report will illustrate this best for you. Check it out here: [https://opensource.salesforce.com/cloudsplaining/](https://opensource.salesforce.com/cloudsplaining/)</comment></comment>


Firefox 11 Targeted for SPDY Support - <AUTHOR> https://bugzilla.mozilla.org/show_bug.cgi?id=528288

<comment><USER2> I like that once again the approach of "build it and deploy something on it" seems to work more effectively than "specify it over a five-year intensive period".

I imagine that's just my inner lazy engineer talking, though; there are some protocols that would definitely have been better off specified properly from the start (I'm looking at you, SMB)

<comment><USER3> SPDY absolutely _was_ intensively specified: [http://mbelshe.github.com/SPDY- Specification/draft-mbelshe-s...](http://mbelshe.github.com/SPDY- Specification/draft-mbelshe-spdy-00.xml)

<comment><USER4> The link above is to a version being specified, not yet deployed. (v3).

Its fair to say that v2 is deployed and was well documented and that google was very responsive to technical inquiries about it. The firefox and chrome implementations are v2.

But open specification is important. Google and Mozilla have been working together to bring this into the IETF.

</comment></comment></comment><comment><USER5> As mentioned in the bug, this landed but is pref'ed off for now. I don't know what the process is there, no idea when it will be switched on. It might or might not be on for FF11 (which the title of the submission here states).

<comment><USER6> We've landed an implementation of a draft of the SPDY spec, and that will be available in Firefox Nightly builds [1] tomorrow (or so). In order to test it out, you must change change the network.http.spdy.enabled preference to true in about:config; the default configuration does not have SPDY enabled.

There is no concrete plan for enabling support for any particular draft SPDY spec in any particular version of Firefox yet. There's no way it will be enabled by default in Firefox 11. Our implementation needs a lot more testing, especially since there are already very important SPDY-enabled sites live on the Internet. Even if we spit out a perfect implementation of the latest draft spec on the first attempt, it might be the case that these existing sites depend on behavior undefined by the spec and/or bugs in Chrome. These kinds of issues still need to be found and addressed.

There is also still work that needs to be done on the spec itself. I suspect there will be many rounds of divergence and convergence in SPDY implementations as more people experiment with implementing it, and as the protocol improves.

[1] <http://nightly.mozilla.org/> [2] [https://bugzilla.mozilla.org/enter_bug.cgi?product=Core&...](https://bugzilla.mozilla.org/enter_bug.cgi?product=Core&component=Networking)

<comment><USER7> > _already very important SPDY-enabled sites live on the Internet_

Certainly Google's sites qualify as important, but are any other major sites using it? Chrome doesn't seem to setup SPDY sessions for anything I visit regularly other than Google sites.

<comment><USER8> While also Google products, Google analytics (ssl.google-analytics.com) and their ajax cdn (ajax.googleapis.com) both support it. Lots of other sites rely on those.

</comment></comment></comment></comment><comment><USER9> This is great news! Now we just need better support for SPDY web servers..

Edit: This looks promising <https://github.com/indutny/node-spdy>

<comment><USER10> Yeah, but you don't need SPDY as much on the application servers as you do the frontline servers (Apache, nginx, lighttpd...) where its benefits are more pronounced.

<comment><USER3> Apache already has a mod-spdy (<https://code.google.com/p/mod-spdy/>), and varnish is in wait-and-see mode ([https://www.varnish- cache.org/lists/pipermail/varnish-misc/2...](https://www.varnish- cache.org/lists/pipermail/varnish-misc/2011-April/006084.html) "SPDY isn't even an official IETF draft yet")

I agree. Getting SPDY into Apache, ngnix, varnish, squid etc. would be all we need to get the benefits of this new protocol.

The front-end SPDY server could then communicate via HTTP via a low-latency connection.

</comment></comment></comment><comment><USER11> As an Australian sitting 210ms+ from most web servers I use regularly, this is great news. Muxing all assets for a each page load into a single TCP stream will make page loads oodles faster.

As others have said, this won't help much until common servers (nginx, varnish, etc) also support SPDY, but it's a move in the right direction.

</comment><comment><USER12> If SPDY is adopted by Chrome and Firefox; Google and Facebook; and Apache, ngnix, varnish, and squid, then HTTP's days seem numbered.

<comment><USER13> Considering that SPDY requires SSL/TLS and therefore the webmaster will have to get and set up a certificate for his domain, I bet most websites will use HTTP for years to come.

<comment><USER14> There was some discussion about using self-signed certs with SPDY which would be treated as insecure (no lock). I don't know if a decision has been made.

<comment><USER13> It's not about the money. As patrick said you can get free certs from StartSSL, and companies like namecheap offer 1-year free certs if you buy a domain. It's about 1) lack of knowledge, 2) lack of support by shared hosting companies and 3) laziness.

<comment><USER14> That was my point; the server could automatically generate a self-signed cert even if the administrator is lazy or ignorant.

</comment></comment></comment></comment></comment><comment><USER15> Someone in that thread mentioned that SPDY is used to achieve the speedups in Amazon's Silk browser. It does look like we're seeing the beginnings of something big.

<comment><USER16> Haven't all the benchmarks shown that Silk is actually slower?

In any case, I'd imagine the benefits are from the cloud caching than any other factor.

<comment><USER17> Do you have links on that? Legitimately curious.

<comment><USER16> Anandtech did a good rundown:

[http://www.anandtech.com/show/5139/amazons-silk-browser- test...](http://www.anandtech.com/show/5139/amazons-silk-browser-tested-less- bandwidth-consumed-but-slower-performance)

</comment></comment></comment></comment><comment><USER18> If you want the web to be "speedy", use less javascript.

</comment><comment><USER19> What does the SPDY protocol do that the SSH2 protocol doesn't aside from being completely HTTP-specific?

This seems to me to be yet another unnecessary new protocol.

<comment><USER14> Browsers aren't going to implement both SSH and SSL, since that doubles security surface area. You could rip out the mux layer from SSH and run it over SSL, but that doesn't sound any easier than SPDY. And SPDY has special HTTP header compression.

<comment><USER20> Doubles? TLS/SPDY barely registers in the vast expanses of attack surface that all the browser supported protocols, media formats, flash, javascript etc expose.</comment></comment></comment>


Ask HN: What font do you use to print sensitive passwords? - <AUTHOR> From time to time I have to assign complex passwords and give hard copies to users.  Notepad font routinely confuses them.  They mistake a lowercase l for a 1, etc.  Which font is clearest? <comment><USER2> Look into fonts optimized for source code, like [https://www.google.com/fonts/specimen/Source+Code+Pro](https://www.google.com/fonts/specimen/Source+Code+Pro)

If you have control over how the passwords look, you maybe also could adjust their generation to avoid hard-to-distinguish sequences.

</comment><comment><USER3> alternative: make your password-generation algorithm avoid letters and numbers that are easily confused.</comment>


Ask HN: How do you find a good progra... uhh.. I mean lawyer? - <AUTHOR>

Quite a lot of comments dealing with company formation or IP says "find a good lawyer".
If finding a good lawyer is anything like finding a good programmer, how do you find a good lawyer?
In this case, your the pointy haired boss who doesn't know anything about law. <comment><USER2> I'm a lawyer. A highly specialized lawyer. I will share what I know about this question.

1\. This is a problem for me too. Even though I have been doing this for a long time there are a lot of situations where I am asked for a referral and I don't know anyone good. Sometimes I don't know anyone at all.

2\. When this occurs the first default thought is "Go to a Juggernaut Law Factory". All of them claim to have the best people in the world in every possible specialty. You pay through the nose. You hold your nose and hope that the work product is adequate. Sometimes it is. Sometimes it is astonishingly good. Sometimes it's embarrassing as hell how badly the work is done. (The same goes for hiring the Big 4 accounting firms).

3\. If you don't want to go that route, your next job is to identify your problem as precisely as possible so you can start to find your way down the referral chain until you find someone you want to hire.

4\. I will make reference to my specialty to give you an example, but in any area of law the same concepts hold true.

5\. I am an international tax lawyer. I do primarily inbound (foreign money, companies, and humans entering the United States) work. To find me it is not sufficient to specify "tax" as your problem. That's like saying "I need some code" in software land, I'm guessing. You need to be highly specific. "I have a U.S. company that will sell 50% of itself to a foreign investor. My foreign investor needs a U.S. tax advisor in order to structure the deal properly, and I need a U.S. tax advisor to make sure I don't f--- something up for myself."

6\. For me, my next step is to start calling buddies who are lawyers and I ask them the "who do you know" question. That is easy for me because I know a bunch of people all over the world in my field of expertise. For you, trying to hire a specialist, it isn't. So you start with a generalist. A generic tax person, in my field. If the person has a sense of integrity and this is something that is beyond them, they will decline to do your work and will instead say "Call Fred. He does that kind of thing."

7\. Keep dialing. Get a name. Talk to that person. He/she is a statistical sample of N = 1. My suggestion is that you pay some money here. Don't get free advice. I might chat with you for a few minutes but if you're serious you're going to sit down and talk serious stuff for money.

8\. I commend an interesting article to you, which I believe I found via HN yesterday or the day before. <http://www.datagenetics.com/blog/december32012/index.html> talks about "The Secretary Puzzle" and how you don't need a large sample set in order to choose the right person.

9\. What you're going to take away from that first meeting is an expert's sense of what your problem is. DO NOT TRY TO GET AN ANSWER TO THE PROBLEM. Just get the expert's idea of how the problem is defined. Also get some of the insider technical jargon used to describe the problem. Words. Laws. Etc.

10\. From here on you are going to find more people. You are armed with better information. Go ask Mr. Duck D. Go or someone else, using the jargon you have now learned. See what that turns up. Keep dialing. Repeat your quest by starting with a generalist and focusing in until you hit a specialist.

11\. Once you have talked to two or three people, pick the person who gave you the best vibe. Specifically: did you understand what this person said when he/she talked to you? Was this person a complete asshat? Is this person accessible?

12\. Do not make your decision on price. Long ago when my hourly rate was $400 per hour, a client hired me and said "Do you know why I hire $400/hour lawyers instead of $200/hour lawyers? Because $400/hour lawyers get things done."

13\. I'm not saying that you should hire without regard to price. I'm saying it is a cost/benefit decision. Most people approach hiring a lawyer as a pure cost decision. This is one of our screening metrics for who we take on as customers (or not). If people can't see the benefit from hiring our firm, then we don't want them. And if we can't see the benefit we can give -- and if we can't articulate that clearly -- then we shouldn't take the job.

14\. Pro tip. For tax, at least, but I think in other areas too -- look to see who is doing a lot of lecturing and writing. Look at the courses and seminars on offer at www.calcpa.org, for instance, if you're interested in accounting people in particular fields. Who is talking about your problem? (Shameless plug: I love giving presentations on international tax topics and do a lot of it.)

That's it. I think your analogy to finding a good programmer is apt. I'm trying to hire a lawyer right now to work for me. I face the same problem -- how do I know that this person is competent? Will I be able to work side by side with him/her?

/Phil.

<comment><AUTHOR> What do you suggest to people who need a good lawyer bug have a low budget?</comment></comment>