Show filters Hide filters

Refine your search

Publication Year
1-28 out of 28 results
Change view
  • Sort by:
49:07 DjangoCon US English 2017

Keynote - Testing in Django

The Django documentation section on testing starts with this: “Automated testing is an extremely useful bug-killing tool for the modern Web developer.” Nobody can argue with that. Testing is an integral part of modern software development, and Ana’s talk will offer an in-depth overview of how the Django testing framework evolved; showcase some common techniques, tools, and best practices; talk about speed improvements; and guide you through a real-world example of testing a Django app. Testing is fun, isn’t it?
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
28:10 DjangoCon US English 2017

Live Long and Refactor

Refactoring major components of a live application with many users can be daunting. The stakes are even higher when the users are paying for your product. This talk covers how to approach building and incrementally deploying a complex refactor. Using a case study, I will walk through what makes major refactors so challenging, what you should avoid, and what can make them easier in the future.
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
35:59 DjangoCon US English 2017

The Power and Responsibility of Unicode Adoption

Communication is difficult. Whether between humans, machines, or a combination of the two, trying to translate meaningful information is a lossy process. Converting programming languages to use the new Unicode standard is hard, but once it’s in place, you get this marvelous feature-add: emoji compatibility. No longer do we have to make faces with symbols or use platform-specific emoticons. Rejoice in the extended character set. Emoji have a rich history as a way to allow the communication of ideas in a reduced amount of data. They date back to a time where this was important: SMS communications in Japan. However, as social networks feverishly try to clamber onto this bandwagon, their implementations of the standard create issues with miscommunication that aren’t possible with a 12×12 pictograph. We’ll discuss the history of emoji, cross-platform adoption, the Unicode standard, and emoji accessibility in web applications.
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
43:10 DjangoCon US English 2017

The denormalized query engine design pattern

Most web applications need to offer search functionality. Open source tools like Solr and Elasticsearch are a powerful option for building custom search engines… but it turns out they can be used for way more than just search. By treating your search engine as a denormalization layer, you can use it to answer queries that would be too expensive to answer using your core relational database. Questions like “What are the top twenty tags used by my users from Spain?” or “What are the most common times of day for events to start?” or “Which articles contain addresses within 500 miles of Toronto?”. With the denormalized query engine design pattern, modifications to relational data are published to a denormalized schema in Elasticsearch or Solr. Data queries can then be answered using either the relational database or the search engine, depending on the nature of the specific query. The search engine returns database IDs, which are inflated from the database before being displayed to a user - ensuring that users never see stale data even if the search engine is not 100% up to date with the latest changes. This opens up all kinds of new capabilities for slicing, dicing and exploring data. In this talk, I’ll be illustrating this pattern by focusing on Elasticsearch - showing how it can be used with Django to bring new capabilities to your application. I’ll discuss the challenge of keeping data synchronized between a relational database and a search engine, and show examples of features that become much easier to build once you have this denormalization layer in place. Use-cases I explore will include: Finding interesting patterns in your data Building a recommendation engine Advanced geographical search and filtering Reacting to recent user activity on your site Analyzing a new large dataset using Elasticsearch and Kibana.
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
34:43 DjangoCon US English 2017

Serverless Django

You’ve probably heard the buzzword by now - “serverless”. It’s a new type of application architecture where traditional web servers are replaced by ephemeral cloud services. But what does it mean for the average Django user? Hint: lower costs, more scalability, more capabilities and less ops tasks to worry about! First, this talk will explain what “serverless” really means for you, and provide an overview the advantages and disadvantages of event-driven server-less architectures. Next, we’ll demonstrate how easy it is to migrate your existing Django CMS application to run on AWS Lambda by using the Zappa framework, including some real-world issues you might bump into. Then, we’ll show how to implement some of the most common Django patterns as part of a server-less architecture - uploaded avatar image processing, batch and timed sending of email, and long running tasks like statistical aggregation. Finally, we’ll show how to scale up your server-less application to trillions of events per year by distributing your app to dozens of data centers all around the globe, and do an ultimate cost analysis of your new system. You’ll leave with new ideas on how to save money and stress on your existing applications and cool new ways to implement features in your next app!
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
42:39 DjangoCon US English 2017

