Event Location:
University of Portland
5000 North Willamette Blvd
Portland, Oregon
Abstract:
Data breaches abound! Do you want to keep your company out of the headlines? What are some of the data privacy laws affecting you? How will encrypting data affect your database performance? What data fields should you encrypt? What else can you do to protect your sensitive data? In this session, we will review each option to encrypt data within SQL Server, Transparent Data Encryption, Cell Level Encryption, and Always Encrypted. While we look at the encryption options, we will review both on-premise and cloud offerings. This session will deep dive into setting up Always Encrypted encryption and share experiences implementing the encryption. Also, let’s learn how to classify data which should be protected and how to audit sensitive data usage. You will leave this session with a deeper understanding about SQL Server encryption options and how encryption can affect your performance. Also, you will gather information on how to fully protect and review your sensitive data usage.
Speaker(s): Thomas Norman,
Abstract:
Have you ever needed to learn a new database design and don't know where to begin? Or are trying to find out why a query doesn't perform well? Or need to provide security information to auditors or your security team? SQL Server has numerous metadata facilities available to help you with these tasks and more. Functions, dynamic management views, and system stored procedures can illuminate details from a single column up through an entire SQL Server instance. We will demonstrate metadata techniques to help you: - Document your database schema objects such as procedures, functions, tables, columns and indexes - Investigate performance and look for bottlenecks and tuning opportunities - Discover metadata to administer your databases backups, index maintenance, and security - Apply your own metadata using extended properties We will also cover the official Microsoft documentation on these features and other resources on how to use them.
Speaker(s): Rob Volk,
Abstract:
Want to get more out of your SSIS development efforts? The SSIS Productivity Pack is a collection of premium SSIS components which enable an improved SSIS ETL development experience with greater potentials. These SSIS components for connectivity and productivity offer more features and bring new enhancements to SSIS to enable integration scenarios not once possible without custom scripting. In this session, we will introduce you to our collection of 150 advanced SSIS components. We will demonstrate some of our most popular offerings including our JSON XML components for integrating with REST APIs, Premium Derived Column with over 225 functions, and unique components such as Duplicate Detector and Diff Detector. In additional to performing advanced transformations you will also find codeless and feature-rich solutions for integrating with virtually any application or database system including leading enterprise applications such as Microsoft SharePoint, Dynamics 365 and more.
Speaker(s): Daniel Cai,
Abstract:
In this session German Data Platform MVP Frank Geisler will explain the basics of Docker. He will explain what Docker is, how it works and most importantly how you can use Docker to run SQL Server within seconds on Windows, Linux or Mac. This demo packed session is the right session for you if you heard about Docker and want to get started. [Video]
Speaker(s): Frank Geisler,
Abstract:
The Query Store houses valuable information on performance of your queries, as well as gives you great insights into your query workload and plan changes. This presentation will take a look at what's new in the 2017 Query Store, the new adaptive query processing features, and how to incorporate Query Store queries into the new SQL Operation Studio for monitoring slow running queries and analyzing waits. You'll learn how to use the Query Store to quickly find plan changes, analyze performance issues and find the waits that caused them. Both DBAs and developers can increase their performance-tuning skills by attending this session. You will learn: How to quickly find plan changes and analyze performance issues How to use the new wait classifications in order to get clues on how to tune your statements About the new adaptive query processing features and SQL Operation Studio
Speaker(s): Janis Griffin,
Abstract:
Back to the Future is the greatest time travel movie ever. I'll show you how temporal tables work, in both SQL Server and Azure SQL Database, without needing a DeLorean. We cover point in time analysis, reconstructing state at any time in the past, recovering from accidental data loss, calculating trends, and my personal favourite: auditing. There's even a bit of In-Memory OLTP. There might even be time for demos!
Speaker(s): Randolph West,
Abstract:
DevOps automation can be intriguing to learn and overwhelming to implement. This session will take a real life use case of a multi-tier and complex environments, with various stake holders to a successful conclusion. Unlike a session on concepts, this session surrounds itself with a real-life situation and how automation was used with DevOps practices to build a solution. The session will demonstrate the reasons to automate, along with the steps required to make it possible, offering insight into concepts that are often too vague to employ. The attendee will see multi-platform and cloud tool demonstrations on how to take the DevOps methodology and continuous delivery to actuality in their own projects, no matter if small or large.
Speaker(s): Kellyn Pot'Vin-Gorman,
Abstract:
What is Power BI Premium and how is it different then Power BI and Power BI Pro? What do you get for the $5000/month that Power BI Premium costs and what are the alternatives (if any)? In this session, we will go over all the differences between the Power BI offerings from Microsoft and some of the features yet to come. With multiple demos we will walkthrough the features of Power BI Premium so that you can see if it provides value to your company. Come to this session if you have been thinking about Power BI Premium, but you have been unable to determine if it is right for your company. At the end of this session, you will be armed with all of the knowledge you will need to make the right decision.
Speaker(s): Steve Wake,
Abstract:
Common Data Model as the foundation of Power BI Dataflows and as part of the Open Data Initiative with SAP and Adobe, seems to be a pretty good move from Microsoft. We want to take a closer look to this approach. In this session we show how the Common Data Model will allow you to combine Self-Service ETL and Corporate Data Engineering. We will show you how Power BI and more specialised tools like ADF, DataBricks etc. can work together on the Azure Data Lake with one common model. We than extend this and show, what opportunities this standard brings to you, when we unleash the possibilities you have on managing Data Quality and Governance. We also will have a look in how you integrate CDM in a DataOps Methodology.
Speaker(s): Oliver Engels,
Abstract:
Python and Jupyter Notebooks have become popular with data professionals and cloud platforms such as Azure and Google. With applications in data exploration, analysis, model training, visualization, and data sharing, they've transformed how data professionals work. In conjunction with the growth of these tools, data workflows are also utilizing cloud resources for easier collaboration, access to powerful hardware, and distributed storage/computation. Join us in this interactive session for an intro to Jupyter Notebooks and Python, where they came from, when you should use them and how they are being used on the cloud today. We will walk through a basic data project using some core data packages in Python to explore a dataset and see these tools in action. By the end of this session you will be ready to join the Jupyterian Snake Invasion in data questing! To get a head start with Jupyter, explore your first notebook with Azure notebooks: https://notebooks.azure.com
Speaker(s): Robby Boney,
Abstract:
New advances in technology coupled with the rate of change in the data-driven world are placing the issue of Privacy and Ethics at the forefront of public consciousness – forcing a discussion around the ethical use of data within business and the role that each data professional must play in ensuring that the highest standards are reached, maintained, and constantly evaluated. Technologies such as machine learning, artificial Intelligence, and big data processing are providing new business opportunities that must also account for privacy and ethics issues while maintaining a balance with compliance, security, and integrity of data. But what are the issues that individual data professionals should be aware of to avoid reputational damage to their companies and themselves? And what are the tools that can help them in their endeavors? This session will take a close look at some of these challenges and the tools that are available to help mitigate these issues and risks.
Speaker(s): Martin Catherall,
Abstract:
This session is an overview of some of the features and capabilities of Reporting Services. In it you will see a variety of reports styles and template considerations and get an understanding of the power of Linked Reports and Shared Data Sets along with a brief look at some of the Enterprise Edition capabilities with KPIs and Mobile Reports. We will also cover how to use the data in the ReportServer database to determine which reports are being utilized and determine which reports to migrate to a new implementation of SSRS. Come see how you can use PowerShell to extract the reports and datasets from the database in order to build a new solution for deployment to a new server. Experience managing SSRS and ideally an understanding of the ReportServer database is useful but not required in order to benefit from this session.
Speaker(s): Ted Stathakis,
Abstract:
Data Breaches are seemingly neverending in today's world with new ones coming to light every single day. To try and mitigate the fallout of a data breach we can implement a data masking strategy throughout our environments, so why haven't we already? In this session, you'll learn the traditional blockers to, and issues with masking data, how to overcome these, and how you can build your own masking plan to ensure the security of your data in pre-production.
Speaker(s): Christopher Unwin,
Abstract:
When your development team is up to a certain size and often no matter what size it is you want to start following best development practices. These include things like source control, multiple environments, deployment processes and governance. As Power BI content is developed using Power BI Desktop and not Visual Studio as most Microsoft BI solutions are these things can get tricky. In this session we will look at what Power BI has to offer when it comes to development lifecycle. We will look at the different options available to the developer when it comes to source control, dev, test and production and deployment of Power BI content. We will then look at the different options when it comes to distribution of content to the end user. Lastly, we will look at governance and see how it is possible to secure the content and audit the usage of Power BI.
Speaker(s): Asgeir Gunnarsson,
Abstract:
The basic mechanism when we want to give users access to data or actions in SQL Server in a controlled way through stored procedure is ownership chaining. This is something we use everyday as SQL workers, although we may not be aware of it. Every once in a while, we run into situations where it seems that it is not sufficient to put a statement in a stored procedure, but that users need to be granted explicit permissions – something we may not always be comfortable with, because that would permit the users to do things we do not want them to be able to. There are two additional mechanisms in SQL Server we can employ in these situations: certificate signing and the EXECUTE AS clause. In this session I will start by exploring how ownership chaining works and its limitations. I will then proceed to explore the other two options and I will particularly focus on certificate signing, as this is the preferred method. At first it may seem overly complex, but I will show how it easily can be automated. EXECUTE AS may seem simpler, but I will point out potential problems with it, not the least if you try to use it on server level and consider to set the database as TRUSTWORTHY. This session is directed towards both developers and DBAs, as this session deals with problems you may face in either roles.
Speaker(s): Erland Sommarskog,
Abstract:
Have you ever felt passed up for a promotion or a stretch assignment because you identify as a woman, non-binary and/or as BIPOC (black, indigenous, or a person of color)? Have you ever had a chance to reach for the proverbial brass ring but did not or was prevented from doing so? Many workplaces endeavor to create an inclusive and equitable workplace but end up missing the mark by perpetuating systemic biases that impact the ability for folks to realize their fullest career potential, or even get access to the game at all. Join a panel of prolific speakers from PDX Women In Tech who will address topics like what to do when gender and/or race set the tone for the environment, and what to do when leadership doesn’t recognize an opportunity to promote equity. Audience (all are welcome) will be able to learn new ways to approach self-advocacy (or, in the case of allies, advocacy) and tips and techniques to further the conversation around equity and inclusion in their workplace.
Speaker(s): Padmashree Koneti,
Abstract:
When Microsoft released SQL Server 2017 it allowed data professionals to run SQL Server on Linux and in containers, providing a wider and more open platform to deploy and run SQL Server. This session will showcase both the differences of SQL Server on Linux and the things that will be familiar for DBAs. The top Linux commands that SQL Server DBAs should know will be discussed and demonstrated. This session will incorporate a demonstration that will showcase the fundamentals of Linux management for SQL Server as well as s sneak peek at SQL Server on containers. This session will help you understand the basics and will present the exciting future of SQL Server on Linux.
Speaker(s): Hamish Watson,
Abstract:
The need for organizations to provide Row Level Security (RLS) in their applications is increasing every day, often in existing applications where code changes are not easy. Microsoft has addressed this need in SQL Server 2016/2017/2019 and Azure SQL DB/DW with predicate based RLS and in Power BI, as well. This session will show how organizational asset hierarchies are leveraged together to provide predicate-based RLS on tables in SQL Server 2016/2017, Azure SQL Database and Power BI without application changes. This session will go beyond the basic RLS setups and show a real-world production setup of RLS using a small number of security records to secure large and small organizations. Attendees will leave with a complete working demo they can take to their work and begin to use immediately. The demo will walk completely through creating the database, creating the application tables and security related tables, loading demo and security data, setting up the RLS and testing the RLS.
Speaker(s): Jamey Johnston,
Abstract:
Data science seeks to uncover actionable data relationships to solve pressing organizational needs e.g. improved cyber security behavior, and this talk presents three steps for doing just that. The aim is an exemplary theory driven approach to data evidence of better preparedness against cybersecurity threats. We will present a theory of cybersecurity behavior and how data was collected from training participants then stored in SQL server for analysis in R with a ML classifier. The ML random forest classifier implemented in R is used to analyze survey responses to theoretically-inspired questions. It creates a preferred multi-model integration that can be reused on future data to identify the individuals less likely to participate in the security training who may also be a higher security risk. The talk concludes by summarizing the three tips for actionable data science projects covered here. A short video will preview for SQL Saturday attendees.
Speaker(s): Michael Curry,
Abstract:
If you’re a product manager or business owner who’s relied on others, be it data analysts, DBAs, or other data professionals to pull data for you to analyze and visualize, then this is the session for you. This session will focus on real-world examples of how to use SQL to get the data you need to improve your product, speed up your innovation cycles, gain product insights faster, and generally become a leaner, more functional product manager through the use of data. This session will focus on basic SQL queries that are common for product managers (date ranges, sorting, basic aggregate functions like SUM and COUNT) and useful tools to help make the process easier to implement (Azure Data Studio, Docker, Kitematic, MySQL, Azure SQL, PowerBI, and others). Attendees will come away from this session with a better understanding of SQL and how it can be used and applied for more product and business focused applications and testing.
Speaker(s): Brian Ziff-Levine,
Abstract:
Using a real world example that is in production this session will go though pitfalls I experienced and how to avoid these mistakes in the beginning which will save you lots of data wrangling over time. Clustered Column Store Indexes are a great tool when used correctly. This session will explain on how to plan, configure, and operate Clustered Colum Store indexes to handle trillions of rows.
Speaker(s): Thomas Grohser,
Abstract:
One of the simplest ways to enhance the value of the information we provide is to add context. Supplementing each data point with information from a larger data set is a common way of adding this context. In T-SQL, we achieve this by using Windowing Functions. In this demo-heavy session, we will walk through the uses of Windowing Functions, from simple row orders to more complicated calculations like rolling averages. We'll explore each keyword in turn, building more sophisticated functions as we do. Each concept is illustrated in a visual, and T-SQL example so it is clearly understood. So whether it's tracking a value against the previous row, creating running totals, or a rolling sum, when you walk out of this session, you'll be able to write a windowing function to make it happen.
Speaker(s): James McGillivray,
Abstract:
This session is an introduction to the unique functionality offered by COZYROC to create integration packages that dynamically map columns at runtime. The standard SSIS Data Flow Task can only use static metadata which is defined when the package is initially designed. The mapping of columns is configured and remains unchanged until the package is re-opened and design changes are made, thus costing maintenance time and effort. Data Flow Task Plus extends the capabilities of the standard Microsoft Data Flow task in that it allows you to set up dynamic data flows, thus eliminating maintenance time and effort. Changes to tables and columns are automatically incorporated at run time without the need to change and redeploy the package. Columns and fields are mapped automatically at run time. Furthermore, the initial design time and effort may be greatly reduced when dealing with huge amounts of data in a large number of files and/or databases.
Speaker(s): Diane Schuster,
Abstract:
Data-driven strategies are now a competitive imperative to succeed in every business and industry. To support business objectives such as revenue growth, profitability, and customer satisfaction, organizations are increasingly reliant on data to make decisions. Talend Data Fabric solves some of the most complex aspects of the data value chain from end to end. Users can collect data across systems, govern it to ensure proper use, transform it into new formats, and improve quality, and share it with internal and external stakeholders – all in a collaborative, multi-cloud data integration environment.• A unified environment that provides access to all Talend capabilities Native code generation for better performance Self-service data access with governance for increased productivity Pervasive data quality for more confidence and less risk Talend Data Fabric enables customers to deliver trusted data at speed, providing them with a complete solution for all data n
Speaker(s): Karan Kumar,
Abstract:
"I've got a locking problem", "I need to get rid of blocking," and "deadlocks are normal behavior" are all things heard way too many times. In this session targeted at the accidental or new DBA, we will walk through each of these items, what they are, what their causes are, which of them are normal behavior and which are not, and some common causes of deadlocks and excessive blocking.
Speaker(s): Randy Knight,
Abstract:
Session Two : Melody Zacharias: Resumable Index Rebuild In Action! Ted Stathakis: Commenting your Code! Ted Stathakis: ProperCase - My Favorite UDF Janice Gerbrandt: Automate Tests in your Database with tSQLt.
Speaker(s): Michael Wall,
Abstract:
Data is everywhere and Data Science is a very popular topic among data analysts and BI professionals. In this session, I will cover the basic data science principles and methodologies using the Python programming language. I will also present some real-world data analysis case studies using the Python libraries, such as NumPy, pandas, Matplotlib, and SciPy. This session will benefit to anyone who is looking to get started in the data science/ Data Analytics field.
Speaker(s): Ganesh Lohani,
Abstract:
Session Four : William Assaf: I Was Once a Crappy Carpenter Jessica Aguilar: Purposeful Learning Jessica Aguilar: The Art of Documentation
Speaker(s): Michael Wall,
Abstract:
To stay competitive in today’s world is to stay agile by making swift, intelligent, data-driven decisions. Join us to see how you can enable your organization to be data-driven with the fastest growing cloud-enabled data warehouse, Snowflake. Especially if any of the following interests you: • Escaping the constraints of legacy technology. • Delivering insight from all your data to all your business users. • Creating your own data sharing economy. You will also learn: • The ease of Snowflake’s intuitive user interface • How to easily load, integrate and query structured and semi-structured data • What it’s like to run large queries in a fraction of the time • How to effortlessly connect your BI/ETL tools
Speaker(s): Brian Whittington,
Abstract:
Do you have more than 1 server that you manage? More than 1 database? Then this session is for you. PowerShell interest is on the rise and it is one of the coolest tools you can learn as a DBA. Learn tips and tricks using PowerShell that will help you manage SQL Servers and get more done with less effort. From getting started in PowerShell to getting information about your servers/databases to making changes to your SQL Servers all using PowerShell. This is one tool you will want in your toolbelt to help sharpen your skills.
Speaker(s): Ben Miller,
Abstract:
You too can build a development Environment for Reporting Services and SQL Server with Azure completely in PowerShell without any GUI!! Additionally, Frank Geisler will be discussing the ReportingServicesTools in PowerShell.
Speaker(s): Frank Geisler,
Abstract:
"We are pleased to host a Power BI Ask Microsoft Anything (AMA) at SQL Saturday! This is your opportunity to ask and share feedback directly with Christopher Finlan, Principal Program Manager on the Power BI team. Chris owns the SSRS, Power BI Report Server, Paginated Reports and Power BI product areas along with related items like exporting and subscriptions all-up. Feel free to discuss these (or any) topic related to Power BI and hear the answers straight from the product team. Special guest appearance by Paginated Report Bear as well.”
Speaker(s): Chris Finlan,
Abstract:
Session Five: Russ Loski: Parsing Fixed Width Files with Azure Data Factory Daniel Cai: Build Sophisticated Data Solution Using Adv. SSIS Components Hari Mahesh: Predicta
Speaker(s): Michael Wall,
Abstract:
Almost all of us use SQL Server Management Studio to interact with SQL Server, and thankfully it works right out of the box. But did you know there are so many tricks and shortcuts that hide just under the surface that can make working with SSMS feel like second nature? In this session, I will take a fresh install of SSMS and step through customizing it. I will demonstrate features and help you become more efficient at utilizing SSMS to it's fullest potential - a lot of the time without using the mouse. Finally, I’ll show you some cool text editing tricks that will take your SQL skills to a whole new level.
Speaker(s): Adrian Mee,
Abstract:
Session Three : Martin Cairney: Azure SQL Database – Building a Deployment Standard Martin Cairney: Data Governance and Protection in SQL Server Josh Smith: What Use is Data Catalog?
Speaker(s): Michael Wall,
Abstract:
Statistics are key to the selection of a good execution play. But statistics aren’t perfect, and they often require management over and above what the default SQL Server configurations supply. In this session we’ll look into why statistics, and specifically the histogram, are so important to good query performance. We’ll see how they’re not perfect, and how that can result in an occasional bad execution plan (slow query). I’ll also present a few methods to resolve those statistics-caused performance issues. Of course there will be plenty of examples.
Speaker(s): Vern Rabe,
Abstract:
Have you ever thought what would it be like to run SQL Server engine in a small footprint? Well, wait no more. Running on Arm and x64 architecture with a reduced footprint, the proven performant and most secure Microsoft SQL engine is coming to the Edge in interactive devices and edge gateways. Combining new capabilities on data streaming and time-series, with in-database machine learning (ML), Azure SQL Database Edge is optimized for low-latency analytics right on the Edge. This session will showcase the scenarios Azure SQL Database Edge can enable.
Speaker(s): Julie Koesmarno,
Abstract:
Power BI is already proven technology and everyone should know at least basics of it. That is elementary startup session at which you will learn: - How to use PowerBI Desktop application; - How to get source data, build reporting dashboards, manipulate with columns, present the data in forms of a table and different kinds of diagrams; - How to apply different formatting settings to the diagrams and setup interactions between them; - How to do comprehensive filtering, drill down and drill through of your data. After this session you will be really able to work with Power BI on your own.
Speaker(s): Slava Murygin,
Abstract:
Azure Data Studio, keeping in line with Microsoft's ethos of tooling that works on many platforms this one runs on Windows, macOS and Linux. This session is to give you an introduction to the product give you an idea of where/how it can be used in the Data Platform space. We will also cover some of the main features (code snippets, widgets, extensions) and time permitting Notebooks. Hopefully by the end of the session you will be aware of Azure Data Studio and be ready to give it a go! Level: Beginner Level 100
Speaker(s): Heidi Hasting,
Abstract:
You’ve heard all the buzz about Power BI, but you have no idea what it is and how it works. This session explains what Power BI is, who can use it and why you would want to. It’s an introductory session that gives you the information you need to determine if Power BI is right for you and your organization.
Speaker(s): Angela Henry,
Abstract:
The era of unchecked data costs is about to end. Businesses are tired of initiatives that rely on unproven technology, unattainable talent, uncontrolled spending, and, most important, unsatisfactory data literacy. Gartner predicts 80% of the data workforce to be outsourced by 2021. What can we do, as data professionals, to prove our value? How can data literacy become an organizational imperative before it's too late?
Speaker(s): Elliott Whitling,
Abstract:
Building effective PowerBI reports and dashboards requires a well-designed data model with the right relationships and measures. This session will tackle these design challenges head on and show how to approach this critical phase. With an example project to guide us through the design phase and the various stages as we progress to a completed working data model and have a template for reusing on other projects. Along the way we will show the DevOps approach to building the design model .
Speaker(s): Neil Hambly,
Abstract:
In this session we will discuss how you can get your data quality problems under control on the Microsoft Data Platform. We'll show you how to quickly and easily integrate a duplicate search into your applications, how to migrate Microsoft SQL Server Data Quality Services to Azure, how to clean data with the SSIS-IR and how to improve your self-service processes in Power BI. All this with HEDDA.IO directly on Azure.
Speaker(s): Tillmann Eitelberg,
Abstract:
2 text transaction files, a pivoted excel budget file, 20 Power Queries, 6 dimensional tables, and one interactive Excel dashboard = mind blowing awesomeness in under 60 minutes. But while the analysis is important, the real value in the refresh. Can your model pull in another 22 text files and next year's budgets in less than a minute? This model can. Come and see how Excel 2016 gives us the ability to not only rapidly create business intelligence, but also allows us to build engaging and interactive models that can be quickly updated and shared via Power BI.
Speaker(s): Ken Puls,
Abstract:
Looking for a job? Learn trade secrets from an HR professional! Resume blunders and interview tips, this session will focus on the most important things you can do to get hired.
Speaker(s): Christine Assaf,
Abstract:
Want to polish your Power BI dashboards and take them to the next level of design? In this presentation Jackie Wilushewski, a User Experience Designer at Marquam, will guide you through her methodology of User Experience Design. Then, starting with a typical “all-business” dashboard, Jackie will demo step-by-step how to implement simple changes to improve usability and aesthetics.
Speaker(s): Jackie Wilushewski,
Abstract:
Catherine Siverts: Diverse Voices in Analytics: Designing Case Studies Slava Murygin: SQL joins Slava Murygin: SSMS Shortcuts
Speaker(s): Michael Wall,
Abstract:
Continuous Intelligence is commonly used to describe approaches to constantly analyze data by applying machine-learning algorithms. But you can also understand it to be a combination of the terms of Continuous Integration and Business Intelligence. Support for BI projects in CI has been a field for improvement in even the near past. But why was that? BI offers some special challenges for CI processes that we want to discuss during this session.
Speaker(s): Gabi Münster,
Abstract:
Getting started with GitHub can at times be overwhelming. Especially when you've been working with other source control and project management systems your whole career. In this session, we will overview the below tasks to ensure your success with GitHub. * Initial setup of a Repository in GitHub. * Build Issue templates for new features, bugs, or custom tasks. * Securing the check-in/merge process to your root branch. * Integrating GitHub with other productivity tools to keep on top of changes.
Speaker(s): Joshua Higginbotham,
Abstract:
You may have heard the term “DevOps” a lot lately, but is this just one of those buzzwords that gets thrown around and means something different depending on who’s talking? While traditional software methodologies pit developers and operations folks like DBAs against each other, DevOps requires that they work together for a common goal. And, ultimately, shouldn’t the software project’s success be everyone’s goal? Attend this session to learn how DevOps is changing the DBAs world for the better.
Speaker(s): Kathi Kellenberger,
Abstract:
For most DBAs virtualization is no longer a matter of "If" but "When". This means it is critical for DBAs to understand how this technology works and how we can ensure we get the most performance and scalability out of it. In this session we will look at some of the best practices and gotchas when Designing Standalone and Highly Available SQL deployments in a vSphere environment. We'll also cover how to troubleshoot performance issues when they arise.
Speaker(s): Brandon Leach,
Abstract:
You’re a DBA or Developer, and you’ve been using SQL Server for a few years. You know there are different ways to make queries faster, but you’re not sure when to use them. I’m Erik Darling, and I’ll be your sommelier for the evening. Over several courses of delicious demos, I’ll show you the types of performance problems different tuning techniques pair well with, and which ones to avoid. When we’re done, you’ll understand exactly what patterns to look for when you’re troubleshooting slow queries, and how to approach them. You’ll have the secret recipe for gourmet queries.
Speaker(s): Erik Darling,
Abstract:
Determining how to efficiently design database structures for a given application has always relied on the same old answer: "It depends!" So, how do you determine what level of normalization your data requires? This session will review the principles of data normalization, show the impact that normalization can have on performance and data integrity, and just as importantly, show you when it's OK to break the rules and denormalize. We will cover some case situations where it's better not to be normal!
Speaker(s): Aaron Cutshall,
Abstract:
What was AI in the past, what is it now and where will the future take us? Data Science, Azure Machine Learning, and Analytics are all becoming core pieces of a many successful businesses. What are people doing with it and how can it be used in all aspects of business. As data professionals, we need to know how these core pieces will affect what we do, and how we can use the Azure AI suite to help our clients. Using an easy to follow example, I will show the flow from problem to solution. A demonstration of AI used in the real world.
Speaker(s): Melody Zacharias,
This is a list of speakers from the XML Guidebook records. The details and URLs were valid at the time of the event.
LinkedIn: https://www.linkedin.com/in/michaellcurry/
I am an academic, data professional and behavioral cybersecurity researcher and very active in the Portland and SW Washington community. I am passionate about increasing equity in the tech field and have made contributions to improving gender diversity. I am part of the Oregon SQL leadership and the organizing committee for Oregon SQL Saturday.
LinkedIn: http://www.linkedin.com/in/tedstathakis
Contact: http://fishheadted.com
Ted Stathakis is a data professional passionate about the presentation layer. He has worked with SQL Server since the turn of the century, has mastered Reporting Services since he began working with it when it was released in 2004, and is super excited about Mobile Reports and Power BI. Ted hosts the local PASS user group, is the organizer of SQLSaturday Orange County and presented on SSRS at Summit in 2019. As a 40+ year veteran of the restaurant industry, he is been an advisor, speaker and panelist at national trade shows. When he isn't consulting on Business Intelligence projects he can be found presenting at a conference, enjoying some live music or teaching kids, both young and old, fishing and archery at a nearby Scout camp.
LinkedIn: https://www.linkedin.com/in/christineassaf
Contact: https://www.hrtact.com
Christine Assaf is an experienced HR pro who is passionate about the mental health of employees, leadership, and organizations. She is a leadership development professional with over 15 years experience in human resources and 20 years in business management. She holds a BS in Business Management, received her HRM certification at LSU, and is finishing up her master's degree at Colorado State University in Industrial and Organizational Psychology. She is a certified DDI Trainer, experienced public speaker, and is dedicated to teaching others about ways to support a culture of "expressiveness" in the workplace that creates connectivity.
LinkedIn: http://www.linkedin.com/in/dianeschuster
Diane has worked with COZYROC since 2012. She has attended numerous SQL Saturdays to shine the light on the time-saving and capability-extending components and tasks that COZYROC offers in it’s SSIS+ library. Without even having a background in databases or SQL Server, Diane successfully configures packages in live demonstrations that use COZYROC components and tasks. She believes that, if the toolkit is this easy to use for a novice, then just imagine what a SQL Server expert can do with it! In Diane’s data networking days, Diane performed a variety of development-related and customer-facing roles for IBM, Lucent Technologies, North Carolina State University and Connectware.
LinkedIn: https://www.linkedin.com/in/christopherunwincambridge/
Chris Unwin is a pre-sales engineer at Redgate Software, specialising in data protection with a keen focus on masking information in pre-production. He has been with Redgate since November 2015 and has most recently been working with a variety of companies to help them put in place a compliant DevOps pipeline for database development. He also records the Redgate ‘DBAle’ podcast with his colleague Chris Kerswell and has presented at IPExpo London, Manchester Agile Dev/Ops and PASS Marathon.
LinkedIn: https://www.linkedin.com/in/gabimuenster/
Gabi Münster is working as a Business Intelligence consultant and team lead and brings in her experience with SQL Server, data warehousing, relational and multidimensional database design and implementation, report and dashboard design, and Master Data Services, as well as project management into the community as a regional PASS Local Group lead. She is also passionate about motivating other women to start a technical career and therefore initiates and supports "Women in Technology" events. Apart from SQLSaturdays, she also spoke at SQLBits, SQL Nexus, Tuga IT, and 2015's and 2017's PASS Summit. In October 2017 Gabi received her first Data Platform MVP award.
LinkedIn: http://www.linkedin.com/in/armordba
Contact: https://armordba.com/
Tom Norman is a Database Architect at KPA with a strong fervor to protect data. He works daily to review and improve data protection methodologies while reviewing governing laws affecting finance, healthcare, and personal data. His areas of expertise include encryption, auditing, data identification, and database object deployment. He is the current leader of the PASS Virtualization Group and Vice President of the TRIPASS user group. You can read his blog at https://armordba.com/ and reach him on twitter at @armordba. Tom speaks at a number of SQLSaturday events and SQL Server user groups.
LinkedIn: https://www.linkedin.com/in/martincatherall
Contact: http://martincatherall.com
Martin is a data consultant in Melbourne, Australia, a Microsoft Data Platform MVP, and PASS Regional Mentor for the Asia Pacific (APAC) region. Martin founded the Christchurch, New Zealand PASS Local Group and lead the group for a number of years before relocating to Melbourne. He has been using SQL Server in various roles since 2000. In addition to anything data related, he enjoys playing the guitar and having fun with his family.
LinkedIn: http://ca.linkedin.com/in/melodyzacharias
Contact: http://sqlmelody.com
Melody is the Sr. Microsoft Solutions Manager at Pure and has been in love with data since 1991. She has been sharing her passion with the community in technical sessions and blogs since 2014. She has been a Microsoft MVP since 2016, including winning Rookie of the year for Canada that year. This last year, she was elected to the board of directors for PASS.org, the professional association for SQL Server and was awarded Regional Director by Microsoft. She has co-authored 3 books, including, SQL Server 2019 Administration inside out by Microsoft Press.
LinkedIn: http://www.linkedin.com/in/dbaduck/
Contact: https://dbaduck.com
Ben has been a member of the SQL Server Community since 2000. He loves a challenge and has fixed many SQL Servers and helped hundreds of people get more out of their DBA jobs. He is a Data Platform MVP a SQL Server Certified Master (MCM). He has worked at various companies throughout the USA, as well as at Microsoft for 7 years. He is passionate about SQL Server Infrastructure, High Availability, Automation and Integration using SMO and PowerShell. He teaches DBAs how to use PowerShell to do their job and teaches SQL Server Internals. He is @DBAduck all around the web (Twitter, LinkedIn, Facebook, Blog) so let's catch up.
LinkedIn: https://www.linkedin.com/pub/slava-murygin/9/b95/858
Contact: http://slavasql.blogspot.com/
Started working with SQL Server 7.0 as DBA and Developer. Since then went through all SQL Server versions, migrations and multiple companies of different sizes and industries. Currently working as a contractor with all aspects of SQL Server, including, but not limited to: troubleshooting performance, designing/developing: databases, systems, processes, data warehouses, cubes, reports, ETLs; Refactoring old code; Migrating data from other systems to SQL Server; Securing the data on enterprise level.
LinkedIn: http://www.linkedin.com/in/jameyj
Contact: http://STATCowboy.com
Jamey Johnston is a Senior Data Scientist/Engineer for a large independent OG company. For over 25 years, he has worked for Fortune 500 companies architecting successful platforms in the cloud, on the edge, and on-premises for BI reporting, statistical analysis, ML, and AI. Lately, he spends his time in Azure, Python, R, Power BI, MS SQL, and SAS JMP. He holds a BS in Spatial Analysis from LSU and a Masters of Science in Analytics from Texas AM. He is a professor at the Mays Business School at Texas AM in the MS Analytics program. He is active in his PASS Local Group in Houston, co-leader of the local Power BI users group and data analytics group. He regularly speaks and volunteers at PASS events. He is also a Microsoft Data Platform MVP.
LinkedIn: https://www.linkedin.com/in/robby-boney-717486133/
Robby Boney is a software engineer at Interject. He is a Python enthusiast, with a background in bioinformatics research in hearing loss regeneration and computer science at Washington State University Vancouver. He is now leading product design initiatives for Interject focussed on scalable cloud data solutions and python based web applications.
LinkedIn: https://ca.linkedin.com/in/rabryst
Contact: https://bornsql.ca/blog/
Randolph West (they / them), founder of Born SQL, is an independent IT consultant, speaker, Calgary PASS user group leader, Microsoft Data Platform MVP, and lead author of “SQL Server 2019 Administration Inside Out”. Randolph specialises in SQL Server performance tuning, disaster recovery, and migrations from really old versions, with an emphasis on implementing best practices. Randolph has presented at PASS Summit, SQLBits, SQL Saturdays, and user groups. You can also find Randolph acting and directing on screen or the stage, or annoying people on Twitter. Do not trust Randolph around chocolate.
LinkedIn: https://www.linkedin.com/in/kellynpotvin
Contact: http://dbakevlar.com
Kellyn Pot’Vin-Gorman is a member of the Oak Table Network and an Idera ACE and Oracle ACE Director alumnus. She is a Data Platform Architect in Power BI with AI in the EdTech group at Microsoft. Kellyn is known for her extensive work with multi-database platforms, DevOps, cloud migrations, virtualization, visualizations, scripting, environment optimization tuning, automation, and architecture design. Kellyn has spoken at numerous technical conferences for Oracle, Big Data, DevOps, testing, and SQL Server. Her blog (http://dbakevlar.com) and social media activity under her handle, DBAKevlar, is well respected for her insight and content.
LinkedIn: https://linkedin.com/in/brian-m-ziff-levine-5b1a4b5
Brian is currently the Senior Product Manager at Springbrook Software, a leading provider of government and public-sector ERP solutions. He oversees the growth and success of Springbrook’s CivicPay payments platform with a focus on usability, profitability, and reliability. Brian is a ten-plus-year veteran of the consumer banking industry, having worked for large financial institutions such as US Bank and Navy Federal Credit Union in a product management capacity. Brian began his career in political consulting. He holds a bachelor’s degree in political science from the University of Wisconsin – Madison and an MBA in Data and Analytics from Southern Oregon University.
LinkedIn: https://www.linkedin.com/in/brianwhittington/
Brian has 20 years of experience working in the IT field, primarily focused on technologies supporting data science. He has worked on projects as diverse as fraud detection, marketing, population health, supply chain optimization, child safety, IoT and others in both the commercial and government sector. He currently works as a technical evangelist for Snowflake Computing helping organizations efficiently leverage their data assets to solve all types of business challenges and opportunities. Brian lives in West Linn with his wife, two teenage children and two dogs.
LinkedIn: https://au.linkedin.com/in/heidi-hasting-a068694
Heidi Hasting is a Business Intelligence professional and former software developer with over seven years experience in Microsoft products. She is an ALM/DLM enthusiast and Azure DevOps fan and co-founder and organiser of the Adelaide Power BI User Group. Heidi is a regular attendee at tech events including Azure Bootcamps, DevOps days, SQLSaturdays, Difinity and PASS Summit.
LinkedIn: https://www.linkedin.com/in/danielcai/
Daniel Cai is a software developer specialized in SQL Server-based ETL integration development with various APIs and methodologies such as Microsoft Dynamics 365, data warehouse, etc. Daniel was a Dynamics 365 MVP for consecutive 8 years.
LinkedIn: https://www.linkedin.com/in/tillmanneitelberg
Contact: http://www.ssis-components.net
Tillmann Eitelberg is CEO and co-founder of oh22information services GmbH, which specializes in data integration and data management. Tillmann is an active blogger at www.ssis-components.net, writing regularly about data quality topics and his passion: spatial data. In addition, he has published several SSIS components on Codeplex and GitHub. Tillmann is a Data Platform MVP, a board member of PASS Germany e.V., a PASS CL for the Cologne/Bonn region, and a PASS RM.
Contact: https://erikdarlingdata.com/blog/
Erik Darling started using SQL Server after a dispute with Excel over a vlookup. He enjoys public arguments with the optimizer and wine photography.
LinkedIn: http://www.linkedin.com/in/b5lurker
Contact: http://blog.wakebi.com
Steve Wake is currently the Principal BI Developer at Brown and Caldwell and has experience in consulting, advertising, media, manufacturing, retail, charities, telecommunications and financial services organizations using the full on-premises Microsoft BI stack. Recent experience with the Azure services: Analysis Services, Logic Apps, Data Factory, Databricks, Snowflake and Power BI. Steve is also very involved in the SQL community, speaking at events around the world.
LinkedIn: https://www.linkedin.com/in/sqlservernerd
A Microsoft Data Platform MVP, Brandon manages the DB Operations team for financial company x. With a data estate of several petabytes, he puts a high focus on performance tuning and automation. He is a frequent speaker at events like conferences and user groups.
LinkedIn: https://www.linkedin.com/in/sqlrv
Contact: http://sqlrv.com
Aaron N. Cutshall is an Enterprise Data Architect with 20 years of experience in analysis, design and development for applications and databases in manufacturing and warehousing plus over 15 years in the Healthcare Informatics field. His primary focus is in designing and developing solutions for extremely large data sets that perform quite well in SQL Server. He is active in the SQL Server community and speaks at SQL Saturday sessions across the country.
LinkedIn: https://ca.linkedin.com/in/kenpuls
Contact: https://www.excelguru.ca/blog
Ken Puls, FCPA, FCMA is a Chartered Professional Accountant, author, and trainer. With over 20 years of experience as a corporate controller and business owner, he has been exposed to many business systems, databases, and analysis tools, leading to a career of building Excel and Power BI-driven applications to harness data and turn it into management information. A Microsoft Excel/Data Platform MVP since 2006 and author of 2 books, Ken has also been recognized as a Fellow of CPA Canada.
LinkedIn: https://www.linkedin.com/in/thomasgrohser/
Thomas Grohser has spent most of the past 26+ years exploring the deeper inner workings of SQL Server and its features while working for entertainment, pharmaceutical, and financial services industries. His primary focus is to architect, plan, build, and operate reliable, highly available, secure, and scalable infrastructures for SQL Server. Over the years he has managed thousands of SQL Server instances, processing trillions of rows, taking up petabytes of storage. Thomas has been a Microsoft Data Platform MVP for 9 years and has spoken regularly at conferences, SQLSaturdays, and user groups for 12 years.
LinkedIn: https://za.linkedin.com/in/thejimmyrsa
Contact: https://jimbabwe.co.za/blog-posts/
James McGillivray, Data Management and Analytics MCSE, has been working in Business Intelligence for over a decade. He spends his working hours building solutions that allow people to make informed decisions quickly and accurately. James is a director at Cobalt Analytics. Before his career in data, James was an avid musical theatre student and musician. This love for performance has developed into a passion for developing and delivering presentations that are informative and enjoyable. James speaks frequently at the Johannesburg SQL User Group, and has delivered sessions at numerous SQL Saturdays, PASS Summit, Power BI World Tour and SQL Bits.
LinkedIn: http://www.linkedin.com/in/kathikellenberger
Contact: http://auntkathisql.com
Kathi Kellenberger is the editor of Simple Talk at Redgate and a Data Platform MVP. She has worked with SQL Server for over 20 years and has authored, co-authored, or tech edited over a dozen technical books. Kathi is the co-leader of the PASS Women in Technology Virtual Group and a volunteer at LaunchCode. When Kathi isn’t working, she enjoys spending time with family and friends, cycling, singing, and climbing the stairs of tall buildings. Be sure to check out her courses on Pluralsight.
Contact: http://www.sommarskog.se
Erland Sommarskog is an independent consultant based in Stockholm, working with SQL Server since 1991. He was first awarded SQL Server MVP in 2001, and has been re-awarded every year since. His focus is on systems development with the SQL Server Database Engine and his passion is to help people to write better SQL Server applications.
LinkedIn: https://www.linkedin.com/pub/mike-wall/b/110/9a
Contact: http://www.becomingamaster.com
Michael Wall has been an IT professional going back to when he had his own software store and worked with his customers with their “dose” problems. Originally hired by a small consulting firm to write web pages, he was thrust into the SysAdmin world when their lead consultant changed the passwords of all of the servers at a major pulp and paper company’s systems to 100%s$%t and walked out the door. He was sent down with a copy of UNIX for Dummies and 50 cents for the bus ride back. Fast forward a few years, he was asked if he wanted to be a DBA after successfully managing a fifty server Y2K upgrade. Since then, he’s never looked back and has survived a number of data and system challenges. When not wrangling cats at home, he currently
LinkedIn: http://www.linkedin.com/in/angelahenrydba
Contact: http://SQLSwimmer.com
Angela is a Solution Architect, living in High Point, NC and loves what she does. She's worked with all versions of SQL Server worn all the hats that come with dealing with SQL Server throughout the years: developer, administrator, data architect and BI developer. She has her MSCE in Data and Analytics (f.k.a., Business Intelligence), is a Data Platform MVP, and a Microsoft Certified Trainer (MCT). She is the former chapter leader for the PASS Triad SQL User Group in Greensboro, NC. In her spare time you can probably find her in or at the pool, she's an avid US Masters Swimmer, Coach and Instructor.
LinkedIn: https://www.linkedin.com/in/christopherfinlan/
Contact: http://www.christopherfinlan.com
Since joining Microsoft in 2013, Chris Finlan is a leading evangelist for business intelligence. As the lead Business Intelligence Technology Solution Professional in the Mid-Atlantic Region, he was responsible for helping over 140 enterprise customers align their specific requirements to the Microsoft Cloud and Data Platform. His unique presentation style and background in “shadow IT” has made him a highly sought-after speaker for customer presentations and allows him a unique perspective on a variety of BI-related topics and trends. A Senior Program Manager on the Power BI Report Server Team, Chris has been working in the software industry for over a decade in various roles, from technical training, database administration and sales.
LinkedIn: https://www.linkedin.com/in/ganesh-lohani-6275a716
Ganesh Lohani has 10 years of experience working with Business Intelligence platform and Data Analytics, with over 8 years of experience with MS BI tools and Business Intelligence processes. He is currently working for Stericycle as a senior Business Intelligence Developer. He also enjoy his evening and weekend time in providing online training, coaching and mentoring individuals who want to learn MSBI (T – SQL, SSIS, SSRS, SSAS, and Power BI ) products. He holds MSIS degree from University of Texas at Arlington.
LinkedIn: https://www.linkedin.com/profile/view?id=4839367
Contact: http://www.gdsbi.de
Frank Geisler is owner and CEO of GDS Business Intelligence GmbH. He is SQL Server MVP, MCT, MCSE – Business Intelligence, MCSE – Data Plattform and MCSE - Azure Solutions Architect. In his Job he is building Business Intelligence Systems based on Microsoft Technology, mainly on SQL Server and SharePoint.
LinkedIn: http://www.linkedin.com/pub/janis-griffin/0/914/aba
Janis Griffin has over 30 years of DBA/database experience including design, development and implementation of many critical database applications. Before coming to Quest Software, Janis primarily worked in the Telecom/Network Industry, working with both real-time network routing databases and OLTP business to business applications. Janis also held positions as a Principal Architect and Senior Manager, mentoring other DBAs on best practices in database performance tuning.
LinkedIn: https://www.linkedin.com/pub/mike-wall/b/110/9a
Contact: http://www.becomingamaster.com
Michael Wall has been an IT professional going back to when he had his own software store and worked with his customers with their “dose” problems. Originally hired by a small consulting firm to write web pages, he was thrust into the SysAdmin world when their lead consultant changed the passwords of all of the servers at a major pulp and paper company’s systems to 100%s$%t and walked out the door. He was sent down with a copy of UNIX for Dummies and 50 cents for the bus ride back. Fast forward a few years, he was asked if he wanted to be a DBA after successfully managing a fifty server Y2K upgrade. Since then, he’s never looked back and has survived a number of data and system challenges. When not wrangling cats at home, he currently
LinkedIn: https://linkedin.com/in/jackiewilushewski
Power BI User Experience Designer at Marquam with 10+ years designing User Experience in SharePoint and other Microsoft technologies.
LinkedIn: http://uk.linkedin.com/in/neilhambly
Contact: http://dataidol.com/NeilHambly
Neil Hambly is a SQL Server consultant, founder and consultant at Datamovements, a Gold Microsoft Data Analytics Consulting company. Neil has 20+ years in a variety of SQL Server roles and is an MCT. He is a regular presenter (200+ events) at user groups, and PASS events, including PASS Summit and SQLSaturday, and many UK events (SQLBits, SQLRelay). Neil is the leader of PASS London (UK), a Professional Development VC, a Melissa Data MVP, and a SQL Cruise Technical Lead, who loves Guinness, whisky, and dancing.
LinkedIn: https://www.linkedin.com/in/thekarankumar/
In my role as Talend Corporate Sales Leader, I get to interact with lot of next-gen companies that are trying to challenge how things have been done traditionally and disrupt the legacy.
LinkedIn: http://is.linkedin.com/in/asgeirgun
Ásgeir Gunnarsson is a Data Platform MVP and Chief Consultant at Datheos in Denmark. He works on Business Intelligence solutions using the whole of the Microsoft BI stack. Ásgeir has been working in BI since 2007 both as a consultant and internal employee. Before turning to BI, Ásgeir worked as a technical trainer and currently teaches BI courses at the Continuing Education Department of the University of Iceland. Ásgeir speaks regularly at events both domestically and internationally, and is the group leader of the Icelandic PASS Group, as well as the Icelandic Power BI User Group. Ásgeir is passionate about data and loves solving problems with BI.
LinkedIn: https://www.linkedin.com/in/pkoneti
I am a seasoned technology professional and have spent my entire career developing managing and leading teams that deliver world class enterprise software applications. I am now also a volunteer at PDX Women in Tech, a local nonprofit in Portland that is focused on helping women and other minorities enter, stay and thrive in tech.
LinkedIn: https://www.linkedin.com/pub/mike-wall/b/110/9a
Contact: http://www.becomingamaster.com
Michael Wall has been an IT professional going back to when he had his own software store and worked with his customers with their “dose” problems. Originally hired by a small consulting firm to write web pages, he was thrust into the SysAdmin world when their lead consultant changed the passwords of all of the servers at a major pulp and paper company’s systems to 100%s$%t and walked out the door. He was sent down with a copy of UNIX for Dummies and 50 cents for the bus ride back. Fast forward a few years, he was asked if he wanted to be a DBA after successfully managing a fifty server Y2K upgrade. Since then, he’s never looked back and has survived a number of data and system challenges. When not wrangling cats at home, he currently
LinkedIn: https://nz.linkedin.com/in/hamishwatson8
Contact: http://www.sqlservercentral.com/blogs/the-hybrid-dbas-blog/
Hamish Watson is a Microsoft Data Platform MVP and VMware Expert with a passion for efficient database and application deployment using DevOps methodologies. He has 20+ years of IT experience in managing and deploying large scale databases on SQL Server technologies. He has been managing SQL Server since SQL Server 2000, and pragmatic approaches to delivering business value to clients is his career passion. Educating and helping others learn is a driver for Hamish. He is a Director-At-Large on the PASS Board, international speaker, and a repeat guest lecturer at a local university.
LinkedIn: https://www.linkedin.com/pub/mike-wall/b/110/9a
Contact: http://www.becomingamaster.com
Michael Wall has been an IT professional going back to when he had his own software store and worked with his customers with their “dose” problems. Originally hired by a small consulting firm to write web pages, he was thrust into the SysAdmin world when their lead consultant changed the passwords of all of the servers at a major pulp and paper company’s systems to 100%s$%t and walked out the door. He was sent down with a copy of UNIX for Dummies and 50 cents for the bus ride back. Fast forward a few years, he was asked if he wanted to be a DBA after successfully managing a fifty server Y2K upgrade. Since then, he’s never looked back and has survived a number of data and system challenges. When not wrangling cats at home, he currently
Contact: http://www.ssis-components.net
Oliver Engels is CEO of oh22data AG, a Microsoft Gold Partner in Germany specializing in CRM and BI. His special interests are Azure, Data Governance and Integration, Visualisation Tools like SSRS, Power BI, Tableau, R, and SharePoint. He has worked with SQL Server since version 6.5 and is a founder and Board member of PASS Germany, a PASS Regional Mentor, and runs the Frankfurt PASS Local Group. For more than seven years he is a Microsoft Data Platform MVP and a Microsoft pTSP.
LinkedIn: https://www.linkedin.com/in/rob-volk-134ba81
Contact: http://weblogs.sqlteam.com/robv/
Rob Volk is a SQL Server DBA in the Metro Atlanta area since 2001. He also moderates and answers the forums on SQLTeam.com. While an old-time cranky DBA, he no longer considers quot;business intelligencequot; an oxymoron or quot;the cloudquot; as merely atmospheric moisture, and is delightedly dipping his toes into both of these new oceans, and loves to do things in new and and unusual ways.
LinkedIn: https://www.linkedin.com/in/joshua-higginbotham-55625798/
Contact: https://codenamesql.blog/
Joshua Higginbotham is a Data Services Manager at Republic Bank based out of Louisville, KY. He's worked in various roles including Software Development, Database Administration, and Business Intelligence. He’s an active speaker within the SQL community and the Co-Chapter leader of the Louisville SQL Server and Power BI User Group.
LinkedIn: http://www.linkedin.com/in/randyknight
Contact: http://www.sqlsolutionsgroup.com/blog
Randy Knight is a data professional who has worked with Microsoft technology for over 25 years, focusing on SQL Server since 1997. He has worked in a variety of settings, including 6 years as a database architect for match.com. In 2010, he founded SQL Server Solutions Group LLC, a boutique SQL Server consultancy. A Microsoft Certified Master (MCM) in SQL Server, he speaks often at events all over the country including the PASS Summit, SQLIntersections, and numerous SQL Saturday and User Groups.
LinkedIn: http://www.linkedin.com/in/juliekoesmarno
Contact: http://www.mssqlgirl.com
Julie Koesmarno, MCSE Data Platform, and MCSE Business Intelligence, MCT, is a Senior Program Manager at Microsoft, with a Bachelor’s degree in IT. She has over 10 years of experience working with SQL Server for large-scale and multi-million-dollar OLTP and ETL projects as a SQL Server developer and system analyst/designer. Her past projects include delivering a SQL Server 2012 data warehouse and BI solutions in the US and Australia. She now works with hybrid, cloud and on-prem SQL projects.
LinkedIn: http://www.linkedin.com/pub/vern-rabe/a/ba3/980
Contact: http://www.rabedata.com
Vern Rabe is an independent SQL Server consultant and contract trainer in Portland, OR, and leader of the Oregon Data Community user group, formerly OregonSQL. He has attained MCSE, MCITP (both Administration and Development), and MCT certifications, among others. Vern has been passionate about databases since 1992 and has worked with SQL Server since version 4.21a. He provides broad technical SQL Server knowledge gained from the mixture of academic and practical experiences acquired from his classroom instructing and varied consulting contracts. Vern regularly presents technical sessions at SQL Server user group meetings, SQLSaturdays, and PASS Summit.
LinkedIn: https://www.linkedin.com/pub/mike-wall/b/110/9a
Contact: http://www.becomingamaster.com
Michael Wall has been an IT professional going back to when he had his own software store and worked with his customers with their “dose” problems. Originally hired by a small consulting firm to write web pages, he was thrust into the SysAdmin world when their lead consultant changed the passwords of all of the servers at a major pulp and paper company’s systems to 100%s$%t and walked out the door. He was sent down with a copy of UNIX for Dummies and 50 cents for the bus ride back. Fast forward a few years, he was asked if he wanted to be a DBA after successfully managing a fifty server Y2K upgrade. Since then, he’s never looked back and has survived a number of data and system challenges. When not wrangling cats at home, he currently
Elliott is a Data Scientist at Interject Data Systems with a background in detecting randomness, differential privacy and building high-quality data products. In his spare time, he plots revenge on octopuses.
LinkedIn: https://www.linkedin.com/in/adrian-mee/
A native of Melbourne, Australia - Adrian currently works for Falling Colors Technology in Santa Fe, NM. In this role, he is responsible for Database administration, data security and infrastructure. Adrian has been working with SQL Server since the Enterprise Manager days of SQL Server 2000. Adrian is an Idera ACE, class of 2020, and in 2017 he founded the Santa Fe SQL Server User group. When out of the office, he loves biking and hiking the great outdoors.
LinkedIn: https://www.linkedin.com/profile/view?id=4839367
Contact: http://www.gdsbi.de
Frank Geisler is owner and CEO of GDS Business Intelligence GmbH. He is SQL Server MVP, MCT, MCSE – Business Intelligence, MCSE – Data Plattform and MCSE - Azure Solutions Architect. In his Job he is building Business Intelligence Systems based on Microsoft Technology, mainly on SQL Server and SharePoint.
The following is a list of sponsors that helped fund the event.


|
Pebble Foundation Classes
0.2.0
C++ for Pebble
|
Basic graphics types (point, rect, size, color, bitmaps, etc.) and utility functions. More...
Modules | |
| Color Definitions | |
Classes | |
| union | GColor8 |
| struct | GPoint |
| struct | GSize |
| Represents a 2-dimensional size. More... | |
| struct | GRect |
| struct | GBitmapDataRowInfo |
| struct | GEdgeInsets |
Macros | |
| #define | GColorFromRGBA(red, green, blue, alpha) |
| #define | GColorFromRGB(red, green, blue) GColorFromRGBA(red, green, blue, 255) |
| #define | GColorFromHEX(v) GColorFromRGB(((v) >> 16) & 0xff, ((v) >> 8) & 0xff, ((v) & 0xff)) |
| #define | COLOR_FALLBACK(color, bw) (color) |
| #define | PBL_IF_RECT_ELSE(if_true, if_false) (if_true) |
| #define | PBL_IF_ROUND_ELSE(if_true, if_false) (if_false) |
| #define | PBL_IF_BW_ELSE(if_true, if_false) (if_false) |
| #define | PBL_IF_COLOR_ELSE(if_true, if_false) (if_true) |
| #define | GPoint(x, y) ((GPoint){(x), (y)}) |
| Convenience macro to make a GPoint. | |
| #define | GPointZero GPoint(0, 0) |
| Convenience macro to make a GPoint at (0, 0). | |
| #define | GSize(w, h) ((GSize){(w), (h)}) |
| Convenience macro to make a GSize. | |
| #define | GSizeZero GSize(0, 0) |
| Convenience macro to make a GSize of (0, 0). | |
| #define | GRect(x, y, w, h) ((GRect){{(x), (y)}, {(w), (h)}}) |
| Convenience macro to make a GRect. | |
| #define | GRectZero GRect(0, 0, 0, 0) |
| Convenience macro to make a GRect of ((0, 0), (0, 0)). | |
| #define | PLAY_COUNT_INFINITE UINT32_MAX |
| Repeat Sequence or animation indefinitely. | |
| #define | PLAY_DURATION_INFINITE UINT32_MAX |
| Duration of Sequence or animation is infinite. | |
| #define | GEdgeInsets4(t, r, b, l) ((GEdgeInsets){.top = t, .right = r, .bottom = b, .left = l}) |
| helper for GEdgeInsets macro | |
| #define | GEdgeInsets3(t, rl, b) ((GEdgeInsets){.top = t, .right = rl, .bottom = b, .left = rl}) |
| helper for GEdgeInsets macro | |
| #define | GEdgeInsets2(tb, rl) ((GEdgeInsets){.top = tb, .right = rl, .bottom = tb, .left = rl}) |
| helper for GEdgeInsets macro | |
| #define | GEdgeInsets1(trbl) ((GEdgeInsets){.top = trbl, .right = trbl, .bottom = trbl, .left = trbl}) |
| helper for GEdgeInsets macro | |
| #define | GEdgeInsetsN(_1, _2, _3, _4, NAME, ...) NAME |
| helper for GEdgeInsets macro | |
| #define | GEdgeInsets(...) GEdgeInsetsN(__VA_ARGS__, GEdgeInsets4, GEdgeInsets3, GEdgeInsets2, GEdgeInsets1)(__VA_ARGS__) |
Typedefs | |
| typedef union GColor8 | GColor8 |
| typedef GColor8 | GColor |
| typedef struct GPoint | GPoint |
| typedef struct GSize | GSize |
| Represents a 2-dimensional size. | |
| typedef struct GRect | GRect |
| typedef enum GBitmapFormat | GBitmapFormat |
| The format of a GBitmap can either be 1-bit or 8-bit. | |
| typedef struct GBitmap | GBitmap |
| typedef struct GBitmapSequence | GBitmapSequence |
| typedef enum GAlign | GAlign |
| typedef struct GContext | GContext |
Enumerations | |
| enum | GBitmapFormat { GBitmapFormat1Bit = 0, GBitmapFormat8Bit, GBitmapFormat1BitPalette, GBitmapFormat2BitPalette, GBitmapFormat4BitPalette, GBitmapFormat8BitCircular } |
| The format of a GBitmap can either be 1-bit or 8-bit. | |
| enum | GAlign { GAlignCenter, GAlignTopLeft, GAlignTopRight, GAlignTop, GAlignLeft, GAlignBottom, GAlignRight, GAlignBottomRight, GAlignBottomLeft } |
| enum | GCompOp { GCompOpAssign, GCompOpAssignInverted, GCompOpOr, GCompOpAnd, GCompOpClear, GCompOpSet } |
Functions | |
| bool | gcolor_equal (GColor8 x, GColor8 y) |
| True if both colors are identical or both are invisible (i.e. both have alpha values of .a=0). | |
| GColor8 | gcolor_legible_over (GColor8 background_color) |
| bool | gpoint_equal (const GPoint *const point_a, const GPoint *const point_b) |
| bool | gsize_equal (const GSize *size_a, const GSize *size_b) |
| bool | grect_equal (const GRect *const rect_a, const GRect *const rect_b) |
| bool | grect_is_empty (const GRect *const rect) |
| void | grect_standardize (GRect *rect) |
| void | grect_clip (GRect *const rect_to_clip, const GRect *const rect_clipper) |
| bool | grect_contains_point (const GRect *rect, const GPoint *point) |
| GPoint | grect_center_point (const GRect *rect) |
| GRect | grect_crop (GRect rect, const int32_t crop_size_px) |
| uint16_t | gbitmap_get_bytes_per_row (const GBitmap *bitmap) |
| GBitmapFormat | gbitmap_get_format (const GBitmap *bitmap) |
| uint8_t * | gbitmap_get_data (const GBitmap *bitmap) |
| void | gbitmap_set_data (GBitmap *bitmap, uint8_t *data, GBitmapFormat format, uint16_t row_size_bytes, bool free_on_destroy) |
| GRect | gbitmap_get_bounds (const GBitmap *bitmap) |
| void | gbitmap_set_bounds (GBitmap *bitmap, GRect bounds) |
| GColor * | gbitmap_get_palette (const GBitmap *bitmap) |
| void | gbitmap_set_palette (GBitmap *bitmap, GColor *palette, bool free_on_destroy) |
| GBitmap * | gbitmap_create_with_resource (uint32_t resource_id) |
| GBitmap * | gbitmap_create_with_data (const uint8_t *data) |
| GBitmap * | gbitmap_create_as_sub_bitmap (const GBitmap *base_bitmap, GRect sub_rect) |
| GBitmap * | gbitmap_create_from_png_data (const uint8_t *png_data, size_t png_data_size) |
| GBitmap * | gbitmap_create_blank (GSize size, GBitmapFormat format) |
| GBitmap * | gbitmap_create_blank_with_palette (GSize size, GBitmapFormat format, GColor *palette, bool free_on_destroy) |
| GBitmap * | gbitmap_create_palettized_from_1bit (const GBitmap *src_bitmap) |
| void | gbitmap_destroy (GBitmap *bitmap) |
| GBitmapSequence * | gbitmap_sequence_create_with_resource (uint32_t resource_id) |
| bool | gbitmap_sequence_update_bitmap_next_frame (GBitmapSequence *bitmap_sequence, GBitmap *bitmap, uint32_t *delay_ms) |
| bool | gbitmap_sequence_update_bitmap_by_elapsed (GBitmapSequence *bitmap_sequence, GBitmap *bitmap, uint32_t elapsed_ms) |
| void | gbitmap_sequence_destroy (GBitmapSequence *bitmap_sequence) |
| bool | gbitmap_sequence_restart (GBitmapSequence *bitmap_sequence) |
| int32_t | gbitmap_sequence_get_current_frame_idx (GBitmapSequence *bitmap_sequence) |
| uint32_t | gbitmap_sequence_get_total_num_frames (GBitmapSequence *bitmap_sequence) |
| uint32_t | gbitmap_sequence_get_play_count (GBitmapSequence *bitmap_sequence) |
| void | gbitmap_sequence_set_play_count (GBitmapSequence *bitmap_sequence, uint32_t play_count) |
| GSize | gbitmap_sequence_get_bitmap_size (GBitmapSequence *bitmap_sequence) |
| GBitmapDataRowInfo | gbitmap_get_data_row_info (const GBitmap *bitmap, uint16_t y) |
| void | grect_align (GRect *rect, const GRect *inside_rect, const GAlign alignment, const bool clip) |
| GRect | grect_inset (GRect rect, GEdgeInsets insets) |
Basic graphics types (point, rect, size, color, bitmaps, etc.) and utility functions.
| #define COLOR_FALLBACK | ( | color, | |
| bw | |||
| ) | (color) |
Convenience macro allowing use of a fallback color for black and white platforms. On color platforms, the first expression will be chosen, the second otherwise.
| #define GColorFromHEX | ( | v | ) | GColorFromRGB(((v) >> 16) & 0xff, ((v) >> 8) & 0xff, ((v) & 0xff)) |
Convert hex integer to GColor.
| v | Integer hex value (e.g. 0x64ff46) |
| #define GColorFromRGB | ( | red, | |
| green, | |||
| blue | |||
| ) | GColorFromRGBA(red, green, blue, 255) |
Convert RGB to GColor.
| red | Red value from 0 - 255 |
| green | Green value from 0 - 255 |
| blue | Blue value from 0 - 255 |
| #define GColorFromRGBA | ( | red, | |
| green, | |||
| blue, | |||
| alpha | |||
| ) |
Convert RGBA to GColor.
| red | Red value from 0 - 255 |
| green | Green value from 0 - 255 |
| blue | Blue value from 0 - 255 |
| alpha | Alpha value from 0 - 255 |
| #define GEdgeInsets | ( | ... | ) | GEdgeInsetsN(__VA_ARGS__, GEdgeInsets4, GEdgeInsets3, GEdgeInsets2, GEdgeInsets1)(__VA_ARGS__) |
Convenience macro to make a GEdgeInsets This macro follows the CSS shorthand notation where you can call it with
| #define PBL_IF_BW_ELSE | ( | if_true, | |
| if_false | |||
| ) | (if_false) |
Convenience macro to switch between two expression depending on the screen of the platform. On black& white platforms, the first expression will be chosen, the second otherwise.
| #define PBL_IF_COLOR_ELSE | ( | if_true, | |
| if_false | |||
| ) | (if_true) |
Convenience macro to switch between two expression depending on the screen of the platform. On color platforms, the first expression will be chosen, the second otherwise.
| #define PBL_IF_RECT_ELSE | ( | if_true, | |
| if_false | |||
| ) | (if_true) |
Convenience macro to switch between two expression depending on the screen of the platform. On platforms with rectangular screen, the first expression will be chosen, the second otherwise.
| #define PBL_IF_ROUND_ELSE | ( | if_true, | |
| if_false | |||
| ) | (if_false) |
Convenience macro to switch between two expression depending on the screen of the platform. On platforms with round screen, the first expression will be chosen, the second otherwise.
Values to specify how two things should be aligned relative to each other.
Represents a point in a 2-dimensional coordinate system.
Represents a rectangle and defining it using the origin of the upper-lefthand corner and its size.
| enum GAlign |
Values to specify how two things should be aligned relative to each other.
| enum GCompOp |
Values to specify how the source image should be composited onto the destination image.
Contrived example of how the different compositing modes affect drawing. Often, the "destination image" is the render buffer and thus contains the image of what has been drawn before or "underneath".
For color displays, only two compositing modes are supported, GCompOpAssign and GCompOpSet. The behavior of other compositing modes are undefined and may change in the future. Transparency can be achieved using GCompOpSet and requires pixel values with alpha value .a < 3.
| GBitmap* gbitmap_create_as_sub_bitmap | ( | const GBitmap * | base_bitmap, |
| GRect | sub_rect | ||
| ) |
Create a new GBitmap on the heap as a sub-bitmap of a 'base' GBitmap, using a GRect to indicate what portion of the base to use. The sub-bitmap will just reference the image data and palette of the base bitmap. No deep-copying occurs as a result of calling this function, thus the caller is responsible for making sure the base bitmap and palette will remain available when using the sub-bitmap. Note that you should not destroy the parent bitmap until the sub_bitmap has been destroyed. The resulting GBitmap must be destroyed using gbitmap_destroy().
| [in] | base_bitmap | The bitmap that the sub-bitmap of which the image data will be used by the sub-bitmap |
| sub_rect | The rectangle within the image data of the base bitmap. The bounds of the base bitmap will be used to clip sub_rect . |
NULL
if the GBitmap could not be created | GBitmap* gbitmap_create_blank | ( | GSize | size, |
| GBitmapFormat | format | ||
| ) |
Creates a new blank GBitmap on the heap initialized to zeroes. In the case that the format indicates a palettized bitmap, a palette of appropriate size will also be allocated on the heap. The resulting GBitmap must be destroyed using gbitmap_destroy().
| size | The Pebble image dimensions as a GSize. |
| format | The GBitmapFormat the created image should be in. |
NULL
if the GBitmap could not be created | GBitmap* gbitmap_create_blank_with_palette | ( | GSize | size, |
| GBitmapFormat | format, | ||
| GColor * | palette, | ||
| bool | free_on_destroy | ||
| ) |
Creates a new blank GBitmap on the heap, initialized to zeroes, and assigns it the given palette. No deep-copying of the palette occurs, so the caller is responsible for making sure the palette remains available when using the resulting bitmap. Management of that memory can be handed off to the system with the free_on_destroy argument.
| size | The Pebble image dimensions as a GSize. |
| format | the GBitmapFormat the created image and palette should be in. |
| palette | a pointer to a palette that is to be used for this GBitmap. The palette should be large enough to hold enough colors for the specified format. For example, GBitmapFormat2BitPalette should have 4 colors, since 2^2 = 4. |
| free_on_destroy | Set whether the palette data should be freed along with the bitmap data when the GBitmap is destroyed. |
NULL
if the GBitmap could not be created. | GBitmap* gbitmap_create_from_png_data | ( | const uint8_t * | png_data, |
| size_t | png_data_size | ||
| ) |
Create a GBitmap based on raw PNG data. The resulting GBitmap must be destroyed using gbitmap_destroy(). The developer is responsible for freeing png_data following this call.
| png_data | PNG image data. |
| png_data_size | PNG image size in bytes. |
NULL
if the GBitmap could not be created | GBitmap* gbitmap_create_palettized_from_1bit | ( | const GBitmap * | src_bitmap | ) |
Given a 1-bit GBitmap, create a new bitmap of format GBitmapFormat1BitPalette. The new data buffer is allocated on the heap, and a 2-color palette is allocated as well.
| src_bitmap | A GBitmap of format GBitmapFormat1Bit which is to be copied into a newly created GBitmap of format GBitmapFormat1BitPalettized. |
| GBitmap* gbitmap_create_with_data | ( | const uint8_t * | data | ) |
Creates a new GBitmap on the heap initialized with the provided Pebble image data.
The resulting GBitmap must be destroyed using gbitmap_destroy() but the image data will not be freed automatically. The developer is responsible for keeping the image data in memory as long as the bitmap is used and releasing it after the bitmap is destroyed.
| data | The Pebble image data. Must not be NULL. The function assumes the data to be correct; there are no sanity checks performed on the data. The data will not be copied and the pointer must remain valid for the lifetime of this GBitmap. |
NULL
if the GBitmap could not be created | GBitmap* gbitmap_create_with_resource | ( | uint32_t | resource_id | ) |
Creates a new GBitmap on the heap using a Pebble image file stored as a resource. The resulting GBitmap must be destroyed using gbitmap_destroy().
| resource_id | The ID of the bitmap resource to load |
NULL
if the GBitmap could not be created | void gbitmap_destroy | ( | GBitmap * | bitmap | ) |
Destroy a GBitmap. This must be called for every bitmap that's been created with gbitmap_create_*
This function will also free the memory of the bitmap data (bitmap->addr) if the bitmap was created with gbitmap_create_blank() or gbitmap_create_with_resource().
If the GBitmap was created with gbitmap_create_with_data(), you must release the memory after calling gbitmap_destroy().
| GRect gbitmap_get_bounds | ( | const GBitmap * | bitmap | ) |
Gets the bounds of the content for the GBitmap. This is set when loading the image or if changed by gbitmap_set_bounds.
| bitmap | A pointer to the GBitmap to get the bounding box from. |
| uint16_t gbitmap_get_bytes_per_row | ( | const GBitmap * | bitmap | ) |
Get the number of bytes per row in the bitmap data for the given GBitmap. On rectangular displays, this can be used as a safe way of iterating over the rows in the bitmap, since bytes per row should be set according to format. On circular displays with pixel format of GBitmapFormat8BitCircular this will return 0, and should not be used for iteration over frame buffer pixels. Instead, use GBitmapDataRowInfo, which provides safe minimum and maximum x values for a given row's y value.
| bitmap | A pointer to the GBitmap to get the bytes per row |
| uint8_t* gbitmap_get_data | ( | const GBitmap * | bitmap | ) |
Get a pointer to the raw image data section of the given GBitmap as specified by the format of the bitmap.
| bitmap | A pointer to the GBitmap to get the data |
| GBitmapDataRowInfo gbitmap_get_data_row_info | ( | const GBitmap * | bitmap, |
| uint16_t | y | ||
| ) |
Provides information about a pixel data row
| bitmap | A pointer to the GBitmap to get row info |
| y | Absolute row number in the pixel data, independent from the bitmap's bounds |
| GBitmapFormat gbitmap_get_format | ( | const GBitmap * | bitmap | ) |
Get the GBitmapFormat for the GBitmap.
| bitmap | A pointer to the GBitmap to get the format |
| GColor* gbitmap_get_palette | ( | const GBitmap * | bitmap | ) |
Get the palette for the given GBitmap.
| bitmap | A pointer to the GBitmap to get the palette from. |
| GBitmapSequence* gbitmap_sequence_create_with_resource | ( | uint32_t | resource_id | ) |
Creates a GBitmapSequence from the specified resource (APNG/PNG files)
| resource_id | Resource to load and create GBitmapSequence from. |
| void gbitmap_sequence_destroy | ( | GBitmapSequence * | bitmap_sequence | ) |
Deletes the GBitmapSequence structure and frees any allocated memory/decoder_data
| bitmap_sequence | Pointer to the bitmap sequence to free (delete) |
| GSize gbitmap_sequence_get_bitmap_size | ( | GBitmapSequence * | bitmap_sequence | ) |
This function gets the minimum required size (dimensions) necessary to render the bitmap sequence to a GBitmap using the /ref gbitmap_sequence_update_bitmap_next_frame
| bitmap_sequence | Pointer to loaded bitmap sequence |
| int32_t gbitmap_sequence_get_current_frame_idx | ( | GBitmapSequence * | bitmap_sequence | ) |
This function gets the current frame number for the bitmap sequence
| bitmap_sequence | Pointer to loaded bitmap sequence |
| uint32_t gbitmap_sequence_get_play_count | ( | GBitmapSequence * | bitmap_sequence | ) |
This function gets the play count (number of times to repeat) the bitmap sequence
| bitmap_sequence | Pointer to loaded bitmap sequence |
| uint32_t gbitmap_sequence_get_total_num_frames | ( | GBitmapSequence * | bitmap_sequence | ) |
This function sets the total number of frames for the bitmap sequence
| bitmap_sequence | Pointer to loaded bitmap sequence |
| bool gbitmap_sequence_restart | ( | GBitmapSequence * | bitmap_sequence | ) |
Restarts the GBitmapSequence to the first frame gbitmap_sequence_update_bitmap_next_frame
| bitmap_sequence | Pointer to loaded bitmap sequence |
| void gbitmap_sequence_set_play_count | ( | GBitmapSequence * | bitmap_sequence, |
| uint32_t | play_count | ||
| ) |
This function sets the play count (number of times to repeat) the bitmap sequence
| bitmap_sequence | Pointer to loaded bitmap sequence |
| play_count | Number of times to repeat the bitmap sequence with 0 disabling update_by_elapsed and update_next_frame, and PLAY_COUNT_INFINITE for infinite looping of the animation |
| bool gbitmap_sequence_update_bitmap_by_elapsed | ( | GBitmapSequence * | bitmap_sequence, |
| GBitmap * | bitmap, | ||
| uint32_t | elapsed_ms | ||
| ) |
Updates the contents of the bitmap sequence to the frame at elapsed in the sequence. For looping animations this accounts for the loop, for example an animation of 1 second that is configured to loop 2 times updated to 1500 ms elapsed time will display the sequence frame at 500 ms. Elapsed time is the time from the start of the animation, and will be ignored if it is for a time earlier than the last rendered frame.
| bitmap_sequence | Pointer to loaded bitmap sequence |
| bitmap | Pointer to the initialized GBitmap in which to render the bitmap sequence |
| elapsed_ms | Elapsed time in milliseconds in the sequence relative to start |
| bool gbitmap_sequence_update_bitmap_next_frame | ( | GBitmapSequence * | bitmap_sequence, |
| GBitmap * | bitmap, | ||
| uint32_t * | delay_ms | ||
| ) |
Updates the contents of the bitmap sequence to the next frame and optionally returns the delay in milliseconds until the next frame.
| bitmap_sequence | Pointer to loaded bitmap sequence | |
| bitmap | Pointer to the initialized GBitmap in which to render the bitmap sequence | |
| [out] | delay_ms | If not NULL, returns the delay in milliseconds until the next frame. |
| void gbitmap_set_bounds | ( | GBitmap * | bitmap, |
| GRect | bounds | ||
| ) |
Set the bounds of the given GBitmap.
| bitmap | A pointer to the GBitmap to set the bounding box. |
| bounds | The bounding box to set. |
| void gbitmap_set_data | ( | GBitmap * | bitmap, |
| uint8_t * | data, | ||
| GBitmapFormat | format, | ||
| uint16_t | row_size_bytes, | ||
| bool | free_on_destroy | ||
| ) |
Set the bitmap data for the given GBitmap.
| bitmap | A pointer to the GBitmap to set data to |
| data | A pointer to the bitmap data |
| format | the format of the bitmap data. If this is a palettized format, make sure that there is an accompanying call to gbitmap_set_palette. |
| row_size_bytes | How many bytes a single row takes. For example, bitmap data of format GBitmapFormat1Bit must have a row size as a multiple of 4 bytes. |
| free_on_destroy | Set whether the data should be freed when the GBitmap is destroyed. |
| void gbitmap_set_palette | ( | GBitmap * | bitmap, |
| GColor * | palette, | ||
| bool | free_on_destroy | ||
| ) |
Set the palette for the given GBitmap.
| bitmap | A pointer to the GBitmap to set the palette to |
| palette | The palette to be used. Make sure that the palette is large enough for the bitmap's format. |
| free_on_destroy | Set whether the palette data should be freed when the GBitmap is destroyed or when another palette is set. |
This method assists in improving the legibility of text on various background colors. It takes the background color for the region in question and computes a color for maximum legibility.
| background_color | Background color for the region in question |
Tests whether 2 points are equal.
| point_a | Pointer to the first point |
| point_b | Pointer to the second point |
true
if both points are equal, false
if not. | void grect_align | ( | GRect * | rect, |
| const GRect * | inside_rect, | ||
| const GAlign | alignment, | ||
| const bool | clip | ||
| ) |
Aligns one rectangle within another rectangle, using an alignment parameter. The relative coordinate systems of both rectangles are assumed to be the same. When clip is true, rect
is also clipped by the constraint.
| [in] | rect | The rectangle to align (in place) |
| [out] | rect | The aligned and optionally clipped rectangle |
| inside_rect | The rectangle in which to align rect | |
| alignment | Determines the alignment of rect within inside_rect by specifying what edges of should overlap. | |
| clip | Determines whether rect should be trimmed using the edges of inside_rect in case rect extends outside of the area that inside_rect covers after the alignment. |
Convenience function to compute the center-point of a given rectangle. This is equal to (rect->x + rect->width / 2, rect->y + rect->height / 2)
.
| rect | The rectangle for which to calculate the center point. |
rect
Trim one rectangle using the edges of a second rectangle.
| [in] | rect_to_clip | The rectangle that needs to be clipped (in place). |
| [out] | rect_to_clip | The clipped rectangle. |
| rect_clipper | The rectangle of which the edges will serve as "scissors" in order to trim rect_to_clip . |
Tests whether a rectangle contains a point.
| rect | The rectangle |
| point | The point |
true
if the rectangle contains the point, or false
if it does not. Reduce the width and height of a rectangle by insetting each of the edges with a fixed inset. The returned rectangle will be centered relative to the input rectangle.
| rect | The rectangle that will be inset |
| crop_size_px | The inset by which each of the rectangle will be inset. A positive inset value results in a smaller rectangle, while negative inset value results in a larger rectangle. |
Tests whether 2 rectangles are equal.
| rect_a | Pointer to the first rectangle |
| rect_b | Pointer to the second rectangle |
true
if both rectangles are equal, false
if not. | GRect grect_inset | ( | GRect | rect, |
| GEdgeInsets | insets | ||
| ) |
Returns a rectangle that is shrinked or expanded by the given edge insets.
| rect | The rectangle that will be inset |
| insets | The insets that will be applied |
| bool grect_is_empty | ( | const GRect *const | rect | ) |
Tests whether the size of the rectangle is (0, 0).
| rect | Pointer to the rectangle |
true
if the rectangle its size is (0, 0), or false
if not. true
! | void grect_standardize | ( | GRect * | rect | ) |
Converts a rectangle's values so that the components of its size (width and/or height) are both positive. In the width and/or height are negative, the origin will offset, so that the final rectangle overlaps with the original. For example, a GRect with size (-10, -5) and origin (20, 20), will be standardized to size (10, 5) and origin (10, 15).
| [in] | rect | The rectangle to convert. |
| [out] | rect | The standardized rectangle. |