How are Notifications Pushed to our Mobile Devices?

Most people have a love/hate relationship with mobile push notifications. On the one hand, they keep us updated with the information we willingly asked to be updated on. On the other hand, for people like me, that constant activity on my phone is annoying and distracting. 

My friends tease me, but I can’t go to sleep or do anything, for that matter when I have a little red dot in the top right corner of an app on my iPhone. Once I’ve checked out that notification, only then I can move on. Nevertheless, I need those notifications, so I can’t turn them all off. 

What are push notifications?

A push notification is a message that pops up on a mobile device, such as a sports score, an invitation to a flash sale or a coupon for downloading. App publishers can send them at any time, since users don’t have to be in the app or using their devices to receive them. Push notifications look like SMS text messages and mobile alerts, but they only reach users who have installed your app. All the mobile platforms – iOS, Android – have their own services for supporting push.

Why are push notifications important?

Push notifications are very effective at helping users stay engaged with an app or re-engaging with an app they haven’t opened in a while. This is particularly useful because re-engaged users have significantly higher in-app conversion rates and lower acquisition costs than new users. Because you can receive pushes while you’re browsing in-app or even when your device is locked, this makes them a great way to convey messages of urgency, such as breaking news, current traffic conditions, or limited-time offers.

A Brief History of Push Notifications

Apple and Google are the leaders in the push notifications feature. 

In 2009, Apple launched the first-ever push notification service – Apple Push Notification Service (APNs). Google didn’t stay behind for too long and launched its Cloud to Device Messaging service (C2DM) in 2010. 

Rich notifications with images and calls to action appeared in 2013 on Google’s service, and then Apple added interactive buttons to their service in 2014. 

In October 2014, Google acquired Firebase; it merged with Google’s push notification service and became known as Firebase Cloud Messaging (FCM).

So how does a notification reach your device?

Let’s see how this works with Firebase Cloud Messaging (FCM) which supports both iOS and Android notifications.

An FCM implementation includes two main components for sending and receiving:

  1. A trusted environment such as Cloud Functions for Firebase or an app server on which to build, target, and send messages.
  2. An Apple, Android, or web (JavaScript) client app that receives messages via the corresponding platform-specific transport service.
Source: Firebase

To setup our apps on FCM, we need to upload the relevant Apple and Google certificates. And then integrate the Firebase SDK into our mobile apps. 

What follows is then what happens when users install the app and we give permissions to allow push notifications.

  1. App registers with FCM the Sender ID, API Key and App ID. 
  2. FCM returns a registration token
  3. This registration token is then sent to our backend where it needs to be stored along with the user details. 
  4. When our backend needs to send a notification, it sends the token, message and other details to FCM.
  5. If the client is not online, Firebase stores the messages. It keeps checking regularly to see if the device/client is online to send the notification. 
  6. If the client is online it forwards the message to the relevant transport layer. 
  7. The client/app receives the notification and displays it to the user. 

Here is a lovely infographic I came across on Push Notifications on huree.co

Fallen Leaves ~ Fr. T

Fallen badam leaves scattered on the ground carelessly.
Soon to be swept away to garbage.
I wandered among them searching, selecting, picking up,
putting together…

The three in the centre are long ago dried up pipal leaves… also very beautiful…

flip flit float fall
fatal end now stayed
picked purposefully
as art hand propels
to wild expanse beyond

arranged then mystic shape
gracious pattern hue
weaving dreams of please

content bound in still
raising lives in hope

we ever have to very end
fresh purpose yet ahead
God keeps us always beautiful
His magic still remains

Sharing from a message sent by Fr. Terry SJ

New York, New York

After 3 long weeks in Secaucus, I finally managed to get myself to go to New York. I had gone around NY when I came to the US for the first time in 2018. And maybe that’s why I didn’t feel like going again. And also this time I am alone and sightseeing without company is something I don’t really enjoy! But yes, I finally made it. So here’s how my day went..

The weather in the morning was cloudy and this is the view from the bus before we entered the Lincoln tunnel which goes under the Hudson River that you see in the photo. Thankfully it got nice and bright and sunny once I got into Manhattan.


Few shots as I moved towards the 9/11 memorial


The United States Court House


The New York Public Library


