Machine Learning Library for C++ - <AUTHOR> http://image.diku.dk/shark/sphinx_pages/build/html/index.html <comment><USER2> Very interesting, but as a daily practitioner I am skeptical.

First, this is a _lot_ of code! As a C++ machine learning programmer, I am impressed as I know the pain (someone explains why, see comment <https://news.ycombinator.com/item?id=5613797> ).

Second, it contains a version of Blas and ublas as well as LBFGS and more, much more, coded from scratch as it seems. This seems too much for an ML library, and a lot to maintain.

This makes me skeptical of performances and maintenance of the code, but it would be fairer to try it first.

Still very impressed.

<comment><USER3> Hi, shark developer here.

First of all, we are glad that our library is discussed on this board! We are happy for every feedback we can get!

Regarding Performance: we try to get the key algorithms as fast as possible. And for the hardest parts we rely not on ublas, but use optional bindings to ATLAS. Speed was one of the key design criteria. We hope that we achieved that. Clearly this is no guarantee that every algorithm is fast, but in this case: just add a ticket!

Please bear in mind, that Shark is still in beta stage, and we are heavily developing it (I am right now working on the family of multi class SVMs). So for example parallelism using OpenMP is not fully integrated.

<comment><USER4> You should consider using Eigen for linear algebra, I have personally found it much better performance wise than using bindings to ATLAS or other more standard linear algebra solutions. ML algorithms tend to be multistage (think about the update of weights with momentum in a Neural network for example), and the primitives available in ATLAS or a blas library are really too low level. Eigen since it generates code for a whole complicated expression can blow a standard linear algebra library out of the water for a certain class of problems. For others obviously the highly tuned vendor BLAS code would win, but I've seen huge speedups by using Eigen it fits well for complex ML operations.

<comment><USER3> This is true, even though we would rather switch to Armadillo due to it's easier handling and better high-level behaviour.

Right now the linear algebra library we use -ublas- has the same behaviour as Eigen for BLAS1 type expressions. So it tries to generate optimal (non-SSE) code. Only for BLAS2 and 3 we fall back to the ATLAS-routines which has the same performance as Eigen on the interesting problem sizes.

//small edit In the end it is not so interesting whether the BLAS1-type expressions are fast as they make up < 1% of run time performance. The big chunks are the data processing inside the matrix-matrix multiplications of the Neural Networks and similar entities.

<comment><USER4> You forget that if you can do the whole weight update in a single shot operation that the data doesn't have to go through the cache multiple times, and at least on the problem sizes I am working on FP bandwidth isn't what kills it, but the memory bandwidth. Back to the NN example: If you can do the matrix multiply and the application of the delta weights in a single loop iteration you get much better cache behavior.

Another thing about code generation, I am also using a hacked version of Eigen as well in a project I'm working on that can do the tanh and derivative of the tanh so the NN activations go quite abit faster since you can generate vectorized code for the whole calculation that will visit the memory location exactly once. While true the calculation of the weight updates is the most time spent, I saw 3-4x speedup in the activation code doing it in a single operation due to better memory access patterns and less loop iterations. Better memory access patterns can also have synergistic effects on other code because there is less cache pollution happening. By being fast and loose and introducing a few other copies of the matrix data in my case, my performance falls off a cliff when it no longer fits in the cpu cache nicely. 10x difference in the particular case I am remembering.

As always performance is part art, part science and perhaps it won't matter as much for the general case, but for my specific implementation and my matrix sizes Eigen has made a measurable difference for me compared to other solutions.

</comment></comment></comment></comment></comment><comment><USER5> The library supports some very useful algorithms. Both supervised and unsupervised ones. But I can't use it for our commercial non GPL projects.

<comment><USER4> Flame Suit On / Rant Mode On

I actually really don't understand why anyone uses GPL for a library. I've been doing open source for a long long time, and love the GPL. I have code in the Linux kernel, and believe free software AND open source software are great solutions to very real problems in software engineering. Having open code just gives people more options, and I firmly believe it will win over time as far as quality is concerned.

I just think only providing libraries to other GPL code is stupid. It just limits the usefulness of the software. LGPL is great here, you get the core changes contributed back to your library from a greater group of people and everyone wins. Limiting a library to GPL means a large population can not use your code, those writing applications that can't be licensed under the GPL. Limiting choice is BAD. The whole reason you should be creating and using free software and OSS is to not weld the hood shut. GPL should be for applications, LGPL just limits choices for libraries. Down with the GPL for libraries!!!

Flame Suit Off / Rant Mode Off

<comment><USER6> LPGL isn't vastly better than the GPL as it makes it difficult to link statically and/or release for closed platforms. Its advocates would probably see these as plus points, but I'm not sure that they're going to increase uptake.

<comment><USER7> Difficult, but not really a significant part of the challenges for delivering closed source binaries across platforms.

On linux, you have to build distribution specific binaries that match the shared library versions in the package manager.

On Windows, you generally put all of your shared libraries in your application's folder, since there are plenty of bad actors who install DLLs without versions in the filename to system32. Leads to duplication on the system but its a generally accepted bad practice.

(Can't speak to shipping LGPL libs on OS X).

<comment><USER6> I was thinking more of Xbox360, Playstation3, iOS, etc. - none support user- replacable files. I don't even think any even support dynamic linking... )

</comment></comment></comment></comment></comment><comment><USER8> This looks awesome. I've been itching to try out some ideas I have after having gone through Bishop's book, but I've been hesitant to write the algorithms from scratch. Now I'll have to decide between learning matlab or a library such as this.

<comment><USER9> You should definitely use a scriptable ML library. The process is very iterative and not suited to a compiled language like C++. I use skilearn alot, but also the matlab toolboxes or R are great. At its heart ML is alot of stats, so use something built for maths, not C++. It doesn't really make sense to break out C++ until you know _exactly_ what algorithm and settings you need _and_ your application is real time.

<comment><USER10> If the OP was thinking of writing his own algorithms, and this is a linkable library with that heavy math already implemented, couldn't he write bindings for Python/Lua/Tcl/Ruby and have everything he needs for script-ability, or am I missing something?

<comment><USER11> You aren't missing anything, you are absolutely correct, but the question isn't "can they?" the question is "will they?"

<comment><USER10> I'm in the Stanford/Coursera machine learning course right now, and something like this is nearly excactly what I've been looking for.

As some others have said, GPLv3 is off-putting, but there is the LGPL mlpack lib (<http://www.mlpack.org/>) (also C++). Personally, project-wise, the only way this could be improved is if the project were pure C, and a BSD, MIT, or similar license. Quite looking forward to checking these out, though.

<comment><USER9> honestly you guys are crazy if you think shark is gonna help you _learn_ machine learning. Its ideal for deployment of ML on things like embedded computer, robotics, games etc. where real time learning is required. Machine learning requires _alot_ of experimentation and C++ is a terrible medium for that. There are _loads_ of good machine learning libraries implemented for python and matlab. Pretty much every good paper in machine learning is accompanied by an algorithm implemented in matlab or python or R. _learn_ using those reference designs. Once you figured out what you want, then deploy on a system in C++ by all means using shark. I do robotics for a living, and I do go from scripting to C++. Unless its absolutely necessary I avoid C++. Only things like vision which is so CPU hungry that it has its own computer do I require C++, every other algorithm stays in python.

<comment><USER4> Actually you forget that performance when you need to train for days at a time is critical, if I use Octave/Matlab/R my current project might take months to train instead of weeks. All my ML code is high performance threaded C++. I recommend you use a good template linear algebra library like Eigen, you can do plenty of experimentation in C++. I find with a set of a few modern libraries and the required experience a C++ programmer is just as if not more efficient than a Python/R/Matlab programmer. It comes down to the skill of the programmer and the proper choice of libraries.

<comment><USER9> True that matlab octave and R are all rubbish for performance. I use python + numpy which all delegates to BLAS for the hardcore linear algebra stuff. I don't normally find C++ gains me all that much. You can also do GPU acceleration pretty easy using theano (e.g. [http://deeplearning.net/software/theano/tutorial/using_gpu.h...](http://deeplearning.net/software/theano/tutorial/using_gpu.html))

So I reckon my GPU accelerated python still beats a C++ pthreads approach, and is alot faster to develop on.

Your mileage may vary, from what you said you probably know what you are doing, maybe GPU is not applicable. I was really replying to the initial comments that said they want to start learning machine learning on a C++ system. Training for days suggests you are doing something hardcore like MCMC/DBN/Guassian Processes, learners should not start there though....

<comment><USER4> I'm doing deep belief networks with dropout, and don't have access to GPU's with good double precision performance. I used to write graphics device drivers, so GPU computing has a special place in my heart and definitely agree with you there performance wise. It is funny though that my little laptop is hitting training times similar to some papers where people are using low end GPU's though, its amazing what you can do when you pay attention to performance.

I suspect my tuned C++ code will work quite well on a Intel MIC, and that is probably where I'm going to go when I have more resources to throw at the problem. I do know that Theano does use Alex's C++ CUDA code under the covers and I have done lots of reading of some of theano's code looking at implementation details to help developing my code. I just am not a big python (or most scripting languages actually) fan, perhaps I'm just too old school and written C, C++, C# and Java too long. If it doesn't smell or feel like C, I feel like Scotty in Star Trek 4 when he was making the transparent aluminum on the mac.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER12> Does anyone know if there's a good ML library written in C# or F#

<comment><USER13> I don't know of any written in F#...maybe I'll have to write one :)

You might also ask on the fsharp-opensource mailing list, maybe someone has an F# ML library I don't know about:

[https://groups.google.com/forum/?fromgroups#!forum/fsharp- op...](https://groups.google.com/forum/?fromgroups#!forum/fsharp-opensource)</comment></comment>


Diaspora ported to use buddycloud channels and XMPP - <AUTHOR> http://buddycloud.com/cms/node/210

<comment><USER2> This needs some frontend polishing for the script timeouts and stuff, but using XMPP for federation is definitely the right way IMO. Or, at the very least, much better than just making up protocols on the way, as Diaspora did. Federation and message routing have been solved…

<comment><USER3> FWIW, I think XMPP solves problems in a completely _horrible_ way. It's ridiculously over engineered, verbose, needlessly complex, overly extensible to the point of absurdity.

It totally makes sense to create a concise, specific protocol to solve a specific problem when appropriate. Learn from the hundreds of mistakes that were made in the 90s and early 2000s when all this X* came out.

<comment><USER4> Actually the core of XMPP is fairly small - an XMPP server need not implement every extension ever conceived of. Given that it's widely deployed, solves the presence and federation, and is implemented in a wide variety of languages, I think the GP is right.

The only real nit that I see is with mobile devices - XMPP isn't great for low power low bandwidth situations.

<comment><AUTHOR> Holding a socket open on a mobile costs nothing. Sending data through that open socket will quickly jump the phone into DCH state (<http://xmpp.org/extensions/xep-0286.html#sect-id115219>).

Polling is worse.

Google keep the chat client open but have an option to hold back all but the most important packets on the server side and then batch send them after a set period of time. This is something along the lines of <http://xmpp.org/extensions/xep-0273.html>

The current nokia version of buddycloud (<http://mobile.buddycloud.com>) will run continuously for for about 18 hours. The android version with batch sending of packets even longer.

And if you worry about XMPP's verbosity, just add the DEFLATE option to your TLS socket. That drops the size down to about 10% of the original.

</comment></comment></comment></comment><comment><USER5> The announcement on the mailing list has some more narrative: [http://groups.google.com/group/buddycloud- dev/browse_thread/...](http://groups.google.com/group/buddycloud- dev/browse_thread/thread/ee4fae4a143e38ea)

</comment><comment><USER6> keep in mind that this is still early code. pretty much like diaspora. But it's awesome that you start with your xmpp friendlist right away!

</comment><comment><USER3> XMPP seems like a very bad choice unless you _need_ it for interoperability with other systems.

<comment><USER7> I'm ignorant to what XMPP is (aside from it being an XML-based messaging protocol). Could you enlighten me as to why this is a terrible idea?

To someone like me of minimal intelligence and experience, it seems to be a reasonable (and kind of clever) choice.

Thanks in advance.

</comment></comment><comment><USER8> Good for BuddyCloud, but doesn't OneSocialWeb have an XMPP protocol already? Is BuddyCloud the same thing?

<comment><AUTHOR> Just like OneSocialWeb, buddycloud started out using XMPP's built in event stream. We found that this quickly ran out of steam for scaling and was too constrained to build a really good social system. So we pivoted and the new channel servers that are being built are all independent from particular XMPP server implementations.

The channel approach runs as a separate server instead of trying to build everything into existing XMPP servers. Decoupling the channel server release cycle (almost daily) from the longer release cycle of XMPP servers speeds development.

</comment></comment><comment><USER9> It still appears to be very buggy. Many non responsive scripts

<comment><AUTHOR> This is happening because it's having to pull down all channel posts instead of storing some of them locally. Not so ideal. A better approach will be to have backbone.js throw them into a local store.

<comment><USER9> It's mandatory I think. It's currently unusable on my netbook and less technically adept people tend to get scared from messages of non resonsive scripts, fearing the page is trying to download and install malicious code

</comment></comment></comment><comment><USER10> awesome!</comment>


Ask PG: Can you publish most interesting parts of ViaWeb? - <AUTHOR>

I want to learn lisp from great master, so can you give to us most interesting pieces of Viaweb's source code? <comment><USER2> Strictly speaking it's Yahoo property and I shouldn't. But if you just want to read some Lisp code you could look at the source of HN: <http://www.arclanguage.org/install>

<comment><USER3> Do you think they'd be averse to letting you publish the code they've since re-implemented?

On a more personal note, if you'd look at ViaWeb code with hindsight, would you still believe it was well-architected and exactly as it would have been if you were to write it today? (Not considering the evolution of web technologies in general)

<comment><USER2> I don't know how good the code is. I haven't looked at it since I quit. And I don't want to look at it because if I find it I'll want to try to get it running, which will end up making me port it to Arc, and I don't have time to jump down that wormhole right now.</comment></comment></comment>


We, Robots - <AUTHOR> http://www.nytimes.com/2011/01/23/books/review/Lehrer-t.html?ref=technology

<comment><USER2> 010011000110010101110100001000000111010101110011001000000110001001100101001000000111010001101000011000010110111001101 011011001100111010101101100001011000010000001100001011101000010000001101100011001010110000101110011011101000010110000 100000011101000110100001100001011101000010000001110100011010000110010101110011011001010010000001100100011000010110111 001100111011001010111001001101111011101010111001100100000011000010110001001110011011101000111001001100001011000110111 010001101001011011110110111001110011001000000110100001100001011101100110010100100000011000010110110001101100011011110 111011101100101011001000010000001110101011100110010000001110100011011110010000001100011011011110110111001110110011001 010111001001110011011001010010000001101001011011100010000001100110011011110111001001101101011100110010000001101111011 101000110100001100101011100100010000001110100011010000110000101101110001000000111010001101000011001010010000001101111 011011100110010100100000010010010010000001100001011011010010000001100011011101010111001001110010011001010110111001110 100011011000111100100100000011101010111001101101001011011100110011100101110

edit: Unfortunately downvoted, as my comment wasn't without meaning.

<comment><AUTHOR> While your intentions were good and the form was creative, the end result does not contribute to the discussion. I up-voted you as I don't take these "fun" comments too seriously, but unfortunately some people do. Plus, it takes up space.

<comment><USER2> Sometimes you have to make a judgement call. Perhaps my judgement was poor, but I'm glad that at least some acknowledge that my intentions weren't as much so!

</comment></comment></comment><comment><USER3> Wow, what a neat bifurcation of opinion/position between the first and second pages...

</comment><comment><USER4> NYTimes log in wall...not worth it :-/

<comment><AUTHOR> I think many people would say it is worth it. Try Bugmenot (<http://bugmenot.com/>) if you don't want to set up an account. I was in your same place until recently when I decided to give in and set up an account. Took a minute and now I have access to one of (if not the) best journals out there. In my opinion, it's definitely worth it.</comment></comment>


Greta Thunberg Is the 'Time' Person of the Year for 2019 - <AUTHOR> https://www.npr.org/2019/12/11/787026271/greta-thunberg-is-time-magazine-s-person-of-the-year-for-2019 <comment><USER2> I'm torn on the matter of Greta.

On the one hand I do think it is great, that a child spoke up, and created an awareness, got the ball rolling, and there was a real sense of guilt to take action for the sake of the future generations.

On the other hand, I think that message has arrived. And her touring the world wagging the finger, becoming a celebrity is just silly. You have journalists asking her (a kid who has skipped school for the last year) how we should solve the climate crisis, it's embarrassing.

<comment><USER3> If it's so embarrassing, maybe we should have solved this problem before it came down to a child shaming a bunch of adults about this. It's INCREDIBLY embarrassing, but not for the reasons you're saying.</comment></comment>


Six Smart Guys Sitting Around Talking (1994) - <AUTHOR> https://www.nytimes.com/1994/06/12/arts/television-six-smart-guys-sitting-around-talking.html <comment><AUTHOR> The discussion: [https://youtu.be/YUWd5xgLXBU](https://youtu.be/YUWd5xgLXBU)

<comment><USER2> one of my favorite casual talks between people who I respect.

(in my fantasy head-cannon they replace Rupert Sheldrake with someone that brings up less WOO. Even they seemed annoyed in that video when he says things like "How do we know whether or not the Sun is alive?")

<comment><USER3> Sheldrake strikes me as a revival of the early modern scientist, someone who would have been at home in the early heyday of the Royal Society—an insatiably curious English gentleman who asks questions from fundamentals and wants to test everything for himself. Someone who sees no conflict between science and religion but is often attacked by dogmatists. Historically, this was an entirely mainstream position, though it hasn't been for a while now.

I find his curiosity charming, and his ability to consider questions from first principles remarkable. That he has been attacked so harshly ("A Book for Burning") yet always retains his good-humoured demeanour says a lot for him.

<comment><USER4> Have to agree, in some ways he helped drive the discussion to greater depth -- many questions aren't easy to answer and Gould didn't want to entertain them. I particularly liked Sacks vignette on patterns from migraines, revisited here:

[https://migraine.blogs.nytimes.com/2008/02/13/patterns/](https://migraine.blogs.nytimes.com/2008/02/13/patterns/)

Sheldrake's discussion on magnetoreception was also of value; it wasn't perfectly accurate (nor as well understood then as it is today) but Gould was arbitrarily dismissive; see more on the really cool phenomena here:

[https://www.sciencealert.com/birds-see-magnetic-fields- crypt...](https://www.sciencealert.com/birds-see-magnetic-fields-cryptochrome- cry4-photoreceptor-2018)

Einstein said it well: "Imagination is more important than knowledge. For knowledge is limited, whereas imagination embraces the entire world, stimulating progress, giving birth to evolution."

</comment></comment></comment></comment><comment><USER5> Very similar format to the British Channel 4 series _After Dark_ (1987-97):

[https://en.wikipedia.org/wiki/After_Dark_(TV_programme)](https://en.wikipedia.org/wiki/After_Dark_\(TV_programme\))

itself inspired by the Austrian program _Club 2_ (1976–2012):

[https://www.imdb.com/title/tt0487238/](https://www.imdb.com/title/tt0487238/)

</comment><comment><USER6> [https://archive.is/sWWvJ](https://archive.is/sWWvJ)

</comment><comment><USER7> Amazing that Dennett and Gould were in a panel together!

<comment><AUTHOR> Gould is an incredibly eloquent speaker isn't he?</comment></comment>


Can't buy love online? 'Likes' for sale - <AUTHOR> http://www.theage.com.au/technology/technology-news/cant-buy-love-online-likes-for-sale-20120823-24o64.html

<comment><USER2> How is this news? This happened for years.</comment>


Ask HN: If you had to choose, would it be your startup or significant other? - <AUTHOR>

My relationship recently ended because of my startup life. The continuous work and mismatched schedules made it very hard. She never explicitly said "it's me or the startup" but it became apparent that things would never work with my startup lifestyle. Has anyone else faced this decision? <comment><USER2> If you have any doubt about this, resolve it before you have kids with your significant other.

Your SO is (presumably) an adult who is in a voluntary relationship with you and knew your personality before getting serious with you.

Kids, on the other hand, don't get to chose their parents. Don't make 'em unless you've got the time and ability to be a parent to them.

<comment><AUTHOR> Thankfully kids are nowhere in the new future, startup or not. I agree though, kids complicate matters.

</comment></comment><comment><USER3> This is very related to a work/life balance discussion HN had recently: <http://news.ycombinator.com/item?id=2386235>

I had more to say, but it got long. Expect a blog post in future.

</comment><comment><USER4> If my SO couldn't deal with my startup life, I wouldn't wait for him to pack his bags, I'd already be gone. He knows I love him fiercly, but somethings in this world are worth fighting for - my hapiness being one of them.

Been married 5 years, and I regularly neglect my husband for side projects, and he knows it :) It's never to the point where we never spend time together but he understands where my head is at, and he supports me.

Those of us with a truly entrepreneurial spirit cannot run from who we are. And to lie to oneself in order to save a relationship will not work in the long run, because in the end, the truth will come out. If your SO can't deal with your startup fever, then of course, try your best to compromise so that you can still have both (if possible). But if you find yourself having to choose between the two and you choose your SO, but your passion really lines in your startup, how happy will you really be in that relationship?

Love is nice and all, but you have to be fuflilled in your life outside your relationships. Don't get me wrong, work is not everything, and probably not the most important thing to many ppl, but if your work drives you to wake up in the morning, then that's saying something profound about your passions and what makes you happy.

Someone who truly loves you, and understands you would never ask you to choose, but they would also never stand in your way either. If that means you can't be together, then that's something you just have to accept and learn from.

<comment><AUTHOR> This is exactly how I feel, its nice to know someone can empathize with me. It's very hard to explain this to a SO though.

<comment><USER4> I agree, it is very hard if you are trying to convince a SO that doesn't see or understand the connection between your passions and well being. It's also very difficult if your SO has already decided in his or her mind that it has to be either or (them or the startup). It would be awesome if there was some guide or handbook on this subject, but there is no easy answer to making your SO understand.

It is possible to have both (your passion and your SO) if you can find a balance that you and your SO can both live with, and maybe that's the easiest way to help your SO understand...by including them in that process, and making them feel like you guys are figuring it out together.

In the end though, there is only so much you can do/say to try and convince someone who has already made up their mind that your logic is bs. At which point you should probably let that person go, so they can take a dump on someone else's dreams, lol.

</comment></comment></comment><comment><USER5> After two failed startups, my fiance later wife has let's say "become very wary" of new projects.

And that sucks. But, I wouldn't trade her (or our kids) for all the money in the world so the choice is easy.

That said, I have two active projects and at the moment and I'm treading very, very lightly with them. My plan is to remain stealth (from her) until/unless I get traction and then that would put me in a better position to further negotiate ala time commitments, etc. :)

<comment><AUTHOR> Well that gives a new perspective on stealthmode startup. I don't hide projects, but I do secretly check my phone and answer emails when I'm with her. I know it upsets her when I get my phone out when we're together, so I'll save quick emails when I "go to the bathroom."

</comment></comment><comment><USER6> I had to choose, and though in retrospect it would've never worked long-term, I still regret that I told her that my work is more important than her. The relationship was never the same after that, and I wish I had the wits to hold my tongue. Ah, some things, you learn the hard way :). My advice would be this: let them choose. If you still like that person, just maintain that stance.

</comment><comment><USER7> During the .com days I worked day and night. I worked through christmas, thanksgiving, new years and valentines day of 99 and 2000. I was engaged, but between that and all the travel I had to do, my relationship didnt last. At that time I made an explicit decision to sacrifice everything for work. These days I wouldn't make that tradeoff but my wife also knows I can easily work 18 hour days for weeks (or travel) and is willing to deal with it because we have a nice life (she doesn't have to work). Even when I don't work that much I'm usually reading from the time I get home until I go to sleep so she is used to not getting attention all the time.

</comment><comment><USER8> Should be possible to do both. Mark Zuckerberg has had the same girlfriend for 7 years.

<comment><USER9> Fugazi: "Money lets the pieces fit where they fall"

</comment></comment><comment><USER10> I'd choose my wife if I really had to. Fortunately I've been able to make it work pretty well. I spend almost all my non-startup time with her, which is why it works I think.

<comment><USER11> I like what you said, and it mirrors my experience. It comes down to what your priorities are. In my case it's family, work, then other stuff. It's a lie to believe that you can have/do it all, but it's generally true that you can have/do the things that are really important to you. I don't ride motorcycles, fly RC airplanes, or play guitar much anymore, but I'm okay with that because they were lesser priorities than the top two.

</comment></comment><comment><USER12> It all comes down to your values and what is important. Personally, I wouldn't trade my girl for anything, but I'm the type that values family/relationship above all else. If you get your happiness through your work, then focus on your start-up. There is no right or wrong answer, it would be worse if you felt pressured to choose your SO then have some ill feelings towards them because you feel like they keep you from the things you truly enjoy.

</comment><comment><USER13> It's an extremely tough spot to be in if your significant other isn't the type who understands or is willing to put up with startup life (mostly the lack of time for each other). While it can work, often it doesn't.

I've been down this road quite a few times. To me, it really is more of a matter of asking is this person right for me if our lifestyle choices conflict. So in essense, the startup almost always win.

</comment><comment><USER14> Relationships are hardly written in stone. Take the time to understand your feelings and talk to you ex. If you can't get to an understanding then is likely that the problems between you two go deeper than you think.

</comment><comment><USER15> Finding someone you really like is not easy and may not happen again.

Pushing for more efficiency may help. Some tips:

1\. Rid as much of time-wasters as possible. Ditch your tv, game set, etc. Avoid reading too much news, forums, etc.

2\. Be more time-conscious with your activities, i.e., don't stray. E.g., reading is good but be selective. I've seen some non-startup related topics making getting so much upvotes even on Hacker News. E.g., debating to get feedback is good but debating to win is not.

<comment><AUTHOR> I'm pretty good at 1. I haven't played a video game since high school and don't have any TV channels. The worst part is my drug called HN.

<comment><USER15> The maybe you can create a startup that revolves around your 'addiction'. Some people successfully writes blogs for startup news such as HN, e.g., <http://blog.louisgray.com>.

</comment></comment></comment><comment><USER16> I regularly neglect my side projects for my wife & kids, so I guess my SO. I don't regret a second of it, either.

It would probably be different if I were younger and just dating.

<comment><AUTHOR> Having a wife and kids is a big difference from a girlfriend. I am young and just dating, but if I had a wife and kids, I'm sure they would come first.

</comment></comment><comment><USER17> Well i think you need to adjust your routine. I think both startup and relationship are equally important and you have to manage accordingly. Relationship stands on top of understanding and i think you both should understand each other. If your girl understands you and you do the same then i dont think it wont be any problem.

Good luck.

</comment><comment><USER18> I don't want to sound cold, but _it depends on your SO and the startup_. If your SO is someone you can't live without, then your decision is clear. If your startup is going to make your life so much better, and it's your ultimate passion, but your SO can't accept that, it's time to move on (from the relationship).

<comment><AUTHOR> I don't think that's cold. Sometimes the startup is the thing in your life you can't live without.

</comment></comment><comment><USER19> I haven't but I think everything has a reason. If you're really passionate about this idea than keep pushing.

</comment><comment><USER20> Involve your SO in your startup and then you don't have to choose. They don't have to be a co-founder, but maybe they brainstorm ideas with you or help with customer support.

</comment><comment><USER21> The only right thing is to choose yourself.

</comment><comment><USER22> Startup.

<comment><USER23> But, why? The OP would've posted a poll if he'd wanted one-word answers.

</comment></comment><comment><USER24> This is a question that usually resolves itself.

If your SO went into a relationship with someone who he/she knew was extremely passionate about building things, and they somehow expected this to "change", they are delusional, dishonest, or both.

Did you really want to spend the rest of your life with a delusional, dishonest, controlling individual anyway?

Yeah, didn't think so. In this event, you move on and find someone who doesn't try to hamstring your dreams and crush your soul. They do exist, and your life will be richer for it.

<comment><AUTHOR> I think your conclusion of a dishonest, delusional and controlling person may be a little off, but I see what you're saying. When we first started dating, I wasn't like this. Sure, I still hacked, worked hard and built things. But I admit that I did change and started working more and being serious about the startup lifestyle. I should also mention that we started dating when we were still in college.</comment></comment>


World Map Of Social Networks Shows Facebook's Global Dominance - <AUTHOR> http://thenextweb.com/socialmedia/2012/06/10/facebook-is-eating-the-world-except-for-china-and-russia-world-map-of-social-networks/ <comment><USER2> I wonder why "Google+ stats are not displayed by Google Trends for Websites"?

</comment><comment><USER3> Well it's true they're domineering.</comment>


President Trump signs order to promote broadband in rural areas - <AUTHOR> https://www.engadget.com/2018/01/09/president-trump-signs-order-to-promote-broadband-in-rural-areas/ <comment><AUTHOR> official source: [https://www.whitehouse.gov/presidential- actions/presidential...](https://www.whitehouse.gov/presidential- actions/presidential-executive-order-streamlining-expediting-requests-locate- broadband-facilities-rural-america/)</comment>


Ask HN: How do you keep track of HN conversations? - <AUTHOR>

If I make a post on HN, or make a comment I then have to keep checking the comments/submissions page if I want to see if there are any replies.
Hitting refresh on a page seems terribly...1990s.  I'm used to sites emailing me when someone replies to something I've written.
How do you manage this?
Edit: It seems that people don't care that much about conversations on HN - which ties in with what I'd expect the system to produce.  Notifications seem to be a necessary part of a conversational forum - along with threads. <comment><USER2> I usually use the "threads" link (what you call the "comments" page) to keep track of current conversations, but I also use site-restricted Google search, e.g.,

[http://www.google.com/search?q=site%3Anews.ycombinator.com+b...](http://www.google.com/search?q=site%3Anews.ycombinator.com+bagels)

on whatever subject is of current interest to double-check whatever threads may be attracting new comments. The interface here does require a lot more drilling down to follow my submissions than to follow replies to my comments, which I agree is an inconvenience.

</comment><comment><USER3> I usually just check my karma, if it has moved quite a bit then I go and check the reaction to my comment(s).

</comment><comment> cool-RR Here you go:

<http://hackernews.heroku.com/AndrewDucker>

I have mine on my RSS aggregator.

<comment><USER4> Is there something similar for showing comments on posts I submitted?

<comment> cool-RR I believe not.

</comment></comment></comment><comment><USER5> I've always wished Hacker News had a Reddit-style reply notification (i.e. something like Reddit's orangered envelope).

It's not just that I want to see who replied to _my_ comments. Sometimes I ask a question or hope for a response from somebody else, but it seems somewhat rare that the other person actually notices I have posted a reply on their comment.

<comment><USER6> I like that it doesn't; it means that you can generally let go of any debate after a few days.

<comment><USER7> _it means that you can generally let go of any debate after a few days_

I feel that it leaves a lot of debates unfinished. This leaves me disappointed and means I don't put as much effort into comments as I might otherwise.

However, I guess its just another one of the reasons I'm only "sort of" an HNer. Its really up to pg to set up the site to act how he wants (shorter discussions could be what he wants).

</comment></comment></comment><comment><USER8> I tag the HN page -- or any other blog page with comments I want to follow -- at delicious.com with the tag "c" (for comments; the one letter is easy to type).

I've bookmarked the delicious page for my "c" tags.

Then I check whenever I feel the urge and want to spend the time.

It's not as nice as the old co.mments.com site, but there you go.

I don't really want email notifications of comments; I don't need yet another distraction.

</comment><comment><USER9> I just figured, based on the odd comment here and there by pg, that the comments section of these posts is deliberately user-hostile. _shrug_ so if I happen to remember a news posting with interesting comments (or in which I made a comment), I'll occasionally go see how the conversation is going. Other wise, I just move on with my life.

Just like how the site has the horrible url "news.ycombinator" instead of something sensible like "hackernews.com" ... it's just one of those things...

</comment><comment><USER10> Slightly differently, I would like a way to keep track of comments that I have upvoted. I often find comments to be more interesting than the articles they are attached to, and sometimes vote up an article I don't particularly like just to make it easier to find the comment later.

Sure, yeah, I could maintain my own separate file of comment links, but even so, I think this would be a nice feature of the site.

</comment><comment><USER8> I'm not really a programmer, so I can't volunteer for this, but: Assaf Arkin, who ran the co.mments.com site, might be willing to let some true programmer work with PG to bolt his code onto the HN site somehow - his main site is <http://labnotes.org/>.

</comment><comment><USER11> I tend not to, then now and again I'll look at my comments and see if there's anything worth looking into.

</comment><comment><USER12> Your conclusion that "people don't care that much about conversations on HN" is mystifying, since HN _is_ its conversations. I see no problem with having to explicitly check for new comments; I prefer to look at things when I'm ready than to be interrupted.

</comment><comment><USER13> I don't need to answer in real time, so, in my opinion, checking from time to time is better.

<comment><AUTHOR> It's not that I need to answer in real time - it's that checking takes effort. It's yet another thing I have to remember to do.

</comment></comment><comment><USER14> Seeing replies to one's posts is easy, just click on "threads" at the top of the page.

<comment><AUTHOR> That's the "comments" page I meant above, sorry that wasn't clearer.

</comment></comment><comment><USER15> refresh, luck and memory; usually if it drops off the main comments page I usually forget about it :)</comment>


Codebase Refactoring with Go - <AUTHOR> https://talks.golang.org/2016/refactor.article <comment><USER2> I think the proposed alias has true merit in Go as has been shown by Russ Cox and in other places. What I'm a bit confused about is why it's sold as a transitionary tool but implemented as a feature.

If it's so easy and clean to use it may become a misused feature, causing developers to write "temporary" code that just lingers around forever because it's more convenient to let it be than to actually move to the new API. I'd draw parallels with imports in Go versus imports in Python. I would wager that a great majority of Python repos out there have lingering imports in some module that doesn't need to be there. But in Go I can guarantee that there are 0% unnecessary imports.

For example, the declaration could be obvious that this is for compatibility as opposed to a feature:

legacy const FUN_THINGS => funner.Things

Also, when compiling a package using the FUN_THINGS constant you'd be warned:

./main.go:10: using legacy alias: "clowns.FUN_THINGS" has moved to "funner.Things"

These small things would help prod developers to actually fulfill the transition as opposed to letting it linger.

<comment><USER3> So far, Go doesn't have warnings, which is great. Either it's an error, or it's nothing.

This is great IMO, because I've seen too many codebases that just end up having infinite amounts of warnings that never get fixed, making them (1) useless and (2) annoying.

(Extraneous imports is a great example of something that in most languages would probably be a warning (or nothing); I remember in the early days people bitched like crazy about it, but on balance it's really really nice. (goimports also removed a lot of the pain.))

I think it's clear that if this goes in, people will use it beyond just refactoring. Honestly, I'm ok with that, if it's restricted to just types.

Here's something I've done from time to time:

func now() time.Time { return time.Now(); }

Just because typing time.Now() everywhere was getting tedious.

Having a type that's an explicit alias doesn't seem too bad to me.

type Time = time.Time

Sure, it's an extra step of indirection, but a very easy one.

(I feel like having variable aliases would be much more confusing, because variables are mutable.)

       ===

And it's not like the situation is that different from right now. For example, maybe I have some package with an api like:

        func DateMagic(t time.Time) time.Time

OK, super-obvious what it's taking.

Now maybe I'm using aliases and you see:

        func DateMagic(t Time) Time

Hmm, not quite as obvious, now you have to go lookup

        type Time = time.Time

But still today I can do

        func DateMagic(t x.Time) x.Time

Hmm what's x?

Oh

        import x "time"

Of course it could get a little pathalogical...

        func DateMagic(t DumbName) DumbName

        type DumbName = time.Time

but I feel like you're really trying there.

<comment><USER2> I don't think realiasing exported signatures is a good idea, in any language. However, doing what you do in your package as a private function is perfectly fine, that is for your own convenience.

Regardless, I don't think the argument that the Go maintainers are making is that this is about number of characters saved. The point of an alias in the first place is to make it more feasible to carry out breaking API changes (which are an important part of any maturing API).

So if aliases are introduced for the purposes of making API transitions possible over multiple commits, then I think they should be clearly designed as such. Which means that it shouldn't tempt people to do what you just described in your comment. Maybe that wouldn't be a bad thing, but if that becomes the ultimate use for the aliases, that use case should play a bigger role in the design of aliases.

Because right now, as far as I can tell, they're being designed mainly for API transitions.

<comment><USER3> Well, I could easily have made it "func Now" or whatever in my current package.

The point is, adding type alias just gives you the ability to do for types what you can already do for variables and functions.

It's true that the driving case (as presented by rsc) is co-reorganizations, but I think inevitably it'll get used for more than that. (Which is what many people who are opposed are afraid of.)

I would not personally be a fan of making the feature so deliberately painful to "discourage" use. Either add it and make it as nice as you can, or don't. Why add ugly things to your language on purpose? :)

</comment></comment></comment></comment><comment><USER4> I think it's fantastic that this problem has people's attention.

I have long wished that _code changes_ to a repository could be accompanied by _code refactorings_ that are intended to be applied to code using that repository. For example, if you rename f() to g(), then you could accompany this by a refactoring that transforms existing callers of f() to use g() as well. I'd envision this as a build step that tells you that automated repairs are available.

The refactoring could be a small but limited program of its own, that is evaluated against the program abstract syntax graph, and that can be as powerful as is warranted or needed to properly transform programs using the code. Moving or renaming code could be a relatively simple type of refactoring. However, if you've renamed f(int) to g(int, int) such that callers of f(N) should call g(N, 0), then a slightly more complex refactoring script could handle that too. I would think of these refactoring scripts as something like how Git treats changes during a rebase: if you are far behind you might need to apply multiple of them to your code base in sequence to bring code up to date.

The article points out an important need for gradual repair to be possible. Along with a way to express that transition backwards-compatibly for a period of time, an automated way to apply the refactoring steps could make adoption even easier. In this fashion, refactoring and improvements could have far lower costs for libraries, APIs, etc. than they do in today's languages.

<comment><USER5> > an automated way to apply the refactoring steps could make refactoring a > breeze

It is called alias, a feature that should have been there a long time ago but "thanks" to a minority of gophers it's still not there. Go fundamental design issue is that it conflates namespaces with urls. It's not something that can be fixed by a third party tool.

<comment><USER4> I'm not a Go user myself, and my comment is about programming in general rather than Go specifically (though Go seems to be leading the way in this area).

Does alias help Go programs automatically transform themselves? Alias seems to provide direct compatibility between types, but doesn't seem to provide any way to automatically refactor code based on the alias, does it? [https://github.com/golang/go/issues/16339](https://github.com/golang/go/issues/16339)

Basically what I'm thinking is something like an alias feature where when A has been renamed to B, such that the name A has been left for backwards compatibility as an alias to B, then an automation layer could also help by automatically offering to rename A to B in existing code.

<comment><USER6> I think the reason it's not normally done is that for small open source projects, there are only a handful of usages and each author can easily do it manually. For a large monorepo, we do have (or are building) specialized search-and-replace tools to replace deprecated API usages with usages of the new API.

To scale this in the open source world, perhaps someone could search Github for Go projects and send out pull requests automatically. But people writing non-opensource code would still be pretty much on their own.

<comment><USER4> Thinking really blue-sky:

I'm imagining the refactoring rules as something that could perhaps ship alongside the library as part of its development release. Like, let's say we've released the latest version of our library which renames A to B. The release could include a refactoring rule that describes how to update from previous versions of the library to the latest version: a rule that identifies all references to A and replaces them with B. References that tooling cannot identify and fix can also still work for a time via the alias feature.

To make these rules easy to author, perhaps we could provide some form of assistance at the source control layer -- perhaps we could infer and propose refactorings based on the diffs that we see. If we see a diff renaming the method A to B, then we could see that and offer to construct a refactoring rule for all consuming code. Or with full IDE support, the IDE refactoring tool could call into the language service refactoring function to construct the rule.

To refactor in this language and platform, you'd rename your method, stage the commit, and then ask the language to analyze the change. It would detect the rename, offer to create a refactoring rule, and then you could accept that rule and apply it to your own code base (internal usage). You could have the option to save that refactoring rule as part of the package release. It could say: when consuming code upgrades from version 7 of this library to version 8 (or commit hash xxx to yyy), apply these refactorings. Indeed, even if the library does not ship refactoring rules -- or as an alternative to that model -- users could run the inference tool on the diff of changes to the library source. Shipping refactoring rules in the release would allow this scheme to work even if users don't have access to library source, though.

Imagine our library has hundreds of consumers on GitHub. When they next pick up a version of our library, and try to build the source, our build system could inform the user that refactorings are available and offer to apply them. The user clicks "accept", reviews the changes, and hopefully the package builds and its tests pass after that.

If we make this system really reliable, then we could apply these changes as the default course of action. Ideally the user would apply the refactorings and commit the changes to their source code, but even if the user doesn't, we could apply the changes to a temporary copy every time they build. Or the compiler could do it semantically for them, depending on how the rules work. This way even users who aren't willing to actively participate can still benefit from the capability. If your consuming package falls far behind the latest library, then the set of refactorings you need to apply to your code in order to build it could grow quite large and brittle, but it may still work (A changes to B today, and is moved into another package tomorrow). Like a rebase of many commits, you'd apply the rules one by one.

The goal would be to make it really easy to ship these refactoring rules as part of releases as a library vendor, and really easy to apply the rules as a consumer. The typical change would be small quality of life changes like renames and moves.

I wonder how a capability like this could transform the way we release software. Today, releasing a breaking change is anathema. It's anathema because we know it causes massive pain for users. If we had the ability to ease that pain, and make the upgrade process really easy or even automatic, then it could perhaps significantly change the way in which we think about interface contracts. Everyone who builds libraries is familiar with a time where you got the interface wrong, and really wish you could change it, but it's too late now because the library is too entrenched. This kind of system would make it possible for us to dig ourselves out of those problems and continuously improve even codebases that are widely used. Of course I have my head in the stars at this point, but I believe that all of this is plausible.

[I'm not a Go user, but these concepts have been something I've wanted to explore as features of a pet programming language I've been designing off-and- on.]

<comment><USER7> _Of course I have my head in the stars at this point, but I believe that all of this is plausible._

It's not only plausible. I know of environments where it would be easy to code-up.

<comment><USER8> And yet interface compatability/continuity would still be important unless you can automatically change all of the deployed instances without inducing any race conditions or transition issues. This can only be done through a backwards compatible layer or bifurcation of the install base. So really, nothing would be fundamentally different.

<comment><USER7> _And yet interface compatability /continuity would still be important unless you can automatically change all of the deployed instances without inducing any race conditions or transition issues._

The VisualWorks Package system could theoretically be applied at runtime. It would create a shadow of the meta-level objects, then the new meta-level could be applied atomically with "shape changes" of instantiated objects happening all at once.

This could 1) still incur a pause in the program and 2) in practice, bugs surfaced preventing the widespread use of the facility in running servers.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> I agree with this idea, and I'm glad that the Go team has come around to this. :)

Type aliases end up being very important when you have things like complicated closure types and generics. They are also useful for migration, as the article notes. It's also nice for packages to be able to reexport names from other packages: perhaps your library depends on some internal packages that you only want to expose a few types from.

One word of advice for Go developers if this is implemented: Pay attention to getting error messages in the compiler right. Ideally you want to refer to types by the name the programmer was using at the place the error occurred, not the underlying internal name. This requires hanging on to typedef information through more internal stages of the compiler than just name resolution. Clang does a great job of this with its "a.k.a." functionality.

</comment><comment><USER7> One issue with gradual refactorings, is that such projects can be abandoned, resulting in harder to read code. Such things could accumulate, like unused imports would if Go didn't have a mechanism to prevent that.

</comment><comment><USER10> As someone who drank the Golang koolaid this proposal kind of infuriates me.

Time after time, i've had to proselytize that Go is a good language precisely because of its simplicity and restrictions. Simple, explicit, easy to write, easy to understand, and most importantly easy to maintain code is the payoff for not having generics, not having syntax niceties, limited meta-programming, having to type out boilerplate, etc. etc.

We've been continually told that our use cases for missing features are just opportunities to explore the existing tooling to solve our problems, and to be honest it really hasn't been terrible advice. In fact, i've used the existing go tooling myself at work to do semi-large scale refactoring of the kind that aliases are supposed to solve. It wasn't terrible, and the solution ended up being rather clear and straightforward once I got over my aversion to code generation.

We've also been told that we need to program better to get the most out of Go... use interfaces, version APIs and include that versioning in import paths, separate concerns religiously, almost fanatically. If we just follow these rules then we'll experience Go nirvana and all will be well.

And yet when it comes time to practice what they preach, instead of having to take the same path as everyone else, Google just throws its weight around as de facto owners of the language and adds a feature to make their lives easier. A feature that doesn't even apply to most users of the language (the original argument for type aliases was for refactoring of extremely large codebases). Type aliasing seems like a huge outlier in the KISS philosophy of Go, and regardless of syntax or technical concerns the fact that Google can on a whim break all of their previous Ivory Tower positions that us plebes have had to deal with doesn't sit well with me.

Oh, and lets not forget that there was some sketchiness about the technical reasons for wanting type aliases at the beginning (we were told it was _absolutely necessary_ for either something in the Context package or in k8s, i don't remember precisely) which magically resolved itself without aliases, and the very first PR (for some experimental GUI package) using aliases was an example of _exactly_ the kind of poor practices that aliases allow, which we were assured was never going to happen because Google would only use aliases in the std lib if absolutely necessary.

I guess I shouldn't be surprised at this, but I'm pretty disappointed that it's already happening when we're still in 1.0. If the Go maintainers truly want Go to continue it's current trajectory and not turn into the next overwrought Big Co language they'll have to be as resistant to change from the inside as they are to change from the outside.

Edit: reworded first pp

<comment><USER5> > limited meta-programming,

Go reflection is one of the most complicated reflection I've ever seen in any language. Go's / C interop is one of the most convoluted implementation in existance. To pretend that Go is simple at first place is a lie. Go is not simple, it has a limited syntax, which is quite not the same. Go will evolve, whether you like it or not, even if it takes a whole new generation of Go developers and maintainers to get there.

<comment><USER11> This is what I keep saying, history has proven that languages that eschew complexity and happen to enjoy mainstream adoption, end up turning into the thing they were fighting against.

</comment></comment></comment><comment><USER12> I really like Go. It's a good language.

</comment><comment><USER13> You can learn more about Golang here [https://www.livecoding.tv/learn/golang/](https://www.livecoding.tv/learn/golang/)</comment>


NBC Confirms White House Lied About Osama Raid, Hersh Claims Accurate After All - <AUTHOR> http://www.nbcnews.com/news/world/pakistanis-knew-where-bin-laden-was-say-us-sources-n357306

<comment><AUTHOR> Video report of this story: [https://www.youtube.com/watch?v=UU7lRuMg_tM](https://www.youtube.com/watch?v=UU7lRuMg_tM)</comment>


.DS_Store - <AUTHOR> https://en.wikipedia.org/wiki/.DS_Store <comment><USER2> That's not the only problem. Apple leaves a whole bunch of "mac droppings" all over the place:

[https://github.com/github/gitignore/blob/master/Global/macOS...](https://github.com/github/gitignore/blob/master/Global/macOS.gitignore)

The worst part is that .DS_Store assumes, even on remote (SMB) filesystems, that only one machine will ever be accessing the directory, and so stores things like view settings and icon positions and such. Which means that every mac computer that accesses that file share will be fighting with each other, overwriting their metadata, and sometimes triggering problems because one has half-overwritten the file while another is accessing it.

That metadata should have been stored locally on the mac (with info about what path it refers to), not on the remote system.

Overall, it's a very poorly designed feature.

<comment><USER3> But it was pretty neat that you could arrange icons on a floppy disks and then give it to someone else and the icons were in the same position on their computer.

<comment> matt-attack It's still relevant today for external drives.

<comment><USER4> Disk images, which is how a lot of mac software is distributed also use this feature.

</comment></comment></comment></comment><comment><USER5> Veto'ing these files on Linux SMB servers along with ".thumb" files is one of the most satisfying things I have ever done as a network administrator.

[1]: [https://www.samba.org/samba/docs/current/man- html/smb.conf.5...](https://www.samba.org/samba/docs/current/man- html/smb.conf.5.html#VETOFILES)

</comment><comment><USER6> Just seeing this post among the others activates my instinct to delete the title.

</comment><comment><USER7> 7M+ .DS_Store on GitHub - [https://github.com/search?q=filename%3A.DS_Store&type=Code](https://github.com/search?q=filename%3A.DS_Store&type=Code)

</comment><comment><USER5> These temporary files are terrible! I don't know which major Windows version started with the ".thumb" and "desktop.ini" files, but if I tell my OS to navigate and display me contents of a folder, please don't change anything in that folder! You should be assuming "read-only" as often as possible, and only assume anything else when explicitly stated to do so.

But instead, they create thumbnails. In the very same source folder. Shouldn't this stuff go on some cache in your windows directory?

<comment><USER8> The wikipedia links to a similar article on the windows thumbnail cache, where it claims from Vista onward that Windows has a central cache location for thumbnail caches.

<comment><USER5> Ah yes, that explains why "thumbs.db" is no longer a thing and was mostly remnants left over from the XP days...

</comment></comment></comment><comment><USER9> Think about the amount of man hours people have spent deleting these files from repositories, USB drives, archives... They spread like a virus.

<comment><USER10> When I set up new fileshares at work I used Filescreen templates to stop those being created on network shares (Example [1]).

Gnome creates it's own too, and I wish it would stop - the only solution seems to be to recompile libgio with the trash method redirected to delete[2].

[1] [https://dea.nbird.com.au/2014/11/19/windows-server- prevent-m...](https://dea.nbird.com.au/2014/11/19/windows-server-prevent-mac- files-on-shares-ds_store-_-trashes/)

[2] [https://askubuntu.com/questions/229098/how-to-i-stop- ubuntu-...](https://askubuntu.com/questions/229098/how-to-i-stop-ubuntu- making-trash-folder-in-each-device)

</comment></comment><comment><USER11> I thought those files were a compromise when apple went to OS_X and got rid of the old "resource fork" park of the mac OS finder system. This data was part of the file, and let the operating system know which program to open the file with (even if it didn't have a .ext). But it made it hard to interopt.. But I might be a little off.

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

[http://mirror.informatimago.com/next/developer.apple.com/doc...](http://mirror.informatimago.com/next/developer.apple.com/documentation/mac/MoreToolbox/MoreToolbox-11.html)

</comment><comment><USER12> I have been glad these are user-visible files rather than some obscure FS metadata (xattrs) that get lost or propagated unpredictably by various tools.

The way they did it means I can delete 'em or keep 'em depending on what I want to accomplish and that the'll work on any filesystem.

</comment><comment><USER13> This has lead me to the idea of a "gitignore" for HN article title names.

<comment><USER14> Not a bad idea.

</comment></comment><comment><USER15> This is analogous to desktop.ini on Windows Explorer, or .directory on KDE Dolphin.

</comment><comment><USER16> I got data loss when OLPC's Sugar desktop did this. I put the SD card into the machine to undelete something, and Sugar promptly overwrote my data by adding some useless nonsense desktop file.

For all these sorts of things, I really truly think "How dare they!" and much worse. It fills me with rage that an OS would do this.</comment>


AMD's 7nm Ryzen 4000 laptop processors - <AUTHOR> https://arstechnica.com/gadgets/2020/03/amds-7nm-ryzen-4000-laptop-processors-are-finally-here/ <comment><USER2> So Anandtech has this to say about Thunderbolt 3 support:

"Display support for the CPUs allows for two 4K monitors through DisplayPort over Type-C, an additional 4K monitor if Thunderbolt is used, and a fourth monitor if USB 4.0 used. AMD has designed Renoir to not need additional chips to detect which way a Type-C is connected – that is all handled on die. With the display and USB support, the processor allows for concurrent USB 3.2 and DisplayPort use, with the peak DP v1.4 8.1G HBR3 standard in play using display stream compression (DSC)."

Which begs the question what does in-built mean? The Showcase Notebook Lenovo Yoga Slim 7 does not include USB 4 or Thunderbolt 3 so these modes will probably need additional chips.

...i want this 8-core chip with 32GB of LPDDR4X in a 13" Notebook that has 2 Thunderbolt 3 Ports and a matte Full-HD Touchscreen.

<comment><USER3> No, you want the _next_ generation, for the same reason: Thunderbolt is now officially dead, it has been absorbed into the official USB4 standard.

There is _very_ unclear support for existing Thunderbolt-over-Type-C devices under USB4, and it is likely your devices will stop working.

Please wait until USB4 and USB4-based solutions start shipping before you start adopting it, else you're going to be stuck with a bunch of devices that are no longer being supported, or cannot be cross-supported across Thunderbolt 3 and USB4 variants.

<comment><USER2> I already have a bunch of TB3 Docks in our company, so ditching them would really be painful and a reason to stick to Intel.

<comment><USER3> Intel's own version of their USB4 controller _might not support it either_.

Absolutely nobody I know has been able to get a straight answer out of anyone; not Intel, not the USB IF, not other members of the USB IF, on if existing Thunderbolt 3 devices will work on USB4 hosts.

And it will be a complete and absolute shitshow if it doesn't, because Type-C has swindled us into thinking Type-C is just Type-C.

</comment></comment></comment></comment><comment><USER4> It'd just be nice if integrators like lenovo wouldn't nerf things like displays. It looks like their lineup for AMD mobile graphics is going to be significantly different than the Intel counterparts.

<comment><USER5> For real! What's up with the lack of 2-in-1 AMD x13? I have an artist friend who needs a new laptop and I'm telling him to wait for Ryzen 4000 laptops. Am I supposed to tell him to get a gaming laptop or something?

These recent Intel laptops often have really dicey real-time performance because of how aggressively their clock speeds are controlled.

For someone who does mixed multimedia work, a Ryzen 4000 2-in-1 would be amazing. All those cores are perfect for real-time audio work, rendering and 3d stuff.

<comment><USER6> The announced Lenovo Yoga Slim 7 might tick the right boxes.

<comment><USER5> Oh wow, that one is so close! Just needs some more memory...

edit: at first I read that this would have 8 GB RAM, but now I'm reading that you can get up to 16 GB, which I think would be adequate for some basic multimedia work.

edit 2: wait I'm confused, according to the announcement, the AMD version is set at 8 GB of RAM.

[https://www.lenovo.com/us/en/coming-soon/IdeaPad- Slim-7-14AR...](https://www.lenovo.com/us/en/coming-soon/IdeaPad- Slim-7-14ARE05/p/88IPS701400)

</comment></comment></comment></comment><comment><USER7> I'm not sure if my next laptop purchase is going to be an AMD one because I haven't got enough data yet, specs, benchmarks, etc. But I know one thing for sure, I will exclude from my shortlist any OEM that does _not_ have a serious AMD based lineup. If they only have 1-2 models, or only in the low cost segment just to tick a box, I will be looking at other brands.

I can't help but remember Intel's practices in the past. So I'll vote with my wallet and go with OEMs that give both Intel and AMD an equal chance. Hopefully if enough people do that OEMs will find any backroom dealings less attractive.

<comment><USER8> In my case, I'm in the need of a new laptop this year, and I'm explicitly waiting for an AMD Ryzen.

I don't even care about the performance to be honest, I'm sure it will be adequate and I simply don't want Intel anymore.

With all the mitigations applied, I've lost the performance gain of the last two Intel laptop generations I had.

The integrated intel gpu is ok performance-wise, but being on linux I'm also tired of their development model: there's a fresh new driver/engine being developed every year, and it always buggy. It's true that intel always gets the latest kernel features first, but by the time is stable and it _works_, it gets deprecated in favor of a new buggy one. Way to go!

I've been using top-of-the-line lenovo laptops for a decade now. This has been the same every year, year after year, and I'm tired.

<comment><USER9> I would suggest to get another Thinkpad as other brands may not not be tweaked to Thinkpad loyal customers. For me, I always find my Thinkpad is quiet and cool during heavy workload.

As for Ryzen, I just bought their budget laptop, E485 (with Ryzen 2200u+SSD+FHD screen) last year. I was waiting patiently for Thinkpad deal to come, it was worth to wait, as my aging SL410 was still working. It has been matching my expectation so far: affordable, snappy enough, and good battery.

As for Thinkpad models, I find that their budget ones are sufficient for my startup and personal usage, as I do not use enterprise-level features, like those in T series (that I used during my corporate lives).

<comment><USER8> Although thinkpads work fine, I attribute this due to the number of developers using them, definitely not because Lenovo is spending _ANY_ money to make it work. This is not how it's supposed to be working. There are a few big issues that are making me reconsider them entirely.

You cannot buy a Lenovo without a Windows license. This is minor considering the price I'm usually going for, but since I don't use it at all, I consider it a microsoft tax.

Their "computrace" bios feature is still there in every new laptop.

With skylake, the last edition of the Yoga and X1 Carbon couldn't do S3 sleep by default anymore. For no other reason than to force windows use S2Idle. It requires a quite annoying work-around on linux to force S3, and only ~6 months ago we finally got a bios patch to re-enable S3...

The temperature throttling defaults are different from linux to windows, causing linux to throttle much more aggressively than needed on skylake. This is also caused by some bios issue which you can work-around with msr registers, but again... why?

I overall like the hardware. I'm quite fond of the built-in wacom pen too. I have minor quibs about the keyboard (QC issues) and screen (all TP I had in the last 5 years tend to develop bright spots in the backlight), but overall it's hard to find something similar. The dell XPS developer line is the only alternative I would be considering, and mostly due to their linux offering.

</comment></comment></comment></comment><comment><USER10> They mention Linux at least once in the article. That's always good to see.

<comment><USER11> Patches for Renoir based APU's appeared in kernel 5.4[0]. Looks like by the time these launch they will have out of the box Linux support which is huge compared to how Raven Ridge launched.

[0]:[https://www.phoronix.com/scan.php?page=news_item&px=AMD- Reno...](https://www.phoronix.com/scan.php?page=news_item&px=AMD-Renoir-APU- Linux)

<comment><USER12> And 5.4 is a LTS kernel. They were just in time apparently.

</comment></comment></comment><comment><USER13> A better article here: [https://news.ycombinator.com/item?id=22599598](https://news.ycombinator.com/item?id=22599598)

<comment> Tuna-Fish All the current articles are terrible, because none of them have independent benchmarks. Apparently, no-one got review units in time because of all the disruption, but AMD went ahead with dropping the embargo anyway.

<comment><USER14> It's a laptop chip. Due to thermal throttling variability and all the ergonomic factors, reviews only make sense in the context of a whole retail laptop you can buy. You aren't going to buy a laptop and then choose your chip separately.

<comment><USER15> This is a really good point. Modern CPUs remind me of home internet with maximum speeds advertised even though pragmatically it isn't anywhere close to what people will get. Laptops, Intel NUCs, AMD desktop APUs, etc. all take a huge amount of BIOS tweaking at least to make them run hotter before they throttle, use less power, and possibly disable temporary clock speed boosts that heat up the CPU too much and make it throttle. Anything in a small enclosure seems to be an exercise in optimizing heat.

More airflow, lower max clocks and higher throttling temperatures make a massive difference on the set ups I've worked with.

</comment></comment></comment></comment><comment><USER16> my laptop is a couple years old at this point, but I've been extremely happy with my ryzen 2500U HP Envy 15z.

when i replace this eventually, I'll be looking at AMD again, more than likely. Really solid.

</comment><comment><USER17> None of these battery benchmarks seem to normalize for work per unit time. 2.0 hours of cinebench rendering on one cpu and 2.5 hours on another cpu can't really be compared unless you know how many frames were rendered.

</comment><comment><USER18> Is there any chance Dell releases and AMD XPS 13?

<comment><USER19> I would be very interested in this as well but I fear Intel and Dell have some kind of exclusivity agreement for our beloved product line. In the meantime we'll all just switch to Zen2 ThinkPads.

</comment></comment><comment><USER20> Awesome, Moore's law is back on track

</comment><comment><USER21> Except they're actually not. I would love to buy one, but there is no one laptop with 4000 series in shops here, in EU.

<comment><USER22> Yes the whole supply chain is somewhat having a bumpy time, it will get there in the end.

But had a quick look from the UK and plenty here for next day delivery.

Even some fancy ones like: [https://www.amazon.co.uk/Zephyrus-GA401IV-GeForce- Graphics-W...](https://www.amazon.co.uk/Zephyrus-GA401IV-GeForce-Graphics- Windows/dp/B084N16YTY/ref=sr_1_2?keywords=ryzen+4000&qid=1584449576&s=computers&sr=1-2)

So technically they are available in the EU, just a slowly transitioning supply due to logistical human malware factors comming into play.

<comment><USER21> For the laptop you linked it says: This item will be released on April 16, 2020. Which considering human malware may be May+

<comment><USER22> Oh yes, defo saw maybe that or another one next day delivery - but may be case of bad listening and got corrected.

Did try look for the other listing I saw but not showing now, so hmmm.</comment></comment></comment></comment>


Slim, World's Richest Man, Loses $8 Billion in Four Days - <AUTHOR> http://www.bloomberg.com/news/2011-08-05/slim-loses-8-billion-in-four-days-as-mexican-holdings-suffer.html <comment><USER2> How rough his life must be now.</comment>


How Microsoft went from 30 million Windows Live bloggers to 300,000 - <AUTHOR> http://venturebeat.com/2010/09/30/only-300k-of-7m-microsoft-live-spaces-blogs-will-move-to-wordpress-com/?utm_source=twitterfeed&utm_medium=twitter&utm_campaign=Feed%3A+Venturebeat+%28VentureBeat%29&utm_content=Seesmic <comment><USER2> This is a terrible article:

* MSFT announced 7 million blogs, not 30 million.

* The article seems to be trying to imply that Microsoft has screwed up the transfer and that 90% of their bloggers have left over it. But it sounds like the real story is just that MSFT left out that 6.7 of their 7 million blogs are dead in their initial announcement.

* The stuff about Azure is a complete non sequitur.

<comment><USER3> > * MSFT announced 7 million blogs, not 30 million.

[http://windowsteamblog.com/windows_live/b/windowslive/archiv...](http://windowsteamblog.com/windows_live/b/windowslive/archive/2010/09/27/wordpress- com-and-windows-live-partnering-together-and-providing-an-upgrade- for-30-million-windows-live-spaces-customers.aspx)

> * The stuff about Azure is a complete non sequitur.

From (linked): [http://www.betanews.com/joewilcox/article/Windows-Azure- open...](http://www.betanews.com/joewilcox/article/Windows-Azure-opens-for- business-on-Jan-1-2010/1258479208)

"Ozzie said that a few companies would take Azure into production starting today. With that as introduction, Ozzie announced that Automattic, creator of open-source WordPress blogging system, would be one of those companies"

and, from TFA, "Automattic's Paul Kim said that it has no plans to host the blogs on Azure."

Also, from [http://techcrunch.com/2010/09/30/leaked-internal-emails- show...](http://techcrunch.com/2010/09/30/leaked-internal-emails-show- microsoft-overstated-windows-live-spaces-numbers/), "Microsoft decision-makers debated about customers moving from Internet Information Server running on Windows Server to ngix running on Linux" and "I'm hoping for a second half to this story, where we're hosting these WordPress sites on Azure…moving 20+ million to Linux seems like shooting ourselves in the foot"

<comment> clark-kent According to Matt (WordPress Creator) from [http://publisherblog.automattic.com/2009/11/19/wordpress- and...](http://publisherblog.automattic.com/2009/11/19/wordpress-and-windows- azure/)

"What did you announce about WordPress at Microsoft PDC 09? As part of the introduction of the Windows Azure platform, we announced that self-hosted WordPress can be run in an Azure environment on an open source stack of Apache, MySQL, and PHP. Showing MySQL in particular at a Microsoft conference was unusual.

Are you moving WordPress.com to Azure? No. WordPress.com, which is Automattic's hosted blogging service, is going to stay on its existing infrastructure. Martin Cron from the Cheezburger Network launched a new blog Oddly Specific on Azure, which some people confused with Automattic.

Do you use Azure at all? Yes, we've been testing out their blob storage as an alternative to Amazon S3 and Rackspace Cloudfiles. We don't currently use it in production."

</comment></comment></comment><comment><USER4> Nothing about this article explains _how_ it happened, only _that_ it happened.

</comment><comment><USER5> _Wordpress is adding somewhere in the order of zero servers to handle this capacity._ – alleged email from anonymous microsoft executive.

<comment><USER3> That is also mentioned on TC

[http://techcrunch.com/2010/09/30/leaked-internal-emails- show...](http://techcrunch.com/2010/09/30/leaked-internal-emails-show- microsoft-overstated-windows-live-spaces-numbers/)

</comment></comment><comment><USER6> It's WordPress Look, it is WordPress Notice the capital P It is CamelCased <http://wpcamelcase.com/>

</comment><comment><USER7> So why did Microsoft's blogging platform never get the traction that Wordpress.com did? Any big obvious errors?</comment>


It's Official: China's Wanda Acquires Legendary Entertainment for $3.5B - <AUTHOR> http://www.hollywoodreporter.com/news/official-chinas-wanda-acquires-legendary-854827 <comment><USER2> How petty this seems compared to the news about possible discovery of gravitational waves.</comment>


How much money do startup founders spend on "training as an entrepreneur"? - <AUTHOR> Hey guys, I am doing some research on an idea and I need to know something: Could you estimate how much money you have spent on training yourself as an entrepreneur during the first year when you decided you wanted to start a company? Thanks in forward! <comment><USER2> I attended a course on writing business plans (and how to get money from local banks) once at full cost, about 400 Euro. It was run by a consultancy and all other attendees were unemployed or in transition (where the job center pays 90% of the cost). I think that's the exception though, I don't know anybody else in startup/bootstrapping who did any training or spent any money other than maybe an 'accounting for beginners' book.

</comment><comment><USER3> Zero.</comment>


Ask HN: What would you like to see in a tech blog revolving around JavaScript? - <AUTHOR> I am making myself a challenge to write 1 quality blog everyday to make sure I got a good grasp of the subject in question.
I know, I know you must be thinking yet another blog. But I think the number of libraries/frameworks JavaScript ecosystem creates, there aren't enough people blogging about them. Also, there aren't more quality blogs like CSS Tricks or HackerNoon or sometimes FreeCodeCamp (yeah FCC used to be great once upon a time). Most of the people that write a lot of code aren't that interested in blogging.
I can write about CSS, JavaScript, React, React Native, GraphQL, Apollo, Node, Redux, Mobx, Jest, Flow & a lot of other things.
Please comment if you work with any of the above & what you would like to see? A full blown real world example or short explaination of concepts. Also, if there is any interest I can create Series like CSS Grid (there are already many out there but mine would be more example focused) or anything you love.
I am currently creating my Blog in Gatsby so I guess in a day or two I'll start writing. If you would like to be notified, subscribe @ https://tinyletter.com/deadcoder0904 <comment><USER2> Here in Brisbane, Australia, the FreeCodeCamp guys & gals are helping each other learn React and Vue, [https://www.facebook.com/groups/free.code.camp.brisbane/](https://www.facebook.com/groups/free.code.camp.brisbane/) Maybe reading the Facebook pages of campers will give you ideas for your blog: [https://study-group-directory.freecodecamp.org/](https://study-group- directory.freecodecamp.org/)

<comment><AUTHOR> Like your View but won't be writing on Vue

I know my jokes are terrible, my friends tell me that. But hey thanks. This is awesome & I didn't knew about it yet.

</comment></comment><comment><USER3> We lived for so long in a world where Javascript was so flaky and non-standard that wise programmers stuck to a lowest-common-denominator style. But now you can really take advantage of the language.

I'm writing a compiler in JS that uses higher-order functions all over the place and I haven't been bitten yet by language inconsistency or performance gotchas. So I think you could go a long way showing how to do the sorts of metaprogramming tricks that used to be only attempted in Lisp or Haskell.

<comment><AUTHOR> Any example? Just know that they are Functional Programming Languages. But I don't want to burden myself learning anything else because now I know a lot of things with which I can build Websites, Mobile & Desktop apps. So want to just apply it with Blogging as a hobby.

</comment></comment><comment><USER4> It would be nice to follow vanilla JavaScript/ES2017/ES2018 etc features, usage examples, etc. Maybe an ongoing tutorial series on building some common web features, deconstructing interesting stuff found around the web, etc.

Maybe an unpopular opinion, but I think vanilla JS is worth learning without reliance on the latest frameworks and libraries.

<comment><AUTHOR> Yep, yep & yep it helps learning Vanilla JS. But I don't think people will now go back to use `var` rather than `let` & `const`. Yeah I can give a basic overview why we have ES2015/16/17/18 when we can still use Vanilla JS. But my question is would most people learn that content when you know you can write better code in ES6 or ES7 & use Babel to transpile it to Vanilla JS?

The point is I want to reach to more people & I don't think there are many people like you & me that are willing to learn the roots of the evolution of JavaScript. If you think it would reach a wider audience, I can make tutorials on it.

But there are some awesome resources which have many of those things are - [https://javascript30.com](https://javascript30.com) & [http://exploringjs.com](http://exploringjs.com) & [http://2ality.com/2017/02/ecmascript-2018.html](http://2ality.com/2017/02/ecmascript-2018.html)

I was thinking maybe its better to create something which has less awesome resources. Something like Svelte or a full blown tutorial like [https://teropa.info/blog/2015/09/10/full-stack-redux- tutoria...](https://teropa.info/blog/2015/09/10/full-stack-redux- tutorial.html)</comment></comment>


The Non-Weirdness of Negative Interest Rates - <AUTHOR> https://www.bloomberg.com/news/articles/2019-08-08/the-non-weirdness-of-negative-interest-rates <comment><AUTHOR> Some illustrative paragraphs:

> _If you want to hold gold and watches and sentimental things at a bank, you > pay to rent a safe deposit box. If you want to hold oil or grain to use it > or sell it next year, you can pay for storage in a tank or some other > facility. And if there's a surge in the supply of oil or a bumper crop of > grain, and storage capacity is scarce, then you can expect to pay even more > for warehousing capacity. If you want to hold your wealth in land, then you > pay in insurance and security and property taxes._

[...]

> _In other words, to store money at a bank requires the existence of some > other borrower who will pay the bank. As such, just as you'll pay more to > store grain when grain is abundant and warehouse space is scarce, you have > to pay more to hold money when savings are abundant but demand for borrowing > is scarce._

[...]

> _If negative interest rates still seem odd to you, then it might be helpful > to just turn the question around. Ask yourself why you think that at a time > of limited growth opportunities in Europe, savers are entitled to get paid > for their wealth in Switzerland or Germany. Why is that something worthy of > remuneration?_

[...]

> _In the meantime, there's lots of money out there and a limited capacity to > store it all. So increasingly, savers are going to have to pay for money > storage services. And although it's not much consolation, we can at least > remember that whether it's fees for oil tanks, safe deposit boxes, security > guards, insurance, or wealth managers, there 's nothing unnatural about > being forced to pay to preserve your wealth._

<comment><USER2> "There's nothing unnatural about being forced to pay to preserve your wealth" said the rat-faced man in the expensive suit. He and his two burly associates had wandered into my shop, taken in the quality of my merchandise, but declined to purchase anything. Instead, perplexingly, he tried to sell me an "insurance policy", equal to 20% of my gross per month. After all, he said, to have the value of monthly sales in my boutique, I need to have an actual structure to sell from, and clearly, the continuity of my having possessions wasn't going to come for free!

<comment><USER3> Couching negative interest rates as wealth preservation fees is ridiculous. We already have mechanisms to charge for wealth preservation. Why is something so round-about as negative interest rates required?

Because it's not about charging people for wealth preservation. It's about encouraging people to spend money that is created out of thin air on things they don't need so the economic indicators look good and the masses are "fully employed". Many of the jobs in this setup tend to be selling addictive substances, addictive entertainment, and extracurricular actives that are hard on the environment.

I don't know about y'all but I think an economy based on what people actually need is essential for human survival and sustainability.</comment></comment></comment>


Understanding the linux kernel - <AUTHOR>

I'am willing to learn some parts of the linux kernel just for fun but i'am not good at c programming.is there anything that i should do before i get my hands on the kernel? are there any good books? <comment><USER2> "Understanding the Linux Kernel, Third Edition" by Daniel P. Bovet and Marco Cesati.

<comment><AUTHOR> thanks for the advice.your profile looks interesting.you say physics and math were minors in your degree.i intend to be a computer scientist one day.do you recommend that i study physics and math?

<comment><USER2> If you go into a technical field, you can never have too much math. That is, until you decide you've had enough. My CS program made us take enough math that we were only one course away from a math minor, so many of us elected to take an extra course and make it official.

As for physics, I just liked it. I don't think it has ever directly helped my CS studies, but it has enriched my life.

</comment></comment></comment><comment><USER3> Damn it, I kept clicking on the title thinking "Why isn't it taking me to this website called Understanding the Linux Kernel," I'm so used to seeing Ask HN :D</comment>


ODKCollect: Android app for forms, designed for use in challenging environments - <AUTHOR> https://github.com/opendatakit/collect <comment><AUTHOR> I'm one of a developer for Open Data Kit. And This is the first open source community that I have contributed to, I have to say, ODK is an awesome place to get start with open source developments and all the ODKers are so warm hearted and cool! ODK can teach many things you don't know and all you need to do is to claim an issue and send a PR!

<comment><USER2> And it's been great to have you as a developer on ODK Collect. Your RTL contributions to the UI have been a huge win for users!

</comment></comment><comment><USER3> Open Data Kit is an awesome tool! Our NGO has used it for public health surveys and other data collection applications in the DR Congo where internet coverage is spotty, literacy is low, and transportation is a logistical nightmare. It does exactly what it says on the tin and enables our community health workers to gather data in challenging places with just a phone and extra battery pack. As a bonus, the development community is great as well!

Really glad to see this project getting some attention!

<comment><USER2> ODK founder here! This is exactly the use case we want to serve and I'm glad to hear it's enabling your work.

</comment></comment><comment><USER4> The ODK ecosystem (build, aggregate, collect) has been in use for our Western Australian flatback turtle conservation program since 2016, now being used by Dept Biodiversity, Conservation and Attractions staff, community programs and Volunteers across the Kimberley and Pilbara regions. We've captured about 12k turtle tracks/nests in ca 2k hours of logged survey work. Data is ingested into a custom data warehouse, comes out via a RESTful API, is analysed in RMarkdown workbooks with common steps documented in a custom R package.

Widgets for notoriously error-prone data like location and date/time as well as replacing free text with dropdown options where possible made the difference for us.

ODK works really well for us, and the fantastic developer community has been greatly supportive addressing feature requests and bugs (quickest fix: Clint Tseng fixed an ODK Build bug reported mid-workshop within 2h). I'd like to see the industry heavyweights like ESRI being that responsive :-)

Cheers to the ODK community!

<comment><USER2> ODK founder here. Really glad to hear the tools have worked well for you, and yeah, Clint is awesome!

</comment></comment><comment><USER5> Yeah,I'm new to open source and really appreciate your post! I'm a bit confused because we can use... you know, many kinds of online tools to build forms and we don't even need a native application! So what's the special feature for this App? I'm very curious about this :)

<comment><AUTHOR> We want to collect data in challenging environments around the world, maybe some places without network connections. You can download ODK Collect and have a try.

<comment><USER5> Okey, thanks.

</comment></comment></comment><comment><USER6> This is a great project for a specific kind of problem - and one that's not the common target for silicon valley. It's hard to get good and useful data in places where connectivity is low. And the (coding and social) logistics of getting that data from ubiquitous non-smart-phones pose interesting challenges that ODK helps address.

It's also run by great people.

</comment><comment><USER7> Also look at kobo toolbox and kobo collect. They're based off the odk and forhub codebases I think.

Kobotoolbox provides a useful interface for previewing your data and building forms. Also an api for pulling collected data into other platforms

<comment><USER8> Kobo is based off of onadata, [https://github.com/onaio/onadata](https://github.com/onaio/onadata) (which is actively maintained) which was in turn the continuation of formhub (which is no longer maintained).

See this readme [https://github.com/kobotoolbox/kobocat](https://github.com/kobotoolbox/kobocat) for reference</comment></comment>