Introducing T3: Enabling Large Scale JavaScript Applications
box.com
box.com
PS: I'm currently hiring for developers with 3+ years of T3 experience.
You should be one of these clueless HR managers (( 10+ years of jQuery Experience ))
- Hello, jQuery wasn't around 10 years ago ...
But seriously and with all due respect when will these people realize that the market for JS frameworks is INSANELY saturated and released products are ASTONISHINGLY optimized that there's no need for the time being to push yet another framework and torture us devs with the task to master it out of the fear of being left behind and feeling irrelevant skills-wise?
Probably when you realize that it's not a market.
Nobody sells you anything.
They offer it for free. Anybody who wants can use it, anybody who doesn't please don't let the door hit them on their way out.
Anybody who wants can use it, anybody who doesn't please don't let the door hit them on their way out.
I guess that you might know that we devs don't have the final say on all of this. Clients or employers dictate in one way or another the way to go with front end web dev. If it were for me and I guess many devs, we'd just settle for one or two frameworks max. and just ignore the rest and their existence.
It's tough market out there dude!
thatsthejoke.jpg
If you don't want to take the time to figure out if it will actually be useful for you, wait for early adopters to kick the tires, write blog posts, etc. Then if it gains enough critical mass, and it seems to solve your problem much better than how you previously did things, use it.
Do you really believe that the motive behind this charity is 100% altruistic?
Oh man, I gotta an ocean front house in Arizona to sell ya!
Joking aside, these people publishing and releasing these frameworks to the public at min looking for reciprocal treatment in terms of improvements to their product made by the community and the general adoption of it by wide segments of the community making it easier for them to recruit and integrate new team members with minimal costs in training and sunken costs.
So, this symbiotic relationship between us devs and these corporations is neither altruistic nor patrimonialistic
An open-source project is a burden, you probably won't gain anything from them, and will probably lose a lot of time. Almost all of my projects are OS, but I don't do it expecting people to come over and help (even if it is sure nice when they do).
1. http://reagent-project.github.io/
2. http://www.meetup.com/Reagent-Minimalistic-React-for-Clojure...
The web is still really young and the standard organizations are still figuring out what HTML / CSS / JS / etc… are all about.
And I'm totally fine with that, we live in such an exciting time. It's like being around when written language was invented. Except with computers.
* Is dogfooded for a real app by authors (muut.com
Discussion-as-a-Service)
* Is small (code size and file size)
* Is simple
* Avoids(?) being simplistic (too simple)
* Has an idea of components
Maybe not enough though... looks like js is rediscovering object-oriented MVC design slowly (a sane way to keep the html templates, the event listener/handling code and any needed css in one place).I think polymer might be the closest alternative, but muut has a comparison that doesn't speak too well for polymer: https://muut.com/riotjs/compare.html
I don't think there's exactly one way of doing anything, there may be leaders in some spaces but I doubt any of them are considered holy grails. Pick the tool that best fits the problem at the time and don't wait for a potential holy grail in the future.
I gave up that hope. The holy grail seems to have been reached (and lost) with Smalltalk and its image-based introspective runtime.
Personally I'm glad that T3 released their framework - it doesn't harm me, after all, and they did all the work - but I think some people have unrealistic expectations on the value of code re-use. The problem is the economic incentives in the software market: chances are, if your problem is close enough to somebody else's problem that you can re-use the bulk of their UI code, your market is too undifferentiated for you to exist as a separate company. When frameworks do attain market success (eg. JQuery in 2006, when IE6 was the dominant browser, Firefox & Safari were brand new, and Chrome didn't exist), it's usually because the big company in charge of the overall platform has been asleep at the wheel, and then the need for a framework disappears once they get their act together and start moving the platform forward (eg. JQuery in 2014).
I'm curious as to why you think JQuery is a framework. From my view of things, it seems to be a library in all definitions I've encountered.
Just yesterday we had a meeting with the team at my company that's responsible for building the glue to allow our flagship product (~$4b profit per year) to be composed by independent releases created by independent teams that aren't always communicating on a regular basis. They built a library based on the whitepaper that was published by the main developer behind T3. At the time they started, there was nothing publicly available that served the need. But now, a company following in our footsteps will have T3 and won't have to waste the time that we did building it.
I think the correct term you should use is Rockstar Ninja, but this might have changed, too.
"Furthermore, there's nothing preventing us from using Backbone, React or another framework in addition to T3, if we so desire."
PS nobody goes out and rewrites their app just because a new thing came along. This performative exasperation with the amount of options in JS-land is getting old really quick.
In your experience, you mean. Some of us have experienced exactly what you just described.
Why most js frameworks relay on very simple examples while they promising the wonderland? I need an advanced sample than a classic todo to evaluate a framework. Something like does multiple async ajax calls, survives page reloads while juggling data / models, and gracefully handles the errors and/or initial states. An example close to a real world project would be much appreciated.
PS: If that matters, in my day time job I'm using Angular...
edit: fixed typo.
Angular has a very similar problem and they know it. I think that one of the things we can expect from Angular 2.0 is a much larger example app.
I'm ready to see the end of TodoMVC and the beginning of CMSMVC or SocialNetworkMVC or whatever.
That said, I like the idea behind T3 and am very curious to see how it will mature and what adoption will be like.
My unhappiness with angular is part of why I wrote this up as well. In their own docs they do things that are considered bad practices, they don't have readily available examples for how to test certain things, and they don't have any examples of how a "real" app should look.
I'd love if people that put out these frameworks released a non-trivial app WITH tests, using the framework.
I think Rails has done an amazing job with these things. Their guides are outstanding.
[0]: https://blog.cesarandreu.com/posts/testing_not_as_an_afterth...
> Regexs and parsing borrowed from Backbone's router since they did it right
Hahahaha.
PS: If it matters I'm using Meteor, but I've used angular/ember/backbone/knockout/etc/etc
miracleFunction() { alert("It works!") }
ARGH. Give me an example of what the body of miracle function should look like!
switch(name) {
case 'todoadded':
case 'todoremoved':
case 'todostatuschange':
this.updateTodoCounts();
break;
case 'statechanged':
this.updateSelectedFilterByUrl(data.url);
break;
}
Accidentally wrote 'todostatuschanged' instead of 'todostatuschange' (in keeping with the tense of all the other actions!) and you'll get a silent failure.Or from isListCompleted() in the list module:
moduleEl.querySelectorAll('#todo-list li input[type="checkbox"]')
I'm not picking on T3, since all JavaScript frameworks seem to have this problem. There has to be a better way than that!It exists for JavaScript:
var Constants = {
valueA: function valueA() {},
valueB: function valueB() {}
};Unlike the more encompassing solutions like Ember or Angular it focuses on just that and allows the developer to pick the other parts himself.
Coming from Flex development, I see some similarities with the Robotlegs, PureMVC and the other Flex architectural frameworks. For example Modules look similar to Mediators and T3 Services are much like Proxies and Services of the aforementioned frameworks.
Unlike Robotlegs, PureMVC etc it does not specify where to put models. We should not just ditch this concept because the separation of data and view proved to be useful.
If there is a need for ViewModels then I believe they can reside in Modules. This may be convenient for a virtual DOM - based solution or data binding. The global models can reside in Services.
What the framework is missing is a more elaborate example with React or vdom and server interaction.
It doesn't seem to be over-engineered. All the decision seem to come from practice and not from architectural astronautics.
It may not be ideal, but it looks very practical, well aligns with my view on frameworks and I'll keep an eye on it.
I appreciate that Box have released T3 for free and if people want to use, well then that's great. Nobody is being forced to use it, but it is situations like these where I can't help but wonder if efforts might have been better spent contributing to an existing open source project instead?
To me this looks very similar to AngularJS (albeit a little more stripped down). Looking at their example code, it just feels like they've made their own ES6 modules/class implementation. A better choice in my opinion would have been to take the same path that Rob Eisenberg with Aurelia has taken by making the framework ES6 and then providing Gulp and Babel to transpile it. T3 feels similar to AngularJS in that you spend an exorbitant amount of time writing class-like modules when ES6 and transpilers already give us a cleaner standards based approach.
I do not want to sound negative, I am just offering constructive criticism. I would love to hear the thoughts of the Box team as to why something like React.js would not have worked for them instead. Considering React.js promotes modular component development like T3 does, it makes me question if Box needed to build T3 when React.js and its similar MVC-less approach is the same. It is cool they did and it takes dedication and work to build a Javascript framework, but I feel like perhaps it is wasted effort.
Edit - Just to clarify - Reach and T3 are totally different things. T3 talks about structuring your application components for better code management. There is nothing stopping you from using both of them together.
I'm curious why they decided to roll their own modules when the web component standard has been around for a few years. Granted the polyfills may not have been available years ago when they started this but I feel like contributing to those, especially since the coding styles are so similar, would have been very fruitful. Looking at it today I'm not sure why I would use their modules versus web components unless I needed IE8 support.
The jQuery dependency is a little odd; is it going to keep up with the latest version of jQuery or eventually drop it? At a job I had a few years back I had to create a new web application where I was forced to use a platform that required a very old version of jQuery (otherwise it would break horribly) which made using a newer version a little annoying (though obviously doable thanks to noConflict()). It's rare to see frontend JavaScript frameworks with dependencies.
Overall this is pretty neat though I'm not sure I would necessarily use it.
As for $ dependency, a small discussion https://github.com/box/t3js/issues/12
1. Do you have hundreds of developers working on a big application? If not this is not for you. Move on.
2. Have you seen what it does? Is it a whole new paradigm of MV*? Do you really have to rewrite your angular/ember/react application? From the docs and code you could clearly see it is not heavy weight at all. It is simply a framework that helps you organize your code into modules especially when disparate teams are working on a single app.
This is a framework that has been tested in productions and found useful at Box for over a 1.5 years. Don't be too quick to dismiss things. I think there is a place for frameworks like this for complex web applications.
1. Create an entry "foo"
2. Check the box, observe strikethrough on "foo"
3. Check the "check/uncheck all" box (left of input box)
4. Observe strikethrough still present on "foo"
Digging in to the code[2], it looks like the "model-less" tenet caused the CSS class on the text and checkbox to go out of sync. In React, this would be a re-render and change in the virtual DOM, or in Angular, both would be bound to a shared model/scope.
If the simple TodoMVC example has a bug like this, the framework might not work too well for larger applications.
[1]: http://t3js.org/examples/todo/
[2]: https://github.com/box/t3js/blob/gh-pages/examples/todo/live...
The myriad of JS frameworks is bewildering to me sometimes.
My leanings lately are towards React+Flux-like tools. Using the npm and browserify ecosystem. Which is far better than anything I've used in the past for building web applications.
Something that's holding me back on ReactJS is that I'd like to render pages server side, and I don't want to use Node.js, but Go or Python instead.. and there aren't many folks doing this combo.
(Maybe the best option is a "render server" in Node.js?)
http://t3js.org/docs/getting-started/module
I'm surprised to see such tight coupling to the DOM. When they said you could plug in something like React, I figured T3 was mostly scaffolding for dependency injection, cross-component messaging, and global config.
The event handling in particular looks gross. You register for all the events of a certain type across your whole component and then manually filter them in the listener.
- T3 Services -> Ember helpers
- T3 Modules -> Ember components
- T3 Behaviours -> Ember mixins
I've also found that the code I'm writing in Ember is much easier to test because of these abstractions.
- T3 Services -> Angular Services
- T3 Modules -> Angular Modules
As for behaviors, they seem closer to the Controller concept in both frameworks, rather than mixin.
If you have ran your application through dependo and the resulting graph crashes the browser, you really need to look at this.
OO and MVC aren't the end all, be all of application design.
I usually don't give a new JS framework more than a couple of minutes to introduce itself. If it does not look like it will revolutionize how apps are built, I quickly write it off as a slightly different way to slice the pie.
May take a look again... also, it seemed to be very tied to mongodb, which I didn't mind at the time, but am moving away from.
Here is a solution for ClojureScript: https://www.youtube.com/watch?v=DYzwfekWSzQ
What doesn't fit? I think it's important to know where the framework lacks, they seem to have made some experience with things that didnt quite fit into this component structure.
Is this better? Worse? Just different?
You keep using that word. I do not think it means what you think it means.
April Fool's Day was two weeks ago.