Mario Cardinal

"The real voyage of discovery consists, not in seeking new landscapes, but in having new eyes" – Marcel Proust


Leave a comment

Mounting (with the Cypress Component Testing Tool) a Vue component requiring Vuetify

I’m writing this post to make sure that a recipe on mounting (with the Cypress Component Testing Tool) a Vue component requiring the Vuetify framework is documented somewhere on the web. Thus, with the help of Google search, those who will have the same goal in the future will find the right answer easily.

Cypress is a front-end test automation framework built for the modern web. It is a very powerful tool that enables developers to write End-to-End as well as Rest APIs tests entirely in JavaScript, directly accessing everything within the browser. At To-Do Studio, we use Cypress with success.

In the last year, Cypress added the ability to automate testing of Vue or React components. Besides the automation, what is very interesting is that with a little ingenuity we can also use Cypress to obtain a playground to visualize the rendering of the components. I saw not only the ability to automate but also an opportunity to replace Storybook for component visualization.

However, the challenge when you want to use the Cypress component testing tool with Vue is that some frameworks such as Vuetify require a global vuetify object on the Vue instance as well as all components to be wrapped in the VApp component, otherwise it triggers warnings in the simplest cases and doesn’t work at all in more complex situations.

Unfortunately, the documented way on mounting a Vue component does not work with Vuetify.

While waiting for a more elegant solution from Cypress and Vuetify here is what we use as a workaround:


// Spec File with VBtn as component: xxx.spec.ts
import { mount } from '@cypress/vue';
import { VApp, VBtn } from 'vuetify/lib';
import vuetify from '../plugins/vuetify';
import i18n from '../plugins/i18n';

describe('Cypress CT with Vuetify', () => {
  it('playground', { viewportWidth: 360, viewportHeight: 667 }, () => {
    mount({
      vuetify,
      render: h => h(VApp,
        [
          h(VBtn, { props: { color: 'primary', height: '40', width: '250' } },
            [
              'Button Title',
            ]),
        ],
      ),
    }, { extensions: { plugins: [vuetify, i18n] } });
  });
});

and here is the Vuetify plugin:


// Vuetify plugin: ../plugins/vuetify.ts
import Vue from 'vue';
import Vuetify, {
  VApp, VBtn,
} from 'vuetify/lib';
import 'roboto-fontface/css/roboto/roboto-fontface.css';

Vue.use(Vuetify, {
  components: {
    VApp,
    VAppBar,
  },
});

export default new Vuetify({
  icons: {
    iconfont: 'mdiSvg',
  },
  customProperties: true,
  // add theme...
  // add breakpoint...
});

To give you a glimpse of how we use it in real life scenario at To-Do Studio, here is a sample of a real spec file:


import { mount } from '@cypress/vue';
import { VApp } from 'vuetify/lib';
import vuetify from '../plugins/vuetify';
import i18n from '../plugins/i18n';
import THeader from './THeader.vue';

describe('THeader', () => {
  it('playground', { viewportWidth: 360, viewportHeight: 667 }, () => {
    const user = null;
    const studioId = '00000000-0000-0000-0000-000000000000';
    const activeStudios = [ ];

    mount({
      vuetify,
      render: h => h(VApp,
        [h(THeader, {
          props: { routeName: 'studio-tips', studioId: studioId, activeStudios: activeStudios, user: user },
        })]),
    }, { extensions: { plugins: [vuetify, i18n] } });
  });
});


Leave a comment

Renew as a Microsoft MVP

mario-mvp-2021Again this year, I received recognition from Microsoft for helping others get the most out of technology, sharing my passion and real-world knowledge of Microsoft products with the community. It has now been seventeen consecutive years that I have received Microsoft’s Most Valuable Professional (MVP) award.

As usual, I am receiving this award mainly for my outstanding contribution as host of the Visual Studio Talk Show podcast. This French-language podcast, where we discuss software architecture, began in November 2004 (Yes! 17 years ago). With the help of co-host Guy Barrette, we publish a show with a French-spoken technology expert on a monthly basis.

Here is a listing of the podcasts we published lately:

September 7, 2021 0259 – Regis Freyd – Github Copilot
August 9, 2021 0258 – Andre Girard – Bicep
July 1, 2021 0257 – Hamida Rebai – Applications Cloud Native
June 8, 2021 0256 – Adil Touati – Securite Kubernetes
May 7, 2021 0255 – Tidjani Belmansour – Azure Communication Services
April 14, 2021 0254 – Maxime Coquerel – SecOps
March 11, 2021 0253 – Dominique St-Amand – Profession developpeur(e)
February 1, 2021 0252 – Marc Gagnon – Unity
January 8, 2021 0251 – Joel Quimper – Microsoft Graph
December 1, 2020 0250 – Miguel Bernard – Nouveautes .NET 5 et C# 9
Nov 3, 2020 0249 – Patrick Belanger – Zone to Win


Leave a comment

Learning From Scott Hanselman

Yesterday I was reading “3-2-1,” the weekly newsletter from James Clear, the author of Atomic Habits, and found this quote on learning using peers.

It’s almost always better to learn from peers who are 2 years ahead of you than mentors who are 20 years ahead of you. Life evolves and most insights get outdated — James Clear

I identify with this quote a lot because in my professional life I have learned a lot from my peers. Among other things, by following Scott Hanselman’s career for more than 20 years. Scott is a programmer, blogger, podcaster, youtuber, teacher, and prolific speaker. He works in Open Source on ASP.NET and the Azure Cloud for Microsoft out of his home office in Portland, Oregon. He is a fascinating person. By sharing his experience with technology, Scott has deeply influenced the programmer that I am.

Does this mean that young people should ignore the words of people with 20 years of experience who are old enough to become mentors? Not in all cases. Yes, there are times when some mentors fall victim to a bias towards outdated ideas and are out of touch with the reality of the 21st century, but fortunately there are exceptions. The same Scott Hanselman from whom I have learned so much is one of those exceptions. Scott is still up to date with modern reality. Therefore, he is a fantastic mentor for young people.

Recently, Scott had the pleasure of speaking with the Microsoft Learn Student Ambassadors about what’s beyond mentorship.

During this talk, after reaffirming the importance of diversity, Scott reminds us that mentoring is the reverse of the technological priesthood by not being a gatekeeper preventing access to information. Mentorship is the recurring act of sharing your energy to create a mirror for others. He offers four simple practices for easily mentoring:

  1. Put out good work
  2. Don’t waste your keystrokes
  3. Share your experience
  4. Be kind

He also suggests going beyond mentoring by positioning it as a special case of sponsorship that relies on storytelling.

According to Scott, getting old is a privilege. The power of being old is the ability to have failed safely for a long period of time, continuously learning. Confronted with this learning process, we are all amateurs, there are no professionals. He asked deep question such as: Do you want 20 years experience? Or the same year’s experience, 20 times?

Even though it is aimed at young people, I really enjoyed this talk.

In conclusion, it is not about choosing between learning from your peers or learning from a mentor but rather combining the two when appropriate.


Leave a comment

Make ‘To-Do Studio’ Works and the 80-20 Rule

For those who follow this blog and my entrepreneurial journey, you know that for several years now, I have been building a SaaS called To-Do Studio. To-Do Studio’s mission is to provide a collaboration platform that drives everyone to get involved.

For several months now, my only focus has been to make to-Do Studio works (which is why I haven’t published much on this blog lately). Day after day, month after month, with my business partner Erik, we fine-tune our software to accurately deliver what it promises.

The challenge is twofold, not only must the software be a viable solution that drives everyone to get involved, but also the product must be simple and easy to understand so that team leaders can easily adopt it.

Software Development and 80-20 Rule

Last summer, we thought we were close to the launch. We had an 80% advanced version, ready to start testing with real users. Unfortunately, finishing the last 20% was difficult. We’ve learned the hard way that in terms of the volume of work, getting the product to work “for real” and validating that it delivers on the expected promise is usually the most time-consuming and labor-intensive task. In our case, it will have taken us almost a year.

It’s difficult because the complexity grows exponentially. Each new line of code (whether to supplement or rewrite a feature) must fit together and mesh consistently with existing code. In addition, more often than not, the code must be adjusted to stay up to date with developments in external components and libraries. This slows down the velocity. The more we advance, the more the efforts increase. This is why the last 20% remaining often represents more than 80% of the total effort.