GraphQL in the wild

Since being released by Facebook in 2015, GraphQL has gained a lot of hype for being the best thing since sliced bread and REST APIs. But what is all the hype about and how does GraphQL fare in the real world? As a Django developer who has been using GraphQL in production since September 2017, I will discuss how we have addressed real-world concerns like performance and security. I will also highlight some of the joys of using GraphQL and why we have stopped writing REST APIs for new features. If you have never heard of GraphQL or have never used the Graphene library, have no fear. There will be an overview of what GraphQL is, as well as a demo on how to incorporate it into a Django project using Graphene.
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
39:28 DjangoCon US English 2017

Python & Spreadsheets

Spreadsheets are OFTEN terrible. They’re also everywhere! As one of the default forms of data exchange, learning to work with spreadsheets directly via Python can save time and effort. We’ll look at Openpyxl, a library that lets you do just that. We’ll look at at least two different (beginner-friendly)example cases: transforming one spreadsheet into another spreadsheet and converting a spreadsheet into JSON. I’ll also use my experience as a former accountant to highlight some of the issues around reading from and writing to a spreadsheet file and how you might deal with them. You MAY even learn to make new friends and grow the Python community! True Story!
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
29:47 DjangoCon US English 2017

Autopsy of a slow train wreck: The life and death of a Django startup

Everyone knows the story: armed with nothing more than a laptop and a dream, a couple of plucky geeks decide to take on the world: disrupting, innovating, and subverting their way to success. In just a few short months, they take a ramshackle collection of software and turn it into a money-printing factory that enables them to drive off into the sunset in gold-plated Lamborghinis. But it isn’t always like that. In fact, it usually isn’t. Venture Capitalists (VC’s) make their investments betting that 15 out of 20 businesses they invest in will outright fail, 4 will maybe get a payoff, and 1 will be a massive success. We always hear about the 1 - the Facebooks, the Instagrams, the WhatsApps. But we very rarely hear about the 15 that don’t succeed. And that’s only counting the VC-funded companies - there are many other companies that never make it past hobby stage, or live a short, privately funded life on the back of consulting income before being quietly shut down. This is a case study of one such a failure - TradesCloud. What went right? What went wrong? And what you can learn from TradesCloud’s mistakes if you’re contemplating starting a business of your own?
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
44:29 DjangoCon US English 2017

Don't Use My Grid System (or any others)

I built Susy, a Sass grid system that can generate any grid technique you like — but I haven’t used it in years. I’ll show you how various grid systems work, and how to avoid using them. For those few cases where a grid really is required, we’ll talk about the best ways to roll your own, so you’re not relying on a bloated library to make decisions for you. We’ll also look at the new layout toys, from flexbox to CSS Grid, and how to get started with only a few lines of code. When to use floats, CSS Grid, flexbox, custom properties, and other techniques. How to make grid-math simple, and lose the grid-system. How to make existing grid-systems work for you, when you’re stuck with them.
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
26:06 DjangoCon US English 2017

Type UWSGI; Press Enter; What Happens?

This talk is aiming right at professional or experienced amateur Django developers who want to learn about one of the core technologies used in modern web apps. We’ll do our best to make it accessible for all, but it’s going to be best to come in with working knowledge of web applications and a rough understanding of web servers. We’ll be covering how uWSGI serves Python web applications, how it manages workers and processes, and how it works with the operating system to handle networking. Our goal is to show how this works both in code and through abstractions, recognizing that different audience members are going to grasp things in different ways. The hope is that attendees will walk away with a working of knowledge of how their apps interact with the network and the operating system through uWSGI, and that a commonly-used but less-understood piece of software will become demystified.
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
37:14 DjangoCon US English 2017

Accessibility Matters: Creating a Better Web

