Yelp Adopted the MVI Architecture to Improve Performance and Testability of their Android App

MMS Founder
MMS Sergio De Simone

Article originally posted on InfoQ. Visit InfoQ

Four years into the adoption of the Model-View-Intent (MVI) architecture for their Android app, Yelp engineer Paul Martin says it allowed them to have performant screens and improve unit testing.

Before adopting MVI, Yelp was using the Model-View-Presenter (MVP) architecture, which had the main shortcomings of producing larger and more complex files as the app pages grew in complexity.

Our presenters grew to have far too many lines of code and became unwieldy and awkward to maintain as we needed to add more state-management and create more complex presenter logic for MVP pages

Yelp engineers also evaluated the possibility of switching to the Model-View-ViewModel (MVVM) architecture, which is more suitable for event-driven, reactive UIs. While MVVM mitigated some of the shortcomings of MVP, it could still lead to larger data classes with many properties as the view complexity grows. Additionally, Yelp engineers found that MVVM mixed poorly with their own Bento framework they based their app user interface on.

At the foundation of the Model-View-Intent (MVI) architecture is the notion of intent, which represents the user intention behind a given event received by the UI. The user intent is converted into an action which is responsible to update the view state, which the view then renders on screen. In MVI, the flow of data related to events and states can be represented through a reactive stream that both the model and the view subscribe to for changes.

One weak point in MVI is the mapping between events and actions, which is usually accomplished in big switch statement. This leads to obvious limitations on scalability. Yelp engineers circumvented this issue by annotating methods implementing actions with their corresponding events, e.g.:

@Event(HeaderClicked::class)
fun onHeaderClick() {
  // do something
}

@Event(BodyClicked::class)
fun onBodyClick() {
  // do something
}

@Event(FooterClicked::class)
fun onFooterClick() {
  // make network request etc
}

At runtime, when the view and the model are created, annotations are processed to create a mapping between events and actions.

In addition to this, Yelp engineers also addressed the issue of growing code complexity as view grow more complex with the idea of sub-presenters, which can be though of as sub-models. In short, instead of defining all actions in a single model, a sub-presenter enables modularization them. For example, we can modify the previous example so the header and footer click action handlers belong to a different sub-presenter:

@Event(BodyClicked::class)
fun onBodyClick() {
  // do something
}

// The rest of click events are handled in here
@SubPresenter private val subPresenter = MyFeatureSubPresenter(eventBus)

Since events and states are transmitted in a stream — called eventBus in the example above — any interested party can observe, there are no added dependencies introduced by this approach. An additional benefit it brought was simplifying unit testing by enabling recording events and states transmitted across the bus using presenter rules and using asserts to guarantee the expected outcome is produced:

fun whenButtonClicked_loadingProgressShown() {
     presenterRule.sendEvent(ButtonClicked)
     presenterRule.assertEquals { listOf(ShowLoadingProgress) }
}

Using MVI, Yelp engineers could move many actions to background threads, which improved the app performance. In particular, they could reduce by over 50% the average frame render time, and by almost 4% the number of frozen frames, which in turn translated into better results for their onboarding and sign-up use cases.

About the Author

Subscribe for MMS Newsletter

By signing up, you will receive updates about our latest information.

  • This field is for validation purposes and should be left unchanged.


Article: Making Time for Our Mental Health and Well-Being within the Hybrid / Remote Workplace

MMS Founder
MMS Helen Bartimote

Article originally posted on InfoQ. Visit InfoQ

Key Takeaways

  • Organisations that ensure job resources such as collaborative relationships, transparency in decision making, autonomy and job control, development opportunities, meaningful work and recognition will have employees who can withstand typical job strains and who are engaged.
  • Leaders who ignore the effects of poor physical working environments, ineffective resources and poor boundaries, do not help create connections, enable conflict, under and over promote, fail to offer recognition, cannot delegate, and cannot show transparency in decision-making, will have a disengaged and unmotivated workforce. This will ultimately impact the mental health and well-being of the workforce.
  • Burnout is a syndrome conceptualised as resulting from chronic workplace stress that has not been successfully managed.
  • If someone is experiencing burnout, they are likely feeling exhausted, have increased feelings of cynicism in relation to their job and also a reduced sense of professional efficacy. They now feel incapable of making a difference.
  • Looking at the system employees are working within and addressing where there are potential gaps is much more effective than dealing with just symptoms of workplace stress. Organisations must consider a causes-also approach and not just symptoms-only.

So often, well-intended hybrid/remote organisations and leaders will focus on surface level mental health/well-being support initiatives. This article will highlight the importance of addressing this important topic from a holistic perspective, addressing systemic processes and policies to ensure they have the “whole person” in mind.  

