Current State of Python Packaging - <AUTHOR> https://stefanoborini.com/current-status-of-python-packaging/ <comment><USER2> I'm not sure what Poetry tries this to simplify on the development side... using venv and pip/requirements.txt is simple enough for me. And you don't even have to do it by hand, Pycharm will do it for you and activate the right venv in the shell tab. Distribution is something else, but I wouldn't expect users to type commands in a shell anyway, so there is only a need for one- click installers and/or self contained executables, where poetry does nothing it seems (Nuitka/PyInstaller and other solutions will help here).

<comment><AUTHOR> using venv and pip/requirements.txt is simple enough for me

Sure - it depends on what you're doing. Requirements.txt won't work if you're writing a library; you'll need to move (or duplicate) your dependencies into setup.py.

<comment><USER3> Yes, it's still very valid. It's simple. It's baked in.

However, the benefit of moving to setup.cfg (not setup.py anymore, which should be almost empty) is more than making a lib. It makes deployment easier, and dev as well. Hell, you can even pip install from git repo with it.

I made a summary of what to use for what, when and how in this comment: [https://news.ycombinator.com/item?id=20132303](https://news.ycombinator.com/item?id=20132303)

</comment></comment></comment><comment><USER4> I get mad at the Haskell tools I use every day, and then I remember that nobody else is really in better shape.

<comment><USER5> Rust's Cargo is incredibly well thought-out and will make you despise everything else.

<comment><USER6> From the little development I have done in Rust, I have to agree.

On the other hand, I've been working with react-Native and typescript recently, and it's a constant mess. Every invocation of yarn leaves at least a couple of warning messages about things that are out of my control. Installing packages is slow and at least every few days I have to wipe out node_modules and nuke any iOS build folders in order to get it working again. That said, RN is promising technology and hopefully my frustrations are due to more inexperience than the tools or language and ecosystem. I just wish all of the JavaScript stuff were faster. I'm on a gigabit connection and fast hardware but still it seems sometimes yarn has to download or unpack 6500 files or something

<comment><USER7> NPM claims to have taken the lead from Yarn in terms of install speed in the latest versions. Still, I prefer Yarn because NPM has such a history of suckage.

Meanwhile, the former CTO of NPM released a new (alpha) package management system last week at JSConfEU (the conference where NodeJS was first announced); see [https://github.com/entropic- dev/entropic/blob/master/docs/RE...](https://github.com/entropic- dev/entropic/blob/master/docs/README.md)

<comment><USER6> I saw those claims in the past few days and have tried both, for me yarn still seems faster although I didn't actually time them.

</comment></comment></comment></comment></comment><comment><USER8> I really hope poetry will win. It's just so good, easy to use and just works.

<comment><USER3> I like poetry but it comes with 2 problems:

\- it uses only pyproject.toml. Despite the current com on this format, it's not stable, it's an incomplete standard and it's not well supported by the ecosystem. Setup.cfg is a much better alternative in the mean time. In fact, just the auto include features make it better.

\- there is no nice way to install it. Pip install poetry is the usual one, and it got many gotchas for beginers, which are the ones that would benefit poetry the most.

<comment><USER9> The point about the beginners is solid, but consider the use case for Poetry: you need it if you want to package and publish a library, which is not an area I would associate with beginners.

<comment><USER3> To be less blunt, I made a better comment on how to package things in the modern python world:

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

No poetry necessary, but I point to when I use it anyway.

</comment></comment></comment></comment><comment><USER10> Thought I would mention pip-tools as an option to manage requirements.txt.

</comment><comment><USER11> I have a PHP Yii2 web project basically using composer (something like pip for Python) that the old project maintainer chose not to use a specific version for dependencies.

I am stunned when I do composer update, because it basically updates every dependencies.

When I asked one of the seniors, he said yea, I have to check every single part of the website and make sure it doesn't break.

I don't know anymore.

<comment><USER3> > When I asked one of the seniors, he said yea, I have to check every single > part of the website and make sure it doesn't break.

That's what unit/integration/e2e tests are for.

</comment></comment><comment><USER11> no mention of python venv, it's there since python v3.3

<comment><USER12> This is what I usually use since it's baked in.

</comment></comment><comment><USER13> The top question Python learners ask me is:

How do I package my Python program for small scale distribution to non- technical people?

The end target is usually Windows so I suggest PyInstaller but it doesn't feel exactly elegant although it is better than py2exe.

Maybe there is some alternative on the horizon?

<comment><USER14> If they can get away without packaging the interpreter, there is always an executable zip. There's a pretty handy tool for creating them:

[https://github.com/linkedin/shiv](https://github.com/linkedin/shiv)

</comment></comment><comment><USER3> Yet another state of python packaging that:

\- skip the explanation on the py command on windows, the version suffixes on unix, -m and why you need to install pip on linux but not on the other OSes.

\- doen't address the various sys path issues of pip and poetry. Because at some point you need to install peotry.

\- ignore the existence of the excellent and simple setup.cfg.

\- ignore the consequences of using poetry on IDE setup, tox or CI.

Python packaging is not hard anymore. But the information you get out there is incomplete and assume some kind of basic sysadmin experience.

<comment><USER15> > Python packaging is not hard anymore

Would you tell us which is "the right way to do it" nowadays? Possibly, in a maintainable, kind-of-officially supported way that doesn't change or disappear in a few months?

Please note: I use Python professionally since 2005, I've been involved a lot in Python packaging for production apps (including giving some talks on the bad state of Python packaging at Europython around 2010) and I had followed closely the then-failed distutils2 effort. And I still don't know what's the "right and easy way to do it".

<comment><USER3> Here we go :)

Packaging, the easy way

Because I'm not on a blog, I can't go too much into details, and I'm sorry about that. It would be better to take more time on each point, but use them as starting point. I'll assume you know what virtualenv and pip. If you don't, check a tutorial on them first, it's important.

But I'm going to go beyond packaging, because it will make your life much easier. If you want to skip context, just go to the short setup.cfg section.

1 - Calling Python

Lots of tutorials tell you to use the "python" command. But in reality, often several versions of Python are installed, or worst, the "python" command is not available.

WINDOWS:

If the python command is not available, uninstall Python, and install it back again (using the official installer), but this time making sure that the "Add Python to PATH" box is ticked. Or add the directory containing "python.exe", and its sibling "Scripts" directory to the OS system PATH manually (check a tutorial on that). Restart the console.

Also, unrelated, but use a better console. cmd.exe sucks. cmder ([https://cmder.net/](https://cmder.net/)) is a nice alternative.

Then, don't use the Python command on Windows. Use the "py -x.y" command. It will let you choose which version of Python you call. So "py -2.7" calls python 2.7 (if installed) and "py -3.6" calls Python 3.6. Every time you see a tutorial on Python telling you to do "python this", replace it mentally with "py -x.y".

UNIXES (mac, linux, etc):

Python is suffixed. Don't just call "python". Call pythonX.Y. E.G: python2.7 to run python 2.7 and python3.6 to run Python 3.6. Every time you see a tutorial on Python tell you to do "python this", replace it mentally with "pythonX.Y". Not PythonX. Not "python2" or "python3". Insist on being precise: python2.7 or python3.5.

LINUX:

pip and virtualenv are often NOT installed with Python, because of packaging policies. Install it with your package manager for each version of Python. E.G: "yum install python3.6-pip" or "apt install python3.6-venv".

FINALLY, FOR ANY OS:

Use "-m". Don't call "pip", but "python -m pip". Don't call "venv", but "python -m venv". Don't call poetry but "python -m poetry." Which, if you follow the previous advices, will lead to things like "python3.6 -m pip" or "py -3.6 -m pip". Replace it mentally in tutorials, including this one.

This will solve all PATH problems (no .bashrc or windows PATH fiddling :)) and will force you to tell which python version you use it with. It's a good thing.

In any case, __use a virtualenv as soon as you can__. Use virtualenv for everything. One per project. One for testing. One for fun. They are cheap. Abuse them.

In the virtualenv you can discard all the above advices: you can call "python" without any "py -xy" or suffixes, and you can call "pip" or "poetry" without "-m". Because the PATH is set correctly, and the default version of Python is the one you want.

But there are some tools you will first install outside of venv, such as pew, poetry, etc. For those, use "-m" AND "\--user". E.G:

        "python -m pip install poetry --user"
        "python -m poetry init"

This solves PATH problems, python version problems, doesn't require admin rights and avoid messing with system packages. Do NOT use "sudo pip" or "sudo easy_install".

2 - Using requirements.txt

You know the "pip install stuff", "pip freeze > requirements.txt", "pip install -r requirements.txt" ?

It's fine. Don't be ashamed of it. It works, it's easy.

I still use it when I want to make a quick prototype, or just a script.

As a bonus, you can bundle a script and all it's dependencies with a tool named "pex" ([https://github.com/pantsbuild/pex](https://github.com/pantsbuild/pex)):

        pex . -r requirements.txt -o resulting_bundle.pex --python pythonX.Y -c your_script.py -f dist --disable-cache

It's awesome, and allows you to use as many 3rd party dependencies as you want in quick script. Pex it, send it, "python resulting_bundle.pex" and it runs :)

3 - Using Setup.cfg

At some point you may want to package your script, and distribute it to the world. Or maybe just make it pip installable from your git repo.

Let's say you have this layout for your project:

        root_project_dir/
        ├── your_package
        ├── README.md

Turn it into:

        root_project_dir/
        ├── your_package
        ├── README.md
        ├── setup.cfg
        ├── setup.py

And you are done. Setup.py needs only one line, it's basically just a way to call setuptools to do the job (it replaces the poetry or pipenv command in a way):

        from setuptools import setup; setup()

Setup.cfg will contain the metadata of your package (like a package.json or a pyproject.toml file):

        [metadata]
        name = your_package
        version = attr: your_package.__version__
        description = What does it do ?
        long_description = file: README.md
        long_description_content_type = text/md
        author = You
        author_email = email@example.com
        url = https://stuff.com
        classifiers = # not mandatory but the full list is here: https://pypi.org/pypi?%3Aaction=list_classifiers
            Intended Audience :: Developers
            License :: OSI Approved :: MIT License
            Programming Language :: Python :: 3.5
            Programming Language :: Python :: 3.6
            Programming Language :: Python :: 3.7
            Topic :: Software Development :: Libraries

        [options]
        packages = your_package
        install_requires =
            requests>=0.13 # or whatever

        [options.package_data]
        * = *.txt, *.rst
        hello = *.msg

        [options.extras_require]
        dev = pytest; jupyter # stuff you use for dev

        [options.package_data] # non python file you want to include
        * = *.jpg

You can find all the fields available in the setup.cfg here: [https://setuptools.readthedocs.io/en/latest/setuptools.html#...](https://setuptools.readthedocs.io/en/latest/setuptools.html#configuring- setup-using-setup-cfg-files)

Setup.cfg has been supported for 2 years now. It's supported by pip, tox, all the legacy infrastructures.

Now, during dev you can do: "pip install -e root_project_dir". This will install your package, but the "-e" option will make it work in "dev mode", which allow you to import it, and see modifications you did to the code without reinstalling it every time. "setup.py develop" works too.

If you publish it on github, you can now install your package doing:

        pip install git+https://github.com/path/to/git/repo.git

You can also create a wheel out of it doing:

        python setup.py bdist_wheel

The wheel will be in the "dist" dir.

Anybody can then "pip install your_package.whl" to install it. Mail it, upload it on an ftp, slack it...

If you want to upload it on pypi, create an account on the site, then "pip install twine" so you can do:

        twine upload dist/*

Read the twine doc though, it's worth it: [https://pypi.org/project/twine/](https://pypi.org/project/twine/)

You could use "python setup.py bdist_wheel upload" instead of twine. It will work, but it's deprecated.

4 - Using pew

Pew ([https://github.com/berdario/pew#usage](https://github.com/berdario/pew#usage)) is an alternative to venv, poetry, virtualenvwrapper and pipenv.

It does very little.

        "pew new env_name --python python3.X"

Creates the virtualenv.

        "pew workon env_name"

Activates it. And optionally moves you to a directory of your choice.

That's all. It's just a way to make managing virtualenv easier. Use pip as usual.

You can know where your virtualenv has been created by looking up the $VIRTUAL_ENV var.

This is especially useful for configuring your IDE, although I tend to just type "which python" on unix, and "where python" on Windows.

5 - Using poetry

Now, if you need more reliability, poetry enters the game. Poetry will manage the virtualenv for you, will install packages in it automatically, will check all dependencies in a fast and reliable way (better than pip), creates a lock file AND update your package metadata file.

I'm not going to enter into details on how this work, it's a great tool, with a good doc: [https://github.com/sdispater/poetry](https://github.com/sdispater/poetry)

You don't need to start with poetry. You can always migrate to it later. Most of my projects do the "requirements.txt" => "setup.cfg" migration at some point. Some of them move to poetry if I need the extra professionalism it provides.

The problem with poetry is that it's only compatible with poetry. It uses the pyproject.toml format, which is supposedly standard now, but is unfinished. Because of this: any tool using it, including poetry, actually stores most data in custom proprietary fields in the file :( Also, it's not compatible with setuptools, which many infrastructures and tutorials assume. So you'll have to adapt to it.

That being said, it's a serious and robust tool.

<comment><USER3> Oh, almost forget.

6 - If you want to compile Python to an exe, use nuitka ([http://nuitka.net/](http://nuitka.net/)), not p2exe, cx_freeze and co.

<comment><AUTHOR> P.S. no src/ folder? I feel like that's quite a nice idea, although I come from a Java background, so perhaps it just feels familiar.

<comment><USER3> I've use the src folder a lot in the past, but realized I only had one dir in it in all my projects. Since it's confusing to beginers, I removed it and never missed it.

Nevertheless, if you want to have one, just add this to setup.cfg

         [options]
          package_dir=src
          packages=find:

</comment></comment></comment></comment></comment></comment><comment><USER16> I've been coding in Python for about 8 years now and this is the first time I've even heard of Poetry.

<comment><AUTHOR> For 7 of those years Poetry didn't exist. For the 8th year however Poetry and Pipenv have been pretty big news in the Python packaging world.

</comment></comment><comment><USER17> Is pipenv not recommended any longer ?

<comment><USER8> It was NEVER recommended by any Python organization or official person, it was just Kenneth's usual bullshit marketing.

<comment><USER18> In the link below it says, "Pipenv is recommended for collaborative projects"

[https://packaging.python.org/tutorials/managing- dependencies...](https://packaging.python.org/tutorials/managing- dependencies/)

<comment><AUTHOR> Yes, they toned it down, but still to a wording that suggests a formal recommendation. If you find the discussion, it was not meant to be an exclusive recommendation. Bit of a mistake, in my opinion.

</comment></comment></comment></comment><comment><USER19> My own anecdotal experience was that I couldn't get poetry to install on a fresh instance of Ubuntu. There were some open issues for it on the Poetry issue tracker but the developer was implying it was an Ubuntu issue rather than a problem with Poetry.

</comment><comment><USER20> I never heard of poetry before and normally use pipenv.

The author states that poetry is more popular than pipenv, is that true?

I did a quick comparison:

[https://github.com/sdispater/poetry](https://github.com/sdispater/poetry) watchers: 77 stars: 4,690 forks: 318

[https://github.com/pypa/pipenv](https://github.com/pypa/pipenv) watchers: 348 stars: 17,207 forks: 1,268

I don't know if the authors statement 'Most people seem to prefer Poetry.' is true.

<comment><USER21> Anecdote, but everyone I personally know in the Python-sphere hates pipenv (and the creator) for various reasons. On another forums community I'm a member of the recommended tool for python packaging is poetry.

<comment><USER11> You are right about the hates for pipenv, but I don't know that the creator hates it too.

edit: sorry I misunderstood, the creator of pipenv doesn't hate pipenv

<comment><USER22> He meant that the creator is hated, not that creator hates the program.

</comment></comment></comment></comment><comment><USER23> Never head of poetry before. Looks very nice. Thanks for sharing.

<comment><USER24> Me either. Of course, now the last four Python packaging systems are obsolete. ("What about eggs? easy install? .egg-info directories? Forget them. They are legacy.")

The consistent problem with all these systems is that when (not if) an install fails, figuring out what to do is very difficult.

<comment><USER25> pip, virtualenv, setup.py using setuptools, and twine if you need to publish to PyPI, are all pretty old and well-established, and are all still a fine way to do python development.</comment></comment></comment>


What's better: A $329 iPad Mini or $319 iPad 2? - <AUTHOR> http://reviews.cnet.com/8301-31747_7-57544529-243/whats-better-a-$329-ipad-mini-or-$319-ipad-2/ <comment><USER2> Neither

Go on AOSP build for devices page. See what tablets are compatible. Build your own source for the tablet, throw in SEAndroid and leave the Ipad junk alone. It'll cost you $500 less too</comment>


Fixie tries - <AUTHOR> http://www.cipht.net/2017/10/29/fixie-tries.html <comment><USER2> The Array Mapped Trie is an interesting data structure that's really hard to represent in code. Even this rust version is forced to use unsafe and manual allocation to pull it off.

Most libraries seem to resort to using a dynamic array, like a Go slice:

        type bitmapNode struct {
            childBitmap uint64
            children []node
            bitpos uint64
        }

But that wastes space (there's no need to store the length/capacity) and may add a level of indirection, so doesn't really represent the actual data structure at all.

The original paper includes this note: [http://lampwww.epfl.ch/papers/idealhashtrees.pdf](http://lampwww.epfl.ch/papers/idealhashtrees.pdf)

> As Nilsson and Tikkanen [1998] remark, performance critically depends on the > memory allocation system and careful organization is rewarded.

There are all kinds of clever workarounds to this problem, like using part of the pointer for additional meaning, or, perhaps the most fruitful, using different mechanisms for different sized nodes. For example: [https://db.in.tum.de/~leis/papers/ART.pdf](https://db.in.tum.de/~leis/papers/ART.pdf) and [https://www.usenix.org/system/files/conference/fast17/fast17...](https://www.usenix.org/system/files/conference/fast17/fast17-lee.pdf)

These adaptive radix trees have 4 node types: Node4, Node16, Node48, and Node256. Node4 uses two sorted arrays of up to 4 items, Node16 uses an idea similar to the array mapped trie, using a bitfield and compressed arrays, Node48 and Node256 are more like traditional tries, since at that size the memory loss is worth the trade off.

What's frustrating about these data structures is just how hard they are to implement. Pointers, structural types, arrays and bytes seem wholly inadequate to the task and your code becomes a mishmash of low-level, specialized instructions, hacky unsafe memory access, and byzantine bit-shifting. This note in the code just about sums it up:

        // It should be possible to implement this for arbitrary types
        // implementing BitAnd and friends, but my attempts to do so were
        // constantly thwarted.
        macro_rules! trivial_fixed_length_key_impl {
            ($($name:ident,)*) => {
                $(#[allow(trivial_numeric_casts)] impl FixedLengthKey for $name {
                    const LEVELS: usize = 2 * mem::size_of::<Self>();
                    #[inline]
                    fn nibble(&self, idx: usize) -> u8 {
                        ((*self >> (4*(Self::LEVELS-idx-1))) & 15) as u8
                    }
                    #[inline]
                    fn empty() -> Self { 0 }
                    #[inline]
                    fn concat_nibble(&mut self, nibble: u8) {
                        *self = (*self << 4) | (nibble as Self)
                    }
                })*
            }
        }

It's a circle-sized data-structure trying to fit in a square-sized programming worldview.

I wonder if we end up with hash tables, not because they're technically superior, but because all of our programming languages make them easy to implement and reason about, and when try to leave that box, we constantly bang our head against a wall, and end up with code that always just looks like gobbledy gook.

The latter linked paper is particularly damning in this respect, as it introduces this esoteric world of persistent memory, which doesn't even really exist yet, and yet will supposedly dominate computing for the next decade. Are we going to get new versions of programming languages to take advantage of this technology, or are we going to continue down the path of becoming wholly reliant on super-intelligent compilers to do paradigm translation?

Do we really want a world where only computers know how to program computers anymore?

<comment><USER3> It seems to me the gobblydok is more a problem with your chosen language than the data structure. In c it is perfectly straight forward.

Also we are long in a world where computers are needed to program computers. Or when did you last type in a program in raw machine language?

<comment><USER2> I disagree that its straightforward in C. C is built around pointers, but the bitmasked array uses a completely different kind of pointer. IE you can't just do

        n->n.num_children++;
        n->children[c] = (art_node*)child;

You have to do:

        __m128i cmp;

        // Compare the key to all 16 stored keys
        cmp = _mm_cmplt_epi8(_mm_set1_epi8(c),
                             _mm_loadu_si128((__m128i*)n->keys));

        // Use a mask to ignore children that don't exist
        unsigned bitfield = _mm_movemask_epi8(cmp) & mask;

And that's all CPU-specific.

I'm not saying it can't be done, but rather the tools are a poor fit for the problem. Have you tried to build this data structure? Can you link to the code? I'd love to see what a clean, high-level, understandable example would look like.

> Also we are long in a world where computers are needed to program computers.

Yes you're correct about this. I just think its headed even further in this direction. Languages like C++ and Rust are designed to give the programmer control, but the platforms we're programming for seemed to designed to be impossible to understand.

If I were tasked with building data structures like this I would really want some tools to help me feel confident the code was correct.

<comment><USER4> You might like my "qp trie" code.

[https://dotat.at/prog/qp/README.html](https://dotat.at/prog/qp/README.html)

It is in a rather experimental proof-of-concept state, but it has been adapted for production use in the Knot-DNS server.

The main correctness tool I used was a custom data structure fuzzer, with various sanity checks including a reference implementation in perl that produces the same results as the real implementation under test (when it works).</comment></comment></comment></comment>


Trying to Understand Functional Programming with State in Python - <AUTHOR> I'm trying to understand how to use functional programming with python. AFAIK this is a way to handle state with immutable data.
https://pyfiddle.io/fiddle/db7f130e-e2bd-4d13-ac4e-0114c09a6179
The example is a service that keeps the total of the random values generated. It's only a dummy program with state management for learning purposes.
The generator simulates (that was my intention) a data stream from a remote server via (e.g.) a websocket. I want to mantain a local state and update it with the received events.
I have some questions:
- Is this a good functional approach for python?
- Is there a way to remove the while True in the main function? I think it can be done with recursion, but I read python doesn't have tail call and it's bad idea.
- Is it possible to refactor with the map (or similar) function?
- Is there any library suited for this example? I looked at PyFunctional and RxPy, but I'm not sure.
I'm afraid these are not the right questions, so feel free to suggest any correction, improvement or resource to look at. Thanks. <comment><AUTHOR> Clickable link [https://pyfiddle.io/fiddle/db7f130e-e2bd-4d13-ac4e-0114c09a6...](https://pyfiddle.io/fiddle/db7f130e-e2bd-4d13-ac4e-0114c09a6179)</comment>


I Love the GPL (Except When it Applies to Me) - <AUTHOR> http://teddziuba.com/2010/01/i-love-the-gpl-except-when-it.html <comment><AUTHOR> I'm constantly struck by just how much of a turd the AGPL is -- it's a baldfaced EULA! It takes a huge leap beyond what is enforceable via straightforward copyright law and wallows right into the deep end of clickwrap licenses (the GPLv3 bullshit at least still hinges upon distribution).

With all other FOSS licenses, it's lazy bullshit to use them in the LICENSE field of your installer maker -- I absolutely do not have to accept the terms of the GPL to use your software, it's right there in the text of the license, so don't you dare make me click an 'I accept' checkbox.

With the AGPL it's absolutely necessary to do this, because I don't actually have _The freedom to run the program, for any purpose_

The RMS of twenty years ago would have never approved of such a thing, that he has lent it the imprimatur of the FSF now is testament to his intellectual bankruptcy.

The AGPL will never ever succeed. It will only ever be used by egotistical idiots and dying companies that wish to sear a scarlet letter into their code -- _noone but I may profit directly from this work_ \-- as you still retain copyright by default. Is the AGPL transitive across the network the way the GPL is by linking? It seems to me like either answer would show how poorly considered it is as a license.

<comment><USER2> I don't understand the ferocity of your opinion about the AGPL. Its objectives are reasonable: "don't use my software as part of a closed-source commercial web app".

Virtually every piece of commercial closed-source software is distributed under terms that are strictly more restrictive than the AGPL, and the AGPL's objectives are --- unlike those of commercial vendors --- benevolent.

Finally, licenses aren't in competition. They're just tools. You use the one that supports your objectives.

<comment><USER3> I'm not sure how I understand how a commercial license is "strictly more restrictive" than the AGPL, which requires that you also release your code under the AGPL. Whether or not it's "strictly more restrictive" rather depends on whether you want to also release all the source to your own code as well.

I also don't understand how the AGPL's objectives are "benevolent" when the primary purpose of those objectives as applied by commercial interests is to ensure a revenue stream via commercial license.

You yourself said: "GPL-style licenses make it harder for competing companies to use your code. GPL is therefore an easier sell inside of a company."

How is that benevolent? (charitable, intending or showing kindness).

<comment><USER2> Commercial license: not only do you not have the right to use my software without accepting my terms, but you will pay me, probably per-core. That's strictly worse than AGPL.

You and I may be arguing at cross-purposes. You seem to care a lot about the hardships licenses create for software _users_. I couldn't care less. I think it's an inherently benevolent thing for a software author to give away her code for free, and if she wants to do that under a strict copyleft... her code, _her terms_.

The objective of the AGPL is reasonable. "Don't use my code in closed-source applications". As a developer, that term has been annoying on many occasions ( _shudder_ readline), but it has never seemed unfair.

<comment><USER3> I'm surprised at the appeals to emotion engendered in your word choices -- "fairness" and "benevolence".

I don't think either applies. The GPL is primarily useful as a means to maintain a very specific business model that relies on selling commercial licenses. There's nothing moralistic or benevolent or "fair" about it -- it's simply business.

The only moral argument I could possibly make is that it's disingenuous if not outright hypocritical to claim that the GPL is about "freedom" when its used as merely a business tool that leverages the closed-source work of others to fund ongoing development.

<comment><USER2> I agree that the GPL is primarily useful as a vehicle for making money off software that is also released as open source. Since open source commercial software is strictly better than closed source commercial software, I don't have a hard time using words like "benevolent" to describe that practice.

Remember, people can still compete with GPL/AGPL software. They just have to do it with open source code.

Finally, your third graf is profoundly disingenuous. Most GPL software is noncommercial. Everything we use to post on HN is traceable in some way back to GCC, which isn't making money for anyone.

<comment><USER3> _I agree that the GPL is primarily useful as a vehicle for making money off software that is also released as open source. Since open source commercial software is strictly better than closed source commercial software, I don't have a hard time using words like "benevolent" to describe that practice_

I'm not sure I understand your use of "strictly better" here. If my goal is to solve a specific problem, then isn't the software that solves that problem the best strictly better software?

As far as benevolence, why ascribe primarily altruistic motives to clear business decisions? MySQL's use of the GPL allowed for pervasive adoption, which increased demand for commercial licensing and support services.

 _Finally, your third graf is profoundly disingenuous. Most GPL software is noncommercial. Everything we use to post on HN is traceable in some way back to GCC, which isn't making money for anyone._

How do you think GCC development is paid for? Just take a look at the (closed source, proprietary, et al) companies providing the primary funding ongoing GCC development (although many are moving to or looking at LLVM, since its licensing provides a better model for this sort of shared OSS funding).

It _always_ comes down to money and either commercial interests or government funding.

<comment><USER2> I think you and I are wasting time. You care about making things easier for software users. Software users don't make more software; software authors do. I care about the interests of developers to the exclusion of almost everything else, and I'm also simply not religious about the tools they use to accomplish those aims.

The business benefits of the GPL are so compelling that I don't think they need my cheerleading. If I write 50,000 lines of C code, and you want to stick that code in your $10,000 software package and not pay me a dime, the GPL (for the most part) keeps you from doing that. Total win.

<comment><USER3> _I think you and I are wasting time. You care about making things easier for software users. Software users don't make more software; software authors do._

Actually, I think "users" should pay for software as that's all they're able to contribute, and I don't think that the GPL dual-licensing model users by some enterprise vendors can actually work for most consumer software.

If I produce developer-oriented software that's outside of our core business -- but perhaps enables our core business -- I am very likely to release it under the MIT/BSD license to help aid in wide adoption and external contribution from funding business interests.

If I produce software that _is_ our core business, then I won't MIT/BSD license it. I _might_ GPL it, but only if there's a clear value (ie, leveraging the 'open source' name, aiding in widespread adoption by hobbyists while targeting enterprise users, etc) in doing so.

 _The business benefits of the GPL are so compelling that I don't think they need my cheerleading._

The benefits are only compelling for --some-- business models. And this doesn't disprove the author's point.

As for other business models, especially around commoditized software, the BSD license often provides the most compelling business benefits as corporates are free to pool resources on code they are free to link against without having to release the entirety of their products under a copyleft license.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER4> I don't agree with the trash talk on the AGPL in these comments to the original article. I would like to see fewer open source licenses: in my opinion the Apache 2, LGPL 3, and AGPL 3 would suffice since I am not that clear why Apache 2 and BSD styles licensed projects just couldn't be Apache 2. That said: creators should obviously have the only say in what license they choose to use.

I know someone who has a small AI + semantic web company, they use the AGPL, and I think that they are doing OK. The trick is selling a "commercial use" exception.

Also, my understanding is that if you use AGPL code in a web service, then you need to make the entire web service implementation AGPL. However, other systems that use the newly created AGPL web service do not need to be AGPL - if I am wrong about this, I would appreciate being corrected.

<comment><USER5> "I am not that clear why Apache 2 and BSD styles licensed projects just couldn't be Apache 2."

        $ wc -w isc apache
        192 isc
        1395 apache

</comment></comment><comment><USER6> I don't get his point. Does he think copyleft is a good ideal failed by the specific personalities of the current maintainers, or a flawed dream unable to survive in the reality of the economic marketplace? The essay feels unfocused and disorganized.

Now, I'm an open-minded child of the modern age and I don't agree with the oppressive old-fashioned idea that every essay must have a point. And truthfully this piece does bring up some interesting food for thought (the SaaS loophole). But it is nothing we haven't heard before, with less juvenile tone.

<comment><USER3> My reading was that he was presenting the GPL as an inherently flawed dream unable to survive in the reality of the economic marketplace. In succeeding in market adoption, the proliferation of the GPL actually leads to its own failure due to its knocking the legs out of most of the higher-margin business models required to fund the R&D necessary to produce software.

That might also be my own bias showing.

</comment></comment><comment><USER2> I have no idea what his point is, but from a software business perspective, the difference between BSD-style and GPL-style is simple: GPL-style licenses make it harder for competing companies to use your code. GPL is therefore an easier sell inside of a company, because it gives the software owner special rights over the code.

<comment><USER3> In contrast, as a company looking to use and contribute to open-source software, BSD licensed code is an easier sell because you aren't locked to purchasing a commercial non-OSS license from the copyright holders (see: Oracle/Sun/Monty regarding MySQL).

<comment><USER2> Yes, the BSD license sure is better for software _users_. You can lift a BSD package wholesale into a new white-label product, and you don't even have to tell the author! That sure is convenient.

You use the BSD license when you don't care about the commercial value of your code. But, for the most part, I think using the BSD license means you're not going to care about the commercial value of your code, because if it's valuable, people _will_ freeload.

In my industry, the GPL has done a servicable job protecting some key software projects (Snort, Nessus, Wireshark). The counterexamples (notably Metasploit) are utterly dependent on the continued effort of the original authors --- Metasploit goes stale faster than almost any other security tool.

<comment><USER3> _Yes, the BSD license sure is better for software users._

It's also better for software contributors who want to leverage the code in their own products, and use the resulting revenue to contribute back their changes (but not their entire product).

 _But, for the most part, I think using the BSD license means you're not going to care about the commercial value of your code, because if it's valuable, people will freeload._

Some people will free-load. Many won't. Look at the Apache project, where a vast majority of development is funded by corporations using the software in their closed source products while contributing improvements back to the original product.

 _In my industry, the GPL has done a servicable job protecting some key software projects (Snort, Nessus, Wireshark)._

How do you define "protecting", and what evidence would you use to demonstrate that protection? What would you say those projects were protected from?

<comment><USER2> In the case of Snort, that would be protection from 5-10 VC-funded commercial companies releasing products that compete with Sourcefire's product, the core of which (in fact, the entire v1.0 of which) is simply Snort. Does that sound fair to you? That someone would collect $5MM to build a 30 person engineering team that gets to start picking off customers in 3 months by repackaging your code? It doesn't sound fair to me at all.

<comment><USER3> As I said below, I'm surprised by the emotional arguments engendered in your word choices -- "fairness", "benevolence", etc.

This is simply business, not ideology. In terms of ideology, I think there's a simply check for whether Sourcefire meets the criteria of "I love the GPL. Except when it applies to me": Sourcefire could not ever include anyone else's GPL code in their own product without breaking their business model.

<comment><USER2> And? So what? Sourcefire isn't scavenging Github for code to stick on their boxes; they're writing code, and then (for the most part) publishing it to the world.

From my vantage point, it's the people who produce interesting and valuable code whose interests should come first. Companies who reallllly want to use that code in their for-profit endeavors can buy a license or build their own replacement or open their code; I don't care.

<comment><USER3> I'm not sure what your point is, or how it counters the author's original point, which is that what's good for the goose is very much not good for the gander.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> Anybody who believes the GPL was invented to coerce users into sending patches ought to have their head examined.

<comment><USER8> I might not agree with the GPL, but I'm pretty sure that the intent behind it _is_ to encourage people to contribute back to the open source community (even if not by directly sending patches).

<comment><AUTHOR> The intent is to _require_ source contribution _downstream_.

Any encouraging of upstream communication comes from the difficulty of keeping up with a fork and the knowledge that most code is a liability not an asset. The GPL only pushes you that way indirectly.

<comment><USER9> Not just source contribution, but also the contribution of new GPL applications. I've written a couple of apps which are licensed under the GPL, not because I necessarily thought it was the best license for me, but simply because I wanted to use a GPL library. Had the library I wanted to use been some other license, my app might have been some other license. But it wasn't and now there is one more GPL app.

Of course there is the other side of the coin where I haven't used a library I really wanted to use because I couldn't GPL my app.

</comment></comment></comment></comment><comment><USER10> > Free Software: I found a loophole in my student loan documentation that lets > me defer payments for decades, so long as I stay in the Ph.D. program!

I'm sure Stallman and the like who have given their whole life to free software will appreciate. Meanwhile, this guy hasn't done much and yet not only complains about free software while using them but also calls them lazy at the same time. Shameless.

</comment><comment><USER11> I can't tell whether the angry/swearing diatribe tone is a dramatic effect or just lack of creativity/intelligence on behalf of the author.

<comment><USER12> And his assertion about license proliferation is certainly not correct ref <http://www.blackducksoftware.com/oss/licenses#top20>

<comment><USER13> Except, is that chart of how many projects use each license, or how much much use software with those licenses sees? Those could be very different. But ups for commenting on the substance rather than the style.

<comment><USER14> Both Blackduck and Gartner Group are pushing a doomsday scenario of GPLv3 and the AGPL seeing surging use, respectively.

The patent / IP language in the GPLv3 still scares a lot of larger companies, my employer included. It's in Blackduck's commercial interest to present information in a way that exaggerates the prominence of that family of licenses. Thus, the chart is of the number of projects released under that license, and does not take into account the maturity or market penetration of a project. For instance, a new entry on Sourceforge with nothing but a README in its repo would be included in Blackduck's count.

That's not to say Blackduck itself is all bad, mind you. I've sat through a few Continuing Legal Education webinars that they've hosted, and they've all been quite objective and accurate. In each case, they brought in fairly prominent figures from the Open Source law space (Karen Copenhaver, Mark Radcliffe, etc) for the sessions.

</comment></comment></comment></comment><comment><USER15> Comments like the ones on this article are why younger devs are avoiding the free software movement (notice I said movement and not free software itself). Instead of honestly addressing the shortcomings of the GPL you get all defensive and huffy, like a 10 year old who's been told his skateboard sucks.</comment>


Favit makes the web more transparent - stats launched - <AUTHOR> http://blog.favit.com/en/profile_stats favit is pioneering a stat module providing detailed traffic statistics available on each shared item and public profile. This way you can monitor popularity trends and dynamics for your personal profile, groups, bundles and filters – every single item on favit. <comment><USER2> Those would appear to be Flash graphs.</comment>


We need world government to stop technology threat, says Hawking - happy-go-lucky https://uk.news.yahoo.com/we-need-world-government-to-stop-technology-threat-says-hawking-122517367.html <comment><AUTHOR> The problem is not with government or technology. The problem is people. There will always be bad actors in population of sufficient size. It is people who write malware just as it is people who run government. Both are equally subject to unethical behavior. You can defend yourself against other private bad actors with sufficient knowledge, but no amount of knowledge can protect you from a corrupt government.

</comment><comment><USER2> Hey guys! The CIA hacked Hawking's speach synthesizer!

</comment><comment><USER3> And who will stop the threat posed by the "world government" itself??</comment>


Journal will publish heavily criticized paper on gender differences in physics - <AUTHOR> https://www.sciencemag.org/news/2019/11/decision-certain-draw-fire-journal-will-publish-heavily-criticized-paper-gender <comment><USER2> In case anyone remembers the incident at CERN (mentioned in the article) regarding the author of this paper, I have some n=1 information. I used to work at CERN when this happened, and I remember the day because there was much chatter and unrest about it. The author claimed that a woman was hired for a position instead of him, while they were the only two candidates and he had much more papers published and citations. While of course that does not mean that there is systemic sexism in CERN's hiring process because it could very well simply be that the guy is unbearable, I have heard a high-up HR employee at CERN say that women are favored when hiring.

I strongly disagree with equality of outcome, since this is basically fighting inequality with sexism.

I did not dare to speak my thoughts to anyone apart from very few colleague friends.

<comment><USER3> > I strongly disagree with equality of outcome,

There's more to hiring than numerics, there's always the prerogative and perhaps even need to take a chance. People have not always had similar chances or abilities to produce the results you'd like to see in all candidates, but it just may be you can give a person a place to shine. The candidate that already shone may be safer, but in practice it may as well mean more of the same (that you've hired). Since you're using the same metrics (paper output etc. in your case). Sometimes more of the same is not what you need.

There's a whole universe of reasons for (not) hiring someone. Pretending anyone is hiring (or even able to) based on merit is not seeing clearly. You rarely know, apart from superstar hires for identical roles they've performed elsewhere already, is all about taking a chance. You may as well freshen up the org with atypical hires, in my experience worth their shots far more than 'default' hires, which, in my view, a nearly always just hires most similar to you.

<comment><USER2> Of course metrics are not everything, as I stated in my original comment, but it should have nothing to do with gender.

Maybe you want a better cultural fit, and that's 100% acceptable by my book. But leave gender out of it.

<comment><USER4> The quickest way to get a cultural shift in a technical office is to go from 98% male to 70% male. Things get real different real quick. There's no reason to leave gender out of culture shifts, except that you don't like it.

<comment><USER5> > There's no reason to leave gender out of culture shifts, except that you > don't like it.

Or that it's illegal in many jurisdictions to select a candidate because of their gender. Can't speak for others, but if I see evidence of this happening in writing, I have no qualms about forwarding the docs/emails/whatever off to the Dept of Labor and a labor attorney to pursue this discriminatory behavior (discrimination is discrimination, whether "anti" a specific gender or "pro") by an employer.

Culture shifts should be a byproduct of effective, non-discriminatory hiring practices (which includes blinding to protected classes).

<comment><USER3> > Culture shifts should be a byproduct of effective, non-discriminatory hiring > practices (which includes blinding to protected classes).

Good idea, but nearly nobody does it (removing socioeconomic indicators such as name/gender/address from CVs). It is also difficult to insulate yourself from your network when hiring, as well as controlling for other items on a CV (you want Ivy League? Hello bias!).

Which is why I think some active thought on the subject of diversity is essential when hiring. You will never remove bias completely, so we might as well acknowledge the 800 pound gorilla and deal with it directly.

</comment></comment></comment></comment></comment></comment><comment><USER6> How dare they let science interfere with politics? If the science doesn't agree with the current politics, it's obviously bad science.

And if this particular study indeed turns out to be bad (not replicating, bad methodology, etc) that would validate the above truth even more. It would obviously be because no good science could ever come from studying such issues -- not because papers regularly turn to be bad, regardless of subject.

The only appropriate response is for non-scientific concerned groups plus a few politically-minded scientists to put pressure to their institutions to make sure such researchers don't work in the field again.

/s

<comment><USER7> It seems the brunt of the controversy around the author arose from non- scientific assertions he made during a guest lecture:

> _During the presentation, he asserted that physics was built and invented by > men, and stated on a slide that "Physics is not sexist against women."_

While the premise of the article is that the paper's publication is "a move likely to attract criticism", the person most critical of the paper, who is interviewed in the article, cites substantive non-political reasons why they dislike the paper:

> _One member of the editorial board of QSS, which is published by MIT Press > and the International Society for Scientometrics and Informetrics (ISSI), > gives Strumia's paper poor reviews. The study is "methodologically flawed" > and "fails to meet the standards of the bibliometric community," says > Cassidy Sugimoto, an information scientist at Indiana University in > Bloomington..._

So how does the content of the article justify your snark and imaginary irrational response?

<comment><USER6> > _> During the presentation, he asserted that physics was built and invented > by men, and stated on a slide that "Physics is not sexist against women."_

Well, the first claim is statistically true (and people who are against e.g. sexism in physics also accept it as true and want to change it).

The second is their opinion, which one might or might not agree with. Don't know about physics, but the biology department in our university was mostly women, for example (contrast with CS, which was 90% men).

> _So how does the content of the article justify your snark and imaginary > irrational response?_

I already covered it in the second part of my response, didn't I?

"if this particular study indeed turns out to be bad (not replicating, bad methodology, etc) that would validate the above truth even more. It would obviously be because no good science could ever come from studying such issues -- not because papers regularly turn to be bad, regardless of subject"

<comment><USER7> No, you didn't, or at least I interpreted whatever you were trying to say as a red herring. Who in the article makes that insinuation? Who said anything about the paper's purported flawed methodology as automatically validating the "above truth"?

<comment><USER6> > _Who in the article makes that insinuation?_

Many people in real life, forums, etc. Who said it had to be in the article? I'm pointing at a larger trend.

<comment><USER7> I don't see how personal grievances and perceptions of "many people in real life" are useful and relevant to the discussion. Just like my many real life experiences with guys being assholes is not useful to discussing this paper and its publication.

<comment><USER6> We're not discussing some mathematical formula.

The whole thread is about the political perceptions and opinions of whether such an article should be printed, based on perspectives on various societal issues, plus some meta-discussion on how journals should work.

Check out the (at the moment at least) top voted comment: "In case anyone remembers the incident at CERN (...)" etc.

And of course that meta discussion is much more useful than wether this individual article is correct or not.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> This old white man may be a good old sexist, but is there truth to the statement "female physicists face more career obstacles than their male colleagues" ?

I was lucky enough to do my Phd with an all-female group of advisors and i m pretty sure it was beneficial for my work. There are all sorts of female-only or female-first awards, funding, prizes, scientist networks and, considering how there are less women in STEM field, conference quotas and funding quotas visibly benefited my advisors and indirectly, me. This provided opportunities for visibility for my (mediocre) work that were just not available otherwise. I 'm not in academia so not sure how this translates to hiring prospects, but AFAIK everyone is struggling, regardless of gender. I'd recommend having a female supervisor however.

<comment><USER9> It's actually the opposite problem at the moment. Far more women are pursuing college degrees than men. Men have been in this declining trend, they dropout more, get less grants, scholarships, ...etc.

[https://www.theatlantic.com/education/archive/2017/08/why- me...](https://www.theatlantic.com/education/archive/2017/08/why-men-are-the- new-college-minority/536103/)

<comment><USER10> From what I understand the issue is more complicated. Women are pursuing more college degrees than men, but also men still occupy the a disproportionate number of of administative, leadership, and professor positions. The overall story comes that women pursue higher education because they need to acquire more education/accolades to achieve the positions of male peers.

<comment><USER11> Couldn't that also be explained by the fact that more women attending college than men is a relatively new development, and most administrative/leadership/professor positions are held by older people, hence the gender ratio will take time (>20-30 years) to reflect the new gender balance?

After all, the people that are professors now were studying in the 1980s-1990s, hence the current ratio of male/female professors should logically represent the gender ratio of the field in the 1980s-1990s if there is no inherent gender bias, not the gender ratio of the field in 2019.

<comment><USER10> From what I understand new professorships, NSF CAREER awards, and similar are still majority male. There is an observed phenomenon that when men enter a female-dominanted field they still gain leadership positions faster than women do. This happens in nursing and schooling, for example.

</comment></comment></comment></comment></comment><comment><USER12> It's not a particularly attractive subject of study (to my personal interests), but publishing controversial ideas is _precisely_ the task of scientific journals. Then, rebuttals of these ideas can be published, and the readers can form an opinion in the face of evidence.

</comment><comment><USER7> I know 'gender differences' is in the headline of the submitted article, but it made me think the paper was about physiological differences (e.g. female and male brains are different when doing physics work), when it's more about gender disparity in the field. I'm looking forward to seeing the data he publishes (the paper states "Data are made available in Appendix A", but I'm assuming the appendix hasn't been published yet).

</comment><comment><USER9> To the degree that it can be established as a symptom of a bigger problem, demographic measurements based on particular identities and gender are good to have but shouldn't be taken as some kind of political proof or validation - it's just measurements and data is good to know.

</comment><comment><USER13> I don't see how this can be anything but a good thing. If you are certain that there is discrimination against women in physics, then this is a great opportunity to convince the world of it.

I never understood the attitude of "trust us, it exists, but no one is allowed to question it". I think Feynman said something like "I'd rather have questions I can't answer than answers I can't question".

EDIT: I don't understand the downvotes. Why would someone not want an opportunity to present evidence of their claims and rebut arguments to the contrary? Why are we so adamantly opposed?

<comment><USER14> I upvoted you because I think it's a good question.

One problem is that nowadays, people often don't get presented with the entirety of the available evidence on politically charged questions (like gender equality). Whatever pundit or facebook friend will cherry pick the evidence that suits their agenda, even if that evidence has been thoroughly debunked. So while I agree with you that in the context of academic curiosity, everything that can pass peer review should be published, sometimes publishing something that you know will be debunked later could lead to a net societal loss and should therefore be avoided.

Then again, I'm very against silencing opinions, even for the "greater good" (within some framework I'm sure you could describe China's censorship as for the "greater good")

<comment><USER15> No one is obligated to amplify opinions either though. HN has a bizzare streak that private publishers and organisations must grant their medium to every controversial opinion that asks, which is bizarre on a forum that is based on letting downvotes directly silence an opinion (and where down votes are only enabled once you clear the bar of a certain amount of up votes in the first place)

<comment><USER14> >a forum that is based on letting downvotes directly silence an opinion

I cannot express just how _strongly_ opposed to that approach I am. I reserve my use of the downvote to low effort comments, factually inaccuracies, and the like. If we silence people we disagree with we end up with propaganda, not discussion. I'm often hesitant to downvote _any_ comments that espouse a political opinion I disagree with, even if they are eg low effort, because I'm worried about silencing the opposition.

Surprisingly (to me), I don't see anything about what you should or shouldn't downvote in the site guidelines, so it's possible my views don't align with the hn community as a whole. But I really like being able to have constructive discussion, and would hate to have hn's quality degrade to that of a political subreddit.

</comment></comment></comment></comment><comment><USER16> The only thing that should matter when hiring: the skills.

<comment><USER17> Like someone above alluded to, if you have an overbearing personality, a history of poor people skills, and such, your skills probably won't matter unless you are top 1%, and even then it will depend on just how bad you are.

<comment><USER18> If an overbearing personality was a disqualification for academic positions there would be about three professors in America.

</comment></comment></comment><comment><USER19> So, they're publishing something that could pass peer review by someone with no background in the field because...?

<comment><USER20> >In a move likely to attract criticism, a peer-reviewed journal

Literally the first sentence of the article. His original presentation was heavily debated on Twitter and other places. Now that a revised version is published, everyone will be able to publish rebuttals in various (peer- reviewed) journals. That's how it's supposed to work.

<comment><USER19> This is approaching weird semantic questions: what is non-peer-reviewed content in a peer-reviewed journal? I mean, normally the answer would be "Sponsored advertising" but I don't think Strumia is paying them.

And this isn't how it's supposed to work. Substandard papers don't get published. Papers from people with no grounding in the subject matter don't get the big journals. The debate is between legitimate scholars and studies, there's no evidence this paper passes either bar.

This isn't politics, this is science. You don't just publish your opinion and shout "Debate me!"

<comment><USER20> What makes you think the paper was not peer reviewed?

This is from the paper:

>Acknowledgements I thank the referees for their comments; the InSpire team for clarifications; Guy Madison for discussions and suggestions; Riccardo Torre for (among many things) having implemented the WGND name-gender association; Sabine Hossenfelder for having independently replicated the results in fig. 8b and section 3.1 using arXiv data [Hossenfelder et al.(2018)]; more colleagues who prefer not to mentioned.

I like the last sentence in particular and I'm not surprised :)</comment></comment></comment></comment>


What Are We Doing Here? - <AUTHOR> http://www.nybooks.com/articles/2017/11/09/what-are-we-doing-here/ <comment><USER2> Why are so many articles being flagged on HN today? It seems quite excessive.

<comment><USER3> Politics often get flagged to death, and personally I can understand why. For myself the last thing I want to see on hacker news is politics, or at least current domestic US politics which has become such a miserable shit show. At its core HN should be for interesting things, and while politics is incredibly consequential, it's also incredibly dull.

<comment><USER2> Seems like sticking our heads in the sand to me... the fact that it's a shitshow should be alarming and we should all be discussing solutions, not trying to avoid discussion since it will "create controversy". That's how authoritarians win, by being the biggest most intimidating loudmouths in the room.

<comment><USER3> The issue is not a lack of discussion, but a surfeit. Every venue doesn't need to cater to everything.</comment></comment></comment></comment>


Bitcoin vault offering insurance is 'world's first' - <AUTHOR> http://www.bbc.co.uk/news/technology-25680016 <comment><USER2> Speaking as still-a-BitCoin-skeptic, this is interesting news because if this currency is going to make the leap into something truly useful, this is what it is going to take. People speak about the "transaction reversibility" that the current financial system has as if it's the _only_ possible way to provide security, but that's not entirely true; an insurance-based system may also work. I say "may" on purpose; we don't know. Indeed, I've heard it occasionally proposed that we use more insurance-like aspects in the current system because the way the system leans on the reversibility ends up resulting in a lower level of security than we might otherwise like. It's not out of the question this will be a superior result considered globally.

This is, in its own way, _the_ most interesting story coming out of the BitCoin world right now; in long-term importance it dwarfs Overstock.com taking BitCoin for orders.

I will concede that if this can work and becomes entrenched that my skepticism level will be forced by the evidence to decrease.

<comment><USER3> I don't think insurance and transaction reversibility are mutually exclusive.

The current financial system is already insurance-based (at least in the U.S.). You are protected from fraud in every money system you use. Transaction reversibility seems like a natural result of this, because it significantly reduces the insurance risk.

Essentially, if you have insurance, transaction reversibility becomes desirable (by both parties - bank and client) because it reduces insurance costs.

<comment><USER4> > You are protected from fraud in every money system you use

If I buy a car that was stolen (which I didn't know was stolen), law enforcement will repossess the car, send the seller to jail, and I'm out all of the money I spent.

What is the protection from fraud here?

</comment></comment></comment><comment><USER5> I always find it funny how news articles and TV news have to show some kind of physical "coin" for bitcoin news.

The whole point about bitcoin is it is virtual. I guess at most a QR code is just not sexy enough.

BTW this is how news is manipulated about what to cover. If you want a lot of coverage for your product, make a lot of media available, photos, video, etc. If you have bad news, political, judicial, etc. makes no audio, video, or photos available by law or otherwise and boom, little to no coverage. Because of "dog vs squirrel" attention span.

Now let's look at this tidbit they repeat in every bitcoin story:

 _James Howells lost about £4.6m when he threw away his hard drive, forgetting that he had bitcoins stored on it._

This is bbc news, not fox news. I expect better. Did the BBC confirm how many bitcoins were on his hard drive? Did someone look at the blockchain or some other detail? I think not. So I say he lost nothing until proven otherwise.

<comment><USER6> Bitcoin is not virtual, its digital.

<comment><USER5> It's actually both.

Digital in generation and transmission.

Virtual in that we treat it like something that has financial meaning and weight.

</comment></comment></comment><comment><USER7> 1\. It's a single company where all NSA, FBI, IRS will go.

2\. The insurance is fixed in GBP (mostly for financial compliance purposes, rather than malicious intent). So when your holdings rise 10x, you'd have to adjust your contract.

3\. "Easy withdrawals" do not sound reassuring on the frontpage. However, somewhere in the FAQ they tell you that there's a 1 BTC limit a day and they get it manually.

We need a personal wallet that locks up your wealth in a multisignature transaction 5-of-9 with 9 of your friends. The key part is to solve privacy issues (I have some ideas) and make UX usable by grandma, even if she forgets her password and loses all backups (I have some ideas). Then, all folks will lock up their funds in a distributed fashion, without any single place becoming too tempting to invade privacy or take funds.

<comment><USER8> I'd recommend gfshare as part of that solution - it's used by Debian developers for their core server keys. We interviewed the founder at [http://redecentralize.org/interviews/2014/01/02/10-daniel- gf...](http://redecentralize.org/interviews/2014/01/02/10-daniel-gfshare.html)

</comment></comment><comment><USER9> This is fundamentally great news. Insurance is a great hedge against risk. In this case a bitcoin "bank" believes it can reduce the risk of someone stealing all the deposited bitcoins and running off with them. Llyod's has a very interesting and long history of insuring things that are outside the realm of "normal". Read about it on wikipedia.

The end result is I now have a choice. I can store my bitcoins on my own computer or pick an insured bank. If the bitcoins are stolen out of the bank I can be sure I will get my money back because they are backed by a very large insurance company.

Llyod's has a huge amount of capital available and they have been in the business a long time. As an insurance company this is important because you get to see lots of black swan events (and realistically how often they end up happening).

I am sure their analysts have looked at what happens if someone ends up stealing all the bitcoins vs how much money they can make off insuring against this risk. They can give bitcoin websites discounts for security audits and how they store their data.

</comment><comment><USER10> I do not see a 'world's first':

Elliptic does not offer insurance to customers but has to get insurance itself according to the published terms:

 _' Elliptic Vault shall effect and maintain with a reputable insurance company a policy or policies of insurance providing an adequate level of cover in respect of all liability which may be incurred by Elliptic Vault under this Agreement or in respect of any loss of Stored Funds up to a value of the Specified Cover.'_

 _' In the event of any claim against the insurance company by Elliptic Vault, in respect of any loss, damage or corruption of Stored Funds up the value of Specified Cover, any Stored Funds subject of the insurance claim will be valued at the average USD ask price offered on the Bitstamp exchange in the 24-hour period ending at 00:01 am GMT on the day on which Fees are payable, or on such other basis as the insurer may adopt from time to time.'_

[https://www.elliptic.co/vault/terms](https://www.elliptic.co/vault/terms)

Insurance coverage for data loss, data theft etc. is not new, on the contrary, it is quite common if you store digital data and do not plan to go bankrupt because of customers suing you …

</comment><comment><USER11> Transaction metadata is public. Transactions are irreversible. You have no FDIC protection of your savings. Volatility, volatility, volatility. Oh and now I guess if you really want to hold on to your bitcoins you have to keep them in "deep cold storage," whatever that means.

Bitcoin is the technology equivalent of the emperor's new clothes.

<comment><USER12> > Transaction metadata is public

So I can verify the transaction

> Transactions are irreversible.

I can be sure the transaction is final

> You have no FDIC protection of your savings

I can be sure that no currency can be created out of thin air. I still have the option to buy third-party insurance

> Volatility, volatility, volatility

Better than artificial stability that hides risk

> Oh and now I guess if you really want to hold on to your bitcoins you have > to keep them in "deep cold storage," whatever that means

Ownership of the private key(s) is equivalent to ownership of the funds.

> Bitcoin is the technology equivalent of the emperor's new clothes.

Either that or [http://tvtropes.org/pmwiki/pmwiki.php/Main/UnderdogsNeverLos...](http://tvtropes.org/pmwiki/pmwiki.php/Main/UnderdogsNeverLose) ;-)

<comment><USER13> > Ownership of the private key(s) is equivalent to ownership of the funds.

You don't hold the private keys when using a third party service, including this insured storage.

<comment><USER12> You also don't really own your Bitcoin then.

</comment></comment></comment></comment><comment><USER14> This seems to form the basis of a central clearing house, which is exactly what Bitcoin is designed to defeat.

<comment><USER15> Exactly. I don't understand how people can be so naive.

The "freedom fighter" and "fighting the man" themes are going down the toilet so quickly people don't even realize.

Many people, including these self called entrepreneurs, are jumping in because they see an opportunity to make money. Plain and simple, they couldn't care less about Bitcoin, privacy, fighting the man, whatever.

People should be angry the established monetary powers are taking an interest in Bitcoin. At the end, Bitcoin will be just another currency the powers at the top manage, make money on top of it, tax, etc, and what will remain of it?

</comment></comment><comment><USER16> How can anyone prove where the coins came from if they are spent? If there is a copy of the wallet that is not with this third party and is spent, how can they insure the coins?

</comment><comment><USER17> what's to stop someone essentially robbing from themselves, ie logging in and stealing bitcoins, sending to an anonymous account, then filing a claim? Also, why not have a wallet that has optional insurance built in. Take 2% of every deposit to cover losses,

</comment><comment><USER18> This is an easy 5 on the Cuil-meter (cf. cuil theory).

</comment><comment><USER19> I think this bitcoin craze is seriously going to hurt the chance of cryptocurrency ever being accepted. Most likely the governments are letting it slide because they probably know it's not going to work. Let a black swan hit and crash the bitcoin that robs it of any trust. Is a government that invades a country who tries to accept Euros for petro oil seriously going to allow a currency they can't tax? People couldn't do shit when NSA snooping on them hit the news, and they are seriously thinking that this new cryptocurrency will replace the status quo?

<comment><USER20> You can tax bitcoin, just like you tax P2P cash transactions. Whats even better is there is a permanent record that will never go away once you start attaching identities to addresses, which exchanges contain the vast majority of, so you have plenty of time to tax these people.</comment></comment>


Deep learning for assisting the process of music composition - <AUTHOR> https://highnoongmt.wordpress.com/2015/08/11/deep-learning-for-assisting-the-process-of-music-composition-part-1/

<comment><USER2> Well, this field is really exploding right now! I was curious about the performance and searched around a bit: in another other post, the author gives a slightly more detailed explanation of how the tunes are automatically turned into audio:

" _I convert each ABC tune to MIDI, process it in python (with python-midi) to give a more human-like performance (including some musicians who lack good timing, and a sometimes over-active bodhran player who loves to have the last notes :), and then synthesize the parts with timidity, and finally mix it all together and add effects with sox._ "

[https://highnoongmt.wordpress.com/2015/08/07/the-infinite- ir...](https://highnoongmt.wordpress.com/2015/08/07/the-infinite-irish-trad- session/)

The generation of tunes by the RNN is pretty nice and definitely the trending topic, but I think I'm more impressed by the little performance script that he's put together. The output is quite pleasant and I'm curious about the code that generates the bodhran part. Hope this gets open-sourced!

 _(Off-topic to the guy who submitted this: thank you for making OpenLieroX and turning my university into a chaotic LAN party on many an occasion.)_

</comment><comment><USER3> This was posted twice. We kept this thread as the earlier of the two, but changed the URL to the more explanatory post. The other URL is [http://www.eecs.qmul.ac.uk/~sturm/research/RNNIrishTrad/inde...](http://www.eecs.qmul.ac.uk/~sturm/research/RNNIrishTrad/index.html) and actually plays the music. The other HN thread was [https://news.ycombinator.com/item?id=10069007](https://news.ycombinator.com/item?id=10069007), but we moved the comments here.

</comment><comment><USER4> Fiddle player for the last 18 years: can confirm that this is pretty much what most traditional music circles sound like (especially their endlessness).

<comment><USER5> At a workshop I attended, American piper Kieran O'Hare was once decrying the typical American "intensification" pattern as applied to seisiúns. It becomes about people's egos and shoehorning in their sets or showing that they can keep up with the best. Really, it should be about friends socializing and sharing music. Tunes-tunes-tunes-tunes is antisocial and a bit mechanical when it comes down to it.

At another workshop, Kevin Creehan (Junior Creehan's grandson) noted how it was strange for seisiúns to end up in pubs. Originally, they were in people's houses. They were intimate gatherings of family and friends, and some of the heights of artistry in Irish trad music clearly stem from this quieter and more intimate context.

For the most part Bay Area seisiúns seem to include a healthy dose of socializing and human interaction. Haven't been down to Mountain View yet. I hear those guys play fast. O'Flarety's in San Jose is pretty raucous, but even so, they manage to get in a good amount of socializing.

You techies that show up to The Plough and the Stars sessions -- know that you are in one of the premier sessions in North America, both for the skill of musicians and the health of the community that surrounds it. Don't expect to be entertained, like it's a show for you. It's a gathering for the musicians to share music with other musicians. If you like Irish trad, listen carefully, because the very best music comes out when it's musicians sharing with their friends. (Also listen patiently, because there's still a certain diversity of musicianship.)

Also, when someone is singing a slow air, then it's good manners to be quiet and listen! (And very bad manners if you don't!)

<comment><USER6> In Newfoundland, anyway, it wasn't just the tunes that used to be in people's homes, it was the dances, too: "Mostly they'd have a dance in the kitchen. It was all wooden floors. Some of the kitchens was a bit small so they'd have to take out the stove, lift it outdoors in the yard for to make more room for dancing...and they'd play all night and in the morning they'd bring in the stove again for to boil the kettle and have a cup of tea." (Vince Collins)

<comment><USER5> Was also once the pattern for Irish traditional dancing, with even more wrinkles on top of that. (Churches building the parish halls, and forwarding Ceili dancing as a more chaste form of social dancing.) Newfoundland has benefited in terms of the preservation of its cultural heritage through a degree of isolation.

</comment></comment></comment></comment><comment><USER7> I really appreciate the effort that went into the performance part of this work. There was a real effort to try and make it sound like a reasonable representation of humans playing...a little off beat, out of sync at times. Instead of just hammering the notes out like I hear with lots of these systems, it makes it listenable...I've had the endless trad on for 15 minutes now in the background.

I also like how the basic structure of the musical forms has mostly carried through the model, that seems to be a good "sniff test" if the model is producing reasonable output, if the musical structure makes sense as well as the notes. It makes it feel like there was a little bit of planning.

Great work.

<comment><USER8> > _I really appreciate the effort that went into the performance part of this > work. There was a real effort to try and make it sound like a reasonable > representation of humans playing...a little off beat, out of sync at times._

That said, there's a certain ways that humans interact when they play together (even if they track their parts independently).

Just being a little off beat randomnly doesn't capture that, and can sound fake just as being perfectly on beat.

There are a few algorithms about how actual players interact, here's a relevant study: [http://scitation.aip.org/content/aip/magazine/physicstoday/a...](http://scitation.aip.org/content/aip/magazine/physicstoday/article/65/7/10.1063/PT.3.1650)

There are several more for real-life like quantization/humanization.

</comment></comment><comment><USER9> This is great! He is using deep learning as it should be used in regards to music - not as the sole generator of songs (no technique is quite up to that yet) but as a source of inspiration for a 'proper' musician, who can take it's output and do cool things with it. As a bagpipe player, I can hear ideas for several new pieces among the output he posted! I see this in the same line as IBM's 'Chef Watson' \- great if a sufficiently skilled person is there to supervise :) Good work.

</comment><comment><USER10> This seems it is almost getting it to work in a musical sense. (The Irish songs seem to be simple enough for the NN to understand it back to front, also a lot of 'similar' samples definitely helps)

The NN seems to be able to assemble the repeat sections with different endings and having a song with two distinct sections

But they seem to all be in the same key and time signature

<comment><USER11> You're point about "Irish songs seem to be simple enough for the NN to understand it back to front," is a good one. There are a number of aspects of the compositional parameters here that I think make it much easier to generate this kind of music.

Firstly, it's modal harmony, not diatonic. In this case, dorian mode in A. If you've every improvised in say, a whole tone scale, you notice that you can play almost anything and it sounds good. Modal music works in a similar way. A lot of the things you find in diatonic harmony: the tension between tonic and dominant, chord progressions in general, key changes, chromatic inflections, etc....are all absent in this kind of music. Which isn't to say anything bad about modal music, just that it's much simpler. Because of the added complexity of diatonic harmony, there are many many more ways the music could "go wrong" so to speak. Most people are so grounded in diatonic harmony that they would easily perceive even small mistakes (or statistically speaking, deviations from the norm) without necessarily being able to explain what rule, exactly, is being broken.

It's also monophonic music; there's just the one voice and no accompaniment (other than a completely static rhythmic accompaniment that was added to the performance).

Finally, even within this much simpler framework, I'd argue this tune gets it wrong in a big way: it doesn't know how to come to an end. It just sort of stops, in medias res. In a lot of folk music, you'll find that the way a tune is ended still tends to hearken back to diatonic harmony: some sort of motion from dominant (e), maybe even with a raised 7th scale degree to tonic (a) that's outlined by the melody. That doesn't happen here, which is why the tune sounds like it just got cut off.

I find these NN experiments in music generation quite interesting conceptually, but so far the results--as music--have been pretty disappointing. I suspect that you could actually build a model that would allow for algorithmic generation of folk tunes that would produce music that would probably be more satisfying. The number of rules that govern a lot of kinds of folk music are small enough that you could encode many or at least most of them in your model. [1] However, at the end of the day you'd still just have a model that would only generate a fairly limited spectrum of folk music--say Irish gigues, reels, hornpipes, etc--whereas the dream with NNs, markov models and other statistical methods is that you could plug in any corpus of songs without understanding a thing about their harmony, form, structure, melodic patterns, etc. and get back music that sounds the same.

[1] and this is really massively simplifying on my part w/r/t the varied amount of folk music out there, some of it quite complex

<comment><USER12> Folk tunes are more complicated than they sound. Jigs, reels, etc are all _classes_ of tune, with broadly similar features. But there are further sub- groupings based on date of composition, composer, and even location.

So if you feed an ML system a generic mix of folk tunes without understanding how the subgroupings work, you'll get a messy blob of musical data out. It will sound sort-of interesting in a work-in-progress way, but you will always have to hand-edit it to get something acceptable. And even then it will probably be mediocre rather than memorably great. And if it sounds at all good, you'll likely find you've created a mashup machine, not a true composer.

Really, it's like training an ML on "ballads". You'll get a few features that are similar, but everything else will be too noisy to be anything other than a crude attempt.

So I think good musical imitation is probably a lost cause, because the rules are so complex and contingent, even for "simple" music, that there simply isn't enough consistency to do the job.

At the same time the differences from the template create recognisable styles, which have emotional and other associations. So the differences are significant in their own way - but even noisier as a recognition problem.

</comment></comment></comment><comment><USER13> People interested in the history of computer-generated music should look into David Cope's experiments in musical intelligence: [http://artsites.ucsc.edu/faculty/cope/experiments.htm](http://artsites.ucsc.edu/faculty/cope/experiments.htm)

</comment><comment><USER14> This is really interesting, but it also makes the failure points of computer generated music evident. Namely: it works best with simple, "jammy" music; it requires a large existing base of music to pull from; and it has no way of using compositional techniques for rhetorical effect. (Increasing/decreasing tension, "going somewhere", expressing emotions, etc.) In other words, it can't create innovative music or music that has something interesting to say. It can only recombine the past.

I like the idea of using these tools for educational purposes, however. Can we derive the "rules" for music of different cultures by feeding them through this kind of algorithm? If so, it would give us a fantastic insight into different musical traditions around the world, even if it couldn't write that music for us.

<comment><USER15> > In other words, it can't create innovative music or music that has something > interesting to say. It can only recombine the past.

So far. I hope we'll be seeing progress on that front in the future, too.

</comment></comment><comment><USER16> The generated sniplets have a lot of pentatonic intervals. Of course pentatonics makes music more harmonic, but we are used to more disharmonics adding color. I can not look at the notes sheets, but I guess the genenerated music has less disharmonics then original Irish fiddle.

</comment><comment><USER17> it has a lot of similarity with human made trad music, but to my ear it sounds very different from music. something is definitely missing. Inflatable dolls look like the real thing, somewhat, on the surface... still a long way to go for synthetic music to fool a musician's ear, IMHO...

</comment><comment><USER18> Apologies if this is a stupid question, but what is meant by ABC tune in this context? It seems to be a method of musical notation?

<comment><USER19> Yep! [http://abcnotation.com/](http://abcnotation.com/)

</comment></comment><comment><USER20> You could use LZW or prefix trees for assisting music composition. Rather less mystification with those tools though.

</comment><comment><USER21> This type of stuff is super cool.

</comment><comment><USER2> Submitting this twice simultaneously may be causing more confusion than anything. I didn't see this one at first and only commented the other one (which seems to be magically higher on the front page):

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

<comment><USER3> Thanks. We've now merged the threads.

</comment></comment><comment><USER22> I thought web pages that automatically played sound went out with the nineties.

</comment><comment><USER19> Thanks everyone! This is Bob L. Sturm.

Pierrec and bane: My scripts are just a hodgepodge of bash and python. Happy to share (email me). I do not care much for MIDI piano; and since this music is typically monophonic, why not just use all the typical instruments? I generate the bodhran part from the MIDI and randomly choose to play a note, which kind of note to play, and whether to double up a note. I also give to each player the option to be late or early. Sometimes it gets a bit much, but is fun nonetheless.

bane: One of the reasons why I got into this music generation work is that it provides a sanity check of the internal models, just like speech recognition: look at the transcription to confirm the model is paying attention to relevant aspects. You may be interested in my "horse" article: "A Simple Method to Determine if a Music Information Retrieval System is a "Horse"" ([http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6...](http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6847693)). Another reason is that I like to compose, I like traditional music, and here we go!

Yenrabbit: Thank you! I agree completely. It is quite hopeful to believe a single artificial system will produce "music." It is merely shifting characters around according to a probabilistic model in light of constraints it has learned (such as four whole notes to a measure in common time), and it is up to musicians to "realise" it. Certainly, a lot is missing from the reduction to ABC. Music is much more than a sequence of arbitrary symbols. :)

All: you can browse all the tunes so far generated here: [http://www.eecs.qmul.ac.uk/~sturm/research/RNNIrishTrad/Sess...](http://www.eecs.qmul.ac.uk/~sturm/research/RNNIrishTrad/Session/)

Many thanks for your comments!</comment>


Why is the Dallas startup community turning on itself? - <AUTHOR> http://www.dallasnews.com/business/technology/headlines/20160722-why-is-the-dallas-startup-community-turning-on-itself.ece <comment><USER2> What percentage of those potential investors in Dallas have lived and worked in the Bay Area for a significant length of time?

What do the best of the founders expect? Do they have businesses that will still take off even without the investors throwing more gas on the fire? Or are they just looking for a pile of cash to gamble with on unvalidated hopes?

Finally, where do all these people live? Are they concentrated footsteps away from each other downtown, or are they all isolated apart from one another in the suburbs?</comment>


Type-safe routing in Spock - <AUTHOR> http://www.spock.li/2015/04/19/type-safe_routing.html

<comment><USER2> When I tried out the play framework that was one of the "woah" moment when I discovered the typesafe routing. It is really good, and it automatically generates the routes from controller methods.

It's like a whole new world of generating urls.

</comment><comment><USER3> I can't find any direct references anywhere, but from the name I can't help but compare this framework with Scotty[[https://github.com/scotty- web/scotty](https://github.com/scotty-web/scotty)]

<comment><AUTHOR> From the github Readme: "Since version 0.5.0.0 Spock is no longer built on top of scotty. The design and interface is still influenced by scotty, but the internal implementation differs from scotty's." :-)</comment></comment>


Math Every Day  - <AUTHOR> http://steve.yegge.googlepages.com/math-every-day

<comment><USER2> Sadly Yegge's solution to his innumeracy consisted of trawling through the same list of categories which presumably failed him at school. I wonder how that turned out?

There's a reason hackers tend not to be good at 'high school math' - it's incredibly dull. 90% of what most of us did in class consists of essentially running code, the stuff hackers expect the machine to do for us (so we can concentrate on the _real_ problem.)

I think solving mathematical education for the general population is incredibly hard, I wish Paul Lockhart (<http://www.maa.org/devlin/LockhartsLament.pdf>, <http://news.ycombinator.com/item?id=256176>) all the best in his efforts. But I think solving mathematical education for hackers ought to be a little easier. We are eminently comfortable with symbolic languages (consistent, testable ones - I'm not sure if many mathematical notations can make the same claim), and we love problem solving. You'd have thought we'd have a hard time _not_ becoming good at math.

Does anyone have any suggestions? How about a textbook where the methods and proofs are expressed in code, for a start?

<comment><USER3> Couldn't agree more.

One of the problems I always had with math textbooks was that you had to read them as a narrative rather than using them as a reference to dip in and out of. The reason being that most examples or formulas would use symbols defined earlier in the text without bothering to restate their meaning.

So looking up a simple formula would turn into a multi-hour trawl back through the textbook trying to find definitions of all the symbols they were using.

If only mathematicians - and textbook authors, especially - were taught to use meaningful variable names!

On a related note, if anyone does know of a good math reference (esp. for calculus!) which makes an effort to keep it's formulas self-contained, I'd love to hear about it!

<comment><USER4> I think there are two aspects to this that you might not have considered.

1) If your contact with maths is simply reading a formula out of a book and implementing it then long variable names might be fine. If you are actually trying to do a calculation then long variable names are terrible on two fronts: firstly because they take so much longer to write out, secondly because the additional characters obscure the 'moving parts' of an equation. I'd much prefer looking at "a(b+c) = ab + ac" vs "first_variable * (second_variable + third_variable) = first_variable * second_variable + first_variable * third_variable"

2) I don't really understand what you mean by meaningful variable names. Perhaps if you are using mathematics to model a specific thing then they make sense: eg number_of_people = number_of_males + number_of_females. However, mathematics as a discipline isn't about modeling specific situations, there is no "mathematics for groups of people" for instance. Instead mathematics deals with manipulating abstract ideas - do abstract ideas really have meaningful names?

If you do have some idea then perhaps you could explain how you would define a derivative with meaningful names? The best I can come up with is:

derivative(some_function(variable)) = limit small_change approaches 0 (some_function(variable + small_change) - some_function(variable)) / small_change

Does that really assist cognition more than the standard:

f'(t) = lim h->0 (f(t+h)-f(t))/h ?

btw, can you see from this example what I mean about the extra wordiness hiding the parts? (Maybe I've just used the standard notation for so long the words mess up my pattern matching.)

</comment></comment></comment><comment><USER5> And that list doesn't mention his contribution to quantum theory, that he laid the foundation of mathematical quantum theory !

He was a true genius in all senses of the word !

<http://plato.stanford.edu/entries/qt-nvd/>

</comment><comment><USER6> Learning all this is very important.

There are people out there working on problems that are either solved, easily mappable to a solved problem, or proven impossible. Don't be one of those people. Don't be one of many to reinvent <http://en.wikipedia.org/wiki/Dynamic_programming> in a new problem domain. Don't learn <http://pmbook.ce.cmu.edu/> the hard way.

</comment><comment><USER7> An oldie, but a goodie. His articles are forever destined to resurface randomly on hacker news...

<comment><USER8> Yeah, Steve Yeggie is a damn good writer.

I just don't know how he does it. All the other programmers have years of experience programming but they don't write as good or insightful as him.

I want Steve Yeggie to write a book!

</comment></comment><comment><USER9> Interesting idea of trying to force math into your everyday life. Since college, the highest level of math I've used is geometry and trigonometry, but none of it was for programming. It's only been useful a few building projects around the house.

<comment><USER10> I routinely use discrete math in "everyday, consultingware". Computer Science, and by extension programming, is fundamentally a study of discrete math. Linear algebra is another field that I use a LOT, and not just in graphics systems. If you think math isn't useful for programming, it's because you don't know enough math. I'm with the OP on this one, I _wish_ I knew more math. I'm certain it would make me a more efficient programmer.

</comment></comment><comment><USER11> This is a good blog post. But it could be about anything, and I encourage you to treat it as such (although the idea of doing this with Math is probably something many of could more or less directly use).

Stupid example. I live in a single family house. When we moved in, the yards (front/back) were full of weeds. By weeding for 1/2 an hour a week, I cleaned the front out of weeds. What was insurmountable without chemical assistance turned into a few minutes of digging in dirt (which I enjoy). Now I have a weed free lawn, which I enjoy with my family all the time (grass stains are bad, but we get this dandelion thing that stains permanently at the slightest touch).

I became a foosball whiz (ok, I've seen real whizzes, and I'm not one, but . . . let's say a 'local whiz') by practicing 15-30 minutes a day.

The only real trick is working out a way to want to engage in that activity in a sufficiently 'serious' way on a regular basis. Which is why I have a nice lawn and am good at foosball rather than, say, being good at a musical instrument.

</comment><comment><USER12> The problem I have with this self directed kind of learning is that sooner or later I always get stuck and have no one to ask questions to. For example, I'm currently going through this book on neural networks that someone posted last week (<http://page.mi.fu-berlin.de/rojas/neural/>). However, when I get to the exercises at the end of the chapter, I inevitably fail to complete some of them. Most of the time I don't even want the answer, since that defeats the purpose, but some kind of hint to get me going in the right direction would be really useful. Anyone doing a lot of self directed learning from text books with suggestions?

</comment><comment><AUTHOR> BetterExplained explains some of the math concepts in simpler terms:

Link: <http://betterexplained.com/articles/category/math/>

</comment><comment><USER13> Yah, he was sort of a paranoid dude though. I wish that he hadn't died so young, but also that he hadn't been so politically influential.

<comment><USER14> I think you are confusing him with someone else.

After edit: I'll accept the response below to what I first wrote. But I wouldn't call Von Neumann "paranoid" in the setting of his times, which included the conquest of his native country.

<comment><USER15> DannoHung is probably talking about von Neumann.</comment></comment></comment>