What's coming in Meteor 1.2, and beyond
info.meteor.com
info.meteor.com
Buying into a full-stack solution like Meteor is a scary proposition; you're giving up a large amount of control for a promised big increase in immediate productivity (which I do feel Meteor delivers on). This blog post goes a long way to alleviate my fears and makes it more likely I'll use Meteor for certain future projects.
I just like the sticking with general modularity approach (that really reminds me of Ruby).
I don't think the Meteor proposition is any scarier than getting into Rails, Django, or even Laravel. You're basically trusting a growing ecosystem that will prevent you from re-inventing the wheel.
Meteor is all-encompassing, covering both the client and server. That means you have much less agility in terms of swapping out components, but of course its convenience is unparalleled.
Actually this has me wondering, is there anything else out there like Meteor that covers both client and server development at the same time? Maybe GWT?
There's also Derby.js and Socketstream which arose around the same time as Meteor:
From meteor's article about the DDP protocol [1]:
"...a mobile client written in pure Objective C, with no Meteor code, can connect to a Meteor server (say, by using the ObjectiveDDP library), and the server doesn't see it as different from any other client."
An example file of code for the records overview (dashboard was a bit tabby-spacey): https://github.com/liamzebedee/metric/blob/master/client/fea...
However, I don't really think that this topic has much to do with React / Meteor, as Meteor is a full-stack web-solution, Atom is a desktop text-editor built with web technologies (and specifically React)... It's like saying my Ferrari goes faster than your boat, yup, on land.
Also yes i have tried the latest Atom's version. I am not bashing it's just that i feel that the performance is still worse than the native solution (obviously).
That being said, I get two threads inherently as a result of the client-server separation, and on the Meteor server you can properly parallelize the work as a result of its Node foundations.
Not sure if I understand the reasons, BTW FYI they recently stripped off react in favor of plain DOM for performane reasons: https://news.ycombinator.com/item?id=9117028
React and Meteor work really well together. It's a lot less painful than trying to use Flux with an API backend. Super productive. Can't wait for SQL support and for them to FINALLY fix the build speed.
I've typically tied my Flux Action layer to my api backend (where my ajax code goes) which then dispatches to the Store layer, then the View (react components) listens to that...
With Meteor where are you hooking your api backend into the react components? I'm a little lost looking for decent examples of different Meteor/React architectures.
I'll try to do a rewrite of the example todo app using this for practice. Seems like I have a bit to read since this would seem to change the standard flow I'm currently using in my Flux pattern. Actually stumbled across this thread which gives some good reading as well - https://forums.meteor.com/t/meteorflux-flow/920/63.
I don't know if this can be (or has been) extracted to a separate library or if this is part of the web components spec, but its something that's pretty nice to have baked into the framework.
In fact the only reason I'm not using Meteor now is that it's still got a hard dependency on Mongo. I was disappointed to see that SQL support has not begun to come in yet with this update. Once SQL support is there, I will definitely be looking at using Meteor, particularly now it's got first-class React support.
I think a large part of the reason such standalone libraries might not exist yet, is that it's really difficult to make a general, flexible, tech agnostic solution to this problem - as you've highlighted this is probably why Meteor's implementation is so tightly coupled with Mongo and why SQL integration is taking a while (assuming, surely, it must be a pretty high-priority feature on their roadmap).
In other words such a library is likely to be so prescriptive on how the rest of the stack, particularly the backend, fits around it that it only really makes sense as part of a full-stack framework, or at the very least a prescriptive full-stack architecture.
The team focused on internal use though, and hasn't had a chance to open source the backend and flesh out the web side of things. I hope they get a chance to do another iteration (we were bought by Automattic/WordPress and I'm no longer there).
[1] https://github.com/Simperium/simperium-ios
[2] https://github.com/Simperium/simperium-android
Meteor's main selling point is the reactivity; you can call `Books.insert({ name: "test" });` on the client, in-browser and it then updates the UI optimistically, updates the DB on the server AND propagates the change to all other clients, which in turn updates their UIs. All with one line of code.
Take a look at DDP, one of the core building-blocks of Meteor: https://www.meteor.com/ddp
curl https://install.meteor.com/ | sh
so much quicker (in the short term and long term) than reading a myriad of tutorials and then bashing my head against this configuration of several products for multiple weeks to get what Meteor provides as part of a single maintained and updated system.
(I work at Meteor)
I think the main benefit of Meteor is not that it's impossible to do what it does with other libraries/frameworks, but how easy it makes those things for you.
There could also be a desire to wrap multiple web components into an Angular directive, or wrap multiple Angular directives into a meteor module, etc.
That bit is not news or anything new.
Meteor seems to be the only thing that comes close to giving offering the same amount of productivity as I can get using Angularfire.
Has anyone used both, that can comment?
The only major problem was with Firebase itself, when we had to start duplicating data because it's a tree and it doesn't have joins. But it would be unfair to complain because it's like that by design and we knew what was expecting us. Is there any service like Firebase but with joins?
I've been using Meteor, and I like it quite a bit. There are a lot of things I wish were different but it's made me pretty productive.
I really wish it had Clojurescript integration for instance. But that's a really minor and personal thing I just want to use clojurescript.
I'd dig a Postgres as a service style firebase alternative that'd be nifty.
Are you currently using both in production, do you have maybe an link to your app?
<body>
</body>
Isn't very useful. ES6 is nice... when javascript is available. I know it's current popular to pretend that progressive enhancement is too much work, but that doesn't change the fact that your site doesn't even have an error mesaage when javascript is filtered at the firewall.How does it do that anyway? Most sites are HTTPS.
Note: a search page is not an "app". Progressive enhancement works just fine in almost every case that isn't a purely interactive app (i.e. google maps or a game). It is trivial to render, as needed, the HTML template with the header/footer, or a layout-free snippit, or simplee JSON, or whatever else is needed. This was basically zero extra work in Rails years ago, so I don't see why it can't be done now.
As for stripping JS, that is easy, and done for security reasons. Yes, this requires a custom cert so the firewall can MITM the connection, which most businesses do anyway. No, this does not make it a broken network. Javascript is optional, and always has been. ( http://www.sitepoint.com/javascript-dependency-backlash-myth... )
Now if you happen to run across a site which does not handle this properly, that is not shocking in any way. I have found that generally speaking those who disable javascript often complain about sites which extensively use javascript. They say things like "you can't assume that everyone has javascript enabled", "javascript is a security hazard and you can't expect me or anyone else to run a site with such a blatant vulnerability", and "how dare sites use such shotty technology to give an experience, they need to realize we need the same experience but without all of the vulnerabilities". The list of complaints go on and on.
The reality of the situation is this: as someone who makes consumer applications for profit, most of us don't care about you. If you are willing to turn off javascript, you are probably not my target user. If you work in an organization which does something so stupid as to break ssl in order to commit mitm attacks on your own employees in the name of security, you are probably not my target user. I do this for profit, not to cover ever last edge case known to man for every "security conscious" consumer of the Web. I worry about the security of my actual users. I worry about giving them the best possible experience. I care that they can use the product and enjoy it and will come back again and again. Javascript is optional for you, but it is not option for my applications. Hundreds of thousands of my users don't seen to mind.
That's actually very informative. ?I guess www.meteor.com is one of those sites that doesn't handle it properly? I? have no idea.
> Hundreds of thousands of my users don't seen to mind.
Really? Have you asked them?
Hundred of thousands of your users probably have no idea whatsoever what their browser is doing, and it is disingenuous to say that they "don't mind" - especially when javascript is used for things like tracking reading times and other things probably call "analytics" and a lot of us call "spying".
> I worry about the security of my actual users.
Apparently not - you just make sure your users can only be people who know nothing about modern network security.
Remember, I'm not saying javascript applications are bad or that you shouldn't write them[1]. I'm saying you shouldn't leave your precious "user experience" in the case where javascript is not available as a totally-useless, non-informative blank page. Which many sites have started to do, www.meteor.com included. Thqt''S IT. All this arguing about javascript is missing the point.
[1] At most, I only suggested that a lot of the time what is being made is not an application", but a fairly simple document. The only reason javascript could be needed (isntead of progressively enhanced) on something like a simple search page is if you are trying to run spyware (such as google-analytics) in the background, behind the user's back.
BTW, I wish there would also be built in support for Typescript. I have done some simple experiments with Meteor and Typescript but it has a do-it-yourself feel abut it. As much as I like Typescript, I will probably just use ES6.
I've been playing with meteor just recently and am totally loving it. I really like Blaze, but love React's component system, so not really sure which way I want to turn now... I'm almost thinking of just implementing a React-like dictionary in Blaze to keep it more 'component' like , because I really dislike the jsx transpiling.
Anyway these announcements are definitely making me more convinced that I should try Meteor in a production app. I see many good things coming for this project.
I'm sorry! I haven't heard any other reports of an issue like this; what browser/system are you on?
Click log in, pops up a window where I either login or it says "use this account you're logged into?" and then drops me back at the forums with a signup modal(and when I close that, still logged out).
Meteor has been great for me though, you guys are building(have built) a really cool thing.
Terribly, then. ;)
Translation: We're going to support the big JS names the general public is most aware of, because... well... please, use Meteor.
Worse: the people who are most likely to curl|sh are DevOps folks with the keys to their company's kingdom.
It's convenient and that does not mean it's a good practice but i doubt using an other method would minimize a risk when the meteor.com would actually get owned.
GPG signing, keep the private key offline, publish the public key in the blockchain and have a lot of high profile technologists sign it so it can be independently verified.
See also: PHPUnit. https://phpunit.de/manual/current/en/installation.html#insta...
(They provide an example shell script for quickly downloading and verifying the latest versions of their install)
But at the end it's about people ...your example with PHPUnit can be abused like this https://thejh.net/misc/website-terminal-copy-paste How many people do you think will bother to paste the script to a text editor and check for evil parts ?
https://github.com/paragonie/password_lock/blob/master/run-t...
^- For the record, I keep scripts like this in my Git repositories.
But the problem is anyone compromising the site can just change the line from "blahblahblahblahbalhMETEOR.COMkey" to "attackerchangedblahblahblahblahbalhMETEOR.COMkey" right on the web page, and people will copy the one verified against the wrong key. So that doesn't work.
Nor do clients have caches of PGP signatures, nor is there some totally obvious third-party that you can verify it with. You can't just go:
curl|{check_if_signed_with_www.this-site.com}|sh (which would pass visual inspection - the attacker would have to change www.this-site.com to something else) because there is no obvious mechanism to do that. Who will tell you whether https://install.meteor.com/ has signed it?
Well, HTTPS will kind of tell you. So "https://install.meteor.com/" is a lot better than nothing...
If you're going to entertain the idea of the HTTPS site being compromised to serve whatever they want, well, there is precious little you can do about it.
I want them to not use a one-liner. Step-by-step:
1. Download the files
2. Download the public key
2a. verify the public key if you've never seen it before (publish in the blockchain, have lots of high profile technologists sign it, etc)
3. If the verification matches, then proceed.
Teaching developers to value "clever one-liner hack" over "secure, dependable solution" will lead to bad habits.
1. Google "meteor.com compromised" and decide whether it's currently compromised. If it isn't:
2. Run curl https://install.meteor.com|sh
It saves a few steps and is equally secure - you know, since you're just going to go based on what other people think and include no programmatic check whatsoever. (your 2a).
There is no reason you couldn't automate your whole suggestion, except for that one, which makes it infeasible and open to all manner of social engineering.
In other words, compromising the server wouldn't be enough, because that doesn't give you the SSL key, so it would still fail "curl|is_signed_by site.com|sh", which they can only pass if they compromise the private key?
Better than the current system?
But it does. The server needs to have the SSL key to be able to serve requests over HTTPS.
It may be encrypted with a password, but at that point you're severely degrading your integrity assurances (compared to offline executable/archive signing). Might as well do it right with offline signing, right off the bat.
Personally I think curl of an https URL is not the worst thing in the world.
Basically, the separation between 'server serving the downloads' and 'machine signing the release' is intentional, and should be maintained. Consider it an 'airgap' of sorts, although it usually isn't one in the strictest sense of the word.
Making release signing depend on the SSL infrastructure (which is already rather broken in a number of ways) in any way, is a bad idea. Verification is a different story, but secure code delivery is a hard problem anyhow.
I thought maybe a single-line invocation might piggy-back on SSL as follows:
- get a server's public key that is not online or able to answer requests (because if it were it couldn't be airgapped)
- but still use the key to verify the script that's downloaded from the server that is online.
- only pass the code to sh if it was properly signed by the offline server.
Then the offline server could be "https://key.meteor.com" and the private key wouldn't have to be anywhere but an airgapped machine.
I don't know if there is more of the SSL infrastructure that I'm missing though (I'm not an expert) or if this could practically be reduced down to a tamper-evident one-liner (a la curl https://install.meteor.com | sh). It would be a marked improvement over just passing anything from a potentially compromised server straight to bash though!
You don't, really. Not currently anyway. Retrieving a binary/archive and doing out-of-band verification are two logically separate steps.
The problem with your suggestion is that SSL is about transport security. It verifies that you are talking to the right server, but does not provide any guarantees beyond that.
It's not really possible to shoehorn release signing into that, without additional infrastructure.
It doesn't matter how you combine things - the server and the signing system are (and should be!) two separate entities, and you cannot rely on the server to tell you who the signing system is (because that'd give you no better security than not having a signing system at all).
> It would be a marked improvement over just passing anything from a potentially compromised server straight to bash though!
It wouldn't, because as far as I can tell, you're still relying on the server to tell you what the correct release signing key is. How else would you obtain it?
Except piping to shell is more convenient.