Develop for Compute Engine in your IDE with Cloud Code - Build What's Next
Blog

Develop for Compute Engine in your IDE with Cloud Code

2823

Of your peers have already read this article.

2:30 Minutes

The most insightful time you'll spend today!

Experience seamless development with Compute Engine using Cloud Code's integration. Discover how Cloud Code simplifies managing virtual machines, SSH connections, file uploads, and log viewing, directly from your favorite IDE.

When developing services with Compute Engine, our customizable compute service that lets you create and run virtual machines on Google’s infrastructure, you’ll likely find yourself frequently switching between your code editor, terminal, and the Google Cloud Console.

Cloud Code is a set of IDE plugins for popular IDEs like VS Code and IntelliJ that make it easier to develop applications that use Google Cloud services. And now, Cloud Code makes it easy to develop with Compute Engine by incorporating common workflows with your favorite IDE’s user interface.

Specifically, this new integration between Compute Engine and Cloud Code makes it easier to manage your commonly used virtual machines in the IDE, view details about them, connect to them over SSH, upload your application files to them, and view their logs.

Before you begin

Let’s demonstrate how the new integration works in Cloud Code for VS Code. Install Cloud Code for VS Code, and once installed, open its icon on the activity bar on the left and find “Compute Engine”:

Cloud Code for Jetbrains IDEs (such as IntelliJ) could be installed similarly, and you will find Compute Engine in the list of your IDE tool windows.

View your VMs

Cloud Code makes it easy to see all relevant VMs in your GCP project and view details needed to effectively work with the VM from the IDE. To start working with a Compute Engine VM in the IDE, navigate to Cloud Code’s new Compute Engine explorer. From there, you can see all the VMs in your current Cloud project. Clicking on a VM will display details such as machine type, boot image, IP address and more. You can also right click on a VM for a quick link to the Google Cloud Console where you can take additional action.

Connect to your VMs over SSH

Once you’ve found the VM you want to work with, Cloud Code makes it easy to connect to that VM over SSH. Again, find the VM you want to connect to in Cloud Code’s Compute Engine explorer, right click it, and select “Open SSH”. Cloud Code will then establish an SSH connection from your IDEs terminal into the VM. If there’s any difficulty establishing a connection, Cloud Code can run a troubleshooting diagnostic to help resolve the issue.

Many organizations maintain VMs that don’t have a public IP address, making it difficult to establish an SSH connection to them. For those VMs that use Identity-Aware Proxy, Cloud Code can still securely connect to them over SSH, even without a public IP address.

Upload files to your VMs

You might want to try a debug version of your application, run a script, or try a new code in an environment identical to production, in this case on a development VM instance which might not have access to full source code or is not a part of your CI/CD pipeline. Cloud Code provides an easy way to upload your code files into a VM instance.

Find the VM you want to connect to in Cloud Code’s Compute Engine explorer, right click it, and select “Upload File via SCP”. Choose a file from your local system and Cloud Code will upload it to a VM instance using SCP. Once upload completes, Cloud Code offers to open a new SSH connection to access the files and work with them on a remote VM instance. Again, if there’s any difficulty establishing a connection, Cloud Code can run a troubleshooting diagnostic to help resolve the issue.

View your VM logs

As you’re working with your VM, you can right click it and select to view the VM instance logs. From Visual Studio Code this will open a logs viewer in the IDE. From IntelliJ, the logs viewer in the Cloud Console will be opened. If you’ve configured application logs to be collected with Cloud Logging, you can also view those in these logs viewers as well.

Get Started

We invite you to try out Compute Engine with Cloud Code to better streamline your development workflow. To learn more, check out the Compute Engine documentation for Visual Studio Code and JetBrains IDEs. If you’re new to development with IDEs, you can take the first step by installing Visual Studio Code or IntelliJ.

Blog

Learn About Kf: How it Helps Move Existing Cloud Foundry Workloads to Kubernetes

3435

Of your peers have already read this article.

1:30 Minutes

The most insightful time you'll spend today!

Are you looking to migrate existing workloads to Kubeternes? Google's Kf, a cloud service that eases managing Cloud Foundry applications to Kubernetes with minimal disruption on current processes. Read further if you would like to learn more.