The interaction between job demands and job positives

According to the Job Demands – Resources model, a stressed and burnt-out workforce is often a result of being in a system with low resources but ongoing and persistent high demands, whereas an engaged workforce with a typical level of strain can be observed in a similar high demands environment, however here’s the critical difference: there are also a high degree of job resources (or job positives). The evidence for this model is key to understanding the crucial role the work system plays in the employee’s capacity to manage their mental health and well-being at work.

High job demands may look like poor and/or toxic relationships at work/conflict with co-workers and/or bosses, an inadequate physical environment and/or limited equipment, lack of transparency in the leader’s decision-making, micromanagement by an immediate boss, etc., whereas job resources may include clear accessibility to leaders, high role autonomy, a good level of job control, clear progression opportunities, feeling a connection to colleagues, etc.

If there are low demands and also low resources, research shows us we may often see an apathetic workforce. In workplaces with high job resources but low job demands – by this we mean lack of any challenge or limited stretch goals – we see a very bored and tuned-out workforce.

Potential outcomes from feeling stressed out

At some point or other, we will all have felt stress from work. Our bodies start to respond to the imminent threat as we prepare through our ancestral fight, flight or freeze reactions. Our brain cannot differentiate between a sabre-tooth tiger or a toxic work relationship – our body will respond in the same way to both. It is preparing us to find safety – if we don’t find this safety and continually put ourselves in this situation the physiological and psychological strain on our bodies and minds will become evident and we eventually may become burnt out.

It is best to consider stress symptoms in terms of three main areas: physical, behavioural and psychological manifestations.

Physical symptoms may include issues such as headaches, fatigue, stomach problems, chest pain, and insomnia. Behavioural may include increased absenteeism, drop in productivity, creating more isolation, less likely to be behaving as a team player, irritability, dissatisfaction with the job, and increased alcohol and/or drug use. Psychological symptoms can include anxiety/panic attacks, increased anger emotion, feeling hopeless and despondent, loss of interest in areas you once enjoyed, and depression.

If stress continues at an extreme level, then individuals are susceptible to experiencing burnout. Burnout is defined as

“a syndrome conceptualised as resulting from chronic workplace stress that has not been successfully managed”.

There are three core dimensions which define burnout and they are:

  • Feelings of energy depletion or exhaustion
  • Increased mental distance from one’s job or feelings of negativism or cynicism related to one’s job
  • Reduced professional efficacy – feeling incapable of making a difference

One of my clients once asked me if there was something called “work depression”. He could not understand how he could be feeling the way he was when he exercised regularly, and enjoyed a personal life which was happy and fulfilling. For him, the pressure of work was exceeding the positive resources he had from his family and friends. So what was he likely experiencing when he asked me this question?

Most likely, he was repeatedly experiencing energy depletion and a sense of being exhausted. When my clients are beginning to feel burnt out I often hear them saying how tired they feel just waking up in the morning even after a long night’s sleep. Experiencing this over time can increase a person’s anxiety and feed into the cycle of not being able to recharge.

It is also highly probable that he would be having many cynical and negative thoughts associated with his organisation and role. My clients often talk to me about feeling “distant” when at work. Often they reflect on situations in which they just could not show any empathy to those around them at work. This again can feed into the loop of being unable to find positive experiences with others in work.

In addition to exhaustion and cynicism, clients on the verge of burnout or in the grip of it talk to me about feeling incapable of making any difference in their place of work. They often will comment on their internal narrative being filled with statements such as “why bother and who cares anyway?” What is happening here is that their experience of accomplishment is diminishing. They stop seeing their strengths and only focus on what they have not achieved.

Once someone has burnt out, it is important that professional advice/help is provided. I will always encourage any organisation I work with to have a confidential and anonymous Employee Assistance Programme (EAP) in place whereby employees know how and where to receive support. However, as the example I offered shows, it may not always be immediately obvious to the individual that this point has been reached.

What does the psychology of happiness tell us?

The work by Professor Martin Seligman in the field of positive psychology informs us on what individuals need to be happy. His research led to the development of what he called the PERMA model. PERMA components are factors that are intrinsically motivating and contribute to well-being. Research has shown a positive correlation between each of the PERMA model components and physical health, vitality, job satisfaction, life satisfaction, and commitment within organisations.

The model highlights that individuals who are resilient and also experience high levels of contentment show similarities in that they all experience Positive emotions regularly – positive emotions include hope, interest, joy, love, compassion, pride, amusement, and gratitude. When they are experiencing significant challenges they can rely on well-developed habits that enable them to bring up these thoughts and feelings from somewhere.

