Your DI framework is killing your code - <AUTHOR> http://blog.activelylazy.co.uk/2015/09/25/your-di-framework-is-killing-your-code/ <comment><USER3> Yet another time it comes up. But now, after functional programming being commonplace, we at least know the answer to the "why" question.

Consider the "classical OOP" method signature:

email.send()

vs "the anemic way"

emailSender.send(message: Email)

If there is only one way to send email (SMTP), things works fine. But let's assume we have to implement another way (e.g. Mailgun API). In the "anemic" case everything is simple: extract interface from EmailSender, add new implementation, all other method signatures remain unchanged. Refactorings are simple and can be done easily in any modern IDE. However, in "classical OOP" way, we have to do something like:

email.send(sender: EmailSender)

Which changes Email::send signature, which leads to breaking API changes and extensive manual refactoring of the entire codebase.

The "anemic way" had won because it is much more reusable and maintains API stability. Incidentally, this approach have smoothed the transition to functional languages — "NounVerber" objects became modules (collections of functions), and value objects became immutable data types.

<comment><USER4> > Which changes Email::send signature, which leads to breaking API changes and > extensive manual refactoring of the entire codebase.

Only if you decide to change the signature, there are other ways to achieve the same result.

<comment><USER3> For example?

<comment><USER5> "GetMailPolicySingleton()->SetSendingMechanism(Email::SMTP)" ;)

<comment><USER6> > Singleton

What if two threads need to send mail via SMTP and Mailgun...

<comment><USER7> Singletons have nothing to do with reentrancy or lack thereof.

</comment></comment></comment></comment></comment></comment><comment><USER8> "One of the properties of good OO design is that code that operates on data is located close to the data."

Says who?

I say the point of good OO design is to have very clear focused responsibilities for classes, very clear layers of abstraction, and concretely declared dependencies.

This way I know my business logic doesn't sprawl, is discoverable, can be replaced modularly, and tested extensively and throughly.

This author sounds like he has no idea what it takes to actually build a maintainable code base of domain-driven business logic.

The fact that he actually thinks "Order.SubmitForPicking(), UserAccount.UpdatePostalAddress(), and Basket.CalculatePriceIncludingTaxes()" are examples of good OO design is LAUGHABLE. This approach couples your data layer with your business logic, negates the ability to use mocks, and makes refactoring WAY harder than it needs to be.

<comment><USER9> Well, encapsulation was one of the three legs of the OO stool, especially at a time when languages like C/C++ offered no protection against reading/writing memory anywhere in a program's data or code segments. Encapsulation back then literally meant keeping the representation of the data close to the code, i.e. in the same class that implemented the interface on the data or a closely- related specialty class. So I would say the author is not incorrect in looking askance at "value objects" that are passed around, from that perspective.

On the other hand, I'm not sure the perspective is quite as important as it used to be. Modern dynamic languages make it harder to do bad things in memory, and passing value objects around is pretty much the arterial life force of the entire Internet. In any case one thing is sure: the more pieces of code that know the internal structure of a bit of data the more dependencies there are, and the harder the program is to work on. So to the extent you can have that knowledge in one place - the implementation of an interface - you're better off.

Perhaps more importantly, OO purism just seems a little anachronistic to me today. I think the key things that OO had to teach us have been mostly absorbed, and we've moved on. It's still there, but now it's part of the fabric of the art and not as obtrusive as it was in the 90's.

<comment><USER10> OO concepts live on whenever we are talking about interfaces, contracts and the like. The failed experiment is "true" object oriented domain modeling, the idea that software representations of real entities (an order, a dog, a car) should include code beyond maybe some basic constraint checking. Other than that, thehe OO tools are still powerful and some form of encapsulation is essential for any data structure that is more complicated than a pain array or a one-way linked list. But these structures are not representations of real objects, they are actual data objects. A hashmap isn't a representation of a hashmap, it is the real thing (even if it maps representations of dogs to representations of cars).

</comment></comment></comment><comment><USER11> My comments from the page, awaiting authorization:

"See, what you are suggesting is actually a strong violation of the single responsibility principle as well as separation of concerns. This is exactly like the code I used to write. While it really is easier to manage when it's small, it's a naive approach that doesn't scale well.

In a real life example of what you are suggesting, our User and Building classes for instance ended up over 10,000 lines long, doing things even just tangentially related to their parents. The real kickers were the cross business object ones who required more than one. Is it on Class X or Class Y? Sometimes it would end up on both accidentally causing the angels to cry.

About two years ago we started a massive rewrite, and now we have lots of small consice objects that perform very specific tasks. They're logical, organized and dependency injected. I would never wish the reverse on anyone."

<comment><USER12> Yes! I was lucky enough to start a green-field project recently and basically did exactly what the author is advocating against. So far it's been the most extendable, easy to read and easy to maintain project I've worked on.

The author briefly mentions the Single Responsibility Principle and then tramples all over it, suggesting you put your 'code close to your data', shoving your verbs onto your models? Good luck ever refactoring. You'll have orphaned properties and methods that people are afraid to remove because they may anger the gods. You'll have flags, flags everywhere to control how your model does its work. Give me small, swappable, testable noun-verb classes any day of the week.

</comment></comment><comment><USER13> This is just the anemic vs rich domain model debate, the standard retort being [https://blog.inf.ed.ac.uk/sapm/2014/02/04/the-anaemic- domain...](https://blog.inf.ed.ac.uk/sapm/2014/02/04/the-anaemic-domain-model- is-no-anti-pattern-its-a-solid-design/).

TL;DR: rich domain model causes an explosion of coupling (your User class is now coupled to your database, your screen, your rendering engine, your printer, etc, when all it really is is some user data). And the rich domain model simply breaks down when you need functionality on two objects (should it be user.render(engine) or engine.render(user); either way one of your domain objects needs to know some "private internals" of another). With the anemic domain model these problems don't exist.

<comment><USER14> The coupling you mention was solved long before DI became popular. The service locator pattern isn't as transparent as DI but it solves the problem of course grained service dependencies.

<comment><USER15> You mean "coarse-grained", right?

</comment></comment></comment><comment><USER16> I can't help but disagree with so many of the things he says.

I won't even go into things like "Does your customer know what an OrderPriceStrategyFactory is for? No, then it's not a real thing. Its some bullshit you made up.", but statements like "If we change how we contact customers then only the customer needs to change, not also the ReportBuilder" sound overly simplistic to me. The whole point would be that nothing needs to be changed. You just write a new ReportBuilder that implements the same contract/interface and switch the wiring. No changes in the existing ReportBuilder or Customer classes.

That, or maybe I'm just completely misunderstanding what I'm reading. Which isn't entirely impossible :-)

<comment><USER5> Every business will have an order price factory in it. Prices aren't just picked by the roll of a dice!

If you're trying to model the inner workings of a business, you probably don't want to be starting with the customer's view of it...

</comment></comment><comment><USER17> > "A Customer can CreateReport(), a Report can RenderAsEmail(), and an Email > can Send()"

Until you need to generate a different type of report for the customer, render a different format email, or send the email via another process. At that point, you have 3 options:

1\. inherit and override. So you end up with

* SpecialReportCustomer : Customer,

* NewEmailStyleReport : Report,

* SendViaProxyEmail : Email

It should be pretty obvious that this won't scale... at all.

2\. Inject the desired sender or report generator into your object, depending on what implementation of the report builder or email sender you want. But why would the object have to know how to print itself, or send itself? Separation of concerns, people!

3\. Break the interface of your class, make the methods accept a special reportBuilder or EmailSender... but why do that, when you can just do literally the opposite of what the author says, and have option 4:

4\. Use an CustomerReportBuilder.Create(customer), or EmailSender.Send(email).

...and then you see why option #4 is your best choice, and why this article is objectively wrong in every way.

<comment><USER18> Agree, I also find useful to split between domain concerns and application concerns.

A report is something that belongs to business, but the fact that it could be sent via email is totally accidental and depending on the technology we use (as it is the persistence layer, or the protocol which exposes the app).

Domain concerns live on domain object (which knows only other domain objects), while application concerns live in services. And here is where you have interfaces, concrete implementations and, where necessary, factories to switch or add the implementation at the flip of a switch. Eg: a ReportMailSender which implements a ReportSender, that someday get replaced with a SlackSender implementing the same interface. You want both? Wrap them on a AggregatedSender.

Now your DI framework is getting really useful.

</comment></comment><comment><USER19> The author suggests a naive approach to object oriented programming. When all functionality is a method of the data it represents, these objects become hideously complicated and unmaintainable.

An example is comparing Objective C's string class, to .Net's. In objective C, path manipulation methods are on the string object itself; but in .Net, path manipulation methods are static methods in the Path class.

The .Net approach is better. Why? Do all strings represent paths? No. There's an unlimited number of ways and reasons for manipulating strings; and making them all methods of the string class is unsustainable.

</comment><comment><USER20> How come OOP was supposed to be the best way to code and now we need dependency injection to make it practical? Does that mean that before DI, OOP was never being done properly? It was a bad idea all along and everybody thought it was just their poor OO skill that made them unable to design programs that met all the requirements?

</comment><comment><USER21> "Almost certainly: if you've got value objects and noun-verbers, your design is rubbish."

If the code is readable, understandable, testable, and it does the job - <USER2> are you to say it's rubbish?

<comment><USER14> I think the problem is that OO is a term that people don't understand anymore. The author is right about OO principles and the fact that most people don't follow the traditional usage. The thing is that good OO isn't actually good code.

The world has moved away from strict OO because it's not very maintainable.

<comment><USER10> I've been seeing quite a lot of this kind of "OO reactionary backlash" recently, "... is an anti-pattern because OOP". Most of it already years old, but still something that feels like a little trend suddenly showing up in links left and right. Could be a sign of the last "pure OO" advocates starting to feel the pressure, or it's just me googling the wrong topics...

</comment></comment></comment><comment><USER22> A couple of miscellaneous thoughts:

1) The problem that I've noticed with the traditional OO designs that I've worked with is that bits of similar functionality tend to get scattered about the code base. For example, the author creates a CreateReport() method in the Customer class. But if later, we have, say, an Account class (not equivalent to a Customer) that also needs a report, we find ourselves with two likely similar looking methods. I've found this to become problematic as the codebase grows, and ultimately your code exhibits a massive DRY violation.