80-20The 80-20 rule is known as the Pareto principle. Pareto principle is an adage which asserts that 80% of outcomes (or outputs) result from 20% of all causes (or inputs) for any given event. In general, a goal of the 80-20 rule is to identify inputs that are potentially the most productive and make them the priority (80% of results come from 20% of effort).

More generally, the Pareto principle is the observation that most things in life are not distributed evenly. In our case, the distribution is reversed because we are interested in 80% of the effort required to achieve the remaining 20% (20% of remaining results come from 80% of effort).

Diet and 80-20 Rule

We can apply the 80-20 rule in several situations. For example, since several months now, I have been following a diet that applies the 80-20 rule. It is based upon the old Confucian practice called hara hachi bu: Stop Eating When You’re 80% Full. Instead of consuming more than 2500 calories as I used to do, now I consume between 2000 and 2100 calories per day (I am allowed to eat more the day I exercise). It works. I lose an average of 1 pound per week. Soon, I will achieve my goal of regaining my healthy weight.

Energy Principle and 80-20 Rule

Justin Jackson, co-founder of Transistor.fm wrote about 80-20 rule lately in this blog post entitled The 80% Energy Principle. He applies the 80-20 rule not only to the diet but to all areas of his life, seeking to consume no more than 80% of his energy.

I totally agree with Justin. Now that I am getting older and looking for balance, I try to stay at a level of 80% full in every areas of my life: work, home, family, community, finance or personal well-being.


Leave a comment

The importance of reading

Like a long and winding river, the journey to launch To-Do Studio continues at a good pace. We are still finalizing the Alpha tests. It is a journey full of teaching and learnings. In December, I promise a blog post to share the latest results of all these learnings. Stay tuned!

For today, I propose a brief parenthesis, a reflection on the importance of reading.

The human being who is not used to reading is imprisoned in his immediate intimacy, in a limited creativity that he can only develop with his own knowledge. His life falls into an abyss where he is limited to contact and conversation with a few friends and acquaintances, and he only sees what is happening in his immediate vicinity. The same type of isolation imposed on us by the algorithms of social networks. The isolation that prevents us from valuing the humanity that unites us all.

reading

But the moment he takes a book and enters into a relationship with an author, he immediately come in touch with a new intimacy. And if it’s a great book, it immediately connects with the best of the human race. The author trains him and takes him to a different place and age, relieves him of his existential questions, or discusses with him a particular line or aspect of life that the reader knows nothing about. What’s more, great writers who have come before us bring us into communion with the past, and as you read them, the reader begins to imagine what the life of this former author was like and what type of person he was…

Now, to be able to live a few hours in a different world through reading and to turn away from the pretensions of the immediate present is, of course, a privilege of great value. This is even more true in these times of pandemic.


Leave a comment

Renew as a Microsoft MVP

Today, while processing my email on this beautiful Canada Day, I was happy to find my MVP renewal among the many messages in my inbox.

mvp-2020For sixteen consecutive years, I am the proud recipient of the Most Valuable Professional (MVP) award from Microsoft. MVP status is awarded to credible technology experts who have demonstrated their deep commitment to helping others make the most of their technology, voluntarily sharing their passion and real-world knowledge of Microsoft products with the community. As usual, I am receiving this award mainly for my outstanding contribution as host of the Visual Studio Talk Show podcast. This French-language podcast, where we discuss software architecture, began in November 2004 (Yes! 16 years ago). With the help of co-host Guy Barrette, we publish a show with a French-spoken technology expert on a monthly basis.

Here is a listing of the podcasts we published lately:

Monday, June 8, 2020

0244 – Karol Deland – Team Topologies
Tuesday, May 5, 2020

0243 – Serge Tremblay – Microsoft Teams et la pandémie
Sunday, April 19, 2020

0242 – Luc Labelle – La plateforme Power Apps
Tuesday, March 3, 2020

0241 – Etienne Tremblay – GitHub Actions
Thursday, February 13, 2020

0240 – Anthony Giretti – Le protocole gRPC
Thursday, January 9, 2020

0239 – Chantal Bossé – Mieux présenter
Wednesday, December 4, 2019

0238 – Guy Barrette – Kubernetes
Monday, November 4, 2019

0237 – Spécial Certification
Tuesday, October 15, 2019

0236 – Nicolas Georgeault – Microsoft Teams
Saturday, September 14, 2019