Though I had visited the 9/11 Memorial the last time, I was still filled with heavy heart and a sense of wonder as I stood there this time.

Located where the Twin Towers once stood, there are now two large grey chasms in the ground from which water cascades down all four sides before gathering in a pool and finally plunging into a dark void in the middle, seemingly descending to the center of the Earth.

On the brass rims around these twin pools you’ll find stencil-cut names of every person who died in the terrorist attacks of February 26, 1993 and September 11, 2001. At night, lights shine up through each letter illuminating the names.


Today, at the World Trade Center site you’ll not only find the 9/11 Memorial & Museum, but also the Oculus building which is both a train station and shopping mall designed by Spanish architect Santiago Calatrava.

Its wholly unique design has been likened to everything from a bird’s wings to an armadillo to the twisted steel structures found at Ground Zero. Regardless of what it’s actually meant to be, the bright and lofty architecture is absolutely breathtaking and clearly provides some light to it’s darker counterpart, the 9/11 Memorial & Museum. 


Across from the Oculus and 9/11 Memorial & Museum is the One World Trade Center (unofficially known as the Freedom Tower), the tallest building not only in New York City but the entire Western Hemisphere comprised of 104 floors and a height of over 500 meters. 

On levels 100, 101, and 102 of the One World Trade Center, visitors can access the Observatory for a 360° view of New York City and the surrounding waterways.


From here I next visited Trinity Church where I was lucky to catch a service that was about to start. The choir was heavenly!


The New York Stock Exchange (NYSE) was very close to Trinity Church. Also caught a glimpse of the Charging Bull, sometimes referred to as the Bull of Wall Street


Next I saw the Statue of Liberty from Battery Park. Being a Sunday the ferries were super crowded and even though I had a ticket, I just felt like avoiding the crowds.

At Battery Park is also a memorial for those who gave their lives in service of the Navy during the second world war


Next to Battery Park is the National Museum of the American Indian


From there I went to Central Park which is so majestic and beautiful. There are horse carriages to take you around as well as cycles. I walked around a little. It is tooo huge to cover in a day. This lush 843-acre patch of nature in the middle of Manhattan. The park is home to scenic hills; meadows; playgrounds; skating rinks; ball fields; and many well-known attractions, including Strawberry Fields, Belvedere Castle, and the Central Park Zoo. 


On my way back to the bus station, I passed by Radio City Music Hall where the Grammy’s and Tony’s are hosted as well America’s Got Talent and many other shows. You will also see the building which hosts Jimmy Fallon’s The Tonight Show.


Before I got into the bus station, I finally managed to get a clip of this big group of cyclists roaming the streets. I had crossed them twice during the day.


The Port Authority Bus Station is HUGE! I had to catch my bus back to Secaucus from here and what amazed me is that every bus number had their own little escalator to the waiting area for the bus.


And that is how I spent my Sunday at New York! :)

Moving on from Guilt

Over the course of our lives upto this point, we all have probably done a few things we regret. Mistakes are normal to human growth. Still, the guilt that creeps in and stakes out space in your consciousness can cause plenty of emotional and physical turmoil.

You might know guilt best as the nauseating twist in your stomach that accompanies the knowledge you’ve hurt someone else. Perhaps you also struggle with recurring self-judgment and criticism related to your memories of what happened and your fear of others finding out.

As an emotion, guilt has a lot of power.

Guilt helps you acknowledge your actions and fuels your motivation to improve your behaviour. It might also lead you to fixate on what you could have done differently. If you’ve never felt able to come clean about a mess-up, your guilt might feel magnified to an almost unbearable degree.

Though guilt can sometimes promote positive growth, it can linger and hold you back — long after others have forgotten or forgiven what happened.

Letting go gives us freedom, and freedom is the only condition for happiness. If, in our heart, we still cling to anything—anger, guilt, or possessions—we cannot be free.

Thich Nhat Hanh

If you struggle with letting go of feelings of guilt you’re absolutely not alone. Most of us have all been there and continue to harbour feelings of shame or guilt about things long in the past. In the spirit of moving forward, here are seven ways to move on from guilty feelings.

1. Address It Sooner Rather Than Later
The sooner we address what’s making us guilty, the less time it has to weigh us down. If the guilt is legitimate, and making amends is relatively easy then we should minimize the self-punishment phase and allow ourselves to move forward by apologizing.

