Belkin launches dual-powered Thunderbolt 3 Dock Core for Mac
Belkin on Monday introduced a new dual-powered Thunderbolt 3 dock that allows users to connect multiple peripherals and storage devices to a mobile workstation like MacBook.
Touted as the “world’s first” Thunderbolt-certified dual-powered dock, Belkin’s Thunderbolt 3 Dock Core features 40 Gbps transfer rates, 60W upstream charging — good enough for a MacBook Pro — and support for two 4K 60Hz monitors or one 8K monitor.
The small box is bristling with ports including one each of the following: USB-C, DisplayPort 1.4, HDMI 2.0, 1Gb Ethernet, USB-A 3.2 Gen 2, USB-A 2.0 and 3.5mm audio in/out. A tethered Thunderbolt 3 cable connects directly to a host Mac or Windows laptop.
“Belkin’s Thunderbolt 3 docks and adapters are perfect for remote workers, be it from the home, an RV beach vacation or a hotel room,” said Jon Roepke, director of product management at Belkin. “They easily connect a USB-C laptop to virtually all common peripherals like displays, projectors, external hard drives, ethernet and speakers, so they can get to work quickly and easily without needing to be their own IT department.”
Dual-power is a major selling point for the Thunderbolt 3 Dock Core. The feature enables connected devices to draw power from a connected laptop instead of wall outlet, eschewing the need for extra equipment.
The Thunderbolt 3 Dock Core will sell for $169.99 when it launches in July. Those interested can preorder now from Amazon and Belkin.
LaTeX offers a number of tools to create and customise tables, in this series we will be using the tabular and tabularx environment to create and customise tables.
Basic table
To create a table you simply specify the environment \begin{tabular}{columns}
In the above example “{c|c}” in the curly bracket refers to the position of the text in the column. The below table summarises the positional argument together with the description.
Position
Argument
c
Position text in the centre
l
Position text left-justified
r
Position text right-justified
p{width}
Align the text at the top of the cell
m{width}
Align the text in the middle of the cell
b{width}
Align the text at the bottom of the cell
Both m{width} and b{width} requires the array package to be specified in the preamble.
Using the example above, let us breakdown the important points used and describe a few more options that you will see in this series
Option
Description
&;
Defines each cell, the ampersand is only used from the second column
\
This terminates the row and start a new row
|
Specifies the vertical line in the table (optional)
\hline
Specifies the horizontal line (optional)
*{num}{form}
This is handy when you have many columns and is an efficient way of limiting the repetition
||
Specifies the double vertical line
Customizing a table
Now that some of the options available are known, let us create a table using the options described in the previous section.
Notice that the column that we want the long text to be wrapped has a capital “X” specified.
Multi-row and multi-column
There are times when you will need to merge rows and/or column. This section describes how it is accomplished. To use multi-row and multi-column add multi-row to the preamble.
Multirow
Multirow takes the following argument \multirow{number_of_rows}{width}{text}, let us look at the below example.
Colours can be assigned to the text, an individual cell or the entire row. Additionally, we can configure alternating colours for each row.
Before we can add colour to our tables we need to include \usepackage[table]{xcolor} into the preamble. We can also define colours using the following colour reference LaTeX Colour or by adding an exclamation after the colour prefixed by the shade from 0 to 100. For example, gray!30
Below example demonstrate this a table with alternate colours, \rowcolors take the following options \rowcolors{row_start_colour}{even_row_colour}{odd_row_colour}.
In addition to the above example, \rowcolor can be used to specify the colour of each row, this method works best when there are multi-rows. The following examples show the impact of using the \rowcolours with multi-row and how to work around it.
As you can see the multi-row is visible in the first row, to fix this we have to do the following.
Let us discuss the changes that were implemented to resolve the multi-row with the alternate colour issue.
The first row started above the multi-row
The number of rows was changed from 2 to -2, which means to read from the line above
\rowcolor was specified for each row, more importantly, the multi-rows must have the same colour so that you can have the desired results.
One last note on colour, to change the colour of a column you need to create a new column type and define the colour. The example below illustrates how to define the new column colour.
\newcolumntype{g}{>{\columncolor{darkblue}}l}
Let’s break it down:
\newcolumntype{g}: defines the letter g as the new column
{>{\columncolor{darkblue}}l}: here we select our desired colour, and l tells the column to be left-justified, this can be subsitued with c or r
There may be times when your table has many columns and will not fit elegantly in portrait. With the rotating package in preamble you will be able to create a sideways table. The below example demonstrates this.
For the landscape table, we will use the sidewaystable environment and add the tabular environment within it, we also specified additional options.
\centering to position the table in the centre of the page
\caption{} to give our table a name
\label{} this enables us to reference the table in our document
To include a list into a table you can use tabularx and include the list in the column where the X is specified. Another option will be to use tabular but you must specify the column width.
LaTeX offers many ways to customise your table with tabular and tabularx, you can also add both tabular and tabularx within the table environment (\begin\table) to add the table name and to position the table.
The packages used in this series are:
\usepackage{fullpage}
\usepackage{blindtext} % add demo text
\usepackage{array} % used for column positions
\usepackage{tabularx} % adds tabularx which is used for text wrapping
\usepackage{multirow} % multi-row and multi-colour support
\usepackage[table]{xcolor} % add colour to the columns \usepackage{rotating} % for landscape/sideways tables
Additional Reading
This was an intermediate lesson on tables. For more advanced information about tables and LaTex in general, you can go to the LaTeX Wiki.
Posted by: xSicKxBot - 06-30-2020, 04:22 AM - Forum: Lounge
- No Replies
The Last Of Us 2: Here's What The New Game Plus Menu Screen Means
Warning! We're going to be talking about some late-game developments in The Last of Us Part 2, as well as an element that's only revealed once you've finished the game. Read on at your own risk!
When you finally finish the game and the meaning of the boat becomes clear, something changes. Save a completed game file so you can start a New Game Plus playthrough or use the chapter selection menu, and you'll find a new image adorning the main menu screen. This one doesn't show the boat shrouded in fog; instead, it shows the same boat on a brighter beach, with sunlight breaking through stormclouds dissipating in the distance.
Posted by: xSicKxBot - 06-30-2020, 01:53 AM - Forum: Python
- No Replies
Dict to List — How to Convert a Dictionary to a List in Python
Summary: To convert a dictionary to a list of tuples, use the dict.items() method to obtain an iterable of (key, value) pairs and convert it to a list using the list(...) constructor: list(dict.items()). To modify each key value pair before storing it in the list, you can use the list comprehension statement [(k', v') for k, v in dict.items()] replacing k' and v' with your specific modifications.
In my code projects, I often find that choosing the right data structure is an important prerequisite to writing clean and effective code. In this article, you’ll learn the most Pythonic way to convert a dictionary to a list.
Problem: Given a dictionary of key:value pairs. Convert it to a list of (key, value) tuples.
Example: Given the following dictionary.
d = {'Alice': 19, 'Bob': 23, 'Carl': 47}
You want to convert it to a list of (key, value) tuples:
[('Alice', 19), ('Bob', 23), ('Carl', 47)]
You can get a quick overview of the methods examined in this article next:
Exercise: Change the data structure of the dictionary elements. Does it still work?
Let’s dive into the methods!
Method 1: List of Tuples with dict.items() + list()
The first approach uses the dictionary method dict.items() to retrieve an iterable of (key, value) tuples. The only thing left is to convert it to a list using the built-in list() constructor.
The variable t now holds a list of (key, value) tuples. Note that in many cases, it’s not necessary to actually convert it to a list, and, thus, instantiate the data structure in memory. For example, if you want to loop over all (key, value) pairs in the dictionary, you can do so without conversion:
for k,v in d.items(): s = str(k) + '->' + str(v) print(s) '''
Alice->19
Bob->23
Carl->47 '''
Using the items() method on the dictionary object is the most Pythonic way if everything you want is to retrieve a list of (key, value) pairs. However, what if you want to get a list of keys—ignoring the values for now?
Method 2: List of Keys with dict.key()
To get a list of key values, use the dict.keys() method and pass the resulting iterable into a list() constructor.
d = {'Alice': 19, 'Bob': 23, 'Carl': 47} # Method 2
t = list(d.keys())
print(t)
# ['Alice', 'Bob', 'Carl']
Similarly, you may want to get a list of values.
Method 3: List of Values with dict.values()
To get a list of key values, use the dict.values() method and pass the resulting iterable into a list() constructor.
d = {'Alice': 19, 'Bob': 23, 'Carl': 47} # Method 3
t = list(d.values())
print(t)
# [19, 23, 47]
But what if you want to modify each (key, value) tuple? Let’s study some alternatives.
Method 4: List Comprehension with dict.items()
List comprehension is a compact way of creating lists. The simple formula is [expression + context].
Expression: What to do with each list element?
Context: What elements to select? The context consists of an arbitrary number of for and if statements.
You can use list comprehension to modify each (key, value) pair from the original dictionary before you store the result in the new list.
d = {'Alice': 19, 'Bob': 23, 'Carl': 47} # Method 4
t = [(k[:3], v-1) for k, v in d.items()]
print(t)
# [('Ali', 18), ('Bob', 22), ('Car', 46)]
You transform each key to a string with three characters using slicing and reduce each value by one.
Method 5: zip() with dict.keys() and dict.values()
However, there’s no benefit compared to just using the dict.items() method. However, I wanted to show you this because the zip() function is frequently used in Python and it’s important for you to understand it.
Method 6: Basic Loop
The last method uses a basic for loop—not the worst way of doing it! Sure, a Python pro would use the most Pythonic ways I’ve shown you above. But using a basic for loop is sometimes superior—especially if you want to be able to customize the code later (e.g., increasing the complexity of the loop body).
d = {'Alice': 19, 'Bob': 23, 'Carl': 47} # Method 6
t = []
for k, v in d.items(): t.append((k,v))
print(t)
# [('Alice', 19), ('Bob', 23), ('Carl', 47)]
A single-line for loop or list comprehension statement is not the most Pythonic way to convert a dictionary to a Python list if you want to modify each new list element using a more complicated body expression. In this case, a straightforward for loop is your best choice!
To become successful in coding, you need to get out there and solve real problems for real people. That’s how you can become a six-figure earner easily. And that’s how you polish the skills you really need in practice. After all, what’s the use of learning theory that nobody ever needs?
Practice projects is how you sharpen your saw in coding!
Do you want to become a code master by focusing on practical code projects that actually earn you money and solve problems for people?
Then become a Python freelance developer! It’s the best way of approaching the task of improving your Python skills—even if you are a complete beginner.
At the heart of Klang is Seed, a large-scale, persistent virtual world that we believe will redefine the MMO landscape and have a positive impact on our species.
We are looking for a Technical Producer who enjoys a collaborative and creative work environment to join us in one of the most exciting cities on the planet! If you have an engineering background and are interested in moving into Production for an ambitious and ground-breaking project, we have an amazing opportunity for you.
Requirements
Be a major part of the production team facilitating dedicated game developers
Work with the engineering team to breakdown design specifications and identifying technical requirements
Support the approval process for technical designs and best practices
Work closely with engineering to plan and define work, risks, dependencies, opportunities and production improvements
Provide Production feedback on technical designs for all high-risk/high-impact systems
Work with the CTO and Lead Engineers shape and drive the future technical roadmap
Facilitate the sharing of technical knowledge and learnings across the studio’s development teams
Stay up to date nf global technology advancements to identify opportunities to progress qualitative standards
Coordinate internal and external teams as required
Assist other team members with technical questions
Manage activities include planning, managing, documenting and tracking project schedules and workflows, managing trade-offs and eliminating blockers
What we look for in you:
Thinking critically, and applying analytical skills to solve complex issues
Planning work to create realistic deliverables
Being adaptable, helping nurture the engineering teams culture within the studio
Becoming Production’s champion for development standards and best practices across all engineering teams within the studio
Who We Think Will Be A Great Fit:
A bachelor’s degree in Computer Science, Engineering or equivalent experience
3+ years as a senior programmer, a programming generalist who’s self-motivated, a team player who takes the lead facilitating breakdown of complex tasks
Experience with C#, or similar programming languages
Experience managing engineers and discussing estimations
Understand data structures, along with performance-minded development and optimisation skills
Good knowledge in game systems programming and development
Experience with modern commercial games engines such as Unity
Able to work independently and have a high degree of initiative
Someone who is comfortable communicating technical subjects to other disciplines
An appreciation of the roles, responsibilities and challenges within other disciplines
Excellent communication skills, both verbally and written
Experience working with Microsoft Office tools and Jira
Bonus, but not mandatory:
Experience with back-end and devops technologies (e.g. SQL, GCE, K8S, .NetCore, etc.)
Benefits
An opportunity to work on a groundbreaking project from its inception with a lot of room for professional and personal development
Our own cafeteria serving free lunches daily
Competitive salary and 27 days of paid vacation
Flexible office hours (with core hours)
Monthly public transport travel pass
Monthly company co-contributions to private pensions
Free and discounted memberships with Urban Sports Club
Monthly team events and activities
A dog-friendly office, adjustable standing desks, and mobile aircon units for hot summers
Relocation assistance and visa support
We explicitly encourage applications from applicants from groups underrepresented in games/tech spaces. We value all kinds of backgrounds and walks of life.
Whether you’re just starting out, looking for something new, or just seeing what’s out there, the Gamasutra Job Board is the place where game developers move ahead in their careers.
Gamasutra’s Job Board is the most diverse, most active, and most established board of its kind in the video game industry, serving companies of all sizes, from indie to triple-A.
Posted by: xSicKxBot - 06-30-2020, 01:51 AM - Forum: Lounge
- No Replies
Don’t Miss: The evolution of CD Projekt’s quest design for Cyberpunk: 2077
The Witcher 3 is known for its great quest design, but developer CD Projekt Red promises to evolve this tried and true approach in its next game, Cyberpunk 2077.
At E3 2019, quest director Mateusz Tomaskiewicz told us about what he’s learned directing the quests of Cyberpunk 2077, and the challenges of designing a more nonlinear RPG.
A lot has changed, I moved in from Thronebreaker: The Witcher Tales, and I had to get up to speed with everything going on and what we have, assumptions, goals, and so on. And what’s really special for me about this project specifically compared to The Witcher 3, for example, is that no longer are we only trying to combine a rich branching narrative with an open world – this time around we would like to add a layer of nonlinearity, which is gameplay nonlinearity.
So, we’re adding this whole layer related to the skills that you choose as you play, to the life paths you choose as you create your character. We implement all of that within the range of the missions.
You saw that this year we focused on showing this specific thing. That’s why we spent so much time in the mall, so we showed you guys what are the different ways of solving these missions. You can stealth your way through, you can shoot your way through if you choose so.
There’re different paths you can unlock based on the skills you’ve invested in your time in. There are different dialogue options based on the skills you’ve invested your time in, and the life path that you’ve chosen. And this impacted our design.
First of all, it’s a big shift in how we’re thinking about quests and how we’re approaching guiding players, and how we’re implementing these missions. Specifically, not only do we now have to think about the possible paths the players take in terms of the story – which is what we focused on in The Witcher 3 –now we have to think about how to build these encounters and sequences that provide interesting, divergent paths for different skillsets that players decide to go with. This isn’t something we did in The Witcher 3.
For example, in The Witcher 3, combat sequences were like black boxes that you inserted. You just spawned NPCs, and the rest was just happening there. It was just fighting them with swords, signs, or bombs, but the outcome was the same.
This time around, it’s more interconnected with other departments – the level designers or the encounter designers of gameplay. In terms of what kinds of devices can we use, [we consider] how we can build the level so it’s interesting and [clear] about what kind of paths you can take, and how to combine this with the narrative, and how to make it work in a way that you don’t break the game’s story.
I think the most challenging thing about this is that these teams have to start working together really closely. In The Witcher, the quest designer was an owner of a chunk of a game. They implemented almost everything in that section. They could own it – not many people could impact us. If the whole level changed for artistic reasons, this impacted their work, but gameplay designers wouldn’t break it often for them.
If you do this very close cooperation where the work overlaps, so in this case the mall in the demo shown today, [that] was worked on by a quest designer, encounter designers, and level designers. So whenever each of them do their part of the job, if they don’t communicate properly, they create issues for each other.
So I think the biggest challenge here is proper communication in coming together and creating this part of the game together, and to not break each other’s work. It might sound basic or simple but in reality, it’s not. It requires a lot of effort from all the teams involved to get it done and get it done properly.
We tried a few different ways to approach this. Daily standups were one of the ways that our strike teams were doing this. Then I think at some point we decided not to do the daily ones because it was too many meetings. Another thing we did was to put the people from strike teams together in the same room so it’s easier to communicate with each other.
We have weekly meetings where people talk to us [about] what are the problems they encounter, is there anything global that needs to be fixed between the teams, so I can help people with that. Aside from that, we encourage people and organize playthroughs of these missions for the strike teams.
So they sit together in one room, and they play this whole thing and talk about issues and what they would like to do and so on. These are some measures we have taken. The most important one is day-to-day communication between them – putting this thought in people’s minds that anytime you change anything, it might impact other people. Inform them, even if – worst case scenario, it won’t be important to them. Best case scenario, they might see something that might be problematic or important to them.
And again, it sounds obvious, but it’s not. There’s a lot of tendencies in people’s mindsets to believe that something is obvious for other people, or something might not be important for other people because they don’t see the cascade of consequences. But when they start talking to other people, it becomes clear “oh, this changes a lot, it’s super important to let people know.”
This was a rule for us in all of our projects. We always had this rule in the main storyline – we never fail the quest based on choices. We treat those things as outcomes. The only way to fail them is if the player dies.
It’s quite limiting when you think about it when you start designing. What comes out of it is something pretty interesting. The game feels more organic – we have to think about all these different possibilities and outcomes. It doesn’t feel limited, it feels like it gives players more freedom in what they’re doing. It creates this impression that the world reacts to what you’re doing instead of saying “oh no you shouldn’t do that, it’s not the right way to do that.”
In the side missions, we can let players fail them, but again we can do it as an outcome. So it’s not the case that you failed it and now you have to restart, it’s more like “you fucked up.” Say you were supposed to escort someone, and they died, and it has consequences. It makes the game feel more organic, and makes the player say “yeah that’s how it would have went if this was pen and paper.” The GM wouldn’t say “yeah you killed a main NPC you have to restart the adventure.” They’re trying to go with it, and see how it would continue.
There are multiple ways. There is of course, through the dialogue, this is the most obvious one. There are different problems in the game as you interact with different quests and go through them. You can have a stance on those problems.
Some of them are flavor, so choices, some of them are meaningful decisions that impact different things. Another guideline we have for quest design in our company is to make the distinction between the two as blurred as possible. So you should be asking “is this decision a flavor or will this have far-reaching consequences?” If you do it like this in our observation, people tend to pay more attention to all of the choices because people don’t know which ones are the important ones and which ones are the cosmetic ones.
That’s one thing. The second thing is – this isn’t quest design per se, but it’s the possibility to customize your character as you play through the game. As I mentioned, this time around we have this other layer, we added this thing we called the life path. It’s like the origin of your character. At the beginning of the game when you create your character – are you a street kid, are you a corpo, or are you a loner?
These life paths give you different advantages and disadvantages throughout the game. For example, when you interact with corpos, you know how they operate, you know how to talk to them to gain an advantage over them. On the streets, as a corpo you don’t have many advantages.
The concept of cyberspace itself is pretty interesting in our game, because the general idea is that everyone who interacts with cyberspace sees it differently. You might imagine that the thing you saw in the demo is how V – the player character – sees cyberspace. But some other character like Brigitte, she sees cyberspace totally differently.
The general idea is that cyberspace is such a vast amount of data that your brain, in order to not go mad, to make some sense out of it, it uses known symbols, its own knowledge and references to create some kind of sense out of it. This is one way. We have multiple threads in quests that touch upon different facets of transhumanism.
And of course a lot of it we show through the dialogue. We show it through environmental storytelling, throughout the city, throughout different stories about different characters and how they cross certain boundaries, and how they move forward with transcending what it means to be human, so to speak.
The setting of cyberpunk itself is different in this regard in that a lot of things that would be quite alien or bizarre to us today – the ease with which people can replace their legs or hands or other body parts with cybernetics is totally normalized in this society. This is a subject we put a lot of attention to as well throughout the whole game.
To do this, we do it in the standard narrative in different stories. We also have video content that touches heavily upon this subject to tell you how this society works and how normalized these things are. And of course the commercials, the ads in the game that you might find, you saw many of them in the demo in Pacifica. We have produced a lot of content to show this message to players.
Yeah, yeah.
Of course. It’s a very sensitive and important subject I believe. We have put a lot of thought into this. One of the things we want to do in the final game – which we couldn’t show in the demo yet, because as you mentioned it’s a work in progress – is to give the players as many options of customization in the beginning of the game as we can.
For example, we want to do this thing where, as you create your character after you choose the body type, you can, for example, use physical traits as you build your face that could be assigned to a man or a woman.
Or nonbinary. The idea is to mix all of those up, to give them to the players, as they would like to build it. Same goes for the voice. We wanted to separate this out, so the players can choose it freely. This is something we are still working on. It’s not as easy as it sounds.
This is one part of it. In terms of how we depict the characters within the setting itself, of course, yes, we are paying a lot of attention to it. We do not want anyone to feel like we are neglecting this, or treating it wrongly.
I personally get inspired mostly by other works of fiction. I watch loads of movies and I play a lot of games, board games, etc. That’s where most of my inspirations come from. Sometimes real life is much weirder than the fictional situations that we come up in. Many times I’ve had situations in my life where “if I proposed this as a quest in our game, I would be laughed out of the room.”
People would tell me “that doesn’t make any sense,” or “that situation could not occur.” Sometimes these things are nice snippets you can use to build up a bigger story out of them. My preferred way of working about these things with the designers is to give them the opportunity to do these short pitches, in which you’re looking for a glimpse of something interesting, something we can build upon. It doesn’t have to be a huge long story, but it needs to be something memorable, something we can put in the game.
It’s less of a specific inspiration, more like a method of inspiration.
PUBG Mobile’s next map looks like its smallest yet
PUBG Mobile is getting a new map that has been designed with players on the go in mind. That comes from The Verge, which reports that the new map is called Livik and is as large as two kilometres by two kilometres. Matches on Livik support 40 players a game and are intended to last 15 minutes each.
While PUBG Mobile has primarily been designed to bring the PC experience to mobile phone users, Livik has been crafted to accommodate mobile players. That means the design facilitates quick matches you can play on your daily commute to and from work. “We want more people to enjoy PUBG Mobile in a more flexible way,” producer Rick Li explains to The Verge. “The initiative for this map is bringing more flexibility to those players who have tighter schedules and circumstances to accommodate for.”
While the map is notably smaller than others, Li reassures that there are still plenty of points of interest that help games go quicker. The Nordic-themed map features a volcano, hot spring, and a waterfall. While Li didn’t give much else away, he reckons that the current of the waterfall will mix up PUBG Mobile matches. There’s currently no word on when we’ll be able to play Livik, but apparently it’ll be “soon”.
If you’re curious as to what else is happening in the world of Tencent’s battle royale, then you can check out our PUBG Mobile update guide. If you fancy a go yourself, you can find it on iOS and Android.
[embedded content]
We also have a list of the best mobile multiplayer games, so you have more options for games you’d like to play with your friends.
Posted by: xSicKxBot - 06-29-2020, 09:49 PM - Forum: Windows
- No Replies
AIOps: Advancing Azure service quality with artificial intelligence
“In the era of big data, insights collected from cloud services running at the scale of Azure quickly exceed the attention span of humans. It’s critical to identify the right steps to maintain the highest possible quality of service based on the large volume of data collected. In applying this to Azure, we envision infusing AI into our cloud platform and DevOps process, becoming AIOps, to enable the Azure platform to become more self-adaptive, resilient, and efficient. AIOps will also support our engineers to take the right actions more effectively and in a timely manner to continue improving service quality and delighting our customers and partners. This post continuesourAdvancingReliabilityserieshighlightinginitiatives underway to keep improving the reliability of the Azure platform. The post that follows was written by Jian Zhang, our Program Manager overseeing these efforts, as she shares our vision for AIOps, and highlights areas of this AI infusion that are already a reality as part of our end-to-end cloud service management.”—Mark Russinovich, CTO, Azure
This post includes contributions from Principal Data Scientist Manager Yingnong Dang and Partner Group Software Engineering Manager Murali Chintalapati.
As Mark mentioned when he launched this Advancing Reliability blog series, building and operating a global cloud infrastructure at the scale of Azure is a complex task with hundreds of ever-evolving service components, spanning more than 160 datacenters and across more than 60 regions. To rise to this challenge, we have created an AIOps team to collaborate broadly across Azure engineering teams and partnered with Microsoft Research to develop AI solutions to make cloud service management more efficient and more reliable than ever before. We are going to share our vision on the importance of infusing AI into our cloud platform and DevOps process. Gartner referred to something similar as AIOps (pronounced “AI Ops”) and this has become the common term that we use internally, albeit with a larger scope. Today’s post is just the start, as we intend to provide regular updates to share our adoption stories of using AI technologies to support how we build and operate Azure at scale.
Why AIOps?
There are two unique characteristics of cloud services:
The ever-increasing scale and complexity of the cloud platform and systems
The ever-changing needs of customers, partners, and their workloads
To build and operate reliable cloud services during this constant state of flux, and to do so as efficiently and effectively as possible, our cloud engineers (including thousands of Azure developers, operations engineers, customer support engineers, and program managers) heavily rely on data to make decisions and take actions. Furthermore, many of these decisions and actions need to be executed automatically as an integral part of our cloud services or our DevOps processes. Streamlining the path from data to decisions to actions involves identifying patterns in the data, reasoning, and making predictions based on historical data, then recommending or even taking actions based on the insights derived from all that underlying data.
Figure 1. Infusing AI into cloud platform and DevOps.
The AIOps vision
AIOps has started to transform the cloud business by improving service quality and customer experience at scale while boosting engineers’ productivity with intelligent tools, driving continuous cost optimization, and ultimately improving the reliability, performance, and efficiency of the platform itself. When we invest in advancing AIOps and related technologies, we see this ultimately provides value in several ways:
Higher service quality and efficiency: Cloud services will have built-in capabilities of self-monitoring, self-adapting, and self-healing, all with minimal human intervention. Platform-level automation powered by such intelligence will improve service quality (including reliability, and availability, and performance), and service efficiency to deliver the best possible customer experience.
Higher DevOps productivity: With the automation power of AI and ML, engineers are released from the toil of investigating repeated issues, manually operating and supporting their services, and can instead focus on solving new problems, building new functionality, and work that more directly impacts the customer and partner experience. In practice, AIOps empowers developers and engineers with insights to avoid looking at raw data, thereby improving engineer productivity.
Higher customer satisfaction: AIOps solutions play a critical role in enabling customers to use, maintain, and troubleshoot their workloads on top of our cloud services as easily as possible. We endeavor to use AIOps to understand customer needs better, in some cases to identify potential pain points and proactively reach out as needed. Data-driven insights into customer workload behavior could flag when Microsoft or the customer needs to take action to prevent issues or apply workarounds. Ultimately, the goal is to improve satisfaction by quickly identifying, mitigating, and fixing issues.
My colleagues Marcus Fontoura, Murali Chintalapati, and Yingnong Dang shared Microsoft’s vision, investments, and sample achievements in this space during the keynote AI for Cloud–Toward Intelligent Cloud Platforms and AIOps at the AAAI-20 Workshop on Cloud Intelligence in conjunction with the 34th AAAI Conference on Artificial Intelligence. The vision was created by a Microsoft AIOps committee across cloud service product groups including Azure, Microsoft 365, Bing, and LinkedIn, as well as Microsoft Research (MSR). In the keynote, we shared a few key areas in which AIOps can be transformative for building and operating cloud systems, as shown in the chart below.
Figure 2. AI for Cloud: AIOps and AI-Serving Platform.
AIOps
Moving beyond our vision, we wanted to start by briefly summarizing our general methodology for building AIOps solutions. A solution in this space always starts with data—measurements of systems, customers, and processes—as the key of any AIOps solution is distilling insights about system behavior, customer behaviors, and DevOps artifacts and processes. The insights could include identifying a problem that is happening now (detect), why it’s happening (diagnose), what will happen in the future (predict), and how to improve (optimize, adjust, and mitigate). Such insights should always be associated with business metrics—customer satisfaction, system quality, and DevOps productivity—and drive actions in line with prioritization determined by the business impact. The actions will also be fed back into the system and process. This feedback could be fully automated (infused into the system) or with humans in the loop (infused into the DevOps process). This overall methodology guided us to build AIOps solutions in three pillars.
Figure 3. AIOps methodologies: Data, insights, and actions.
AI for systems
Today, we’re introducing several AIOps solutions that are already in use and supporting Azure behind the scenes. The goal is to automate system management to reduce human intervention. As a result, this helps to reduce operational costs, improve system efficiency, and increase customer satisfaction. These solutions have already contributed significantly to the Azure platform availability improvements, especially for Azure IaaS virtual machines (VMs). AIOps solutions contributed in several ways including protecting customers’ workload from host failures through hardware failure prediction and proactive actions like live migration and Project Tardigrade and pre-provisioning VMs to shorten VM creation time.
Of course, engineering improvements and ongoing system innovation also play important roles in the continuous improvement of platform reliability.
Hardware Failure Prediction is to protect cloud customers from interruptions caused by hardware failures. We shared our story of Improving Azure Virtual Machine resiliency with predictive ML and live migration back in 2018. Microsoft Research and Azure have built a disk failure prediction solution for Azure Compute, triggering the live migration of customer VMs from predicted-to-fail nodes to healthy nodes. We also expanded the prediction to other types of hardware issues including memory and networking router failures. This enables us to perform predictive maintenance for better availability.
Pre-Provisioning Service in Azure brings VM deployment reliability and latency benefits by creating pre-provisioned VMs. Pre-provisioned VMs are pre-created and partially configured VMs ahead of customer requests for VMs. As we described in the IJCAI 2020 publication, As we described in the AAAI-20 keynote mentioned above, the Pre-Provisioning Service leverages a prediction engine to predict VM configurations and the number of VMs per configuration to pre-create. This prediction engine applies dynamic models that are trained based on historical and current deployment behaviors and predicts future deployments. Pre-Provisioning Service uses this prediction to create and manage VM pools per VM configuration. Pre-Provisioning Service resizes the pool of VMs by destroying or adding VMs as prescribed by the latest predictions. Once a VM matching the customer’s request is identified, the VM is assigned from the pre-created pool to the customer’s subscription.
AI for DevOps
AI can boost engineering productivity and help in shipping high-quality services with speed. Below are a few examples of AI for DevOps solutions.
Incident management is an important aspect of cloud service management—identifying and mitigating rare but inevitable platform outages. A typical incident management procedure consists of multiple stages including detection, engagement, and mitigation stages. Time spent in each stage is used as a Key Performance Indicator (KPI) to measure and drive rapid issue resolution. KPIs include time to detect (TTD), time to engage (TTE), and time to mitigate (TTM).
Figure 4. Incident management procedures.
As shared in AIOps Innovations in Incident Management for Cloud Services at the AAAI-20 conference, we have developed AI-based solutions that enable engineers not only to detect issues early but also to identify the right team(s) to engage and therefore mitigate as quickly as possible. Tight integration into the platform enables end-to-end touchless mitigation for some scenarios, which considerably reduces customer impact and therefore improves the overall customer experience.
Anomaly Detection provides an end-to-end monitoring and anomaly detection solution for Azure IaaS. The detection solution targets a broad spectrum of anomaly patterns that includes not only generic patterns defined by thresholds, but also patterns which are typically more difficult to detect such as leaking patterns (for example, memory leaks) and emerging patterns (not a spike, but increasing with fluctuations over a longer term). Insights generated by the anomaly detection solutions are injected into the existing Azure DevOps platform and processes, for example, alerting through the telemetry platform, incident management platform, and, in some cases, triggering automated communications to impacted customers. This helps us detect issues as early as possible.
For an example that has already made its way into a customer-facing feature, Dynamic Threshold is an ML-based anomaly detection model. It is a feature of Azure Monitor used through the Azure portal or through the ARM API. Dynamic Threshold allows users to tune their detection sensitivity, including specifying how many violation points will trigger a monitoring alert.
Safe Deployment serves as an intelligent global “watchdog” for the safe rollout of Azure infrastructure components. We built a system, code name Gandalf, that analyzes temporal and spatial correlation to capture latent issues that happened hours or even days after the rollout. This helps to identify suspicious rollouts (during a sea of ongoing rollouts), which is common for Azure scenarios, and helps prevent the issue propagating and therefore prevents impact to additional customers. We provided details on our safe deployment practices in this earlier blog post and went into more detail about how Gandalf works in our USENIX NSDI 2020 paper and slide deck.
AI for customers
To improve the Azure customer experience, we have been developing AI solutions to power the full lifecycle of customer management. For example, a decision support system has been developed to guide customers towards the best selection of support resources by leveraging the customer’s service selection and verbatim summary of the problem experienced. This helps shorten the time it takes to get customers and partners the right guidance and support that they need.
AI-serving platform
To achieve greater efficiencies in managing a global-scale cloud, we have been investing in building systems that support using AI to optimize cloud resource usage and therefore the customer experience. One example is Resource Central (RC), an AI-serving platform for Azure that we described in Communications of the ACM. It collects telemetry from Azure containers and servers, learns from their prior behaviors, and, when requested, produces predictions of their future behaviors. We are already using RC to predict many characteristics of Azure Compute workloads accurately, including resource procurement and allocation, all of which helps to improve system performance and efficiency.
Looking towards the future
We have shared our vision of AI infusion into the Azure platform and our DevOps processes and highlighted several solutions that are already in use to improve service quality across a range of areas. Look to us to share more details of our internal AI and ML solutions for even more intelligent cloud management in the future. We’re confident that these are the right investment solutions to improve our effectiveness and efficiency as a cloud provider, including improving the reliability and performance of the Azure platform itself.
Soapbox: I’m Super Excited About The Future Of Animal Crossing: New Horizons
Animal Crossing: New Horizons director Aya Kyogoku recently said that she sees New Horizons as the beginning of Animal Crossing’s third generation. That begs the question, how will this generation develop as we move forwards? After all, Animal Crossing superfans are still going to be playing New Horizons for months, if not years, to come.
Well, in order to look forwards sometimes you have to look backwards. It’s been almost twenty years since the first Animal Crossing game released and in that time players have gone from being a humble villager, to the mayor of a town and, on the Switch, an island representative tasked with creating the perfect getaway paradise. Additionally, core games have kept things exciting with updates: add-ons, festivals, themed days, and expansions.
‘Tis The Seasonal Update
Of course, updates are already a thing in New Horizons. So far, we’ve seen Zipper T. Bunny hiding eggs around our islands to celebrate Bunny Day, and the May Day Maze event as a themed Nook Miles Tour. Players have also been offered the chance to use skills learnt in Happy Home Designer to create serene interior designs for a series of wedding snaps at Harvey’s Island. And who could forget Redd’s clandestine visits to the game’s secret beach?
We also know that we’re getting summer updates complete with the addition of swimming, diving and the chance to collect new kinds of sea life to further stock up the museum and craft new furniture with the help of Pascal. I couldn’t have been happier when I saw an islander dive into the ocean in the recent summer update teaser, and it also confirmed that we’ll be getting a second update in August. But what might that entail? And what exciting additions could be coming to New Horizons beyond the summer?
One hope is that we’ll see the return of fan-favourite events from previous games. An example of this is Mushrooming Season, which was introduced in the first Animal Crossing adventure and has been featured in most main games aside from Wild World. Thankfully, we know that this autumn festivity will be returning to New Horizons, as Mushrooming Season is confirmed to be starting for players in the Northern Hemisphere in November later this year. Similar to Bunny Day, there are plenty of mushroom-inspired DIY recipes to find around that time, including a pretty snazzy mushroom umbrella.
With DIY recipes and crafting being a big feature of New Horizons, a lot of fans are wondering whether established Animal Crossing events will be tailored to suit this new gameplay mechanic. Two of the biggest events in past Animal Crossing games were Halloween and Christmas Eve, with players spending the proceeding month preparing costumes and finding out what presents villagers were hoping to receive. With the new DIY twist on the franchise, it’s possible that you may have to personally craft your neighbours’ seasonal gifts, and perhaps even create spooky costumes for Halloween from scratch. This is sounds like so much fun and, if true, I can’t wait to see what costumes the update brings!
Your Guess Is As Good As (Data) Mine
But what about future updates we have no precedent for? Interestingly, Animal Crossing: New Horizons data miners may offer us a few clues. In particular, reputable and proven data miner Ninji has pulled plenty of tantalising hints from the New Horizons game code.
Firstly, it seems that some of the buildings and services present on our islands might be getting further renovations. Notes in the code suggest that the Museum could gain a shop (please let there be a T-rex costume), and a section dedicated to displaying Gyroids (a kind of NPC furniture). In previous games players could locate Gyroids around their island by digging with a shovel, and they were mostly used for house decoration. It appears that, in New Horizons, they may become a living collectible to stock your museum with. I just hope that isn’t quite as creepy as it sounds.
There is also a nice juicy hint in the code that we might be learning to cook with a future update. I’m thinking that this might tie in with the upcoming swimming/diving update, because some of the critters we saw in the teaser are certainly edible – cream and garlic scallops anyone? However, there is also a strong hint in the code that vegetable farming is also coming. Uncovered data suggests that, as well as growing fruit on your trees, players will soon be able to grow carrots, tomatoes, sugar cane, potatoes, wheat, and even pumpkins! I’m wondering whether events like the Harvest Festival are going to tie in with this new mechanic.
Expand Your Horizons
Updating New Horizons with timed seasonal events is one thing, but I’m hoping Nintendo aims higher. I’m talking about totally new and much more substantial events, locations and festivals. Could there even be a big paid DLC expansion on the horizon?
There is (kind of) a precedent for this. Years after release, Animal Crossing: New Leaf received a free update for all players in the form of the Welcome Amiibo update. This expansion added a new area to the town, and the possibility for players to take control of which villagers they chose to invite. Whilst this was a free update, its size and the new opportunities it afforded to players suggests that Nintendo aren’t afraid of adding substantial content to Animal Crossing games in one go.
But what might a large (and maybe even paid) New Horizons DLC look like? Well, here’s my idea, inspired by director Aya Kyogoku’s comments on how player communication is increasingly central to the Animal Crossing franchise.
Perhaps we could even see something akin to an archipelago expansion that would create a shared online space in the form of a group of islands separate from your home island. Players (most likely your best friends) would team up in order to develop the archipelago from a cluster of forgotten spaces to an interlinked and bustling hub where islanders can meet to trade items, play mini-games and contribute to public work projects such as market squares and stylish boutique shops. With the archipelago stored safely in the cloud, any player could access it at any time (no need for a host player to open their dodo gates) and, once bridges are built between the different islands, any friend could access any part of the archipelago whenever they wanted!
So what do you think? Are you open to something like the Archipelago Expansion? Or do you have your own hopes and ideas for where New Horizons might go in the future? Let us know in the comments!