Ben Nadel

bennadel.com · Personal blog · on HN since 2009

Ben Nadel, a web developer, writes about ColdFusion, JavaScript, and AngularJS, with practical tutorials and experience reports.

What HN saysHN commenters cite it as a good resource on advanced AngularJS, and one agrees with his criticism of its template syntax and digest cycle.
82HN people shared it
29linked it in comments
121stories submitted
1.0Kstory points
6 months agolast shared
2009people per year2026

Most-shared posts

  1. 1
    A free privacy policy generator
    8 people · 4 points · first shared 2009 · discussion on HN
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
    Styling Console.log() Output Formatting with CSS
    2 people · 3 points · first shared 2020 · discussion on HN
  10. 10
  11. 11
    Homepage
    2 people · first shared 2011
  12. 12
    I've been merging microservices back into the monolith
    1 people · 282 points · first shared 2020 · 196 comments on HN
  13. 13
    Only solve one new problem at a time
    1 people · 189 points · first shared 2022 · 69 comments on HN
  14. 14
  15. 15
    Replacing jQuery (110kb) With UmbrellaJS (8kb)
    1 people · 52 points · first shared 2022 · 52 comments on HN

What HN people wrote when they linked it

prawn · 2016-11-29
Small correction - it's InVision. https://www.invisionapp.com/ Its co-founder and lead engineer is/was very prolific in the ColdFusion community. https://www.bennadel.com/
iheartmemcache · 2016-04-19
Microsoft's RxJS does all that (and more): https://xgrommx.github.io/rx-book/content/getting_started_with_rxjs/cr… See this specific blog post for more details (though the Rx Book is fantastic): "That said, a sore point for Promises has always been their lack of cancelability. This leads to some interesting design patterns where you have to "protect" your promise callbacks from context-dependent changes. Because of this hoop-jumping, the most attractive RxJS feature that I've seen so far is the simple ability to cancel (aka, unsubscribe, aka, dispose) an RxJS stream before it completes." http://www.bennadel.com/blog/3030-canceling-rxjs-observables-with-ngon… (Though there are RxJS interops with more than just Angular)
wallin · 2013-09-09
I agree with Dimitris: you'll be fine with basic JS knowledge. Although I would describe the AngularJS learning curve as Ben Nadel puts it in his blog =) (which by the way is a great resource for learning a bit more advanced AngularJS) http://www.bennadel.com/blog/2439-My-Experience-With-AngularJS-The-Sup… I can also recommend the screencasts at http://egghead.io/lessons to get a hang of the basic AngularJS concepts (site seems somewhat broken now however...)
capnrefsmmat · 2011-10-22
> (For the english alphabet, even old monitors seem fine to me.) Possibly. But operating systems have to go to great lengths to display text well, with subpixel antialiased rendering and all sorts of clever tricks to make the most out of the limited resolution. This often doesn't work well, leading to complaints like these: http://www.joelonsoftware.com/articles/fog0000000041.html http://www.joelonsoftware.com/items/2007/06/12.html http://www.bennadel.com/blog/981-Antialiased-Text-Is-Not-All-That.htm If we get up to 500 ppi, that's well into inkjet-printer quality text without any antialiasing at all. Text would look rather nice. (Although I may be alone in peering at laser-printed text just to admire how smooth it is.)
Sacho · 2016-06-06
I don't think his criticism is too harsh. Two of the main problems I had with angular - the template syntax and the way the digest cycle worked, both contributed to its scaling factor. The template syntax meant you would always wonder what a parameter meant when passed to a directive. Essentially, all parameters passed to a directive were strings, but angular would parse some strings to mean "the property of a parent scope", and some more convoluted variations of that(check out https://docs.angularjs.org/api/ng/service/$compile#-scope-). Furthermore, using the recommended ng-controller directive created great spaghetti code, with template blobs where the current scope is almost impossible to track. Applying multiple directives to the same element sometimes required special parameter parsing, which further made the situation confusing. This confusion meant the more stuff you had, the more time you had to spend carefully memorizing it all so you knew what was going on. The digest cycle fundamentally limits angular's scale. It was designed with some scale in mind at first - a digest cycle triggered at a specific scope would only run watchers under that scope, thus limiting the effect. I assume they hit the problem that there was no way to define explicitly "global" watchers, or to tell another scope to update itself. This issue apparently crept into the development of angular and local digests were pretty much abandoned in favor of using scope.$apply(), which triggers a…
louthy · 2013-10-28
> I consider myself to be a reasonably good js developer, but the internals of AngularJS are overwhelmingly non-approachable. Same here. I'm just getting up to speed with Angular. I spent the past weekend developing a web-app to manage our internal test-process. I like it a lot, I managed to create an incredibly complex and interactive web-app in two days. Well, I say I like it a lot, I like the idea a lot: data driven mark-up, separation of concerns, etc. However when it goes wrong it's incredibly difficult to step through the Angular code to work out what on earth is the cause of the issue. It took me several hours of poking around trying to get this tree-view directive to work: http://ngmodules.org/modules/angular.treeview First to try and work out why the directive wasn't being initialised, then why the parameters were coming through with different names of the properties compared to what the original source expected (ngTreeModel rather than treeModel for example). Then, why on the inner elements of the tree the properties coming through were named as expected! So exasperated I head over to the documentation for directives, and, yeah, horrible... incredibly dry and terse. I never quite got to the bottom of the issue, and have deferred working it out until I know Angular a bit more (var treeId = attrs.ngTreeId || attrs.treeId). But I can't deny that this thing is incredibly powerful, so I think it's worth persevering with. But yeah, some better docs and…
zkirill · 2013-07-30
Whenever someone asks me about learning and using AngularJS I link them to this helpful diagram: http://www.bennadel.com/blog/2439-My-Experience-With-AngularJS-The-Sup… I've been using AngularJS for more than three months now and feel like I finally reached a tipping point where the months of agony are starting to pay off. Before switching to AngularJS I used Backbone.js extensively and tried out Ember.js. The biggest thing to realize with AngularJS, I think, is that your entire front-end "stack" needs to be re-evaluated. Having been using CoffeeScript for a long time, I actually ended up taking it out of all my environments so that it would be easier to debug and understand my JS code as it is "interpreted" by AngularJS. I also had to force myself to stop thinking in jQuery and learn to live with jqLite (which naturally pressures you to exercise restraint with by-hand DOM manipulation, angular.element, etc.,.). While it felt unnatural to me at first, writing directives became second nature after I understood how to properly use them and how powerful they really are. When evaluating JS libraries to include in my code, I now find myself asking whether they can be easily integrated in the "AngularJS" way (making D3.js work with AngularJS was great practice). Secondly, we all need to face and accept that the current AngularJS documentation is crap and it doesn't look like it's going to get better anytime soon. In addition to that, I…
munishdayal · 2010-02-15
I agree with grellas that while Digg or Reddit (really their legal counsel) could technically claim a copyright in the legal written work that you are adapting for your own use, realistically suing you for copyright infringement on their terms of use and privacy policies wouldn't be worth their time, and you could potentially assert a successful defense of fair use. I don't know the specifics of your business so I can't give you specifically tailored indemnity, privacy and use of information clauses for free (yet!) but that type of work is not hard for a lawyer, really shouldn't cost you very much and shouldn't take long (a couple hours). The much bigger issue in my opinion (and why copying Digg, etc long term isn't a good idea) is whether adapting their policies will adequately protect your rights and liabilities and those of your business well, especially those idiosyncratic to your business. If you just need boilerplate for the time being you can avoid this whole issue by using privacy policy and terms of use generators; I found a few here: http://www.bennadel.com/coldfusion/privacy-policy-generator.htm http://terms-of-service-generator.legalriver.com/
franciscop · 2024-10-02
I also created almost 10 years ago Umbrella JS, which is a tiny jQuery replacement but with more array-like arguments in the functions: https://umbrellajs.com/ https://www.bennadel.com/blog/4184-replacing-jquery-110kb-with-umbrell…
bdcravens · 2024-01-05
There's some insight into it here from the founding CTO https://www.bennadel.com/blog/4109-working-code-podcast-episode-039-be…
grey-area · 2020-09-16
There are far more extensive possibilities than what you export - almost every change can be breaking change, often without the producer knowing about it. This is why nobody uses strict semver in practice. https://www.bennadel.com/blog/3501-when-is-a-change-a-breaking-change-…
throw1234651234 · 2020-05-04
Blogging about something useful is extremely difficult. If you: • A lot of research goes into a new topic, most people paste • Writing useful examples without errors and confusing extras take forever • Making the text concise also takes forever This is why I write rarely. PS - this guy serves as a prime example of someone who comes up in my search results a lot and never ends up being useful: https://www.bennadel.com/blog/2782-route-resolution-using-factory-func…
baybal2 · 2020-04-14
BTW, you can do very complex transforms with XSLT on RSS https://www.bennadel.com/rss also take a look on feedburner
aturek · 2014-12-12
If anyone, like me, didn't know about 'track by' as a way to optimize ng-repeats, here's a couple of articles that explain what it is and why it's beneficial: http://www.codelord.net/2014/04/15/improving-ng-repeat-performance-wit… http://www.bennadel.com/blog/2556-using-track-by-with-ngrepeat-in-angu…
GeneralMaximus · 2013-05-24
> Do you know of any really good tutorials emphasizing Angular's $resource service? Not really. I just used the official documentation. The egghead.io tutorials may touch on $resource. I also found this helpful: http://www.bennadel.com/blog/2433-Using-RESTful-Controllers-In-An-Angu… Some Googling turned this up: https://github.com/dalcib/angular-phonecat-mongodb-rest. It may help you.
JanLaussmann · 2013-03-12
An interesting discussion about the difference between <a ng-click="modal.saved=true;dismiss()">...</a> and <a onClick="thisIsAnAntiPattern()">...</a> and why context / scope matters could be found here: http://www.bennadel.com/blog/2439-My-Experience-With-AngularJS-The-Sup…
lenkite · 2012-11-05
AFAIK, JQuery HTML constructors use document fragments behind the scenes. See http://www.bennadel.com/blog/2281-jQuery-Appends-Multiple-Elements-Usi… . No need for explicit document.createDocumentFragment
rmason · 2011-08-30
What I find sad is people making judgements based on twelve year old information. Like most languages CFML has evolved. People writing CFML today use MVC frameworks, use ORM and the cloud. Yes it is still easy for beginners to write bad code, I think that may be more true in ColdFusion than in other languages. But getting started easily can also be a virtue. You might be surprised but a lot of the ColdFusion community don't have tunnel vision and are familiar with a lot of other languages. http://www.bennadel.com/blog/2061-Seven-Languages-In-Seven-Weeks-Ruby-… http://corfield.org/blog/post.cfm/learning-clojure Sometimes another language is a better choice for a given task. We write CFML because we like it and are more productive in it, even if it isn't cool.
IgorPartola · 2011-02-02
I for one would pay a reasonable fee for such a service. So far, I have found http://www.bennadel.com/coldfusion/privacy-policy-generator.htm which does exactly what you said: a search/replace of some generic ToS, but reading it I see that almost none of it applies (e.g.: I would have no users interacting with each other and trading goods/services).
daz_miller · 2011-01-04
http://www.dzone.com http://www.456bereastreet.com/ http://www.bennadel.com/ http://www.webappers.com/ http://www.smashingmagazine.com/ and the list goes on and on and on. I have an OPML (rss file) with over 300 dev blogs on it. I found this by googling for development rss feeds.
johndbritton · 2010-11-22
This is pretty cool, Ben Nadel also built a similar app using cold fusion and Twilio: http://www.bennadel.com/blog/1967-Cell-Phones-SMS-Twilio-Pusher-ColdFu…
DanBlake · 2010-06-04
Its very common. Its not legal though. Copying text (or a book) is no different than copying a image/video. Maybe they used http://www.bennadel.com/coldfusion/privacy-policy-generator.htm ?
nanexcool · 2009-05-05
I've seen (haven't used though) Privacy Policy / Terms Of Service Generators all over the web. For example: http://www.bennadel.com/coldfusion/privacy-policy-generator.htm I don't know how good these really are, but I assume they suffice for starters if you don't want to pay a lawyer.
acemarke · 2017-07-05
`setState` doesn't actually care whether you've mutated your data or updated it immutably. In fact, I just ran a quick test, and you can even directly mutate your state object and then call `this.setState({})`, and it will update. `setState` is basically a combination of "queue an update to `this.state`, and queue a re-render along with that". So, if you mutate `this.state` and then re-render, your render output would be "correct" because the state object was updated. Where immutability really comes into play with React itself is optimizations via `shouldComponentUpdate`. The fastest way to determine if a component needs to update is shallow equality comparisons of current and next props/state, which requires that you do immutable data updates to produce new object references. Two good articles on the topic are [0] and [1]. [0] http://reactkungfu.com/2015/08/pros-and-cons-of-using-immutability-wit… [1] https://www.bennadel.com/blog/2903-why-should-i-care-about-immutable-d…
ggregoire · 2016-10-21
> For example angular 2 is not compatible with angular 1, so before you even learn a framework its API is different and when you finally learn it, probably is considered outdated Angular 1 has been released in 2010 and Angular 2 in 2016. Obviously, if you started to learn Angular 1 last year it can be frustrating (specially with Angular, it's not the easiest framework to learn out there [1] [2] ). But I would say the majority of Angular developers has used it for 3 or 4 years now and most of them probably enjoy to have the chance to learn a new modern framework that fixes the design issues of the first version. To generalize: The front-end world is surely overwhelming for the new comers (but is it not the same in all the other fields of programming?). However, after some years into it, you realize that you have mostly sticked to the same tools for years. [3] [1] https://www.bennadel.com/resources/uploads/2013/feelings_about_angular… [2] https://i.imgur.com/5rJH3co.png [3] https://gist.github.com/ggregoire/f41ae88bb8e192ad70be690f19851a33

Keyboard shortcuts

/Search
j kNext / previous blog
EnterOpen selected blog
vVisit the blog site
fFollow / unfollow
lSwitch grid / list view
dSwitch dark mode
g hHome
g pTop posts
g tTopics
g fFollowing
g lLiked
g yHistory
g qFAQ
EscBack / close