2. Remember, No One Is Perfect
Remember that absolutely no one is perfect, and we all make mistakes. Don’t engage in days, weeks or months of self-blame or battering your self-esteem because you should’ve known, should’ve acted differently, or should’ve been an ideal person. You’re not, and neither am I. That’s just life. Once you’re tried your best to make amends, try to let it go and not be so hard on yourself.

3. Don’t Keep It To Yourself
Talking out your guilt or the incident that caused it with a relative/friend can be extremely therapeutic. Secrecy is the intensifier of guilt. Once you’ve bared something that you find troubling and discover that your friend isn’t nearly as shocked as you thought he or she would be, the guilt begins to drain away and you feel better.

4. Give Yourself A Reality Check
Make sure your guilt is actually legitimate and not coming from a standard or expectation placed on you earlier in life, or even over something that isn’t upsetting anyone else.

5. Write It Down
Try writing your feelings of guilt and shame down in a journal when you’re having trouble getting past them. Write down all of your thoughts and feelings honestly, then ask yourself some questions, like: Do I need to hold onto these thoughts and feelings anymore? How would changing these thoughts or feelings make a difference in my life? How is guilt holding me back?

6. Remember Your Self-Preservation Matters
Always remember that your self-preservation matters. Maybe you couldn’t make it to your friend’s party because you were just too swamped that week, or couldn’t make it to your family member’s 30th because airline tickets were just too expensive. You are entitled to look out for your self-interest just as much as anyone else, and sometimes that means saying no or disappointing others. Remind yourself that your actions are valid, and don’t let others guilt-trip you into believing otherwise.


While guilt can often help us learn a valuable lesson, other times it weighs on us way longer than it should, affecting our self-esteem and our ability to move on. If you’re having trouble letting go, try to remember that everyone has been there and no one is perfect!

WWDC 2022: What’s new in iOS, WatchOS, MacOS?

Each year Apple kicks off its Worldwide Developer Conference with a few hours of back-to-back-to-back announcements, generally covering things from iOS to watchOS to new hardware. Here are some of the key announcements made at the keynote on Monday.

iOS 16

  • The lock screen is getting an overhaul. It’ll allow for more customization, plus support for widgets — including widgets for third-party apps. Notifications will now “roll in” from the bottom of the screen, while a “Live Activities” API will let developers update notifications in real time (think sports score tracking.)
Image Credits: Apple
  • SharePlay (which lets you, for example, watch a streamed movie in sync with a friend) will now work in iMessage, not just over FaceTime.
  • Apple is getting into buy now, pay later; Apple Pay Later will let you split an Apple Pay purchase over four payments with zero interest; Apple says it’ll work anywhere Apple Pay works.
  • Apple’s big Maps overhaul is coming to a bunch of new places this year, including “France, Switzerland, New Zealand, Belgium, Israel, Liechtenstein, Luxembourg, Monaco, Palestinian Territories, Saudi Arabia and the Netherlands.” It’s also getting improved multistop route support.
  • If you use Family Sharing to limit your kids’ iPad screen time, said kids will now be able to request more time via iMessage.
  • Live Text will be able to translate and replace text it detects in a photo, allowing you to more easily read through something like a menu in a language you don’t know.
Image Credits: Apple
  • Apple says it has reimagined the Home app “from the ground up.” All of your various devices in different rooms are brought into one screen, including a side-scrolling view of all of your HomeKit-enabled cameras.
Image Credits: Apple
  • iPadOS will get a new desktop-style window management feature called “Stage Manager” that lets you run multiple windowed/overlapping apps on screen simultaneously.
  • CarPlay is also getting a massive overhaul — Apple is basically looking to take over your car’s entire instrument cluster. It’ll support things like speed readouts, fuel gauges, AC control, etc; what works where, of course, will depend on what the car maker allows. Apple says to expect more news here “late next year.”
Image Credits: Apple

Apple Watch

  • Four new watch faces: Astronomy, Lunar, “Play time,” and “Metropolitan.”
  • New “banner” notifications will keep you updated without always taking over the whole screen.
  • Apple Watch will be able to track a few new running metrics, including vertical oscillation (“how much you move up and down” while running), stride length and ground contact time.
  • The Fitness app on iOS will now be enabled even for those who don’t have an Apple Watch, so everyone can close those rings.