They have an Engaged life. According to Seligman, engagement is “being one with the music.” It is in line with Csikszentmihalyi’s (1989) concept of “flow.” Flow includes the loss of self-consciousness and complete absorption in an activity. In other words, it is living in the present moment and focusing entirely on the task at hand. They often will have sustained interests outside of work that help them to leave thoughts of work behind easily.

I have often found with many clients that everyone has something that has in the past given them joy and helped them to totally get lost in the moment. However, frequently this has been forgotten. Family or work take over and we begin to prioritise everything else apart from ourselves. Time and/or financial commitments take over.

I worked with a senior leader once who came to me on the verge of burnout. When I asked her what she did just for herself that made her happy, she began crying uncontrollably as she could not think of one single part of her life that was just for her. Over time, she remembered her love of singing and joined a local choir. I have lost count of the number of clients who recalled having a passion for a specific musical instrument but over time just stopped playing. These small steps help people experience again the sense of “flow” and this in turn helps to create more steps towards creating a healthier sense of self through new connections and experiences.

Relationships in the PERMA model refer to feeling supported, loved, and valued by others. Relationships are included in the model based on the idea that humans are inherently social creatures. Nurturing the relationships around helps to sustain us when times are difficult. Hybrid/remote work may at times seem to present challenges to this but as I always say to my clients, it is important to look at your life holistically. How can you make work and home work together? If you are extroverted, within a remote company, what can you do to create new social opportunities outside of work?

Another intrinsic human quality is the search for Meaning and the need to have a sense of value and worth. Seligman discussed meaning as belonging and/or serving something greater than ourselves. Having a purposeful life can help people face adversity. One of my clients was a managing director of a small business who was struggling to create meaning within the work he did. His work consumed a significant part of his life and this was non negotiable at the time of our coaching sessions due to the stage the business was at. He worked on ways to bring an increased focus on social responsibility into his business. Initiatives which benefited the local community ended up becoming something the organisation was known for in the future and brought significant depth of meaning to this individual.

Accomplishment in PERMA is also known as achievement, mastery, or competence. A sense of accomplishment is a result of working toward and reaching goals.

If you can say you are living and working within the PERMA model, then it is likely that you are experiencing positive mental health and happiness.
Seligan observed this in his original research when researching why some military personnel suffered PTSD, whilst others in similar situations reached Post Traumatic Growth. The same situation created two different outcomes and it was this that led him to creating his model. Similarly, this can also be evident when witnessing organisations that have experienced significant turmoil by reducing workforces and making lay-offs. There will always be a small group of people who leave this situation with significant mental health challenges, and others who grow and find a way to learn from it.

There are many ways in which I have worked with organisations to help embed the principles of PERMA into their organisations. I can talk through the first area of the model in relation to building positivity into work-life. Cultivating positivity through encouraging the expression of gratitude within an organisation needs to be made explicit and role-modelled by all leaders. Introducing engagement platforms such as 15five or OfficeVibe can help create habits for employees working remotely to express gratitude to each other.

I am a very big fan of using the Emotional Quotient Inventory measure when coaching leaders. This is actually one of the first things I try to embed with organisations when working with them. Finding ways to encourage teams to talk about behaviours associated with EI is the first step to seeing this behaviour within a group. More details on this measure can be found here: EQi. When we talk about Emotional Intelligence, we refer to the 15 behavioural areas within this model, and they are:

  • Self-Perception: self-regard, self-actualization, emotional self-awareness
  • Self-Expression: emotional expression, assertiveness, independence
  • Interpersonal: interpersonal relationships.empathy, social responsibility
  • Decision Making: problem-solving, reality testing, impulse control
  • Stress Management: flexibility, stress tolerance, optimism

Over the last few years I have engaged with leaders and managers within Container Solutions using this measure to help them understand how to use behaviours we know are important for humble leadership. We have worked with this measure in groups and within the individual coaching domain. A common language is created and this enhances communication within teams and departments. At times, some emotionally intelligent behaviours may feel uncomfortable. We work together on how to feel comfortable in the uncomfortable.

In relation to the expression of positivity, leaders can often find displaying behaviours associated with optimism challenging when times are tough. Stress management is a key facet of being emotionally intelligent, and understanding what optimism looks like from a behavioural perspective is helpful.
It is not unusual to coach leaders who find it extremely challenging to stay positive with others in the face of setbacks. Leaders will often comment how it can feel disingenuous to not inform their teams on how they are feeling about the current turmoil their businesses might be enduring. We often will work on how to reduce the time spent using the “pessimistic lens” or switch to “glass half full” view.