While many companies are writing brand-new Kubernetes-based applications, it’s still quite common to find companies who want to migrate existing workloads. A common source platform for these applications is Cloud Foundry. However, getting an existing Cloud Foundry application running on Kubernetes can be non-trivial, especially if you want to avoid making code changes in your applications, or taking on big process changes across teams. That is, if you’re not using Kf to do a lot of that heavy lifting for you. 

Kf is a Google Cloud service that allows you to easily move existing Cloud Foundry workloads to Kubernetes with minimal disruption to your existing processes. 

Kf features a command line interface (CLI) also named kf, that replaces the existing Cloud Foundry cf command line utility. The kf CLI implements the most commonly used cf functionality, including the ability to manage bindings, services, apps, routes and more. 

For example, to deploy an existing application you would simply issue the kf push command. 

On the server side Kf is built on several open source technologies. In some cases these technologies are also the Google Cloud implementation. For instance GKE is our managed Kubernetes offering,  and provides the platform for managing and running the applications. Routing and ingress is handled by Anthos Service Mesh, Google Cloud’s managed Istio-based service mesh. Finally, Tekton provides on-cluster build functionality for Kf. Developers don’t have to worry about any of those technologies, as Kf abstracts them away.

Kf primitives such as spaces, bindings and services are implemented as custom Kubernetes resources and controllers. The custom resources effectively serve as the Kf API and are used by the kf CLI to interact with the system. The controllers use Kf’s CRDs to orchestrate the other components in the system.

The beauty of this approach is that developers who are familiar with existing workflows can largely replicate those workflows with the kf CLI. On the other hand, platform operators who are more familiar with Kubernetes can use kubectl to interact with the CRDs and controllers. 

For instance if you wanted to list the apps running on your Kf cluster you could issue either of the following commands:

  kf apps
kubectl get apps -n space-name

Notice that CF / Kf spaces get mapped one to one to Kubernetes namespaces.

To get a list of all the custom resources you can examine the api-resources in the kf.dev API group.

  kubectl api-resources --api-group=kf.dev
NAME                      SHORTNAMES   APIGROUP   NAMESPACED   KIND
apps                                   kf.dev     true         App
builds                                 kf.dev     true         Build
clusterservicebrokers                  kf.dev     false        ClusterServiceBroker
routes                                 kf.dev     true         Route
servicebrokers                         kf.dev     true         ServiceBroker
serviceinstancebindings                kf.dev     true         ServiceInstanceBinding
serviceinstances                       kf.dev     true         ServiceInstance
spaces                                 kf.dev     false        Space

With Kf developers can continue to work with a familiar interface and platform operators can use declarative Kubernetes practices and tooling such as Anthos Config Management to manage the cluster. It’s really the best of both worlds if you’re looking to manage your existing Cloud Foundry applications on Kubernetes. 

If you’d like to learn more about Kf check out the video I just released on YouTube.  It reviews some of the concepts discussed here, and includes a short demo. If you’d like to get hands on, try the quick start. And, of course, you can always read the documentation.

Blog

Speeding Up Digital Transformation with Industry Solutions

2663

Of your peers have already read this article.

2:30 Minutes

The most insightful time you'll spend today!

In this blog, we explore the role of industry-specific solutions in driving digital transformation and discuss how businesses can accelerate their digital transformation journey with the help of these solutions. Keep reading to learn more.

Most large enterprises started with their own data centers and developed in-house solutions to meet their specific business needs, regulations, and industry specifications. These solutions were based on traditional applications from legacy vendors like Oracle and Microsoft — or even mainframes — and from key technology providers like SAP and VMware. During the last decade, organizations started their digital transformation journey by migrating their IT infrastructure, applications, and data to the cloud to reduce operating costs and gain efficiencies as their needs scaled.

The next step in the journey was to take advantage of cloud-based data analytics, services and scalability to drive business growth and revenue. Rather than offer generic “industry clouds” which require multi-year IT deployments and significant customization, Google Cloud has responded to customer needs by developing production-ready industry solutions that address specific use cases with repeatability across organizations.

These industry solutions are grounded in Google Cloud’s differentiated capabilities, including AI, ML, and data analytics. With these, you can dramatically reduce implementation time and realize value from the cloud more quickly with deep insights into your customers and more efficient interactions with your suppliers and partners.

Here are some highlights from the That Digital Show Podcast where Umesh Vemuri, VP of Global Strategic Customers and Industries at Google Cloud, discusses his industry strategy.