Image Credits: Apple
  • Sleep tracking will use the heart-rate monitor and accelerometer to determine how much time you spent in four different sleep stages (Awake/REM/Core/Deep) while trying to catch some Zzz’s.
  • Apple Watch will be able to track your “A-fib history” to help doctors monitor heart arrhythmia and determine if treatment is helping.

macOS

The next major release of macOS will be called “macOS Ventura.” Here’s what Apple highlighted for Ventura:

Image Credits: Apple
  • “Stage Manager” mentioned above is coming to macOS as well, pitched as a way to focus on one or two apps at a time. You can “group” running apps together; tapping into a group will minimize other apps, while putting the selected group front and center.
  • Spotlight is getting a bit of an overhaul; it’ll be able to pull rich results into a new scrolling view and allow you to do things like quickly preview a found file without actually opening it.
  • The Mail app is getting support for undo send, scheduled send and timed reminders. Search within Mail is getting smarter, automatically correcting for typos and knowing how to search for synonyms.
  • Safari will now be able to use “passkeys” instead of passwords — a system built along with Google and Microsoft to allow you to log in to websites and apps with biometrics (like fingerprint sensors or facial recognition) without any text-based passwords in the mix.
  • Continuity Camera: Your iPhone’s camera is almost certainly much better than the one built into your laptop — so Apple is going to let you use your iPhone’s Camera for video calls on macOS. Clamping the iPhone onto your laptop looks a little goofy, but the impact on quality is probably worth it for important calls. There’s also a wild “desk view” feature that uses the iPhone’s wide angle lens, combined with some tricky image manipulation, to capture what you’re doing on your desk in a simulated overhead view.
Image Credits: Apple

Airbnb Moves from Webpack to Metro for Faster Builds

Like many companies, Airbnb has experienced growing pains with bundlers as its codebase grew. But even after its codebase quadrupled, the company was able to speed UX changes to the front end when it migrated its JavaScript code bundler from Webpack to Metro in 2018.

With build performance significantly improved, UI changes appeared 80% faster, as per the Time to Interactive (TTI) metric. Even the slowest production build, one compiling 49,000 modules (JavaScript files) is now 55% faster — down to 13.8 minutes from 30.5 minutes with Webpack. 

Airbnb’s own Page Performance Scores also improved (~1%) with those pages built with Metro.

For reference, after the codebase quadrupled around 2018, the average page refresh time for a simple one-line code change was anywhere between 30 seconds to two minutes depending on the project size.  

Airbnb software engineer Rae Liu covered some of the differences between Webpack and Metro and discussed some of the migration challenges which are summed up below.

What Is Metro?

Developed by Meta, Metro is the open-source JavaScript code bundler for React Native. As Airbnb’s stack doesn’t include React Native, their engineers worked directly with Metro’s engineers at Meta as well as on teams themselves to further develop the technology.

Metro breaks bundling down into three steps in the following order: resolution, transformation, and serialization.

  • Resolution: resolve the import/ require statements
  • Transformation: transpile code (source to source compiler which converts modern Typescript/ JavaScript source code into JavaScript and backwards compatible with old browsers), an example tool is babel 
  • Serialization: combine the transformed files into bundles

In development, Airbnb engineers created a Metro server with custom endpoints to handle building dependency graphs and source maps, translation, and bundling JS and CSS files. For production builds, they ran Metro as a Node API to handle resolution, transformation, and serialization. 

The migration took place in two phases. The first priority was the Metro development server as the slow Webpack development server was the source of significant development productivity costs. The second migration phase focused on bringing Metro to feature parity with Webpack and running an A/B test between Metro and Webpack in production.

Key Differences Between Metro and Webpack

Process JavaScript Bundles On Demand

Webpack pre-compiles the entire project on startup while Metro only compiles what is needed. What does this mean? A JavaScript bundle is technically just a serialized dependency graph, where an entry point is the root of the graph. 