2) His complaint about singletons is interesting but I think irrelevant. In Spring, for example, everything tends to be a singleton (the default), and stateless, so indeed, your code _could_ be replaced by static methods. Not that this would be a good idea, although in some cases it might make sense. (The Play framework does this: [http://stackoverflow.com/questions/5192904/play-framework- us...](http://stackoverflow.com/questions/5192904/play-framework-uses-a-lot- of-statics))

3) The author needs to read Yegge's [http://steve- yegge.blogspot.com/2006/03/execution-in-kingdom...](http://steve- yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html).

</comment><comment><USER23> _The other design smell with these noun-verbers is they're almost always singletons. Oh you might not realise they're singletons, because you've cleverly hidden that behind your dependency injection framework: but it's still a singleton. If there's no state on it, it might as well be a singleton. It's a static method in all but name. Oh sure its more testable than if you'd actually used the word "static". But it's still a static method. If you'd not lied to yourself with your DI framework and written this as a static method, you'd recoil in horror. But because you've tarted it up and called it a "dependency", you think it's ok. Well it isn't. It's still crap code. What you've got is procedures, arbitrarily grouped into classes you laughably call "dependencies". It sure as hell isn't OO._

What's so terrible about static methods? If you need to perform some sort of calculation that doesn't mutate any state, isn't a static method the correct choice, at least when you're working in a language with no functions?

A procedure with no side effects is really just a function, is it not?

</comment><comment><USER24> I'm not a big fan of DI frameworks but none of the arguments in this article ring true for me.

His proposals for how OO should work are half the reason I started shifting toward functional languages years ago. OO learning from Functional is a good not bad thing.

</comment><comment><USER25> I don't think the author completely understood the DI frameworks. Just because a service in a DI framework is often a stateless singleton doesn't mean they don't allow stateful injection: EntityManager for JPA is a great example. Sure, there are other services with absolutely no state, but don't blame the frameworks for promoting statelessness, it's a practice promoted by many other software designs e.g. REST. I believe I have enough experience to say that state replications in a clustered environment does not scale and is not worth the pain.

Order.SubmitForPicking() sounds great on paper, that's until you realize in order to submit an order for picking, you'll need other value objects such as Customer, Account, Warehouse, Picker, Robot, Supervisor, Audit information …. the list goes on and on. How are you going to inject these info into an Order? And do they really belong in an order? I certainly don't want to see all of these info in my JSON when I retrieve a single order on the client side.

The moment you move behaviors close to a value object is also the moment a plain object is no longer a plain object. Furthermore, a behavior laden value object becomes hard to evolve, extend and modify. There's no clear boundary of where data ends and behavior begins, you certainly cannot package them up as a library and give it to your clients, you'll have to create a separate set of value objects for that and start a maintenance nightmare.

It's kinda sad that Java Code Geek rejected my comments (and many others') and we have to come to Hacker News to express our views.

</comment><comment><USER26> If I understand the argument correctly, this is a problem that some DI frameworks already address. And in others, there's an easy workaround.

Say you have a class CustomerHandler (stupid example, pseudo-C#) with a constructor like this:

         public CustomerHandler(Guid customerId, ILogger logger, ISomeExtraDependency whatever) { ... }

Now, let's say another class needs to create CustomerHandlers for specific customers, but doesn't want to care how they are created. Autofac, the .NET DI framework I'm most familiar with, let's you inject factory delegates:

        public RequestProcessor(Func<Guid, CustomerHandler) customerHandlerFactory) { ... }

(Every type not mentioned in the Func<> is auto-injected.) This is very convenient because you can change the dependencies of CustomerHandler without messing up the rest of the code.

Of course, even in the absence of such an auto-factory feature, you can still create a dedicated CustomerHandlerFactory class and inject that. That's not quite as convenient, but it's still a lot better to have only one extra place that has to know CustomerHandler's dependencies than having them all over your codebase.

</comment><comment><USER27> An article by someone who apparently doesn't understand composition...

</comment><comment><USER28> For some reason this winds up being worse in the .net world than the java world. The main trouble I see with spring is not that it messes up your code but that people use stackoverflow to 'get things done' which leads to no overall strategy and thus mystery about how things get initialized.

</comment><comment><USER29> This talk might be of interest Stuart Sierra - Components Just Enough Structure [https://www.youtube.com/watch?v=13cmHf_kt-Q](https://www.youtube.com/watch?v=13cmHf_kt-Q) \- it is a tiny clojure framework but the ideas should be thought provoking, although granted with OO aligned type system not completely adaptable. In this example Customer could possibly just be a data- bucket/map/hashtable/Dictionary, Im not entirely sure how I'd handle reporting though as the example has put me back in OO mode, but a customer report (which knows how to organize data about a customer) shouldnt be part of customer entity (used loosely) in my opinion.

</comment><comment><USER30> I wonder if the author has ever worked on any relatively large projects. This has to be the worst way you can write your code. I know I wouldn't like working on anything written in that way. That's how you end up with 10,000 line files.

<comment><USER31> The anaemic way would turn that 10,000 line file into something closer to 10,000 one-line files. To me, that is the very definition of spaghetti code.

My biggest problem with the enterprise Java way of doing things is the fact that you have to open 18 files just to figure out how the hell one small bit of functionality works.

</comment></comment><comment><USER32> For me anemic model is much more natural and easy to use. Object-Oriented Programming is not a good approach to a general architecture. It has its place in some layers, e.g. GUI API usually can be successfully modeled with OOP, but otherwise just use modular procedural approach and use object-oriented constructs very conservatively, unless it fits naturally. That's the best approach for me and it works flawlessly. Of course Functional Programming, Logic Programming has its place too, thanks to modern languages like Scala, where you don't have to choose the only one paradigm.

</comment><comment><USER33> This seems to be a complaint that some code doesn't correspond to the author's notions of "good" OO code, without a clear picture of what "good" OO code is except for a few vague references to fidelity to the domain without much discussion about what good domain modeling is.

For me, one of the clearest ways of analyzing a system in domain terms and working with it with business users to is with technology neutral specs in something like a Yourdon-style DFD, with a supporting data model and process descriptions.

It then becomes clear what the _relevant_ nouns are in the domain: they fall in two basic groups:

(1) entities that correspond to named data items shown in flows or stores on the DFD (which will also, of course, be represented in the data model), and

(2) entities that correspond to named boxes and bubbles on the DFD, particularly processes, stores, and external interfaces.

A system whose implementation maps closely to this kind of requirements specification is a lot like an anemic data model system, with most of the classes being either immutable data objects or process objects (the latter of which may have "NounVerber" names if that convention is used), but that's because the processor is a real noun in the domain -- in a non-automated implementation of the system, its a role that a human actor would take on in executing the business process.

You _do_ end up with state stored in (or stored externally and managed by) objects with methods which mutate state, but these tend to be the processor objects and the stores, not the data objects that are transferred along flows.

It seems to me that the "rich domain model" approach is mostly a failure of domain modeling that apply ideas from OO's origin in simulation modeling without recognizing that, in most other domains, the analogy to simulation modeling only works if you recognize that applications tend to be "simulations" of an idealized process executed by idealized technology-neutral actors acting on abstract data constructs, and that those idealized actors -- the processors -- are key elements of the domain model. Rich domain modeling ignores those and attributes their behavior somewhat arbitrarily to data objects, which end up giving data objects multiple, tangentially-related responsibilities (and provides lots of rooms for debating where certain responsibilities belong.)

</comment><comment><USER34> imho a very shallow understanding of oo. the arguments are only true for very simple models. when you have operations that manipulate multiple objects or have some other cross cutting concerns these models completely break down.

on the other hand: IoC containers try so solve a let-down of oo...we have to come up with something better- functional programming?

</comment><comment><USER35> My mind fused title "Your DI framework" into "DIY framework"</comment>


Why Clinton Makes Me Scared for Our Economy - <AUTHOR> https://medium.com/@laurenholliday_/why-clinton-makes-me-scared-for-our-economy-80e177bbc2ed#.8u3gf9bfg <comment><USER2> > Lauren, you may have to change who you're voting for.

To whom would you change? Based on this article I would guess Gary Johnson, or are you not going to stand by these convictions? I was disappointed to see that she didn't answer this question in the article.

Also, for people who drop out, they clearly didn't get much out of College. Personally, I kinda wish I had waiting until I was 35 or so to go to college, mostly because now I really know what I'm interested in.

But there is a huge foundation you get from higher education. People who drop out and are successful always undervalue the experience they skipped out on. Why? Because they don't know it! Should everyone be in higher-ed? Probably not, or maybe we need more specific options for training in specific areas (like 2 year academy's, associate's degree).

I think for a lot of people higher-ed is access. Some people get this access through some other means. He cost IS ridiculous, she is right, but she's not offering an alternative to get the education. We still need education, and I don't believe it's enough to just get it on the job.

</comment><comment><USER3> secretary of state here I come. I file my $50 for my certificate get my loan and interest deferred put loan payment in savings, sell some shit on ebay, take chunk from savings in 3 years and pay 2/3 of my loan off.</comment>


Early High-Dose Vitamin D3 for Critically Ill, Vitamin D–Deficient Patients - <AUTHOR> https://www.nejm.org/doi/full/10.1056/NEJMoa1911124?query=featured_home <comment><USER2> CONCLUSION: Early administration of high-dose enteral vitamin D3 did not provide an advantage over placebo with respect to 90-day mortality or other, nonfatal outcomes among critically ill, vitamin D–deficient patients.</comment>


Ask HN: How do you save and sync your private and important documents? - <AUTHOR> Most of us use multiple computers, a phone, and maybe a tablet. We need to have access to latest copies of all our files in those devices. And we want to secure access to those files as much as possible. So, I think this question is on the mind of most HNers.
Using Dropbox is most convenient, and based on comments I've seen on HN, no other client comes close to Dropbox for simplicity, stability, low CPU usage, etc. However, our files can certainly be made visible to anyone working at Dropbox. Same with Google Drive, iCloud, SkyDrive, and Box.com.
So, currently, I'm using a private folder inside Dropbox and encrypting it with EncFS. This is not completely secure either, but the bigger problems that I have with this solution is that EncFS or FUSE sometimes fail (especially if I'm trying to copy/paste multiple files) and sometimes the files become corrupted. I can't take that kind of a risk with my most important files.
So, I'm back to square one. What do HNers use for this kind of a need? I've tried Bittorrent Sync but I can't trust that company. I can try using Truecrypt or VeraCrypt which won't be as convenient as EncFS. Or, I can use a client-side encryption solution. Are there any which are as good as Dropbox? What are your opinions on SpiderOak, git-annex, syncthing, sparkleshare, syncplicity, aerofs? Anything else? <comment><USER2> AWS S3 & SyncBackPro</comment>