Overview This talk will go through accessibility concerns on the web through example sites and code with both good and bad accessibility to experience what some users have to struggle with daily. We will cover well-known concerns such as low vision/color blindness and deafness, as well as attention issues and autism, and discuss the limitations and abilities of various alternative input devices that people with motor control issues rely on. Short and long-term fixes will be demonstrated and taught, with the overall goal being that the participants leave knowing how to find and solve accessibility problems. Why Bother With Accessibility Not only should you want everyone to be able to easily use your site, but having an accessible website comes with a variety of benefits. According to the U.S. Census Bureau, around 19% of Americans have a disability, which is a large potential audience for any site. Many companies also fall under accessibility laws they might not even be aware cover their products, with lawsuits becoming more prevalent in recent years, and showing a good faith effort to improve your products’ accessibility can help keep your company out of hot water. Accessible web development also tends to lead to better UX and a happier user base. And, another plus: It will save devs time and frustration when they’re working with the code, since good HTML is enforced. Who This Talk Is For Anyone who wishes to learn more about accessibility. While we won’t be going over the absolute basics of accessibility in detail, the examples and resources will be easy to understand for people with very basic knowledge of web development.
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
38:03 DjangoCon US English 2017

Butter smooth, interactive applications with Django and Websockets

Web applications have changed significantly over the years – from simple static pages, to sprinkling interactiveness with JQuery/AJAX, to full dynamic single page apps. Through each evolution, we’re adding more complexity, more data and more asynchronous behavior to our applications. In this new world, where does the synchronous nature of Django’s request-response cycle fit in? My talk will focus on the topics around asynchronous Django applications. I’ll be sharing some lessons we learnt while building and scaling an interactive web application within the confines of Django and django-channels. This topic is interesting because there’s been a lot of interest with meteor-like frameworks that have synchronized state between the frontend and backend. My intention is to show the audience that you can accomplish the same end-result with Django, without the need to learn and deploy a brand new framework. An outline I have in mind: What does asynchrony mean, and why you need it. Traditional methods of achieving asynchrony (delayed jobs using worker queues like celery, long-polling for messaging, etc.) Why django-channels changes the game. How to architect your state. What are the available options for deployment. Gotchas, and what to do when things go wrong. Just a basic knowledge of Django is required, as the topics are transferable to other frameworks. We did not have to monkey-patch any of the drivers to achieve asynchrony, so what you’ll learn at my talk will apply cleanly to a stock Django.
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
24:29 DjangoCon US English 2017

Write an API for Almost Anything (or The Amazing Power and Flexibility of Django Rest Framework)

This talk will feature a few off-the-beaten-path applications of APIs. Since the combination of Django and DRF makes it so easy to get a simple API running, it becomes a very powerful, flexible, and expandable tool for a variety of uses. The only thing these applications may have in common is their need to share data across the web. Whether you have not yet tested the waters of Django Rest Framework or you are a DRF veteran, this talk will inspire you to think both big and small when considering its potential uses.
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
43:25 DjangoCon US English 2017

Functional Programming in an Imperative World. Maybe