At Airbnb, every frontend project has a Node server that matches a route to a specific entry point. When a web page is requested, the DOM includes script tags with the development JavaScript URLs. Webpack needs to know all the entry points for all the pages before it can start bundling while Metro only needs one entry point and can process JavaScript bundles as requested.

Unseen in the following image, a developer makes a change to Page A:

In both 1a and 1b in the diagram above the browser loads Page A (1) the requests the entryPageA.js file from the bundler (2)  and the bundler responds to the browser with the appropriate bundles (4). The difference between figures 1a and 1b lies in action (3) as the Webpack diagram compiles entry points for pages B and C while Metro does not as the developer-only modified Page A in the example. 

One of the largest frontend projects at Airbnb has 26,000 unique modules with the median number of modules per page being ~7.2 modules. The number of modules Airbnb ultimately has to process doubles to roughly 48,000 due to their use of server-side rendering. After putting Metro’s compile-on-demand model into action, approximately 70% is now taking place.

Multilayered Cache

Airbnb leverages Metro’s Multilayered Caching feature with persistent and non-persistent caches. Metro does provide more caching flexibility by allowing engineers to define the cache implementation, including mixing different types of cache layers.  

Airbnb ordered their caching layers by order of priority. If a result is not found in one cache layer, the next layer will be used until the result is found. Compared with the default Metro implementation without a cache, hitting a remote read-only cache resulted in a 56% faster server build in a project compiling 22,000 files. 

The third caching layer is a remote read-only cache rather than a read-write cache as writing to a remote cache incurs costly network calls especially on a slow network. This decision saved an additional 17% build time in development.

Webpack does have a caching layer though it does differ from what Metro offers.

Bundle Splitting

One of the technical challenges detailed in Airbnb’s blog post is Bundle Splitting. This is the process of splitting the bundles by dynamic import boundaries also known as code splitting. The out-of-the-box Metro solution produced giant ~ 5MiB bundles per entry point which were taxing on browser resources, network latency, and unable to HTTP cache.

In the image above, import(‘./file’) represents the dynamic import boundaries. The bundle on the left-hand side (3a) is broken down to three smaller bundles on the right (3b). The additional bundles are requested when the import(‘./file’) statements are executed.

Suppose fileA.js  changed, the entire bundle needs to be re-downloaded for the browser to pick up the change in fileA.js. With bundles split by dynamic import illustrated in Figure 3b, a change in fileA.js only results in the re-downloading of the fileA.js bundle. The rest of the bundles can reuse the browser cache.

In production, there is no development server and the bundles are prebuilt. Airbnb engineers took some inspiration from Webpack’s bundle splitting algorithm and implemented a similar mechanism to split the Metro dependency graphs. The resulting bundle size decreased by ~20% (1549 KB –> 1226 KB) on airbnb.com as compared to the development splitting by dynamic import boundaries.

Development bundles were optimized differently as it takes time to run the bundle splitting algorithm and the engineers didn’t want to waste time splitting bundle size in development. In the instance of development, page load performance was prioritized over minimizing bundle size.

The Metro and Webpack bundle size metrics are comparable.

In Conclusion

The biggest Airbnb frontend project compiling ~48,000 modules (including server and browser compilations) saw a drop in the average build time by ~55% from 30.5 minutes to 13.8 minutes. Airbnb Page Performance Scores improved around 1% for pages built with Metro which was a nice surprise as the goal was a neutral result. Overall, the implementation of Metro is widely successful. 

Metro has solved the bundling issues Airbnb was facing but the engineers also recognize that new technologies have emerged since their decision to move forward with Metro and that Metro isn’t a general-purpose JavaScript bundler. 

Success & Growth Look Different for Everyone

My wife loves plants and when I saw this quote I recalled a lot of what I see in our garden. Some plants grow outward first while other spend months growing roots before they are able to show any fruit.some plants grow outward first while other spend months growing roots before they are able to show any fruit or flowers or growth.

In the end both grow, but the process could not be more different.

It can be super easy to compare one persons growth to another, to see the one plant that already has fruit and say it is doing better than the other plant. Yet just below the surface the other plant is doing just as well, the one difference is that you cannot see it.

We have to remember everyone defines success and growth differently – and that’s more than okay, it’s necessary!

What do I mean that success looks differently to everyone and that it’s necessary? It means, if you’ve accomplished your purpose and worked diligently at whatever you do, you are successful.