The unexpected reality of deployment - <AUTHOR> http://blog.8thcolor.com/?p=999

<comment><USER2> This is exactly why the cloud is going to win. There's a whole class of unpredictable problems that occur every time you try and deploy an application in a different environment. So make it run in the same environment all the time.

<comment><AUTHOR> I agree with you. We expect that some will be interested in a SaaS version.

But for the moment, most want a classic installation on their infrastructure because the tool works on their codebase. They are afraid of letting their IP in the wild.

Beyond that, even if we have only one production environment, it's still different from the development one and it's important to deploy asap. Don't you think?

<comment><USER2> In my experience if production environments are different from development ones then you haven't automated enough. Modern machines are so powerful there's no reason not to be running the full stack on every dev desktop, built from the same process that builds your live servers. You might not catch performance issues before going into production, but outright failures should be vanishingly rare. Deploying frequently is valuable but more of a side effect of having a good build process; the real value comes from it being automatic and reliable.

<comment><AUTHOR> we agree, it was I meant with "deploy asap", i.e. running in a same environment than the production one.</comment></comment></comment></comment>


The little book about OS development - <AUTHOR> http://littleosbook.github.io/

<comment><USER2> Thanks for this awesome work! I would love to see a littlehypervisorbook too!

</comment><comment><USER3> This is amazingly comprehensive. Thanks so much.</comment>


A guide to the W3C PROV Provenance Interchange Framework - <AUTHOR> http://www.w3.org/blog/SW/2013/03/21/prov-a-framework-for-provenance-interchange/

<comment><AUTHOR> Very excited to see this coming out. Data provenance interchange will be crucial to all sorts of security stuff, but I think the recursive provenance represented by 'bundles' is the most exciting. It could represent a semantic annotation framework that is natively subjective and agnostic. The take it or leave it architecture of current metadata schemes really aren't compatible with the heterogenous nature of the Web in my opinion.</comment>


Taking Gatsby for a spin - <AUTHOR> https://dev.to/ardennl/taking-gatsby-for-a-spin-4je <comment> martin-adams It's really nice seeing the traced SVG placeholder making it into the wild. It started as a visual demo using hand drawn SVGs in a Tweet [1]. Very quickly people were asking if it was hand drawn and I took the challenge to figure out to automate it [2]. What I really appreciate is the community adding value along the way. Someone else automated it in node, and others have added it to Gatsby and Webpack.

