Nitpick: does the term "isomorphic JavaScript" to describe JS that runs on both the client and server annoy anyone? Where's the isomorphism?
When I think of isomorphism I think of two things that look different but have the same structure. If you had a set of functions that are synchronous and a set that are async, then maybe you can call the sets isomorphic. Or if you have a Python library that mimics a command line tool, then they could be isomorphic.
Iso = Equal. Morph = Shape. Isomorph = Same shape.
Isomorphic JavaScript = JavaScript that takes the same shape [in multiple environments].
You're thinking isomorphism as math terminology but it isn't. It's just borrowed from Greek. From a quick search it means "same shape" in regular English too!
Your nitpick would be akin to being annoyed by the use of "group" to mean "a number of people or things considered or classed together" because it has a specific meaning in math.
Math and CS are close enough that I think they should be nice neighbors and respect one another's terminology. I use the mathematical term "isomorphism" daily almost hourly while programming.
While this is sort of a silly argument to continue, I'll suggest that "function" is probably the closest example you've given in terms of how "isomorphic" is a technical word over a common use word.
And the use of "function" in computer science for things which are hardly at all functions is a source of massive confusion and pain in the interface between the two fields. I believe personally that it leads to an enormous amount of improper education and broken intuition.
Let me provide another example—variable. This one is far worse than "function" in the confusion caused by its poor appropriation into computer science. The concept of variable is extremely well-designed in mathematics crafted over hundreds of years of philosophical and mathematical debate... and then it also become a mutable slot in Algol and stuck to every mathematician's chagrin.
It's not a good idea to copy technical words and abuse them in similar fields. It'd be as though people in the airplane industry started calling propellers "rockets" all over. Rocket comes from Italian "rocchetto" meaning bobbin/cylinder and so the shape of a propeller engine fits that definition and words are just words right?
Certainly, but that's just unnecessarily confusing. The person who popularized that terminology would be rightfully considered a fool.
> While this is sort of a silly argument to continue
So you love silly arguments too! :P
Perhaps our "disagreement" stems from how used we are to isomorphic as a common word. My mother language is full of greek and latin loanwords/particles in common speech. If I had to guess it's not as pervasive in yours. Or maybe you've been exposed to a lot more math than me! Who knows.
I still can't help but read iso+morph separately (as equal+shape) in "isomorphic javascript".
New words are not a common occurrence, especially when existing words fit the concept (such as isomorphic = same shape; variable = its value can vary; etc.) or parallels can be drawn (function = takes arguments and computes a value; chord = probably because there is a _circle_ of fifths in music where you can draw literal chords).
I see how it can be confusing on tech fields though, but that's just how language works. You could argue there are better alternatives to "isomorphic JavaScript", but to date it's been the only proposal.
That said, I'll try to keep my linguistic creativity to a minimum in tech ;)
I think there's a lot of room for creativity in technical fields (étale morphism comes to mind) but typically once a word has a technical definition it is made off-limits within relevant fields. Terminological blurriness is nice sometimes, but often technical terms are incredibly concrete.
To me "isomorphism" means exactly "a pair of arrows, called witnesses, (f, g) in a category such that fg = id and gf = id" and it confers many properties. If you find a category where {Server Javascript} and {Client Javascript} are two objects and exhibit an isomorphism then I will gladly let you call that object "isomorphic javascript" all day long. Frankly I'm already feeling "isomorphism" fails to capture the nature of this relationship, though.
That annoys the hell out of me. It's a cool word, sure, but it also has an incredibly tight technical meaning of which "runs of server and client" seems to have next to no relation.
I was a bit turned off by the term 'isomorphic javascript' when I first read it mostly because of how it is so fundamental to mathematics and we can say the term isomorphic definitely earned its keep there. In programming I'm not so sure. The term does fit but it's a mouthful, almost as bad as XMLHttpRequest. Is there a cool word like AJAX to take the place of Isomorphic Javascript? Airbnb has a certain coolest factor and they've been using the term so it's most likely here to stay.
Everything about Meteor reads like a marketing article.
How about:
- It defines global variables.
- The documentation is full of red warning messages and "this will be easier in the future"
- The code is pretty unorganized and has some wild pieces in there.
- do any of your friends use/heard of meteor?
The whole point of Meteor is to play with different approaches to web development that will be required in the future (if you want to build big distributed, interactive web apps). It's not finished yet, and they're pretty upfront about that.
I'm curious, what part of Meteor will be a requirement for future web development? Are we not already building big distributed, interactive web apps without using techniques that Meteor introduced?
Currently, I don't think Meteor's main advantage is bringing new capabilities, but rather providing a platform for building modern web apps.
So it is different than any one javascript framework in that it's goal is to bring together a complete set of technologies that are needed to build an app, rather than the developer joining different pieces themselves.
Currently many developers work with separate multiple frameworks, and Meteor brings them together into a cohesive, power, clean API.
Meteor is amazing, and even with the rough edges, and evolving API, it is still a joy to work with. They are thinking about the big picture and it really allows the developer to focus more on the creative aspects of your app. I am excited to see Meteor evolve over time.
I can't agree. I used Meteor to rewrite an app that I had previously used Clojure and Clojurescript for.
It is faster to rewrite an app having written it once already, but still: it took half the time, had better user login/auth, and had sort-of real time multi-user support.
Meteor is very nice. Try it on a small project. The learning curve is easy.
What about when it becomes mildly popular and you have to rewrite it again because it isn't cost effective to scale at all? It isn't time saved, it is time wasted.
People that don't or haven't tried to understand node.js or express like meteor. Picking up meteor is easier, but its not all that useful at the moment. There are other frameworks that are better than meteor and allow you to achieve the same end (realtime).
Don't get me wrong, it is neat, and I am glad they are exploring a new area of development, but promoting it as anything other than a pet project is misleading.
Sounds interesting, but the devil is in the details. To use their example, HTTP.get() will have to deal with CORS on the web, but not in apps. If you end up with dozens of "oh yeah well for X you just need to add Y" situations then the utility is kind of wasted.
And to be honest, I still don't get why this requires a new package manager. NPM (with a utility library, perhaps) could perform most of these functions.
>> HTTP.get() will have to deal with CORS on the web, but not in apps
You can still use exactly the same code in the browser and on the server. Allowing stuff like server-side rendering on old browsers and JS rendering for the majority of users from a single piece of code.
If you are in a client browser (any client browser, no matter how old) and try to do HTTP.get('http://www.google.com') it will fail because of CORS restrictions. If you do that on the server or in a native app, it will succeed (because they do not have CORS restrictions).
Working around CORS is just a matter of server configuration. With the same API you only fix the servers, with different APIs you have to fix both the servers and the code.
Sure, if you control the server. I guess these Meteor packages will only be useful in those contexts. But what if I want to use the Twitter API, for example?
The point is that only HTTP.get() inside browser require CORS to be enabled on the server side. On non-browser environment, HTTP.get() can open any cross site web request.
Well the point is any other API will face the same restrictions in the browser. It isn't something JavaScript code can fix directly. If you need to call external services from the browser (and not everybody does), the isobuild APIs certainly don't make the situation worse.
Also HTTP.get() may be smart enough to detect cross-domain call failure and try to automatically proxy the call. Meteor has a server-side component that can act as a proxy.
the code doesn't fail, the response just differs by client. for the purposes of your example, the "server" is a actually a client. and that's not a problem for the package manager to solve.
if anything, isn't this a great argument for a client/server package manager? you could write a library that knows to use and create a proxy if a specific client type tries to fetch cross domain.
off-topic (but perhaps related to the general usefulness of meteor): I browse with cookies and localStorage disabled by default. Every time I go to the meteor site to read something, the page just continually reloads itself without ever getting anywhere. I understand that some sites require cookies or localStorage to function (although I think it's nuts that that would be required for a site that is just displaying content and not an interactive application), but at the very least put up a message saying that cookies and/or localStorage must be enabled instead of just making my browser freak out. Thanks, can't wait to actually read about them without having to open a different browser :)
Why start from scratch? Seems like reinventing the wheel to start from a blank slate rather than forking npm etc. I guess forking doesn't get you to the top of HN though.
"If you think about it, if we tried to build all of the above on top of npm, it would be npm in name only. Even if Meteor packages were in npm, you wouldn't use the npm tool to find or install packages (you'd use a wrapper that implemented the 'release snapshots', 'curation', 'repeatability' considerations), nor could you drop them directly into existing npm applications (per 'client vs server' and 'asset bundling')."
That's a good find but I'm not suggesting they wrap npm, but that they fork it. I don't think this comment explains why they couldn't fork their spangly new system from a robust existing one.
I've been using browserify for quite a while now, and browserify is absolutely fantastic and handles building "isometric" apps with elegance.
I suppose it's nice that they bundle some functionality in like `camera`, but I don't see why that would be an "isopack" thing and not just an external library.
And anyway, doesn't building a framework-specific package disregard the "isometric" ideal: write once, run anywhere?
(as long as "anywhere" means that it's using meteor.)
tl;dr: "We want to build isomorphic apps, so we wrote a new package manager"
Coupling the goal of building isomorphic apps with the need for a new way of managing packages to accomplish that goal doesn't make any sense. How you install packages and manage dependencies has absolutely no bearing on what you can or cannot do with those packages.
In other words, you can write fully isomorphic apps using npm as your package manager. We're already doing it.
With Isobuild and Cordova, you'll be able to add a camera package
to your app and use one simple Camera.takePicture() API to take a
photo, and then type one command to build your app not just for the
browser, but for the iOS and Android app stores too.
As if anything is that simple. Where will the photo be stored? What effects will be applied? What format will it be in? How large will it be? What happens if it requires a permission request (e.g. in browsers and on iOS)? Will it auto generate the manifest file?
You will be surprised, but I believe it can be hard for a lot of people who come from the webdev background.
When I just started with Cordova, I went to a HTML5DEVCONF talk where the speaker tried to install (just install) Cordova in a 20m slot. He failed, his slides had all the ingredients (Xcode, jdk, ant, maven, npm, cordova, ios-sim, etc) but on the live demo his new machine failed because some of the many steps wasn't satisfied.
About using Cordova: again, for newcomers, it is so non-obvious: what do you do when your build fails? How do I debug this objective-c code again? Why the heck Cordova doesn't give me all the logs by default? ios-sim is an npm module that is compiled with a C compiler and the build process is navigated by rake - ruby-based make clone.
We can only hope their new package system will contain something that allows the programmer to chose their own database. I want to use Couchbase and Elasticsearch. I can't see why any other document store couldn't do the same job as Mongo. Don't get me wrong, I'm ok with Mongo (but it's not for me) but can't we make at least some choice???
You can make your choice! The problem for a lot of people: you need to write a real-time adapter if you want it to be efficient and performant. We have implemented Redis adapter, for example: https://www.youtube.com/watch?v=-Vnb8tjnE3k
I really don't mind about the packaging system, I think that the meteor team should put special emphasis in solving the scalability issues, cos right now (IMO) is the major barrier for adoption.
I find really useful all the features they're launching but there's no way I'm going to pay for a 8Gb and quadcore server just for supporting 100 concurrent visitors...
I started building a real-time webapp with meteor and had to switch to express + primus which was a much more efficient solution (orders of magnitude).
I really hope they do something about it ASAP... I really enjoyed working with meteor and still use for small projects, but for a medium/big app? not yet...
It's a good way to drive the point home, by adding that last sentence in every post. An effective way to spread the word. What's wrong with asking that? For the past projects that I open sourced, I asked people to star them if they found them useful.
It's really just text and a few images, nothing fancy, an ordinary blog post - yet it freezes my browser for what feels like half a minute while it uses 100% CPU for rendering. What the fuck?!
When I think of isomorphism I think of two things that look different but have the same structure. If you had a set of functions that are synchronous and a set that are async, then maybe you can call the sets isomorphic. Or if you have a Python library that mimics a command line tool, then they could be isomorphic.