For some of you this means being a full-time mom or dad. For others, it means your family made it through the week, and you spent time teaching your children life skills, like being kind. For some of you, it means you made our streets safer or you provided healthcare in an emergency or you served a customer well.

Success has many faces. Too often, we let comparison get in the way of celebrating our own successes. We spend our days looking at others and thinking, “If I did that, I’d be successful,” or, “Wow, I should be doing more with my life. Look at so and so.” Comparison only takes us backwards though. It chokes us and keeps us from seeing the individual gifts we bring to the world around us.

How do we move past comparing ourselves to others? Here are some practical things you can do:

1) Make sure you know your values. When you measure yourself against what you value, you have a solid, non-moving goal. If my values include helping others, then I can evaluate if I did that today. Did I help someone today? Then it was a successful day. Our values provide an impartial measurement tool for us.


2) When you are tempted to compare your success to someone else’s, evaluate the cost of their success. We usually only look at the benefits of success in other people’s lives and neglect the costs. For example, some may look at an air hostess and say, “You get to travel to really great places.”

And, yes, he/she do. However, if you were to evaluate the costs of their travel, you would learn that they often end up with a migraine from the pressure changes in the plane. That’s a cost. It impacts their off day home and leaves them ineffective for their family who has missed having them home. We don’t often advertise the costs associated with success, but I guarantee everyone has costs they pay for their particular success.


3) Remind yourself everyone has a purpose in life. Sometimes the purpose is glamorous, other times someone’s purpose may not be glamorous, but their purpose is essential. Think of the number of administrative assistants in the world who may not lead glamorous lives, but who make our worlds go around! Without them, we’d be nothing. We may not count that as success, but it’s more than success. It’s essential for others to accomplish their purposes.


Everyone has value. Everyone has purpose. Most often, it’s our perspective that’s off-base. This week as you are tempted to look at someone else’s success, keep these things in mind. Most importantly, evaluate your own success in light of your impact on those around you. After all, that’s what really matters.

Change Your Story

We often limit ourselves by deciding we can’t do something before we even try.  These limiting beliefs may lead us to ask ourselves, “Why bother?” or tell ourselves, “This is silly.” When we do this, we are effectively telling ourselves the answer is “no” before we even ask the question. When we do that, we’ve stopped our growth and our path to success.

This negative self-talk is a clear sign that you need to rewrite your story. Our story affects what we do, where we go and how we approach life. A powerful story leads to a life of opportunity – change your story, change your life. The first step in changing your story is to stop telling yourself disempowering ones.

How many times have you said something like this to yourself?

I have to be perfect… I’m too old… I’m just not that kind of person.

These are exactly the type of damaging thoughts that keep us from achieving our goals and, ultimately, our dreams. By addressing the following damaging thoughts head-on and treating ourselves with kindness instead of doubt, you can change your mindset and learn how to change yourself.

The stories we tell ourselves make up our identity and dictate what we believe we can and cannot do. Here are some common stories that you tell yourself that limit your opportunities for growth and indicate it’s time for you to rewrite your story:

“I have to be perfect.”

Perfection is the lowest standard anyone can have – it leaves no room for growth. While completing a task perfectly may feel good for a little while, it’s through our mistakes that we develop our greatest strengths and find life’s impactful lessons. If you have done something perfectly, you haven’t really learned anything – how to do this task better, for example, or what to avoid. By telling yourself you have to be perfect, you’re putting limits around your own capabilities. When you want to learn how to change your life around, you have to give up perfection.

Rather than striving for perfection, strive for a balanced life. Accept that you will make mistakes and when you do, use them as a starting point to realize your next level. Trying to be perfect stems from one’s fear of failure. Instead of being afraid to fail, pursue your passion no matter the outcome.

Take the opportunity to learn from your mistakes: find the cause of your problem and eliminate it. Don’t try to be perfect; just be an excellent example of a human.


“My life is harder than anyone else’s.”

Everyone is fighting their own battle. It’s how you choose to handle difficulty that determines how to change your life around.

Look at the success stories of Oprah and Tony Robbins, and the hardships they overcame to achieve a life of greatness. As Tony says, “Identify your problems, but give your power and energy to solutions.”