The pillars of FP Let’s start by looking at the core concepts that differentiate FP from the OO / imperative style most programmers are familiar with. Along the way I’ll introduce you to: Immutable data structures. Having data structures that don’t change makes your code safer, especially when dealing with concurrency and parallelism, but they require you to approach solutions in a different way than you would with mutable data. “Pure” functions. Pure, or idempotent, functions do not mutate state or cause other kinds of side effects. As a result, you are guaranteed that every time you call a function with the same parameters, you will always get the same value. Recursion: While recursion is something most of us know about, it’s not something we tend to use often in imperative programming, and with good reason. Nonetheless, it’s a worth knowing about it’s various forms. Function composition. When you have pure functions that handle only one task, you can build larger, more complex and more beneficial programs by composing functions together to form new functions. First class functions: passing around functions as parameters and return values, just like any other object. The holy trinity: map, reduce, filter. These three functions are the work horses of FP, helping us manipulate and transform data quickly and elegantly. FP in python Now, let’s take a look at how we can or cannot apply these concepts in python. While most data structures in python are mutable, tuples are a built in immutable data structure that we have at our disposal. We’ll see that tuples have a solid place in python, but they’re not as easy to work with as we might like. Recursion isn’t really well developed in python (on purpose) so let’s take a look at it’s pitfalls and how to avoid them. Function composition is something you probably already do some in python and perhaps don’t even know it. The trinity: Filter is easy, we just call it “list comprehension” Reduce. Let’s try to get beyond flattening nested lists and doing tricks with math. Map. You probably don’t use this enough in python so let’s see if we can change that. FP is great! Maybe. Now that we’ve seen how FP can be used, we really need to decide if it should be used. Python is not a functional programming language, despite the tools it has. We’ve talked about some of the technical drawbacks to these tools, but we also need to decide if working in an FP paradigm is right for our work environment. We’ll look at some examples of where running into FP can be jarring and talk about the additional cognitive load on co-workers who aren’t used to seeing these tools in place.
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
42:19 DjangoCon US English 2017

Alexa...