[1] [https://twitter.com/mikaelainalem/status/918213244954861569](https://twitter.com/mikaelainalem/status/918213244954861569)

[2] [https://twitter.com/Martin_Adams/status/918772434370748416](https://twitter.com/Martin_Adams/status/918772434370748416)

</comment><comment><USER2> Shameless plug: you can also use DatoCMS[1] with Gatsby, we just released an official plugin[2]!

[1]: [https://www.datocms.com/](https://www.datocms.com/)

[2]: [https://github.com/datocms/gatsby-datocms- source](https://github.com/datocms/gatsby-datocms-source)

</comment><comment><USER3> My impression has always been that _all_ sites generated using static generators are developer and documentation sites, with a few exceptions of sites that developers set up for other people.

Have static site generators penetrated anywhere outside of developers?

<comment><USER4> Isn't "developers, and sites that developers set up for other people" ~all of the websites in the world?

<comment><USER3> No, hasn't been true for years now.

Putting aside sites like Wix, you can easily start a wordpress site these days in a few clicks.

</comment></comment></comment><comment><USER5> Gatsby is great. I have a site for a local construction company hosted on S3. The repo is on gitlab and I use the CI/CD of gitlab to handle deployments and tests. The best part, I trained the non-technical folks at the construction company to make edits on gitlab (change pictures, text, etc) and their changes automatically get deployed. Bacially using gitlab as the cms. It's very smooth, no security issues, and very fast

</comment><comment><USER6> Gatsbyjs has strengths but they disappear for mathematics heavy sites. There's no live reload for math Jax or katex

<comment><USER7> Maybe that could be addressed via a plugin and use of [https://github.com/mathjax/MathJax-node](https://github.com/mathjax/MathJax- node) on the backend. I spent the last month writing [https://cocalc.com/share/](https://cocalc.com/share/), which generates mathematics-heavy user content 100% on the backend, using MathJax-node; it's definitely a bit painful, but seems to work reasonably well.</comment></comment>


Bitcoin forks and airdrops - <AUTHOR> https://btcdiv.com <comment><USER2> But cryptocurrency is a rare commodity right?

How many bitcoin forks before people stop believing the bullshit that these tokens are deflationary.

Bitcoins are rare as long as people keep up the delusion that there is only one blockchain that matters, but there's really nothing that distinguishes the consensus coin from the others aside from how much mining power it has currently.

All the miners or merchants could switch to one or several of these forks at the drop of a hat and the value of 'core' bitcoin will go to nothing.

<comment><USER3> Great point. Which raises the question: with billions of dollars on the line, why haven't all the miners switched at the drop of a hat to something more beneficial to them?

<comment><USER4> Miners are making a killing off of the insanely high Bitcoin transaction fees.

<comment><USER5> Are the miners paying the developers so that they don't implement a solution?

</comment></comment></comment></comment><comment><USER6> Some time ago, I wrote a little parable about airdrops and how bizarre they are in real world terms:

[https://gyrovague.com/2017/08/09/the-rich-get-richer- loonie-...](https://gyrovague.com/2017/08/09/the-rich-get-richer-loonie-swaps- and-altcoin-airdrops/)

<comment><USER7> This parable ignores the fact that other individuals want to own alternative currencies.

If Rolex company manufactures a new collectable Rolex and gives it away to someone who already owns another collectable watch, this does not mean that both watches now have half the value of the original.

Furthermore, if I produce 1000 knockoffs of the original luxury watch and give it away to the Rolex owner, it does not reduce the value of the luxury watch either.

In fact, the value of the 1000 knockoffs plus the luxury watch is higher than the value of just the luxury watch alone.

There is still a scarcity of luxury watches, as well as demand for ownership of both the luxury item and the knockoffs.

As long as more individuals wish to purchase said commodities with fiat the commodities have value, regardless of if they are given away or not.

</comment></comment><comment><USER8> United Bitcoin seems to be a scam: [https://np.reddit.com/r/CryptoCurrency/comments/7j21nw/anoth...](https://np.reddit.com/r/CryptoCurrency/comments/7j21nw/another_bitcoin_fork_in_15_hours_give_me_a_break/dr3mh23/)

<comment><USER9> United Bitcoin also seemed like an overly-elaborate attempt to encourage people to spam the Bitcoin chain (which has been running close to capacity) with junk transactions by promising them tokens if they did.

</comment></comment><comment><USER10> Sorry for the foolish question, but does anyone know a way of claiming Bitcoin Cash without revealing your private key? Or do I need to transfer my entire balance from the (pre-fork) address to avoid any potential issues, and then use the private key from that address to prove my claim? I've done some reading this morning about it, and can't find any options which don't involve giving up private keys - which I am not doing without having transferred my balance out already. I only hold 10.5 BTC (across several addresses), so I know it's not a fortune to most people, but it is to me!

<comment><USER11> Revealing your private key to some form of software or online service is necessary in order to _send_ it

Your method is correct, transfer your btc off of that wallet first and then go around claiming your forked balances

<comment><USER10> Thanks - just wanted to check before getting into all that!

</comment></comment></comment><comment><USER12> Be careful not to make your "claim" on an altcoin that has a very low value compared to Bitcoin.

Why? Well, to be safe, you need at least on Bitcoin transaction [1]. But that means you'll receive a loss if those transaction fees are larger than the exchange value you get from trading the altcoin back to Bitcoin.

[1] This is to avoid exposing a still-valuable (within Bitcoin) secret key to an unknown altcoin client.

<comment><USER13> Couldn't you just make a single transaction with all of your BTC you currently hold (provided you've held it in the same wallet for recent history, when all these forks have occurred), then cash out all of your forks/airdrops using the old secret key?

You still run a small risk that a shady fork/airdrop could try to use your secret key to transfer other forks/airdrops, but you would avoid the risk to your BTC holdings.

<comment><USER12> Given the current Bitcoin exchange rates and transaction fees, this "single transaction" could still be more expensive than the value you get out from all altcoins combined. It depends on how much Bitcoin you have, though.

</comment></comment></comment><comment><USER14> Forgive my ignorance, but who are all these people setting up these forks, and who is actually buying the forked currency? It makes no sense to me.

<comment><USER15> This is the result of conflicts between bitcoin actors, mainly miners and core devs. We'll probably see more of those, btw, as those conflicts are far from resolved.

The core problem is scalability. Miners are very incentivized to fix it, because they get fees on transactions (so, the more transactions the better). Core dev, on their part, want to keep the closest possible to original design (any change can have dramatic consequences).

In 2016, scalability issues started to become really serious, and miners asked to increase block size (that is, to allow to add more transactions in a single block, so that transactions wait for less time before being validated). In return, core dev proposed segwit as a solution for scalability problems (I still don't exactly get what segwit does). Miners still wanted to go with block increase, so it was a stall (and scalability problems got worse). A few forks tried to take matters on their hand to fix that problem (although, more like competitive softwares, since they did not use the same blockchain history, they started new blockchains at block 0).

In 2017, everybody finally reached an agreement: blocks size will be increased and segwit will be deployed, so both solutions would be implemented. But core devs asked for it to be done in two steps: first segwit, then segwit2x (segwit with double block size). Miners agreed and started to run their mining software with segwit, effectively making it used by the network (Bitcoin cash was born at that time, from miners who wanted block increased, but not segwit). But when came the time to implement the second part of the deal (segwit2x), core devs decided it was not needed anymore (and bitcoin gold was created as a reaction).

I would take two things away, here:

1\. each time a decision need to be made, it generates a fork from people not agreeing to the final decision

2\. the trust between miners and core devs is probably broken, there probably will be more and more forks, and more stalling on main chain

This wikipedia article explains more thoroughly the scalability issues: [https://en.wikipedia.org/wiki/Bitcoin_scalability_problem](https://en.wikipedia.org/wiki/Bitcoin_scalability_problem)

<comment><USER16> I downvoted you because even though you took the time to write a detailed reply, you seem grossly misinformed. As others have indicated, increasing the block size was not agreed to by the core devs. It would create even more wasted space and thus further increase centralization.

The core devs are not committed to minimal changes to the original design, but they are committed to decentralization.

<comment><USER17> The problem with bitcoin is that things can get so confusing :-)

> As others have indicated, increasing the block size was not agreed to by the > core devs

In fact, segwit is a capacity increase: [https://www.reddit.com/r/Bitcoin/comments/6i5sx1/a_reminder_...](https://www.reddit.com/r/Bitcoin/comments/6i5sx1/a_reminder_why_segwit_is_an_actual_blocksize/)

</comment></comment></comment></comment><comment><USER18> _About Bitcore BTX:_

This is not an airdrop or claim, you just need to keep your wallet and claim your BTX once your wallet.dat with (keys to) bitcoins held on Nov 2 don't contain any BTC anymore. Doesn't matter if you do it now or in 2 years though. Is that correct?

 _About United Bitcoin:_

BTCDIV says: Must act before block 501878 (Jan 03, 2018).

UB.COM says: All users who transfer Bitcoins from his/her own address to his/her own address between Block 494000 and Block 498777 (11 November 2017 to 12 December 2017 GMT) will be eligible [...]

So what's the date, Dec 12 or Jan 3?

 _About Bytether.com:_

A little bit complicated but as long as you had a BTC balance at the BCH fork, you can claim whenever you want (and as long as the site and contract are live).

Is that correct?

</comment><comment><AUTHOR> Atleast now people can stop lamenting how the best programmers are wasting their time on ads and cat pictures. Even deep learning has some competition from bitcoin for attention of hackers.

</comment><comment><USER19> So is anybody making anything that'd allow me to claim all this free stuff automatically? I already did it for bcash but it took about a week to download the forked blockchain, would presumably be longer now. Doing it for all these things seems like a massive hassle. I'd be prepared to accept some risk and pay some of my free imaginary internet money in return for this service.

<comment><USER20> >I already did it for bcash but it took about a week to download the forked blockchain

Explain? I just imported my private keys (for Bitcoins I got before the fork) from Electrum to the Bitcoin Cash version of Electrum. Is there something else I need to do or is that just if you're running a full node?

<comment><USER19> I'm running the code from the bitcoin cash github repo, which I guess means I'm running a full node. Possibly I should be running Electrum or something instead.

</comment></comment></comment><comment><AUTHOR> A sub to go along [https://www.reddit.com/r/BitcoinAirdrops/](https://www.reddit.com/r/BitcoinAirdrops/)

</comment><comment><USER10> Thanks to the OP - I have about 1.6BTC worth of other coins that I wasn't aware of. Not sure why I hadn't looked into this, but thanks again.

<comment><AUTHOR> You are welcome. The information is surprisingly hard to find.

</comment></comment><comment><USER21> Interesting idea, though it seems that it doesn't work particularly well for coins held at exchanges like Coinbase.

<comment><USER22> When you have coins at an exchange, all you really have is an IOU from the exchange. This (and every other solution) for getting coins from forks requires you to prove ownership of an address with a private key. This is by design and is never intended to work with exchanges such as Coinbase.

</comment></comment><comment><USER23> So many warnings about importing bitcoin private keys into other software in order to claim.

<comment><USER6> +1, there's really no good reason for insisting on a private key instead of just a signed message.

If you do indulge, you'll want to move your BTC balance into another wallet, making the old one (and its keys) worthless, before you do so.

Alternatively, if you're using a hardware wallet like the Ledger Nano, you can do the split fairly painlessly locally for Bitcoin Cash & Gold. Byteball is also straightforward to claim without sharing any private keys.

</comment></comment><comment><USER24> As strange as airdrops sound, they're basically proof-of-ownership "likes" that payout if that fork does well.

</comment><comment><USER11> Thank you OP I just found $950 worth of alts I didn't know I had

</comment><comment><USER25> [deleted]

<comment><USER26> so signing a message was not enough?</comment></comment>


Heard of Cebu City, Philippines? - <AUTHOR> http://cedfit.org/ <comment><AUTHOR> Would just like to share to some of you that Cebu City, Philippines might be one of those places you would like to consider in finding partners for your endeavors.

I graduated from a university there and I joined NEC just after college. I can tell you there are a good number of good software engineers there. Thanks.</comment>


Valve announces Artifact, a Dota 2 card game - <AUTHOR> https://www.polygon.com/2017/8/8/16116786/valve-artifact-dota-2-card-game <comment><USER2> The audience reaction and the logo popping up is comedy gold.

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

Context: Valve hasn't released any new IP other than steamVR for 7 years, and has multiple game franchises that have hordes of fans desperately asking for a (third) sequel.</comment>


Is Harvard Just a Tax-Free Hedge Fund? - <AUTHOR> http://theamericanscene.com/2008/05/12/is-harvard-just-a-tax-free-hedge-fund <comment><USER2> No, they are a university.</comment>


Go is boring - <AUTHOR> http://aerokode.com/blog/go-is-boring <comment><USER2> I had to hack the CSS a bit to make it readable, but I agree with the author. Particularly, I like his comments on Go's attitude towards OOP.

As a Ruby hacker, I find that everyone on my team really likes to build a class and think of the instances as real physical objects. That's to be expected because it's how we were all taught to think of classes/objects/OOP in general. Objects in your code are not physical objects. You don't have to carry them around with you and pass them back and forth and up and down. You can build new objects that are specific to your functions.

I find that Go encourages me to build structures that are relevant to the situation instead of classes that are broadly scoped concepts. I also feel this way when I work with C, but I like it better in Go due to the receiver syntax.

It's true that my problems in my Ruby apps are my own (and my team's) damn fault. We should be better at single responsibility. Still, Go's approach to OOP encourages single responsibility and other good practices. I don't understand what's boring about that. I for one get a real thrill when I write some Go code then go over it and think "damn, that's just not going to break..."

</comment><comment><USER3> Go is poorly designed.

It has a mediocre type system, bad support for genericism, too much reliance on non-extensible language keywords (range, make, etc.). Want to range over a tree? Too bad. Or maybe wrap the tree with a chan and watch performance and simplicity go out the window.

I mean, come on, what modern language actually recommends casting to the top type? That would be like if idiomatic C++ involved casting things to void*, or if idiomatic java involved casting things to Object, just so you can write generic functions and types.

<comment><USER4> Lot's people don't care if language x is "poorly" designed or language y has "perfect" design. They evaluate language using two things:

1 Is it joyful to write without too much cognitive load? 2 Is it getting things done?

Go fits both for them.

<comment><USER5> In 2 or 3 years when you move a few notches up on the developer continuum look back on this comment and reflect.

<comment><USER6> It's blub all the way up.

</comment></comment></comment></comment><comment><USER7> > Nouns are things, nouns do verbs.

Of course, not _all_ nouns "do verbs", which is why we end up with warped associations between particular language utilities, like classes, with notions from one philosophy taken to weird limits.

Circles and Ellipses, for example, don't _do_ anything. They're data structures. They're nouns, but they have no functionality. They have no verbs. The correct solution to the Circle-Ellipse problem, the most famous demonstration of one flaw with OOP, can be expressed elegantly and correctly, in C++ and other "C++ style languages", using _classes_. Doing so doesn't make anything object oriented, and we shouldn't associate giving things names with a requirement for any particular set of associated verbs.

All language features are tools, and while I'm not saying Go is an inferior tool if you're satisfied, we shouldn't make blunt instruments, or carry fewer tools, just because some people don't know what they're doing. I'm currently not satisfied with the set of features Go provides... but then I also want to see some Go features in C++. Let's not get hung up on it.

</comment><comment><USER8> Clickbait headline aside, I think Go threw some baby out with the bathwater in the march to simplicity.

An example; try to sort a slice of runes.

<comment><USER9> The setup needs a little boilerplate, but it's definitely possible. And it can support different sort orders after writing the boilerplate once. For those wanting to test drive it: [http://play.golang.org/p/I_Vu34hUoV](http://play.golang.org/p/I_Vu34hUoV)

<comment><USER10> Interesting! Could you explain why []rune needs to be wrapped in a struct{Runes []rune}? Rather then just calling "type Runes []rune"?

<comment><USER9> It doesn't need to. You could also write type Runes []rune but the struct variant has the advantage that you can get the array back without any conversions - it's pretty cheap. And you can embed it. That's an advantage if you e.g. don't define Less on Runes but define it on RunesAsc and RunesDesc. See [http://golang.org/pkg/sort/](http://golang.org/pkg/sort/) -> Examples (SortWrapper)

<comment><USER9> The costs: allocating the memory, having it set to zero values and keeping the garbage collector a little busier. All of that more than once if you don't keep the conversions down. Profile and disassemble your program, Go comes with pretty great tools!

<comment><USER11> The Go runtime sets all memory to zero at the start of the program's execution, meaning there is no overhead for 'setting the zero values'. The amount of extra memory allocated is minimal (probably zero). Records/structs tend to be figured out at compile time so no 'extra' information needs to be stored in it. And since we are storing a pointer (a slice) the struct is already aligned so no extra storage is needed there. What it might cost is one extra level of indirection per array access, but due to the simplicity of the program, I would not be surprised if this was removed at compile time or cached (in hardware). Looking at the disassembly itself, they seem to optimize out that extra layer of indirection as well (for the most part in Swap, Len, and Less).

The real cost of this is definitely the verbosity for something that could be much simpler.

</comment></comment></comment></comment></comment></comment><comment><USER12> Since it seems down, here's the post:

Go is boring

Go has nothing new. Go has nothing special. You've see all of Go before. You're right. I get it. But what you haven't seen is all these things together in a single language. Where they all come together to make a really damn useful core.

You've used channels before, cool. You've used the pure bliss that is the slices efficiency in a couple of other places and grew to expect the behaviour in new languages. You're proficient with threads, coroutines, actors, futures and promises. You've quacked and walked and talked like a duck. But you've never (probably) done all these things together. And that's what Go is. Go is all the things that we've always known are good, smushed together. Go tries to remove all the things that are bad about languages and erases the majority of it (or at least does a good try to give you a decent alternative).

Static typing, with all it's greatness, can make for some damn verbose code. You sit and type at the compiler what each and every variable is, you painstainkingly explain (to a computer) explicitly what each part accepts and returns. It's annoying, and mostly avoidable. There are several basic types which have literal syntax, or functions which create those types. Or special syntax. So why do we need to use the special syntax to create those types along with telling the compiler which type it is? We don't. Type inference. Go has a kind of type inference operator (:=) which will deduce the type at compile time and save you precious keystrokes. This isn't anything new, tonnes of languages do it.

Useful but light object oriented programming. There are tonnes of C++ style languages which make classes seem like the final boss of programming. Where all yours types have to be carefully categorized and laid out in neat little ways in order to create a taxinomal tapestry, a kind of zoological museum of each working object in your code. It's weird the kind of gradiose ceremony we give to the simple act of giving stuff... stuff to do . Nouns are things, nouns do verbs. That's simple as that. There should be nothing special about that style of programming. It allows certain gains. It has wonderful encapsulation of methods which operate on the same data (verbs acting on parts of the noun), it has a nice semantic use (x is a y) but it certainly doesn't have a use everywhere. Hell, I've been writing a lot of backend stuff for the web and I've not written a Python class in about... 3 months. Many languages bring OOP back down to the level of "just another paradigm", where it should be. This is nothing new.

Concurrency is a first-class citizen. This is awesome. No longer do I have to search through the standard library only to be met with an aging, creaking model which doesn't quite fit my needs. Nor do I have to use the same tired methods for making my applications concurrent. With annoying models like threads and joins and crufty things like that. Go just goes. I ask for a concurrent routine, I get a damn concurrent routine. It makes concurrency feel solved for a lowly programmer like myself. This is nothing new.

I guess my point is that, whilst on paper (and I felt like this myself) that Go may look like nothing new. Where it looks like you could get those features elsewhere and not have to care about learning yet another new-school language. You've not had them all together. Or at least this baked-in to the language.

</comment><comment><USER13> I don't think Go's concurrency model is as successful as others.

<comment><USER14> Go concurrency is great! but in a future a less rigid type system would help.</comment></comment>


In High-Tech Cities, No More Potholes, but What About Privacy? - <AUTHOR> https://www.nytimes.com/2019/01/01/us/kansas-city-smart-technology.html <comment><USER2> I have a feeling that their foolish desire to go for a panoption will be what kills future potential good ideas like say having automated systems to provide road traffic maps to both navigation apps and perhaps everyday postings. Because they think first how to exploit and how to actually serve as a complete afterthought while working on marketing.

Really I can see smart systems doing potential for good but they would have to follow a few rules. \- Don't gather what data you don't need not just because 'it might be useful'. There is literally no /good/ use for such needlessly personalized data, only evil. \- Don't gather or control what you can't secure. \- If you must gather data from everyone make it transparent to all both in that 'yes this is being gathered' and 'everyone can see the listings'.

There would be far less objection to say roads that just mapped the traffic level and displayed it on maps and forwarded it to mapping services along with train delays and other things. A smart transit system could improve traffic routing wonderfully going ahead and telling people to take the other highway because there is a backup ahead or advertising the fact that the subway/municipal rail has a far faster arrival time for <district> and plenty of available parking right now.

You don't need to track every damn car by the license plate.

<comment><USER3> > Don't gather what data you don't need not just because 'it might be useful'. > There is literally no /good/ use for such needlessly personalized data, only > evil.

This is some of the most egregious hyperbole I've ever heard. Why do you think people collect data they don't need at the time? Obviously because it's useful later for things you can't imagine at the time.

So, you claim that the only possible future uses are evil. Which makes you what, able to see the future? You can enumerate unknowns, like the Oracle at Delphi?

<comment><USER2> I am speaking of public usage of data - there is a significant difference between a nosy neighbor noting your coming and going and the government doing so.

One is an annoyance and the other is a very abusable tool. Selective enforcement is a well known tool of power mongers. Point out malfeasance and get hit by harassment by rules ignored by and for everyone else.

If a nanite system could help detect high blood pressure oh and it can also cause a stroke by accident or at the push of a button it is not a good system. Just using other methods to get data would be far better. That is how it has no good use - any benefits could be obtained by a far less dangerous way.

</comment></comment></comment><comment><USER4> >The city's goal: To be what it calls a living lab.

Sure reminds me of Foucault:

>But the Panopticon was also a laboratory; it could be used as a machine to carry out experiments, to alter behaviour, to train or correct individuals. To experiment with medicines and monitor their effects. To try out different punishments on prisoners, according to their crimes and character, and to seek the most effective ones.

</comment><comment><USER5> We already know that a panopticon is ok with voters. Cars drive around with prominent labels visible at all times. People walk around with tracking devices. Etc. Nobody complains.

<comment><USER6> There's lots of things people didn't care about in the past but care about now.

</comment></comment><comment><USER7> In my country roads get maintained and fixed. Its not perfect (never settle) but potholes? You can search for weeks and you won't find them.</comment>


All Chromebooks will also be Linux laptops going forward - <AUTHOR> https://www.zdnet.com/article/all-chromebooks-will-also-be-linux-laptops-going-forward/ <comment><USER3> There's a still a big catch: normally, when a computer "runs Linux", you can keep installing new Linux distros until the hardware dies, which could be decades in the future.

Chromebooks reach "end of life" after a few (edit: ≤ 6.5) years, effectively becoming software-defined garbage: [https://support.google.com/chrome/a/answer/6220366](https://support.google.com/chrome/a/answer/6220366)

You can install Linux on _some_ Chromebooks, but it's often a lot of work to disable the "press Space to erase your operating system" prompt. It would be better if all EoL Chromebooks received an update to disable secure boot, because secure boot stops being secure when it boots you to an unpatchable OS.

<comment><USER4> Macs considered obsolete after 7 years [https://support.apple.com/en- us/HT201624](https://support.apple.com/en-us/HT201624)

<comment><USER5> Those vintage macbook pros are still getting OS and software updates. Hardly "software-defined garbage". I have a 2012 retina that's still chugging along perfectly. Battery life is down from when I bought it, sure, but there's still enough juice for a few hours of unplugged work.

<comment><USER6> I use a mid 2009 Core 2 Duo. I replaced the battery on it ~6 months ago. I also installed Mojave on it, and with the exception of a weird quirk where apps that do not live in the Dock do not disappear from it when you close the app, it runs fine.

It is essentially a Hackintosh, albeit a legal one, as the hardware is Apple hardware.

I do dev work on it, though it is ruby and/or javascript, not a lot of true compiling happening. But it works well.

I'd love it to be officially supported, but I mean you have to draw the line somewhere.

Edit: I forgot to mention the SSD I put in it, or the RAM I maxed out. ( _I_ did the upgrade work, I was not about to pay the premium for Apple to do it.)

<comment><USER7> > I replaced the battery on it ~6 months ago.

Where did you purchase the battery from, and how is the performance, if you do not mind me asking?

I also use a mid 2009 Core 2 duo, but lately I have struggled to find a source for a battery that will last more that 1.5 hours in typical usage. I assume the issue is that any authentic Apple battery must have been manufactured so long ago that its capacity is severely degraded after having been stored (at non-ideal temperature) for so long, and it seems like even many third party batteries available are old and had inferior capacity to begin with.

<comment><USER6> I assumed the same.

I bought the battery from iFixit[1], and I am back to the original of 4ish-5ish hours.

[1] [https://www.ifixit.com/Store/Mac/MacBook-Pro-15-Inch- Unibody...](https://www.ifixit.com/Store/Mac/MacBook-Pro-15-Inch-Unibody- Mid-2009-Mid-2010-Replacement-Battery/IF161-105?o=4)

</comment></comment></comment></comment></comment></comment><comment><USER8> > A Chromebook with all three operating systems running at once is also darn > useful for an ordinary Jane or Joe. For example, I can edit images using > Linux GIMP and write with LibreOffice Writer while looking at pictures using > Android Pinterest and simultaneously check my Gmail in Chrome OS. It's all > good.

For example, I can edit images using Linux GIMP and write with LibreOffice Writer while looking at pictures using Firefox on Linux and simultaneously check my Gmail in Firefox on Linux. It's all good.

<comment><USER9> ChromeOS adding almost zero value here.

Faster Gapps? Kinda. The explorer is better for drive files, for sure. Can unlock with my Android phone. Cool, I guess?

Can't think of any other reason to boot to ChromeOS.

<comment><USER10> No local state. You can do a full wipe then login and all your settings, apps, data are there (because they are in the cloud, not the device). Wipe your Linux partition and tell me how long until you have your computer back to how you had it.

Also, I love Chrome OS for my kids laptops because I don't have to worry about viruses or malware. In the case, I purposefully want a less feature rich OS.

<comment><USER11> The first paragraph sounds like you are describing using Firefox sync or chrome with a Google login.

<comment><USER12> Not really, because you can factory reset, cross a border and log back in in 10 minutes and everything is up to speedish.

It's not your threat model but it's someone's threat model and a chromebook does that better than anyone else, and your mom can do it.

<comment><USER13> Does that really appease border guards? If you present a blank laptop they would probably get very suspicious, since you are obviously trying to hide something. They would probably make you log in and sync before they let you enter the country. The whole point is to search your online life, if you don't let them do that, you don't get in.

<comment><USER14> > Does that really appease border guards?

Doesn't matter, you've protected your clients, that's what matters.

The worst case scenario is they seize it and prevent entry, which can happen with a blank or non-blank machine. Better it happens with a blank one.

> They would probably make you log in and sync before they let you enter the > country.

This would be where you just don't enter the country. In the other scenario, you don't get in and they get to keep the machine anyway.

<comment><USER15> That assumes the laws regarding this are humane and border guards follow them, which are both untrue of lots of countries, including the USA.

<comment><USER12> you don't have to sync to your main account? You guys are way over thinking this.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER16> I think a lot of people underestimate how cool this actually is. I use a Pixelbook now as a main dev device (used to use a Mac like everyone else in the valley).

With Linux in ChromeOS, this thing now runs basically 3 OSs (Chrome/Web PWAs, Android, Linux) in one environment. What this means is that I open my app drawer, and I see app icons I can launch. I don't know or care what actual OS those apps are running on! It could be a PWA or an android app or a linux app and it works and runs the same as any of the other apps. All without compromising on the security isolation benefits of ChromeOS.

<comment><USER17> Do you actually not know what OS those apps are running on? Aren't there extremely stark and obvious differences between the three classes of apps?

<comment><USER18> Sometimes only if you look for small details. The ChromeOS launcher mixes Chrome Apps, bookmarks, PWAs, and Android apps with only a small badge to differentiate if you have multiple of the same app (e.g. Keep Chrome app and Keep for Android).

<comment><USER17> But once they're running, don't they look and behave very differently? The last time I tried Android Firefox on ChromeOS, it had to quit to resize its window.

<comment><USER19> They don't really behave or look all that different. When was the last time you ran an Android app on ChromeOs? The original attempt that ChromeOs made at getting Android apps on ChromeOs back in 2015 or whatever was scrapped because it was buggy and had the sort of problems you describe.

</comment></comment></comment></comment></comment><comment><USER20> My $150 (Acer) chromebook has lasted me 5 years (and counting) and is still just as fast as the day I bought it.

My $1500 macbook pro that I bought at the same time got noticeably more sluggish over the years by comparison, and I've had to bring it in for repairs twice for hardware failures (once for hard drive cable, once for HDD itself) - I sold the MBP last year and bought a Lenovo.

Truly amazing. With this change, I could probably even get rid of the Lenovo and just have a single Chromebook for all my needs since all I really used the MBP for was the unixy CLI.

<comment><USER21> >once for hard drive cable, once for HDD itself

Considering that the Acer Chromebook probably has flash memory, I don't see how this is a fair comparison. I have a 2012 Macbook Air and Macbook Pro that have had no issues. The Macbook Air is my general around the house laptop and the MBP is used as a Plex box. Still do everything I need them to do and the only issue is the battery life of the Macbook Air since it's gone through way too many charge cycles.

<comment><USER20> So why is that Acer is able to afford an SSD in a $150 computer, but Apple can't afford an SSD in a $1500 computer? Heck, Apple _still_ doesn't have SSDs in their latest gen (2019) iMacs...

<comment><USER21> The Acer is probably flash memory, not an SSD. The $1500 iMac has a "1 TB fusion drive" which is apparently a hybrid of flash memory and an HDD (and all iMacs have the option to be configured with an SSD). I have no idea why they don't have it by default. They probably have a bunch of data that shows that the main consumers of iMacs don't know the difference or don't care. I'm just pointing out that your comparison was not genuine because you compared a problem with a component on one laptop that the other doesn't have.

<comment><USER20> I as a consumer don't care if the comparison is apples to apples at a component level.

I am doing a high level comparison between laptop computers. One has been fast and reliable, the other has not. One was 10x more expensive than the other.

I don't care if the MBP had a quantum drive from the year 3000. If my user experience with it is worse than a Chromebook, I'm not buying another one.

</comment></comment></comment></comment></comment><comment><USER22> This is arguably a deceptive title. Why not something more clear such as, "All Chromebooks will now support containers." Chromebooks are already running a modified Gentoo Linux kernel. They are already "Linux" laptops.

Chromebook users currently employ chroots to run non-Chromium userlands from Debian, Arch, etc. Ideally, they would like to run their own kernel, usually one they get in binary form from those public distributions such Debian, Arch, etc., but also kernels they compile themselves.

It is possible (=good) but still a pain to install one's own kernel on a Chromebook. The Google Corporation could, but is not, making that any easier.

Instead, what is happening here is that they are adding support for containers. Chromebook is still running Google's modified kernel.

Pure coincidence I am sure, but looking at how Microsoft is marketing using the term "Linux" we see the same thing. They like to use the word "Linux", but the user is still running a proprietary kernel. In that case, it is the Windows kernel.

Linux is a kernel. If you cannot compile it yourself and easily install it on your laptop, then whose "Linux laptop" is it, really? The issue is one of control.

<comment><USER23> This is definitely a deceptive title.

It implies Google is working to make sure third party Linux distros work reasonably, presumably by backporting their fixes and mandating OSS drivers, and easy dev mode support.

From what I can tell, none of those things are true.

</comment></comment><comment><USER24> One thing to remember is that as of a month or so ago, there are serious limitations on the functionality of Linux apps. For instance, accessing your Google Drive files with Linux isn't straightforwardly possible, and another big one for me being that Linux apps cannot record audio. Additionally, backing up the Linux partition wasn't straightforward and wasn't a part of the normal 'Powerwash it and it restores' backup element of ChromeOS.

I tried to use this to reduce my dependence on a MBP, but found a number of these little gaps that just couldn't quite be filled. I'm hoping these get improved with time, but as of right now, it's promising, but not delivered.

<comment><USER25> It is rapidly improving. Relating to two of the items you mentioned: In just the last few months they added cloud backups for linux containers, and linux access for your google drive.

I switched from the mac for my full-time machine a few months ago and have been blown away.

It does two things really well and securely: web browsers and linux. These are the two things I need to do my job.

<comment><USER26> Completely agree. I switched full time to a Pixelbook from Mac after getting frustrated with the new Macbooks (hate the touchbar, and a Macbook with a stuck key is basically an unusable computer).

One more thing to add is that they just added the ability for Linux apps to output audio in the latest stable release, so don't think recording would be too far away, although that has greater security issues of course.

</comment></comment></comment><comment><USER27> I've been doing this for a little while on a cheapo chromebook.

It works, but it is brutally slow and clunky (this is on a 2018 entry-level intel celeron n3350 + 4gb ram chromebook) to run something like firefox. It is usable, but you'll get frustrated fairly fast.

Unfortunately the same can be said about the chromebook in general - have more than one browser tab open on a javascript heavy page (e.g. large google doc + gmail + calendar) and its really slow there too anyway so I guess I cant hope for much.

I feel like web apps have got significantly more complex, while the compute in the entry level chromebooks has more or less stagnated over the past few years. Just doesn't feel like there is enough power to make things comfortable and seamless to use. I've used a couple of intel i5/i7 chromebooks and they've been lovely to use with snappy performance, but the price for that performance is approaching/exceeding that of a "real" laptop (sometimes wildly exceeding the price of a normal windows laptop, or even a mac for the case of Google's chromebooks) so it kinda defeats the point in my mind.

I used to recommend chromebooks to all non-tech savvy people who asked me (parents, relatives, friends etc), now I hesitate to do so because the performance is just not there unless you really pay huge sums.

<comment><USER28> The script heavy stuff in general is a pain in my experience. I have a 2995U + 4gb ram chromebook that just runs Arch, and gmail/drive/etc are crazy slow. Even scrolling through the newest stuff on thingiverse for an hour with however many loaded images is faster than some of google's pages/apps. On the plus side, Firefox seems to handle 50-100+ loaded tabs well as long as there isn't too much stuff going on with them.

<comment><USER29> What's your Arch setup? You might want to fiddle with some of the settings in Firefox to try and get more hardware acceleration.

<comment><USER28> Thanks for the heads up! I enabled layout.display-list.retain (two other options related to HW acceleration were already enabled), and it might be faster, but I'm not sure about that.

</comment></comment></comment></comment><comment><USER30> One thing I never quite understood is why is it so hard to install a regular GNU/Linux distro on a chromebook. Why is it not possible to just put a liveUSB in the USB port and install it like you would on any personal computer?

<comment><USER31> Chromebooks use Coreboot firmware with a specialized payload called Depthcharge. This bootloader is customized for ChromiumOS and doesn't boot Linux/Windows.

To install Linux/Windows on a Chromebook, you have to flash this firmware, usually replacing it with Coreboot with the Tianocore payload, which is a bootloader capable of booting other OS's. (MrChromeBox supplies this custom firmware for lots of devices)

<comment><USER32> Yea I feel like this article is pretty misleading. It would be better if Google officially supported removing the entire ChromeOS and doing a full install of any Linux distro you want. This isn't really running Linux on your Chromebook. It's running a chroot of another distro under their Linux kernel/GUI layer. It's pretty different.

<comment><USER33> It's not even a chroot. That's how crouton works. Crostini, the google provided solution, actually runs all the "containers" under a KVM virtual machine. So it's even more abstracted.

</comment></comment></comment></comment><comment><USER34> I haven't really used Chromebooks, so this is a genuine question, and not meant to be rhetorical.

In a 3 OS ChromeBook, what does ChromeOS bring to the table that Linux and Android don't already cover?

<comment><USER35> Hardware acceleration for video so the battery doesn't die a quick and noisy death (like with Chrome or Firefox on a normal Linux distribution).

<comment><USER36> This has been the big difference for me of using a Chromebook+Crostini vs installing Linux on a typical PC. The battery life on the chromebook just lasts forever and is buttery smooth out of the box while the laptops with linux installed have always had markedly worse battery life than when running their intended OS in my experience.

<comment><USER37> Same contrast between a very powerful Windows laptop and a chrome book. Windows still feels choppy compared to the chrome book.

</comment></comment></comment></comment><comment><USER38> This might be good news for Linux-on-the-desktop (indirectly). People have said for years the thing needed most is app support for high-end workloads like gaming and creative (think Adobe suite). I can't think of any use case beyond these, 90% of other stuff can be done in a web browser, and I'd say legacy software is the only exception.

There's developer mindshare, but I'm not convinced there's much of a business case. I'd say the intersection of high-end Chromebooks and users who'd do gaming/video editing/etc.. on one, is asymptotically small.

<comment><USER39> Premiere/FCPX, After Effects, and Photoshop are not "legacy software" - <USER2> you covered those.

There are also lots of CAD/CAM tools that do not, and likely will never, run in browser.

I'd love a web-based version of IDA.

We're still a ways off; 90% there is still a half day of work each week that I simply can't do on iOS/browser/ChromeOS. For that stuff I need a "real computer", and will for the foreseeable future.

It would be nice if iOS got a yellowbox, for example - running a desktop os x sandbox on my iPad Pro for the stuff that won't ever switch would be really useful.

ChromeOS adding Linux in a VM was a brilliant move.

<comment><USER38> CAD tools are a fair point, but those seem much more niche than video games and creative. I'd assume that industry uses high end workstations anyway, and not laptops?

I'm definitely excited to see how this goes.

<comment><USER39> I truly don't mean this as snark, but pretty much everyone who builds anything physical uses CAD.

They are as "niche" as image editors, or compilers, which is to say: not at all. Pretty much every object in your current field of view was likely designed with CAD, unless you live in an old house or have vintage furniture.

</comment></comment></comment></comment><comment><USER40> Video of the talk:

Linux for Chromebooks, (A.K.A Crostini): Secure Development

presented by Sudha Broslawsky, Tom Buckley, and Dylan Reid at Google I/O 2019

[https://youtu.be/pRlh8LX4kQI](https://youtu.be/pRlh8LX4kQI)

Some technical details:

* Container: Crostini (default is Debian 9)

* Guest: Termina VM: LXD [1], Linux Kernel

* Host: CrOS: crosvm, Linux Kernel

Drivers are run in "minijails" to minimize exposure.

Files are shared from container to OS via 9P [2]. Google is calling theirs "9S"

Edit: I think this in-depth document may be up to date: "Running Custom Containers Under Chrome OS" [https://chromium.googlesource.com/chromiumos/docs/+/master/c...](https://chromium.googlesource.com/chromiumos/docs/+/master/containers_and_vms.md)

[1] from Canonical, see [https://linuxcontainers.org/lxd/](https://linuxcontainers.org/lxd/)

[2] [https://en.wikipedia.org/wiki/9P_(protocol)](https://en.wikipedia.org/wiki/9P_\(protocol\))

</comment><comment><USER41> If I understand this correctly it's just running Debian in a VM/container? I quite like the Chromebook hardware but I don't want to run ChromeOS (and whatever data collection crap-ware they run), when can we just install any OS we want?

<comment><USER42> IIRC Chromium OS doesn't collect the data the way the closed-source Chrome OS does. It's a great OS for getting work done (on Gapps, of course.)

Debian (and all other userspace-run operating systems) are in a container.

</comment></comment><comment><USER43> This is great news! Chromebooks are dirt cheap and for the most part have amazing build quality and keyboards for the price point. I just can't stand the flimsy plastics and hinges of most "normal" laptops at that price.

I used Arch Linux on a Toshiba Chromebook 2 as a primary laptop for about two years, but eventually moved away from it because my bootloader got un-blessed due to the battery zero'ing out, and I didn't want to deal with it.

I guess Chromebooks are back on my radar!

<comment><USER44> If you're not planning to run Chrome OS, I'd definitely recommend making the effort to flash a 3rd party bootrom from [https://mrchromebox.tech/](https://mrchromebox.tech/) or the no longer updating [https://johnlewis.ie/custom-chromebook-firmware/rom- download...](https://johnlewis.ie/custom-chromebook-firmware/rom-download/)

I had better luck with booting FreeBSD on an Acer C720; but I think Mr. Chromebox's bioses keep getting better and better.

<comment><USER43> Thanks for the rec!

I unfortunately decided to install RW_LEGACY years ago when I set it up. It's now in a weird state where it has SeaBIOS installed but legacy boot is disabled. From what I've read, I need to boot into a Chrome OS recovery to enable legacy boot, which should allow everything to work. But I haven't been able to find a simple Chrome OS recovery shell image for me to boot into, so I'm kind of stuck rn.

<comment><USER44> From this state, I would try a full Chrome OS recovery [1], which I believe will put the firmware back to stock (especially if write protect is disabled), and then start again with the 3rd party scripts. Alternatively, I think I've seen instructions [2] for reflashing the bios using a different device, but I haven't screwed things up that much yet :D

[1] [https://chrome.google.com/webstore/detail/chromebook- recover...](https://chrome.google.com/webstore/detail/chromebook-recovery- utili/jndclpdbaamdhonoechobihbbiimdgai) instructions here: [https://support.google.com/chromebook/answer/1080595?hl=en](https://support.google.com/chromebook/answer/1080595?hl=en)

[2] [https://wiki.mrchromebox.tech/Unbricking](https://wiki.mrchromebox.tech/Unbricking)

</comment></comment></comment></comment><comment><USER45> Incorrect title. A "linux latop" is a laptop running linux as its OS. These are chromebooks that allow the user to also run linux, but they are still chromebooks. Their definitive feature, the bit that cannot be removed, is that they run as chromebooks.

Title should read "All Chromebooks will also run linux on demand". They aren't linux laptops.

<comment><USER46> ChromeOS is a Linux distro. If you're going to be pedantic, the title should read "Chromebooks have always been Linux laptops, but now they also run a sandboxed version of Debian".

</comment></comment><comment><USER47> Why not just... run linux... instead of running linux in a VM on Chrome OS?

(Or if you like having separate VMs for separate stuff, support Qubes?)

This is cool and a step in the right direction but I'd still prefer to Just Run Linux

<comment><USER48> You can (and I do), but it requires disabling the verified boot process that makes Cromebook security so nice.

<comment><USER47> > You can (and I do), but it requires disabling the verified boot process that > makes Cromebook security so nice.

Thanks I did not consider this point. Being able to trust your device is important.

I'd love to read more if you know of any resources - evil maids remain the chink in the armor for even the most privacy conscious :)

<comment><USER48> Sorry for the late reply, but [https://mrchromebox.tech/](https://mrchromebox.tech/) has most of the information. That and /r/chrultrabook/ and maybe a few other subreddits.

<comment><USER47> Thanks, looks interesting!

</comment></comment></comment></comment></comment><comment><USER49> Can we now say that open source OS kernels have, officially, beaten proprietary ones? Even Windows has a Linux compatibility layer. This would have been unimaginable 10 years ago, when Linux desktops were far from mainstream.

<comment><USER50> That heavily depends on the definition of "beaten", and also what "open source kernels" actually means in context. A compatibility layer means little, considering Linux has had a Windows compatibility layer far longer than vice versa. And does an open source kernel matter much when the userland is closed source and proprietary? Or when the apps are closed source and proprietary? Or when computing shifts to a closed source and proprietary Internet environment?

</comment></comment><comment><USER51> It's been working on older Chromebooks, too. I have a crappy three year old ARM-based Samsung that has followed along with the OS upgrades, as Chromebooks do. I now do a fair bit of development in its terminal (and more by ssh into a DigitalOcean VM).

I often think of getting a more muscular Intel-based Chromebook as a general- purpose development box.

</comment><comment><USER52> I apologize in advance for going a bit off-topic, but I would like to point out the following:

It is never necessary, and always inelegant, to write or say "going forward". Also, it stinks of corporate-speak.

The English language already has a future tense, and this bit of redundancy makes sentences sound more contrived and clunky. Simple rule of style for writing: if you can remove something and keep the meaning intact, remove it. No regrets. "Simplicity is the ultimate sophistication".

<comment><USER50> What would you use in its place? If you just said "All Chromebooks will also be Linux laptops", it's reasonable to expect that existing Chromebooks will be made Linux-ready as well. That's what the word "all" means, it means "all". But that's not the case. Only devices "launched this year" are guaranteed to be Linux-ready according to the article.

"Going forward" means "from now on, but not including the past". Going forward is a much easier way of saying "from now on, but not including the past". I'm willing to accept that there is a better way, but I'd like to hear what that is. And it can't just be dropping the words "going forward", for the reason I've already explained.

<comment><USER52> > If you just said "All Chromebooks will also be Linux laptops", it's > reasonable to expect that existing Chromebooks will be made Linux-ready as > well.

Adding "going forward" does not remove this ambiguity. You just happen to know the correct answer. I still assumed that existing ones would also be Linux- ready, until I read your comment.

> "Going forward" means "from now on, but not including the past".

No, it just means "from now on". It has the exact same meaning as the future tense.

Your comment confirms something I suspected: unnecessary linguistic mannerisms and corporate clichés are a symptom of confused thinking.

Going forward, I will add this to my list of arguments. But not in my past discussions.

</comment></comment></comment><comment><USER53> Running linux in a vm is not running linux. It's still locked down hardware with proprietary drivers. Google can forget about my support.

EDIT: s/container/vm/

</comment><comment><USER54> > Linux on Chromebook laptops is not a dual-boot operation. You're running > both operating systems simultaneously. That means, for example, you can do > things like clicking on a document file via the Chrome OS file manager and > open it with LibreOffice -- without even starting a Linux session.

Disappointed they agent just really good Linux laptops where we can wipe chromeOS off of.

<comment><USER55> You can do this if you want, and you can dual-boot them as well.

</comment></comment><comment><USER56> This breaks the security benefits of Chromebooks. One of the advantages of Chromebooks is that hackers can't persuade naive users to download and run binaries.

Previously a company could issue Chromebooks to all employees and know that employees can't run arbitrary binaries on their Chromebooks.

<comment><USER57> Companies can disable the support for Linux apps, and the security measures taken to isolate Linux apps from Chrome OS are excellent (Linux apps are running in an unprivileged container inside a VM that has a stripped down kernel).

There's definitely an increased attack surface inside the VM, but that's kind of unavoidable if you want to have a development environment (what this is marketed for). At least Chrome OS offers a secure way to isolate your development environment from your email/banking/etc processes.

<comment><USER56> Previously the CEO only had to ask, are all of my employees using ChromeBooks? Now he also has to ask, are those ChromeBooks all configured for security? It used to be a simple question, which could be answered at a glance. The new question is an order of magnitude harder to answer.

<comment><USER57> Not that hard since it's a simple switch by the administrator in the company device policy: [https://support.google.com/chrome/a/answer/1375678?hl=en](https://support.google.com/chrome/a/answer/1375678?hl=en) (See "Virtual Machines")

Such a step was already necessary to disable Android apps.

</comment></comment></comment></comment><comment><USER58> I wanted to try chrome os a month or so back with android and linux support enabled but had hell of a time. Google seems to be very restrictive on where they get to run with all goodies. Google chromebook partners weren't even allowing experimental features to be tried on their platform so had to pick an Intel NUC to have the freedom.

It all worked out fine with fyde os(chrome os flavor by a chinese company recently acquired by neverware) but with some tinkering to reset language to English and to disable fyde os sync/login with google.

I have stopped using chrome due to privacy concerns and would never use chrome os with a google login. It was just an engineers itch to see how i can break free from restrictive hardware platform and get it working.

</comment><comment><USER59> Since when does running Linux in a VM make a machine a Linux machine?

This same charade is being done by Microsoft with WSL2.

In both cases it serves to usurp future Linux-on-metal users by giving them a convenient virtualized Linux environment, and we all suffer as a result while Linux's hardware support rots away.

It will only be a matter of time before nobody can run Linux directly on consumer machines, and there will always be a proprietary hypervisor in control and your privacy and security compromised.

Resist this and insist continuing to run Linux on bare metal, retain control over your general purpose computing.

</comment><comment><USER60> Now all they need to do is integrate Wine and Proton, and Chrome OS will be able to easily run games and applications from 4 different operating systems.

<comment><USER61> What is Proton?

<comment><USER55> It's Steam's Wine derivative: [https://github.com/ValveSoftware/Proton](https://github.com/ValveSoftware/Proton)

</comment></comment></comment><comment><USER62> When I saw this topic I got all excited. Then I read the article and realized that it's dual running with Chrome OS and we are limited to certain versions of Linux without the same old headaches that have always been there.

I honestly just want a cheap reliable laptop that I can install the Linux distro of my choice (usually Kali for doing pen-testing).

</comment><comment><USER63> Is it still possible to boot from usb stick, blow Chrome OS away and install proper linux distro?

Like on a normal computer.

<comment><USER55> Yes. You can also dual boot. This requires disabling verified boot, though.

</comment></comment><comment><USER64> Will someone please enable some magic sysrq functionality on machines with reduced keyboards?

This is coming from a person who has had to open up his Chromebook and unplug the battery internally when it inevitably crapped itself from OOM and was nonresponsive to any key press.

</comment><comment><USER65> One advantaage to dual booting is you can get hardware acceleration, which you don't currently get with Linux apps in ChromeOS (though they are working on it).

Another is that most chromebooks have 4gb of ram which isn't much for running a VM on top of an OS.

<comment><USER66> Hardware acceleration is working fine on the Dev channel with a flag. Shouldn't be too long before it's on by default and available on stable.

</comment></comment><comment><USER67> If you can't beat them, join them. Seems this is the move Google does on Linux. Well, "f" that, I want my Linux to be Linux and not some wolf in sheep clothes from Google. So no Chromebook for me...ever.

</comment><comment><USER68> A Linux laptop that _forces_ the user to log into Google in order to use their Linux laptop.

Am I correct? I can't imagine I'm not since there's no way ChromeOS's security model would work otherwise.

<comment> iams- No. You're not correct. All chromebooks can be run in guest mode which requires no login at all. Google has a long-standing bounty on the security of guest-mode.

<comment><USER68> So we've redefined "Linux laptop" to mean a system that returns to the base Debian install any time I log out or reboot?

On the other hand, Chromebooks are cheap. So it might be a fun exercise to post a script on github that installs my development environment packages.

</comment></comment></comment><comment><USER69> All Chromebooks and Chrometops are already Linux laptops. You can install Crouton (easy chroot) and have an Ubuntu or whatever your favorite distro is in <15 minutes.

<comment><USER16> Sure, but now it's literally just a button click and it's in the same environment as ChromeOS, no need to reboot to switch between.

<comment><USER70> Also native file sharing between the linux containers and ChromeOS.

</comment></comment></comment><comment><USER71> Does ChromeOS have any kind of window tiling solution? My dream is a Chromebook with all my Linux apps and a tiling window manager ala i3.

</comment><comment><USER72> I would like one of these as my daily web surfing machine ... if I were able to avoid having a Google account to boot the machine.

</comment><comment><USER73> If it's as advertised, it would be a pretty compelling purchase. How light is the typical Chromebook these days?

</comment><comment><USER74> Will the Linux container be able to access Google drive?

If so, any hope to see Google drive proper support for regular Linux?

</comment><comment><USER75> All Chromebooks will also be _Linux_ _Container_ _laptops_ going forward

</comment><comment><USER76> SJVN pushes out click-bait and relies on speculative wording to peddle his articles.

</comment><comment><USER77> It is not competing with windows anymore... It is a killer for macbook...

</comment><comment><USER78> X11 is never going to die.

<comment><USER57> This is implemented using Wayland, not X11. I just checked on my Chromebook, GTK+ apps use Wayland by default, Qt5 apps use X11 by default (through Xwayland) and look ugly when told to use Wayland. I guess X11 is going to stay as a compatibility layer, but this won't help it stay to the front.

</comment></comment><comment><USER79> Are they going to port this to Android phones?

</comment><comment><USER80> Now smartphones too, please.

</comment><comment><USER81> One less reason to consider a Mac :)

</comment><comment><USER82> Between this and Windows shipping a linux kernel, 2019 really is shaping up to be the year of the linux desktop

<comment><USER83> Well Terminal at least.

<comment><USER84> Chromebooks can run GUI linux apps.

<comment><USER70> Yep. Using the containers to run sublime text and factorio on a chromebook.

</comment></comment></comment></comment><comment><USER85> I want to make the leap from Mac to Linux, I'm fairly computer savvy and 'can handle' Linux, but I'm just wary of missing out on some things. Like some Adobe products.

Can someone chime in on the viability of Chromebook/Linux as a replacement for not just dev, but common computing tasks as well as creative work? (Photoshop, After Effects, editing etc.)

<comment><USER86> It's OK with CrossOver for Linux. I ended up just using Krita. If you're a heavy Adobe user Chromebooks are underpowered (except the Pixel).</comment></comment>


Ask HN: Cheap low-end GPU server rentals? - <AUTHOR> All I can find is either:<p>* High-End GPUs<p>* Credit Card only<p>What im looking for:<p>* Windows OS<p>* Price < $35/mo please. <comment><USER2> You are not going to find anything at that price with a GPU worth using.

If you are willing to spend a little more talk to a bare metal supplier about installing you own GPU's in one of their servers. My company did this and it was the cheapest way to get reasonable performance on a budget.

</comment><comment><USER3> There is no market for such requirements. It must be really old and crappy GPUs for this price.

<comment><AUTHOR> So what you're saying is I either self-host my machines or have to order >=$1000/mo machines with 4x 1080's SLI'd? There surely must be a solution to my very simple problem.

<comment><USER4> You can find stuff in between ($150-250 1x GPU) but no, $35 + windows + no cc = no.

Keep in mind the windows licence is already 75-200% ofyour monthly budget. Run it in Linux if you can, better CUDA/etc support too

</comment></comment></comment><comment><USER5> The best way would be to buy used low end GPUs and put them in your machine.</comment>


Show HN: Daily Coding Problem – Get a coding interview problem every day - <AUTHOR> https://dailycodingproblem.com/ <comment><USER2> Not to be overly critical here, but don't you think your pricing structure is completely disproportional to what you're offering? Have you ever asked anyone whether they would be willing to spend $500 a year on 365 programming problems when they could just IFTTT a feed of Project Euler questions into an email in 5min, or log on to HackerRank or similar using the reminder emails they send you?

Additionally, (correct me if I'm wrong) but is having one-on-one support the only difference between the "Plus" and "Pro" pricing tiers? Is it really worth spending $475 extra/month for the opportunity to discuss problems with the founders (whose names are nowhere to be found?)

Again, I really don't want to hate on anyone's product. I'm sure there's something super amazing about this. I just want to understand the rationale behind the pricing structure, since I've never seen a product like this before.

<comment><USER3> Yeah, HN is probably not the best place to sell a service like this. But I could see this being used by certain clientele. Maybe a better offer would be, get an engineer to interview your candidate.</comment></comment>