Why Google Cloud solutions?

“We are uniquely positioned to help enterprises with solutions based on our deep understanding of customer needs that are supported by our technologies. There are three examples that come to mind.
The first is our understanding of the consumer from the standpoint of running an ecommerce platform. We have the solutions to run digital platforms at a very large scale, including the engineering practices we bring to support organizations during important high traffic events like Black Friday and Cyber Monday.

The second example deals with media and entertainment as a whole. We operate the world’s largest streaming service and support the largest digital platforms currently out there. That means that whatever problems our media customers are experiencing, there’s a good chance we’ve already seen them and know how to deal with them.

Finally, there is our experience with AI and big data. Our leadership in deploying our AI and big data healthcare technologies has given us the experience to solve complex problems — such as techniques to support evidence-based selection, drug therapy, and molecular profiling.”

B to B to C

“Google is a B to B organization, I always like to add that we are also B to B to C, because the concern the consumer ultimately has is their experiences and the journey that they’re on. Connecting the dots between the business and the consumer experience is really critical and a real big differentiator in how we could better serve our customers.

For example, take Ford Motors. Really think about the challenges they have — traditional problems around manufacturing, core I. T. modernization and information, and how to remove costs. But then when you really think about the core of the business, how do you actually make this incredible experience for drivers of Ford vehicles? What do you want to do from an infotainment perspective? What do you want to do in speech-to-text conversion?

And suddenly your business is really a direct-to-consumer experience. Ultimately, all the infrastructure and technology is designed to provide the consumer — who’s ultimately buying that vehicle — with an amazing experience that will maintain their loyalty.

From this example, we can see this kind of linkage in every industry: from retail and e-commerce, media, and direct streaming to healthcare with direct telehealth.”

Solutions that transform the consumer experience

“The consumer’s expectations are constantly shifting and we have to be able to provide the technologies, the structure, and the solutions to our customers to be able to meet those changing expectations at that consumer level.

So first, we want to be very clear on the industry segments that we’re going to focus on and what we believe our clear differentiation will be. So we’ve focussed on ten industries including: retail, financial services, manufacturing, telecommunications, media and entertainment, healthcare and life sciences, education, government, supply chain and logistics and gaming.

Second, we really have to be very prescriptive about the solution pillars in the areas where our customers tell us we have challenges. We want to build solutions that solve not only today’s issues, but the problems of the future.

And third, in those pillars, we have to be very clear on what are the specific use cases that we think have high value for our customers. Then make these available as a catalog of actual products and production-ready solutions that we and our partners in the ecosystem provide.”

Google Cloud industry solutions focus on our top ten industries where we can provide differentiated value to organizations. Whether it’s discovery in retail, AI-enabled call centers, or automotive tools for connected cars, we are delivering production-ready solutions that are ready to implement with minimum customization.

Blog

NCR’s Emerald Leverages Google Cloud to Help Grocers Boost Operational Agility

8271

Of your peers have already read this article.

3:00 Minutes

The most insightful time you'll spend today!

NCR and Google Cloud team up to transform grocers' legacy retail systems and drive operational agility to cater to their consumers' evolved shopping habits. The NCR Emerald platform leverages Google Cloud's scalability and helps grocers curb Capex.

In recent years, the grocery industry has had to shift to facilitate a wider variety of checkout journeys for customers. This has meant ensuring a richer transaction mix, including mobile shopping, online shopping, in-store checkout, cashierless checkout or any combination thereof like buy online, pickup in store (BOPIS).  

What’s more, in the past year and a half alone grocers have had to enable consumers new ways to shop for essentials. This has included needing to rapidly integrate or build on-demand delivery apps, offer curbside pickup with near-instant fulfillment as well as support touchless and cashless checkout experiences. Searches on Google Maps for retailers in the US with curbside pickup options have increased by 9000% since March 2020, and we believe these trends from 2020 will continue to define the future of grocery shopping.

The future of grocery will require agility and openness

Firstly, the need to rapidly adapt to changing consumer habits will be the new normal. Grocers will increasingly look to digitally transform legacy retail systems and modernize point of sale (POS) platforms to deliver and scale omnichannel experiences as quickly as possible. This necessitates a more agile and open architectural approach to technology – one built on microservices and leverages APIs so that new applications and experiences can be built, integrated and delivered faster.