As the universe of IoT continues to grow at a rapid pace, our abilities to interact with these devices can be useful. As an added bonus, developing these skills can be fun too! I’ll take you through my journey of developing my first Alexa skill in Python for Amazon Echo devices aptly named Happy Days. It is a random quote generator that delivers positive quotes. I’ll go over the skills of how to get Python to talk to Alexa and how to dump that code into Lambda for a seamless delivery between Amazon Web Services and the Alexa Skills Kit in just a little over 200 lines! Never developed an Alexa skill before? Don’t worry, I hadn’t either. I’ll provide plenty of resources to help get you started on a path you’ll never want to leave as an Alexa developer. Building an Alexa skill helps: Further develop your own skills in Python. Gain familiarity with Amazon Web Services’ Lambda service which allows you to run code without provisioning or managing servers. BYOC - Bring your own code! (Python, Node.js, Java, and C#). Gain familiarity with Amazon Web Services CloudWatch service which helps monitor and log activities with your Amazon Web Services resources which is helpful for troubleshooting. Gain familiarity with the Alexa Skills Kit which is the platform behind Alexa development. Learn about tools and resources you can take advantage of to ensure you have a meaningful development experience. Learn how to “talk” to the Alexa Skills Kit through your Python code. Helpful reminder that user experience is key!
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
34:16 DjangoCon US English 2017

DjangoCon US 2017: Lightning Talks Day 1

  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
27:44 DjangoCon US English 2017

Saved you a click (or three): Supercharging the Django admin with actions and views

  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
42:54 DjangoCon US English 2017

The 10 Commandments of Community Organizing

Welcome to the advanced class on community organizing. You’ve got a decent amount of members in your Meetup.com group, you hold events fairly routinely, maybe you’ve pulled in some legit speakers at your last conference or event … and you want to do more. This talk will focus on community organizing for growth and longevity by building out teams, improving communications, implementing processes, and most importantly will discuss how to maintain sanity in your work-life-volunteer balance. If you’ve ever had to answer the question “Oh, this ISN’T your full time job???” - this talk is definitely for you. If you’re just starting out organizing and don’t want to fall flat on your face, this talk will be very pragmatic for you.
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
37:36 DjangoCon US English 2017

End-to-End Django on Kubernetes

Not only is Kubernetes a great way to deploy Django and all of its dependencies, it’s actually the easiest way! Really! Deploying multi-layer applications with multiple dependencies is exactly what Kubernetes is designed to do. You can replace pages of Django and PostgreSQL configuration templates with a simple Kubernetes config, OpenShift template or Helm chart, and then stand up the entire stack for your application in a single command. In this presentation, we will walk you through the setup required to deploy and scale Django, including: Replicated PostgreSQL with persistent storage and automated failover Scalable Django application servers Front-ends and DNS routing The templates covered in this presentation should be applicable to developing your own Kubernetes deployments, and the concepts will apply to anyone looking at any container orchestration platform.
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
24:15 DjangoCon US English 2017

Django vs Flask

When it comes to web development in Python, Django isn’t the only game in town. Flask is a scrappy young framework that takes a very different approach – whereas Django ships with tons of features ready and eager to be used, Flask provides a bare minimum feature-set with rock-solid extensibility and incredible flexibility. This talk, given by a web developer who has experience with both frameworks, takes a good look at the pros and cons for both Flask and Django. If you’ve ever felt that Django is too hard to learn, or too inflexible, this is the talk for you! Outline What is Flask? Historical background Django vs Flask Ideological differences Example “hello, world” websites Database support Django ORM vs SQLAlchemy, Peewee, etc… Non-relational databases User model django.contrib.auth vs Flask-Login, Flask-Principle Django Admin vs Flask-Admin Django apps vs Flask Blueprints Django REST Framework & comparisons to Flask Which is better? Depends on your use-case.
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
22:48 DjangoCon US English 2017

Files in Django

One of the most confusing parts of Django for newcomers (and some old hands alike!) is the handling of files. Among the 10+ settings, static vs user uploaded distinction, and plethora of deployment options it’s no wonder that many people end up cargo-culting their production settings. The API overview Short introduction Go over the difference between static & media files Run through the File abstraction and the various settings Django Storage API, collectstatic etc Production & Development configuration Whitenoise/dj-static/Nginx for static files Cloud storage providers for media & static files (S3 etc, mention some popular libraries such as django-storages) CDNs Implement a storage engine together & the future Implementation - practicing what we just learned to solidify understanding Closing remarks and mention possible future Django developments.
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
31:05 DjangoCon US English 2017

Hunter2: A Symphony of Password Horror

The year is 2017. We have hoverboards, jetpacks, solar-powered cars, and also so many awful passwords that it’s become trivial for pretty much anyone to have their accounts compromised. We’ve got passwords for our passwords. Eight-year-olds with a dictionary and a set of dice can generate mathematically stronger passwords than most corporations that have your credit card details. We spend our days wandering through endless forests of requirements to come up with something that contains no more than twelve letters, a special character, the eye of a newt, and at least one uppercase letter, only to be emailed it back in plaintext if you forget it. And then it goes on a Post-It note on a monitor. Do not despair - this talk is here to help! From beginners to experts, all technical folk have the power to build a post-password future. Lilly, an engineer and historian, will guide you through the history of how we got ourselves into this state, and explain why major companies still think that the best way to keep your stuff secure is to poke their heads out of the tree-house and ask you for the secret word. She will then hand you strong technical tools to help your clients and colleagues understand why there are better things out there than “Welcome1!”, and help you work together to bring a small ray of sunshine into our password-saturated world.
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
23:43 DjangoCon US English 2017

Getting the most out of Django’s User Model

Django’s User model is nice, but the fields it provides out of the box are minimal. We frequently need to associate our own custom data with a user, and luckily Django provides ways for us to add to its built-in User model. This talk will help novice Django developers understand which options are best when it comes to getting the most out of the Django User model. I’ll start by talking about the built-in Django User model and what it has to offer. Then I will identify scenarios when the User model might not be enough for a project, and why someone might want something with more flexibility. Then we’ll look at the different ways to get the most out of the Django User model. There are two main methods I’ll cover: Extending the User model Creating a custom User model Extending the User model: Extending the User model is handy when you only need to add a few extra fields. There are two main ways to do this: using a proxy model, and using a OneToOneField. I will cover the pros and cons of each, and give examples for implementing each. Creating a custom User model: With this method, you can substitute Django’s default User model with your own. Though more complex, a custom User model is particularly useful when you need to uniquely identify users by email address instead of by username. I’ll go into a couple more scenarios where a custom User model would be helpful, and show examples of implementation. Lastly, I will show how each method works with the default Django admin, and how they can be managed there.
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
23:47 DjangoCon US English 2017

Get a Jumpstart on Collaboration and Code Review in GitHub

Even though open-source collaborators and code reviewers are needed more than ever, the few git learning resources that focus on these subjects are not beginner friendly. This is a missed opportunity! As the DjangoCon US Website Chair, I review pull requests submitted to the website repo. This has given me the opportunity to develop a beginner-friendly, best practice GitHub workflow. I can jumpstart your collaboration and code review skills by sharing what I’ve learned with you. This talk is for anyone, but one of my goals in giving it is to encourage other women to take leadership roles.
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
21:25 DjangoCon US English 2017

Tasks: you gotta know how to run 'em, you gotta know how to safe' em

Web developers often find themselves in situations where server processing takes longer than a user would accept. One very common situation is when sending emails. Although simple and relatively quick task, it requires the communication with an external service. In this situation, it’s not possible to foresee how long that service will take to answer. Not to mention the many unexpected situations that can arise, such as errors and bugs. The solution to this problem is to delegate long lasting tasks while responding quickly to the user. This is the point where we need async tasks. There are some tools available that can assist in this job. In this talk, you will learn about the concepts, caveats and best practices for when developing async tasks. For this, I will use Python’s most popular tool for the task: Celery. Rundown: Setting the context (~3 min) The architecture (~3 min) Brokers Workers Use cases (~2 min) External calls Long computations Data caching Tools available (~1 min) Celery (~16 min) Callbacks Canvas Logging Retrying Monitoring Tests and debugging.
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
28:36 DjangoCon US English 2017

Programming Post-Progeny: A New Parent's Perspective

When my daughter appeared on the scene in October 2017, my life was turned upside down. As I was returning to work, I found that previous strategies for managing my time weren’t up to snuff and I needed to create new ones if I was to be effective at my craft. No longer did I have 15 minutes to “get in the zone” - I needed to get things done in any time available. I learned to carve milestones out of minutes (sometimes) and will share what did (and didn’t) work for me. I also share stories about my general journey of becoming a parent that may be helpful to anyone thinking about becoming a parent (or just wondering what it might be like!). Or you could just come to the talk for the cute baby pictures - they make everyone smile!
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
26:46 DjangoCon US English 2017

The Monster on the Project

Abusive behavior can have profound effects on personal relationships but it can also make open source contributing and office life miserable. For those stuck in a team with co workers who exhibit toxic behavior, going to work every day can feel like going to a battlefield. Knowing how to identify and how to respond to unreasonable behavior is vital. In this talk we will look at the ways we can improve our office and FOSS communities by recognizing, managing and gracefully removing this toxic behavior. Take away: What abuse looks like How it affects those around it Steps to take if you are the target of abusive behavior How to manage toxic people in your project.
  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
20:38 DjangoCon US English 2017

The shy person's guide to tech conferences

  • Published: 2017
  • Publisher: DjangoCon US
  • Language: English
out of 1 pages
Loading...
Feedback

Timings

  146 ms - page object
  117 ms - search
    7 ms - highlighting
    0 ms - highlighting/33185
    3 ms - highlighting/33175
    1 ms - highlighting/33209
    1 ms - highlighting/33177
    2 ms - highlighting/33179
    1 ms - highlighting/33173
    1 ms - highlighting/33181
    3 ms - highlighting/33189
    2 ms - highlighting/33178
    3 ms - highlighting/33213
    2 ms - highlighting/33199
    2 ms - highlighting/33206
    3 ms - highlighting/33195
    1 ms - highlighting/33188
    1 ms - highlighting/33172
    1 ms - highlighting/33216
    0 ms - highlighting/33217
    2 ms - highlighting/33190
    2 ms - highlighting/33192
    2 ms - highlighting/33182
    1 ms - highlighting/33218
    1 ms - highlighting/33184
    1 ms - highlighting/33193
    2 ms - highlighting/33212
    3 ms - highlighting/33207
    2 ms - highlighting/33196
    1 ms - highlighting/33208
    2 ms - highlighting/33186

Version

AV-Portal 3.8.0 (dec2fe8b0ce2e718d55d6f23ab68f0b2424a1f3f)