A hard life doesn’t prevent you from success unless you tell yourself it will. There are plenty of examples of those who overcame seemingly overwhelming obstacles to achieve greatness, and just as many examples of those born with all the advantages in the world who failed to have fulfilling lives. When it comes to rewriting your story, you must let go of the past.


“If I ignore it, it will go away.”

If you want to learn how to change yourself, you must see things as they really are. Reality always catches up with us. While we can sometimes pretend they aren’t there, our problems will always be waiting for us when we return. It’s only when we choose to face them head on that they truly go away.

Our goal is not to ignore the problems of life, but to put ourselves in better mental and emotional states to not only come up with solutions but really meet the challenges and take action. Take a good look at yourself and where you are in life and the choices you have made that have brought you to this point. This is not an opportunity to beat yourself up. Rather, it’s a chance to take inventory and understand what you need to change in order to rewrite your story.


“I’m too young, or I’m too old.”

Do you think you’re too old to learn how to change your life around?

Here’s the truth: Your age only limits you if you allow it. Create a vision and never let your environment, other people’s beliefs or the limits of what has been done in the past shape your decisions. Ignore conventional wisdom.

When you look at a possible lifespan of up to 120 years if you live right, trying to rewrite your story at age 60 suddenly seems very plausible. You can do whatever you desire at any age – as long as you believe it to be true and put in the work to make it a reality.


“I’m just not the happy type.”

By telling yourself that you aren’t “the happy type,” you’re making yourself unhappy. Happiness is a choice we make – it is a state we can become through our actions. The path to happiness is more than material items and superficial things. Rather, happiness is an all-encompassing way of being. When you change your thoughts, you learn how to change your life – that is, when you choose to be happy, your negatives shift to positives.


As achievers we all seek greatness, but is there something holding you back from your next level of success and fulfillment?

Stop Trying to Change People Who Dont Want to Change

Its hard to watch a friend or family member struggling with a problem or making bad decisions. You naturally want to help. You want to make the lives of your friends and family members easier and more joyful. You want to fix their problems and relieve their suffering.

Trying to keep a loved one out of harms way seems like a good idea, except that it doesnt work when they dont want your help.

Not everyone wants to change (or not in the way you think they should) and thats their prerogative. Despite your desire to help, you cant make people change and you cant fix their problems (even when you have great ideas and their best interest at heart!). You simply cant fix or solve other peoples problems and trying to do so often just makes things worse.

If you’re frequently frustrated that someone doesn’t take your advice or want your help, you’re tired of nagging, or you feel like you’re talking to a brick wall, you may be trying to help someone who doesn’t want to change.

Identify which part of the problem is in your control

Most people accept the notion that they cant control other people or solve their problems. But we get sucked into trying to change and fix because were confused about whose problem it is. Sometimes our desire to help, protect, and be the hero clouds our judgment. And sometimes we think we know whats best and foist our ideas upon others regardless of what they want.

We tend to think that problems that affect us are ours to solve. This false belief leads us down a futile path of trying to control things that arent in our control. For example, just because youre affected by your spouses unemployment or your teenagers smoking, doesnt mean these are problems you can solve. You cant get a job for your spouse nor can you make your child quit smoking. However, if your spouses unemployment has left you in debt and feeling anxious, stressed out, or angry, those are problems you can do something about.

And yet, some of us persist in trying to fix or change other people and their problems. This is classic codependent behavior. We abhor having things out of our control. It reminds us of bad things that have happened in the past. And we get anxious and afraid of the catastrophic things we anticipate happening if we dont step in and try to change things.

Accepting whats out of our control and that we cant solve other peoples problems doesnt mean were powerless. Quite the contrary; it allows us to put our energy into identifying what aspects of a problem we can solve and to change the things we can.

Trying to solve other peoples problems often makes things worse, not better

Not only is it impossible for us to solve other peoples problems, we can inadvertently cause a host of fresh problems when we try to help people who dont want to change (in the way we think they should).

To be honest, I often wish that I could solve other peoples problems. But it always ends badly when I try. I get bossy, give unwanted advice, and act like I have all the answers. Its definitely not something Im proud of and I imagine at least some of you can relate.