Automation and data-driven retailing will be table stakes

In order for retailers to blend what they’re offering in the store with digital experiences more efficiently, they will also need to automate more. For example, with automation and business intelligence, grocers can take labor that might have been tied up with tender operations and checkout and redistribute those resources to restocking shelves, curbside pick-up or improving customer experiences. 

Automation and access to real-time in-store inventory & supply chain data can also help grocers avoid the supply chain challenges seen in the early days of COVID-19. Grocers will need to find ways to leverage automation to ingest, organize, and analyze data from physical store networks, digital channels, distribution centers to better forecast demand and manage future fluctuations.

How NCR and Google Cloud are helping grocers adapt to disruption with operational agility

Helping grocers improve operational agility to address changing consumer shopping habits and to thrive during times of disruption is something that NCR and Google Cloud have teamed up to do. NCR has over 135 years of experience in retail, having invented the cash register and are continuing to help grocers innovate. NCR Emerald builds upon the company’s leadership in POS software and has turned it into a unified platform that helps grocers operate the entire store from front to back. The solution supports cashier-led checkout, self-checkout, integrated payments, merchandising, and enables regional managers and corporate employees access to the analytics and tools needed to optimize loyalty programs and promotions.

ncr emerald.jpg

NCR has invested in a comprehensive, agile, and API-led retail architecture that lets grocers continually innovate and design new experiences as customers and the industry evolve. By running Emerald on Google Cloud, NCR can offer the solution on a subscription basis, helping grocers lower upfront capital expenditures and ensuring scalability. What’s more, NCR can tap into Google Cloud’s strength in data, analytics, and openness to deliver three key imperatives. Let’s take a look at each of these below.

Run the way grocers need to while leveraging Google Cloud as a single source of logic

Traditionally the POS system lived in the store. If disaster strikes, people still need access to food and essentials so the grocery store still needs to operate. It hardly gets more mission-critical than that. NCR Emerald is built on microservices, leveraging Kubernetes for front-of-house compute, and VMs (See graphic 1 below). This makes it easy to support lightweight clients accessible by store employees via any range of mobile devices, computer terminals, self-service kiosks, peripheral devices like receipt printers as well as legacy applications.

What’s unique is that because Emerald runs on Google Cloud, it supports all those in-store and digital touchpoints mentioned above, but also allows grocers to run lean. Emerald leverages Google Cloud as a single source of truth and operates a lot of what it does out of logic. Every sales transaction coming from every channel, including e-commerce, can be logged via NCR’s Hosted Service and centralized in BigQuery and Bigtable as a transaction data master. This enables the grocer to manage any transactional use case very consistently, whether it e supporting customers who want to purchase in one store and return in another, offering digital receipts or the ability to exchange online purchases in store. Emerald on Google Cloud can help retailers extend capabilities through the power of the cloud but not need to live exclusively in the cloud. In other words, the solution allows grocers the ability to run the way they need to.

ncr retail solution.jpg

Enable data-driven and real-time decision making for grocers

Store managers, regional managers, category managers, and others all require different cuts of the data to do their jobs effectively. However, data silos persist and how data is formatted and arranged can still remain pretty static. Therefore allowing users with different roles the ability to view and analyze that data quickly and in different ways continues to be a challenge. 

As mentioned above, Emerald leverages Google Cloud data management solutions as the central repository for transactional, behavioral, and merchandising data. Every transaction from every store and every channel can be stored via NCR Hosted Service on BigQuery and Bigtable. NCR Analytics then harnesses the advanced analytical and data visualization capabilities of Looker to help grocers get a consolidated view of their business across all channels and then allow employees to slice and dice the data they way they need to. NCR Analytics also leverages the power of Google Cloud AI and machine learning to add another level of intelligence to the retailer’s data. For example, store managers can visualize how well they’re using their real estate and see how productive lanes 1-3 are compared with 7-10 or compare self-service versus manned lanes. By mapping to the retailer’s own catalog, they can also break down category-level performance and trends.

looker dashboard.jpg

NCR Analytics takes advantage of Google Cloud’s data pipeline to reduce processing time, with scaling and resource management provided out of the box. By letting the cloud store and process the data, NCR is providing the ability for retailers to analyze their data in near real-time across all platforms – a real game changer in the grocery business.

