Blog
![Table category Sprint 1, Feature A, with sticky note iconography](https://res.cloudinary.com/rangle/image/upload/w_auto,q_auto,dpr_auto,f_auto/v1659119472/rangle.io/blogs/writing-analytics-user-stories/feature-photo.gif)
A key to successful projects is incorporating learnings to drive decisions. To obtain learnings from live users, teams must deliver features that collect and analyze behaviour. This post discusses writing user stories that involve analytics.
![Braiding braids being braided into bigger braids](https://res.cloudinary.com/rangle/image/upload/w_auto,q_auto,dpr_auto,f_auto/v1659119471/rangle.io/blogs/map-reducing-the-pain-of-dealing-with-arrays/feature-photo.gif)
This is a rather meaty post that will hopefully shed some light on concepts that have been misunderstood and under-utilized, in the general community. The goal of this post is to explore the concepts behind map and reduce, and to illustrate how they can simplify algorithms for dealing with arrays of data.
![Penrose Triangle](https://res.cloudinary.com/rangle/image/upload/w_auto,q_auto,dpr_auto,f_auto/v1659119470/rangle.io/blogs/refactoring-node-with-higher-order-functions/feature-photo.gif)
Prior to the holidays, my colleague Nick wrote an awesome post on getting better at functional programming by stepping out of your comfort zone, and burning the boats upon the shores of strange new languages. If you did find yourself conquering the lands of Erlang, Elm, Haskell, or the isles of Akka/Scala, my hat’s off to you.
![Angular logo spliced with React logo](https://res.cloudinary.com/rangle/image/upload/w_auto,q_auto,dpr_auto,f_auto/v1659119469/rangle.io/blogs/migrating-an-angular-1-application-to-react/feature-photo.gif)
As Angular 1 web applications continue to grow, scaling the UI and adding increasingly complex features tends to get challenging quickly. Depending on the use case and amount of information required to be processed, this can lead to performance degradation, troubles with interactivity, rendering slowdowns and race conditions if those complexities aren’t handled properly (and sometimes even if they are).
![tags on analytics](https://res.cloudinary.com/rangle/image/upload/w_auto,q_auto,dpr_auto,f_auto/v1659119469/rangle.io/blogs/two-good-approaches-for-implementing-analytics-tags/feature-photo.gif)
Good analytics are no longer just a nice-to-have. Your digital analytics are one of your competitive imperatives. Companies that win, will succeed through data driven insights and increasingly through automated intelligent systems.
![multiple password attempts](https://res.cloudinary.com/rangle/image/upload/w_auto,q_auto,dpr_auto,f_auto/v1659119467/rangle.io/blogs/how-to-store-user-passwords-and-overcome-security-threats-in-2017/feature-photo.gif)
Cybersecurity got ever more attention in 2016 as all industries realized how important it is to have strong protection of their computer systems. At the top of the list of security issues are passwords. Many people believe it is the weakest link in internet security (some believe it is permanently broken).
![graph overlaid with JavaScript iconography](https://res.cloudinary.com/rangle/image/upload/w_auto,q_auto,dpr_auto,f_auto/v1659119464/rangle.io/blogs/google-analytics-for-javascript-developers/feature-photo.gif)
As a JavaScript developer, you may find it disorienting when you first start learning about yet another large subject matter that is Google Analytics and Google Tag Manager (GA/GTM). There are many GA/GTM articles and examples that paint a confusing or outdated picture for single page and mobile apps. However, fear not. This post introduces GA/GTM to seasoned JavaScript developers and suggests the best practices we’ve adopted here at Rangle. By following our tips, you’ll be able to drive better value for clients and produce actionable insights from your application’s data.
![Custom form component iconography](https://res.cloudinary.com/rangle/image/upload/w_auto,q_auto,dpr_auto,f_auto/v1659119466/rangle.io/blogs/angular-2-ngmodel-and-custom-form-components/feature-photo.png)
This post currently reflects an earlier version of Angular, and may not be up to date or reflect the current release.