We will look at particular triggers for pessimistic thoughts. They learn how to cultivate thoughts of “hopefulness” and realistically challenge thoughts of “hopelessness”. They develop their “reality testing” skills; most importantly we often also work on how to develop effective “contingency planning” skills to enable them to gain more control over high-risk areas.

I find that over time they begin to not dismiss opportunities as being “out of their comfort zone” or simply too hard. Ultimately, there is the intention to help the leader become much more solution-focused, thereby allowing them to genuinely increase optimistic behaviours whilst acknowledging difficult realities.

How leaders can create a culture in which mental health and well-being is prioritised

There will always be new and interesting ways to view and understand organisational life. Similarly, new leadership models will come and go. When I consider successful work cultures and leaders, the same themes re-occur each time, whether this be remote, hybrid or co-working locations. The Culture Code by Daniel Coyle is an exceptional read on this and basically summarises the themes as follows:

  1. People feel heard and listened to by each other and their leaders – managers take time to speak to everyone on their teams.
  2. There is transparency and visibility in everything the organisation does; there is trust and safety when difficult decisions are being made.
  3. This group of people understands how to give accurate feedback directly and honestly to each other and in the moment – the group knows how to do this well.
  4. They appreciate each other and can convey gratitude – this is an expected norm.
  5. Group collaboration and contribution is highly valued – the organisation creates engaging opportunities to help with this and encourages the development of connection. I have worked with organisations who invested in bi-annual family days investing in summer picnics and Christmas experiences.
  6. Hiring and onboarding is very carefully done – well-designed and based on clear behavioural criteria incorporating communication of core values from onset.
  7. Poor performance is addressed and can be communicated through understandable behaviours that the group knows are important. Language is very important here within the organisation and for the individual who is not performing well. Personally, I dislike numerical scales or terms such as “above average/below average” when it comes to managing performance. Words such as this can have a very negative impact on people. Focusing on behaviours is more important.
  8. People understand what they are there to do – there is role clarity and if not, individuals are able to craft their jobs.
  9. Leaders know what humble leadership looks like and practice it daily.

In my freelance work, I spent time coaching a senior partner from a well-known investment bank. There was a common theme from our conversations which centred around her feelings of isolation.

She had achieved everything she set out to do in her career and had financial success that exceeded anything she could have ever imagined. She had a private yacht, owned many homes around the world, and as she talked about these “objects” in our opening sessions together I could hear how important these symbols of wealth, which had once held an incredible amount of importance to her, were losing their value. She talked to me about how lonely she now felt, and the isolation at work only compounded this. She realised she had taken no time to connect to the people who she spent most of her time with.

Together, we looked at how she interacted and behaved around her team and others in the office where she spent her 14-hour days. She realised all her interactions were task-focused. She knew nothing about her team beyond their lives at work. She made little time to just get to know the people in her organisation – and in response they mirrored her behaviour back.

Slowly, we looked at small behavioural changes which focused on her setting time aside to get to know people in different ways. She started to create more opportunities for her team to meet socially and would also participate herself. Over time she found many areas of common interest with the people around her, leading to many positive changes for her in unexpected ways.

Lastly, organisational cultures I have observed which are healthy and productive never forget the importance of enjoyment and laughter. If there is a collective resilience and high job resources, even in the most challenging of times this can still prevail.

In my experience, I often find that when under pressure, engineers’ strengths can work against them in a hybrid/remote setting. I have observed many highly diligent and conscientious engineers getting so lost in their work that they don’t allow themselves time to rest or recharge in the week. They find it hard to give themselves permission to exercise for example, or meet a friend for lunch. These are often the ways we connect with others in our day and it is so much easier to do this in a co-locating workspace.

So it is critical that engineers look for other ways to create these connections around them, and not just through relationships at work. I have observed many changes in the people I coach by seeing them make these small adjustments. Many of my coaching conversations do often start with revisiting the basics of how we take care of ourselves to work at our best.

Thinking about how to take their mind off work by carrying out activities throughout the week, and/or considering focusing on other groups/connections they have outside of work, will lead to balance. We often focus on mindfulness and relaxation techniques. We talk about how to create opportunities to be in more natural environments throughout the week.

I once coached a client who had moved from being in a physical office every day to being mostly remote. Previously, he had always cycled to work. We realised that missing this morning and evening exercise was having much more of an impact than he realised. He was often skipping exercise during the week, and would get so lost in his work during the day that he did not make time for this in any form. He was losing motivation to do anything.

He decided that he would recreate his cycling commute before and after working. He also chose new routes and tried to find areas in which he could be in a more natural environment – by the water, or park. Within four weeks he noticed significant shifts in his mood and well-being. This started to impact positively on his interactions with his family and friends, which led to an increase in other connecting activities. The cycle was a critical part of maintaining his well-being, and was so much more than just a commute.

