Free Flag Icons - <AUTHOR> https://www.gosquared.com/resources/2400-flags

<comment><USER2> Using flags in your visual design can be tempting but in my experience it's a bad idea. The problem is that certain flags force you to "take sides" in political disputes that you likely aren't aware of and don't understand. You'll inadvertently make one side very angry with you, and you won't even really know what political statement you accidentally made.

It's OK if you stick to flags you know but if you start trying to have a list of all flags, there's no way to do that without making various groups angry.

I don't doubt that there's a "right" answer to all disputes over flags but do you really know what all the disputes are and want to arbitrate them as part of developing your software ...

Deliberately not digging up specific disputes because the whole point is, if you have to ask what they are or if you start debating them case by case, maybe this wasn't a can of worms that needed opening.

(also, the last time I encountered this was long enough ago that I'm sure the relevant examples have changed, and I never understood them well to begin with. But it was clear that flags poked more than one political group in the eye.)

<comment><USER3> And even worse is using them to indicate languages. There are countries with more than one language (e.g. Belgium which Dutch, French and German) and there are languages which are used in more than one country (think us.png vs gb.png for "English").

So, rule of thumb: \- never use flags to indicate a language \- use flags to indicate a country only after thinking twice

EDIT: Nonetheless, this flag collection looks awesome, and if I ever have a legit use case for flags in a GUI I'll definitely use them. Thanks for sharing under a free license!

<comment><USER4> How do you indicate a language in icon-like manner then? Is using the textual ISO codes the only safe option?

<comment><USER3> It depends.

First of all, flags are really bad for languages since there's an n:m relationship. Which flag would you use for "English"? The USA flag? The Flag of England? The Union Jack?

If you offer only "English" then depending on if you write "center" or "centre" you may offend either USA or British people. Same for "German", where a Swiss may be offended to see "Straße" while a German could be offended by seeing "Strasse". Of course most people won't care about that and I bet most Brits are used to see "color" without a 'u' on the internet, but from experience I can say that there are people who care about or even get offended by that.

But even if using textual representation for languages like "English" is not perfect, offering every language-country possibility (en-US, en-GB, en-??...) isn't a viable route in most cases since there are way to many combinations.

Just think of yourself (assuming you're from the USA): would you rather see the word "English" in a language selector or the Flag of England?

So what should you do? I'd suggest going with textual representations like "English" or the ISO 639-x shortcodes ("en" or "eng"). Being German that's easy to say for me, and I know a handful of people who'd like me to distinguish between de_DE, de_AT and de_CH.

So as I've said: it depends :-)

</comment></comment></comment></comment><comment><USER5> A bit of advice: avoid using flags altogether in your user interface unless you really, really need to refer to specific national/political entities. There's far too much room for error or offense, whether you're incorrectly assigning the wrong flag to a geographical region or have not represented the flag correctly. I haven't looked at the flag set, but I'm betting there are errors related to the correctness of layout, aspect ratios and colors and to the clarity of symbols and text.

Even more importantly, never use a flag to represent a language choice.

(* most major websites do avoid using flags, but one notable exception is Apple, which completely corrupts every single flag with their own shiny style: <http://www.apple.com/choose-your-country/> ...)

<comment><USER6> A bit of advice: actually look at something before judging it. If you'd downloaded, you'd know that they all look correct.

<comment><USER7> I downloaded it and looked at Estonia's flag. It's all wrong. I don't personally care, it looks close enough, but some people might take issue with this.

The ratio is 3:2, but the correct ratio is 11:7. The colors are wrong, both the gradients and flat versions. The correct RGB colors are well defined. [1]

[1] Colors and ratio are defined on this page [http://valitsus.ee/et/riigikantselei/riigi-ja- omavalitsuste-...](http://valitsus.ee/et/riigikantselei/riigi-ja- omavalitsuste-symbolid/eesti-lipp)

<comment><AUTHOR> It's a set of flag icons for the web, it's not to hang off the government building.

If we did exact aspect ratios for every flag they would all be different and look shit. We tried to be as exact as possible with colors and shapes, if they don't work for you guys or are not close enough then you don't need to use them.

Not aimed directly at you, just at anyone who doesn't find them precise enough.

<comment><USER8> Agree about aspect ratios, but we should expect rgb colors to be accurate.

<comment><AUTHOR> If you check out the flat flags the colors are exact, obviously the styled ones have subtle shadowing etc, and are probably out by a very small margin.

<comment><USER9> I checked out Estonia from above and the colour doesn't match the examples on Wikipedia. I've also checked out the Australian flag, and it's eyeball- different - the blue in the real flag is closer to navy blue. The blue should be #002B7F, but a colour picker tells me that the 64x64 flat flag has a blue of #003399.

It's not a big problem in my opinion - no-one should be overly hung up about minor anomalies like that for web icons - but it's not true to say the colours are exact.

</comment></comment></comment></comment></comment></comment></comment><comment><USER10> For people saying "don't use flags", and "especially not for languages"...

I totally agree in theory, but...

In a lot of interfaces, having something visual helps a lot. _Especially_ when you need to pick something from a list where you don't even know what language the user speaks!

Obviously, you can present a text list like "English (American)", "Português (Brasil)", "አማርኛ", "贛語", but it can look kind of ugly, how do you decide to sort them, etc.

Plus, a lot of times the language _is_ tied to a country, because each country has their spelling and grammar differences, etc. That's why many times you don't see "Portuguese" in language lists, but rather "Portuguese (Portugal)" and "Portuguese (Brazil)" -- because there's no such thing as a general- purpose Portuguese.

So while flags aren't perfect, a lot of the time they help far more than they hurt. In a perfect world, there would actually be language-specific icons that everyone recognized. Suggestions, anybody?

<comment><USER11> What flag do you suggest we use for es_US and fr_CA? Or how to distinguish de_CH and fr_CH?

<comment><USER12> Common practice seems to be using a half Swiss/half German flag for de_CH, and half Swiss/half French flag for fr_CH or just the Swiss flag for both languages.

</comment></comment></comment><comment><USER13> Under what license are they released? There is no licensing information on the page, or on the parent "freebies" page, or in the zip file itself.

<comment><USER14> They're MIT, will be adding the license in a bit

</comment></comment><comment><USER15> The website flags these as "vector" - they are gorgeous and I'm wondering if the actual SVG versions are available?

If you want one particular flag (instead of many for language purposes), I think these are very fine.

</comment><comment><USER16> No vector format? Don't get me wrong, these flags are appreciated, but to spend all that time making them in a bitmap format? Kinda seems like a bit of a waste, since flags seem PERFECT for vector format.

<comment><AUTHOR> If you want vector flags use wikiepedias SVG flags. These are made to be pixel perfect at different sizes, something that wouldn't work if we just batched them all from vectors.

<http://commons.wikimedia.org/wiki/Sovereign-state_flags>

</comment></comment><comment><USER17> Wow, awesome. I'll definitely be using this. In fact this is so awesome I actually gave my real email address.

<comment><USER18> You didn't have to give an email address, btw. So no point in giving a fake one anyway. But I think someone willing to bypass "registration" would not impulsively submit a fake address, but rather would have read the small print.

</comment></comment><comment><USER19> Thanks for the contribution. It would be great to have all flags, especially the small ones, in ONE file to avoid x requests on sites with many flags. Here is one idea: offer a service for people who need multiple country flags on their site to generate the one big flag picture set they need for their specific set of flags - one big country-selector that spits out a big flags.png after submit would be a great promo! Thanks!

<comment><AUTHOR> Thanks! We'll be adding it to github in the next few days with this feature :)

</comment></comment><comment><USER20> It would help tremendously if the files were named by, say, ISO 2-letter country codes (where it applies).

<comment><AUTHOR> There are two folders within the zip, one has them named in this way :)

<comment><USER20> Oh, right, thanks, that's exactly what I was thinking about :)

</comment></comment></comment><comment><USER21> What were the criteria for including some disputed states (South Ossetia, Somaliland) while excluding others (Transnistria, Azawad)?

<comment><AUTHOR> When we made them we used this > <http://commons.wikimedia.org/wiki/Sovereign- state_flags> and a bit of > [http://commons.wikimedia.org/wiki/Flags_of_unrecognized_stat...](http://commons.wikimedia.org/wiki/Flags_of_unrecognized_states)

<comment><USER22> Thanks for making these, but I wish you would have also acknowledged the sources in your LICENSE.txt.

As for the license itself -- even though I used to work on licensing and UI for Wikimedia Commons, I acknowledge this can be quite confusing, so I sympathize. I've rewritten this comment a couple of times already.

It's not clear to me if you can re-release everything under any single license. It's also unclear to me if you can assert copyright over the whole thing, as you must if you are going to use a CC license or the BSD-style license you used.

However, I would suggest that whatever you are doing, you should not arbitrarily reassign the work to a BSD license. They are not designed for graphics, since they require publication of the license wherever the graphic is used. Imagine if you wanted to use the icon on a postcard; according to the license you'd have to include the license text on the postcard. If you want these to be used widely Creative Commons Zero is much better... assuming you can assert copyright for the whole thing as a derivative work.

<http://creativecommons.org/publicdomain/zero/1.0/>

The really pedantically correct thing would be to list the licenses for each and every flag, but I acknowledge that would be no fun at all, and as far as I know Wikimedia Commons doesn't have tools to make that easy with large collections.

Sorry for the legalese - I think you did a great thing here, I'm just trying to help you share it with others.

<comment><USER21> I'm curious, how did wikipedia get copyright over the designs of national flags? What right to they have to attribution?

<comment><USER22> Wikipedia took over the world while nobody was noticing. Didn't you get the memo?

You are a bit confused here, but I don't blame you. Here is the legal situation as far as I understand it (IANAL, standard disclaimers apply).

The Wikimedia Foundation hosts content on its servers provided by the community. Usually, the individual contributors own the copyright to all the content. And when they submit content to a WMF site, like Wikipedia, they explicitly agree to license the work under terms such that others can use it. (I am ignoring the case of fair use for now).

Certain kinds of contributions, however, are not original to the contributor. This gets confusing because then you have to prove that it's okay to reuse.

Depictions of national flags are often ineligible for copyright, or are explicitly granted to the public domain, in their country of origin. However, "public domain" has no legal meaning internationally.

The CC0 license is really designed for creators who want to dedicate their work to be freely copied, like public domain, but want something that is legally meaningful.

But - there was a large collection of flags licensed CC0 which became the basis of the Wikimedia Commons collection. Other flags have specific justifications for why they are public domain, sometimes quoting laws from specific countries. This is the good thing about Wikimedia Commons, it doesn't force you into any straightjacket to explain how the license works. But that also means that everything's kind of a mess if you want to get a straight answer to a question like "under what license could I republish all the flags on Wikimedia Commons?"

And that's where it sits. If you squint, everything's not so bad. But maybe Wikimedia Commons should relicense _all_ the flags as ineligible for copyright -- it would make things a lot simpler.

Of course, because copyright is taking over the world, I would not be surprised if there are some nations that would insist they _do_ hold the copyright to their flags. For instance, the EC insists it holds the copyright to their flag and the Euro symbol. Maaaaadness.

[http://commons.wikimedia.org/wiki/File:Flag_of_Europe.svg#Li...](http://commons.wikimedia.org/wiki/File:Flag_of_Europe.svg#Licensing)

[http://ec.europa.eu/economy_finance/euro/cash/symbol/index_e...](http://ec.europa.eu/economy_finance/euro/cash/symbol/index_en.htm)

</comment></comment></comment></comment></comment><comment><USER23> I have heard about GoSquared, but have never tried it before. I just signed up and I'm truly amazed. The dashboard view is really useful feature. IMO this is as good as it gets for real-time website analytics. Awesome work guys!

</comment><comment><USER24> I think it would be awesome if all these flag icons are hosted on a CDN and we can all link to it.

<comment><USER25> That's a disturbing sense of entitlement. The creators spent 100+ hours on this work and you're asking them to cover the bandwidth costs of hosting it for you?

<comment><USER4> Eh, I don't think (s)he meant authors should do that. I suppose it's only an idea, shared here with hopes that maybe some HNer will pick it up.

<comment><USER25> Fair enough. I must just be grumpy this morning.

</comment></comment></comment></comment><comment><USER26> I find selecting country via flags of a global map to not only be alot quicker than a drop down list, but also more intuative. As somebody who lives in Britian/United Kingdom, then selecting via a flag or mini world map is much easier. Reason being from my point of view is often there is no UK/British option and your slotted in as American English in some forms of language selection. Now if the application ror website wish's to do that behind the scene then fine, but with lists you tend not to have that mapping and on flags or a global map your none the wiser. Also educational value and easier upon all cultures that way, some might prefer there drop down lists on the right, some on the left so this avoids that. All in all it offers more positives as apposed to negatives over dropdown lists for country/flag selection.

So the option to have icons you can freely use without accidently stepping upoon somebodies IP can only be a good thing and counter any arguments about flag copyrights and images. Amazing how even the simplest common items can be copyrighted - swiss clock being one even Apple slipped up upon. So some free ones are always good.

</comment><comment><USER27> How long did they take to make?

<comment><AUTHOR> The flags themselves, around 100hrs! We updated the styling and improvements this week which took a few more hours.

</comment></comment><comment><USER28> Is anyone else surprised that in the age of "retina" displays, these only go up to 64px?

<comment><USER29> One of the tags says "vector" so they may be able to produce higher resolution files. That said, I think the @2x should be in there if people want to use these for mobile.

<comment><USER6> They are @2x up until 32px.

</comment></comment></comment><comment><USER30> As someone that often designs things that are country / geographically specific this is a great collection. I also like it as an idea to drive traffic to your site. You're on my radar now and the other freebies look pretty slick too. Thanks! Definitely made the right impression.

</comment><comment><USER31> Here's another set that goes up to 128px: <http://icondrawer.com/flag- icons.php>

They're free, but require attribution unless you buy a 'royalty-free license.'

</comment><comment><USER6> Wow, they're beautiful!

</comment><comment><USER32> Had to look up this one when I saw it was included: <http://en.wikipedia.org/wiki/Flag_of_Mars>

</comment><comment><USER33> I have been looking for high quality flag icons like these; I would be definitely using them in the future. Thanks!

</comment><comment><USER34> Thanks!

Can't find any informations regarding a license (usage) ?!

<comment><USER35> Don't know if you saw above but they are MIT license and they are going to update the DL files later today.

<comment><AUTHOR> Yep, sorry it was missing from the start. Should be in the .zip now!

</comment></comment></comment><comment><AUTHOR> Change log + details added as a .txt in the .zip

<comment><USER36> Just to let you know that the current .zip doesn't include the change log, just the license. (Caching issue at gosquared?)

</comment></comment><comment><USER37> These guys have bluntly copied woopra.com

<comment><USER6> You're right. It was a Friday evening, we got our blunts out, played some Afroman, and said "hey, we're going to stop doing exactly what we've been doing since 2006 and we're going to bluntly copied woopra.com". It's a shame we had to be exposed like this.</comment></comment>


Ask HN: Favorite recurring billing payment gateway? - <AUTHOR>

A while back there was a thread of
https://news.ycombinator.com/item?id=4975790
And I was wondering in the past four months, has anyone had any good experiences with any other recurring payment gateway which won't cost an arm and a leg?
I'm looking at paypal pro with enhanced recurring billing for $20 because it is the cheapest at the moment, but open to other ideas. <comment><USER2> You might check out SaaSy.com. It's the all-in-one option for recurring global transactions which enables developers to avoid having to develop subscription management or e-commerce functionality separately.

</comment><comment><USER3> I've had great support from the team at <http://www.chargebee.com> (Hooked into pin.net.au) for handling my recurring payments for my SaaS

<comment><AUTHOR> Did you consider braintree or spreedly at all?</comment></comment>


Some fights vanish in plain sight - <AUTHOR> http://sn-web01.sciencenews.org/view/generic/id/331339/title/Some_fights_vanish_in_plain_sight__

<comment><AUTHOR> This research is fascinating on several levels. As a some time bicycle rider I keep hoping for a way to insure I don't 'vanish' from the sight of distracted drivers.</comment>


How many words do you know? - <AUTHOR> http://www.facebook.com/appcenter/365003353588219

<comment><USER2> Not too impressive. Tried to play and got "405 - HTTP verb used to access this page is not allowed."

<comment><AUTHOR> hi jejones3141, I sincerely regret the inconvenience. That i think is the case when you try to use it over https. You can also access it here <http://appsaber.com/fastword/>

<comment><USER2> Much obliged.

</comment></comment></comment><comment><USER3> Did you build this Akhil?

<comment><AUTHOR> Hi Nedwin, Yes actually. It had been quite some time since i created any FB app and since the api changes frequently i wanted to re acclimatize myself. And i find building something to be a better approach to learning.</comment></comment>


Ask HN: What are the landmark papers in AI and ML? - <AUTHOR> Hi everyone,
I was wondering what you consider to be landmark papers in the history of Artificial Intelligence and Machine Learning. Some obvious examples are:
Pearson's PCA: https://zenodo.org/record/1430636#.XXaGseNKj-g
Rosenblatts's Perceptron: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.335.3398&rep=rep1&type=pdf
Nilson's A*: https://ieeexplore.ieee.org/document/4082128
LeCun's theory of backprop: http://yann.lecun.com/exdb/publis/pdf/lecun-88.pdf
Vapeniks SVMs: http://image.diku.dk/imagecanon/material/cortes_vapnik95.pdf
Schmidhubers LSTM: https://www.bioinf.jku.at/publications/older/2604.pdf
etc... But this is a huge field and I'm sure there are many more that merit inclusion. No one person is aware of all of them so I'm hoping the HN hive mind can help find the hidden gems that many of us are missing.
Thanks! <comment><USER2> Alexnet VGG Resnet Inception BatchNorm Attention is all you need Wavenet

</comment><comment><USER3> Not necessarily "AI" but if Pearson and SVMs make the list, these two seem to fit as well:

Rob Tibshirani - Regression Shrinkage and Selection via the Lasso

Leo Breiman - Random Forests

<comment><AUTHOR> These fit neatly in the ML side of thing :)</comment></comment>


Simple wave-optical superpositions as prime number sieves (2019) - <AUTHOR> https://arxiv.org/abs/1812.04203 <comment><USER2> Low tech approach: Lehmer's bicycle chain sieve:

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

</comment><comment><USER3> I am reminded of two curious statements which are not normally linked:

(0) There could be a Siegel zero [0], like an "indentation" in the Riemann zeta function. The prime numbers need to all collaborate to "shift" the zeta function a little in order to "buckle" the zeta function at the Siegel zero, so there's only really enough room in the primes to accomodate one Siegel zero at most.

(1) Ultrafinitism [1] comes in many flavors, including a flavor where there is a single largest prime number [2]. In this ultrafinite physical world, the largest prime determines how large any object can be before folding back in on itself. Since this would be a true statement about natural numbers, it would also be a sort of conspiracy amongst the primes, with only one instance.

Situations like this article remind me of both simultaneously: If there's any sort of conspiracy amongst the primes to forge a Siegel zero, it would have to be the _same_ conspiracy which produces an ultrafinite prime candidate; the primes don't have bandwidth for two conspiracies.

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

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

[2] [https://sites.math.rutgers.edu/~zeilberg/mamarim/mamarimPDF/...](https://sites.math.rutgers.edu/~zeilberg/mamarim/mamarimPDF/real.pdf)

<comment><USER4> > In this ultrafinite physical world, the largest prime determines how large > any object can be before folding back in on itself.

This is why I don't like ultrafinitism: It insists on mixing levels, like an Escher print.

The world of pure mathematics _isn 't_ the physical world, for all the same reasons Santa Claus isn't real, and trying to bind pure math to some (theoretical!) properties of the physical world is just as wrong-headed as insisting that nobody can ever make songs about Santa because we know nobody can deliver toys that quickly.

<comment><USER5> But it's still a useful exercise, because at the interface where math does seem to touch the real world, we can use it to make amazing predictions about the behavior of future events.

</comment></comment></comment><comment><USER6> I tried to understand this paper but failed miserably, can anyone ELI5 for me?

<comment><USER7> Seconding this. My very basic understanding was that you propagate a wave with a frequency of the first integer, then overlay another wave of the next, and so on. As you go up, eventually the primes appear as the only place where they interfere with each other completely so the wave is at 0.

<comment><USER8> This is describing the sieve of eratosthenes! Very cool.</comment></comment></comment>


Atomo, the programmer's programmable programming language - <AUTHOR> http://atomo-lang.org/ <comment><USER2> This looks really cool and reminds me a lot of Io. Speaking of Io, this make me curious about the performance of Atomo. Io while an amazing experiment in expressivity has terrible performance. Does Atomo similarly prioritize expressivity to the detriment of reasonable performance?

<comment><USER3> Right now, my priority with Atomo is consistency in the design and simplicity in the implementation. It's acting as an incubator for a ton of interesting language features at the moment (both for myself and for Slate), so I haven't made optimization a priority yet as major parts of it are constantly changing. For example, the version on Hackage has a traditional exception system, while the latest darcs changes have replaced that entirely with a condition/restart system written in Atomo.

I'd call it "fast enough," but it's no speed demon. It's pretty early on; I just started planning Atomo's design this June. There's almost certainly some low-hanging fruit when it comes to optimization, and it is something I've been keeping a close eye on for a while now. It's only been getting faster, and in my testing of GHC 7 I saw pretty substantial performance boosts for free. And that's the nice thing. It's built on a fantastic platform, which you can drop into very easily whenever you want with a nice DSL.

Glad you like it, though. I completely understand the caution when it comes to performance of such a high-level language.

<comment><USER2> Sounds reasonable. So is it possible to mix Haskell in with Atomo to get to the metal so speak? Do you have any examples of this?

<comment><USER3> Yes; all of Atomo's kernel is defined using this Haskell DSL. For example, here's Atomo's ports system: [http://darcsden.com/alex/atomo/browse/src/Atomo/Kernel/Ports...](http://darcsden.com/alex/atomo/browse/src/Atomo/Kernel/Ports.hs)

I've also written a few wrappers for Haskell libraries over at <http://darcsden.com/alex> \- see http, json, and command.

Basically, you define your methods in Haskell, and call them from Atomo; these methods can be defined as an expression (=:::), a value (=::), or some arbitrary VM action to be executed to yield a value (=:). (Admittedly those operators have gotten a bit silly.)

The definitions use QuasiQuotes for the method pattern, and can use them for expressions as well, though that's not encouraged (operator precedence and macros make it a tricky thing to do at compile time). They look a bit noisy - [$p|x foo: y|] but that'll be fixed come GHC 7, where that pesky $ is removed.

</comment></comment></comment></comment><comment><USER4> Looks cool, but what are the use cases for Atomo? Would be nice if there was a section "Why Atomo", on the website.

More specifically, what prompted the creation of Atomo? Is it only for fun/personal research? Is it a school project? Is there a business problem that Atomo is solving?

(I'm just curious, this is not a "do we need another programing language?" criticism. I always wanted to write my own programming language for fun :)

</comment><comment><USER5> Here's what I needed to do to install and run Atomo under (latest) Ubuntu:

      $ sudo apt-get install haskell-platform libghc6-terminfo-dev
      $ cabal update
      $ cabal install atomo
      $ ~/.cabal/bin/atomo
      > 1 + 1
      2

<comment><USER3> Hackage has been down all day; I've uploaded a new version (0.2.1) just now which has the new condition/restart system, new REPL, and other goodies. Should be just a "cabal update; cabal install atomo" away! :)

</comment></comment><comment><USER6> Many bits of Atomo are written in Atomo, including Eco (the package manager), the REPL, and so on...

<http://darcsden.com/alex/atomo/browse/prelude/>

<comment><USER7> Are there any languages out there that are, or virtually are, written entirely in themselves?

<comment><USER6> I was interested in Atomo-in-Atomo, because I'm working on CoffeeScript, a language that is written in itself:

[http://jashkenas.github.com/coffee- script/documentation/docs...](http://jashkenas.github.com/coffee- script/documentation/docs/grammar.html)

<comment><USER8> Come on! by now everybody knows what you're working on! ;-)

</comment></comment></comment></comment><comment><USER9>
      0 fib = 1
      1 fib = 1
      (n: Integer) fib :=
        (n - 2) fib + (n - 1) fib

Reading the first line as "For zero, 'fib' is 1" is surprisingly intuitive. Not sure if this translates to something like

      x = Object clone

though. Maybe some conventions shouldn't be touched?

<comment><AUTHOR> <http://en.wikipedia.org/wiki/Pattern_matching>

<comment><USER9> Sure, but I'm surprised by the "reversed" notation. Wouldn't it be

      fib 0 = 1

in Haskell? I just felt that this order works well for pattern matching functions, but not as well in other contexts. No CS background here, by the way; maybe I'm just missing your point.

<comment><USER3> Both of those uses of = above are actually pretty consistent, given how Atomo's scoping and dispatch system works.

When you said "for 0, fib is 1," you could just as easily say "for the current scope object, x is Object clone." This is exactly how it works. Method dispatch is 100% pattern-matching, and Atomo's scopes are 100% message dispatch, combined with delegation.

When you say "0 fib = 1", the method is inserted on Integer. When you send a message to an Integer, you're sending (pseudocode) `Single "fib" (Integer 0)`. The methods on Integer pattern-match on that, in this case with `PSingle "fib" (PMatch (Integer 0))`. If that pattern fails, it moves on to "1 fib = ...", and finally to the least-precise "(n: Integer) fib := ...".

Not sure if that answers your question, but I thought I'd expand on it a bit.

</comment></comment></comment></comment><comment><USER10> Like others have already mentioned it does (at first glance) seem have a passing resemblance to Io (<http://iolanguage.com>).

Here is the _Greeter_ example in Io:

        Greeter := Object clone

        Greeter new := method (n,
            Greeter clone do (name ::= nil) setName(n)
        )

        Greeter sayHi := method (
            (name .. ": Hi!") println
        )

        Greeter new("Alex") sayHi

Very close. However even though I've tried to make it look _identical_ you can see the differences poking through. And reading through the Atomo docs there are (naturally) other divergences.

I would say that Atomo is probably more closer to Ioke (<http://Ioke.org>) than Io. The philosophy behind Io is to keep it small & simple. Whereas Ioke is Io + extra syntax, literals, etc baked in.

Worth keeping an eye on Atomo... as is Io & Ioke. For reference here are the other examples in Io:

        File with("out-file") open do (
            write("hello, world!\n")
        )

        fib := method (n,
            if (n == 0, return 1)
            if (n == 1, return 1)
            fib(n - 2) + fib(n - 1)
        )

        list(1, 2, 3) sum
        Range 0 to(5) map(* 2)

</comment><comment><USER8> I love the "Particule" concept, a nice extension of atoms (and a much nicer name than "tuple"). Where is it coming from?

Without going into Prolog, now that you have some pattern matching, maybe you could have some notion of success/failure, like in Icon, this is very expressive. <http://en.wikipedia.org/wiki/Icon_(programming_language)>

</comment><comment><USER11> Just when I thought I wouldn't be surprised by a new language anytime soon.

Getting the source right now to see what's inside.

</comment><comment><USER12> Very cool - you mention Slate, are you in contact with Brian Rice? Because if not you should be.

<comment><USER3> Yep! He's in #atomo, and I'm in #slate; there's a ton of back-and-forth.</comment></comment>


The Facebook Method of Dealing with Complexity - <AUTHOR> http://ubiquity.acm.org/blog/the-facebook-method-of-dealing-with-complexity/ <comment><USER2> > A complex system that works is invariably found to have evolved from a > simple system that worked. A complex system designed from scratch never > works and cannot be patched up to make it work. You have to start over, > beginning with a working simple system. - John Gall

Mr Gall wrote a book about complex systems and how they fail back in the 70's and most of it (from what I recall it's been a while since I read it) applies as much now as it did then, it's a very good read.

<comment><USER3> Thanks for the book recommendation. Just had a Google and it looks great! Added to Amazon wish list

<comment><USER2> You are Welcome, It's genuinely excellent, be warned though once you've read it you'll see what it discusses _everywhere_.

For large organisations it's a bit like getting a look at Oz behind the curtain :)

<comment><USER4> Amazon has three books listed about systems by John Gall that look very similar, is there a specific one that you're talking about? or would recommend to start with?

[http://www.amazon.com/s/ref=nb_sb_noss?url=search- alias%3Dap...](http://www.amazon.com/s/ref=nb_sb_noss?url=search- alias%3Daps&field-keywords="General+systemantics")

<comment><USER5> "Systemantics" is the original classic. "Systems Bible" is the same book, foolishly renamed, but otherwise great. That's the edition to start with.

</comment></comment></comment></comment></comment><comment><USER6> > ... decades of dealing with the public and the public servants have led to > an accumulation of rules, regulations, practices and traditions clinging to > everything like barnacles to a medieval man o' war.

I strongly feel that "garbage collection" is grossly neglected in almost every organization and is part of the reason firms slow down as they grow older.

The article mentioned simplification of the Norwegian tax code. Are there governments with garbage collection and simplification of laws built into the legislative process?

<comment><USER7> In Texas, all state agencies other than those listed in the state constitution will be automatically abolished at some future date unless the legislature extends their mandate.

Prior to each agency's expiration, the Sunset Commission reviews their purpose and effectiveness and then makes a recommendation to the legislature to abolish the organization, continue with modifications, merge the agency under review with another or let it expire.

Agencies subject to sunset review: [https://www.sunset.texas.gov/reviews-and- reports/agencies](https://www.sunset.texas.gov/reviews-and-reports/agencies)

Since the commission was created ~40 years ago, they've abolished 79 state agencies.

</comment></comment><comment><USER8> I admit that after finishing CS course at the university I had the same mindset regarding software engineering: understand the context, capture requirements (as much of them), and stick to it while developing subsequent parts of the system. In many occasions this is a trap: many details are just secondary, and would have probably never been articulated by the customer. Some of them seem to be important but then they are not. Sometimes some important problems appear somewhere around the end of the development, but we already have spent a lot of time working on some secondary issues.

Dealing with complexity by reducing or ommiting some problems are vital also for small and medium projects. This encouranges rapid creation of some working prototype and the overall process tends to shift towards more iterative development.

</comment><comment><USER9> I was hoping for an article about code complexity, but this was good too.

This is one of the ideas behind building a Minimum Viable Product, and think it's a big strength that startups have. The product _doesn 't_ do everything. People will adapt to the product, and start using it in new and unexpected ways. And it's a lot cheaper and easier to build.

I'm curious if there are examples of large companies successfully simplifying existing products. How many features could gmail take away before they alienate too many of their users? Quickbooks, Microsoft office (the ribbon?), or any of the Adobe products?

<comment><USER10> I think Apple is the poster child for a big company doing this. They've been stripping away features on their hardware for decades. Now they sell a computer that is literally just a screen with one button and a switch or two. They also sell a single port laptop. Everyone screams bloody murder when they remove hardware features, but then people adjust and the industry follows.

</comment></comment><comment><USER11> I usually try to tell my boss that there are 3-people shop solutions and 20-people shop solutions, and he's proposing a 20-people shop solution to a 3-person shop.

</comment><comment> github-cat I totally agree with this. Some people may say we need to cover every possible situation in a system, but this is true in theory, but practically we need some trade offs when designing a system. We have to calculate the gains and costs while considering fixing the complexities.

<comment><USER12> The catch tends to be if you're able to detect when you're in a more complicated situation and bail out accordingly. One very useful thing is auto- labeling, which turns out, getting it wrong is more problematic than one would expect.

Take for example the 'Gorilla' issue that Google encountered.

[http://nyti.ms/1JlTBab](http://nyti.ms/1JlTBab) [www.nytimes.com]

Then there was the issue with the bookmarks and suicide categories

[http://bit.ly/1JFkmCr](http://bit.ly/1JFkmCr) [productforums.google.com]

(This one isn't as big of a problem, as the frustration was probably more due to the compulsory usage of the new bookmarks, but it still shows some hazards of auto-categorization).

With social things, it can sometimes be very hard to solve a problem that works for 95% of the population, but doesn't piss off the remaining 5% (often with good justification). Unfortunately, detecting when you're in that situation in the first place is sometimes equivalent to the problem you're trying to solve.

<comment> github-cat I don't understand why a big company like Google can put some feature online if it's not thoroughly tested or thought. It is because it is a web product and it wants the users to be the testers?

<comment><USER12> What would the testing plan look like?

<comment><USER13> Simple procedure: take a large sample (1M pictures or so), tag them with the system and then show each picture with the label to a person (using Mechanical Turk or similar) and ask "is this label offensive?"

Use simple statistics to identify trouble spots.

</comment></comment></comment></comment></comment><comment><USER14> A related question - how you design a database for something as complex as a tax system? Given that tax laws can (and will change), that changing legislation often adds possible combinations to any field, and that there is surely a every "long tail" of unusual circumstances/combinations.

Is this a good use case for a document store, NoSQL database?

<comment><USER2> The largest issue isn't actually storing the data (though that is a big issue) the biggest problem (from a system point of view) is the 'business' logic.

I've worked on some large very heavy business logic heavy systems and often what you find is that the database ends up a dumb store and the logic is entirely handled on the application side, this is fine when the original system only spoke to the one application but becomes a massive problem once you want to allow other applications to access that data store, from experience this is one of the reasons why large enterprise re-writes often fail, the specification on paper vs the massive complexity of edge cases in the application code, years sometimes decades of if/else statements.

Of course the inverse is when the database _does_ have all the business logic and the client is dumb while better that does often mean that you can't get the business logic out easily if the database has become obsolete (some of these systems aren't even SQL based or a dialect of SQL that barely looks like SQL, when you have stuff that was written in the 70's all bets are off).

It's things like this why IBM still sells zSeries with COBOL support for code that was written 30-40 years ago.

Not really sure what the solution is, I'd say some kind of business specific almost domain language that goes beyond SQL or Java (but we tried that, it _was_ COBOL ;) )

As for your suggestion about NoSQL there is merit in that but if you go that route you have all the complexity of the business logic in your application as well as much of the complexity that would have been handled for you in the database via SQL (government systems are mostly amenable to normalisation).

Possibly some kind of SQL/Document hybrid (something like Postgres with JSONB) with a business logic layer over the top might work but I've no idea what that would look like (possibly something like SAP's ABAP which I haven't used but people I know who have don't like it very much), most of our current languages care more about pointers, bytes and function than they do about the actual modelling of the system they represent.

<comment><USER15> > Of course the inverse is when the database does have all the business logic > and the client is dumb while better that does often mean that you can't get > the business logic out easily if the database has become obsolete (some of > these systems aren't even SQL based or a dialect of SQL that barely looks > like SQL, when you have stuff that was written in the 70's all bets are > off).

You have the same problem if the application implementation language becomes obsolete even if the logic is not in the database. Which your COBOL example illustrates.

That has nothing to do with where you put your business logic, it has to do with (on of the _many_ reasons) why you need to have, and maintain, technology-neutral specifications documentation.

<comment><USER2> > why you need to have, and maintain, technology-neutral specifications > documentation.

In theory that is absolutely correct, with an unambiguous and current spec you can re-implement the software in something else without the original system the problem there (other than trying to get programmers to keep the documentation in sync with the system...) is that a specifications document written in English (or any natural language) is way too ambiguous to get away with that so then you decide to use a constrained version of English to write your spec and then someone says well why can't we get the machine to understand this and....COBOL again ;).

</comment></comment></comment></comment><comment><USER16> This is how you discriminate against the minority, quite literally.

<comment><USER17> Unfortunately, yes. It's a shame to see your comment currently at the bottom, since it's the point I wanted to make.

I think the example of the Norwegian tax system was a good one, because it demonstrates the article's point without any risk of discrimination. But the earlier example of Gender is a terrible one. Gender is more than just whether you have dangly bits hanging off your pelvis, it's also a very critical part of a person's core identity, and there are a lot of different variations. Lumping everything other than cis-gendered male/female into "its complicated" is a great way to make anyone who doesn't fit into the gender binary feel like they don't belong.

Perhaps a more compelling example would be race. I know there's a fairly standard set of racial categories used when asked to self-report race (e.g. in those optional questions you can fill out when doing various standardized tests), which are fairly broad, and I'm pretty sure the last one is "Other". But at least with race, nobody feels like their racial identity is not recognized as legitimate by a large percentage of the world population (which is a serious problem that non-cisgendered or non-gender-binary people have). But even here, imagine if the test just said "White, Black, or It's Complicated". It should be easy to imagine that a lot of people would be pretty outraged over that.

All that said, if you capture the main categories, and then have a free-form "Other" that people can fill in the details, that's similar in spirit to "It's Complicated" but a lot more palatable. Heck, depending on why you're asking the question, you might not even need to save the answer to Other (e.g. if you're only ever looking at data in aggregate, although even then you might want to pull out keywords from Other in order to report more groupings than the form offers), assuming the people filling in the form have no way of knowing whether you're keeping that data or not. So in the backend you might still have the equivalent of "It's Complicated". But how you present that to the user is important.

\---

Edited to add: Looking back at this, I realize that it looks like I'm just talking about whether the user feels fairly represented, which is related to but not the same thing as whether the form actually discriminates against minorities. So on that note, I just want to emphasize the importance of picking an appropriate set of main categories, even if you have an Other, such that very few people should ever resort to using the Other, and those that do should not end up getting unfair treatment as a result. For example, if policy is made based on the demographics of a particular set of people, that policy needs to account for anyone who doesn't fit into the standard groupings. If you just have e.g. "Male, Female, It's Complicated", policy is almost certainly going to be made based on the standard gender binary, without accounting for anyone who doesn't fit.

And on a related note to that, it's not even just the person filling out the form who might feel unfairly represented by a poor choice of categories. Anyone else who does fit into those categories is going to see the categories as a reinforcing of their worldview, i.e. anyone who sees "Male or Female" as a set of gender choices will just be reinforcing the incorrect idea that everyone fits into the gender binary, and this helps cause discrimination.

<comment><USER18> Sometimes, you just want to find out if someone is a girl or a guy.

Not every question needs to become a forum for minorities to express themselves. Not every worksheet or webform should worry about "reinforcing the incorrect idea that everyone fits into the gender binary."

Walking on eggshells...

<comment><USER17> This comment here is a perfect representation of the problem. Most people do fit into the worldview of "girl or guy". But plenty of people don't fit into the gender binary at all,, which means there's no way to find out if they're "a girl or a guy", because the answer is "neither". And there's plenty of people who do self-identify as one of those 2 genders, but it's a different gender than most of the world insists they should identify as (I'm talking about transgender people here, if that's not immediately obvious), and they may not necessarily be open about it yet, or open to everyone, and being forced to pick "guy or girl" may therefore be problematic because either they have to give an answer that they may not be comfortable with everyone knowing, or else they have to give an answer that doesn't match their personal identity (the ideal solution in this particular case is to allow them to give no answer).

> _Not every question needs to become a forum for minorities to express > themselves._

This is perhaps the most problematic part of your comment. If a question allows the majority to express themselves, but denies that same right to minorities, or in fact refuses to acknowledge that the minorities even exist, that's absolutely discrimination. And perhaps even worse, when you have questions like "what gender are you?" that are asked often and where most questioners only accept male / female, that reinforces the incorrect idea that gender is binary and that there are only 2 answers, and effectively tacitly condones other forms of discrimination centered around the same question of personal identity. Which comes right back to your question. The reason you think it's perfectly ok to say "Sometimes, you just want to find out if someone is a girl or a guy" is because you're part of a culture in which the majority of people either refuse to acknowledge that there are more possible answers to that question or think it's perfectly acceptable to pretend that the minorities don't even exist.

<comment><USER18> And the fact that a M/F radio button is being called discrimination shows just how far we've come since the days of firehoses, police dogs, and internment camps.

<comment><USER17> It sounds like you're being dismissive, like you're saying discrimination is only discrimination if someone is suffering bodily harm or being deprived of their constitutionally-granted rights. I hope that's not how you meant it.

</comment></comment></comment></comment></comment></comment><comment><USER19> Truth systems: yes. no. it's complicated.</comment>


Google Analytics Premium - <AUTHOR> http://www.google.com/analytics/premium/ <comment><USER2> Looks like Google is trying to monetize it a bit and compete against Adobe Omniture. Well played...

</comment><comment><USER3> Not a lot of details and 150K price tag.</comment>


Ask HN: Why there is no Codecademy for ML or AI? - <AUTHOR> <comment><USER2> Codecademy's model tends to be very poor for topics that are sufficienty theoretically complex, as the turnaround time between exercise beginning and conclusion appears to be about 5 minutes for non-project work.

Repetition/drilling for understanding and examination of knowledge by self- testing are wholly absent.

Projects like "free code camp" can dodge this problem because the staff is working for free as an open source project, but it would take a lot more 5 minute segments to teach someone linear algebra, the theory behind any type of model, and the background information that is necessary to generate provably compelling insight than companies like Codeacademy seem interested in tackling.

</comment><comment><USER3> 0\. Doing ML requires an understanding of math. One gets less mileage from making magic incantations w/o understanding underlying implementation, compared with the mileage for front-end dev, as an example.

1\. Any non-trivial ML will require significant amount of computational power (RAM/CPU/GPU). Who will subsidize that for participants? It's not sufficient to have a laptop that can run a browser.

2\. Notice the proliferation of data science bootcamps. Once the syllabus/infrastructure becomes streamlined (and cheap), I would expect there to be more online offerings.

That said, there might currently be a market need for a syllabus based on Kaggle or other freely available data sets, and free compute resources provided on cloud platforms.

</comment><comment><USER4> There is tons of online tutorials for these things. Kaggle has good tutorials with the test datasets

<comment><AUTHOR> Yes, I did my research but there is no such interactive tutorial online like Treehouse or Codecademy. There are so many tutorials but none of it tells you the whole path.

Here are the resources I found useful:

</comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment> Advices from Open AI, Facebook AI leaders

Courses You MUST Take: Machine Learning by Andrew Ng ([https://www.coursera.org/learn/machine- learning](https://www.coursera.org/learn/machine-learning)) /// Class notes: ([http://holehouse.org/mlclass/index.html](http://holehouse.org/mlclass/index.html))

Yaser Abu-Mostafa's Machine Learning course which focuses much more on theory than the Coursera class but it is still relevant for beginners.([https://work.caltech.edu/telecourse.html](https://work.caltech.edu/telecourse.html))

Neural Networks and Deep Learning (Recommended by Google Brain Team) ([http://neuralnetworksanddeeplearning.com/](http://neuralnetworksanddeeplearning.com/))

Probabilistic Graphical Models ([https://www.coursera.org/learn/probabilistic- graphical-model...](https://www.coursera.org/learn/probabilistic-graphical- models))

Computational Neuroscience ([https://www.coursera.org/learn/computational- neuroscience](https://www.coursera.org/learn/computational-neuroscience))

Statistical Machine Learning ([http://www.stat.cmu.edu/~larry/=sml/](http://www.stat.cmu.edu/~larry/=sml/))

From Open AI CEO Greg Brockman on Quora

Deep Learning Book ([http://www.deeplearningbook.org/](http://www.deeplearningbook.org/)) ( Also Recommended by Google Brain Team )

It contains essentially all the concepts and intuition needed for deep learning engineering (except reinforcement learning). by Greg

2\. If you'd like to take courses: Linear Algebra — Stephen Boyd's EE263 (Stanford) ([http://ee263.stanford.edu/](http://ee263.stanford.edu/)) or Linear Algebra (MIT)([http://ocw.mit.edu/courses/mathematics/18-06sc-linear- algebr...](http://ocw.mit.edu/courses/mathematics/18-06sc-linear-algebra- fall-2011/index.htm))

Neural Networks for Machine Learning — Geoff Hinton (Coursera) [https://www.coursera.org/learn/neural- networks](https://www.coursera.org/learn/neural-networks)

Neural Nets — Andrej Karpathy's CS231N (Stanford) [http://cs231n.stanford.edu/](http://cs231n.stanford.edu/)

Advanced Robotics (the MDP / optimal control lectures) — Pieter Abbeel's CS287 (Berkeley) [https://people.eecs.berkeley.edu/~pabbeel/cs287-fa11/](https://people.eecs.berkeley.edu/~pabbeel/cs287-fa11/)

Deep RL — John Schulman's CS294–112 (Berkeley) [http://rll.berkeley.edu/deeprlcourse/](http://rll.berkeley.edu/deeprlcourse/)

From Director of AI Research at Facebook and Professor at NYU Yann LeCun on Quora

In any case, take Calc I, Calc II, Calc III, Linear Algebra, Probability and Statistics, and as many physics courses as you can. But make sure you learn to program.

<comment><USER5> What does physics have to do with ML/AI?

<comment><USER6> "The Extraordinary Link Between Deep Neural Networks and the Nature of the Universe" [https://www.technologyreview.com/s/602344/the- extraordinary-...](https://www.technologyreview.com/s/602344/the- extraordinary-link-between-deep-neural-networks-and-the-nature-of-the- universe/)

</comment></comment></comment><comment><USER7> Udacity has a program for AI, self driving car engineering, as well as a foundations program on deep learning .

</comment><comment><USER8> well dataquest.io is for data science but they seem to be going down that track.

</comment><comment><USER9> It's called an M.Sc.

</comment><comment><USER10> Insight datascience</comment>


AVX2 optimizations in x264 followup: overall results - <AUTHOR> http://mailman.videolan.org/pipermail/x264-devel/2013-May/010049.html

<comment><AUTHOR> Original thread: <https://news.ycombinator.com/item?id=5598010>

Relatedly, it'd be cool if one of the AMD people involved in the OpenCL work (which was committed at the same time) could do a writeup of those optimizations.</comment>


Ask HN: What can i buy for 50$(44€) - <AUTHOR> Hi!
I need your help/ideas for the following:
What can i buy for 50$(44€)?
Rules are simple:
If product is physical:
  It should be same day delivery for Europe.
  I like gadgets that last for a long time and keeps you interested over time.
  I don't like clothes or shoes.
  I really like things that make me more productive
  I like paintings
  I like books that tell true stories and can teach you something
If digital then:
  If it's a game, should be downloadable for Windows(laptop with I3) or Mac OS(Mid 2008) or iOS 9(iphone 4s).
    >If it's a game for Mac OS then i like RPG or even better MMORPG.

  If it's a service, then it should be something appropriate for me(developer) like editor(Bootstrap studio) or library(Gamemaker) or service(twilo,aws)

  If it's music, should be electronic.

  If it's book, i like biographies.
 If charity:
  The org should state where my money are going(with tracking and maybe proof)
  I prefer charities for refugees or medical doctors
Other info: Could be early access to products or AMA sessions.
The item should cost closely to 50$(+- 5$) and must be paid once and last at least for a year(if applicable), not subscriptions(per month).
Any ideas? ;) <comment><USER2> Starcraft 2. (Legacy of the Void, the newest expansion.)</comment>


How to become creative – the short honest truth - <AUTHOR> http://www.scottberkun.com/blog/2012/how-to-become-creative-the-short-honest-truth/ <comment><USER2> So simple. Inspired me to start using less time reading articles and more time building my new open source project.</comment>


A Little Operating System - <AUTHOR> https://levelup.gitconnected.com/a-little-operating-system-90c52cf9f628 <comment><USER2> We changed the url from [https://link.medium.com/aOgR3q7TU6](https://link.medium.com/aOgR3q7TU6), which points to this. (Link shorteners are banned on HN.)</comment>


Nvidia GEFORCE RTX 20 SERIES - <AUTHOR> https://www.nvidia.com/en-us/geforce/20-series/?nvid=nv-int-gcxxpn-56595 <comment><USER2> This is barely even a release announcement, it's literally just the product page. It doesn't explain any about what is new here.

<comment><USER3> We moved the comments moved to [https://news.ycombinator.com/item?id=17802237](https://news.ycombinator.com/item?id=17802237), which has a bit more background.

<comment><USER2> Thanks Dang!</comment></comment></comment>


10 Fatal Mistakes That Killed Our Time Tracking Implementation - <AUTHOR> http://www.timecamp.com/blog/index.php/2014/05/10-fatal-mistakes-killed-time-tracking-implementation/

<comment><USER2> Perhaps I'm missing something but this post doesn't seem to answer any of the questions it poses. As such it feels like blog spam.

I'm pretty dubious of the value of superfluous time tracking (in certain industries and situations it is obviously a requirement but outside of that it can be both wasteful and can undermine autonomy). I was expecting this might address this with some insight in the real values of detailed time tracking.

Am I missing something here? You outline 10 problems with not one single detail about the solutions? What exactly is the point of that?

<comment><USER3> This is our second post in a series of posts. We want to share those lessons in further posts, because we feel that for this moment we don't have enough learned to write about this.

</comment></comment><comment><USER4> I worked in a desktop support environment where we "charged" for our onsite time and then were forced to track all the rest of our time at work too. I use quote marks around charged because it was all internal dollars with in the larger organization.

After about 3 months of it all the staff basically revolted and demanded that the requirement of entering everything into the tracking system be halted. All the analysis had shown was that we were all spending nearly 1/4 of our day tracking what we were doing in the other 3/4's of the day.

<comment><USER3> Interesting case study. I think we will write in couple of months how it ended in TimeCamp. Did you have clear goal and saw how this statistics was used and if it was usefull?

</comment></comment><comment><USER5> As someone who built a time tracking application once (for desktop), Tracking time is a tricky line to walk. If you force employees to do it, they will resent you for it, and unless they see a clear value they will just invent numbers anyway.

Unless you are pitching to someone obsessed with tracking their own metrics, or someone who is billable and has trouble keeping track of what to charge clients, you will probably hit a wall.

</comment><comment><USER6> Pressing spacebar or pagedown causes text that I might not have read yet to be hidden behind the header. Please, if you use static headers, adjust the scrollbar accordingly so that one page equals one page of visible content.

<comment><USER3> Thanks, it motivated us to make the layout simpler.</comment></comment>


Building C Programs - <AUTHOR> http://seenaburns.com/building-c-programs/ <comment><USER2> This is the first question I ask on an interview (for a C position). People who know this stuff can walk me through it in a few minutes, and then I can focus on actual problems. Fresh college grads usually struggle a bit with the preprocessor and the linker, but the good candidates can usually figure it out with hints in 10-15 minutes.

I find this works better than a fizzbuzz test; there is always a follow-up question that involves reading/modifying some code, but those who struggle with the first question always perform poorly on the second as well.

The OP does a good job of explaining the basics. I'm saving this link to send to the candidates that do poorly on the questions.</comment>


Android phone repair sucks – here's why - <AUTHOR> https://www.youtube.com/watch?v=zIa54q4h9jI <comment><USER2> heres why i disagree

hardware fragmentation isnt something new, its been around since gadgets have, in fact things are much better than they were as at least we have some standardisation now if only a little. The situation is no different than for repairing most any gadget out there, in many cases easier as phones and tablets are often more common than other consumer electrical items like cameras or portable stereos.

secondly while parts for apple devices may seem abundant fakes are incredibly rife, unless you are extremely careful you will likely be getting non genuine parts unless youre buying stuff thats been stripped from a working device. Then theres the fingerprint reader issue, which is pretty much non replaceable on modern models.

all in all android device repair is little different from just about any other portable device in my opinion, glued components and proprietary connections are still everywhere in all our gadgets and as has been the case for a long time. often the best source of parts is finding another faulty device that has the part you need, or finding one on ebay that has been stripped from a dead device.

a recent example from my own experience but in a completely different field. im a big coffee lover and recently on ebay i spotted an untested commercial coffee machine for very little money. knowing nothing at all about coffee machine repair i put in a bid and got it.

it was an old machine from a small manufacturer, the manufacturers site didnt even list the model nor did they reply to emails and google/ebay searches turned up very little. however within 2 days i had managed to identify the problem, find that another manufacturer had used the same parts and source them from 3 different potential suppliers, within a week id learned not only how to strip and reassemble the whole thing and got it working but i also knew exactly where i could get any parts i could need even for such an obscure piece of equipment.

my point is fixing things is pretty much the same no matter what it is, you could level this same argument at most anything, car repair for example, sure cars all run on pretty much the same principle but they vary in a ton of ways, yet you dont hear mechanics moaning. i recently crashed my motorcycle but despite being a very popular make and model sourcing a replacement for the bent forks was very difficult, so at times finding parts for even the most popular things can be a challenge.

As a general rule most things arent really made to be repaired anymore, we live in a disposable world where generally something breaking means its upgrade time rather than calling out the repair man, when was the last time you called out a TV repair guy? sadly its a dying trade but i really dont think its that much different from anything other gadget or most anything really</comment>


Stockholm Startup Jobs June 2013 - <AUTHOR> http://www.swedishstartupspace.com/2013/06/03/stockholm-startup-jobs/

<comment><AUTHOR> Some awesome Swedish companies are currently looking for developers. The scene here in Stockholm especially is buzzing ([http://economist.com/blogs/schumpeter/2013/05/start-ups- swed...](http://economist.com/blogs/schumpeter/2013/05/start-ups-sweden)) so people should definitely get in contact if they're interested in a move to Swe!</comment>


Cigarette butts are polluting the ocean more than plastic straws - <AUTHOR> https://globalnews.ca/news/4418956/cigarette-butts-ocean-pollution-ban/ <comment><USER2> What's the difference between a cigarette butt and a plastic straw? The government makes no money off straws.

<comment><USER3> Same can be said of the drugs they campaign so hard against too. There's plenty of problems with stuff like ecstasy / meth and the like, and I'm sure they cause problems that affect non-users people indirectly, but cigarettes are insidious in that you're going to breath in that crap whether you like it or not as soon as you go anywhere where smoking is prevalent.

But I'm sure the money they getting over and under the table makes it all okay! /s

</comment></comment><comment><USER4> I've often wondered why society doesn't force cigarette manufacturers to make biodegradeable cigarette butts. I've never seen a smoker throw their butts anywhere but the ground.

<comment><USER5> > I've never seen a smoker throw their butts anywhere but the ground.

This is one of those areas where you get much better (far from perfect but better) results if you make the right thing to do the easy thing to do. It doesn't take much to make smokers happy, a large enough area for them, some cover and some ashtrays, do this and people will generally use ashtrays. These days so many places are rushing to vilify smokers and push them out on the street, when you're out in a side street getting your fix, maybe getting rained on or baking in the sun and don't have an ashtray or bin in sight then the ciggie butt is going on the ground.

It's like complaining about litter but not providing bins.

<comment><USER6> I have allergies and my nose runs a lot. Somehow I manage to not throw my tissues on the ground.

Is it so hard to carry an ash box with a cigarette box?</comment></comment></comment>


Show HN: OTP CheatSheet (Erlang) - <AUTHOR> https://github.com/Telichkin/otp_cheatsheet <comment><AUTHOR> I'm learning Erlang right now and find that every OTP behavior has main parts in its API: client, server, possible inputs and possible outputs. But a one- dimensional structure of standard documentation (from top to bottom) can't present all these parts in one place which leads to loss of a context and longer learn-curve. That's why I create this cheat sheet to present OTP behaviors in one place using opportunities of a two-dimensional structure.</comment>


Free Open Source UML Tools  - <AUTHOR> http://www.devcurry.com/2010/06/free-open-source-uml-tools.html

<comment><USER2> Does anyone here actually _like_ UML?

I often draw diagrams, but they never conform to any formal standard and are very much in the "UML as sketch" mode:

<http://martinfowler.com/bliki/UmlAsSketch.html>

<comment><USER3> It makes sense for larger organizations where you might not be able to interact with the person who drew the diagram. A formalized diagram is less ambiguous than a more informal one.

<comment><USER2> I actually didn't mean to imply that there aren't situations where something like UML can be useful e.g. documenting business processes.

However, my own view is that as you actually get closer to code the benefits of the "UML as blueprint" style of thinking become less obvious to the point where they actually can hinder a lot of projects (e.g. artificial distinctions where you get "architects" who only create UML and through it over a wall to "coders" who attempt to turn these designs into working systems).

<comment><USER3> That's not really a complaint against UML. I'd be equally (if not more) disturbed by an office where "architects" only create informal diagrams and throw them over a wall to "coders".

However, that doesn't mean that UML can't be beneficial when used properly. For instance, I could see using UML as a reference rather than a guide (especially if it's auto generated). I've worked with codebases that I wish had a "map" that I could look at to get acquainted with them.

</comment></comment></comment></comment><comment><USER4> UMLet is by far the most efficient diagramming software I've used. It's very flexible, I've never actually created UML diagrams with it.

</comment><comment><USER5> another forgotten application (my favourite - im not affiliated) <http://www.softwareideas.net/>

</comment><comment><USER6> And none of them are web based. They've also forgotten Dia.

<comment><USER7> They have mentioned Dia. It is after UMLGraph</comment></comment>


From Nand to Tetris: Building a Modern Computer from First Principles - <AUTHOR> https://www.nand2tetris.org/ <comment><USER2> I just completed part 1 building a computer from gates and writing an assembler and am in the middle of part 2 where you develop compilers and a stack based virtual machine.

For someone like me who did not study computer science but has been a self taught programmer in the Analytics spacefor over a decade, this has been a tremendously useful and accessible introduction to basic CS concepts and very eye opening in terms of what's actually happening under the hood. This course is highly recommended if you've not studied CS though be aware the second part of the course where you develop compilers is quite intense though being an online course, you can pick your pace.

I wonder if there are similar courses on CS algorithms for people who didn't study CS in college.

<comment> barry-cotter [https://www.edx.org/micromasters/ucsandiegox-algorithms- and-...](https://www.edx.org/micromasters/ucsandiegox-algorithms-and-data- structures)

Comprises the following courses

Algorithmic Design and Techniques Data Structures Fundamentals Graph Algorithms NP-Complete Problems String Processing and Pattern Matching Algorithms Dynamic Programming: Applications In Machine Learning and Genomics Graph Algorithms in Genome Sequencing Algorithms and Data Structures Capstone

<comment><USER3> Very little of which is communicated in any way to help someone learn how compilers work.

In the actual history of computing very few good compilers were ever written by algorithm and data structures professors; most were written by people who had a pragmatic drive to get something done. Theory is good but without practice it is little more than navel gazing. Theory and practice need each other.

The reason that nand2tetris works so well as a course is that it gives you a concrete example of how all these algorithms and data structures are combined in order to turn an abstract description (the source code) into a running program that also includes how that computing is achieved through compiler, assembler, linker, run time, operating system, isa, and finally in transistors.

The true issue it gets to is that most programmers have very little understanding of how computers _actually_ work, and when things break they just do high order _guessing_ to get things working again rather than truly understanding what went wrong.

<comment><USER4> As an EE undergrad, I had to design a TTL based processor, program the microcode, etc. I have no idea how a compiler works, or anything above assembly.

</comment></comment></comment></comment><comment><USER5> I made a small game inspired by the first lessons in the course: [http://nandgame.com/](http://nandgame.com/)

<comment><USER6> This is really awesome.. I too love the book Code by Petzold. I was wondering if I could help translate this into German? I have some work colleagues that could really benefit, but I think it would be easier if the explanatory text was German.

<comment><USER5> That would be really cool. I need to refactor a bit to allow different translations of the text, but I can get back to you when it is possible.

</comment></comment></comment><comment><USER7> I really cannot recommend this course enough, I find myself referring back to it in so many different fields (security, debugging, programming language design)

When I finished school, I was fairly knowledgeable about physics, including logic gates and electronics, and I was a fairly good programmer, but I had no idea how that virtual world arose from the physical.

When I type on a keyboard, what is _physically happening in the universe_?

This course helped me understand that question.

<comment><USER8> Well said, this pilgramage is definitely a worthwhile one.

</comment></comment><comment><USER9> Previous discussions:

[https://news.ycombinator.com/item?id=13209452](https://news.ycombinator.com/item?id=13209452)

[https://news.ycombinator.com/item?id=14526344](https://news.ycombinator.com/item?id=14526344)

</comment><comment><USER10> If you would like to start at a slightly lower level, Charles Petzold has written a great book on the subject:

[https://www.amazon.com/Code-Language-Computer-Hardware- Softw...](https://www.amazon.com/Code-Language-Computer-Hardware- Software/dp/0735611319)

<comment><USER11> _Using everyday objects and familiar language systems such as Braille and Morse code, author Charles Petzold weaves an illuminating narrative for anyone who's ever wondered about the secret inner life of computers and other smart machines.

... cleverly illustrated and eminently comprehensible story ... No matter what your level of technical savvy, CODE will charm you—and perhaps even awaken the technophile within._

 _Code_ doesn't sound "slightly lower level".

<comment><USER6> I think you and the GP are using "lower level" in different ways. GP means with a lower barrier to entry, you mean "closer to the electrons" if I understand both of you correctly.

</comment></comment></comment><comment><USER12> I wish that existed as a last year course in college. It has a lot of recap on the parts that creates a modern day computer and likely gives you understanding where imperative languages come from.

<comment><USER2> I believe several college CS courses globally use this in year 2 or year 3.

</comment></comment><comment><USER13> They mentioned at the end about actually implementing the CPU in hardware with an FPGA. Just curious if anyone has actually tried that?

<comment><USER14> A quick google search yielded this:

[http://excamera.com/sphinx/fpga-cpu.html](http://excamera.com/sphinx/fpga- cpu.html)

</comment></comment><comment><USER15> Once you've learned programming, this book is maybe the perfect survey course to understand systems. It gave me a framework for understanding all the layers from CPU to ReactJS that 4+ years of college never could so concisely

</comment><comment><USER16> The title of the course is misleading, as it suggests that NAND gates are the only required primitive, whereas the course later introduces DFF gates, without which you cannot escape the parallelism of chips.

<comment><USER3> And one thing that is said even less is why NAND? You can do it all with NOR gates as well if you want. The reason for NAND has to do with the switching speed, pMOS switches quicker in parallel (either transistor can get the current flowing) and nMOS switches quicker in series (either transistor can stop the current flowing); this is how a NAND gate is wired. NOR gates on the other hand have the worst of both.

The fact that nMOS switches off quicker is why the most common form of dynamic logic (as opposed to static logic) implements, in effect, the bottom half of the CMOS in nMOS and the upper half using a capacitor; which holds the charge and hence pull up for the length of the clock cycle (which is why dynamic logic CPUs can't be single stepped in hardware, the clock speed is too low to hold a charge).

<comment><USER17> During my intro to computer engineering course, lectures touched on why NAND gates, and the conclusion was that you can build anything you need in a basic computer using NAND gates. It boils down to expense. A BOM (bill of materials) with fewer line items tends to be cheaper.

This doesn't really hold in today's world of silicon prints, but at the start I think it was price that drove the decision.

<comment><USER3> Actually if you take an XOR gate with a naive translation into NAND gates you would use 20 transistors, but if you don't need a large fan out from the output you can actually do it with 6 transistors using a pass gate layout (which is neither NAND nor NOR). So typically you don't use NAND vs NOR because of transistor count.

<comment><USER17> Oh! Good to know. Thank you!

</comment></comment></comment></comment></comment><comment><USER18> The font on that site looks absolutely horrible on Windows 10+Chrome.</comment>