Personalized virotherapy in cancer - <AUTHOR> http://www.ncbi.nlm.nih.gov/pmc/articles/PMC4468308/ <comment><AUTHOR> A license agreement was established with Immuno Oncolytics: [http://axiaventures.com/news/unleash-immuno-oncolytics- enter...](http://axiaventures.com/news/unleash-immuno-oncolytics-enters- license-agreement-with-leloir-institute-to-develop-immuno-oncology-products- for-cancer-treatment-gets-established-in-saint-louis/)</comment>


Thepiratebay is down again .. showing : Could not connect to caching server 00 - <AUTHOR> http://www.thepiratebay.sx/

<comment><USER2> No big deal, happens all the time. Currently, says: "Upgrading software, please check back in some minutes."

</comment><comment><USER3> So?

Happens sometimes. Have a coffee.</comment>


My God, it's full of yaks - <AUTHOR> http://ronjeffries.com/articles/016-0607/yaks/ <comment><USER2> The problem here is MacOS. The amount of work around and hacker I've had to do on Mac far exceeds anything on Linux and more surprisingly Windows. Let that sink in, it's easier to get things to work on Windows than Mac.

<comment><USER3> Not my experience at all.

Aside from some expected path issues (builds too stupid to actually look rather than assuming a disk layout, etc) and some BSD <-> Linux issues (builds that assume all the world runs linux), I've had very little problem getting most things working on OS X.

It does help to learn what Apple has, uh, improved. This point is related to what an awful time I have getting anything to work on Windows - I hate it and don't want to learn about it.

At least in the article, there are hints that the author hasn't taken the time to learn about the platform they want to run code on. Which is fine - I feel that way about Windows[1]. But it is also a good idea to understand why you're having the problems you're having.

[1] Which is why I don't touch Win at work and the VM I run at home is a hacky mess that works for what it does, but only after a few aircraft carriers-worth of cursing and slash-and-burn hacking that I know can't be the 'right' windows-land way to do things. (The abomination is completely firewalled off from the outside world - I try not to be a disease vector.)

<comment><USER4> It's really not _that_ hard to setup a Windows workstation...

<comment><USER5> I can vouch that it was at least as of Windows 7. But I hear the Windows folks now have a proper shell and some scriptable package management!

</comment></comment></comment></comment><comment><USER6> This is why I love nix so much.

Getting a dev environment set up with nix is the usual amount of hassle. The difference is that nothing ever works by accident. Therefore, once it does work, I know I've captured all the dependencies and configuration, and I can reproduce the environment wherever I want.

<comment><USER7> I'm trying to read the docs and understand how nix works. It seems really fantastic but at the same time so radically different that it seems like it would collide with a lot of built in assumptions of Linux development.

For example, does nix play nice with CMake or config files? ie. I can just point them at the packages in /nix/ and it'll work?

Or for example, I often find myself wanting to have a few different version of OpenCV around (with different build flags) - but all version 3.0. Nix seems to make a new hash/folder when the dependencies change. Can you make make a new build/folder when the dependencies stay the same? (or specify to NOT make a new folder and to overwrite the previous compiled version - ex: you fix a bug)