Often, I find that revisiting good sleep hygiene is important also. Most importantly, we talk about how to create boundaries and stick to them. Recently, some of the people I have been coaching have been trying the Daylio app out. This helps them to understand how these changes can start to have an impact on their mood. They start to make connections with actions and results, in addition to finding out what situations may trigger a decline in their sense of well-being.

Conclusions

The aim of this article was to highlight the importance of considering the system an individual works within if their mental health and well-being is to be genuinely prioritised by their employer. It is all too easy to talk about how your organisation values psychological safety, prioritises mental health and supports employee well-being. Such actions as organising access to well-being apps and offering yoga sessions will not have any impact if the system the person works within is persistently toxic or dysfunctional. For example, if leaders exhibit behaviours which are not aligned to espoused values and culture, a well-being app will make no difference to their state of mind.

Real differences and genuine support for well-being go much deeper than surface support; it takes time and continual dedication to achieve. Ultimately, hybrid/remote organisations must consider using a holistic lens if they are going to be true to their aspirational ideals of having happy, healthy and well employees.

About the Author

Subscribe for MMS Newsletter

By signing up, you will receive updates about our latest information.

  • This field is for validation purposes and should be left unchanged.


Java News Roundup: Quarkus 3.0, MicroStream 8.0, JEP 442, GraalVM, Infinispan

MMS Founder
MMS Michael Redlich

Article originally posted on InfoQ. Visit InfoQ

This week’s Java roundup for April 24th, 2023 features news from OpenJDK, JDK 21, GlassFish 7.0.4, GraalVM 22.3.2, Microsoft OpenJDK, Spring releases. Quarkus 3.0.0, MicroStream 8.0.0, Micronaut 3.9.1, Hibernate ORM 6.2.2, Hibernate Reactive 2.0.0.CR1, Infinispan 15.0.0.Dev01, Apache Camel 3.20.4, Camel Quarkus 2.13.3, JUnit 5.9.3, JReleaser 1.6.0, JobRunr 6.1.4, JDKMon 17.0.49 and Foojay.io.

OpenJDK

JEP 442, Foreign Function & Memory API (Third Preview), has been promoted from Proposed to Target to Targeted status for JDK 21. This JEP incorporate refinements based on feedback and to provide a third preview from: JEP 434, Foreign Function & Memory API (Second Preview), delivered in JDK 20; JEP 424, Foreign Function & Memory API (Preview), delivered in JDK 19, and the related incubating JEP 419, Foreign Function & Memory API (Second Incubator), delivered in JDK 18; and JEP 412, Foreign Function & Memory API (Incubator), delivered in JDK 17. This feature provides an API for Java applications to interoperate with code and data outside of the Java runtime by efficiently invoking foreign functions and by safely accessing foreign memory that is not managed by the JVM. Updates from JEP 434 include: centralizing the management of the lifetimes of native segments in the Arena interface; enhanced layout paths with a new element to dereference address layouts; and removal of the VaList class.

JDK 21

Build 20 of the JDK 21 early-access builds was also made available this past week featuring updates from Build 19 that include fixes to various issues. Further details on this build may be found in the release notes.

For JDK 21, developers are encouraged to report bugs via the Java Bug Database.

GlassFish

The release of GlassFish 7.0.4 ships with dependency upgrades and bug fixes such as: redirections from the Admin Console that result in a blank page upon deployment/undeployment of an application; a potential leak when a resource is loaded from a class within an EAR/JAR file that is invoked from a dynamically loaded class by a custom class loader; and an empty list for configuration templates from the Admin Console upon creating new configuration. The one new feature in this new version is the ability to add methods to build classpath of the ScatteredArchive class from the current classpath. More details on this release may be found in the release notes.

GraalVM

Oracle Labs has released the Community Edition of GraalVM 22.3.2 that aligns with the April 2023 edition of the Oracle Critical Patch Update Advisory. This release includes the updated versions of OpenJDK 17.0.7 and 11.0.19, and Node.js 16.19.1. Further details on this release may be found in the release notes.

Microsoft Build of OpenJDK

Also concurrent with Oracle’s Critical Patch Update for April 2023, Microsoft has released their patch and security update of Microsoft Build of OpenJDK featuring numerous patch releases of their downstream distributions of OpenJDK 17 and OpenJDK 11. This release also included: improvements to their experimental Escape Analysis feature, enabling the Class Data Sharing (CDS) archives in the MIcrosoft Build of OpenJDK 17 binaries; and a non-root user in the container images for developers interested in enhanced security at the container level. More details on this release and the Escape Analysis feature may be found in the release notes and this detailed InfoQ news story.