0235 – Michel Perfetti – Azure DevOps
Friday, August 2, 2019

0234 – Jerome Laban – La plateforme UNO


Leave a comment

The most useful form of patience is persistence

Covid-19 has no borders and is spreading at lightning speed. In these times of crisis and confinement, patience is essential. The eminent leader of Indian nationalism, Mahatma Gandhi, known for promoting nonviolence compares the act of waiting to a fight: “To lose patience is to lose the battle”. Leo Tolstoy, the Russian writer who is regarded as one of the greatest authors of all time, known for “War and Peace” compares patience to a warrior: “The two most powerful warriors are patience and time“.

Today, I was reading “3-2-1”, the weekly newsletter from James Clear, the author of Atomic Habits. There was an insight connecting patience and persistence which I found very appropriate.

“The most useful form of patience is persistence. Patience implies waiting for things to improve on their own. Persistence implies keeping your head down and continuing to work when things take longer than you expect.” — James Clear

Patience, persistence and positivity are the three keys to living better. It’s the easiest way to reach your goals and succeed! Life is a journey and you cannot rush success. This is true in all areas of our lives, even more so when you are a start-up entrepreneur.

coding1-500x400

It has been several months since I provided any status on the progress of To-Do Studio. I know that many of you are eagerly awaiting the Beta version of the product. Your patience will soon be rewarded. Me and my business partner, we keep our heads down and keep working even if there is a pandemic and things take longer than expected. Less than ten weeks to wait. Soon we will announce the Beta program.


Leave a comment

Les soeurs Boulay

I am one of those individuals who love listening music while working at their computers. The music I listen is a happy mix between safe values and new things. Among the new releases of recent months, there is the latest album by Jean-Michel Blais, Bruce Springsteen or Patrick Watson which I often listen to repeatedly. However, the album I listen the most is the latest album by the Boulay sisters.

I knew their first albums but I was not a fan. I appreciate the harmonies of their voice but the texts spoke little to me. So I started listening to the album “La mort des étoiles” with little expectation. I enjoyed the first listening, I listened to a second time, a third, fourth, nth time and as it does not happen very often I was moved.

soeurs-boulayThis album speaks to my soul, elevating me to the point of vertigo. Ecoanxiety – “because there is no other option” -, after #metoo, feminism, all these concerns are reflected in this generous disc crossed by love and beautiful light. Ample and generous, “La mort des étoiles” is carried by fabulous harmonies and neat melodies, gravity, but also lightness, and half of the songs include arrangements of strings.

The Boulay sisters are really my favorite of the year 2020. So much so that I went to see them live tonight at “Théatre de la ville” in the city of Longueuil. And I was not disappointed. A great performance. Listen to their album, go see their show, you will be pleasantly surprised.


Leave a comment

Aim for a market where customers are currently spending money

For those of you who are following my entrepreneurial journey, you know that we are now in the process of programming the first version of our task management software. I have written in the past that every step brings a lot of challenges and that the work is always longer and more difficult than expected. For example, even if we did not finish developing all the basic features, we recently managed to integrate a first implementation. This first integration is an important milestone because it allowed us to evaluate the work done in a real context of use. In return, it also allowed us to quickly discover several things that are wrong and need to be reworked. So, even before we finished all the basic features, we had to reprogram some components.

My close ones, who are unfamiliar with software development, are always surprised at the slow progress and delays caused by the work that often need to be redone. They are afraid that delays will give competitors the chance to improve their products and that we lose our competitive advantage. They are fearful that the task management software market will evolve to now offer the ability for teammates to work in tandem with an automated assistant.

In my opinion, it is a minimal risk. And if this ever happens it will not be dramatic because our implementation will be different. In addition, it will not be the end of our product because, in my opinion, the task management software market is large enough for hundreds of competitors.

I do not want to downplay the importance of having a competitive advantage but, in my opinion, when a startup tries to validate its Product/Market fit, the choice of the market is much more important than anything else.

Remember that, according to our market positioning statement, the To-Do Studio customer is a modern leader searching for a task management software that guides and directs teamwork (throughout the process). Is this a good market for a new entrant? It depends on the amounts currently spent by actual customers.cash-payment