Open APIs let grocers continually enrich the retail experience

Finally, Emerald is built on an API-first architecture managed through Apigee. It uses the power of Apigee as an open API platform to expose how Emerald can work with other NCR applications like loyalty and promotions, and third party applications like mobile ordering and order delivery to enrich the grocery experience for employees and customers. Every API that Emerald uses is available on Apigee, allowing them to share code samples and giving developers the ability to run scripts. This approach can allow retailers the ability to innovate in a fraction of the time and cost, speeding up 3rd party integrations up front and as businesses grow. 

Take, for example, Northgate Market, a chain of 40 stores in California, that were able to transform its digital operations and enable experiences that set it apart from competitors – quickly and simply with Emerald. It took less than 6 months to go from contract to live deployment in the first store. Since then, Northgate Market has been able to extend their intelligence by leveraging the power of Looker and NCR Analytics.

Learn more about how NCR has been able to leverage an open, cloud-enabled architecture to help customers innovate across the retail, hospitality, and banking industries on the webinar “Role of APIs in Digital Transformation”. You can also learn more about how Northgate uses e-commerce to transform customer experience and gain consumer insights.

Blog

The Evolving Landscape of Multicloud: A Journey, Not a Destination

2712

Of your peers have already read this article.

2:30 Minutes

The most insightful time you'll spend today!

Multicloud adoption has become a popular strategy, but it's important to understand that it's just a phase. In this blog, we'll discuss the limitations of multicloud and the benefits of a more cohesive cloud strategy.

Editor’s note: This post is part of an ongoing series on IT predictions from Google Cloud experts. Check out the full list of our predictions on how IT will change in the coming years.


Prediction: Over half of all organizations using public cloud will freely switch their primary cloud provider as a result of available multicloud capabilities

In the years ahead, companies will use a multicloud strategy not just as a way to hedge their bets, but as a way to switch from their first cloud to their next one. Research shows that the majority of companies are already multicloud, meaning they use more than one hyperscale cloud provider.

More and more, we’re talking to companies that describe using multicloud technologies as a way to do switch not just workloads — but mindshare — to a different cloud. In other words, for many people, multicloud is a phase, not a permanent state.

You may start using one cloud but still need to be able to incorporate existing investments you’ve already made in other clouds without having to move anything. Here at Google Cloud, we’ve made unique investments to make sure we can meet our customers wherever, and in whatever cloud, they are.

For instance, Anthos, our multicloud management plane, ensures consistency when working with your compute and data on other clouds. You can view workloads, deploy services, and apply common security policies across multiple clouds. BigQuery Omni allows you to query data in other cloud storage accounts in Amazon S3 or Azure Storage without having to move the data itself, helping to bring analytics to data wherever it resides.

Building new skills and getting comfortable in other clouds is not where multicloud stops. Many organizations are taking it a step further — upgrading technology, moving core data, and continuing to grow cloud adoption with a secondary provider.

What starts out as wanting the best capabilities to achieve IT goals will often lead organizations to swap from their first cloud to their next cloud — and by 2025, we believe that most organizations will be doing just that.

Case Study

Why America’s Leading Mortgage Technology Provider Runs its Business on Apigee

3995

Of your peers have already read this article.

3:30 Minutes

The most insightful time you'll spend today!

Brad Homer, Senior API Strategy Product Manager at Black Knight Inc. shares how the company uses the Apigee API Management Platform to transform integrated software, data, and analytics solutions for the mortgage industry. Here's how Black Knight uses APIs to facilitate and automate many of the business processes across the homeownership life cycle.

Black Knight is a leading provider of technology, data, and analytics to the mortgage industry, catering to both large and mid-tier banks in the United States. Over the past few decades, we tended to manage customer integrations on a case-by-case basis. Whenever a bank needed to connect with a Black Knight app, we’d launch another integration project. Lather, rinse, repeat. Needless to say, this was inefficient; we knew we had to do something to centralize this process.

Building versus buying an API management platform
To start, we created some homegrown API solutions. Despite being largely successful with one of these solutions, we saw that technology advances were outpacing our capacity to update our solutions in-house. We knew we needed to move toward an API platform that would support RESTful architecture and that would fully enable mobile solutions. It also had to be extremely secure. Knowing how complicated such a platform would be to build ourselves, we decided that our developers were better off focusing on providing core solutions to Black Knight clients; engaging with an outside provider was the right way for us to advance our API strategy. 