Spring Framework

Spring Cloud 2021.0.7, codenamed Jubilee, has been released featuring updates to sub-projects such as: Spring Cloud Gateway 3.1.7, Spring Cloud Config 3.1.7, Spring Cloud Kubernetes 2.1.7 and Spring Cloud Sleuth 3.1.8. Further details on this release may be found in the release notes.

The first milestone release of Spring Security Kerberos 2.0.0 was made available this past week featuring support for Spring Boot 3.0 and Spring Security 6.0. This new version also includes: an upgrade to Gradle 8.0, a migration of the documentation to Antora, and a reboot of the project with Spring Boot 3.0. More details on this release may be found in the release notes.

Quarkus

After six alpha releases, one beta release and two release candidates, the much anticipated GA release of Quarkus 3.0 was made available by Red Hat this past week. New features include: support for Jakarta EE 10, MicroProfile 6.0, Hibernate ORM 6.0 and Hibernate Reactive 2.0; a more extensible and easier-to-use Dev UI with a new-and-improved look-and-feel; and an upgrade to SmallRye Mutiny 2.0.0 that uses the Java Flow API instead of Reactive Streams. Further details on this release may be found in the release notes for version 3.0.1 and version 3.0.0. InfoQ will follow up with a more detailed news story.

MicroStream

MicroStream released version 8.0 of their Java-native persistence layer product that delivers: a minimal version of JDK 11; full implementation of their Lazy Collections; improvements in the JDK 17 binary type handler; a more secure SBOM; support for multiple implementations of the StorageManager interface within Spring Boot 2.x; integration with Quarkus; and an updated integration of the Jakarta EE Contexts and Dependency Injection (CDI) specification. More details on this release may be found in the release notes and InfoQ will follow up with a more detailed news story.

Micronaut

The Micronaut Foundation has released Micronaut Framework 3.9.1 featuring bug fixes and updates to modules: Micronaut AWS and Micronaut Kafka. There was also a dependency upgrade to GraalVM 22.3.2. Further details on this release may be found in the release notes.

Hibernate

Hibernate ORM 6.2.2.Final has been released with bug fixes and improvements such as: improved performance of batch fetch loading, via the @BatchSize annotation, for enhanced caching of SQL AST; and the ability to utilize a SQL ARRAY valued parameter to pass all IDs at once when loading entities or collections by multiple keys. This is implemented for all multi-key loads via batch fetching and the byMultipleIds() and byMultipleNaturalId() methods defined in the Session interface.

The first release candidate of Hibernate Reactive 2.0.0 delivers compatibility with Hibernate ORM 6.2 and Vert.x 4.4. Other notable changes include: improved scalability of the BlockingIdentifierGenerator class; allow use of SQL Server Dialect 11+; a resolution for a ClassCastException in Db2; and a fix for saving a one-to-many relationship that was broken in Hibernate Reactive 2.0.0.Beta1. More details on this release may be found in the list of issues.

Infinispan

The first development build of Infinispan 15.0.0 ships with support for: Jakarta EE; a JDK 17 baseline; JDK 21 and virtual threads; Quarkus 3.0; Spring Framework 6.0; and Spring Boot 3.0. Support for JCache will be limited as any components requiring Java EE will be removed.

Apache Software Foundation

The release of Apache Camel 3.20.4 provides bug fixes, dependency upgrades and improvement such as: a default REST DSL type in the camel-jbang generator; add functions to the Simple Expression Language to create an empty Map, List, String or JSON file; and include the jackson-jq module within the camel-jq module that developers may find useful in their JQ expressions. Further details on this release may be found in the release notes.

To maintain alignment with Quarkus 2.13.3, Camel Quarkus 2.13.3 has been released to primarily address bug fixes. More details on this release may be found in the release notes.

JUnit

JUnit 5.9.3 has been released featuring notable bug fixes such as: exceptions thrown for files that cannot be deleted when cleaning up a temporary directory created via the @TempDir annotation now include the root cause; parameter types for local @MethodSource factory method names are now validated; and lifecycle methods are once-again allowed to be declared as private to maintain backwards compatibility for now. However, developers are strongly discouraged from using private visibility for lifecycle methods and doing so will be disallowed in a future release.

JReleaser

Version 1.6.0 of JReleaser, a Java utility that streamlines creating project releases, has been released delivering new features such as support for: OpenCollective as an announcer; CycloneDX as a cataloger; Apache NetBeans modules; enable finer control when evaluating Maven Central rules; Jib as a packager; and additional Disco API package parameters. Further details on this release may be found in the release notes.

