Authorization is usually an important part of any application, but it is also something that is not very often talked about. This post discusses authorization techniques and also an opinionated way of organizing your authorization code within Phoenix Contexts and Ecto Schemas.
STOMP is the Simple (or Streaming) Text Orientated Messaging Protocol. While there are some libraries that allow communication with STOMP servers over HTTP, I couldn't find anything that does this over a WebSocket. As it turns out it was really easy to roll out my own WebSocket client implementation that communicated using STOMP.
WireGuard is an extremely simple yet fast and modern VPN and is amazingly easy to set up. More so if you are willing to use off the shelf Docker Images.
ExPort which is a wrapper around the popular ErlPort allows to open ports to programs running in Ruby or Python and communicate with the processes as easily as if you are writing plain Elixir Code.
ActiveJob provides first class support for retrying or discarding jobs based on certain exceptions. This works great if you have a static list of exceptions...
If you have ever used Rails and then gone over to a Node.js app, one thing that you will surely find missing is the ability to evaluate arbitrary code in the rails console. It's great to run one-off tasks like creating some rows or debugging issues etc.
React Hook Form is quickly gaining popularity as the goto form library for React. And with good reason. The API is really well thought, the validation is amazingly easy and the re-renders very efficient.
Why would anyone want to create a WebSocket server on Android and then have it implement the GraphQL-WS protocol? If you are curious about the why or want to know how to implement this, read on.
Once a slug size reaches 300 MB, Heroku will warn about larger slug sizes having the potential to cause longer boot times. The best practice is to keep slug sizes as small as possible for fast deploys and other operations.
Rails 6 comes with Zeitwerk as the new default loader. For most users, when upgrading from the previous version of Rails, not much would change (except some inflections because of the way zeitwerk infers file names based on the constant).
Jest provides several different ways to mock out things. Here's an effort to list out the most useful ones in a short post.
Material-UI vs Ant Design vs Fluent UI vs Semantic UI vs Grommet vs Blueprint vs Rebass
create-react-app provides a great starting point to start a new react app fully configured with webpack, live reloading, etc. But, sadly, it doesn't provide a way to provide different index files with a different set of entry points.
LiveData is an observable data holder class. Unlike a regular observable, LiveData is lifecycle-aware, meaning it respects the lifecycle of other app components, such as activities, fragments, or services. This awareness ensures LiveData only updates app component observers that are in an active lifecycle state.
This post talks about my affection towards gardens. Since my childhood, I had a huge garden at my house. My grandma was fond of taking care of our garden. She generally used to spend a couple of hours every day taking care of the garden. I became a great admirer of her work and developed an affection towards gardening.
There is something about nature. Is it fresh wind touching your chin, or looking at clear blue skies with your eyes, soothing sounds of rivers flowing through your ears, never-ending long old trees, or bucolic smell. Maybe it's a combination of these things or maybe it is all those things.
The ViewModel class is designed to store and manage UI-related data in a lifecycle conscious way. The ViewModel class allows data to survive configuration changes such as screen rotations.
"At last, this is the day I have been waiting for." these were the first few words that you heard when you were born, Hari. Your father took off his shirt out and laid you down on his chest and wept. I can still see the emotions in your father's eyes when he was taking you for the first time from the midwife when you were born. As if, he was announcing to the world about your arrival.
"Are you ready for it?" Ava asked Emma for the last time. Emma shut her eyes, nodding to Ava. Emma was always the audacious sister between the twins. Ava took her cigarette lighter out of her pocket. They were in the basement of the house. It was their place, a place where they felt safe, a recluse from their aggressive parents.
The frameworks/approaches in question that we would be evaluating are React Native, Flutter and Kotlin. Now, if you haven't heard about one of these before, I request you to think very seriously before choosing it because it probably might not be a good fit for you. I think I have put plenty of disclaimers, so let's dive in.
Are you using an ActionCable client on Electron app? You want some extra compression with messagepack? Read on!
In the previous post, we saw how to support compression with permessage-deflate extension for Rails ActionCable connections. Now that we are there, let's go one step further and see how we can create a custom extension for WS frame compression.
WebSockets are great for a long-running connection with the client. Can we make them better, faster maybe? The answer is yes and it's very simple. This post describes how to make those WebSocket connections feel even snappier.
When I first came across Stimulus, I was excited. The premise is great, especially when coupling with a rails app. Convention over configuration, right? No more jQuery code sprinkled around throughout the page and watching for load/change events to perform changes. Not to mention the quirks that come with integrating Turbolinks to your app.
Android will run on many devices in many regions. To reach the most users, your application should handle text, audio files, numbers, currency, and graphics in ways appropriate to the locales where your application will be used. The resource framework automatically selects the resources that best match the device.
TarsosDSP is a Java library for audio processing. Its aim is to provide an easy-to-use interface to practical music processing algorithms.
Fastlane is a command line tool to automate all the tasks for app deployment. Given the plethora of tasks that it handles, it's amazing how easy it is to set it up.
If you have overseen the development for a relatively active iOS app, you might already know how often an app needs to be updated. Apple has tried to improve this process for the developer with continuous updates to XCode, but it is still a gross underestimation to even call the process *tedious*.
Last post of the series. Adding playlist support is going to be pretty simple. Let's start by creating a Realm model for saving our playlists locally.
How to create a mini music player for our audio player?
Design and create a user interface for our Music Player.
This post will discuss how to show Media Player controls on the lock screen and the notifications.
If you want your media to play in the background while the user is interacting with other applications, then you must start a `Service` and control the `MediaPlayer` instance from there.
All basics about Andorid Media Player.
Creating a Music Player for Android devices.