Ask HN: have you ever seriously learnt something through online courses? - <AUTHOR>

Have you ever learnt a trade or the basis of what became your trade (or part of it) through an online course?
I feel very compelled to start some courses on Udemy, since they're cheap as hell. Comments all look very positive, but I still can't understand if it will be time well spent. <comment><USER2> Yes: [http://logicmason.com/2013/self-directed-programming-and- com...](http://logicmason.com/2013/self-directed-programming-and-computer- science-study-through-moocs/)

I've taken dozens of courses on Coursera, have nearly completed my first edX course. What I've found works best for me is to learn relatively self- contained things, such as the Scala programming language, on Coursera / edX. For general CS/math courses, I don't find the classes as useful. There are too many issues with unspoken, inaccurate or unclear prereqs. Additionally, the courses force you to work at a steady pace, which often slows me down in some stretches and then eventually forces me to drop out if work gets busy. Additionally, some courses are significantly watered down.

Taking classes from MIT (or any school with a good selection) on Open Courseware fixes all of these problems. You do the exact same work as students did, you can see the same lectures, and you take the same exams. All of it is at your own pace. Best of all MIT knows very well which of its own classes are prereqs of its own classes, so the whole headache of jumping into courses you don't have the tools to take on is avoided, too.

</comment><comment><USER3> I've become a bit of a MOOC head. The best analagy is:

        MOOC platform  => Library
        MOOC course    => Textbook

The value differentiation is in the learning community. Self paced platforms add little - e.g. MIT OCW appears to have a lower success than its brand and instructor quality suggest. The tradeoff is in coarse flexibility. A learning community requires calendar scale synchronization, but can still be asynchronous at the finer scale of the clock.

Another way of looking at it is as correspondence school. That's the University of Phoenix model. It suggests a track record of producing larger scale educational outcomes - degrees - rather than immediate vocational retraining via online distance learning platforms.

At the other end there's Codecademy. Basically, structured interactive tutorials. While offering vocational training, they are less likely to serve as a qualification.

Anyway, my experience is primarily on Coursera. It has been that I come out with a better understanding of computer science and programming, But any immediate vocational improvement is directly proportional to the time actually spent implementing the ideas in code - e.g. I took a course that reccommend EMACS and my 'skill' in EMACS is a result of many days using it.

Good luck.

</comment><comment><USER4> I've token a few courses on coursera for free. Did some useful stuff with that knowledge.

I've spent a few hundred bucks on tech related courses and the value I've derived isn't direct. I enjoyed the courses and it keeps my tech skills current - I consider that a hobby expense as opposed to an investment expense.

You correctly identified time as a key parameter. I've signed up for dozens of coursera courses and not finished them. Those are free so no big deal. It would suck a bit more to pay cash for courses and not finish them.

</comment><comment><USER5> Yes definitely.

Just because of this thing, I am currently employed. The people who didn't took such courses seriously are currently suffering or lacking of good job.

</comment><comment><USER6> It can be done, but you have to remember to set strict deadlines for yourself, or else it will be a waste of time.

Without the pressure of grades going on your transcript, it can get exceedingly difficult to push yourself to finish all of the assignments, and there are few incentives against quitting after getting frustrated. This is why college courses work so well for so many people: good university transcripts are far more important than the certificates that online courses might offer.

Harvard's CS50x released some interesting stats after its first year. Of over 100,000 people who signed up, only 11% submitted the first and easiest problem set. Of these 100,000, only 0.9% completed the course. Of those who submitted the first problem set, 13% completed the course.

It's definitely possible to get a good education from online courses, but it's important to realize how difficult it will be to keep yourself on a schedule. Treat it as a normal university class, prepare yourself, and come up with a feasible daily/weekly schedule.

</comment><comment><USER7> What kind of courses?

Are they graphics and productivity apps (e.g. Photoshop, Microsoft Office, etc)?

Or are they programming & databases development stack? (E.g. PHP, Ruby, Javascript, etc).

If the courses are of the first category (product apps), the videos can be very helpful. That type of training is heavily task based. In other words, your eyes follow the instructor's mouse as it moves around the screen and you "look over his shoulder" to learn how to use software. It's much easier to learn Photoshop from dynamic video lessons rather than a static book.

However for category of programming, it is more of a mixed bag. You will often get higher density of information and best practices from books and blogs rather than videos. That's not to say there aren't any exceptional programming videos but on balance, the books are higher quality. However, some programming videos are heavily "task based" such as how to navigate around MS Visual Studio, or Eclipse, or setting of Apache web server.

</comment><comment><USER8> Speaking in general terms here, because you didn't specify any course specifics.

I wouldn't base your trade or part of your career on an online course alone. In order for the knowledge to stick you need to apply and practice it (like anything else including traditional classroom learning).

However in my experience MOOCs do give you a decent foundation, and likely put you in a position where you know of concepts being discussed in an area where your specific trade is being applied.

So my (perhaps unsolicited) advice is to not make the assumption that taking an online course will inundate you with useful knowledge to then go out in the industry and practice it. I think it'll give you a good foundation to either motivate you to gain practical experience or it'll make you aware that this particular trade is not a good fit for you.

Edit: To directly answer the original question, yes, I have seriously learned useful things from online courses.

</comment><comment><USER9> I'm on week 2 of Functional Programming Principles in Scala, at Coursera, and so far it's been a very pleasing experience. Lectures are of very high quality, and assignements are well built. I can't talk for any other MOOC, because that's the first one I've been on, but I would definitely recommend it to anyone.

<comment><USER3> The Scala course fits a common template for Coursera - by which I mean that a meaningful fraction of Coursera courses have similar features, but not all Coursera courses.

That template: A course taught by the person who 'wrote the book', in this Odersky teaching Scala. Others on Coursera: Ullman/Automata, Wetherall/Networking, and Sedgewick/Algorithms. The great thing about these courses is that the instructors know what is important and what isn't and therefore the courses don't get bogged down stuffing every detail into the lectures or reflecting every detail in the homework assignments. The big ideas are the big ideas.

There are also courses taught by mid-career professors - e.g. not fully tenured. These tend to be pretty good, but there is an undercurrent that the course assignments must defend their employer's brand by being hard just to be hard. These also tend to be quality courses, though there seems to be more variation.

The last group are those taught by newer academics and these vary more widely in quality. They tend to take a less general approach as there can be the feeling that 'making a name for oneself' in a publish or perish world is part of the motivation. If the instructor's interest closely aligns with the course and the student's interests, then it can be really good. If not, then there's the 'unenroll' button.

</comment></comment><comment><USER10> A specific fun example: I learned the insight that you can make a cryptosystem (stream cipher) out of a PRNG by using your secret key as PRNG seed, and then XORing your data with the PRNG output stream. The Coursera cryptography course was quite good in general.

More in depth: I definitely picked up some concepts in the lectures that I watched. I thought they were better than normal university lectures, mostly because you could skip ahead through them. But in general I think that for me, long assignments are a much more valuable teaching method, and most of the courses I followed/looked at had much too simple multiple choice fact-based questions for the practical part.

</comment><comment><USER11> I built my first webapp from what I learned in Udacity's CS101 and CS253, and Codecademy for front end. Supplemented by lots of Google, a quick python tutorial, and a Java course I took back in college.

[http://sudokuisland.com](http://sudokuisland.com)

More webapps in the works...

</comment><comment><USER12> I did Udacity Compsci 101 and Web Development cs253 (Python based web dev). I have yet to make a trade of it but they are good, especially cs253 and I hope to do some professional stuff as a result at some point. The courses are free if you don't need supervisors helping you.

</comment><comment><USER13> I've learned Android/Java programming from a video course on YouTube. Does that count?

<comment><USER14> Me too!!

</comment></comment><comment><USER15> Tbh I haven't yet paid for any online course. I strongly believe that there are many quality free online courses out there.

But Udemy has great reputation. I strongly recommend you to take a course so as to be able to form your own opinion after all.

</comment><comment><USER16> Most definitely. I've only done a couple on Coursera, but I found the Algorithms courses (1 and 2) by Robert Sedgewick and Kevin Wayne to be pretty well thought-out and articulate.

</comment><comment><USER17> i work in learning space for enterprises. though we cater to mobile learning and continuous learning needs, my observation is moocs work. many OD & L&D professionals are using moocs for their employees.</comment>


Ask HN: What are the best slack groups/communities you are part of? - <AUTHOR> I'd love to hear what Slack groups you all are part of, and why? What value are you getting? What do you love? What annoys you?<p>I am specifically interested for members of my team Slack groups aimed at: - COOs - CTOs - CMOs - Heads of Product - Product Mangers - Project Managers - Dev Ops - Software Developers in RoR, Angular, etc etc... <comment><USER2> Without a doubt, the best is rands-leadership.slack.com -- very active with dozens of channels, intelligent conversation among knowledgeable people.

<comment><AUTHOR> Thanks! Checking it!</comment></comment>


Compilers Targetting Parrot - <AUTHOR> http://wknight8111.blogspot.com/2010/05/compilers-targetting-parrot.html <comment><USER2> This returns me to the question I asked here: <http://news.ycombinator.com/item?id=1361382>

If I'm compiling, what should I target?

I could target LLVM, C, some high-level compilable langauge, or now, Parrot.

There doesn't seem to be any cogent, clear, knowledgable discussion of the various features and merits. I suppose asking for one is like asking "which language is best," and the answer will always be "it depends."

<comment><USER3> I've used Parrot as a target for a language implementation. It supports a lot of stuff out of the box (even multimethods!) and it's quite easy to get started. It also provides tools to help you build a compiler, like a parser generator integrated with the rest of the system. The problem is that right now it is quite slow, slower than Perl or Python, and a bit buggy. It would be an ideal target platform for dynamic languages otherwise. I wouldn't use it for something needed in production at the moment.

<comment><USER4> > a bit buggy

Anything off the top of your head that you've been bit by?

<comment><USER3> Threading just doesn't work (it's going to be rewritten from scratch). Sometimes there are segfaults within managed code and sometimes there are memory leaks. Sometimes an assertion in the VM fails, causing the program to halt with a stack trace. A few releases ago the compiler of Parrot's assembly language reported wrong line numbers in error messages, but this has been fixed.

<comment><USER4> All those "sometimes" seems to suggest that Parrot is much more than a bit buggy.

A memory leak is one thing, but segfaults and assertion failures... Down to brass tacks: is this thing usable in its current state?

<comment><USER3> > Down to brass tacks: is this thing usable in its current state?

Experimentation and quick and dirty prototypes? Yes. Production code? No.

</comment></comment></comment></comment></comment></comment><comment><USER5> Parrot's been claiming that it's slow and incomplete now, but a solution to that is just around the corner for a few years.

Maybe that's true, but I think that'd be the main concern of any compiler writer thinking of targeting it. It's not a mature platform with known pros and cons, unlike the JVM or LLVM.

I hope it all turns out for the best and Parrot delivers on its promises. But I can see why e.g. the PHP team isn't rushing to target it given the state of its native languages.

<comment><USER6> These things take a long time. Heck, it might even be a bit early to call LLVM mature. Sure, it supports a C and C++ compiler, but I don't think it has anything production-ready for much else.

<comment><USER5> It's in extensive use by Apple on the iPhone and in XCode, and outside Apple. The JVM is also well understood and widely deployed.

By comparison the Parrot project with the widest use is Rakudo, which is still just at a testing stage. Maybe there's some larger user of Parrot that I haven't heard about, so correct me if I'm wrong.

<comment><USER7> Lua 5.2 has been feature complete on Parrot for years. Like LLVM and the JVM, we'll keep tuning and improving and fixing bugs and adding features to make language implementation easier, but the correlation between "maturity" and "use" is strong.

<comment><USER5> That's interesting. Are there any recent benchmarks of Lua on Parrot v.s. LuaJIT? The only thing I could find was this from 2007 where it was ~2 orders of magnitude slower: [http://www.nntp.perl.org/group/perl.perl6.internals/2007/09/...](http://www.nntp.perl.org/group/perl.perl6.internals/2007/09/msg40359.html)

The URL to the benchmark script was broken so I couldn't run it.

Don't get me wrong, I think Parrot's very neat. But I could see why compiler implementors would be sceptical of it since it's not feature complete, and seemingly not very optimized. So there's a lot of unknowns.</comment></comment></comment></comment></comment>


Stephen Wolfram's TED Talk: Computing a theory of everything - <AUTHOR> http://www.youtube.com/watch?v=60P7717-XOQ

<comment><USER2> I think his whole approach is flawed... unless he proves that P=NP (with a constructive not an existence proof) his research agenda and the aim of Wolfram Alpha is stillborn. Setting aside his chronic confounding of existence and consciousness, his plan for searching the "computational universe" is impossible if one grasps the scale of that endeavor. Finding a needle in a haystack is easy compared to what he wants to do.</comment>


Researchers develop way to control speed of light, send it backward - <AUTHOR> https://phys.org/news/2019-04-researchers-develop-way-to-control.html <comment><USER2> Great to see new, in progress applications from reverse-engineering that Zero Point Energy Drive. Unless the spatial light modulator is just a sheet of acid.</comment>


Flash is a CPU hog? - <AUTHOR> http://www.mikechambers.com/blog/2010/05/10/top-flash-misperceptions-flash-is-a-cpu-hog/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+MikeChambers+%28Mike+Chambers%29

<comment><USER2> The reason that people are hammering at Flash so much is that there's one implementation of Flash and, for years, Adobe and Macromedia actively tried to stifle alternative implementations. Why does this matter? Over time, when there's competition between implementations, they all tend to get worked on and improve. Look at Apple's JavaScriptCore and Google's V8. Heck, even Firefox has improved JavaScript performance a lot compared to previous versions and Internet Explorer. The competition is so important that Microsoft has put a lot of effort into IE9 making JavaScript a lot faster there.

Right now, most implementations of HTML5, Canvas, and SVG aren't so fast. I've seen demos that show them getting fewer frames per second than Flash for animations. But the point is that they're open technologies whose implementations can and will improve. Flash has been a closed technology for so long and Adobe has taken that lack of competition and ignored performance concerns.

With video, it's the same situation. While browsers might not be using less CPU right now playing H.264, there's the potential for better decoding in the future. VLC uses very little resources on my Mac decoding H.264 video. It's not merely Safari's access to hardware acceleration since VLC doesn't use hardware acceleration.

The problem with Flash is that it doesn't allow companies like Apple, Mozilla, Google, and even Microsoft the opportunity to increase efficiency; it doesn't allow an army of volunteers to improve a code base. It's just stagnated since there was no other way to do animation and vector graphics until recently.

The problem with Flash isn't where it is now in comparison to other techniques. The problem with Flash is that the other techniques are open and improving at a rapid pace while Flash isn't. The problem with Flash is that open technologies have lots of smart people working to improve them and make their implementations better while Flash is remaining much the same.

Our objection to Flash is that we can see what happened with JavaScript and Ajax (from apps like Google Maps and Gmail to toolkits like jQuery and Prototype) happening with vector images, animation, and video if there's an open standard that all companies and individuals can freely implement and use; with Flash, all we can see is Adobe continuing to feed us the same product we've had for years.

<comment><USER3> Flash is not "remaining the same". Vast improvement has been done both in terms of features and performance in the past years -- many of them, yes, requested by the community - but I guess anyone who's not working closely with the technology won't be able to see it.

There's a lot of future predictions in your post. It's funny that people are changing their assumption that HTML5 _us_ faster to that it _will_ be faster eventually. Let's see how well this pans out. In the meantime, Flash will continue to evolve.

Good luck to everybody.

<comment><USER4> Since the Flash 9 release in 2006 that came with AS3 there were only minor improvements. So the rapid development of the previous years did not last. The past did not predict the future.

The new 3D API is maybe a 30% improvement in performance, it's mostly an improvement in swf size. Typed arrays rarely help. PixelBender looks like an early implementation, not a well supported feature. Alchemy isn't officially supported either, but it does some tasks well.

These hacky features took years to appear, so Flash isn't evolving any faster than browsers at this point.

</comment></comment></comment><comment><USER3> Not sure what's the gist of the test -- all this proves is that it's possible to achieve 100% CPU usage in HTML, and that some browsers perform better than others. How does that relate to Flash?

I guess my point is that it's missing some real benchmark. So here's some.

Desktop FP 10.1 vs Canvas <http://vimeo.com/10553088>

Android FP 10.1 vs Canvas <http://vimeo.com/10553088>

GUIMark 2 <http://www.craftymind.com/guimark2/>

I look forward to more benchmarks like these in the future.

<comment><USER5> From the article,

Re: real benchmarks

 _If you are interested in a more direct comparison of performance between various multimedia technologies, then check out the tests done at themaninblue.com [<http://themaninblue.com/writing/perspective/2010/03/22/>]. This is one specific test but it shows that if anything, Flash performance is on par (if not better in some cases) with comparable technologies._

and

Re: what does this have to do with Flash?

 _So, when looking at Flash CPU usage compared to other multimedia technologies, then no, Flash does not use an inordinate amount of CPU. While Flash content can at times use high amounts of CPU, this is a result of the nature of the content, and not necessarily specific to the Flash runtime._

Edited with some original content: I think he has a good point that there's a lot of blind anti-Flash rage without actually thinking about what Flash competes with. Yes it's better to design websites so they don't tax your processor, but we're probably going to see the same issues people peg Flash with when sites use open alternatives for multimedia.

</comment></comment><comment><USER6> A product that has been actively developed for over 14 years had sure as hell better be able to say something more than "our performance is on par with" an emerging technology that is still being developed and isn't even standardized yet.

<comment><USER7> 14 years of development can't do much against the fundamental complexity of whatever the product is supposed to do.

<comment><USER8> So, does that mean that you are implying that the irreducible complexity of tasks which were non-taxing to 15 year old computers in the early cd-rom "multimedia" era (e.g. various 2d animations and interactivity and video) in some way fundamentally require 100% CPU usage on modern multi-core multi- gigahertz processors?

Frankly I don't buy it.

<comment><USER7> No that is not what I am implying, although it is a valid fault with nearly _all_ of the software we run on personal computers, not just Flash.

</comment></comment></comment></comment><comment><USER4> Flash as a CPU hog is a user complaint. Users do not care how it compares to other similar technologies and this narrow metric won't convince any of them. This was a fixable problem that wasn't fixed.

Flash is no longer the king of easy to make visual extravaganza. It was apparent to those who used Flash because they couldn't pile on extravaganza effects like they saw in Processing. Flash did not even address their concerns for years, if they listened to core users the performance complains from the rest of the web would have resolved themselves.

Flash should have had hardware acceleration added years ago (not just for video) because it was commonly used to display very taxing animations. Multiple out of view banner ads were a common use case, Flash had no built in ability to disable out of view banners that did not need to run, or API to enable background tasks that needed to be run. Most banners were made with AS2 and Flash still does not have an auto updating mechanism apart from Chrome.

HTML5 Canvas will get hardware acceleration eventually, WebGL will have it from the start. The difference is Flash was around for years doing those things, shoving ever more taxing animations while ignoring usage scenarios and the economics of Flash projects. (where developers satisfy clients, not users)

I expect browsers will pay more attention to usage scenarios, since they make their money when people use the web, Adobe makes it from selling tools.

tl;dr – If Flash or Canvas feel like CPU hogs that needs to be fixed, whatever it takes. Put in CPU usage limits, don't let people compile CPU hogs, APIs for background tasks, add 20MB of hardware acceleration to the runtime, contribute to WebKit, Firefox, NativeClient to get it resolved. Should have prioritized this earlier, now kiss your penetration goodbye.

</comment><comment><USER9> Yes, it is. Any kind of non-hardware-accelerated video playback will be CPU- intensive. The MAIN point is that Flash is MORE CPU-intensive for a given frame-rate, color depth, and resolution than comparable codecs.

Comparing open, fresh-off-the-vine, HTML5 animations to a decade-old proprietary implementation like Flash is also a non-starter.

On the plus side, Flash videos currently make great, handy fan-speed servo tests for any Mac laptop.

<comment><USER7> You clearly know little about flash if you think its still using a decade-old implementation to do animations.

Additionally, flash uses HW acceleration where available, so your first point is moot.

<comment><USER10> Or rather, it WILL use them soon. Mac HW acceleration isn't fully deployed yet, is it?

It seemed to me like the article is, "Well yes there are these problem areas but there is an alpha that fixes them, so the entirely line of criticism is bunk." Obviously I do not agree.

It's good that Flash is finally getting comparable video playback performance. It's bad it took this long. And I also question why most people care. Flash, no flash... all I care about is video. If Flash is an impediment, let's dump it. Does that make a few Flash developers sad? TOO FUCKING BAD. This is an industry where change is a constant, if you wed your career to a technology you've made a fatal mistake.

<comment><USER7> "Or rather, it WILL use them soon. Mac HW acceleration isn't fully deployed yet, is it?"

Hence _where available_. And it wasn't available on the mac because Apple hadn't opened up the APIs to do it.

Your summary of the article is pretty poor -- that was one statement, the majority of the article was about the fact that critics often cite Flash as a CPU hog when comparing it to things that by default are not CPU hogs (static html).

Second, if video was the only thing Flash did, it would already be dumped. Flash does a lot more than that. The reason video is the linchpin is that it's taken innumerable years for standardized video access, whereas Flash provided it cross-platform. Sure you complain about Flash now, but the web wouldn't be where it is now without it.

<comment><USER11> "Hence where available. And it wasn't available on the mac because Apple hadn't opened up the APIs to do it."

VMWare and Parallels were able to use HW accelleration right? Why can't Adobe?

<comment><USER7> VMWare and Parallels do very different things than Flash does. My (uninformed) guess would be that it has to do with the security sandbox. The kinds of things you would run on VMWare (installable applications) is very different than what you typically run in Flash (whatever random dreck you happened to stumble into on the internet :P).

<comment><USER10> It's much easier to do hardware accelerated 3d drawing with a toolkit for an interpreter than it is to make a full virtualization layer properly do hardware acceleration.

Your opinion is indeed uninformed. Fortunately for you, correction is easy to get on the internet.

</comment></comment></comment></comment></comment></comment></comment><comment><USER12> The reason people perceive Flash as a CPU "hog" is because there are a lot of script kiddy flash programmers out there that will write the equivalent of an infinite loop in their banner add. I've been in the trenches and seen some of the horrible ActionScript code. The same thing can happen with bad javascript. Flash GUI tools tend to attract non-programmers so they can make pretty stuff. Too bad it does not tell them that they have just created something that will crash everyone else's browser.

Maybe if Flash's run time encapsulated the Flash instances and made them behave, this would not be an issue.

</comment><comment><USER13> Part of the problem with flash is that when it is crunching away executing some code, it is unresponsive to GUI events. One way around this is to break up computation by using a chain of events to complete the computation which allows GUI events to be interleaved thus making the application more responsive.

</comment><comment><USER14> I think the main point is that for _video_ flash is more taxing than a hardware decoded html5/x264 (at least on the mac because flash video doesn't use hardware decoding).

<comment><USER15> Except that it's also much, much more taxing on the Mac than other non- hardware decoding players. What seems seldom noted in this discussion is that the only OS X video player that supports hardware decoding is Quicktime X. Anything else—earlier versions of quicktime, VLC, MPlayer—uses software decoding. Despite this fact, those three options place half or less CPU load on my MacBook's processors than flash video does. As a quick test, a 720p h264 video running in VLC (software decoding) uses 35-50% of a CPU. 720p youtube using Flash 10.1's new hardware decoding support, uses >100%. That's simply unacceptable for fundamentally doing the same thing.

Flash performance on the Mac is terrible and hardware decoding is a red herring. I think a lot of those defending Flash's performance use Windows, where performance is much better.

<comment><USER16> [http://blogs.adobe.com/penguin.swf/2010/01/solving_different...](http://blogs.adobe.com/penguin.swf/2010/01/solving_different_problems.html)

<comment><USER15> The only thing that article convinced me of was that Flash is not a good solution for playing streaming video, because it has other priorities and must make concessions to those. But isn't that what the anti-flash crowd has been saying all along? Other video players may have an easier time providing good performance, but they still can get better performance. If Adobe is happy solving different problems they should accept that their customers who have a problem Adobe doesn't solve will be looking towards other solutions.

There's also the sticky issue of vast performance differences between windows and OS X/linux on the same hardware, but even if we accept your thesis that this isn't really Adobe's fault, it doesn't excuse the poor performance.

</comment></comment></comment></comment><comment><USER17> I didn't see anything in that post that disproved that Flash is a CPU hog.

I work with Flash and AIR apps on a daily basis, and I can tell you that invariably by the end of the day my browser's Flash plugin is using the majority of my CPU time and RAM.

<comment><USER7> The point is, CPU hog compared to what?

<comment><USER18> If it's using the majority of the CPU and memory, then the answer apparently is "compared to everything else".

<comment><USER17> Exactly. If it's hogging the CPU, it's hogging the CPU--it's irrelevant if it's more or less a hog than something else really.

Truth be told, I'm only running a Mac Mini. That being said, iTunes seems to be more efficient at streaming audio, video. Other desktop applications seem to do a better job at graphics in general.

I guess part of the performance hit one experiences with Flash is due to the overhead of a nice cross-browser, cross-platform, web-oriented runtime. Java applets, which do more or less the same thing, are also pitifully sluggish, in my experience.

<comment><USER7> It's more than relevant whether something hogs a CPU compared to another program that does an equivalent thing. No one complains when Crysis hogs the CPU, because we all expect 3d games to hog the CPU. People complain when Flash hogs the CPU, but seem to forget that HTML5/JS apps that do equivalent things often hog the CPU just as much, if not more. _That_ is the relevance.

<comment><USER17> Good point. I guess it does depend on context and the purpose of the app.

</comment></comment></comment></comment></comment></comment><comment><USER19> I recently tried out a demo of a "high-speed" side-scrolling game library for flash. It ran OK, but not terribly impressive considering how little was going on. But it seemed really familiar somehow... Eventually I realized that it was nearly identical in both content and performance to a Univesa (like DirectDraw for MS DOS) demo that I ran on my Pentium1 60Mhz back in 1996.

</comment><comment><USER20> I would be curious to see how the same benchmarks pan out for running flash on some of the popular Linux distros, e.g. Debian, Ubuntu, Red Hat. I write from the assumption that Adobe sees little incentive in ever releasing decent flash support for Open Source OS's, but a quantitative comparison would at least be informative.

<comment><USER3> From a comment in <http://themaninblue.com/writing/perspective/2010/03/22/> :

 _mine is: (ubuntu 9.10, core email@example.com)_

 _on FF3.5: flash 25 FPS, canvas: 16FPS, svg: 2FPS_

 _chrome: flash 26, canvas, 12-15,svg:13_

I suspect the guy is running the beta x64 version of FP10 for Linux though, as other people are having lesser ideal results.

</comment></comment><comment><USER21> What about a "disclaimer, I'm an Adobe employee" in the post? It's kind of obvious that he is, and a quick look on the About page confirms it, but I find it more than a little dishonest that he's talking about his employer's technology without disclosing that fact.

<comment><USER22> If you look at the front page of his blog, you can see that he's blogging about flash quite frequently. For any normal viewers of his blog, they will already know about his Adobe connection and the stances he will take with flash. We're just in the unfortunate position of popping in for this one blog posting.

One solution would be if he had a brief bio in the sidebar beside each blog entry, but otherwise I would not expect him to put a disclaimer on each post he makes.

</comment></comment><comment><USER23> Amongst my friends, the joke is that you need at least two cores, one for listening to music on Pandora and one for other things. On my quad core phenom II (Linux) Pandora uses nearly a whole core. There is nothing within Pandora that justifies such cpu usage. Same goes for video. A youtube video shouldn't be using 25% cpu (one core) on a decent quad core. (Note: windows and other variations have better CPU performance, but in Linux world Flash has never been very decent).

<comment><USER24> If you're interested in pandora without flash, you might want to check out pianobar - <http://github.com/PromyLOPh/pianobar> \- it has pretty much all of the functionality without the overhead.

</comment></comment><comment><USER25> Have you heard the CPU fan when watching a video using flash?

<comment><USER26> No one believed me and people actually thinks I am being snide towards Apple/Adobe when I told them during winter, when my heater was not working so good for one week I would play a flash video on my macbook and put my palm under the laptop to keep myself warm. Yes, it does indeed gets that warm and I am not joking.

<comment><USER27> Real men/women run a C program doing floating-point divisions (to peg CPU) while writing random bytes to memory (to heat up caches) to keep warm. :)

<comment><USER26> Watching kitty videos adds to the warm and fuzzy feeling during winter that I doubt floating-point divisions can do.

</comment></comment></comment></comment><comment><USER28> As anybody with a netbook can tell you that many videos which are extremely choppy in flash (yes, even if fully buffered) are quite playable in vlc for instance.

Now given that one of the main uses for flash is streaming video, that should simply not be the case.

</comment><comment><USER29> My metric: When I installed flashblock my laptop battery life went up by a significant amount.

</comment><comment><USER30> C is slow! "while(1){}" uses 100% CPU! In conclusion, Flash is awesome.

</comment><comment><USER31> Mike's an adobe employee. Obviously. Here's the problem for Adobe -- it's not just apple / apple employees / apple devs that despise flash. The performance sucks ass, no matter what deluded blog posts they publish. I know this because flash runs on my computer, and I'm gonna believe my lying eyes over their nonsense.

Instead of having employees run all over the web lying about flash performance when people see the truth right in front of them all day long while using the internet, perhaps he and adobe should try fixing things? Just a thought.

<comment><USER32> I second that. Using Flash to simply play video on Linux/Firefox drives my CPU up to 100%. No matter what benchmarks or graphs you contrive to show me, I can HEAR my box's fans getting loud.

</comment></comment><comment><USER33> From my point of view, problem with flash is not that it uses inordinate amounts of CPU time when doing something "useful", but that it consumes incredible amounts of CPU event when it does nothing. On my laptop, there is clear correlation between opening something like youtube video and firefox taking 99% CPU few hours later and refusing to even close (and requiring restarting by means of "killall firefox-bin"). Every time when I had to forcibly kill firefox without flash plugin I was able to find some reason why it had hanged (and in most cases it simply hanged, not consumed 100% CPU), like malicious JS code.

Also, flash is only thing that is reliably broke by suspend to disk on my laptop.

So for me, there is not room for improvement in flash, but flash is simply broken piece of crapware.

<comment><USER4> Here is a fix that could have been done long ago to reduce CPU usage <http://www.kaourantin.net/2010/03/timing-it-right.html>

It took a lot of whining for them to get started on it, but there was and is plenty of room for improvement. The argument about heavy media using a lot of CPU in HTML5 and bad developers who don't care about users only goes so far. Ultimately, Flash is what's being used for CPU hogging sites, Flash developers are the ones pushing the boundaries on a large part of the web, and the makers of Flash need to keep up with their developers.

When Canvas or JS becomes annoying it will be up to browsers to fix it, include click to Canvas, do whatever it takes so users keep using the web. If they fail at this, they'll have a hatefest coming their way.</comment></comment>


Five Years of Btrfs - <AUTHOR> https://markmcb.com/2020/01/07/five-years-of-btrfs/ <comment><USER4> I went on a quest a few years ago, thinking it would be good for the industry to standardize on a single next generation filesystem for UNIX. I started with ZFS on linux since that seemed to have the most vocal advocates. That lasted about a half year, until a bug in the code resulted in a completely corrupt disk, and I had to restore 4TB of data over a month from offside backups. That plus the licensing confusion around ZFS has made it impossible for ZFS to be the defacto choice.

I went down the BTRFS path, despite it's dodgy reputation when netgear announced their little embedded NASes, and switched my server over to it. The experience was solid enough that I bought high-end synology and have had zero problems with it.

<comment><USER5> I really don't understand the insane hype around ZFS. You can't read any thread that touches on filesystems without the ZFS zealots coming out.

<comment><USER6> The hype is quite easy to understand. Snapshots and checksums are two complete game-changers. ZFS has them both. And there are no real alternatives in many cases.

I've personally waited for BTRFS longer than a decade but my use-cases are yet to be considered stable (not something you really mess with in regard to filesystems).

Honestly, as sure as I have been on the success of BTRFS I now consider BTRFS dead on arrival - if it will ever even arrive. The pace of development is slower than the universe around it, that might be too harsh but really - <USER2> RAID6 yet? A decade ago the impression I got was "soon". And now 2-drive parity is becoming obsolete.

ZFS has tons of warts for home-use, I agree. So, for a home-user with high demands I don't see anything exciting in the future.

<comment><USER7> There were a bunch of btrfs raid56 patches last year. I think the known bugs have been addressed and is just that the wiki page hasn't been updated.

Re obsolete, are you referring to RAID1C3?

<comment><USER6> I'm thinking of this:

[https://www.zdnet.com/article/why-raid-5-stops-working- in-20...](https://www.zdnet.com/article/why-raid-5-stops-working-in-2009/)

I'd much prefer something like raidz3 compared to the authors setup.

RAID1C3 is nice but very expensive for use in bulk storage at home.

</comment></comment></comment></comment></comment><comment><USER8> A question for HN: what filesystem and/or block-device abstraction layer would you use on a database server, if you wanted to perform scheduled incremental backups using filesystem-level consistent snapshotting and differential snapshot shipping to object storage, _instead of_ using the DBMS's own replication layer to achieve this effect? (I.e. you want disaster recovery, not high availability.)

Or, to put that another way: what are AWS and GCP using in their SANs (EBS; GCE PD) that allows them to take on-demand incremental snapshots of SAN volumes, and then ship those snapshots away from the origin node into safer out-of-cluster replicated storage (e.g. object storage)? It it proprietary, or is it just several FOSS technologies glued together?

My naive guess would be that the cloud hosts are either using ZFS volumes, or LVM LVs (which _do_ have incremental snapshot capability, if the disk is created in a thin pool) under iSCSI. (Or they're relying on whatever point- solution VMware et al sold them.)

If you control the filesystem layer (i.e. you don't need to be filesystem- agnostic), would Btrfs snapshots be better for this same use-case?

<comment><USER9> I do not think it would be a good idea to use file system level snapshotting for backing up a database. The database "knows better" about its internals, and can give more guarantees about the consistency of its data. I would trust a filesystem-levdl backup only as a last resort.

<comment><USER10> It is possible to put database in state that is "ready" for snapshot, pushing changes to disk and sort of freezing I/O during snapshot.

<comment><USER11> this is generally not a matter of concern for a copy on write filesystem like zfs, since it's not possible for the file to be in an "in between" state. If a write were in progress, the filesystem would still be pointing to the previous state. Only when the data is written to disk is the pointer moved to the new location.

<comment><USER6> It very much is a concern. ZFS has no knowledge about the internals of a database, which parts of a file are related to each other etc.

<comment><USER12> DBMSes always keep their database in the file system in a consistent state to be able to recover from system crashes. Taking a file system snapshot is equivalent to pulling the power on the database server in terms of data recovery, but databases are designed to support this.

<comment><USER6> As do filesystems. Yet I've seen anyone argue that cutting the power is the recommended way of doing backups.

In fact the opposite, make sure to use an UPS just so that you can shutdown cleanly in the unfortunate event.

For example: [https://blogs.oracle.com/paulie/backing-up-mysql-using- zfs-s...](https://blogs.oracle.com/paulie/backing-up-mysql-using-zfs- snapshots-and-clones)

<comment><USER13> Some people came up with the idea of "crash-only software", arguing that it's better to maintain one code path (recovering from a crash) than two (clean start and recovery), but it hasn't caught on that much. [https://www.usenix.org/legacy/events/hotos03/tech/full_paper...](https://www.usenix.org/legacy/events/hotos03/tech/full_papers/candea/candea_html/index.html)

<comment><USER14> Google follows this, I believe

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER15> I've seen a lot of the hacker community focusing on btrfs and zfs but very little focusing on ceph. I think ceph has a lot of the features that we want in a file system and some things that aren't even possible on traditional file systems (per-file redundancy settings) with very little downsides. The setup is a little more complex involving a few daemons to manage disks, balance, monitor, etc. I wish there was something similar to FreeNAS for ceph that only focused on making the experience seemless because I think if it became more popular in the home lab space we'd see lots of cool tools pop up for it.

<comment><USER16> I love Ceph, I even wrote an intro about it for those who are not familiar with it.

[https://louwrentius.com/understanding-ceph-open-source- scala...](https://louwrentius.com/understanding-ceph-open-source-scalable- storage.html)

But Ceph is not designed to be a competitor to BTRFS or ZFS. The core vision of Ceph is scalability. If you need petabytes of storage and the performance to scale with it, take a look at Ceph.

I may be totally wrong here, but from what I understand about Ceph, it's not meant as a file system for a single computer. I don't understand the idea of running Ceph on your laptop/desktop. It's possible to run it that way but it defeats it's purpose.

I've build a small lab setup with Ceph:

[https://louwrentius.com/my-ceph-test-cluster-based-on- raspbe...](https://louwrentius.com/my-ceph-test-cluster-based-on-raspberry- pis-and-hp-microservers.html)

Also, there's the issue of performance, in particular latency. That's a bit of a weak spot of Ceph, from what I can tell. Again, may be wrong. But I found these notes interesting.

[https://yourcmc.ru/wiki/Ceph_performance](https://yourcmc.ru/wiki/Ceph_performance)

<comment><USER17> This.

In fact, it's really common to use a ZFS array on single nodes, and then create a SAN using multiple such machines by layering Ceph on top.

<comment><USER16> That's interesting, but it's layers upon layers... (RIP latency), I think. Unless it's about just bandwidth and volume, then latency is not that big of a deal.

<comment><USER17> You don't have to use ZFS snapshots. I haven't run a system like this in production but presumably you choose ZFS because it's flexible in how you configure the arrays (as is say, LVM) and because it supports checksumming.

</comment></comment></comment></comment></comment><comment><USER18> Love using Btrfs; the is no better filesystem than it nowadays that it's reliability issues have been fixed.

<comment><USER19> > nowadays that it's reliability issues have been fixed

Is this also true for RAID5/6?

<comment><USER20> This issue has its own wiki page on the BTRFS wiki:

[https://btrfs.wiki.kernel.org/index.php/RAID56](https://btrfs.wiki.kernel.org/index.php/RAID56)

So, no, that particular issue hasn't been fixed.

<comment><USER21> > * For data, it should be safe as long as a scrub is run immediately after > any unclean shutdown.*

That's unfortunate. Does the scrub run automatically in those situations? Consumer hardware will be the most prone to intermittent power failure.

</comment></comment></comment></comment><comment><USER22> I've had one issue with btrfs that took it off my radar completely. A customer had a runaway issue that filled a btrfs device with unimportant things. We found the errant process and killed it, but apparently if a btrfs device is completely full, you can't delete anything to free up space. File removal requires some amount of free space. Bricked the device, annoyed a customer, back to ext4.

<comment><USER23> ZFS had this issue (I believe fixed) workaround was to pick up one large file that you wanted to delete and do `echo -n > /the/unimportant/file` once the file was reduced in size to 0, rm started to work again.

Not sure if that workaround would work in btrfs, but it worked on ZFS.

<comment><USER24> What happens if the file has already found its way into a snapshot? Then presumably that command will not free any space.

<comment><USER23> Well, rm wouldn't free the space either so you either would remove the snapshot or chose a different file.

</comment></comment></comment></comment><comment><USER25> I use BTRFS on several devices for years. The tooling is a bit rough, but no major problems. Just recently data checksumming saved me: In December I replace an old 2TB drive in my RAID1 (2+4+4+4) with an 8TB drive. The new drive had checksum errors after a few weeks which BTRFS handled gracefully. With "classical" RAID i might only have noticed when it's to late. (I RMAed the bad drive)

      [/dev/mapper/h4_crypt].write_io_errs    0
      [/dev/mapper/h4_crypt].read_io_errs     0
      [/dev/mapper/h4_crypt].flush_io_errs    0
      [/dev/mapper/h4_crypt].corruption_errs  0
      [/dev/mapper/h4_crypt].generation_errs  0
      [/dev/mapper/h2_crypt].write_io_errs    0
      [/dev/mapper/h2_crypt].read_io_errs     30
      [/dev/mapper/h2_crypt].flush_io_errs    0
      [/dev/mapper/h2_crypt].corruption_errs  0
      [/dev/mapper/h2_crypt].generation_errs  0
      [/dev/mapper/h1_crypt].write_io_errs    0
      [/dev/mapper/h1_crypt].read_io_errs     0
      [/dev/mapper/h1_crypt].flush_io_errs    0
      [/dev/mapper/h1_crypt].corruption_errs  0
      [/dev/mapper/h1_crypt].generation_errs  0
      [/dev/mapper/h3_crypt].write_io_errs    0
      [/dev/mapper/h3_crypt].read_io_errs     0
      [/dev/mapper/h3_crypt].flush_io_errs    0
      [/dev/mapper/h3_crypt].corruption_errs  0
      [/dev/mapper/h3_crypt].generation_errs  0
      [/dev/mapper/luks-e120f41e-9c8a-4808-876f-fa6665ee8bb8].write_io_errs    0
      [/dev/mapper/luks-e120f41e-9c8a-4808-876f-fa6665ee8bb8].read_io_errs     16
      [/dev/mapper/luks-e120f41e-9c8a-4808-876f-fa6665ee8bb8].flush_io_errs    0
      [/dev/mapper/luks-e120f41e-9c8a-4808-876f-fa6665ee8bb8].corruption_errs  20619
      [/dev/mapper/luks-e120f41e-9c8a-4808-876f-fa6665ee8bb8].generation_errs  0

edit: formatting

</comment><comment><USER26> I have been using btrfs in my "NAS"/personal server for 3 years, changed disk configuration a couple times, I do snapshots every hour and prune them using a Fibonacci-like timeline, no problems yet.

<comment><USER27> My experience has been the same. Admittedly, I've not tried native BTRFS parity raid (I'm sitting the volume on top of mdraid). But, I ran the "mkfs.btrfs" 5 years ago at this point for my desktop and no data loss yet. I back things up religiously, so I'm not too worried about the volume failing, but it'll be nice if btrfs parity raid gets stabilized, because I could replace my current NAS storage config.

I used to use ZFS on my NAS, but after running it for a year and fiddling with it, I wasn't able to tune it in a way I liked. I always had random performance problems and zvols were super slow. It's now dm-integrity on all disks, an mdraid raid6 volume over those, with LVM2 on top of that and mirrored NVMe disks as a read and write cache.

I also wish BTRFS would add extents at some point so you could run virtual machine images from it without weird performance issues from time to time (although I imagine this is less of an issue on SSDs because they're "fragmented" inside anyways).

</comment></comment><comment><USER28> I use btrfs in raid1 mode and the ability to shrink/grow/add/remove devices at will without data loss or extended downtime led me to choose btrfs over zfs on my home servers.

<comment><USER29> You can grow and add/remove raid1 devices (mirror vdevs) in ZFS without any significant work or downtime. Shrinking does require a bit more work, but depending on your setup it can be done fairly painlessly with send/recv (and shrinking is usually not something which is a very common administrative operation).

<comment><USER21> How? My understanding is that you create a new vdev and add the old vdev as a device, basically recursively creating volumes with each new device you add.

<comment><USER29> Which operation are you asking about? [1] is a sister comment which I posted that outlines how to do most of the operations I mentioned.

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

</comment></comment></comment></comment><comment><USER30> Is there any specific reasons to run btrfs over for example ext4? You can create/shrink/grow pools, create encrypted volumes etc by using LVM.

It all depends on the application but in the majority of cases the io performance of btrfs is worse than the alternatives.

Redhat for example choose to deprecate btrfs for unknown reasons while SUSE made it it's default. The future of it seems uncertain which may cause a lot of headache's in major environments if implemented there.

<comment><USER8> Redhat and SUSE (SLES) are both enterprise environments, so at every level, they have to choose one tech stack to go all-in on (i.e. to train their support staffs on), and then discourage their customers from using the others. ("Deprecating" a component, for such orgs, means that some of their customers are now stuck with it, and they'll continue to support _those_ customers in their use of it, but they certainly won't support _new_ customers using it.)

The fact that one enterprise-support provider went all-in on Btrfs, while another didn't, basically tells you that the choice is pretty arbitrary. If _no_ enterprise-support provider used Btrfs, _then_ I'd be concerned.

<comment><USER31> The enterprise provider that actually develops btrfs continues to support btrfs, and one enterprise provider that doesn't stopped supporting it.

People treat RH stopping support of btrfs as some sort of death knell for it. Meanwhile all the btrfs users are confused why RH's opinion should matter at all when they weren't that involved with developing it in the first place.

As an opensuse user, btrfs has saved multiple machines from botched updates by letting me revert to the snapshot from right before the update was applied (opensuse's update tool automatically takes snapshots before and after updates).

<comment><USER32> Red Hat _used_ to be heavily involved in Btrfs development. In fact, they are present in a huge chunk of its development in the first few years. But their developers were hired away by Facebook, leaving Red Hat with nobody who work on Btrfs regularly. That's the underlying cause for why they stopped supporting it. Hiring someone to work on Btrfs takes time and effort that they don't have a reason to spend right now.

</comment></comment></comment></comment><comment><USER33> fsync is still a bit slow on BTRFS (on ZFS too, but to a smaller degree). For example, I just did a quick benchmark on Linux 5.3.0 - installing Emacs on fresh Ubuntu 18.04 chroot (dpkg calls fsync after every installed package).

ext4 - 33s, ZFS - 50s, btfrs - <USER3>

(test was ran on Vultr.com 2GB virtual machine, backing disk was allocated using "fallocate --length 10G" on ext4 filesystem, the results are very consistent)

<comment><USER34> is ext4 also from fallocated file on underneath ext4?

<comment><USER33> Yes.

</comment></comment></comment><comment><USER35> Did anyone had the courage to use btrfs in production? Any stories to share?

<comment><USER36> Seems like Facebook uses it:

"Btrfs has played a role in increasing efficiency and resource utilization in Facebook's data centers in a number of different applications. Recently, Btrfs helped eliminate priority inversions caused by the journaling behavior of the previous filesystem, when used for I/O control with cgroup2 (described below). Btrfs is the only filesystem implementation that currently works with resource isolation, and it's now deployed on millions of servers, driving significant efficiency gains."

[https://engineering.fb.com/open- source/linux/](https://engineering.fb.com/open-source/linux/)

<comment><USER37> Yeah there are a remarkable set of container runtime tasks (package downloads, rootfs creation and management, etc) that are way easier with btrfs. It wasn't always smooth sailing but luckily Chris, Josef, Omar and others are awesome and now (and for the last while) we are asking for features rather than fixes.

</comment></comment></comment><comment><USER38> i've been using BTRFS since 2014 to store backups. there is a noticeable performance penalty when rsync'ing hundreds of thousands of files to a spinning-rust disk connected to USB-SATA dock when BTRFS is used instead of EXT4. i'm accepting it in exchange for ability to run scheduled scrub of the data to detect potential bitrot.

since 2017 i'm also using BTRFS to host mysql replication slaves. every 15 min, 1h, 12h crash-consistent snapshots of the running database files are taken and kept for couple of days. there's consensus that - due to its COW nature - BTRFS is not well suited for hosting vms, databases or any other type of files that change frequently. performance is significantly worse compared to EXT4 - this can lead to slave lag. but slave-lag can be mitigated by: using NVMe drives and relaxing durability of MySQL innodb engine. i've used those snapshots few times each year - it worked fine so far. snapshots should never be the main backup strategy, independently of them there's a full database backup done daily from masters using mysqldump. snapshots are useful whenever you need to very quickly access state of the production data from few minutes or hours ago - for instance after fat fingering some live data.

during those years i've seen kernel crashes most likely due to BTRFS but i did not lose data as long as the underlying drives were healthy.

</comment><comment><USER39> It's also worth noting that Synology uses btrfs as an option to do checksumming and snapshots on their NAS devices.

They're still using their own RAID layer though.

<comment><USER40> > _They 're still using their own RAID layer though._

Synology's RAID implementation is largely mdadm + LVM.

</comment></comment><comment><USER41> kernel 5.5 released Sunday. Btrfs now has raid1c3, raid1c4 profiles for 3 and 4 copy raid1. Adds new checksum algorithms: xxhash, blake2b, sha256.

Async discards coming in 5.6. [https://lore.kernel.org/linux- btrfs/cover.1580142284.git.dst...](https://lore.kernel.org/linux- email@example.com/T/#u)

</comment><comment><USER42> It's worth noting that much of the premise of the article (wanting flexibility) is outdated. Zfs has support for removing top-level raid 0/1 vdevs now. So you can take a raid10 pool, and remove a top level mirror vdev completely. Note that this doesn't work for raid5/6 vdevs, but as the author points out, those are becoming less and less used because of rebuild time and performance.

In addition to the slew of other features Btrfs is missing (send/recv, dedup, etc) zfs allows you to dedicate something like an Intel optane (or other similar high write endurance, low latency ssd) to act as stable storage for sync writes, and a different device (typically mlc or tlc flash) to extend the read cache.

<comment><USER43> I think there's a selection bias here: people using RAID 5/6 may not be using ZFS as much because it's not well supported. I'd bet money that those levels are much more common in SOHO settings than RAID 10 is, because it's still the sweet spot for "I need lots of storage" vs "...and am willing to spend drive's worth of storage on availability". For instance, anyone using a NAS primarily as a backup target for desktops and small servers may love RAID 5, but be unwilling to throw money at a "better" RAID 10 setup.

</comment></comment><comment><USER44> Is using btrfs on a personal machine something to do? It seems that all the comments as well as articles about it, just assume you're running it on a server.

The ability to add and remove disks on a desktop machine is very tempting.

<comment><USER45> I've been running it on my desktop for a while and it's been wonderful. I have a cron job set to take a snapshot of the filesystem hourly so if I ever blow a file away or a package upgrade goes wonky I'm back up and running in minutes.

</comment></comment><comment><USER46> I've been a `btrfs` user for the better part of 4 years despite, at the time, a very vocal group providing advice against it[0].

I'll be the first to say that it isn't a silver bullet for everything. But then, what filesystem really is? Filesystems are such a critical part of a running OS that we expect perfection for every use case; filesystem bugs or quirks[1] result in data loss which is usually _Really Bad_ (tm).

That said, for the last two years, I've been running Linux on a Thinkpad with a Windows 10 VM in KVM/qemu -- both are running all the time. When I first configured my Windows 10 VM, performance was _brutal_ ; there were times when writes would stall the mouse cursor and the issue was directly related to `btrfs`. I didn't ditch the file-system, I switched to a raw volume for my VM and adjusted some settings that affected how `btrfs` interacted with it. I discovered similar things happened when running a `balance` on the filesystem and after a bit of research, found that changing the IO scheduler to one more commonly used on spindle HDDs made everything more stable.

So why use something that requires so much grief to get it working? Because those settings changes are a minor inconvenience compared against the things "I don't have to mess with" to cover a bigger problem that I frequently encountered: OS recovery. An out-of-the-box OpenSUSE Tumbleweed installation uses `btrfs` on root. Every time software is added/modified, or `yast` (the user-friendly administrative tool) is run, a snapshot is taken automatically. When I or my OS screws something up, I have a boot menu that lets me "go back" to prior to the modification. It Just Works(tm). In the last two years, I've had around 4-5 cases where my OS was wrecked by keeping things up to date, or tweaking configuration. In the past, I'd be re-installing. Now, I reboot after applying updates and if things are messed up, I reboot again, restore from a read-only snapshot and I'm back. I have no use for RAID or much else[2] which is one of the oft-repeated "issues" people identify with `btrfs`.

It fits for my use-case, along with many of the other use-cases I encounter frequently. It's not perfect, but neither is _any_ filesystem. I won't even argue that other people with the _same use case_ will come to the same conclusion. But as far as I'm concerned, _damn_ it works well.

[0] I want to say that an installation of openSUSE ended up causing me to switch to `btrfs`, but I can't remember for sure -- that's all I run, personally, and it is a default for a new installation's root drive.

[1] Bug: a specific feature (i.e. RAID) just doesn't work. Quirk: the filesystem has multiple concepts of "free space" that don't necessarily line up with what running applications understand.

[2] My servers all have LSI or other hardware RAID controllers and present the array as a single disk to the OS; I'm not relying on my filesystem to manage that. My laptop has a single SSD.

</comment><comment><USER47> Being 'The Dude' of file system is literally the opposite of what I want. When looking at ZFS talks and the incredible complexity of some of those operations that Btrfs seems to think are 'no big deal', I will simply not trust that. Specially because it has been proven over and over again that Btrfs claims its 'stable' and then a new series of issues show up. Or its 'stable' but not if you use 'XY feature', or if the disk is 'to full' or whatever.

I remember using it after I had heard it was 'stable' and it eat my data not long after (not using crazy features or anything). I certainty will not use it again. A FS should be stable from the beginning, as stable core that you can then build features around, rather then a system with lots of feature that promises to be stable in a couple years (and then wasn't years after being in the kernel already).

Using ZFS for me has been nothing but joy in comparison. Growing the ZFS pool for me has been no issue at all, I never saw a reason why I would want to reconfigure my pool. I went from 4TB to 16TB+ so far in multiple iterations.

Overall not having ZFS in Linux is a huge failure of the Linux world. I think its much more NIMBY then a license issue.

<comment><USER48> > I think its much more NIMBY then a license issue

How do you propose that ZFS be brought into Linux? When Sun released ZFS as open source, they made a deliberate decision to use a license that prevented it from being integrated into the Linux kernel. This was no accident. At the time, Sun was still pushing OpenSolaris which was losing ground to Linux. The ZFS on Linux project gets around this restriction by running ZFS in user space, but this is not optimal.

You can make a legitimate argument that Linux should have been released under a BSD style license (I think that would be wrong, but it's plausible). I don't see how you can argue that ZFS's license is somehow the fault of the Linux world.

<comment><USER49> On the other hand, choosing to use GPL would prevent it from being integrated anywhere else. You'd also lose the patent protection granted by CDDL.

<comment><USER50> It's not like they couldn't use dual licenses, like Mozilla did at the time, for example.

</comment></comment></comment></comment><comment><USER51> BTRFS is well known for being ill-suited to VMs or databases. How come ZFS doesn't have that reputation?

<comment><USER52> There is an attribute called NOCOW that can be set on specific files that should not be copy-on-write, which is what messes with databases, filesystem images and other things that needs fast in-place updates.

It can also be a set as a flag on subvolumes.

<comment><USER53> You can also set such an attribute on files and subvolumes in btrfs.

[https://wiki.archlinux.org/index.php/Btrfs#Disabling_CoW](https://wiki.archlinux.org/index.php/Btrfs#Disabling_CoW)

</comment></comment></comment><comment><USER54> I have a small Nextcloud instance at home that uses BTRFS (on HDD, with noatime option) for file storage, and XFS (on SSD) for database.

I started it just for testing, and has been running for up to two years, and had no problems so far.

</comment><comment><USER55> I'm using Btrfs currently, but I'm waiting for Bcachefs to replace it.

<comment><USER56> How far has it come to replace any of the production ready filesystems?

It says it's feature complete in 2015 and was trying to put itself into kernel mainline in 2018 but I don't see much about anyone using it in production.

<comment><USER55> It's not production ready so far for sure. I didn't really follow all details on that.

</comment></comment></comment><comment><USER57> I've heard a lot of people say they won't use Btrfs due to reliability. Would have been nice to see that addressed.

<comment><USER58> What about the reliability? Are many people losing data with Btrfs?

<comment><USER59> As best I can tell, reports of data loss on btrfs are all from the early 20-teens; after about 2014 or so I can't find anyone who claims to have lost data due to a btrfs bug on an up-to-date system.

<comment><USER60> RAID5 on btrfs has a write hole last time I checked. Bug has been around forever, and was around in 2014 for sure.

Phoronix has some thorough performance comparisons between Ext4fs, Btrfs, XFS, and ZFS.

<comment><USER50> That one is here to stay, it is a property of software-based RAID. If it bothers you, use UPS.

<comment><USER33> ZFS-based RAID-5 (called raidz1) doesn't have write hole.

[https://blogs.oracle.com/ahl/what-is- raid-z](https://blogs.oracle.com/ahl/what-is-raid-z)

<comment><USER50> Because ZFS raidz1 is not raid5, it's even labelled differently. Yes, it is a parity-based raid, but has slightly different semantics.

</comment></comment></comment></comment></comment></comment></comment><comment><USER29> This article makes a few mistakes with regards to ZFS. Some are understandable (the author presumably last looked at the state of ZFS 5 years ago), but some were not true even 5 years ago:

> If you want to grow the pool, you basically have two recommended options: > _add a new identical vdev_ , or replace both devices in the existing vdev > with higher capacity devices.

You can add vdevs to a pool which are different types or have different parities. It's not really recommended because it means that you're making it harder to know how many failures your pool can survive, but it's definitely something you can do -- and it's just as easy as adding any other vdev to your pool:

      % zpool add <pool> <vdev> <devices...>

This has always been possible with ZFS, as far as I'm aware.

> So let's say you had no writes for a month and continual reads. Those two > new disks would go 100% unused. Only when you started writing data would > they start to see utilization

This part is accurate...

> and only for the newly written files.

... but this part is not. Modifying an existing file will almost certainly result in data being copied to the newer vdev -- because ZFS will send more writes to drives that are less utilised (and if most of the data is on the older vdevs, then most reads are to the older vdevs, and thus the newer vdevs get more writes).

> It's likely that for the life of that pool, you'd always have a heavier load > on your oldest vdevs. Not the end of the world, but it definitely kills some > performance advantages of striping data.

This is also half-true -- it's definitely not ideal that ZFS doesn't have a defrag feature, but the above-mentioned characteristic means that eventually your pool will not be so unbalanced.

> Want to break a pool into smaller pools? Can't do it. So let's say you built > your 2x8 + 2x8 pool. Then a few years from now 40 TB disks are available and > you want to go back to a simple two disk mirror. There's no way to shrink to > just 2x40.

This is now possible. ZoL 0.8 and later support top-level mirror vdev removal.

> Got a 4-disk raidz2 pool and want to add a disk? Can't do it.

It is true that this is not possible at the moment, but in the interest of fairness I'd like to mention that it is currently being worked on[1].

> For most fundamental changes, the answer is simple: start over. To be fair, > that's not always a terrible idea, but it does require some maintenance down > time.

This is true, but I believe that the author makes it sound much harder than it actually is (it does have some maintenance downtime, but because you can snapshot the filesystem the downtime can be as little as a minute):

        # Assuming you've already created the new pool $new_pool.
        % zfs snapshot -r $old_pool/ROOT@base_snapshot
        % zfs send $old_pool/ROOT@base_snapshot | zfs recv $new_pool/ROOT

        # The base copy is done -- no downtime. Now we take some downtime by stopping all use of the pool.
        % take_offline $old_pool # or do whatever it takes for your particular system
        % zfs mount -o ro $old_pool/ROOT # optional
        % zfs snapshot -r $old_pool/ROOT@last_snapshot
        % zfs send -i @base_snapshot $old_pool/ROOT@last_snapshot | zfs recv $new_pool/ROOT

        # Finally, get rid of the old pool and add our new pool.
        % zpool export $old_pool
        % zpool import $new_pool $old_pool
        % zfs mount -a # probably optional

[1]: [https://www.youtube.com/watch?v=Njt82e_3qVo](https://www.youtube.com/watch?v=Njt82e_3qVo)

</comment><comment><USER61> ¯\\_(ツ)_/¯

Raidz2+spares, compression, snapshots and send/receive are very useful. And zil and cache are easier than lvmcache..

</comment><comment><USER62> I'm so sorry teacher, Btrfs ate my homework.

</comment><comment><USER63> Storage spaces is probably the best software raid available today. Unfortunately, it comes with windows.

It supports heterogenous drives, safe rebalancing (create a third copy, THEN delete the old copy), fault domains (3-way mirror, but no 2 copies can be on the same disk/enclosure/server/whatever), erasure coding, hierarchical storage based on disk type (e.g., use NVMe for the log, SSD for the cache), clustering (paxos, probably). Then you toss ReFS on top, and you're done.

The only compelling reasons to buy windows server are to run third party software or a storage spaces/ReFS file share.</comment>


How I Went From An Idea To Paying Customers In 3 Days - <AUTHOR> https://planscope.io/blog/idea-to-customers-in-3-days/

<comment><USER2> While I was reading this, especially in the beginning and again towards the end, I kept getting this feeling of this is a "long-winded sale of nothing at all".

You know those websites, where this wonderfully crafted copy leads you on and on and on about selling you something special and magical without ever really revealing what it is. Typically, at the end of the _nothing-sale_ will be a heavily-priced video or ebook that supposedly contains a very deep insight which is so precious that its actual properties can't even be hinted at before giving the author some money right now.

This article does the same thing, but on a meta level. What we get to experience here is not the nothing-sale itself, but the marketing of the capability to make that sale. It does contain just enough hints and bits to keep you reading, just enough truisms to have you nodding along every once in a while, but at the end very little is actually being reported.

I actually admire this, but know that I can't (or maybe don't want to) replicate it on my own. I do admit that features and specifics matter a great deal to me, both when I sell something and when I consume. It's not difficult to recognize that I do have these unrealistic expectations over the need for substance which result in me being a terrible sales person.

So, hat off to people who get to make tons of cash off of this ability, more power to them and all. But in a very real sense they do exist right at the edge between online scam and shopping channel. "Sell as close to nothing as you can get away with" is indeed an interesting optimization problem, and probably an act of performance art.

<comment><USER3> OP here.

So, I'm not selling anything in this post. There is a CTA for my newsletter, but that's it.

In this post I...

* Talk about how I identified a "cash flow" (customers of X, in my case - Infusionsoft.)

* Ran a simple ad campaign that was meant to help me find other customers of Infusionsoft.

* This ad campaign drove people to an email course that covered why it's a good idea to show variable content to someone depending on where they are in your company's sales funnel.

* I talked with each new subscriber to make sure that I didn't waste my time writing something that was only my problem.

* Went on to create a very simple product that solved a very specific pain point, and how I then delivered this new product to the people I was talking to.

Not sure what's scammy / whatever about that. I've seen a lot of people — especially engineer types — who dive head first into building some massive SaaS only to get demoralized along the way and give up because it doesn't end up becoming some huge success right away.

My goal was to try to make a case for building a very simple product for a very specific pain point, get customers who have this pain and want it solved as quickly as possible, and then (possibly) add complexity and scope from there.

<comment><USER2> Hey. I'd like to re-iterate that I think you're doing a great job, something which I and many others don't have the skills or the talent for. But yeah, it sure looks like you _are_ selling something. Not in the "act now, buy this" sense, but still.

Please understand that I'm not putting you down, on the contrary.

With all the specifics you provided, this is still a very non-specific article. It's a beautifully written description of a technique that provides a lot of detail and yet gives very little away that could actually be used to learn something off you. And again, that's perfectly OK.

I absolutely agree with you about engineer types, and I'll be the first to admit I'm a prime example of that group. In between those two extremes, there is a spectrum of course.

 _> My goal was to try to make a case for building a very simple product for a very specific pain point, get customers who have this pain and want it solved as quickly as possible, and then (possibly) add complexity and scope from there._

I'm not sure I agree about the pain point being the most important thing in that strategy, but that may be because after reading the article I still lack the information to judge what it actually is you solved.

      I ended up building a WordPress plugin, but what I built and how I built it is
      immaterial here.

<comment><USER4> What other specifics could he have included? He showed his methodology in finding a problem, the way he found customers [including the copy in his ad], how he structured a email course, and the final product. The only other thing he could have included would have been the copy he used in the email course.

This blog lays out a very clear framework you can operate within, so I dont really understand where you are coming from.

</comment></comment></comment></comment><comment><USER5> I think the key takeaways from this article are: 1.) Advertise knowledge but give away for free 2.) Use knowledge (e.g. 5 day course) absorbers (users) to create an e-mail list. 3.) Create and sell product that addresses a pain point relevant to the people signing up for the knowledge.

<comment><USER6> This is a case of "priming" the consumer, in some cases you don't need to prime them but those low-hanging fruit are rarely not served already and it's usually juicier and only slightly more time consuming to drive your nail in that "middle somewhere" spot that some businesses get lazy about addressing.

So, for myself as a generalization, I'm writing it down as prime your target with something accessible (free knowledge, free feature-set, etc...) and engage them early in the funnel so you can iterate the lead-gen and the resulting product early.

</comment></comment><comment><USER5> Google cache: [http://webcache.googleusercontent.com/search?q=cache%3Ahttps...](http://webcache.googleusercontent.com/search?q=cache%3Ahttps%3A%2F%2Fplanscope.io%2Fblog%2Fidea- to-customers-in-3-days%2F&oq=cache%3Ahttps%3A%2F%2Fplanscope.io%2Fblog%2Fidea- to-customers- in-3-days%2F&aqs=chrome..69i57j69i58.1656j0j7&sourceid=chrome&es_sm=122&ie=UTF-8) For me it sits there, hit Stop in the browser and it will load in though.

</comment><comment><USER7> before building an idea | feature | company | etc, if you go through and make sure you can answer "what problem are you trying to solve?" you are much more likely on your way to success. everyone who is a builder should be asking this question frequently and I'm amazed how few people actually do. this was a great example of solving a real problem.

<comment><USER8> Solving 'real problems' is hard. Some categories 'real problems' often fall in to:

1\. Problems too trivial to expend energy and time solving once and for all. (It's easier to pay the small cost each time you encounter the problem). Not marketable.

2\. Problems you can solve, but everyone else already have partial or 'good enough' solutions for. Competitive, no innovation.

3\. Problems you think you can solve, but you really can't. Doomed.

4\. Problems you know you can't solve on your own, or with the resources available to you. Expensive.

5\. Problems outside of your area of expertise.

6\. Problems you have, but really aren't problems to anyone else.

</comment></comment><comment><USER9> Comment section, 4 months ago:

" _If anything tells me HN has gone down the pan, it 's that this post didn't take off there. This is gold!_"</comment>