JobRunr

JobRunr 6.1.4 has been released providing notable bug fixes: the recurringJobExists() method in the StorageProvider interface returns different results depending on the database; using multiple data sources in Spring Boot not working; and DocumentDB not working due to an incompatible index. There was also improved documentation for the StorageProvider API.

JDKMon

Versions 17.0.49 and 17.0.47 of JDKMon, a tool that monitors and updates installed JDKs, has been made available this past week. Created by Gerrit Grunwald, principal engineer at Azul, this new version fixes an issue related to updating the CVE database, provides dependency upgrades and moves to Gradle 8.0.2 as the build tool.

Foojay.io

Foojay.io, the Friends of OpenJDK resource for Java developers, have provided their Java community calendar for developers to view and add events such as conferences and Java User Group meetups. The calendar is open for adding content without the need for a special account and the content is moderated.

About the Author

Subscribe for MMS Newsletter

By signing up, you will receive updates about our latest information.

  • This field is for validation purposes and should be left unchanged.


Google Cloud Announces GA of Cloud Run Jobs

MMS Founder
MMS Renato Losio

Article originally posted on InfoQ. Visit InfoQ

Google Cloud recently announced the general availability of Cloud Run jobs, a serverless option to execute scripts and jobs that do not respond to HTTP requests. A new execution environment provides increased CPU, network performance, and support for network file systems.

Unlike a Cloud Run service, which handles HTTP requests, a Cloud Run job only runs its tasks and cannot accept parameters at execution. Introduced in preview at Google I/O, Cloud Run jobs are designed to run batch data transformations, database migrations, nightly reports, and run-to-completion jobs, helping the migration of legacy scripts into a serverless environment. Karolina Netolicka, group product manager at Google, and Bex Heart, product marketing manager, explain:

Cloud Run was initially designed around the needs of websites or APIs serving, allowing users to run “services” that responded to HTTP requests or events (…) But the same organizations that used Cloud Run (…) wished there was a way to use serverless environments to run other workloads that didn’t quite fit into the HTTP request paradigm.

Google is not the only cloud provider offering the option to schedule tasks, with Shekhar Jha, distinguished engineer at Capital One, comparing AWS ECS and Google Cloud run jobs.

Google released a new execution environment that provides increased CPU and network performance and supports network file systems, facilitating the migration of existing applications: Cloud Run supports Cloud Filestore, self-managed NFS servers, and FUSE, the open-source adapter that allows mounting a Cloud Storage bucket as a local file system. Netolicka and Heart add:

The second-generation execution environment is fully compatible with all Linux features, making it easier to move existing containers to Cloud Run. This means that software that previously didn’t run in Cloud Run due to unimplemented system call issues can now run in Cloud Run’s second-generation execution environment.

Commenting on a video about the new features, Niklas Higi, co-founder and CTO at Kombo, highlights some limitations:

We could not use Cloud Run jobs for a long-running task use case we had and had to resort to managing a GKE cluster and creating K8S jobs due to the following two limitations: there’s no way to pass arguments to individual executions of jobs (…) and the maximum execution time, just like regular Cloud Run, is limited to 1 hour.

Cloud Run Jobs has a default task timeout setting of 10 minutes that can be increased up to 1 hour. There is no explicit timeout for the job, depending only on the completion of all tasks. As for the pricing table, the first 240,000 vCPU-seconds and 450,000 GiB-seconds are free each month.

About the Author

Subscribe for MMS Newsletter

By signing up, you will receive updates about our latest information.

  • This field is for validation purposes and should be left unchanged.


2023 DevOps Roadmap – TheServerSide

MMS Founder
MMS RSS

Posted on nosqlgooglealerts. Visit nosqlgooglealerts

DevOps Career Roadmap

DevOps is all about people using the latest tools to create new processes so they can continuously deploy applications into production.

If you want to be a DevOps Engineer, here’s the 2023 DevOps roadmap you’ll want to follow:

  1. Commit to the Agile principles
  2. Become a competent coder
  3. Learn Linux
  4. Learn Git
  5. Learn to Automate
  6. Learn CI/CD
  7. Learn Docker
  8. Learn Kubernetes
  9. Learn NoSQL
  10. Get to know the cloud
  11. Master the runtime

Master an Agile framework

One trait all DevOps engineers share is agility.

If you want to get hired as a DevOps engineer, you must commit to the 4 tenants on the Agile Manifesto and believe in its 12 principles.

You should also be familiar with an Agile framework or methodology like Scrum or Kanban.

With an understanding of Agile, and knowledge of how to work well in teams, you set yourself apart from others in a competitive IT career market.

