Suggest HN: Links should open in new tabs - <AUTHOR>

I suspect everyone reading HN is using a relatively modern browser, and like me opens links as new tabs instead of having them replace the HN tab. So why not make this the default behavior and include a target _blank to the links?<p>Do you open HK links as new windows/tabs or have them replace the HN page? <comment><USER2> Suspecting that everyone else is like you is not a very robust assumption.

The current system is aimed at everybody: those who wish to have the links open in the current window left-click, and those that wish to have the links open in a new tab middle-click.

For what it's worth: I use a modern browser, but not when I am on a mobile device.

</comment><comment><USER3> This is usually configurable in your browser. For example, in Firefox <http://kb.mozillazine.org/Browser.link.open_newwindow>

<comment><AUTHOR> Absolutely, but I don't want that setting for all sites.

I'm sure I could configure just HN to open in new tabs using an extension or similar technique, but I'm guessing everyone always uses new window/tab with HN, hence the suggestion.

</comment></comment><comment><USER4> No.

<comment><USER4> Adding: it's easier for you to open a regular link in a new tab/window than it's to open a target = blank link in the same page.

Pro tip: middle mouse button/3 finger tap on touch pad.

<comment><USER5> Noob tip: The chrome extension HN OnePage [https://chrome.google.com/extensions/detail/plldnnbdlbgbiknj...](https://chrome.google.com/extensions/detail/plldnnbdlbgbiknjebohmlggcbicghlj)</comment></comment></comment>


Google Public Policy Blog: A joint policy proposal for an open Internet - <AUTHOR> http://googlepublicpolicy.blogspot.com/2010/08/joint-policy-proposal-for-open-internet.html

<comment><USER2> This seems like the sticky bit:

 _Fifth, we want the broadband infrastructure to be a platform for innovation. Therefore, our proposal would allow broadband providers to offer additional, differentiated online services, in addition to the Internet access and video services (such as Verizon's FIOS TV) offered today. This means that broadband providers can work with other players to develop new services. It is too soon to predict how these new services will develop, but examples might include health care monitoring, the smart grid, advanced educational services, or new entertainment and gaming options. Our proposal also includes safeguards to ensure that such online services must be distinguishable from traditional broadband Internet access services and are not designed to circumvent the rules. The FCC would also monitor the development of these services to make sure they don't interfere with the continued development of Internet access services._

It seems reasonable, but this is a subtle distinction. Prioritizing internet traffic isn't allowed, but selling services that might get priority over internet traffic is, so long as they aren't called "internet." I guess the hope is that the internet will always be important enough that they'll never throttle the whole thing or risk losing business, hence the FCC monitoring bit at the end.

<comment><USER3> I think it's easiest to think about in terms of AT&T UVerse (an easy example). You have TV, Internet and VoIP service delivered over the same network connection. TV and VoIP (the VoIP isn't carried over the Internet, instead it's direct to the internal switching network and just happens to use IP for the packets) are independent of Internet access. TV and the VoIP service can be prioritized as needed, but Internet is just Internet and is only prioritized in relation to the other services (i.e., all Internet traffic is prioritized identically for a connection).

I actually like this distinction. It will encourage more broadband rollout as companies add more services that use the same infrastructure but aren't used for just "dumb pipes".

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

I have TV and Internet services on Telus' network here in Canada (I think they use the same platform that AT&T uses, which is a Microsoft IPTV solution).

TV and Internet come through the same connection at my house as a shared pool of bandwidth. They are sold separately, and TV actually hinders Internet performance.

I have 25Mbps down, total (which is freeeaking awesome for the price, about $50/month). Each HDTV channel used consumes 5Mbps. So if we are watching two TVs, we'll see only 15Mbps remaining for other data services.

I have no issue with this, either in practice or in principle.

In practice, Telus backs up the bandwidth truck and unloads it at my house every month, and I can't consume it all.

In principle, the market will decide whether to support the model longer term.

I for one won't hesitate to turf the dedicated TV services if Internet services can equal it in terms of quality/availability/price. But until then, I'm happy.

<comment><USER5> > I have 25Mbps down, total (which is freeeaking awesome for the price, about > $50/month).

Everyone in America hates you right now. Just FYI. :)

<comment><USER6> Everyone in Canada hates him too - this sort of connection isn't the norm. For example, see Rogers and Sympatico pricing. They have a monopoly on the Toronto area, mostly.

<comment><USER7> Videotron has the cable monopoly in Quebec. It's fast and reliable but man is it expensive.

</comment></comment></comment></comment></comment></comment><comment><USER8> EDIT: My notes below are mostly "what if" scenarios possible with this legislation. But I like this legislation and its intent by and large. These were just the most interesting things for me to comment on.

 _Fifth, we want the broadband infrastructure to be a platform for innovation. Therefore, our proposal would allow broadband providers to offer additional, differentiated online services, in addition to the Internet access and video services (such as Verizon's FIOS TV) offered today._

moultano already made one observation [1], I'll add that this point could get even stickier. Say Google partners with Verizon on their Google Health service to create a "Health Channel" service on Verizon, which ensures that subscribers get priority access to health information, you know, because that's important stuff, so it's in the consumer's best interest. And let's say it has enough of a differentiation from general internet access that the FCC allows it. Now, you've effectively prioritized Google Health over any other enterprising startups in the online health record space, which goes completely against the _intent_ of this proposed legislation.

Ok, so maybe the FCC will have the foresight to disallow this type of additional "service". But I have trouble imagining any type of additional service that doesn't somehow encroach on this problem.

Furthermore, I have a little trouble with this bit as well:

 _The FCC would also monitor the development of these services to make sure they don't interfere with the continued development of Internet access services._

So, if some communications company currently provides internet access, but then they find that the "added services over IP" space is more profitible than general internet access, it seems they have two choices. Continue pumping resources into their less profitible internet access service such that the FCC is content, or shut down general access completely and ONLY offer the differentiated services. Did I misinterpret this part?

And finally Part 7:

 _Seventh, and finally, we strongly believe that it is in the national interest for all Americans to have broadband access to the Internet. Therefore, we support reform of the Federal Universal Service Fund, so that it is focused on deploying broadband in areas where it is not now available._

Ah, there's where Google's agenda becomes apparent within this legislation (you know, in addition to the fact that they've always been publicly pro-net- neutrality). Of course, I like this part of their agenda, so more power to them.

[1] <http://news.ycombinator.com/item?id=1588799>

<comment><USER9> I think the "differentiated online services" part is a reasonable compromise, and they say there are safeguards and limits in place.

Your broadband provider is in the unique position of having super-cheap bandwidth directly to you, cheaper and faster than the vanilla internet they can provide. They'll be forbidden to prioritise one site over another, or to discriminate against individual sites. The question really is, do you want to _forbid_ them from selling useful services based around this cheap bandwidth? That's what IPTV and health imaging are all about.

Enterprising startups in these spaces already have barriers to entry based around cost. They can either wait for the bandwidth to become cheaper, try to cut similar deals, or come up with a way of providing these services without the same bandwidth needs.

<comment><USER10> It is like saying, since I am the ISP, providing you broadband, my services have the right to be successful in comparison to others.

And I'll use the money you pay for my privileged services to reduce the price for internet access..

</comment></comment></comment><comment><USER11> I think this is Google and Verizon saying "we're afraid some idiots are going write some idiotic laws, so here's a not-completely-idiotic reference implementation to help make sure nobody does anything stupid".

</comment><comment><USER12> Google agrees that having an open internet has been beneficial to the development of the internet. But somehow this is not needed for wireless broadband because there already is a lot of competition? What???

<comment><USER13> No, they believe that _regulation_ is not needed because they believe that competing wireless broadband providers will be forced to offer openness by the market.

<comment><USER14> Competing wireless providers? In the US we effectively have a duopoly of AT&T and Verizon. The fall off to T-Mobile/Sprint in terms of coverage is dramatic. There may be some spots where you have 4 good choices but for many of us it's AT&T or Verizon if we want acceptable service & speeds. Both AT&T and Verizon mimic each other's pricing structures and policies. We just need to look at Sprint who is trying to offer lower prices and faster speeds yet is still losing money. The duopoly owns the most valuable chip -- coverage. The other players are at a permanent disadvantage because they can't grow with inadequate coverage nor can they address the coverage problem with poor growth.

</comment></comment></comment><comment><USER14> _Sixth, we both recognize that wireless broadband is different from the traditional wireline world, in part because the mobile marketplace is more competitive and changing rapidly._ "

Not anymore. We'll probably get 4G fairly soon just because 3G capacity is already getting taxed but going forward wireless providers can simply gimp traffic to save money on infrastructure improvements. What incentive is there to push forward on 5G when you can just go tell the network engineers to adjust a few variables and save you billions of dollars? Of course if Google or some other gigantic company wants to pay to have that variable turned down less aggressively that seems to be fair game. I can't believe how naive/dishonest Google is being about this.

</comment><comment><USER15> Do not want.

To my mind this does not address the issues honestly. The basic issue: Laying cable is expensive, but the marginal cost of fiber over bandwidth can be driven down in a variety of ways, and we have abundant fiber and rapid progress in photonics improving it at least as fast as Moore's law.

Wireless spectrum, by contrast, is horrifically expensive. These two companies own a lot of both, and would like to trade the uncertainty of the auction model for a set of agreed industrial targets.

Some parts are a joke, like the FCC having the authority to fine companies up to $2m after investigating bandwidth abuses on a case-by-case basis. Verizon has annual revenues of about $27 billion; a $2m cap is about as imposing as a nerf gun.

</comment><comment><AUTHOR> There is also a live blog: [http://searchengineland.com/live-blogging-the- google-verizon...](http://searchengineland.com/live-blogging-the-google- verizon-net-neutrality-press-conference-48385)

</comment><comment><USER16> I'm still not entirely clear about the implications of this. Does this mean that Verizon can prioritize V-Cast over "Internet" when sending data to their phones? That seems like a big win for Verizon. They've always promoted their psudo-internet.

Does V-Cast ship on Droids?

</comment><comment><USER17> Why do we anticipate a market failure with net neutrality? If one broadband company throttles services in a way we don't like isn't there a market for one that doesn't?

In other words why won't a competitor come along and offer a neutral service if some providers start throttling?

I must be missing something in the argument, broadband companies don't have monopolies do they?

<comment><USER12> If I remember my Economics studies your argument applies to a free market. But broadband companies have a very large initial capital investment which raises the bar for entrants. For wireless you also have a limited number of frequency licenses that limit supply.

And when supply is very limited, and you know that it will be very very hard for anyone else to enter the market, then you oligopolies can appear.

That said, I don't know the USA market enough to say if they currently have a monopoly or not, or if they are colluding or not.

<comment><USER17> Yeah. You're right. On reflection I think there is a problem much like termination in mobile phone markets where the only way to reach a subscriber of a particular company is via their network...

I think my original comment was just wrong....

Carry on!

</comment></comment></comment><comment><USER18> What if I wanted to offer the following broadband service _for free_ :

• 512Kbps to anywhere

• 10Mbps+ to select sites like ESPN, YouTube, and others who agree to subsidize the service costs in proportion to use

Why should this be illegal, as long as everything's disclosed up front?

<comment><USER19> The problem isn't you offering that service, it's Verizon offering that service and being the only game in town. If we had real competition, network neutrality would be a non-issue because the market would punish violators. But we don't.

<comment><USER18> Then why not use antitrust and other policies to create actual competition where it's missing? As the 'backdoor' meetings of Google and Verizon hosted by the FCC show, federal rulemaking just cements the power of incumbents who can send planeloads of lawyers and lobbyists to DC.

If lack of competition is the problem, _address that_ , don't try to simulate competition via slow, often braindead, eventually-twisted-against-upstarts regulation.

</comment></comment></comment><comment><USER20> How net neutrality deals with customers who run their personal server at home. My view is that they should also get equal preference as public online service providers. At least they are paying the money for the bandwidth used.

Most of the explanations i see in the internet about net neutrality deals with only content downloaded or streamed from public online services. I think it is ironic.

</comment><comment><USER21> Non-Discrimination Requirement : In providing broadband Internet access service, a provider would be prohibited from engaging in undue discrimination against any lawful Internet content, application, or service in a manner that causes meaningful harm to competition or to users.Prioritization of Internet traffic would be presumed inconsistent with the non-discrimination standard, but the presumption could be rebutted.

Network Management : Broadband Internet access service providers are permitted to engage in reasonable network management. Reasonable network management includes any technically sound practice: to reduce or mitigate the effects of congestion on its network; to ensure network security or integrity; to address traffic that is unwanted by or harmful to users, the provider's network, or the Internet; to ensure service quality to a subscriber; to provide services or capabilities consistent with a consumer's choices; that is consistent with the technical requirements, standards, or best practices adopted by an independent, widely-recognized Internet community governance initiative or standard-setting organization; to prioritize general classes or types of Internet traffic, based on latency; or otherwise to manage the daily operation of its network.

Additional Online Services : A provider that offers a broadband Internet access service complying with the above principles could offer any other additional or differentiated services. Such other services would have to be distinguishable in scope and purpose from broadband Internet access service, but could make use of or access Internet content, applications or services and could include traffic prioritization. The FCC would publish an annual report on the effect of these additional services, and immediately report if it finds at any time that these services threaten the meaningful availability of broadband Internet access services or have been devised or promoted in a manner designed to evade these consumer protections.

Wireless Broadband: Because of the unique technical and operational characteristics of wireless networks, and the competitive and still-developing nature of wireless broadband services, only the transparency principle would apply to wireless broadband at this time. The U.S. Government Accountability Office would report to Congress annually on the continued development and robustness of wireless broadband Internet access services.

Case-By-Case Enforcement: The FCC would enforce the consumer protection and nondiscrimination requirements through case-by-case adjudication, but would have no rulemaking authority with respect to those provisions. Parties would be encouraged to use non-governmental dispute resolution processes established by independent, widely-recognized Internet community governance initiatives, and the FCC would be directed to give appropriate deference to decisions or advisory opinions of such groups. The FCC could grant injunctive relief for violations of the consumer protection and non-discrimination provisions. The FCC could impose a forfeiture of up to $2,000,000 for knowing violations of the consumer-protection or non-discrimination provisions. The proposed framework would not affect rights or obligations under existing Federal or State laws that generally apply to businesses, and would not create any new private right of action.

All of the above is the most evil thing I have heard being said about the internet!

<comment><USER22> _All of the above is the most evil thing I have heard being said about the internet!_

Uh, why?

<comment><USER21> Because it smacks of second class citizens all over it.

<comment><USER2> How so?

<comment><USER21> Well to just provide one example, Verizon would only have to pay $2,000,000 if they knowingly violate the statue. No criminal sanctions. They can thereafter continue to violate it and just pay another two million. It is a bit of a business deal. If you can get in more money then out, then you are good. The FCC, or anyone else, has no other authority.

Why such a low figure, we are dealing with massive corporations who would notice 2 millions as much as I would notice 2 dollars.

The general public, that is people like me and you, would need to depend on the FCC, and have no rights, which is not quite understandable. Why should I not be able to sue them for discriminating against me? Because of course Verizon is a party to the "law proposal".

Besides, there are exceptions clearly. The FCC would need to enlarge very much if they are to deal with all the complains and have the time to analyse them and follow them through and in the end only be able to impose a miniscule fine.

Not to mention that the providers would have the authority to outright prioritise internet traffic provided they go through some hoops and any lawyer would know just how difficult that is.

<comment><USER2> >Well to just provide one example, Verizon would only have to pay $2,000,000 if they knowingly violate the statue. No criminal sanctions. They can thereafter continue to violate it and just pay another two million. It is a bit of a business deal. If you can get in more money then out, then you are good. The FCC, or anyone else, has no other authority.

I don't know enough law to understand the granularity of this. Is it 2M per infringement? Could the potentially be shelling out 2M per customer? It seems like this is what would determine whether it's a high cap or a low cap.</comment></comment></comment></comment></comment></comment>


Django 2.2 - <AUTHOR> https://www.djangoproject.com/weblog/2019/apr/01/django-22-released/ <comment><USER2> Django/Jupyter/pandas is an ecosystem that's hard to beat.

If you're not already using it, check out `django-extensions`. You can use `./manage.py shell_plus --notebook` to launch a Django-friendly Jupyter notebook.

From there you can prototype with extreme ease and confidence.

I have also built a trivial custom model Manager so I can do stuff like:

        User.objects.all().to_dataframe("first_name", "last_name", "email")

Honestly I can't see myself being even slightly tempted to move to something else unless I can replicate this workflow.

<comment><USER3> Not a data engineer / scientist here.

What am I missing with data-frames?

I've written products that utilized them before (years ago), but it's been long enough that I don't know what I would even use them for in daily programming.

<comment><USER4> They're for tables and doing table-ie things: an imperative programming method for the same tasks people use Excel or SQL for.

This dovetails nicely with most data science-ie tasks, like statistical analysis, engineering features, simple machine learning techniques (the tables can be easily transformed into numpy arrays), and plotting results.

You can use them any time you feel the need to do table manipulations on non- insanely-large data: aggregate, transform, combine, split, reshape, join...

<comment><USER3> Got it, I was aware of this and many of the performance benefits another user mentioned, but wasn't sure how it could be useful in daily operation or quick Django shell_plus style scripting (one-off commands) when inspecting something like a User's table, as the original comment above indicated.

</comment></comment></comment></comment><comment><USER5> This release includes the Watchman based reloader I worked on for about a year. It turns out auto reloading in Python is not an easy task, and I'm really nervous about edge cases I haven't considered!

I've actually had a nightmare where everyone's auto reloader was broken. While it never runs in production (right?!) it's actually a pretty critical bit of Django that had not been touched in about 10 years!

<comment><USER6> Thank you! The new auto reloader is better by quite a bit. Many people have talked about doing this over the years, but nobody's been willing to do the grunt work and figure out all the corner cases, until you. Nice job!

</comment></comment><comment><USER7> I love Django. I've used it for the last 8 years. I'm happy to see the project is still thriving.

At this point, for me Django is pretty much synonymous with Django REST framework ([https://www.django-rest-framework.org/](https://www.django-rest- framework.org/)). I can't imagine a better API than Django w/ REST framework.

For static sites I use Django's templates. Otherwise, I just use Django w/ REST framework for my API, and to serve up index.html. My index.html will include a link to my JS bundle(s) - I use a separate build system (Webpack/Babel/etc) to handle JS.

<comment><USER8> DRF is awesome. If you're considering moving to or implementing GraphQL, though, Django + Graphile is amazingly productive and performant. No affiliation, just good experiences.

[https://www.graphile.org/postgraphile/](https://www.graphile.org/postgraphile/)

<comment><USER9> If you're using Postgraphile for the API layer and a frontend framework for the view layer, what do you need Django for? Just migrations?

<comment><USER10> Postgraphile solves the problem of boilerplate CRUD very well but it does not handle custom and complex logic well. For instance, interacting with other APIs like payment.

<comment><USER11> I'm sorry you feel that way; I use PostGraphile with external APIs frequently, using makeExtendSchemaPlugin to easily add more types and resolvers to my GraphQL schema. Maybe you could go into more detail on the issues you've faced here so I can improve the project?

</comment></comment></comment></comment></comment><comment><USER12> The projects/app relationship never 'clicked' with me. I also have a dislike for the awkward 'polls' example in the django tutorial.

That said, I like Django. Of course, I liked Rails better, but maybe that's because it was my 'first' and I never used any of the big php frameworks for a long period of time.

I quit wasting my time with Flask for projects a while ago. It's a really great project and suited for smaller things, but you just end up re-implenting django. I'd rather someone made those decision for me.

<comment><USER13> I feel the same way. Does any one have a good overview on how the community actually separates functionality into "apps"?

I have been looking at a rails like framework in python called Masonite. Does anyone in the python/Django community think this will gain traction?

<comment><USER14> > Does any one have a good overview on how the community actually separates > functionality into "apps"?

For the most part there isn't any need to, with the exception of things explicitly meant to be shared. So if you are a large company and want a bunch of custom auth logic or something to be shared among many different teams running their own Django service, then you might want to build that as an app. Or else if you were building something as an open source project you might want to do the same.

In terms of separating apps by functionality, I think the main reason many people do it is because they are under the mistaken impression that putting things into different apps will make them magically re-usable. That's not to say you shouldn't do it, only that I think most people do it for the wrong reasons.

In general I would say don't bother splitting up your project into different apps by functionality until you have too many models to comfortably fit into one file. That might not be until 20KLOC. For apps that are less than 10KLOC, I think in most cases the overhead probably outweighs the benefits.

There isn't really any hard rule one how to do this, but you might do something like:

\- Account management app for creating and deleting users, getting user profiles, password resets, etc.

\- Apps for integrations with third-party APIs, e.g. Duns or Mailgun.

\- Apps for different front doors, e.g. if you make a Facebook chat bot that's powered by the same tech that powers your normal website.

And then after that you can possibly split up your business logic of your core website into different logical components, but I would do that last. By the time you get there you should start to have a feel for how to do this.

The one place I use it for our own startup is that we recently built a couple different front doors for our site, and each one accepts data in a slightly different format and has different authentication requirements. I put each of these in their own apps, but everything else is just in one main app.

<comment><USER13> Thanks for the thoughtful response. Do you find yourself repeating code, or struggling to decide where code should live and where it should be imported?

<comment><USER14> I had this problem for the first couple years, but not anymore. What I did:

\- I split the core app up into different views and services based on the functionality. For FWD:Everyone this is basically: account_management, admin_apis, content_discovery, organizations, upload_thread, read_thread, comments, and user.

I have a folder for all my views and a folder for all my services, and for each view there is one (or occasionally two) service files.

So e.g. in the views folder there is a file called account_management_views, and then in the services folder there is a file called account_management_service.

For utilities that get re-used across the entire app I have two additional things in the services folder, one is called util.py and the other is io_util.py.

Util is for things like sanitizing XSS that don't require any database access, and io_util is for things like get_user_from_username, get_user_from_email_address, etc.

Then you can import any models into io_util.py, but never into util.py. And you can import anything from util.py into io_util.py, but never the other way around. Then you can import anything from either util or io_util into any service method and shouldn't have any issues. (Although I always just import util or io_util, and then call the methods like util.sanitize_xss.)

Once I structured the services and utilities that way I never had issues again with circular imports or figuring out where to put stuff. Importing with Python is kind of difficult and janky in general, but so far this pattern seems to be working pretty well for both our startup and also for the consulting projects I've done.

Basically for logic that's mostly specific to a single view, put it in the services file for that view. Public functions in that folder can still be re- used in other services, but if they're fairly generic and they're re-used in more than one or two places then consider moving them into util or io_util so as to avoid circular import issues.

</comment></comment></comment></comment></comment><comment><USER15> What I find most curious about Django/Python is that about 30% of the new installs are for legacy Python/Django (2.7/1.11):

      $ pypinfo --start-date 2019-01-01 --end-date 2019-03-31 --
      percent --markdown django pyversion
      Served from cache: False
      Data processed: 160.22 GiB
      Data billed: 160.22 GiB
      Estimated cost: $0.79

      | python_version | percent | download_count |
      | </comment><comment></comment><comment>-- | </comment><comment>: | </comment><comment></comment><comment>-: |
      | 3.6            |  39.61% |      3,277,927 |
      | 2.7            |  29.59% |      2,448,652 |
      | 3.7            |  17.53% |      1,450,949 |
      | 3.5            |  10.37% |        858,325 |
      | 3.4            |   2.76% |        228,150 |
      | 3.8            |   0.07% |          5,428 |
      | 2.6            |   0.04% |          3,686 |
      | 3.3            |   0.03% |          2,103 |
      | 3.2            |   0.00% |            220 |
      | None           |   0.00% |             56 |
      | Total          |         |      8,275,496 |

I would expect everybody moving over 3.x by now - we are so close to 2.7 EoL in December...

<comment><USER16> Trying to move, but it's tough. Old codebase, lots of deps, and no real benefit to upgrading to 3.6, nothing our end users will care about or notice (or pay for).

Upgrading to Python 3 is a chore. We have to do it, but it's not fun and it's barely useful.

<comment><USER17> don't your users in 2020 care you are using an unsupported language? security wise

<comment><USER18> Of course not. That's the point.

<comment><USER17> the users care that your site is secure, especially if you're using their confidential info.

can you achieve security with a dead language? I don't think so.

<comment><USER16> Users care very little about security, actually.

</comment></comment></comment></comment></comment></comment><comment><USER19> I would just add that if you're new to Django read [https://simpleisbetterthancomplex.com](https://simpleisbetterthancomplex.com) \- there are ton of detailed explanations that go deep in how Django can be extended. It's definitely not the run of the mill tutorial blog that is only surface level.

<comment><USER20> Yeah I can't recommend simpleisbetterthancomplex enough for anyone into Django. Great tutorials and articles about many issues you typically run into or just best practices for certain things. The guy who runs it even started a nice community forum that's been very helpful too.

</comment></comment><comment><USER21> Nice. Anyone building fun stuff using Django these days?

<comment><USER14> Django is still by far the best web framework as far as I can tell. Every couple years I check what's out there for GoLang, Rust, Nodejs, and Swift, and it seems like it will be a decade or more before anything else comes even close.

Even though a lot of people don't like Django's ORM, at least it does almost everything you would want to do with Postgres. (And if you want more you can always use SqlAlchemy.) Most of the other ecosystems don't even have anything near the baseline functionality built into Django.

<comment><USER22> IMO PHP's Laravel is competitive with Django.

I think Django, Laravel, and Rails are really the only 3 frameworks with the levels of ecosystem and built in functionality that these 3 have (unless there's something in Java-land that I'm not aware of). ASP.NET Core is close, but the ecosystem around it is weaker.

<comment><USER23> I reviewed these sort of web frameworks some time ago and went with ASP.NET Core because of the language attached being more to my liking and industrial- strength than Python, PHP or Ruby. I go in assuming every project will be 500KLOC someday, because it can happen. I've seen codebases this large in Python, and it was no bueno. Static typing, forward migration / backwards compatibility take top priority for me.

Laravel was my 2nd choice, the recent adoption of a JIT into the core really adds some desirability to the space. Not to mention HHVM and how much Wordpress is out there.

<comment><USER24> But then you're in Microsoft echo system. No bueno.

<comment><USER25> Would you mind expanding on this?

<comment><USER23> People with that mentality aren't rational. If MS offers the best product, which they do for an awful lot of tech, especially once you start valuing integration & support, you should use it. It's actually pretty tough to beat, even if there's guys like that who don't believe in using "best of breed". Using "what you know" is usually best from a developer standpoint, but Microsoft has many best-of-breed products, much to his dismay.

</comment></comment></comment></comment></comment></comment></comment><comment><USER26> Django is awesome. It is a model Open Source project that everyone should emulate. I have used it in the past and it can make you hyper-productive especially if you're prototyping stuff.

</comment><comment><USER27> We're a Django shop and it's a pleasure to work with (most of the time). Happy to see a 2.2 LTS release, that should light the fire under some teams to upgrade

</comment><comment><USER28> I've been away from Django for a few years, and hope to come back one day.

One thing I'm curious about, coming from well-typed JS codebases using Flow, is the quality of typings in major projects like Django, Pandas, etc. Are their APIs well-typed? Can I get quality types for my models?

<comment><USER29> The PyCharm IDE has extra support for Django to enable some additional type inference, and it works like an absolute (pun intended) charm.

Beyond that, the Django core isn't type-annotated yet likely because of Python version support, but I'm sure you can get typeshed pyis or something.

<comment><USER30> There's a discussion on the mailing list about this, last updated a few months ago: [https://groups.google.com/forum/#!topic/django- developers/tr...](https://groups.google.com/forum/#!topic/django- developers/trTEbURFhEY/discussion)

</comment></comment></comment><comment><USER31> I really hope Django can provide some front-end integration like Rails Webpacker or Phoenix does. Setting up a smooth SPA and proxy is such a grunt work which always something holds me back when I trying to set up a small project with Django.

</comment><comment><USER32> I'm a fan of Django, but I'm in doubt if I must still use it for my new project. I'll develop now an hybrid app that will start life as an mobile web site. I'll use one javascript framework and I'm really in doubt about using Django.

If I use a javascript server framework, I believe that it will prevent me to duplicate forms validation code (in server in frontend) and also easier for SSR (Server Side Rendering). But Django is a robust framework, in my beloved Python language, why should I still use it?

<comment><USER33> IMHO, code sharing between the frontend and backend is very hard to do properly and you have more changes of making stuff too generic and unmaintanable faster. KISS

As any new project, go with you're most comfortable with, so you can prototype and changes things faster. After you reach a good size and understanding of the problem you may refactor stuff for a different language/framework with better reasons for it.

That being said, if you want to use Python but not a "batteries included" framework like Django, so you have better control of the stack, check out Pyramid, it is really good and scales (I'm talking on code maintainability, but also performance-wise) very well from pet-project phase to complex applications.

</comment></comment><comment><USER34> Django is a magnificent piece of software.

I'm an experienced ReactJS developer and I discovered Django after ReactJS and I am finding myself developing new projects not with React but just with plain Django/JavaScript/HTML. That's because of the nature of my projects of course which are simple crud applications, but the point is that for simple applications, Django makes things incredibly easy and fast and importantly, easy to understand.

More sophisticated user interfaces I would definitely build in React of course.

<comment><USER35> That's the real power of Django for me: Good ol' HTML based apps (with a little salt of jquery when needed) using the tools that Django (and friendly projects) generously offer to create Angels in a fraction of the time you'd need with anything else!

</comment></comment><comment><USER36> I'm coming from a systems and desktop background and looking into a web side project. My only experience with backend frameworks is a few months with Django for a small project at work.

Is Django still a thriving development community? And is it able to handle a large amount of concurrent users? Basically is it a good choice for a backend for a new project? The web tech world moves really fast, and I like that Django has been around for years but wondering if it's still a good option.

<comment><USER37> I have an assortment of Django and flask-based websites and Django still works fine for new projects from my perspective, with the normal caveat that it really depends on what you want to do with it. If i had to redo some of my projects I'd probably use the Django rest framework more heavily as I ended up duplicating a lot of that functionality writing Ajax endpoints way back in the day, but I've not encountered issues where Django is the bottleneck in the system. Usually the bottleneck is a poorly optimised database index or something, which Django handles fine to a point.

however, since I've ended up utilizing SQLalchemy and Pandas in a lot of my projects I have since tended to use Flask+SQLalchemy a lot more so my old fuzzy brain doesn't have to try and remember the variations between two different ORM syntaxes.

<comment><USER36> Thanks, I appreciate the info.

</comment></comment></comment><comment><USER38> Awesome ! we at Careers360 (India top 100 Alexa) use Django for everything, the best thing about an Opinionated stack like django is freshers are production ready at day 1, learning time reduces and maintainability is solid , although i prefer golang where frameworks are particularly not favored ,Django ORM surely lacks a lot of features but does a decent job, async story sucks unless you are willing to give in to Channels i hope Django embraces async officially in the core

<comment><USER39> I believe I had interviewed once at careers360 a couple of years back, don't think it was mentioned to me then that you guys work majorly on Django otherwise I think I would have had a better chance at clearing it lol... But yeah Django is awesome, It has paid my bills for years. Hopefully async will come in relatively soon with Andrew Godwin's focus on it.

</comment></comment><comment><USER40> Why Django is not good, here are some of my reasons as far as I can remember:

1\. mediocre routing (no nesting, all routes have to be declared in one place)

2\. mediocre middleware (middleware is global)

3\. mediocre ORM (easy only for very easy stuff, more pain in the ass than writing raw SQL itself when it comes to complex aggregations and joins) not to mention some of the famous ORM bugs that have been open for like a decade

4\. custom user model? good luck fighting with Django errors to make that happen

5\. custom authentication? external authentication? want a custom token format? want your authentication token in a custom http header? good luck

6\. Django is built for 2000s websites not REST/gRPC era

7\. want to use graph databases? noSQL? good luck

8\. external migration for SQL? oh god, prepare yourself for the mental hell

9\. Django as far as I can tell still ONLY supports decoding "x-www-form- urlencoded" bodies, yeah no JSON, it's that pathetic

<comment><USER41> A lot of these are pretty inaccurate, at least for modern Django.

1\. I'm pretty sure that's not true if I'm correctly interpreting what you mean...You can do things like `path('myapp/', include(myapp.urls))`

4\. Custom User models are now very straightforward (and recommended for non- trivial projects since it's easier to start with a Custom model that defaults to the default model for all options then modify it later)[1]

5\. All these things are fairly straightforward and libraries like Django- Auth/Django-Rest-Auth cover a huge set of the normal use cases (OAuth, JWT, tokens, etc.)

6\. Django Rest Framework is a best-in-class solution for Rest APIs

9\. See 6.

[1] [https://wsvincent.com/django-custom-user-model- tutorial/](https://wsvincent.com/django-custom-user-model-tutorial/)

<comment><USER40> >A lot of these are pretty inaccurate, at least for modern Django.

I wish you state exactly which of them are inaccurate and why, I sincerely want to know and understand

>1\. I'm pretty sure that's not true...You can do things like `path('myapp/', include(myapp.urls))`

so you suggest I create an "app" for every sub-route? every major and non major web framework except Django has a router where you can mount it to any parent and mount any child to it

>4\. Custom User models are now very straightforward (and recommended for non- trivial projects since it's easier to start with a Custom model that defaults to the default model for all options then modify it later)[1]

maybe you're right IFF you start using a custom user model from the very beginning, if you happen to forget that, Django will make your life like a hell and will refuse to even pass startup checkups

>5\. All these things are fairly straightforward and libraries like Django- Auth cover a huge set of the normal use cases.

I mean authentication tokens not Django's authentication (e.g. signin, signup)

>6\. Django Rest Framework is a best-in-class solution for Rest APIs

so you suggest people throw their codebase and start rewriting for DRF?

>9\. See 6.

so you suggest I rewrite my applications to DRF just to have JSON http request decoding?

<comment><USER42> > maybe you're right IFF you start using a custom user model from the very > beginning, if you happen to forget that, Django will make your life like a > hell and will refuse to even pass startup checkups

The startup checks are protecting you from more subtle problems because if you switch to a custom model, you need to do a migration for your stored data. That's a one-time process which can be squashed as soon as you migrate the last server running the old code.

> so you suggest I rewrite my applications to DRF just to have JSON http > request decoding?

DRF is a helpful tool which solves a number of common cases but it's not doing anything you can't do in standard Django: that could be as simple as json.loads(request.body) in the appropriate view or, more commonly, a decorator or class-based view which provides standardized error handling, etc.

The reason why the stock forms API doesn't do this by default is that it's designed to support the <form> interface in the HTML standard, which defines a simple key-value interface which is much simpler than what can be expressed in JSON:

[https://html.spec.whatwg.org/multipage/form-control- infrastr...](https://html.spec.whatwg.org/multipage/form-control- infrastructure.html#attr-fs-enctype)

Once you're moving out of the realm of standard browser interfaces it's much harder to write a generic validation interface suitable for having in a standard library, especially since there are multiple competing ideas of what this should look like and most of them are easily installable from PyPI without the Django project having to support them.

</comment></comment></comment></comment><comment><USER40> Whenever I see people still praising Django in 2019, I immediately know that their technical understanding of the current backend and ops technologies is years behind. Django is still okay for small and amateur projects but nothing more than that. It is a curse for a fast moving business.

EDIT: even though I stopped writing Django for 3 years now but here are some of my reasons as far as I can remember:

1\. mediocre routing (no nesting, all routes have to be declared in one place)

2\. mediocre middleware (middleware is global)

3\. mediocre ORM (easy only for very easy stuff, more pain in the ass than writing raw SQL itself when it comes to complex aggregations and joins) not to mention some of the famous ORM bugs that have been open for like a decade

4\. custom user model? good luck fighting with Django errors to make that happen

5\. custom authentication? external authentication? good luck

6\. Django is built for 2000s websites not REST/gRPC era

7\. want to use graph databases? noSQL? good luck

8\. external migration for SQL? oh god, prepare yourself for the mental hell

9\. Django as far as I can tell still ONLY supports decoding "x-www-form- urlencoded" bodies, yeah no JSON, it's that pathetic

Django is very intrusive and is pain in the ass in a fast moving environment where you want to use microservices, external authentication/authorization, APIs, gRPC, etc... that's excluding all problems of Python itself. I totally recommend Typescript/Express or Golang for doing any kind of non trivial backend with fast moving environment/requirements currently

<comment><USER43> This post is very antagonistic but I can say that point 3 rings very true, even using advanced/data heavy SQL got very annoying for me relative to SQLAlchemy and I don't think you really want to try and pull it out.

<comment><USER44> It's been a while since I've used SqlAlechmy, but I remember absolutely hating it. Like you said, Django's ORM fails above very simple manipulation and even though SqlAlchemy might be better, it was still awful. I found it better to just write raw sql for my few use cases than to dive into page after page of sqlalchemy documentation.</comment></comment></comment>


Red Alert – Real time alerts every time a rocket is fired into Israel - <AUTHOR> https://itunes.apple.com/us/app/red-alert-israel/id873642097?mt=8

<comment><USER2> The app tracking american drone killings was rejected by apple: [http://www.wired.com/2012/08/drone-app/](http://www.wired.com/2012/08/drone- app/)</comment>


Why we use the Linux kernel's TCP stack - <AUTHOR> https://blog.cloudflare.com/why-we-use-the-linux-kernels-tcp-stack/ <comment><USER2> I implemented an highly-scalable user-space TCP stack as part of my Master's thesis [1], last year.

One doesn't use an user-space network stack because the Linux's network stack is slow (it's fast), but _because it doesn 't scale correctly on an high number of CPUs_ (> 8 cores) [2]. This is because the kernel suffers from some lock contention when accessing the table containing the socket descriptors.

An user-space stack can be significantly faster when the application layer is really simple (e.g. doing some very simple filtering or routing) and when it does not share any mutable state. As soon as your application layer starts sharing mutable states between connections (e.g. like a database), you'll start having contention issues similar to those experienced by the kernel, and you'll not gain anything from using an user-space stack. Very often, _applications that can benefit from such as stack can also be scaled easily on multiple machines, and it 's usually easier to keep using the Linux's stack and add more servers_.

\--

[1] [https://github.com/RaphaelJ/rusty](https://github.com/RaphaelJ/rusty)

[2] [https://github.com/RaphaelJ/rusty/blob/master/doc/img/perfor...](https://github.com/RaphaelJ/rusty/blob/master/doc/img/performances.png)

<comment><AUTHOR> > This is because the kernel suffers from some lock contention when accessing > the table containing the socket descriptors.

This would indicate the problem is with packet delivery to application. From my experience even packet delivery to "filter" iptables chain is "slow".

But let's assume you are right, can you elaborate? Do you think SO_REUSEPORT on TCP sockets can solve the contention of accept()?

[https://lwn.net/Articles/542629/](https://lwn.net/Articles/542629/)

There are some initiatives improve SO_REUSEPORT CPU affinity, hopefully making it even faster.

Update: I misread. Ok, so "table containing the sockets", but this is just a large hash table, nothing too fancy... aRFS for greater locality?

<comment><USER2> A single socket can be shared by multiple cores. That means that the kernel must both protect the socket descriptor from concurrent writes, and can't enforce a TCP link to be handled by a defined core (CPU affinity).

<comment><AUTHOR> > A single socket can be shared by multiple cores

Absolutely, it _can_. But everybody sane avoids that, pinning worker processes to specific CPU's and not sharing sockets between them. The rule of thumb is that spinlocks on the hot path of socket access become a bunch of no-ops if there is no lock contention.

<comment><USER3> I can't see why pinning is such an obvious choice. The kernel's scheduler may decide that CPU 1 should be woken to handle some new packets, because CPU 2 is busy. If you've pinned the socket to CPU 2, you may be losing out.

I get that there are trade-offs between the two modes: pinning can provide better cache usage, you can avoid some locks (but indirectly make the kernel do the work for you) and so on, but I don't see how you can confidently state that pinning is the 'sane' choice.

In an ideal world, the kernel has a better overview of the network state and CPU state, and therefore is best positioned to decide which CPU should handle each packet.

<comment><USER4> The kernel scheduler has no idea which application thread handles which socket. You can formulate an application level plan and then enforce your will with socket and cpu pinning.

<comment><USER5> Correct, but the difficulty is if your application must share the machine with any other application - even short lived ones. That, I think, is what joosters was alluding to. If the assumption that your application is the only consumer of system resources is broken, then you may see pathological scheduling behavior.

<comment><USER6> You can set isolcpus to earmark some cores for your application, and let the kernel manage the rest.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> Physical limitations of bandwidth on packets per second: [https://www.cisco.com/c/en/us/about/security- center/network-...](https://www.cisco.com/c/en/us/about/security- center/network-performance-metrics.html)

Why the Linux kernel has a hard time processing more than 1-2M packets per core per second, and patches/improvements for the kernel: [https://lwn.net/Articles/629155/](https://lwn.net/Articles/629155/)

CloudFlare's kernel bypass blog post: [https://blog.cloudflare.com/kernel- bypass/](https://blog.cloudflare.com/kernel-bypass/)

A paper from NTop on doing 10G line rate packet processing, the limitations, and then-current options: [http://luca.ntop.org/10g.pdf](http://luca.ntop.org/10g.pdf)

NetOptimizer kernel dev blog, where they've maxed out the throughput of a 10G link using the kernel's stack, and details on latency, theoretical maximums and how to test: [https://netoptimizer.blogspot.com/search/label/10G](https://netoptimizer.blogspot.com/search/label/10G)

\--

The real answer to "Why do we use the Linux kernel's TCP stack?" is that operating systems are designed to help users and programs. They are not designed to be a custom tailored highest-performance cure-all for the highest possible theoretical computing throughput. Using one tcp stack helps users and programs more than each user or program using its own unique stack.

<comment><USER8> _They are not designed to be a custom tailored highest-performance cure-all for the highest possible theoretical computing throughput._

I beg to differ vehemently, as the FireEngine TCP/IP stack in illumos was designed to be the highest possible performance cure-all for highest possible throughput. I've posted the links above in another entry. That GNU/Linux's TCP/IP stack is hitting the limits does not mean that nobody else is capable of designing a high performance TCP/IP stack, and indeed, I have been able to max out 1 Gbit connection running Solaris 10 on a measly DELL R910. If the network administrator hadn't come running to "turn it off! Turn the damn thing off!", I would have maxed out a trunked 40 Gbit link too. I sure taught that guy a lesson that day, never again have I heard a peep about "not ever seeing anyone being able to max out a 1 Gbit connection with a single machine".

Only Solaris / illumos' _FireEngine_ makes it possible.

<comment><USER9> Help me understand this. How is maxing out a 1Gbps connection with a 4U, 4 socket (so presumably 24-32 core) Xeon server supposed to be impressive?

<comment><USER8> Considering I did it seven years ago, I think it's impressive in that context.

</comment></comment></comment></comment><comment><USER10> >With this scale of attack the Linux kernel is not enough for us. We must work around it...we added a partial kernel bypass feature to Netmap: that's described in this blog post. With this technique we can offload our anti-DDoS iptables to a very fast userspace process.

What do they mean by "very fast userspace process"? If you're doing the same thing the kernel would be doing, the userspace process should be strictly slower due to context switches. What costs are they saving on here?

<comment><AUTHOR> The "very fast userspace process" has direct access to hardware NIC RX queue and is doing busy polling. It uses 100% CPU all the time. The process is faster then kernel because:

\- it does less only since it implements only some subset of iptables

\- is single threaded, no locks

\- doesn't implement TCP

\- it's small, no iTLB misses

\- the working size set is small, we only deal with couple of packets at a time

\- no memory allocations on the hot path (no skb)

\- it is doing busy polling, saving the Xus needed for an interrupt context switch

<comment><USER11> It seems like the main thing making that process fast is the fact that it's doing polling. But Linux does polling too, when there are enough packets coming in. Likewise, if you really are dropping packets very early in the networking stack, you wouldn't reach the TCP layer and would have a small working set in the kernel too.

So, why not just implement this very fast userspace process as a kernel patch? That seems much easier...

</comment></comment></comment><comment><USER12> The argument about not being able to run SSH on the server seemed a bit weak, surely just stick two NICs in there, one for management + one for user-space stuff?

<comment><USER5> I think that's less an argument, and more of an example. You are correct, that is certainly something one can do. But I think the related argument is that now your system configurations are more complicated; you have tied your hardware and software together, for example. For some that may not be possible, and even if it is, some may not want to give up the abstraction that the kernel provides.

</comment></comment><comment><USER8> _With this scale of attack the Linux kernel is not enough for us. We must work around it._

...Or you could just use an operating system substrate based on illumos which utilizes the _FireEngine_ , like for instance SmartOS, instead of having to invent workarounds or use one's own TCP/IP stack implementations:

[http://www.baylisa.org/library/slides/2005/august2005.pdf](http://www.baylisa.org/library/slides/2005/august2005.pdf)

[https://sunaytripathi.wordpress.com/2010/03/25/solaris-10-ne...](https://sunaytripathi.wordpress.com/2010/03/25/solaris-10-networking- the-magic-revealed/)

this technology has been available for over ten years now; designed from the ground up to scale across multiple hardware threads for high performance, by the experts in the problem domain.

<comment><USER13> Quit spamming about stupid SmartOS, you try to shoehorn it in to every topic. You're like a Mormon Missionary for SmartOS and it is super annoying.

<comment><USER14> I found his comment relevant and interesting enough, and judging by his posting history SmartOS is far from the only thing he comments about. It certainly added more to the discussion than yours did.

<comment><USER15> An incredibly large percentage of Annatar's posting history is a misunderstanding of something about GNU/Linux, followed by a pitch about SmartOS. It's not the only thing they talk a out, but it's the only posts that stick in my mind. While I find the history of free operating systems fascinating, it's quite dismissive to pretend that all possible problems that GNU/Linux faces today were solved "10+ years ago by experts in the problem domain".

<comment><USER8> Misunderstanding? I develop on Linux day in and day out. Care to qualify that assertion?

 _it 's quite dismissive to pretend that all possible problems that GNU/Linux faces today were solved "10+ years ago by experts in the problem domain"._

As one of the principal kernel engineers of the FireEngine, yeah I think Sunay is the expert in the problem domain, having invented parallel enqueuing or what he terms "fanout", and Radia Perlman, who I believe collaborated with him on it invented the spanning tree protocol. If that doesn't make them the subject matter experts in the TCP/IP stack domain, then I have nothing more to add. And yes, some or the problems GNU/Linux is hitting today have been solved on Solaris more than ten, others more than twenty years ago. Solaris had large enterprises as paying customers throughout the nineties of the past century, and those customers both demanded and paid huge sums of money to have these types of problems solved, so in some cases illumos has up to 25 years of a headstart, and by the time GNU/Linux catches up, illumos will already be ahead, as the development is not standing still and it has professional kernel engineers working on the code base.

<comment><USER15> > Care to qualify that assertion?

The most recent example I can think of is you posting about containers on GNU/Linux[1], claiming that they were implemented primarily using cgroups (and that the main purpose was resource restrictions). That is not true, and hasn't been true for a long time (if ever). Yes, the very first upstream "container" primitive was cgroups -- but that was very quickly replaced with namespaces and cgroups took on the resource restriction role. What most people call "containers" was always about virtualization (ie isolation), and the isolation primitive in the Linux kernel is namespaces.

There are almost certainly more examples, but I don't feel like going through any more of your comment history at the moment.

> And yes, some or the problems GNU/Linux is hitting today have been solved on > Solaris more than ten, others more than twenty years ago.

Believe it or not, but constraints have changed in the past 20 years. I'm not saying that illumos doesn't have awesome technology (it does), but it is not a panacea. I get it, you're an advocate for alternative free operating systems. Good for you. Solaris does have a 25 year headstart -- on solving problems 25 years old. Modern computing has many more problems that weren't even concieved 25 years ago (cloud and distributed computing being the main ones, as well as embedded devices which is something that Solaris can't put a candle to GNU/Linux on). So it's very dismissive to claim that Solaris has solved all problems that may face GNU/Linux. Both operating systems have problems they need to fix.

> and it has professional kernel engineers working on the code base

So does Linux, I'm missing your point here.

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

<comment><USER8> > What most people call "containers" was always about virtualization (ie > isolation), and the isolation primitive in the Linux kernel is namespaces.

There is no isolation with cgroups in Linux, that is the crux of the matter:

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

since containers in Solaris existed before cgroups and before the entire Linux hype, and you specifically adress my "misunderstanding" (of hype), you compel me to correct on terminology:

containers are resource constraints, while technology like LXC and OpenVZ provide the lightweight virtualization and _isolation_ , a very important distinction (full virtualization is achieved via XEN and KVM on GNU/Linux). Conceptually, as a resource constraint, containers are in that sense the same in Solaris as they are in Linux, with vastly different mechanism implementations, but neither provide _isolation_.

Again, and I corrected you on this before (this happens to be my problem domain), what you think of as containers are lightweight virtual machines, as zones in Solaris and LXC / OpenVZ in Linux, and equating cgroups and namespaces with a lightweight virtual machine technology is conflating two different things.

If you should have the inclination to point out my other "misunderstandings" of Linux, an operating system I very heavily use, develop on, and engineer for, I would be interested to learn of them.

> So does Linux, I'm missing your point here.

If they exist, I have not heard of them, read about them, or met them yet; at any rate, since Linux has so many architectural and performance problems, again I am compelled to conclude that those "Linux kernel engineers" are not of the same caliber as the ones working on BSD and illumos kernels. That an operating system, after almost twenty years of massive investment and literally armies of programmers still cannot get basic things like startup (init.d/systemd/other variants of startup), shutdown (trying to flush a filesystem buffer to an unmounted filesystem), or even TCP/IP performance right tells me it is missing kernel engineers. Enthusiasts and volunteers tinkering with the kernel do not professional kernel engineers make, as is evident by this entire topic of whether to bypass the kernel's TCP/IP stack with one's own implementation, because the stack cannot deliver sufficient performance. That is what one can call damning evidence, no matter how one slices or dices it.

<comment><USER15> > There is no isolation with cgroups in Linux > containers are resource > constraints

I'm going to say this one more time:

 _Linux containers use namespaces as the primary isolation mechanism -- NOT cgroups_. You can create containers without cgroups. This happens to be my problem space too, and you're not helping by spreading ignorance.

> equating cgroups and namespaces with a lightweight virtual machine > technology is conflating two different things.

Finally you mention namespaces. Who mentioned "lightweight vritual machines"? Namespaces are just tags for a process that are used to scope operations to provide isolation. Cgroups are different tags used to provide resource constraints. Just because people use containers in that way at the moment doesn't make the underlying technology just about that.

> an operating system I very heavily use, develop on, and engineer for, I > would be interested to learn of them.

Arrogance is not an endearing quality.

> If they exist, I have not heard of them

We can play that game all day. I don't care who you have and haven't heard of, Linux has talented kernel engineers as evidenced by the fact that Linux is widely used for production deployments. You might not agree with what has been built, but you can't deny that it does exist and is being used to power production systems. Please calm down on the saltiness, sodium is bad for your health.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER16> DragonflyBSD

I really wonder how DragonflyBSD compares given that they have a lockless network stack implemented in the kernel.

[https://www.dragonflybsd.org/~aggelos/netmp- paper.pdf](https://www.dragonflybsd.org/~aggelos/netmp-paper.pdf)

</comment><comment><USER17> Previous: [https://news.ycombinator.com/item?id=12048709](https://news.ycombinator.com/item?id=12048709)

</comment><comment><USER18> dpdk and netmap is really only for applications with cooperating I/O processes. This is because the queue of received packets is shared between all process and any of them can delete any packet.

It may not be good for CloudFlare hosting multiple web servers on the same host, but I it could be good for a database or cache server usually run in a LAN with 10Gbit/s network cards.

<comment><USER19> Don't modern high performance network cards have multiple tx/rx queues which are virtualizable via IOMMU?

That's a genuine question BTW, I've only a bit of experience with userspace networking with fully cooperating processes.

<comment><USER9> SR-IOV is good for actual virtualization, but it's pretty clumsy for trying to create isolation within a single VM. For example:

\- Every VF you create using SR-IOV will need to have a distinct MAC (and thus in practice different IP). But what you'd usually want for this use case is use the same IP for all apps, and do the split by destination port.

\- Another consequence of the previos point is that all apps would need to include their own support for ARP, DHCP, etc. Doing it centralized doesn't really work.

\- No promiscuous mode (at least on Intel NICs)m you only get traffic directed to one specific MAC address

Now, if you didn't try to use the virtualization support but just use the separate RX/TX queues, with something like the flow director for deciding what traffic gets sent to which queue, you'd get rid of the above problems. But then you end up with the issue that DPDK makes it very hard to have separate applications access the same NIC, even on different queues.

<comment><USER7> Use VPP for namespace-specific userland applications? [https://wiki.fd.io/view/VPP/What_is_VPP%3F](https://wiki.fd.io/view/VPP/What_is_VPP%3F)</comment></comment></comment></comment>


Ask HN:  How do you block Persistent Identification Elements? - <AUTHOR>

I'm rather embarrassed to admit this, but I just learned of the existence of PIEs a couple of hours ago. I checked my rig, and, yup, there's history information being kept on my computer.  I did a rm -f on the #SharedObjects directory, and a chmod 555, but I was wondering:  is there a better way to deal with it?  (Also, basically just for my ego, am I the only one who didn't know about these things?) <comment><USER2> Well, you can go into the flash settings (right click on a flash object) and turn them off...

For those who don't know what he's talking about this site <http://vlaurie.com/computers2/Articles/pie.htm> has a fairly straight forward writeup.

And although they are a bit obscure, they are basically cookies. Turning off flash, or using noscript will take care of them.

<comment><AUTHOR> Does that really turn them off? I have mine turned off, and I still had these files in my directory.

<comment><USER2> You have flash turned off and it's still dropping files in your #SharedObjects directory?

<comment><AUTHOR> no: right-click on the flash movie, select "settings," then set "local storage" (third icon from the left on my setup) to "zero."

<comment><AUTHOR> update: with the control in flash apparently set to off, flash still creates directories and saves a file. This is some bad mojo.</comment></comment></comment></comment></comment>


Serverless now integrates with IBM OpenWhisk - <AUTHOR> https://serverless.com/blog/openwhisk-integration-with-serverless/ <comment><USER2> What I don't get about these things is how can they be performant. If for every action you are loading an entire runtime, executing something, and then throwing the runtime away you are paying the cost of starting the runtime every time. It gets worse the more actions you execute per second.

So then you build a "serverless" thing and then it needs scale at which point you have to rewrite the whole thing as a classic "serverful" application that loads the runtime once, caches stuff, etc. So why not just build it right and with proper discipline the first time?

<comment><USER3> "load the whole runtime on each request" is nothing new. That's also how PHP and other cgi technologies worked, where for each request a new process was spawned. There are certainly ways to speed it up (maybe only for a pre-spawned process?) - but I guess for a lot of lambda use-cases performance is simply not an isssue, similar to like it was not an issue in old cgi-based web applications.

<comment><USER4> Well one misconception is that the code needs to be downloaded into the execution context every time. Which is different than a PHP file being loaded off disk (or opcache as the case is more common in PHP). It's more like if you zipped up your PHP program and every time someone hit a page the zip file was downloaded and extracted onto the server.

However, Lambda takes that one step further. The entire app stays running in memory. No loading or recompiling code. The function is sent instructions via interprocess communication.

So you can take advantage of things that are difficult (though not impossible) to take advantage of in PHP such as connection pooling and shared memory.

<comment><USER3> If you are reusing the app for multiple function executions, how do you enforce things like isolation between functions and execution limits (processor time, etc.)? I think if 2 functions are running in parallel one can't kill the whole process if the first one exceeds limits, because the other one is still running. And in a runtime like node.js it's not possible to isolate different code pieces reliably from each other. Or is a special runtime and things like V8 isolates utilized?

<comment><USER4> You cannot do that. Each deployed function corresponds to exactly one entry point in code. You can however pipe multiple HTTP endpoints through the same entry function like a router.

So let's say you do that.

If two clients request the same function at the same time it will run the function in two different containers. One for each client. They are isolated (think multiple instances of Node running in multiple Docker containers). They might as well be on different machines entirely.

The platform will not reuse the same container unless the previous request to that container has finished.

</comment></comment></comment></comment></comment><comment><USER5> These headlines sound like a chatbot having a stroke. I don't know what any of these words mean apart or together.

</comment><comment><USER6> Awesome! Glad they stuck to their word and added platform agnosticism. Excited to give it a try.

</comment><comment><USER7> One question: why?

<comment><USER4> Serverless (in this context) is a framework for running functions on the cloud. The more platforms teh framework supports the more choices the developer has. Which is a win-win.

If you ask why Serverless in general... scaling to millions of users for barely more expensive than running servers with little to no devops cost. At less users it is significantly cheaper. A low-traffic Serverless app could cost pennies a month and you have the full power of your favorite language at your disposal. (assuming your favorite language is Javascript, Java, or Python)</comment></comment>


Yelp to create location-aware iPhone app - <AUTHOR> http://news.cnet.com/8301-13577_3-9959913-36.html <comment><USER2> "The application is still in development and does not have a timeline for release yet, so few concrete details are available."

Maybe we'll hear more during/after WWDC next week?</comment>


MySQL 5.5.4 is Very Exicting - <AUTHOR> http://blog.zawodny.com/2010/04/14/mysql-5-5-4-is-very-exicting/ <comment><USER2> _There are numerous improvements to MySQL replication durability that make it less likely to encounter problems when a slave crashes and comes back online._

This is a big deal for folks with a lot of replication slaves. Currently slave crashes often result in inconsistencies due to the way that the relay-log.info and master.info files are flushed.

</comment><comment><USER3> I was interested to see how many of the bugs from the 5.1 release (which I haven't touched due to roundhouse slams from the bulk of the community) had been addressed, so I've had a look at the bugs in Monty's 5.1 GA blog entry - [http://monty-says.blogspot.com/2008/11/oops-we-did-it- again-...](http://monty-says.blogspot.com/2008/11/oops-we-did-it-again- mysql-51-released.html).

Without reviewing them in too much depth, several have been moved to closed in the bug tracker. There are still a few hairy ones sitting with later targets (6.0-beta) or sitting in triage waiting for attention, but it does look promising that several have been addressed.

</comment><comment><USER4> Maybe he means _exciting_?

</comment><comment><USER5> s/Exicting/Exciting?

</comment><comment><USER6> a few numbers would have been better than 5.5.4 is very exciting</comment>


Ask HN: I need to ask a Google employee a question? - <AUTHOR>

Can I e-mail someone a question if you work there. Thanks. <comment><USER2> I don't work for Google, but if you're in Los Angeles, the Santa Monica Googlers meet for happy hour every Friday at Warszawa ([http://maps.google.com/maps/place?cid=10466761866034864418&#...</a>).

</comment><comment><USER3> I once emailed Peter Norvig about about one of his Amazon book reviews. Surprisingly, he replied back within a day.</comment>


What Laughs at What? Mary Douglas on Humour - <AUTHOR> https://epochemagazine.org/what-laughs-at-what-mary-douglas-on-humour-da1529c05da3 <comment><USER2> I have never understood humor in the sense that most people seem to. I have my own little world of things I find funny that almost nobody else does, and it has been at times a bit alienating. I laugh inappropriately, when it shouldn't be possible to "subvert" a situation. I make really stupid meta-meta-meta- jokes that are only funny to me because I've thought about the meta beyond what anybody finds value in.

But this analysis of humor makes sense. Subverting control. I suppose that's what it has always been for me, only I'm subverting a control nobody else cares about, or I'm subverting control that is in place in some context for very good reason, and therefore it's not funny when I try to break it up. Perhaps I don't deliver it with the right control.

Anyways, I found this analysis useful. I've tried to analyze humor before and got nowhere, and this is the first time anybody else's analysis has made any real sense to me. Thanks for posting.

<comment><USER3> That is intriguing. We all laughed at a joke that noone else thought was funny, but your situation seems more extreme. Care to write more about your experience?

<comment><USER2> If you have a specific question I could answer it, but I think it ultimately boils down to the way I look at the world in general. I feel far removed from it, like I am borrowing someone else's human body and my "soul" (or essence, or whatever) doesn't have the experience of millions of years of evolution to back up my human DNA. It feels like I was dropped here by mistake, if that makes sense. I think everything can be extrapolated from that.

Not sure what it's caused by, but the whole thing is really apparent in social situations (which often include a lot of joking around). I never have been able to "sync up". My humor is scaled way way up, kind of like if you could hear God's laughter as he observes the universe, in the Russian style. It's not relevant to anything anyone cares about.

I hope that makes sense.</comment></comment></comment>


Protect your hybrid app's code - <AUTHOR> https://www.airpair.com/ionic-framework/posts/production-ready-apps-with-ionic-framework

<comment><USER2> Easy to follow and excellent tutorial. I used it to create my .apk file for distribution without worrying of getting my code stolen.</comment>


Kant and the Contraption: A Thought Experiment - <AUTHOR> https://epochemagazine.org/kant-and-the-contraption-7c53dde3a5a1 <comment><USER2> This is essentially the plot of Flatland.

I recently read Chomsky making a similar point in a way here: [https://chomsky.info/201401__/](https://chomsky.info/201401__/).</comment>


The Greatest Double Agent in History - <AUTHOR> http://priceonomics.com/the-greatest-double-agent-in-history/

<comment><USER2> While this is an extremely interesting story, I'm curious how much these blog posts help in generating sales for priceonomics. It's one thing to write blog posts relating to your core product, but this seems way off base. I'm not complaining, though... this story in particular is fascinating, I agree it should be made into a movie :)</comment>


Aol Mail Hacked With Spoofed Accounts Sending Spam - <AUTHOR> http://techcrunch.com/2014/04/21/aol-mail-hacked-with-spoofed-accounts-sending-spam/

<comment><USER2> I haven't tried to relate them to this, but I saw some spoofed AOL messages on the 15th or so.

(out of the blue, so it would be a good chance they were related)</comment>


Singapore says it will make its contact tracing tech free to developers - <AUTHOR> https://www.cnbc.com/2020/03/25/coronavirus-singapore-to-make-contact-tracing-tech-open-source.html <comment><USER2> That seems great. I've read a comparison of different approaches to contact tracing _. The one chosen by Singapore seems to be the best compromise between privacy and effectiveness: the data stays on your phone, but you can trace and warn people you have contacted.

_ in Italian - [https://www.wired.it/internet/web/2020/03/24/coronavirus- app...](https://www.wired.it/internet/web/2020/03/24/coronavirus-app-contact- tracing/)</comment>


Heroku's Just Linux, Sometimes - <AUTHOR> http://finneran.us/2014/08/14/heroku-just-linux/

<comment><USER2> I realise this is just a toy example, but it should be noted that CSV is not just a simple case of splitting on commas.

(hint: quoted values may also contain non-delimiting commas.)

<comment><AUTHOR> Good call. I was aware of that but should call it out in the post. Thanks!</comment></comment>


Programming and management – why computer scientists leave 6-figure jobs - <AUTHOR> https://medium.com/@foobrandon11/the-boring-industry-87ac92c6ec90 <comment><USER2> Don't computer scientists generally work in academia?

I had trouble following the article's argument, so I can't tell whether the author is merely misusing the phrase "computer scientist" and referring instead to software engineering, or whether they are discussing a different subfield than the one I am familiar with.

</comment><comment><USER3> Drivel. Not surprising because this guy is a kid -- graduated in 2016. Talking about life experience when he has none:

[https://www.linkedin.com/in/brandon- foo-b72a5b157/](https://www.linkedin.com/in/brandon-foo-b72a5b157/)</comment>


Review my Startup: Radius - location based message broadcasting - <AUTHOR>

Radius is my current project. My goal is to create a multi-dimensional, location-based communications platform without any walls. My inspiration for this is Citizen's Band radio.
Currently, the service itself is simple. You visit the stream page, and you may broadcast messages to other users within a 5 mile radius of you. Messages are transmitted to other users in real time. Messages are also indexed with their geographical location, basically creating a geo-tagged message board where the message threads are real world locations (this enables non real time communication).
I'm going for a non room-based approach because I feel like that hampers the utility of this, and ultimately my vision is closer to CB radio than it is to IRC. I'm working on several different clients at the moment. The only one I'm showing here is the web front end. I'm finishing up an iPhone application for communicating over Radius.
Gotcha's: This relies on browser geolocation reporting, at the moment. because of that, this doesn't seem to work at all on IE. Firefox connects a little slowly. It seems to work best in Chrome. You must allow geolocation reporting when the browser prompts you for it. It also relies on websockets which restricts browsers to more modern versions.
Requests: I'm looking forward to feedback on this. So, if you check this out and have any feedback for me I will make sure to fix it, or incorporate it if I can. I made a thread about this about a week ago, but it didn't get much attention because I posted it at around 1AM.
I'm severely lacking in the UI and UX department. All of my time has been focused on the back end, so far. I'm looking for suggestions on how to make the message stream visually appealing and engaging, too! :)
The fun part! Check it out, let me know what you think:
http://useradius.com/ http://useradius.com/map (fun page, simply shows all messages from anywhere, as they come in) <comment><USER2> The UI/UX is really nice. Give yourself some credit on that part.

One thing to keep in mind: CB worked because it was a communication tool for a very specific community (truckers). You may want to start out with a user niche to get initial traction.

<comment><AUTHOR> Thanks. I have thought about which audiences to target initially. I think students would be an easy early adopter crowd to pitch this to. I just need to figure out how I can spread the word on my own campus.

<comment><USER3> If you are targeting students, I think it would useful to allow an option location input as well, so they can specify exactly where they are broadcasting from in addition to the geolocation. AKA "University Center" or "123 Science Hall" so the can more accurately tell where the people are they are conversing with.

<comment><AUTHOR> Cool idea. I'll see if I can work it in! Thanks.

</comment></comment></comment></comment><comment><AUTHOR> click: <http://useradius.com/> <http://useradius.com/map>

</comment><comment><USER3> why not use fallback IP-addy based geolocation if the browser's isn't available? And a fallback for no websocket support?

<comment><AUTHOR> I plan to, in the future. Both of those features are essentially layers on top of my current set of features. I've only got a small number of additional things to add to what you see before I begin to go back and polish everything. I'm still focusing on making the back end into something that can grow.</comment></comment>


EC2 Price Reduction (C4, M4, and T2 Instances) - <AUTHOR> https://aws.amazon.com/blogs/aws/ec2-price-reduction-c4-m4-and-t2-instances/ <comment><USER2> Fantastic, and nice to see them bringing down the Asian instance prices too.

One thing I really wish they did however, is adopt Google's "Continuous Usage" billing. There's just too much mental overhead, uncertainty and risk with buying and reselling reserved instances. I end up losing hundreds of dollars a year in potential savings on AWS because I have a bad habbit of shying away from fully reserving my usage.

And then when I do, I always seem to get bitten. Case in point: a few weeks ago I reserved 1 year of heavy usage for a m4.xlarge. Looks like I could've saved 10% had I waited a few weeks.

That said, I do prefer the AWS ecosystem a lot more than Googles, but billing is something Google does _much_ better and that is something that is something that is really tempting me to switch.</comment>


Gmail on NT 3.51 with IE 1.5 via WRP - <AUTHOR> https://virtuallyfun.com/wordpress/2019/07/12/gmail-on-nt-3-51-with-ie1-5-via-wrp-4-1/ <comment><USER2> "A HTTP proxy server that allows to use historical and obsolete web browsers on the modern web. It works by rendering the web page in to a GIF image with ISMAP."

So it's a thin client terminal type of thing. I was really hoping it was done by a ridiculous number of polyfills!

<comment><USER3> IE 1.5's biggest feature was support for HTML tables. You'd have to use IE3 to even be able to execute IE's precedessor to Javascript!

<comment><USER2> Wikipedia says IE2 has JS which really surprises me. I never tried IE2 - I got online in 1994 and IIRC I was using Mosaic. I didn't know of the existence of IE2, I don't remember how I got Mosaic but most likely it came on the CD that the ISP provided to get started. I have fond memories of the internet in that time. Not that it was better but it was more amazing given not having internet before. Sending an email was magic then, and to talk to someone in another country for free seemed amazing.

</comment></comment></comment><comment><USER4> Is this a more secure platform since it's so far behind that it's unsupported by malware?

<comment><USER5> Even better if you ran the DEC Alpha build of NT 3.51. Security through obsolescence!

<comment><USER6> Works well for me.

If i get suspicious Mail or something similar i use my old BlackBerry Z10 to open it first.

Afaik there has never been a know Malware for the device. The whole system itself was pretty security oriented from the beginning. Sure it uses webkit for the browser but a browser exploit is usually just the first entry. Even if the Malware gets root i suspect it won't be able to run anything useful on the QNX Kernel.

<comment><USER7> Ah, but now you've posted that publicly anyone who wants to target you knows what to do! :)

</comment></comment></comment></comment><comment><USER8> Ahhh, NT 3.51--the most stable version of Windows I've ever used.

Odd numbered versions are the best with fixes and not a lot of new stuff being tried out--3.51 put the polish on 3.5.

<comment><USER9> But NT 4.0 was almost there in features, yay

(though I miss Windows 2000)

<comment><USER8> There were many small technical improvements along the way but 3.51 was purely just a 32bit protected preemptively scheduled system with a decent filesystem and boring UI: a sweet spot. A major later improvement was laptop support.

</comment></comment></comment><comment><USER10> A buddy of mine implemented a very popular (back in '96) multi-user web based chat service using the streaming gifs.

[http://chatbox.com/default2.htm](http://chatbox.com/default2.htm)

<comment><USER11> invalid URL...

[http://web.archive.org/web/19970116121126/http://chatbox.com...](http://web.archive.org/web/19970116121126/http://chatbox.com:80/default2.htm)

[http://web.archive.org/web/19970116121335/http://chatbox.com...](http://web.archive.org/web/19970116121335/http://chatbox.com/info.html)

</comment></comment><comment><USER12> For those wondering : [https://github.com/tenox7/wrp](https://github.com/tenox7/wrp)

<comment><USER13> I know this is a "just for fun" type of project, but...

 _This is a new version using GoLang /ChromeDP. Python/Webkit being now deprecated_

...seeing the rise of the Chrome monopoly still saddens me.

</comment></comment><comment><USER14> One thing I've been looking for as I mess around with vintage computers is a SOCKS proxy that just strips HTTPS. The wide move to HTTPS, newer TLS protocols and newer certificate issuers has made a lot of old browsers more useless than they should be.

<comment><USER13> Proxomitron is not SOCKS (it's a regular HTTP proxy with MitM capability) but it can strip HTTPS in its "half-SSL mode". Its original author is dead and it was originally designed for OpenSSL 0.9.x, but there are patches that will let it use a newer version.

I use it on my network mainly for adblocking and other page filtering, and the "HTTPS upgrade" it does is more like a side-benefit.

On the other hand, a TLS 1.2 connection coming from a client purporting to be some old version of IE on Windows tends to cause some sites to reject the request, I guess purely because of how unusual that looks.

</comment></comment><comment><USER15> Can't believe I haven't seen this before - I've had this idea kicking around for years. It was definitely more important in the days when IE was locked down as the default browser on Windows in corp environments.

This definitely could have been a valuable enterprise product in the early-to- mid 2010s.

</comment><comment><USER16> First of all, Brilliant!

OK, so a lot is going on here, if I am understanding this correctly:

1) IE 1.5 is displaying and updating an image. 2) Image is from a screenshot of a current version of Chrome, running on another machine 3) Image gives the impression that you're running Chrome locally. 4) Mouse clicks and keystrokes are transferred from IE to that remote version of Chrome, and Chrome screens are transferred back (as Images) in response.

Net effect is that you've got new Chrome functionality inside of old Windows 3.51... Nice!

(Observation: It might make sense to bypass IE 1.5 altogether, and just write a simple VNC-like program that shows images from remote and sends clicks and keystrokes, but this would be great for NT 3.51 if the user didn't want to install any other programs...)

But... all in all, brilliant!!!

</comment><comment><USER17> Windows NT 3.51 is the new "8-bit" computer. Wow.

<comment><USER18> And why not? It's one of the more decent alternatives if you want to run a stable Windows install on old PC's, so it's just as retro as, say AmigaOS 3.1

</comment></comment><comment><USER19> Why do people to these kind of crazy things?

<comment><USER11> The author, tenox, is a retrocomputing enthusiast with an inordinate amount of technical knowledge. I guess it scratches some itches and gives him some good fun.

I would feel the same.

</comment></comment><comment><USER20> I was working on something sorta like this, but I thought it'd be cool to make a proxy that takes all requests and runs them through the wayback machine, so you could browse the old web in an old browser whilst maintaining the original URLs

</comment><comment><USER21> My LifeDrive is about to meet the modern web!

</comment><comment><USER22> Self hosted Opera Mini?</comment>


Researchers map tiny twists in "magic-angle" graphene - <AUTHOR> https://news.mit.edu/2020/twists-magic-angle-graphene-map-0508 <comment><USER2> Graphine is one of those blue sky black swan research topics that has the potential to fundamentally change what we can do with what we have. So much left to discover with our big thumbs stumbling around at nanoscales occasionally bumping in to something that maybe seems interesting at first just before it opens up a whole new direction of industry.</comment>


WebGL can no longer use cross-domain textures in Firefox 5 - <AUTHOR> https://developer.mozilla.org/en/WebGL/Cross-Domain_Textures

<comment><USER2> One workaround is to "mirror" the images: send the url of each texture image to your own server and download it back again. This does funnel a potentially large amount of traffic through a small number of machines though and loads the image from a new IP.

</comment><comment><USER3> Why on earth is this stuff in browser in the first place? Just so that a tiny handful of web pages can show GL demos? It's just crazy to include all this functionality in mainstream browsers.

<comment><USER4> Gaming.

A large part of people is using the web for (casual MMO) gaming. 3D gaming is very popular and attracts users. Currently this involves hacks using clunky applets (such as java3d). With WebGL, this will be a thing of the past.

3D in the browser has been tried before with VRML, which failed. One of the reasons for failing was that is was too high-level. Most game devs want to use low-level APIs such as OpenGL. Hence I think WebGL will be huge success.

<comment><USER5> It won't be a success until Local Storage isn't limited to 5MB. Right now there's no way to "install" your game into a browser, which cripples WebGL's ability to be a serious alternative to traditional PC-based gaming / mobile gaming.

A single uncompressed 1024x1024 RGBA texture is 4MB, for example.

(I say all this not to be negative, but rather in hopes that the correct developers will hear the plea from the indie game industry: enhance Local Storage. We want to build games on your WebGL platform, but we can't until you do.)

<comment><USER4> True, 5MB limits you to pretty simple games :)

There are probably some other practical issues left to be resolved as well before the browser is a mature cross-platform 3D gaming platform. But I can certainly see things going that way.

<comment><USER6> I'm in the process of making a WebGL game - and oh yes, local storage is a minor concern. Random slow downs, browser freezing, audio syncing, and randomly incompatible hardware are only some of the problems I've been facing.

<comment><USER4> _that_ wasn't much different with OpenGL in a Java applet, though... but yes you'd hope this would be better

<comment><USER7> Why would you hope that? Making another paper-thin wrapper over OpenGL means inheriting its long-standing issues.

<comment><USER4> A paper-thin wrapper around OpenGL is what the game-devs want. They don't want to be straight-jacketed into one game or rendering engine.

Also, OpenGL isn't that low-level anymore. It is the API that the GPU speaks, and with recent developments the client can be much less 'chatty'. Do as much as possible from shaders and on the GPU itself. We've gone far beyond "do a call per vertex".

As for hope, yes I have more "faith" in Google/Mozilla to improve cross- platform javascript performance and memory issues than I have in Oracle or Adobe to improve theirs.</comment></comment></comment></comment></comment></comment></comment></comment>


Ask HN: How much could I estimate my project? - <AUTHOR> Hi HackerNews, I'm a young student and I develop little projects for fun during my free time. My problem is that I have absolutely no idea how to estimate the potential of my work, if it's possible. I don't study computer science for now, so no teacher could answer me and that's why I'm asking to you. How much would this 3D Solar Power Plant simulator cost if a company needed to pay for it? If it's impossible to answer, I'm also interested in understanding why.
Here is my work : https://www.husnet.fr/quentin/SolarPowerPlant/
Here more precision : it's a solar power plant simulator library that gives the potential power generated by the plant, according to a lot of parameters : mirrors' geometry, sun position, latitude,... It's in Javascript and works thanks to ThreeJS.
Thanks a lot. <comment><USER2> Don't charge by the day! Your costs have nothing to do with how much it's worth to a customer.

Talk to companies that might be target market. Figure out how much it would save them.

1\. Nothing. But maybe you can use feedback to improve the product so it is worth something to them.

2\. It saves them $10000 a year. You can't charge $25,000.

3\. It saves them $5000000 a year. You can charge more than $25000.

<comment><AUTHOR> Thanks for the advice. I don't think that a company is interested about this project. However, it would be absolutely awesome and I might start looking for that when I will be a little bit more professional.

</comment></comment><comment><USER3> _How much would this 3D Solar Power Plant simulator cost if a company needed to pay for it?_

I reckon 25 days is a fair estimate. That breaks down to;

1 day to research sun position, azimuth, etc.

2 days to figure out the various bits of maths involved and write code to do the calculations.

4 days to build a working interactive 3D model.

2 days to build the charts and tables.

5 days for a designer to make a great layout, build assets, etc.

6 days to bring everything together in a website that works across different browsers.

3 days for device testing.

2 days to cover meetings, phone calls, etc.

At a rate of $800/day that's $20,000. I'd add a $5,000 (20%) buffer on to that to cover unexpected scope changes.

$25,000 for what appears to be a single page might sound high, but if the company is getting, say, $500,000 of value from it then it's _really_ cheap. I know of agencies that would charge 10* that if they thought the client could afford it.

<comment><USER4> That assumes $800 a day. If the OP is a student, whoever is hiring him is probably expecting to pay closer to $200 a day. But they should also probably assume it's going to take a student 4x longer to finish the project (if ever), so it probably comes out to about the same price either way.

<comment><AUTHOR> Yes I'm a student so $200/day sounds great. Though, I'm not even sure that a company could be interested about my project. I was not asking its value in order to sell it, but just to start conceiving how much does a a project cost for a company. Thanks a lot for your reply.</comment></comment></comment>


So you want to hire a ninja? - <AUTHOR> http://blog.inclinehq.com/post/30107568369/so-you-want-to-hire-a-ninja

<comment><USER2> Sorry, I only hire Wizards. [http://watch.vooza.com/post/28038996685/interview-with-a- nin...](http://watch.vooza.com/post/28038996685/interview-with-a-ninja)</comment>