After a lengthy proof-of-concept process, we went into production with the Apigee API Management Platform from Google Cloud in 2018. In our opinion, Apigee was the most complete, robust, technically sound and full-featured option from among all of the API management tools we evaluated. Its ease of use was the deciding factor for our developers, and the Apigee analytics capabilities provided considerable insight into the anatomy of an API call—something the other platforms we considered didn’t do as well. 

Choosing Apigee meant that we didn’t have to focus on developing and maintaining a tool or spend enormous amounts of money trying to keep up with security patching. For a large company like Black Knight, an API management tool is something we don’t want to spend a lot of time on. We know that Google Cloud devotes tremendous resources to it, and it would be difficult to replicate that in-house. 

Black Knight has more than 150 client-facing applications. Almost half of them now are built with APIs that are externally facing, and many of these apps use APIs that integrated with other Black Knight applications. Add to that the huge number of applications out there that come from clients and third-party vendors, and suddenly, we had a management challenge from an API perspective.

Driving cultural change
We came to Apigee with the goal of containing and empowering our huge ecosystem of APIs, customers, third parties, and internal users.  

Given Black Knight’s size, our developers and customers understandably each have different business goals, so getting everyone to come to a centralized platform is a great opportunity. My role is to help people consider other options so they can be open to the benefits that Apigee brings us.

Now that we’ve engaged with Apigee for over a year, we see two big benefits. First, the huge reduction in point-to-point integrations has produced tremendous efficiencies for us and our customers, who now get instant integration once they’ve been authorized for a particular API. Second, Apigee’s capacity for mobile enablement lets us satisfy our customers’ needs for secure mobile apps.  

Simplifying security
From a technical perspective, security is complicated for mobile apps. We’re often accessing sensitive information on a mobile device that can’t always be trusted. This kind of scenario requires us to implement a number of security precautions to help ensure confidential information remains protected.  

The Apigee API management platform addresses these needs in the simplest way possible. It solves complex problems related to security without having to deploy a new API proxy each time we need to support a particular mobile device upgrade. Our back-end applications remain protected because Apigee helps manage security, requests, access tokens, and authorizations. Today, our back-end applications work with Apigee to communicate with mobile devices or servers coming over the internet. 

Apigee has also enabled us to do a better job sharing a variety of APIs. The developer portal lets us stitch together APIs and get more creative about how we can innovate and build new solutions based on these collections of APIs. At this point, anybody that has a nondisclosure agreement with us can register for the developer portal. The nature of our business is such that we can’t just open up our APIs to anybody, but it’s available to our contracted third parties.

Our Apigee journey has been exciting, and we’re making great progress. I’m looking forward to what innovations we will come up with next, thanks to the way Apigee enables us to create, implement, and deliver.

More Relevant Stories for Your Company

E-book

Upgrade Your Contact Center with Knowlarity’s AI-powered Speech Analytics for Higher CX

Did you know, everyday about 56 million hours worth of phone conversations, equalling to 420 billion spoken words are handled by contact centers? Knowlarity, a renowned cloud business communication service provider with nearly 6,000 customers and over a million virtual users, leverages AI-powered speech analytics that offer insights to gauge

How-to

Business Evolution with API Ecosystems

During uncertain times, ecosystem partnerships that leverage APIs have proven to help companies scale and address gaps in their businesses. Apigee customers, like CHAMP Cargosystems, have pursued API-first ecosystem models to enter adjacent markets, create new customer interaction models, and rapidly grow their brand reach and partner ecosystems. As a

Case Study

Held Back by Database Scalability, This Financial Services Company Switches to Google Cloud and Cloud Spanner

Azimut Group operates an international network of companies handling investment and asset management, mutual funds, hedge funds, and insurance. Founded in Milan, Italy in 1988, Azimut Group today has branches in fifteen countries, including Brazil, China, and the USA. “We have subsidiaries and manage funds all over the world,” explains Simone

Explainer

Enhancing Collaboration with Sheets, Python, and Google Cloud

See how you can enhance collaboration within your organization using Google Sheets. Watch to learn about a new set of tools to create custom functions that tap into the power of Python and to expose functions in a standardized fashion throughout your organization.

SHOW MORE STORIES