Read the Agile Manifesto and commit to its principles.

Become a coder

You’ll go nowhere as a DevOps Engineer if you don’t know how to code.

  • Learn Rust if you want to be close to the metal
  • Learn JavaScript for the client side
  • Learn Java for the middle tier
  • Learn Python for scripting

You don’t have to master all of them, but you do need to master at least one of them.

Java Code on the DevOps Roadmap

There are many online resources available to help you to learn a programming language like Java or Python.

Make Linux your go-to OS

It doesn’t matter if it’s Mint, Ubuntu or Fedora, but a DevOps engineer needs to know Linux.

Windows still rules on the Desktop, Android rules in the mobile space, but the backend is dominated by Linux.

A DevOps engineer needs to know Linux, which includes the ability to:

  • Work at the Linux command line
  • Write basic shell scripts
  • Manage file permissions with chmod
  • Know how to monitor file, network and memory metrics

To automate, manage or optimize any system on the backend, a DevOps engineer must know how to work with Git.

Get into Git

All continuous deployment processes begin with a pull from Git.

  • Learn Git
  • Learn GitHub
  • Learn GitLab
  • Learn BitBucket

And more importantly, learn the differences between the various offering in the Git ecosystem.

You will also need to know the fundamentals of Git, including:

  • How to clone a remote GitHub repo
  • How to merge branches together
  • How to resolve merge conflicts
  • How to undo commits
  • How to rebase a history of commits

Knowledge of a Git workflow like GitFlow or GitHub flow is a necessity as well.

Git on the DevOps Roadmap

All DevOps engineers must be familiar with Git merging and branching.

Prioritize automation

Learn a build automation tool like Maven, Gradle or C-Make.

The build is where the pipeline problems usually happen.

And know how to package applications and prepare them for deployment.

Gain familiarity with CI/CD tooling

The ultimate goal of DevOps is to continuously deploy code into production.

That means mastering a CI/CD tool like:

  • Jenkins
  • Bamboo
  • TeamCity
  • Travis CI or
  • GitHub Actions
Toolchains to master on the DevOps Roadmap

Concepts like automation, continuous integration, configuration management and infrastructure as code are all key to DevOps.

Containerize everything with Docker

For process isolation, and to achieve dev-prod parity, Docker is a must.

There are only a dozen or so commands you need to know to master Docker to be competent with this powerful containerization technology, including:

  • docker pull
  • docker create
  • docker build
  • docker push
  • docker ps
  • docker images and
  • docker run

Learn how to run apps like Nginx in a container, or deploy Spring Boot apps inside an Alpine image, and you will be of great value to your DevOps team.

Cluster your deployments with Kubernetes

Docker containers don’t scale on their own. To serve applications through a host of Docker containers, an orchestration tool like Kubernetes is a necessity.

Key Kubernetes concepts a DevOps engineer must know include:

  • Kubernetes networking
  • Kubernetes deployments
  • Kubernetes storage types
  • Kubernetes daemon sets
  • Ingress controllers and node types

An overall understanding of the Kubernetes architecture and how master nodes interact with worker nodes will go a long

Jump from SQL to NoSQL

Relational databases were all the rage in the past, but global scalability requires NoSQL.

An important stop on the DevOps roadmap is the ability to:

  • Work with loosely consistent data,
  • Optimize NoSQL performance for global applications
  • De-normalize relational data for NoSQL systems

NoSQL databases are extremely important when it comes to supporting modern enterprise infrastructure.

sql vs nosql for DevOps

No DevOps roadmap is complete without a knowledge of NoSQL databases.

Know your way around the Cloud

On-premise data centers are no longer the norm.

DevOps engineers need to understand how to navigate around big cloud computing platforms such as:

  • Amazon
  • Azure
  • The Google Cloud and
  • Alibaba

Infrastructure as Code tools like Terraform fall into this category as well.

Learn to control the runtime

Managing, monitoring and optimizing live applications is the final stop on the DevOps Roadmap.

  • Prometheus for monitoring
  • Jeager for tracing
  • Splunk for log analysis
  • Graphana for teal-time visibility

When you continuously deploying code into production, you must continuously monitoring it as well.

You DevOps career roadmap

And those are the eleven most important stops on the DevOps roadmap.

Master these technologies and you’ll undoubtedly have a lucrative career as a DevOps engineer.

devops roadmap principles

Feedback, automation, holistic thinking and breaking down silos are key concepts for a DevOps engineer to embrace.

Subscribe for MMS Newsletter

By signing up, you will receive updates about our latest information.

  • This field is for validation purposes and should be left unchanged.