> realistically a proprietary standard library – however huge – just can't compete with the open source ecosystems of Python and friends.
It's not competing with Python, it's language as a service. Instead of downloading dependencies, you just have them. They're hooked to live data sources, zero configuration.
This has a lot of potential, and it doesn't need to be its own language, but it doesn't hurt much.
The Mathematica I know (v5, v6) were usable completely offline. Can one use the recent Mathematica version in an offline mode? How many parts are really part of the online service? I guess the WolframAlpha style data sources (country, city, etc. db sources).
"Imagine you've implemented world peace. Now let's try to drop couple of nukes in the middle of this..."
Anyway, the point of functional programming is to have as many "immovable parts" as possible, because mutation stands in for parts in motion. And everyone in engineering knows parts that move are usually the first point of failure.
You might need a moving part here or there in a usable design eventually (not always) but you should do you darn best to have them isolated and as few as possible.
Aha! Moving parts are failure-prone because of friction. And friction happens when something's changing under you. Which means mutation. Nice analogy ;-)
I'm curious, is there a reason to avoid using .NET for web services deployed on *nix?
I'm interested in using it, I love .NET as a platform, I just have this vague sense of worry that I can't quite rationalize. Mostly based on Microsoft's past performance with cross-platform efforts.
I can't answer with complete certainty, but I'd like to point out that C#/.NET is now more open than Java/JVM. A case like Google vs. Oracle couldn't happen.
- C# is standardized (albeit an older version that the current one)
- C#/.NET has more permissive licenses (MIT & Apache vs GPL)
- C#/.NET is now developed in public, on GitHub
- Microsoft has promised not to sue for patent infringement on .NET
I'm not a lawyer nor do I play one on TV, but it looks like even if Microsoft changes it's mind, it can't take it back. The worst it could do would be abandon support. That would be a huge hit, but something the community could recover from.
Meanwhile, you have Java with Oracle shutting down security fixes for Java 7, unless you get a long-term support contract. Which would you rather deal with?
> it looks like even if Microsoft changes it's mind, it can't take it back
I had some correspondence with RMS back in November right after CoreCLR was announced, and he doesn't seem to agree. All he said was that MS's non-standard/custom patent grant isn't sufficient and that http://endsoftpatents.org/2014/11/ms-net/ is correct.
While I think http://www.fsf.org/news/dont-depend-on-mono was cogent and made a convincing argument at the time, and there may even be problem with the new patent grant, the endsoftpatents.org analysis just seems like a poor one.
I also pointed out that the .NET Micro Framework wasn't under a custom patent promise, but instead has been available under Apache 2.0 for years. It seems that even if let's say the worse case scenario is true, and there is a loophole in the patent promise, and it was put in to facilitate nefarious plans on MS's behalf, then the free software community could render even such deliberate plans as ineffective. The key move would be to continuously and aggressively hedge on alternatives and to make it well known that's what's going on. The community could aim for aggressive portability to other languages/runtimes with the use of a tool to do mechanical translation. If MS (or one of its affiliates) tries anything shifty, the community flips a switch and for compatibility relies on an NETMF-based runtime (still being available under Apache 2.0 and all) and otherwise begins living entirely in Vala land, with MS having proven they don't want to play ball.
It's like Mutually Assured Destruction, except for one side's wholesale elimination of their risk of being destroyed.
CoreCLR is open source now, so even if Microsoft abandoned it tomorrow, the community would keep maintaining it or worst case most of it would probably get merged into Mono.
This BSD port was mostly a community effort by the way.
I've recently decided to switch to .NET for everything. Mainly because I really like F#, and I've been using C# for a side project in Unity, but also because an open source CoreCLR makes me worry a lot less about vendor lock in.
Nice choice! There is a _lot_ of investment in .NET at Microsoft. The move to open source and the community reaction to it has only made it more exciting and compelling for the company.
I get and appreciate the sentiment on "if Microsoft abandoned it tomorrow". Just clarifying that this risk is _very_ far from reality.
It's also really interesting to look at how Microsoft is approaching C#/Roslyn. One aspect of that is the C# 7 effort, which has an ambitious scope and has a great deal of open/public interaction. Check it out: https://github.com/dotnet/roslyn/issues/2136
IIRC, the stack was mostly proprietary commercial software. It was expensive to get started unless you use the dev edition, even then you need Window.
For me, the web development was too magic, way more so than RoR. I got an acquaintance that only do .Net. And he harps about how .Net got Razor and data base represented as object unlike open source. When I pointed out that Razor was just a template engine and that database thing is just ORM which many other MVC frameworks have he just didn't get it. He didn't get it's a template engine nor does he understand that it's an ORM. Magic! I also tried some .Net dev, and it's very magic in term of abstraction. The VisualStudio IDE is amazing and C# seems like a much better language than Java. But the ecosystem isn't as rich, Apache such an awesome organization but Oracle is very pushy.
The downsize for me is big, ecosystem. Most of the open source projects play very well together, C# is a newbie, I rather wait for it to mature within the open source space (including books and tutorials).
I feel like there's this stereotypical .NET dev in everyone's head on HN. Your friend, for example, didn't even know that Entity Framework was an ORM, and he likes "magic" and not understanding any lower level implementation.
That's too bad, because there are tons of sharp .NET devs who despise the concept of "magic" (and no, ORMs are not magic, and Entity Framework is fantastic) and who understand the abstractions that .NET offers. I would hesitate to write off all .NET enthusiasts as clueless less-than-hackers.
(disclaimer: Microsoft employee, nothing to do with .NET though)
One thing I find good about Microsoft's libraries is that for the most part they do a good job of working as magic and working with someone with understanding.
XNA is the example I always use. You can use XNA and make games without understanding anything about the graphics card but you can also dig in and write your own shaders and basically go however deep you want to/need to.
There are some things in .NET that do seem kinda magic, and razor is one of them. Not because it's a templating engine but just in how lightweight it is and how surprisingly decent intellisense can be with it. Most templating engines feel so verbose and ugly after working with razor.
Agreed on Razor... it's by far the best template engine I've used. It's a shame it's a bit of a pain to use outside of a web context (email templates, for example). Though I actually like using component-like systems more now (React, MercuryJS, RiotJS, Polymer...) with JS client and server.
I know what you mean, but I also think that street runs in two directions. ASP.NET was pretty late with MVC because (of course this is just me speculating) that was what those dirty Django & Rails heathens were up to. Turns out, MVC was a pretty good idea after all.
If you use ASP.Net MVC it's a lot less magic and more predictable than using webforms... That said, Razor with C# is a really nice template engine. The integration is far nicer, and more predictable than any other I've used. These days I'm targetint React under node/iojs which I would say is far more magical...
Entity Framework is also a really nice ORM for most small-mid sized projects... If you're really stuck on using a strongly-typed environment I will say that C# is one of the better ones and would choose it any day over Java (and a lot of others). My issue with many .Net and Java projects is that a lot of "enterprise" design patterns are used when they are more in the way than helpful. Abstractions are used which only improves testing or portability, but neither testing or portability are used. But this is more of a design choice from the developers than the languages/platform used.
I also disagree with your reference to .Net/C# not having a large ecosystem... There are a lot of tools for C# out there, most open-source and easily available via Nuget. Not to mention that Stack Overflow has authoritative answers to almost anything you could need with .Net or C# and has MS employees as regulars to offer support.
This is from someone who doesn't even write much C# any longer (still supporting two legacy apps in C#), and does most of his development being deployed to Linux servers.
I wouldn't worry about the past part. We use IBM software on *nix and they were worse in their day than MS ever was.
A few people have concerns that the patent grant isn't as broad as it should be.
For me it would mostly be an ecosystem thing. I use Typescript because it drops right into the pipeline I was already using, but switching VMs is a big ask. How good is Thrift for .NET?
Yeah, there are Microsoft patent traps out there for code that uses core .NET features in idiomatic ways, and Microsoft's patent grant only covers what's necessary to implement the core CLR. They also only used to cover patents that were essential to implementing the CLR, so just using code that implemented it in the obvious/efficient way could land you in legal hot water. I'd hope they've extended it to cover their actual implementation now that it's open source.
The patent promise that the MIT-licensed CLR has been available with since .NET Core was announced last year is completely different from the patent promises MS has used in the past, and definitely applies to Covered Code (i.e., what they are shipping), just like Apache 2.0. In fact, it's almost as if they referenced http://www.fsf.org/news/2009-07-mscp-mono while crafting the new promise, to intentionally address the problems in that post.
> just using code that implemented it in the obvious/efficient way could land you in legal hot water
Apache 2.0, GPLv3, and MPL2 are no different; you can't take Covered Code that company X is distributing but that doesn't infringe their patent A, then modify it to make use of methods/techniques that do infringe patent A, and expect to be indemnified from litigation. And each of these other "sufficiently-free" licenses explicitly says so.
Having said all that, I do wish they would have expressly used Apache 2.0 instead, just for good measure and to avoid the casted aspersions.
IntelliJ is better on Unix than Monodevelop - there is still no end to end story for *nix developers backed by MS (compared to something modern like Dartlang)
Monodevelop/Xamarin Studio does indeed have a long way to go. Do you know about the open source project OmniSharp? http://www.omnisharp.net/ which provides xplat development toolchain. .NET in Sublime Text/Emacs/VIM yep. It was created and maintained by both employees of MSFT and the OSS community.
This is not a change in Apple's policies, it's a fluke. The reviewer is interpreting the rule incorrectly.
The rule is intended to avoid descriptions which refer to future plans for alternative platform support, or different ports of the app available on other platforms. The rule does not intend to withhold information on platform support for this app instance, or ban said platform support.
For example:
- "Also find our app on the Pebble Watch Store" (violation)
- "This app syncs with Pebble Smartwatch" (not violation)
Other examples:
- "This feature is only available on our Windows Phone version of Office" (violation)
- "We're moving to the Google Play store for Android" (violation)
- "This app allows you to share files on all popular mobile platforms" (not violation)
- "Tap together your iPhone to another iPhone, Android phone or WM phone to share contact info" (not violation)
My guess is Apple will be reversing decision on that rejection soon.
According to other posts in the linked discussion, other apps are being rejected under the same rationale and for the same reasons, and attempts to appeal those rejections aren't going through (Apple's reviewers are continuing to reject new versions of these apps until they remove any/all mention of "Pebble" in their metadata).
Yes, and I remember how a lot of .Net people moved from .Net to ruby because of the type system. Now you are going to move to an inferior type system that doesn't even support generics and with worse type inference.
I've worked (as a freelancer) on a number of apps recently using Rails for the "front back-end" and either Erlang or Go for the "back back-end" and it's been working great.
Rails works great for things like authentication, creating a nice and maintainable UI, handling billing code, sending emails, managing the database schema, and all the web related stuff.
Erlang and Go work nicely for all the "heavy work", think sending tens of million of push notifications quickly, crunching data etc.
They can communicate using a shared, Rails-maintained database, and things like Redis to trigger updates or orders.
You can even do Erlang-backend processing of Sidekiq payloads, pushed from the Rails side etc.
> Rails works great for things like authentication, creating a nice and maintainable UI, handling billing code, sending emails, managing the database schema, and all the web related stuff.
Nothing that Go cannot do. The only difference between Go/web and Rails is the maturity of the libraries.
Of course Go libs are way less mature for various "business tasks".
Everything can be done in Go, sure, but at least the current direction of Go is to provide small reusable libraries, not frameworks. And there's a huge difference between the two.
I don't like frameworks like RoR or ASP.NET MVC. Too much magic. Things break in weird places. They're slow. But they give programmers some kind of safe, happy sandbox that hides the "scary" web.
It's a whole different philosophy I think. Almost every week I see a new rubyists on golang-nuts looking for the "RoR equivalent" in Go-land.
It's also 'nothing that C cannot do', but we still don't generally find it being used for such!
I've tried writing web front-ends in Go. It's a fiddly pain in the arse, and the benefits aren't really obvious. If it works for your situation then use it, but IME they're targeted at different problem domains.
With RoR it's pretty much in the description. Monolithic web apps with relatively standard and simple domain logic (i.e. CRUD). Lots of presentation code (HTML templates, handling of static assets and what not).
Go is for writing small, focused, paralellizable and likely distributed services. If I wanted to crunch data, I'd try Go.
I'd expect, say, a RoR app to connect to a Go service for some of its heavier domain logic. I'd neither write a RoR-type app in Go, nor a Go-type service in RoR.
I agree that more than one thing should matter, but our society is pretty hostile to that idea. Consider, for example, that for a large fraction of the population, marriage and kids are key relationships that will make them happy. Yet, we're the egg-freezing generation. We want kids, but we are also deeply afraid that having them will compromise our ability to compete.
> I agree that more than one thing should matter, but our society is pretty hostile to that idea.
Practically speaking our economy is more hostile to it than our society. It's just that it's really really hard to have marriage+kids in a nice neighborhood and compete at the same time; but by accounts people who can pull that off are considered winners.
It seems to me the only answer is having a very progressive, socialist economy which makes the marriage+kids easier. (Another alternative is resetting societal values to be less materialistic, but that ain't happening -- men will always want BMWs and iphones, a lot of women would still want that diamond stone).
Also, the egg-freezing scares the bejesus out of me. Someone pointed out in the thread about Chinese scientists tweaking human embryos that we know so little about things that while we may be thinking we've tweaked an embryo in a safe way, and a human is born of it, the really bad dysgenic properties may not be manifest until later in life. Egg-freezing stirs the same feelings in me. On a related note, one of my aunts is an ob/gyn doctor, and I've heard her say many times that for a very wide variety of reasons it is best that children be had earlier rather than later (20s instead of 30s, 30s instead of 40s, etc.) for both men and women (but especially women). I don't know what I'm getting at, I guess all I can say is, damn, we have it tough, I wish I knew of good answers.
Personally, I value relationships as much as I do ambition. I don't see the two as an either/or - it's a balancing act.
The big problem with the "progressive, socialist economy which makes marriage+kids easier" - it doesn't allow for choice. I may not want to have kids - so why should I be forced to go down that road (or work to support those who do)? Because a study tells me I'll be happier?
In the current system, the ones who are ultimately successful are the ones who find a way to strike a balance. That's difficult for everyone - and it's more difficult for some than others. But taking away one's choice of where to land on that balance beam seems like an even worse idea than the system we currently live in.
That being said, while I'm happy to agree to disagree with you there, I think we can both agree on one thing - in this game, there are no easy answers.
(On a completely difficult note - and perhaps the most philosophical discussion I've ever gotten into on an HN post - maybe that's what makes it valuable? Would life mean less if everything were easy?)
> We want kids, but we are also deeply afraid that having them will compromise our ability to compete.
Is that really what it is? I always figured it was something more like people waking up to the fact that retirement has ceased to exist, and deciding that they may as well have fun in their 20s/30s (when they are in peak condition to have such fun) and responsibilities in their later years, rather than the other way around.
They vary; generally, their maintainers mean well but that doesn't necessarily translate to secure code.
Cake lacks security expertise in their core team, unfortunately.
CodeIgniter is a bit conservative. (We must support PHP 5.2!) But then again, so is WordPress. They do listen to researchers.
Laravel is okay, but their lead dev is a bit of an egotistical and hypocritical ass. Recently, found and privately reported a PHP Object Injection vuln to Laravel; he said he didn't consider it a security issue, then when I disclosed publicly flipped his shit on me.
Symfony is great. Fabien has a cool head and responds well to security researchers.
Yii 2 is promising. I'll have to take another look before I call it bulletproof though.
My only experience with Zend has been interacting with their core devs on other media (Twitter, IRC); I haven't found any bugs in its core.
I'm out of PHP, but I'll second Symfony - Fabien and the Sensio people are the best folks I know in the PHP universe and they're careful and sober in their thinking.
Yes, but I originally emailed that address so I don't think it was a reaction to me (or even a passive aggressive gesture). Taylor had a week's heads up and chose to dismiss my report.
> Well human have higher moral value because of higher ability of pain, emotions and cognition.
Those are arbitrary categories. Let's say I decide you have lower ability to feel pain, emote and have inferior cognition.
How exactly do you prove me wrong. By grimacing a lot when I cause you pain? Well animals absolutely clearly demonstrate they hate pain, too. Yet, here we are discussing your opinion to the contrary.
Truth is... they don't speak, so we can speak for them whatever is convenient for us.
You have a somewhat naive view about how our moral compass moves as a straight lines from bad to good.
Before the Nazis performed experiments on humans, it was considered horrible to perform experiments on humans.
What Nazis had that allowed them to perform experiments on humans was a carte blanche to do whatever they want by contemporary law, and the ideology that those human beings were in fact "inferior" human beings.
I don't know if you eat fish, chicken and so on, but probably you don't think of yourself as a Nazi if you would. Because you don't consider a chicken at the same level as a human. And this gives you carte blanche to have chicken for dinner and feel absolutely no remorse.
Is it right or wrong? I don't pass judgment. I know all beings have a sense of self and we shouldn't cause pain and take a life for no reason, yet, killing each other and eating each other is part of the cycle of life.
I know that if we consider life sacrosanct and we eat chicken fingers at Chipotle, we need ideology to justify our actions, and so we'll consider animals inferior. If we consider them inferior, they'll be target for experiments, because medical science will continue to evolve.
Depending on how our culture evolves, the moral compass may move in an entirely different direction, where we stop regarding life of any kind as so precious, even human. We'll acknowledge how replaceable we are, and our mortality. This would enable full legalization of humane practices like assisted death for the heavily disabled and terminally ill, and might open the doors again for experimenting on humans to move medicine forward.
In recent history, we have recognized the moral significance of groups that have less power. This has happened (and is currently happening) for black people (and people of color in general), children, women, LGBTQ people, animals that are "like us" (such as elephants and chimpanzees), animals that are our companions (like dogs and cats), and other groups that have been and are currently discriminated against.
The pattern that I see is that society is giving moral value to groups that have less power; groups that we have historically harmed without thought.
We must define "group" though, because obviously the most powerless things on this planet are plants and inanimate, nonliving objects. And it would be very short-sighted to define "group" as "everything that society currently gives moral value, i.e. all humans and an arbitrary subset of animals". I define "group" as persons that can feel emotion (not necessarily human emotion), have some sense of their environments, and have some sense of desire. In short, our "group" includes all sentient beings.
If we follow this line of thought, it feels obvious that all sentient beings will be recognized as valuable. And that the question is not "if", but "when".
I want to address your counter example:
> This would enable full legalization of humane practices like assisted death for the heavily disabled and terminally ill, and might open the doors again for experimenting on humans to move medicine forward.
As a society, we believe that a moral being does not have the right to take their own life. It doesn't say anything about who is or isn't a moral being, which is what I am addressing.
The counter example you were looking for was a society where all humans had no moral value. If humans have no moral value, then it does not matter if a human kills themselves, because it also doesn't matter if humans kill and harm each other.
Disclaimer: I have lived my entire life in the United States. When I say "society", I usually mean "the west".
"yet, killing each other and eating each other is part of the cycle of life"
I'm not sure what "the cycle of life" is, but just because something may be present elsewhere in the animal kingdom does not mean we should replicate it or justify our actions through it.
It's not competing with Python, it's language as a service. Instead of downloading dependencies, you just have them. They're hooked to live data sources, zero configuration.
This has a lot of potential, and it doesn't need to be its own language, but it doesn't hurt much.