I have a ton of overlapping dependencies between contracts and projects and this would be a cool tool to keep it all organized (right now in my workflow each project/contract would have it's own copy of OpenCV.. which is a bit of a mess)

(I'm totally cheering for this - hope it becomes mainstream, just wondering how "prime-time" is it)

<comment><USER6> Yeah, there's a learning curve. No doubt about that.

It does sound like nix is a good fit for your use case. You could certainly create separate environments each with a slightly different build of OpenCV. They'd share dependencies where possible, but not step on each other where they differ.

Nix provides a tool called the standard environment (stdenv), which makes compiling classical unix software pretty easy. It assumes the typical download, configure, compile, install sequence and provides the right environment to make that work. It's really flexible, with lots of hooks that let you override the default behaviour and customize the build. The Nix manual has a pretty good overview of it. [https://nixos.org/nixpkgs/manual/#chap- stdenv](https://nixos.org/nixpkgs/manual/#chap-stdenv)

<comment><USER7> oh, very interesting! I'm definitely going to look into this further. Thanks for the pointers

</comment></comment></comment></comment><comment><USER8> While this isn't a solution for many, I usually do development on a Linux VM for these exact reasons. Something not working? Boot a new VM from scratch, install necessary packages, and run it.

Usually faster than a couple days of internet searching.

<comment><USER9> That involves compromises on battery life. Why not just run Linux instead?

<comment><USER10> This involves compromises on battery life.

<comment><USER9> Well played :)

</comment></comment></comment></comment><comment><USER11> Ron is right: it's a mess. But I have a tried and true recipe for app engine python and java both. First, download the Linux cloud SDK (works fine on a mac). Then download the python google appengine SDK. Put the appengine SDK inside the _platform_ directory of the cloud SDK. Add this to your python path.

I use this framework for Python: [https://github.com/agostodev/substrate](https://github.com/agostodev/substrate)

I use this Clojure template for Java: [https://github.com/nickbauman/cljgae- template](https://github.com/nickbauman/cljgae-template)

</comment><comment><USER12> I think the real problem here is the rise of huge libraries/frameworks/SDKs along with all the dependencies they bring, and the dependencies _those_ dependencies need, etc. The problem isn't in code you wrote and should easily be able to debug, it's in the orders of magnitude more code you _didn 't_ write but depend on. There's too much complexity, too many moving parts, and it creates a fragile system in total.

But I think it doesn't really need to be that complex and involve so much yak- shaving. Around 10 years ago, when I wanted a personal web app of the similar CRUD type, I opened a text editor, browser, and the PHP documentation, and it was done in a few hours. Uploading a single file to the server was all that I needed to get it working and test it.

 _I thought I'd write this article about my experience, to try to draw some learning from it. I created the folder and the file, typed in the YAML and the first paragraph, and started Jekyll to build the html as usual._

Would it have been easier and faster to just write the HTML directly and upload it to the server instead of requiring an elaborate (despite hidden behind one command) "build" process that again depends on a large infrastructure of software?

 _Me, I just want to write programs, mostly small, that do things that may be worth writing about. And I want to write articles like this one, convert them to HTML, add them to a few indexes, and put them on my site_

My advice is to avoid all the complexity and big systems that claim to do just about everything while requiring plenty of configuration and dependencies, if all you need is something that could be much simpler. Otherwise you are "making more yaks to shave".

</comment><comment><USER13> One lesson i had beaten into me at an old job is that software should come with a self-contained reproducible build with an absolute minimum of external dependencies (which might be none at all). If GAE provided a zip file with everything in it, all set up and ready to go, you could download that and get working.

But making a self-contained build is _hard_ , so nobody ever does it.

Java has got usefully close in recent years. You can download and build a Gradle project with only a JDK and a shell installed, plus HTTP out to the internet; the project can (should!) contain a standard wrapper script which can download the right version of the build tool, and the build tool can then download the right versions of the dependencies and do the build. The downloads are cached locally so you don't download the internet on every build. The wrapper script only does straightforward stuff, so it doesn't require a particular shell or version, and the JVM changes slowly and safely enough that you can get away with being pretty sloppy about versions (ie any Java 8, 2014 - 2017+, will do).

There's no dependency on having some SDK installed, or some version of the runtime, or some build tool, or some package manager, or any other bits and bobs. Just a shell and a JDK. You don't have the problems listed in the article, and you don't have to invest time in avoiding them.

The next step would be for the wrapper to download the JDK itself, but i think that's unlikely to happen, due to bandwidth and licensing.

Once you're in the build tool, there are strong conventions about what's where. The 'build' task should do everything; 'check' should run every kind of validation possible; 'assemble' should build every artifact. Ideally, none of them should require any setup, although that requires some discipline on the developer's part.

I don't know of any good way to set up things MySQL or RabbitMQ if you need those for integration tests, which is definitely a problem. Perhaps we need a Docker plugin, so in my build i can say "to run the integration tests, download and start the following images, and inject the container IP addresses into the tests like so". The usual way to get around this is to use pure Java in-memory options for integration tests (eg H2 for a database, maybe something like HornetQ for a message queue), and you can get those like any other dependency, with no manual setup needed.

Sorry for the ramble. tl;dr yaks are bad, but there is hope for canned pre- shaved yaks.

<comment><USER14> Haskell's stack tool is aiming for something like this. All you need is the stack binary. stack will download GHC for you at a given version, and fetch your dependencies for you. The dependencies are locked to a fixed snapshot of versions. There are curated snaphots, with an LTS model that guarantees all packages in the snapshot work together, so you're insulated from package authors randomly breaking API compatibility on you, and you can upgrade to newer LTS snaphots when you're good and ready.

[http://docs.haskellstack.org/en/stable/README/](http://docs.haskellstack.org/en/stable/README/)

<comment><USER15> I'm starting to use stack for the one thing I do in Haskell. Is it really true that all you need is the stack binary? No shared libraries or anything?

When I set it up starting from Ubuntu packages, the process was still convoluted and involved bootstrapping from an older version of ghc.

<comment><USER14> It seems true on OS X and Linux. I'm not sure if it's 100% statically linked, or if it depends on a particular version of glibc on Linux. Edit: I would check, but I'm not close to a linux box.

I haven't tried it on Windows.

The download instructions say it depends on libffi, libgmp and zlib, which I didn't realise, plus some other tools (gcc, etc.) which I assume are for building packages that wrap C libraries.

[http://docs.haskellstack.org/en/stable/install_and_upgrade/#...](http://docs.haskellstack.org/en/stable/install_and_upgrade/#linux)

</comment></comment></comment></comment><comment><USER16> This is why I have always been scared of GAE. Seems like the only thing that works precisely like GAE is GAE :)

True unit tests though ought be runnable outside GAE since your code should not be coupled with GAE if it is unit testable. You still need to test your code correctly integrates with google app engine.

I would take a look at tox and py.test for testing in python, these are what I use in my normal linux environment.

<comment><USER11> GAE has some rough edges, to be sure. But once you know about them, the really hard stuff is dead easy to test. The official test stubs are awesome to work with. I live or die by them: they've never let me down. If it works with the stubs, it has always worked with the real thing.

<comment><USER16> That is good to hear! I will check out GAE next time.

</comment></comment></comment><comment><USER17> I have things to do that don't include wasting days of my life because Bozo the Developer updated something and expected downstream to just cope with the issues. Certain communities live on that behavior; its a waste of my time churning.

I would like to point to the Rust developers as ones fostering a more deliberate culture with tools and practices that manage change without exploding downstream.

<comment><USER18> Java is quite nice this way as well if you can get away with it.

</comment></comment><comment><USER19> I don't want to derail a splendid rant on yaks, but for GAE users running into this little problem of how to test and run:

We use OS X for development, for the most part, but Linux works well too.

We use nose2 with the following plugin to run unit tests: [https://github.com/udacity/nose2-gae](https://github.com/udacity/nose2-gae) . It assumes your GAE SDK is installed at /usr/local/google_appengine.

For API tests, we generally create a webapp2.WSGIApplication object during setup, configured with the routes we want to test, and we send webapp2.Request objects to that application using request.get_response(wsgi_app).

Hope that helps!

</comment><comment><USER20> One of my jobs as the person usually responsible for setting up and writing the core bits of new projects at my company is to make a build that _just works_. All most all of our core (e.g. serious) projects consist of the following steps:

* git clone

* setup.{bat, sh)

* Open IDE of choice.

* Click build button. (or run make)

The only dependencies are git, a default PC OS install (Linux, Windows, Mac), and your IDE of choice. Any project or system that can't provide that easily is too complicated by far, our non-technical CEO and sales staff can build and run our code without any help.

</comment><comment><USER21> I tried to reproduce to file some bugs, but the docs Ron linked to and the datastore_test.py[1] they in turn link to don't do "import webtest", so I guess the docs have been updated recently.

A quick search suggests webtest is part of Pylons[2]. But Pylons isn't listed as a built-in third-party library[3]. So I'm not sure if there's anything to fix.

1\. [https://github.com/GoogleCloudPlatform/python-docs- samples/b...](https://github.com/GoogleCloudPlatform/python-docs- samples/blob/master/appengine/standard/localtesting/datastore_test.py) 2\. [http://docs.pylonsproject.org/projects/webtest/en/latest/](http://docs.pylonsproject.org/projects/webtest/en/latest/) 3\. [https://cloud.google.com/appengine/docs/python/tools/built-i...](https://cloud.google.com/appengine/docs/python/tools/built- in-libraries-27)

<comment> X-Istence The Pylons Project is a larger organisation that maintains a lot of open source software, including webtest, Pylons is ALSO a web framework, but that is also unrelated to webtest.

In the authors case, webtest should have been installed separately, rather than using it from within the cherrypy source code, which seems to vendor webtest.

</comment></comment><comment><USER22> Yep. There's a reason after 20+ years that I bought this T-Shirt:

[https://teespring.com/maksesoftwarebetter2](https://teespring.com/maksesoftwarebetter2)

<comment><USER23> Great find. Okay so if 5 other people who feel this aptly visually depicts their daily lives and could click reserve on the hoodie version I would be stoked ! :)

<comment><USER24> I signed up for notifications, it's available now, for 3 more days.

</comment></comment></comment><comment><USER25> Before you start trying to draw conclusions about the general state of development, consider that Mr. Jeffries...

" _Some further very simple tweak, which I no longer remember, and the test ran … and did nothing. That's not too surprising, I guess, because there's no_

        if __name__ == '__main__':

" _which, I believe, means that no one calls the testrunner._

" _You're supposed to know that!_ "

...is also the fellow who had some trouble with Sudoku[1].

I say this not as an attack on Mr. Jeffries, but as a way of pointing out that shaving yaks is easier if you know to start with shears and not a hatchet.

[1] [http://ronjeffries.com/xprog/articles/oksudoku/](http://ronjeffries.com/xprog/articles/oksudoku/)

<comment><USER26> If I read that right... that Sudoku sllver only got as far as becoming a Sudoku board API, aka a object wrapping an array?

And the article spends more bytes talking about whether some code is YAGNI, than the amount of bytes in the code itself?

<comment><USER25> As far as I know, yes, that's where he gave up.

</comment></comment></comment><comment><USER27> I don't want to be harsh on the buy, but some of those dark corridors were in fact marked as not where you wanted to go.

>To eliminate this warning, please install libyaml and reinstall your ruby.

This line should make you think of using brew or apt-get or whatever to grab libyaml first. A few clues, the lib prefix is much more common for native libraries rather than interpereted ones. Second, the request to re-install Ruby means that this is a dependency that is required at compile time for Ruby, which rules out anything you'd install as a gem.

But maybe I just have shaved too many yaks and know what what already.

<comment><USER26> I wouldn't expect anyone to know those details, but I would expect someone to follow the directions if they want it to work.

</comment></comment><comment><USER28> I can echo GAE being hard to work with at times.

I did an app for a school project and was using Flask. At the time App Engine only had webapp and web2py available as frameworks (maybe it's different now) so a bit of shoehorning was necessary to get Flask working, and Flask was relatively young at the time so there weren't a lot of examples out there of the two technologies being used together. I recall having a lot of trouble working with GAE's file upload API.

</comment><comment> X-Istence As the current maintainer of WebOb it pains me to see Google App Engine shipping 1.1.1 by default, and 1.2.3 as one that the user can select.

</comment><comment><USER29> I'm glad Docker solves this for me, at least at the company I just joined. One of their microservices has tons of dependencies, including npm modules, databases, testing frameworks, and so on. Most people would scoff at using Docker as a glorified VM, but it honestly does the job, with much less overhead vs VMs.

</comment><comment><USER30> yeah it's a mess. Modern developer has to know and understand language semantics and ecosystems of Python, Ruby, Java, C, Lua, Javascript and sometimes these are not the main languages of her work. Add to it things like Clojure, Erlang, C++, C#,F#, Purescript, Typescript, Elm, Mathlab... you get the idea

</comment><comment><USER31> You Python developers have it easy :) Developing in Java on AppEngine adds an additional herd of yaks to the meadow.

<comment><USER32> The Go variation seems pretty good, though. (Or maybe I've just gotten used to it?)

<comment><USER15> I just recently installed a piece of software written in Go, from source, on Ubuntu 14.04. It wasn't so nice for a non-Go-programmer.

The instructions wanted me to download a binary tarball of Go and untar it directly into /usr/local. As if I would never need to uninstall it. Apparently even though the version of Go has changed several times since Ubuntu packaged it, they think this will be the last version ever, or something?

I ended up hunting for an Ubuntu PPA that had it instead. Of course all the accepted answers on Stack Overflow point to PPAs that don't exist anymore. A comment sitting at some tragically low score saying "hey, try this one instead?" pointed me to something that worked.

I think you dealt with it the first time and you've gotten used to it. (And maybe there's some nice way to get a newer version of Go when you already have Go.)

<comment><USER32> I'm not sure I understand the problem. Renaming the old directory to go.old and installing a new one seems pretty easy to me, but apparently not?

BTW, you can put the Go SDK anywhere you like, as long as you set GOROOT. See "custom location" on [https://golang.org/doc/install](https://golang.org/doc/install)

<comment><USER15> For reference, I'm referring to the directions you get at the top of the search results when you type "installing go on ubuntu" into Google.

The directions link to Stack Overflow, though I don't know how the search result picked out these steps, as Stack Overflow has a different accepted answer that doesn't work. Intervention by Google, possibly?

I didn't realize it would only make one directory. That is reassuring. I would still prefer packages as a way to install, upgrade, and remove Go, instead of remembering months from now that Go is installed differently from everything else and there's this directory I need to mess with.

Now, that all would have been more intuitive as something to do in my home directory. If it only needs one directory and it can go anywhere, why would these Google-blessed directions tell me to mess with /usr/local? I believe you, I just assumed that people would be averse to messing with system files without a package if there were any other option.

(I think of Python, where the one thing you're supposed to do with your system Python is use virtualenv to install a non-system Python. Which is another example of something that's only clear to veterans of the language.)

Now... this is a problem with a whole lot of programming languages. Programming languages change. Their libraries change way too fast for an OS- approved package manager to keep up, so you need a package manager for your language. And that changes too, and nobody designs their packaging system to smoothly update to a better packaging system designed by someone else.

Maybe one day every programming language and OS will unite under one purely functional packaging system and never replace it... haha, no.

</comment></comment></comment></comment></comment><comment><USER33> Seems to me the problem is layers of "automagical" systems for locating dependencies. That in turn end up clobbering each other in various ways.

</comment><comment><USER34> This is nothing. Ramp-up time at any software shop with more than 2 engineers is months. He had a really easy time from where I stand.

<comment><USER35> You need to get into better software shops!

<comment><USER34> They don't exist. Software is an awful business.

</comment></comment></comment><comment><USER36> It really is full of yaks! [0]

[0] [https://github.com/search?q=yak&type=Code&utf8=%E2%9C%93](https://github.com/search?q=yak&type=Code&utf8=%E2%9C%93)

</comment><comment><USER37> MacOS does not seem to be very developer friendly.

<comment><USER38> I'm curious what the failure of MacOS was in this instance. This comment at face value seems like you're trolling.

<comment><USER39> The intermixing of macos python and brew installed python has been painful for me in the past.

Specifically, I spent hours and hours trying to fix

       import matplotlib.pyplot

producing

       ImportError: cannot import name _thread

but only in ipython, not the interpreter. (HAHAHAHA fuck you developers).

A ton of googling and swearing produced the fact that a package named six that does god knows what was being read out of

       /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six.pyc

instead of

       /Library/Python/2.7/site-packages

rm -rf'ing the former path fixed things, but fuck only knows what else I may have broken. Just because I want to plot things from ipython.

ps -- 6 months ago the above used to work. Why did it stop? I have no bloody idea. But this consumed multiple hours of my life.

<comment><USER40> Seems like this would have been straight forward with a virtualenv?

<comment><USER41> Yup. Really, no OS is developer-friendly if you're going to mess with the system Python interpreter, because the system Python interpreter exists to serve system software written in Python. You can easily get yourself into very similar problems with Debian or Fedora or whatever else.

Install a virtualenv, and on OS X, maybe install Python from python.org, and then everything works amazingly.

<comment><USER39> After I learned more that was probably the right thing to do, but I'm not a python dev. I just want to use sklearn, pandas, and associated tools. I'm not sure what the smooth path to doing that is. At various times people recommend macports, brew, anaconda, and so on... Note that compiling numpy from source sucks, and I'd much rather someone else do so.

<comment><USER41> There are now wheels (binary distributions of Python modules) of numpy, scipy, and scikit-learn for both Linux and Mac OS X, so it should just be a matter of `virtualenv /tmp/v` (or wherever), `source /tmp/v/bin/activate`, `pip install -U pip` to make sure your pip is new enough to handle wheels, and `pip install numpy scipy scikit-learn`. Nothing gets built from source. Unfortunately the same can't (yet) be said for pandas; `pip install pandas` at this point will try to compile it.

Actually _acquiring_ virtualenv on OS X seems not to be super straightforward, especially if you want to use the system Python interpreter. The best option seems to be to `brew install python`, and then `pip install virtualenv`. Or download Python from python.org, and maybe get Python 3 while you're at it.

<comment><USER42> one way is to get a standalone python and git clone virtualenv, then use the standalone python to make virtualenv for each project.. this leaves out anything to do with the system python</comment></comment></comment></comment></comment></comment></comment></comment>


[Show HN] Engem.me - Give your LinkedIn profile a visual facelift - <AUTHOR> http://engem.me

<comment><AUTHOR> Engem is a small little web app that I have been working on lately and it helps you give your Linkedin profile a visual facelift.

The core idea with Engem is that presently your LinkedIn profile doesn't tell much about you (and it doesn't look good either). If you see your LinkedIn profile, you will notice that apart from ads, a lot of the screen real-estate is used up by sections like "Viewers of this profile also clicked on". If you are sharing your profile with someone (for example a recruiter), these sections are not of any importance to you (or him).

I believe that this is where Engem comes in. It helps you showcase only the stuff that you want people to know about you and it does so in a visually appealing manner.

Here's the link to my profile - <http://engem.me/bharani-muthukumaraswamy>

Let me know what you think about this. Looking forward to your feedback and inputs.

</comment><comment><USER2> It's pretty cool and easy to use, but completely removes formatting for the "Professional Profile".

Eg. my engem.me profile: <http://engem.me/doug-barrett> and my linkedin: <http://www.linkedin.com/pub/doug-barrett/53/118/445>

<comment><USER2> Also, I tested out "send email" and I haven't received the e-mail yet.

PS. Nice use of Zurb Foundation :) I'm using it on an little web app I'm currently working on also.

<comment><AUTHOR> Thanks for trying it out Doug! I will try to fix these issues shortly.

PS. I absolutely love Foundation!

<comment><USER2> No problem, I was thinking of doing something similar to what you've done, but you've really gone above and beyond what I was originally thinking. Best of luck!

</comment></comment></comment></comment><comment><USER3> I really liked your resumonk. www.resumonk.com My score 85/100

Coming to engem (70/100)

I want myself to customize fonts(style+size) Sometimes I donot want to show users my area/industry or no. of connections. I donot have a pic on linkedin, but it shows a broken image on engem..

On top of everything, this was a really good attempt.. Keep going

<comment><AUTHOR> Thanks a lot for the review. I will try to fix all the bugs that you mentioned.

</comment></comment><comment><USER4> Very cool. Reminds me a little of <http://flavors.me/>

<comment><AUTHOR> Thanks. Yes, It is somewhat like Flavors and About.me but I think your Engem page would tell a lot more about you than than the snippet that Flavors shows.

</comment></comment><comment><USER5> >We're sorry, but something went wrong.

<comment><AUTHOR> On the landing page? It seems to be working properly. I'll check again.

<comment><USER5> after linking my profile, sorry i should have specified. It appears to have linked it anyway...but why do I have to create also another account if I already logged in with linkedin?

<comment><AUTHOR> You need to enter your email/password after Linkedin auth so that I can send you the emails that you get via your Engem profile.</comment></comment></comment></comment>


Crowdsourced home page - <AUTHOR> https://github.com/robashton/crowdsourcedhomepage

<comment><USER2> I can see this ending in a not-so-good way. It's all fun and games until someone uses the marquee tag (they've already used it). Cool idea, but you can't trust the internet as a whole to always do the right thing in situations like this. Kind of reminds me of this burger place a friend worked at, they had a few around the place with TV screens displaying Tweets. You Tweeted and they literally showed up on the screens at all store locations, they weren't checked or anything which made for an interesting situation when a competitor started advertising their own company through the burger chains account in- between people Tweeting profanity and jokes like, "Don't eat the secret sauce, it's not mayonnaise".

It'll be interesting to see how quickly this gets out of hand. Good luck.

<comment><USER3> I can't see this ending anything other than in a positive way

<comment><USER4> I agree.

</comment></comment></comment><comment><USER5> I just did a commit to start a css preprocessor war: [https://github.com/robashton/crowdsourcedhomepage/commit/1d0...](https://github.com/robashton/crowdsourcedhomepage/commit/1d001fd460e8437dab8864d57715008e25a84648)

<comment><USER2> Challenge accepted. I just added in Stylus. Arguably the best CSS preprocessor out there. Period.

</comment></comment><comment><USER6> I got banned :(

To be fair, I deserved it.</comment>


Billionaire promises to pay off student loans for graduating class - <AUTHOR> https://edition.cnn.com/2019/05/19/us/morehouse-robert-smith-student-loans-trnd/index.html <comment><USER2> I'm extremely conflicted about this kind of thing. On the one hand, student debt is extremely burdensome and the system in the U.S. is terrible. This was also obviously very generous.

But a one-off donation like this leaves me wondering how it must feel to be someone who graduated from Morehouse last year or will graduate next year. It just reinforces the idea that getting ahead in the U.S. is often really a matter of luck or, worse yet, the whims of oligarchs.

I wish the U.S. wasn't so consistently operated like a giant series of perverse lottery drawings around race, genetics, birthplace, schools, etc.

</comment><comment><USER3> I need some good news today.

</comment><comment><USER4> A real life Scott's Tots.</comment>


Drawers - <AUTHOR> https://medium.com/@Drawers <comment><USER2> If it meets the guidelines, this might make a good "Show HN".

Show HN guidelines: [https://news.ycombinator.com/showhn.html](https://news.ycombinator.com/showhn.html)

</comment><comment><AUTHOR> [https://medium.com/@Drawers/introduction-to- drawers-b4c07fcb...](https://medium.com/@Drawers/introduction-to- drawers-b4c07fcb7bb4#.ca9o0hib5)</comment>


Notify by Facebook is a Hooks clone? - <AUTHOR> http://novobrief.com/hooks-app-notifications/ <comment><AUTHOR> Hooks is doing the same for 1 year now and already has 300K+ happy users, more topics and sending almost 2M notifications a day to happy users.

Actually we are very happy here at Hooks to welcome Facebook in the real-time notification era. Now it's going to get much more attention so it's good for us.

What do you think?

<comment><USER2> Well, depending on how optimistic you wake up, this is either a disaster or pretty good news for Hooks :)</comment></comment>


Badger.com is Shutting Down - <AUTHOR> https://www.badger.com <comment><USER2> At least I learned my lesson not to pay in advance to service providers of that kind. Since I do not expect getting anything back, drawing the line now, I have payed them $30 / year on average for a simple .COM domain. Pretty sure I am not the only one so that also explain how they were able to give domains for $5 or even for free to others.

</comment><comment><USER3> This clears up why they haven't been responding to support emails for a while now.

<comment><USER4> Yeah, I've been waiting for this email since June, when their DNS servers stopped responding and support was nowhere to be seen.

</comment></comment><comment><USER5> These guys tried really hard to disrupt the domain business, even if they didn't always succeed perfectly. They made mistakes, but this kind of thing is how growth happens for entrepreneurs. I wish them good luck.

</comment><comment><USER6> For a moment I thought it was all over for the timeless & endless [http://www.badgerbadgerbadger.com](http://www.badgerbadgerbadger.com)</comment>


Ask HN: How to handle interview when you do not think like other programmers? - <AUTHOR> Throwaway account for obvious reasons. I've had a lifelong passion for coding. If I hit the lottery, I would be coding. Since about 4th grade, it's all I've known.
I've never felt that I had the same "goals" as other programmers. I like to make stuff that solves a real, concrete problem. I like it when my code runs for a long time and doesn't make any logic errors. I'm great at docs, debugging and code maintenance.  I love to learn, but I love to make stuff work.
I'm really good at reverse-engineering. I'll use netstat to see who is talking to what, and on what ports, and at what times. I like to create documentation when it doesn't exist or it is wrong. I like to share what I've learned. I'll go to great lengths to get factual information.
I feel that I can do almost anything. If I don't know something, I'll go to great lengths to learn. If I need resources, I'll find them. But I struggle to get my knowledge, talents, and passion across to other programmers.
For example:
Interviewer: Tell me about a project you did.
Me:	I saw a need in our business. There was valuable data in a system that no one could get to. The data was of great use to the business if the right people could see it. I wrote a Java program that connects to <foo> API and loads the data into <bar> database. I wrote some PHP pages to display charts and graphs based on my knowledge of the business problem domain. I profiled my code for memory leaks. I made it very fault-tolerant. The code I wrote stayed up for months at a time. I wrote several layers of monitors for the application. I get paged immediately on my phone if anything goes wrong. Everyone was thrilled.
Interviewer: What version of Java did you use?
Me:  1.7
Interviewer:	Why didn't you use Java 1.8? It has lambda expressions. Why PHP? Why didn't you use AngularJS? Clearly you don't know how to code and are useless.
-----
I don't know how to "defend" myself when the interview goes this way. What should I do? <comment><USER2> There exist many companies which quietly make an awful lot of money and which employ people much closer to you than to the stereotypical Silicon Valley Mobifotosocialgame Hipster Programmer. Get a job at one of them.

<comment><USER3> Absolutely. There is nothing wrong with the interview that you describe. You are learning exactly what you need to learn. Better to learn it today than six weeks into the job.

It _is_ important to be polite, though, so to make it out of the room the usual talking points are:

1\. "Our lousy platform was [mandated by management/chosen before I arrived], but I cheerfully got the job done with the inferior tools at hand."

2\. "Our mission-critical legacy codebase made change difficult, but at least it was stable and made the company millions of dollars."

3\. "I've heard of [interviewer's favorite magical tool] but I was so busy holding the widget factory together that I never had the time to research it and be sure it would solve my problem. Tell me more about [magic]! I've always wanted to work with the sort of brilliant yet sensitive person who uses [magic]."

Then shake hands, smile, leave the room, turn them down the next day, and get a job with a company that values you.

(You may find, however, that talking point #3, a tactic that comes straight from Dale Carnegie, makes your interviewers fall over themselves to hire you. Everyone loves to be invited to explain their favorite things.)

<comment><USER4> This is great.

A lot of people forget that interviews are two-way streets.

If the company culture indicates that you won't be valued, look somewhere else.

In this case specifically, I'd rather learn how to provide value than use some shiny new tool. It's much easier to learn the new tool.. that can be done when you need it.

</comment></comment></comment><comment><USER5> If the interviewer is truly confrontational (as in, you're being asked something like "why did you do stupid thing A when thing B is clearly better"), then you're better off not working there.

However, I'll often ask questions similar to those you posed (without thinking/telling the candidate he's useless, of course).

Let's take the "why not Java 1.8" example. If I asked you that, and you were prone to being defensive, you might think I'm attacking you. In reality, though, I'm just probing for more information. Are you familiar with Java 1.8? What would be the benefits/drawbacks of using it? If you can explain why Java 1.7 is fine for your project (I don't know Java, but I assume there are good reasons not to use the latest version), then I'm satisfied.

Basically, my goal is to learn as much as I can about you. This often involves direct questions. When I'm asking direct questions, I'm not attacking, and I suspect it's the same for many interviewers.

</comment><comment><USER6> Wrong company / interviewer for you. Just move on.

That said, here's how I would answer: 1.7 because of legacy and potential stability reasons, and I will evaluate 1.8. I need to make a case for upper management and demonstrate there's a significant performance increase to justify the time required.

Ask the interviewer what he's refactored recently with lambda expressions.

For PHP/AngularJS, you can always joke about PHP and how much you want to switch to the next hip language. Unfortunately the mysterious previous developer picked it and you have to stabilize it. You will switch.. (eventually.)

For Angular, just say there's 30 other frameworks and you will get to it in due time. You can mess around and point the interviewer to that Todo list examples ([http://todomvc.com/](http://todomvc.com/)) and ask him why not the other 29?

You can always turn it around and ask them why they went with AngularJS instead of some other framework.

When I interview engineers, I do ask why AngularJS? I do this because I'm curious about their choices. Was it driven by hype or did they have a legitimate problem that was solved by the framework? I'm trying to have a technical discussion here and I'd rather do this than ask some random coding question. Given the limited context of your experience, I can't tell if the interviewer was being malicious or genuinely curious.

Hope this helps.

</comment><comment><USER7> They just want you to explain your reasonings. They aren't really interested in if you're "right" so much as how you got to your conclusion (e.g. "I decided to use Java 1.7 because of XYZ.").

Random aside: You should look into Aerospace Engineering/programming. You sound like you'd enjoy that type of development (functional programming, huge amount of docs, huge amount of testing, entirely fault tolerant end to end, etc).

<comment><USER8> As an interviewer, if I heard

* someone picked java 1.7 because 1.8 is new and she or he wants to let some other suckers find all the crappy bugs in it (remember when 1.7 made lucene crap itself? I'm sure someone got to have some fun times with that, and I'm glad it wasn't me.)

* or she or he chose php because it was fast, easy, and had easy access to charting tools (I dunno if this is true or not) and for an internal dashboard what does it matter...

* I already know how to use it and can get the work done very quickly (always a _great_ reason); there's no such thing as software finished too soon

* the company already has a large codebase in X and I wanted to say in the same language, libs, and deployment tools

I love people who say I like to lag versions a year, because it means they've been burned, learned the lesson, and want to let someone else do the debugging. You'll more likely than not get a strong hire vote from me. As parent said, it's about explaining why you picked something.

</comment></comment><comment><USER9> Don't bother. Target your applications toward the companies and roles that value the same things you do. If an interviewer harps on Java 1.8 vs. Java 1.7 while you want to talk about reliability, netstat, and performance problems, that's a sign that it's probably not a good fit for you.

"Not thinking like other programmers" is very often a good thing, but remember that the world is very broad, and there are probably programmers out there who think like you do. And even if you can't find them, there are also organizations out there that respect and need different talents, and you should find _those_.

</comment><comment><USER10> Seems to me that you were being interviewed by a technocrat not a business person. My reading of the interview suggests to me that you are a person who can see an opportunity for business improvement and implement a valuable and reliable solution.

If this project is representative of how you look at the world, then maybe you should be focusing on how you can solve business problems. That is you are valuable for that level of insight and execution. Arguing over Java 1.7 vs 1.8 and PHP vs AngularJS doesn't increase business profits and doesn't recognise your true skills.

</comment><comment><USER11> You should say "I used PHP because I wanted to use something I knew completely, rather than learning something new with unknown properties wrt fault tolerance." "I used Java 1.7 because Java 1.8 wasn't around at the time for the platform we're targetting."

If you can't come up with answers like that on the fly, you have bad "people skills" and are fucked. Interviewers doesn't care what technology choices you made, they just want to see that you'll fit into whatever little herd of programmers they are managing.

</comment><comment><USER12> Ask the interviewer if he wants you to use your employment at his company to learn the latest technology while working there so that you can leave for higher-paying work, or does the interviewer have actual business-related problems that need solving? Does the interviewer want to turn his company into "programmer university", or does he actually want to get shit done? Does the interviewer realize that the same problem can be solved in multiple other technologies and techniques? Is the interviewer using HIS time there to turn it into "personal programmer university" for himself so that he can bail soon, and is looking for a co-dependent rationalization? Does the interviewer have ACTUAL DATA showing that using the newer technology is: 1. faster to code, 2. less risky to code with, 3. less expensive to find developers who know it?

Does the interviewer want to make the answer to the question that nobody asked, or does he want to contribute to a company that has revenues?

</comment><comment><USER13> Actually, you sound very much like me, and I had a successful programming career before becoming disabled. As noted by others, you perhaps could improve your verbal interviewing skills, but interviews like this one are useful for filtering out companies you'd be unhappy at (and I'd add a good fraction of the technically doomed ones).

However I'll note that's one caveat to your "can do almost anything" concept: learning new _paradigms_ , like functional programming if you only know imperative and OO (for me, learning OO when I only knew the other two), can take longer than most reasonable companies will be willing to give you.

Since you do know imperative and OO, if you don't know functional programming it could be worth your while to learn it on your own. Try something like SICP and you'll probably learn a few other worthwhile things.

</comment><comment><USER14> "1.7 met the needs of the project. We considered 1.8 but decided that it wasn't necessary and that taking on the training costs during development, and fracturing our platform, would not be a good trade-off to make."

</comment><comment><USER15> > I don't know how to "defend" myself when the interview goes this way.

Don't.

In the example above, I would not want to work with coders who think like that, and it sounds like you would not want to either. So if you don't pass their interview process, consider it a win!

Keep looking, and if you are capable, you will eventually find an environment that fits.

</comment><comment><USER16> I would listen to my inside voice. The statements made by the interviewer were condescending and disrespectful. I would hold out for a company that respects and values; and realizes the great qualities I hold.

</comment><comment><USER17> Redirect the conversation to what's important.

Like (a) asking what problems the company has that need to be solved, (b) how much more productive than the average software engineer you are, and (c) that you are _determined_ : that you'll solve any problem, learning what you need as you go.

When someone asks a silly question, like why Java 1.8 instead of 1.7, your attitude shouldn't be to defend yourself as having made an Oscar-winning choice. Your answer should be the most comical, borderline embarrassing answer, because it will fulfill the possibly momentary psychological desire of the interviewer to feel they are right. But it should also be an answer that indirectly embarrasses the interviewer too for having asked it. You could say Java 1.7 would have caused the least trouble, and then point out that e.g. if you missed next week's release the company would have lost it's number one customer and shut down.

Plus, if what the interviewer wants is to show off superiority, let them. If you do that, you get the job. The interviewer isn't necessarily a bad person, and they might realize how stupidly they acted and shapen up. (Of course don't work there if they don't.) The more general advice is don't oppose forces, for the same reason trees let themselves bend when it's windy.

If you are unsure or feel cornered over silly stuff, say "I'm not sure that's the biggest problem to solve, or the one that will generate the most value for the company." If you have ideas of what that is, then go on to describe them.

In short, push back.

But _don 't_ push back the way a suit pushes back with some general, phony sounding, evasive statement like "well, I don't know how that affects some of the stakeholders." Be _specific_.

(Don't think of pushing back as doing something bad. Think of it as being more open-minded than the other person. You are considering data they are neglecting. It's part of being a good designer. Corollary: make an effort to consider other people's ideas, else you'll be the one who is narrow-minded.)

If I had only one piece of advice it would be: focus on the root of the problem. Hint: more often than not it's not what it appears to be, but it's some other problem hidden five layers deep.

For example, if an aggressive interviewer says "Clearly you don't know how to code and are useless", then clearly the problem is the interviewer, and the way you can pass the interview is to tell the truth. That he is the problem. But -- to do it indirectly, with humor as a lubricant. Start from the very first word: "clearly". Don't give them an inch.

You say something along the lines of: "Well, it's dangerous to make absolute statements, you know, to say "clearly", or "always" or "never". Not just because there's always a chance one could be wrong, but mostly because I noticed with myself that when I do that it's often to counteract something I subconsciously know is true. Else I wouldn't be finding the need to try hard to qualify what I say. I'd just say it. And you know what, I regret it eventually. It's strange how the subconscious works. I keep being surprised at how things aren't always as they seem. But I'm willing to learn."

In this way you address the root of the problem: the interviewer is aggressive without even realizing it. You identify how one can tell they are acting in ways they haven't realized: by making absolute statements. You show humility: you explain this is something that happened to you before. You allow for the interviewer to feel superior: because you just explained a mistake you made. You didn't budge; you stopped the conversation right on the first incorrect word: "clearly". And indirectly you push back: by making the interviewer look like a fool (because everything you just said about yourself could also be said about the interviewer). The problem isn't the Java version. Don't talk at all about any tech there.

Be humble. Be empathetic with people's faults. But the way out is following the truth, even if that means that you made a mistake or you need to learn something new. _ALWAYS_ look for the root of the problem. If it feels hard to do, that's precisely your cue that you should do it.

And if the interviewer or company still don't get the hint, then forget about them. They can't tell what's important.

</comment><comment><USER18> "I like to make stuff that solves a real, concrete problem."

How does the idea of spending 30% of time on refactoring sound to you?

</comment><comment><USER19> Why are you trying to think like other programmers? Why aren't you trying to find programmers that think like you?

</comment><comment><USER20> FWIW every company I've worked at would be glad to hire someone that gave an answer like the one you gave.

</comment><comment><USER21> Your answer sounds pretty good to me. The interviewer sounds a bit of an idiot.

</comment><comment><USER22> I had interview similar to this last year. I was interviewing for back end engineer. I know SQL, Java, Python and Data warehouse fairly well. Guy interviewing was some Indian who always lives in his head. He started asking me deep Administration questions when role was clearly for engineering. I know some superficial DBA stuff but I am not DBA. Than rude stupid asshole was clearly not paying attention when I was answering questions. This is not something against Indian people but here is general piece of advice. \--> be polite

\--> don't copy and ask questions posted on internet.

\--> don't live in your head and assume you know everything.</comment>


BeatSync: A new online music community - <AUTHOR> https://beatsync.co <comment><USER2> I wish there was more of a preview to see how BeatSync works.

How will BeatSync be different from Soundcloud? And what's the revenue plan? Hopefully different from Soundcloud's.

<comment><AUTHOR> Hi, firstly, thank you for your interest.

Now, to answer your question. We are planning to implement a few features that for what ever reason SoundCloud has failed to implement, features that we deem crucial to a community. We aim to be a as transparent as possible not only in the development process but also new features and any/all suggestions will always be welcome.

As for the money, well this is something we are still figuring out, we have a few ideas. What ever we decided we need to be careful not to ruin the experience for anyone.

There will be no comprise on quality.

Initially, especially during early access the platform will be free for all!

There will be public/private forums as well as the ability for artists to create multiple profiles under one account for their alias but also finer permissions so labels/management etc can also post on behalf of the artists and much much more.

I hope this answers your question? Even if it's a little vague? We don't want to give away too much too early.

Sign up to our early access and once we are able to tell you more we will!</comment></comment>


Show HN: Wordcraft: Learn vocabulary through Latin and Greek roots - <AUTHOR> https://itunes.apple.com/us/app/wordcraft-advanced-vocabulary-trainer/id1276346673?mt=8 <comment><AUTHOR> We just released this iOS app that teaches vocabulary through Greek and Latin roots, which are the modular building blocks of about 25% of English. We developed the method in NYC public schools and are building a web platform for classrooms as well.

Open to all ideas and feedback. Thanks for checking it out.</comment>


The release management tug of war pushing DevOps and Puppet Labs to the fore - <AUTHOR> http://sdt.bz/64031

<comment><USER2> It will be interesting to see the industry change over the next 2-3+ years, mainly with the devops movement turning infrastructure into a software development project. If anyone is interested, I've put a screencasts about Puppet @ [http://sysadmincasts.com/episodes/8-learning-puppet-with- vag...](http://sysadmincasts.com/episodes/8-learning-puppet-with-vagrant)</comment>


Large collection of Nazi artifacts discovered in Argentina (2017) - <AUTHOR> http://www.dw.com/en/large-collection-of-nazi-artifacts-discovered-in-argentina/a-39321775 <comment><USER2> The users unable to contain themselves without launching into Nazi-swastika- flamewar make it impossible for HN to discuss this at all.

<comment><USER3> Like George Carlin said, "Symbols are for the symbol-minded."

</comment></comment><comment><USER4> The injustice aside, I wonder if Nazis fleeing German might have had the side effect of making German reconstruction easier while limiting those who fled into making chocolate in Bariloche under fake names.

But on the other hand there was Klaus Barbie.

<comment><USER5> That's unlikely...

Those who fled probably did so for a reason, namely the fear of serious prosecution. They would have had a rather difficult time to continue exerting any influence after '45\. It may have had an influence in reducing the number of trials and possibly resentment in the German population, but from what I gather there wasn't ever a risk of widespread open disagreement with the Nuremberg trials etc.

In a certain way, the most significant effect on reconstruction (and de- nazification) may have been their use as a reservoir for prosecutions in later years. The Eichmann trial, for example, had a lasting positive influence for German-Israeli relations, provided us with one of the most meticulously researched accounts of the bureaucrats' guilt, and an excellent treatise on responsibility. In Hannah Arendt's seminal work "The Banality of Evil" it changed the narrative from "Some Germans were evil" to today's "it happened once, so it can happen again".

The dark truth of de-nazification was that large parts of the German upper- middle class almost seamlessly continued their careers after the war. There were simply too many to prosecute them all, or even to shut them out of leadership positions. The rise of the cold war also changed the incentives for the western powers to quickly rebuild the country's economic and political strength. A few hundred or thousands in Argentina simply didn't matter in the grand scale of things.

</comment></comment><comment><USER6> is it weird to find them fascinating? I am a millenial and WW2 and its horror is something that I have learnt, but to meet survivors (of holocaust) and surviving items is very exciting.

</comment><comment><USER7> It's weird to read "The haul provides more evidence of the presence of high- ranking Nazis in South America." I thought this was well-known?

</comment><comment><USER8> These are historical artifacts now, right? Is it illegal in Argentina to own things like that? I can see the reasoning if so, just curious.

<comment><USER9> It is indeed!

<comment><USER10> Which part is illegal? The historic artifact bit or the Nazi bit? It seems weird to have so many resources dedicated to tracking down someone collecting hour glasses and statues.

</comment></comment></comment><comment><USER11> (2017)

<comment><USER2> Thanks. Added.

</comment></comment><comment><USER12> Is there anything sadder or creepier than an hourglass with a swastika on it? What a horrible time for humanity.

<comment><USER13> Although I don't believe this is worse than the injustices of generations past, it's certainly sad to witness politics in 2018 contain a plethora of virtue signalling, charades, and ineffectual action. We support the killings of innocents with our military industrial complex, and our media tells us its necessary because otherwise we will lose jobs[1]. Where is the investigation of 500 million missing dollars of charitable relief to Haiti[2]? Not to mention, where is the media coverage of the CLOUD act, and why did congress underhandedly sneak a law that harms Americans rights into a "must pass" omnibus spending bill without[3]? The war on drugs and prison state? Or any of the homeless crises? Unjust and corrupt healthcare and public health? Cities with murder rates higher than anywhere in Africa or the Middle East? Surging suicide rates[4]? And we are just scratching the surface here, and when you get to the bottom there are things you can't even talk about, like human rights for Palestinians[5]

Tyranny, injustice and oppression were not simply eliminated at the end of WWII. And living today to witness the convenient virtue signalling about a historical artifact of a long-defeated tyrant, juxtaposed with the willingness to tolerate current injustice, is really sad.

But isn't that what made Nazi Germany possible? Our willingness to tolerate injustice, so long as it doesn't happen to us? Our desire to follow authority --to serve in the court of despots? That is the irony here, which calls to light the real meaning of this kind of virtue signalling: If we lived under the reign of any of those _other_ tyrants, in Imperial Japan, Nazi Germany, or wherever, _would we all suddenly be among activists, not just mere virtue signallers championing the virtues of our leaders?_

I don't mean to come down hard on you personally; I just personally wish to see the conversation move away from moral grandstanding to moral responsibility.

1 - [https://theintercept.com/2016/09/09/wolf-blitzer-is- worried-...](https://theintercept.com/2016/09/09/wolf-blitzer-is-worried- defense-contractors-will-lose-jobs-if-u-s-stops-arming-saudi-arabia/)

2 - [https://www.npr.org/2015/06/03/411524156/in-search-of-the- re...](https://www.npr.org/2015/06/03/411524156/in-search-of-the-red- cross-500-million-in-haiti-relief)

3 - [https://www.eff.org/deeplinks/2018/03/responsibility- deflect...](https://www.eff.org/deeplinks/2018/03/responsibility-deflected- cloud-act-passes)

4 - [https://mobile.nytimes.com/2016/04/22/health/us-suicide- rate...](https://mobile.nytimes.com/2016/04/22/health/us-suicide-rate-surges- to-a-30-year-high.html)

5 - [https://theintercept.com/2018/04/02/israel-killing- palestine...](https://theintercept.com/2018/04/02/israel-killing-palestine- civilian-liberal-humanitarian/)</comment></comment>


Why isn't there a Google Chrome app for surface 2? - <AUTHOR> http://answers.microsoft.com/en-us/windows/forum/windows_7-windows_programs/why-isnt-there-a-google-chrome-app-for-surface-2/ab304c64-c049-43a8-b359-a4ac69613e2d

<comment><USER2> Lol why would you ask Microsoft this question? It's Google's decision to make an app or not.</comment>


Aging is associated with a systemic length-driven transcriptome imbalance - <AUTHOR> https://www.biorxiv.org/content/10.1101/691154v1.full <comment><USER2> A reason to take this with a grain of salt: transcript length is the biggest technical effect in RNA sequencing. Longer transcripts get broken into more fragments and get sequenced more deeply. What this means is that if you perform any experiment you tend to get a "length effect" of some sort. The second feature they mention in the GTEx data is GC-content, which is probably the second biggest technical bias in RNA sequencing and again basically any experiment has a "GC-content effect" of some sort. But I don't interpret those as meaning that there is something directly acting on long transcripts or high-GC transcripts, rather that whatever is happening biologically ends up appearing as a length or GC effect after sequencing. It's a little fishy that the only features they find are features that I would expect to always find.

The most compelling reason to think that's not simply the case here is that seem to be noticing a consistent _downward_ trend across all long transcripts with age which is more compelling than merely noting that long transcripts change (some up and some down).

<comment><AUTHOR> It's a good point. Why would the length effect you describe be be associated with age, across many organs, cell types, datasets, and species? The technical effect would be a good explanation for this finding in one dataset, but it seems unlikely that many datasets would have a technical length effect that correlates with age by chance.

<comment><USER2> What I'm saying is that it looks like there's _an_ effect and that effect is visible as a change in expression vs length but that I wouldn't expect it to be too related to length in a meaningful way biologically. If you take one population of transcripts and another and you measure the lengths, it's likely that you'll see a shift in the median - regardless of whether length is important, particularly due to the specific ways in which length relates to sequencing depth. And on top of that, comparing across genes requires compensating in some way for the length of the gene and it's not obvious how to do that correctly - could they be finding an artifact of how they normalized for length? (Eg: a "gene" actually doesn't have a single length, it's multiple possible variations in transcripts of different lengths and most reads from the sequencer is ambiguous as to which it came from. Quantify the different transcripts incorrectly - and it's impossible to do it correctly - and you may be mis-estimating the effective length and mis-normalizing.) It's a starting point of an investigation, not an end point.

(And they do try to take the next step to make that investigation and they report that they see a further decrease in a gene related to transcribing long transcripts. However it's 27th in their list of related genes and I'm not sure how unlikely having one of the top N genes has a reported connection to transcription. Hopefully they will follow up with a biological experiment involving knock-down of this gene and seeing an accelerated aging phenotype or something of that sort.)

The most compelling piece of evidence in my mind here is that the effects they report are consistent _in direction_ across conditions. The most worrisome is that they tested a bunch of factors and the only ones they report as consistently informative are the ones that confound technical aspects the most and therefore are confounded with any number of underlying biological changes.

<comment><AUTHOR> Thanks, your points make sense. It's definitely a worrisome coincidence given the multiple tests they ran but didn't correct for. I hope to see that knockout experiment you describe!

</comment></comment></comment></comment><comment><USER3> My understanding of the text, is that there is a reduced expression in long genes (or locus) when people age.

 _Is this correct?_

The text mentions an ALS gene (FUS) and contains this sentence which I have problem to understand (I am not an English native): Furthermore, we observe an anticorrelation among neurodegenerative disorders such as amyotrophic lateral sclerosis (ALS) and Alzheimer's disease.

 _Please, what does those findings mean for Amyotrophic lateral sclerosis (ALS) and Alzheimer's disease?_

<comment><USER4> It means people with ALS don't get Alzheimer's according to a correlation. Now, how is the inherent lifetime and lifestyle difference bias corrected? No idea.

<comment><USER2> I think it's actually a poorly worded sentence and it's saying that there's an anticorrelation between gene length and the relative expression levels between healthy people and those with ALS (and also between healthy people and those with Alzheimer's). This means that ALS and Alzheimer's both have similar effects as aging does and decrease expression of longer genes, according to their study. The sentence before it seems to be specifying the "anticorrelation" that they're talking about and the sentence in question is saying it holds in ALS and Alzheimer's as well as in aging.

<comment><USER3> Thanks tgb, it makes sense for me the way you describe it!

</comment></comment></comment></comment><comment><USER4> Yes, so longer genes are more likely to be impacted as expected given genomic damage theories and random damage model. (Likewise if transcription cellular machinery starts to introduce more random errors longer proteins would be impacted more.)

What to do about it? Edit whole genomes so they're more stable somehow? You cannot reasonably expect to remove all environmental insults.

<comment><USER5> In theory couldn't we introduce fresh copies of longer genes via crispr or a similar process? How many long encoding genes are there?

<comment><USER2> There's such a thing as gene over-expression to artificially increase the number of transcripts of a gene expressed. It's generally less easy or reliable than gene under-expression where you interfere with the expression. Doing it to get all of the affected genes back to their "healthy" levels at once would be very challenging. There's about ~30,000 genes total and at one point the study was looking at the top and bottom 5% by length of those genes so you'd be looking to over-express 1500 genes - I've never heard of a study doing anything like that but it might be possible.

On top of that, there are also feedback loops so if you put more of a certain transcript in it may induce more/less of another or get the cell to stop production of that transcript and therefore counter-act what you've done. So it would be extremely hard to get to the desired levels in all of them.

<comment><USER5> Makes sense, I wonder if it would be feasible to reduce the number of genes to be over expressed by correlation with known medical conditions e.g. cardiovascular disease, kidney disease, or other cosmetic signs of aging.

</comment></comment></comment></comment><comment><USER6> I lightly follow the current understanding of telomerase, which is responsible for adding back the "buffers" (telomeres) at the end of genes that RNA can't copy. It was clear this was part of what we'd need for anti-aging treatment, but last I heard we didn't understand the mechanisms or how to activate them. Is transcriptome part of this process? It wasn't immediately clear from the article.

<comment><USER7> The problem is cancer, not how to trigger telomerase formation.</comment></comment>


A great company doesn't care about itself - <AUTHOR> http://alexkehr.com/a-great-company-doesnt-care-about-itself <comment><USER2> >>The selfless mentalities of these companies is why I think they've grow fast, and they all help to reinforce the notion that a great company doesn't care about itself. A great company cares about the customers, obsessively.

I agree that great companies care about customers obsessively. However, I disagree with the selfless part.</comment>


C++ is a hack - <AUTHOR> https://gist.github.com/alexpana/91493a72b374651ab9ae <comment><USER2> I've been involved in this debate, professionally, for some 28 years now, and while I don't claim to have any deep or unique insights into it, I would like to state that I find almost amazing that it still rages at pretty much the same level as it did back in 1988.

As I've mentioned before, my first professional gig was writing real-time games and business apps for the MajorBBS, a fabulous pre-WWW multi-line BBS, in C.

Since the MajorBBS DevKit was shipped as C source and compiled as protected- mode DLLs (to of course overcome the 640k memory limit of DOS...yeah that was a thing at one time), there were several devs that wanted to use C++ "goodies" to help speed development or whatever.

The debate started when Galacticomm, the makers of the MajorBBS flat-out refused to consider it and _used many of the same rational as the OP listed_ as reasons why it was not going to ported.

Reading over this list jogged many old memories, which is why I felt compelled to write this rather long-winded post.

My local opinion? Use whatever gets the job done and can be maintained and supported at a reasonable cost long after you are gone.

</comment><comment><USER3> C++ is a multi-paradigm language. Of course that is going to be messy. There are domains of applicability where you want everyone to use the same model, the same patterns, the same paradigms. That yields true benefits for some teams.

But there are other areas where you really want to have a Big Bag Of Tricks to get things done, because they are areas where efficiency or fine-grained control are required or it just plain makes sense.

I should note that most successful C++ projects I've come across seem to only use a subset of what that Big Bag O' Tricks provides. Yet in some corners, if need be, some specialized trick can be used because it makes sense there. And it ends up being much less of a hack than if it had to be done in the mono- paradigm language.

<comment><USER4> I appreciate it being multi-paradigm as well. There are 3-4 languages in there with _great_ interoperability. As well as the ability to pull in a C library to a project with little fuss.

</comment></comment><comment><USER5> It is indeed an attempt to extend C while maintaining backwards compatibility, which can be a bit of a mess on it's own. This is probably one of the main reasons that spawned D's creation, a language that does what C++ "should have" done and breaks backwards compatibility while still maintaining the 'power' of C++. I guess calling it a hack is acceptable, at least to me, maybe not to C++ developers though who feel it is more than just a hack.

Edit: Grammar correction.

<comment><USER6> I feel like I have some kind of obligation to correct you on the common error of "should of" instead of "should have" or "should've"

[http://www.elearnenglishlanguage.com/blog/english- mistakes/s...](http://www.elearnenglishlanguage.com/blog/english- mistakes/should-have-vs-should-of/)

<comment><USER5> Thank you, I appreciate the link even more. This is my second language, and I appreciate any opportunity to improve my writing, even though it is my second language I've learned it is still my main language I use.

</comment></comment></comment><comment><USER7> Isn't name mangling a standard thing done by just about every language except for C that compiles to object code? The lack of standardization between compilers sounds potentially problematic, but name mangling itself doesn't seem like a bad thing. The alternative is to force the programmer to do their own "name mangling" a la C.

<comment><USER8> Name mangling is a sad old way of using antiquated object formats while moving forward with a language. Better solutions are obvious - a new object format that stores constraints/annotations/scope info would be a good one.

</comment></comment><comment><USER9> Ok -- but I don't think anyone legitimately holds on to C++ as an example of a great, well-designed language. C++ has existed for a long time, and the corporate world has increasingly moved _away_ from C++ because it doesn't offer enough object-oriented goodness while tying you down to a certain memory management style with a difficult to use typing/inheritance system.

Pick any modern OO language: Java, Ruby, Swift, hell, even Python. They are all far easier languages to write in than C++, have much better library support, and don't make you dive into memory management hell.

IMO C++ is syntactically very difficult, and the language too far out of touch with the architecture patterns and styles used by programmers today.

<comment><USER10> C++ is a mess, but Java, Ruby, Swift and Python aren't viable options if your software is performance sensitive.

<comment><USER11> Java is pretty viable if you are performance sensitive but not HFT or video game performance sensitive. It's certainly far ahead of Ruby and Python, at least.

It's not as fast as C++, but C++ isn't as fast as assembly, either. They're at different points on the tradeoff curve - HOW performance sensitive are you? It's not a binary choice.

<comment><USER9> Java is totally viable for nearly anything; it just doesn't work well for games because they require low-level access to graphics hardware (which is definitely not something Java supports).

Also, the state of the JVM on the desktop is kind of sad - also from the graphics perspective. But Java is probably the most performant server-side language out there at this point (if you exempt the masochists who write network code in C/C++).

<comment><USER12> Java isn't viable for anything that requires low latencies and predictable throughput. Really, no GC language is.

</comment></comment></comment></comment></comment><comment><USER13> Many of these are legitimate, but a couple aren't:

\- "Dependency hell"—Yeah, it's annoying for sure. But what's the solution? You can't reasonably have value types and ABI stability in the presence of adding and removing fields from those value types: it's impossible.

\- "Name mangling"—The legitimate complaint here is that the name mangling schema is not standardized (though Itanium is a de facto standard in the open source world). But the fact that name mangling exists isn't something you can blame C++ for: it's really Unix that deserves the blame for not supporting namespaces in their object files.

<comment><AUTHOR> Object files are not standardized either (as far as C++ is concerned). Microsoft has it's own format. I can blame C++ for using a hack in order to keep using the same obj files as C.

</comment></comment><comment><USER14> "[C++] actually allows subclasses to hide public methods from the superclass."

That one doesn't even make sense. A base class (superclass) in C++ never knows anything about any of its descendants. So it can only ever know about methods declared in the base class, and what their visibility is in the base class. Secondly, it's true that a derived class could (for example) override a public base class method and make it private in the derived class, but that won't change the ability of the base class to call that method.

<comment><USER4> I actually tested this one since I had never encountered it in the wild. You can indeed call and get the expected results from the derived classes (now private) member function.

<comment><USER15> Just to be clear, that's not in conflict with what the author claimed. You can't call that method using a pointer to the derived class. That would be an access violation, because it was declared private. You need to use a pointer of the superclass type.

        struct I_A {
          virtual void foo() {}
        };

        struct A : I_A {
        private:
          virtual void foo() {}
        };

        int main() {
          A a;
          // a.foo(); // compile error
          I_A& ia = a;
          ia.foo();   // ok
        }

To be honest, I find this behaviour useful so it doesn't upset me. It's a decent way to mark off functions that you needed to implement to satisfy an internal interface as not-for-users.

<comment><USER4> Question: Is struct inheritance public by default?

<comment><USER15> Yes. If A were a class, I'd have to specify `public I_A`, but since it's a struct, that's the default.

</comment></comment></comment></comment></comment><comment><USER16> My team is about to embark upon a C++ project. The compiler will be gcc 4.8.x, and supports C++11. So I've bought Stroustrup's "C++ Programming language 4th Edition", and Scott Meyer's "Effective Modern C++".

I've got some reading to do.

What's the state of tools related to encouraging / enforcing modern C++ style?

Edit: grammar.

<comment><USER17> You should check out

clang-tidy: [http://clang.llvm.org/extra/clang- tidy/](http://clang.llvm.org/extra/clang-tidy/)

clang-format: [http://clang.llvm.org/docs/ClangFormat.html](http://clang.llvm.org/docs/ClangFormat.html)

C++ Core Guidelines: [https://github.com/isocpp/CppCoreGuidelines](https://github.com/isocpp/CppCoreGuidelines)

C++ Core Guidelines Checkers for VS 2015 Update 1: [https://blogs.msdn.microsoft.com/vcblog/2015/12/03/c-core- gu...](https://blogs.msdn.microsoft.com/vcblog/2015/12/03/c-core-guidelines- checkers-available-for-vs-2015-update-1/)

<comment><USER16> Awesome, thanks.

</comment></comment></comment><comment><USER18> C is a hack. x86 is a hack. Unix is a hack. Windows is a hack. Products with a "do what it takes" attitude appear to outrun projects driven by purism in the short to medium term. Often its too late for a better designed product to overcome the early traction lead of such projects.

Richard Gabriel has captured many related issues in a series of essays with far greater eloquence than I am capable of - [https://www.dreamsongs.com/WorseIsBetter.html](https://www.dreamsongs.com/WorseIsBetter.html)

</comment><comment><USER19> Some of these aren't quite true anymore. There's a C++ x64 ABI, for example.

Still, it's all a big mess.

<comment><USER20> Did they finally get templates shoehorned into it? That's been the giant, glaring flaw in all the previous ABI attempts I've seen.

Well, that and getting multiple compilers to use the same name-mangling standards.

</comment></comment><comment><USER21> CSS is a hack too. [1]

[1] [https://wiki.csswg.org/ideas/mistakes](https://wiki.csswg.org/ideas/mistakes)

<comment> nommm-nommm Yeah, but nobody likes CSS or thinks its well designed.

<comment><USER13> I think CSS is overall well designed, though with plenty of flaws. It's remarkable, though, that everyone agrees that it's bad, but every proposed replacement I've seen has been significantly worse.

Those mistakes are legitimate complaints. But it's interesting that most of the complaints about CSS do not fall under that list.

</comment></comment></comment><comment><USER22> There is much larger and older list:

[http://yosefk.com/c++fqa/](http://yosefk.com/c++fqa/)

</comment><comment><USER23> I've used C++ for many major projects, and as a compiler writer, I understand the language at a high level.

C++ requires an unprecedented degree of organizational discipline to use successfully. For most projects, in most organizations, it's a terrible technological choice -- bloated, inconsistent, dangerous, poorly understood, and still rapidly changing.

The programming world needs a language with some of the features of C++ (strong typing, easy interoperation with C, polymorphism, destructors, and control of memory ownership). But it also needs a language that doesn't perpetuate every single language design flaw that has accumulated since the Nixon administration while dramatically changing in ways that alter "best practices" across revisions of the language standard and too frequently take steps backward in readability.

And I disagree that C++ is "evolving". A process isn't really evolution unless old things are dying.

</comment><comment><USER24> All third-generation programming languages (and higher) are leaky abstractions. Why is C++ worse than others?

</comment><comment><USER25> Well if hack is the polar opposite of elegant, then C++ is a hack indeed.

</comment><comment><USER26> Misguided right off the bat:

> _Not only does C++ have no notion of interfaces, it actually allows > subclasses to hide public methods from the superclass._

C++ doesn't have "methods"; it has member functions (static or nonstatic). Nonstatic ones can be virtual. Virtual member functions are what corresponds to OOP methods.

To use virtual functions as methods, you call them through a base class pointer or reference to an object. That's when you're doing OOP dispatch.

Now a derived class in C++ can define member functions of the same names as a base. These functions lexically shadow the ones in the base. If you use derived objects as their actual derived type (not through a base reference), then you're using those functions. This is "statically clear" in a static language, and it makes sense. If I open up "program.cpp" in my text editor and edit some function so that a "Foo f" object is replaced by a "DerivedFoo f", then I want all occurrences of f.func() to now be calling DerivedFoo::f rather than Foo::f, if DerivedFoo::f exists. I don't want the compiler to complain that the situation is ambiguous, and I don't want it to keep calling Foo::f, which is nonsensical.

Lastly, access is orthogonal to visibility in C++; it is not accurate to say things like "allows subclasses to hide public methods". Identifiers declared in the derived class scope simply shadow like-named definitions in base classes, period. That is regardless of access. Access specifiers do not alter visibility (or any program semantics). If you manipulate the access specifiers in a C++ program, at best you can make some diagnostic go away, or introduce the need for one. All permutations of access specifiers which don't require a diagnostic will behave the same way (and should produce identical code, really).

> _One of the increment operators takes a dummy int parameter in order to > allow overloading. Can you tell which without googling?_

Yes, I can tell without googling as can any reasonably competent C++ programmer. Why would you need to answer the question in this form? The feature is there for when the situation arises that you're writing an overloaded ++ operator and would like it to be postfix. If you don't care about overloading ++ or making it postfix, you don't have to be aware that there is an int hack for this.

> _Without adding another layer of indirection via the PIMPL idiom, changes to > the internal structure of the class propagate to all it 's users, making > compilation painfully / unecessary slow. _

The class declaration being fully visible to all places which use it allows C++ to be efficient in its handling of data types. For instance, when you have a local variable "FooClass x", the compiler knows exactly how large x is down to the byte and can give it a fixed-size place in a fixed-size stack frame. It also allows for inline functions which compile to code that accesses the object directly.

This low-level nature is a conscious design trade off in C++, which makes it what it is. If you want to eliminate the dependencies, you use that PIMPL idiom explicitly. In some higher level languages, the equivalent of PIMPL is implicit everywhere. (For instance, everything is a "heap object"). C++ is one language you can reach for in situations when you don't want everything to be a heap object, yet still have some halfway useful abstractions.

> _C++ did not have any standard multithreading implementation until C++ 11._

That was five years ago. C++ users did threading in C++ code for at least twenty years before that, in platform-specific ways, or using cross platform frameworks like ACE. Because C++ doesn't hide a lot of behaviors under the hood, you can let platform threads loose directly into C++ code and the effects are predictable and manageable, for the most part, modulo issues like "does unwinding happen if the thread dies" and such.

> _The C++ compilator was originally a preprocessor for C (CFront), and still > maintains binary compatibility with C._

This point is also inaccurate. C++ has to live in a world with _linkers_ and _object file formats_ which do not support type information on a symbol. That is why name mangling is required.

If you want three flavors of a function called foo, with separate external linkage (rather than, say, some internal runt-time dispatch behind a single function) then you need three separate entries in the symbol table.

In most object file formats, that means you need three different symbol names.

It has nothing to do with C++ originally having been preprocessed, or compatibility with C. C itself is simply compatible with assembly language linkage models. (And so C has failed to promote any improvements in object file formats and linkers, by imposing no special requirements.)

Some other languages have to do name mangling in their implementations, to some extent. I used a Modula-2 compiler in the late 1980's which used a "module$ident" scheme in the object file format. That is to say, function foo in module bar was turned into the symbol "bar$foo" with a dollar sign.

<comment><USER13> > Yes, I can tell without googling as can any reasonably competent C++ > programmer.

As far as litmus tests of "reasonable competence" in C++ go, "having the signature of every overloaded operator memorized" is among the worst I can possibly think of.

> If you don't care about overloading ++ or making it postfix, you don't have > to be aware that there is an int hack for this.

... And it's still a hack.

<comment><USER26> Overloaded operators do not have "canned" signatures that you have to memorize.

You generally design the signature. Some are unary and some are binary (or either), but you pick the argument types as well as return value.

The increment and decrement ones (++ and --) have a hack whereby an extra _dummy_ argument of type int indicates "this is postfix" and isn't actually an argument which is making the operator binary! The argument isn't given a name.

Anyone halfway knowledgeable in C++ can be expected to know this piece of trivia, IMHO.

It's a huge hack, but the argument that it's something hard to remember that you have to Google for doesn't hold water.

<comment><USER13> > Anyone halfway knowledgeable in C++ can be expected to know this piece of > trivia, IMHO.

I disagree. Let me put it this way: You will not increase the quality of your C++ programmer hires by quizzing them on whether they know whether prefix or postfix gets the extra argument, or even how to overload those operators at all.

<comment><USER26> Only in the sense that someone who doesn't know C++ well could be a much better quality developer than someone who does.

If someone put C++ on their resume but doesn't know how to overload operators, they are failing on _honesty_.

</comment></comment></comment></comment></comment><comment><USER27> Maybe, but a very useful hack.

</comment><comment><USER28> > 6\. Multithreading: C++ did not have any standard multithreading > implementation until C++ 11.

How is expanding the standard library a hack?

</comment><comment><USER29> It's a great language showing aging signs. Most languages become obsolete before becoming old.

<comment><USER20> I learned C++ around 1990. It was a hack then, too. It began life as a weird preprocessor for C, and some of the seams from that beginning have shown the entire time.

</comment></comment><comment><USER30> "Why I think C++ is a hack" is a more appropriate title. The stated arguments have legit points though.

<comment><USER31> "It's a hack" is also an insufficient reason to avoid using C++, although I think it's both true and a useful thing to know before getting involved with C++.

<comment><USER11> The very nature of a hack is that someone needed it at some point. Even if C++ is a hack, that doesn't prohibit it from being the right answer in some situations.

</comment></comment></comment><comment><USER32> "There are only two kinds of languages: the ones people complain about and the ones nobody uses."

\- Bjarne Stroustrup

<comment><USER33> Basically, this!

Most of the OP's points are valid, no denying that. But, looking at the myriads of properly working, fast, not 'exploding in your face at runtime', often even beautiful code produced in C++ despite these shortcomings: doesn't really seem like a poblem if one knows how to deal with it.

<comment><USER13> > But, looking at the myriads of properly working, fast, not 'exploding in > your face at runtime'

Does remote code execution due to use after free fall in the category of "properly working" and "exploding in your face at runtime"? I would think it does, and C++ is vulnerable to that like few other languages are.

<comment><USER34> Why are you using "free" in modern C++ code?

That was mostly put in there as a transition from C. Modern C++ users shouldn't be using new / free at all, since shared_ptr (and weak_ptr, its counterpart) and unique_ptr basically cover all the use cases.

<comment><USER35> I don't think the parent meant free as in "free()" \- more along the lines of.

      Foo f;
      DoSomething(std::move(f));
      // can still use f here.

<comment><USER34> But if "Foo" was composed of unique_ptr (or shared_ptr), then those smart pointers would be nulled out after the std::move (due to the default move constructor)

So again, unless Foo f was composed of "raw pointers", even that kind of code is safe from "use after free" vulnerabilities.</comment></comment></comment></comment></comment></comment>


Himalayan glacier melting doubled since 2000, spy satellites show - <AUTHOR> <comment><USER2> [https://www.theguardian.com/environment/2019/jun/19/himalaya...](https://www.theguardian.com/environment/2019/jun/19/himalayan- glacier-melting-doubled-since-2000-scientists-reveal)

[https://www.nationalgeographic.com/environment/2019/06/himal...](https://www.nationalgeographic.com/environment/2019/06/himalayan- glaciers-melting-alarming-rate-spy-satellites-show/)

I hope these are readable, I always disable javascript on news sites so I'm not sure...

</comment><comment><USER3> Suspiciously close timing to the recent wave of Mt. Everest (and other) mountain climbing... and the associated human waste added to the snow. This leads to a change in the albedo, and thus, to greater heat retention. I blame Tenzing Norgay for helping that English dude climb Everest. If it wasn't for those meddling sherpas, the mountains would have gotten away (with keeping the cloaks of snow).</comment>


Inside the vintage 74181 ALU chip: how it works and why it's so strange - <AUTHOR> http://www.righto.com/2017/03/inside-vintage-74181-alu-chip-how-it.html <comment><USER2> Wow, what a blast from the past. I remember gazing at the data book as a kid[+], wondering what sort of super genius came up with some of those bizarre operations and wondering when I'd learn enough / be smart enough to want to use them all.

Never did get around to figuring it out and now I don't have to!

[+] Once upon a time you could write to TI, National etc and they would send you data sheets and even whole databooks for free. (I think I remember buying a set of TI TTL datebooks at a junk shop, but I think National or Linear would send theirs for free). Since I had to pay for parts out of my pocket money there was a _lot_ of pouring over designs before getting parts and trying to build anything. I guess this is the equivalent of the folks who had to submit card decks once a day.

<comment><USER3> In my assembler and technician days I stayed alert to visits by distributor reps: older but good databooks were likely to be found in the trashbins shortly thereafter, ready to be fished out and taken home.

These days, for a given part-number, Googling " _part-number_ pdf" returns links to where datasheets can be downloaded. This is a distinct improvement: disk space is easier found than shelf space.

<comment><USER4> You can still find scans of the databooks at archive.org (and if you have some, you are encouraged to contribute...), especially useful for information on obsolete parts whose datasheets were never available separately in digital form.

</comment></comment></comment><comment><USER5> I remember using this chip in college in a "build a CPU from scratch" course.

Most teams implemented these elaborate instruction decoding methods, mapping 000 -> addition, 001 -> and, etc.

We just jammed 4 bits from our opcode right into the ALU select, so we ended up with all of the weird operations this writeup documents. Worked great; our CPU was almost "too simple".

Woz would have approved, I think.

<comment><USER6> I built a working computer in Minecraft, and ended up going with exactly that because the decoding circuits would have been too complex for the project otherwise: [https://www.youtube.com/watch?v=s9XT- dyfEiU](https://www.youtube.com/watch?v=s9XT-dyfEiU)

This build could be improved in a lot of ways as I've grown as a developer and engineer in the years since I built it, but back then, "Jam the opcode bits into the ALU" was the simplest thing I could think of at the time, and worked quite well. If I ever tackle something like this again (a year's worth of Redstone is... I'm not sure I have the patience for that anymore) I'd like to try an 8-bit system just for the challenge of packing the opcodes down a bit. The 16-bit opcodes I used here were rather inefficient.

<comment><USER7> I'm seriously wondering at this point how many college CS assignments meant to be completed in Logic Works (or some equivalent) have instead been implemented in Minecraft. If Minecraft existed when I went through college, I imagine it's one of the things I might have attempted (at least for the simpler assignments).

Kudos to any teachers that use Minecraft as a neat visual aid. That would have been awesome.

</comment></comment></comment><comment><USER8> The custom CPU for Cinematronics (Vectorbeam) games used three of these (from [https://archive.org/details/ArcadeGameManualRipoff](https://archive.org/details/ArcadeGameManualRipoff))

 _The ALU is implemented using three 24LS181 (N6M6L6) function generators, three 74LS85 (N9,M9,L9) 4 bit magnitude comparators, and a 74S182 (L4) look ahead carry generator._

<comment><USER9> It amazes me that making a 12 bit processor out of TTL was still a reasonable thing to do in the late 1970s.

</comment></comment><comment><USER4> I think the key insight that lead to its development is the realisation that, if you have a carry-lookahead adder/subtractor, P and G already provide OR and AND (along with their negations), and taken together without the carry lookahead logic enabled, give XOR.

An existing article about how the '181 works starts here and continues for a few pages:

[http://6502.org/users/dieter/a2/a2_3.htm](http://6502.org/users/dieter/a2/a2_3.htm)</comment>


Show HN: A simple order page for freelancers - <AUTHOR> https://workorder.io <comment><USER2> Looks very well done and feature complete. Kudos that you allow new users to enter their admin page and even preview orders without ever requiring them to sign up/login during the process. Thanks for being thoughtful, that's quite a rare thing. Makes for a great demo.

<comment><AUTHOR> Thanks! Appreciate your kind words.

</comment></comment><comment><USER3> What a great idea, thanks for sharing! I was using another invoice program, but I like the idea of being able to offer upsells as an add-on. Also love the fact that I can get started without logging in.. a really nice way of doing things.

<comment><AUTHOR> Thanks - I found the ability to offer additional services (and to make it known to my clients) made sure I got paid for things they ended up asking for anyway as I could refer them back to the page :).

</comment></comment><comment><USER4> I like the idea and think this is really useful but... there are 4 "create my checkout" next to each others.

This is too much for me and pushed me back from clicking on it actually :/ One or two should be enough to convert people

<comment><AUTHOR> OP here. Agreed, I had the same thought when I was creating the page and ended up sticking them there as placeholders. I'll need to remove at least 1 (or 2) of those buttons and replace it with something more informative/less intrusive.

</comment></comment><comment><USER5> "Free to create"

What's the catch? How do you get paid? I mean you, the provider of this service, not the people who are getting paid by using it.

I ask this as someone who could potentially be in your target audience.

<comment><USER6> Found on: [https://workorder.io/pricing/](https://workorder.io/pricing/)

A $1.25 per transaction fee applies for orders in the Pay As You Go plan + Stripe fees. There are no transaction fees for users in the Pro plan other than the Stripe / PayPal gateway fees.

<comment><USER5> Thanks.

</comment></comment></comment><comment><USER7> What if you decide to scam me?

EDIT: I'm genuinely not trying to be a jerk. Just curious how everyone commenting accepts the offer with no questions asked.

<comment><AUTHOR> OP here. It's absolutely important to be skeptical about online scams nowadays.

Here's the about page for the app ([https://workorder.io/about](https://workorder.io/about)) where you can read about the app itself and about me (the author). The app itself has its own business model ([https://workorder.io/pricing](https://workorder.io/pricing)), and so the entire thing is designed to be sustainable.</comment></comment>


How to fundraise with Pipedrive (and how we raised our $700k seed round) - <AUTHOR> http://blog.pipedrive.com/2012/07/how-to-fundraise-with-pipedrive/

<comment><USER2> We used Pipedrive at iDoneThis to manage our fundraising process. When we were actively fundraising, I kept my Pipedrive window open at all times.

If you love Trello, you'll love Pipedrive -- it merges the functionality of CRM with the ease of use of Trello.

</comment><comment><USER3> We use Pipedrive at Mixergy book more interviewees. Even though it's meant for managing sales funnels, I think it's helpful for any process where you have lots of prospects and a process for getting as many of them as possible to convert.

</comment><comment><USER4> I poked around the website but wasn't able to find the answer to: Where are you located?

I ask because of your 'geography' rejections, not in the valley?

<comment><USER5> Michael, Pipedrive Inc is incorporated in the US with development and support office in Tallinn, Estonia. Founders are splitting time between SF and Estonia.

</comment></comment><comment><USER6> The Pipedrive guys have been super helpful in helping to form our distribution strategy, independent of their great product. Congrats guys!</comment>