According to analysts, for the year 2019, the worldwide size of the market for task management software is equivalent to 2 billion USD ($ 2,000,000,000). Plus, it’s a growing market. According to Reportlinker, the size of the global task management software market is expected to reach 4.33 billion USD in 2023, with an annual growth rate of 13.7 percent. Another source, Transparency Market Research, estimates that the market will reach 6.68 billion USD in 2026. This is a huge market that is perfect for a new entrant like us. There are many customers already looking for, trying and buying solutions that fulfill a function like the one we plan to offer.

Delays are inherent in software development. We must accept them with serenity. The important thing is to move forward each day, step by step, towards the right target, a market where customers are currently spending money on a similar but less innovative solution than yours.


1 Comment

Enjoying the journey

It’s been eight (8) months since I left my job to focus all my efforts on developing To-Do Studio. Fortunately for me (and my sanity), I really appreciate my entrepreneurial journey. Having fun to pursue your business project is a necessity for any entrepreneur. This is the only option to persevere in the face of adversity. And adversity, there is. At each stage there are issues that make the work longer and more difficult than expected.

planandrealitiesFor example, recently, the programming of multiple identity support (OAuth 2.0 authentication) was much more complex than we had planned. Since it is very common for an individual to have multiple e-mail addresses, whether for personal needs or work, our service had to provide the ability for users to associate multiple identities to their unique account. This support allows a user to find all the workspaces to which he collaborates, regardless of the identity with which he is known by teammates (personal email or email from the employer). This is important because To-Do Studio wants to provide a global view that includes all facets of your life. We want to avoid multiple ‘sign in’ and ‘sign out’ repeatedly between different accounts. Multiple identities within a single account is a feature not much found in competing products such as email, calendar, to-do list, kanban board, or Excel spreadsheet. One of the reasons for this absence is surely the fact that it is not easy to implement.

With my business partner Erik Renaud, we managed to overcome this complexity by constraining ourselves to complete one goal at a time and setting a measurable goal with a short deadline.

The importance of completing one goal at a time

For several months, my work has come down to front-end programming with the Vue framework and Vuetify design system. It is a long-term job that requires many hours of programming. Every week, I work around fifty hours to advance my entrepreneurial project. Choosing your weekly goal is very important. I make sure I work on only one goal at a time and I do not start working on a new goal until the previous one is completed.

Very rarely, I manage to complete my weekly goal. Fortunately, almost always, I managed to complete this goal in the course of the following week. At some point, in the process of realization, I had to split a goal which proved to be too complex.

Every day, I identify the three (3) important tasks that I must complete. I usually have two tasks related to personal goals such as fitness or taking care of my family and a third task that aims to advance my entrepreneurial To-Do Studio project. Again, I do not start a new task until the previous one is complete.

The importance of setting a measurable goal with a short deadline

touching-the-voidRecently, I was reading the book “Touching the Void” written by Mountaineer Joe Simpson. He recounts the disastrous climb he made with Simon Yates of Siula Grande, a mountain of over 6000 meters in the Peruvian Andes. After reaching the summit, the expedition unfortunately turns into a tragedy when Joe Simpson fractures his right leg after a heavy fall against a wall. This situation is usually fatal for a mountaineer. Thus, during the descent, despite the help of his colleague Yates, unable to brake on such steep walls, Simpson ended up sliding over a cliff and was then suspended in the emptiness above a deep crevice. Seeing no other choice, Yates eventually cut the rope to save his own life, with Simpson falling into the crevasse. The book tells how, at the cost of superhuman efforts, Simpson will still manage to come out alive from the mountain after more than 3 days to crawl to base camp.

One of the important things I remember from the book is that, despite the pain and adversity, Simpson has managed to continue his journey by setting measurable goals with a short deadline. By crawling on the ground, he progresses by fixing a visible objective located less than a hundred meters in front of him, and, each time, giving himself less than 30 minutes to reach this target. Thus, firing with the strength of his arms and uninjured leg, for more than 10 kilometers, target after target, measuring his progress with the clock of his watch, slowly, he moves forward. This allowed him to keep the focus despite the suffering and delirium that inhabited him.

In any case, I cannot compare my entrepreneurial journey to what Simpson experienced. In my case, there is no suffering, no pain and the journey is pure happiness. However, I must recognize a similarity in the importance of setting measurable goals with a short deadline.