Sometimes, its downright presumptuous for us to assume that we know what someone else needs or wants. Our efforts to help may actually be conveying this harmful message: I know how to solve your problems better than you do. I dont trust your judgment or abilities. Youre incompetent or unmotivated.

Its not helpful to try to solve other peoples problems because:

  • Nagging and giving unwanted advice leads to more stress, conflict, and negatively impacts relationships
  • When we try to fix, change, or rescue, we assume that we know whats best. We take on an air of superiority and can act condescending
  • Making decisions for others takes away their autonomy and their opportunity to learn and grow
  • We become frustrated and resentful that our efforts to solve other peoples problems dont work and that they arent appreciated
  • We get distracted from solving our own problems. For some reason, fixing other people always seems easier than fixing ourselves!

Instead of doing things for other people, we need to allow them to live their own lives, make their own decisions and mistakes, and deal with the consequences of their choices. Not only does this free us up to focus on what we can control, it respects other peoples autonomy.

How to stop trying to fix, change, or solve other peoples problems

Before launching into fix-it mode, try asking yourself these questions:

  • Is this my issue or problem or is it someone elses problem thats affecting me?
  • Is this a problem I can fix or change?
  • Is changing this person or situation in my control?
  • How can I redefine the problem so that Im focusing on whats in my control?
  • Do I have any influence?
  • Did they ask for my help or ideas?
  • Am I forcing my solutions and ideas onto someone?
  • Am I helping or enabling? Whats the difference?
  • Why am I trying to solve this problem?
  • Is this actually an attempt to manage my own fears and anxiety about what may happen? And if so, how else can I deal with uncertainty and feeling out of control?

If youve been trying to fix or change people for years, it will take time and effort to change these patterns. In addition to being patient and compassionate with yourself along the way, try to focus on whats in your control and the problems that you can solve. Remember, if youre feeling particularly frustrated with your inability to change or solve a problem, you may be trying to solve someone elses problem.

.NET MAUI Reaches General Availability, Replacing Xamarin.Forms

Microsoft’s evolution of Xamarin.Forms, .NET Multi-platform App UI (.NET MAUI), has finally reached General Availability status, providing one framework for both mobile apps and, now, desktop apps.

Announced at the company’s big Build developer conference, the GA release is some six months late, as it was originally planned to debut with .NET 6 in November 2021 but “slipped the schedule.” So the dev team has been playing catch up with a series of previews and three Release Candidates, the latter just shipping a couple weeks ago. With this the conversion from Xamarin.Forms to .NET MAUI is basically complete. Xamarin support will continue through November 2023.

“.NET Multi-platform App UI (.NET MAUI), now generally available, is a new framework for building modern, multi-platform, natively compiled apps for iOS, Android, macOS and Windows using C# and XAML in a single codebase,” Microsoft said. “The framework solves the challenges developers face when building native apps across many operating systems. Instead of having to learn multiple technology stacks, .NET MAUI abstracts them into one common framework built on .NET 6.”

As a jack-of-all-trades tool (except for Linux and web), .NET MAUI uses native UI via app toolkits provided by each platform, and the dev team ships workloads to create applications that exclusively target Android, Android Wear, CarPlay, iOS, macOS, and tvOS directly using the native toolkits from .NET, and the supporting libraries AndroidX, Facebook, Firebase, Google Play Services and SkiaSharp, for examples.

What’s more, .NET MAUI can incorporate web components built with Microsoft’s Blazor framework for creating web apps primarily with C# instead of JavaScript. .NET MAUI features the BlazorWebView control, which permits rendering Razor components into an embedded Web View. By using .NET MAUI and Blazor together (Blazor Hybrid apps with .NET MAUI), developers can reuse one set of web UI components across mobile, desktop and web. As shown in the graphic below, .NET MAUI Blazor App is now a Visual Studio 2022 project type.

“Native apps look and feel like the operating system on which they belong by default and layouts are fully adapted to each device automatically, with no additional code,” Microsoft said this week. “APIs are available directly from C# to access over 60 platform features, including isolated storage, sensors, geolocation and camera. Visual Studio 2022 includes Hot Reload technology to make developers much more productive building .NET MAUI apps. Developers can also take advantage of the latest debugging, IntelliSense and testing features of Visual Studio to write better code faster.”