Ever wondered how IDE’s are built? In this talk, we’ll skip the marketing bit and dive into the architecture and implementation of JetBrains Rider. We’ll look at how and why we have built (and open sourced) a reactive protocol, and how the IDE uses a “microservices” architecture to communicate with the debugger, Roslyn, a WPF renderer and even other tools like Unity3D. We’ll explore how things are wired together, both in-process and across those microservices.
The document summarizes key concepts about the Android application model including application components, intents, activities and tasks, processes and threads, and component lifecycles. It explains that an Android application consists of fundamental components like activities, services, broadcast receivers and content providers. Activities display the user interface, services run in the background, broadcast receivers respond to system-wide broadcasts, and content providers manage shared data.
Dan Morrill discusses the different ways to code applications for Android, including managed Dalvik code, Ajax/web apps, and native code. He outlines what each approach is capable of and not capable of. He demonstrates k-means clustering implemented in each approach. Morrill concludes that there are benefits to different approaches and developers should choose based on their app's specific needs and the developer's skills.
Доклад Антона Минашкина для Съесть собаку #15, 27/11/18
Тезисы:
- Почему DI – такой популярный design pattern в Android;
- Что особенного в DI для Kotlin;
- Практическая польза и опции DI.
The document provides an overview of the Java programming language. It discusses that Java was developed in the early 1990s by Sun Microsystems. It then summarizes some of Java's main features, including that it is a simple, object-oriented, robust, distributed, platform independent, secured, architecture-neutral, portable, high-performance, multi-threaded, and dynamic language. It also briefly discusses the Java Virtual Machine, Java Runtime Environment, Java Development Kit, Java bytecode, and the main method.
Creating Great REST and gRPC API Experiences (in Swift)
Protocol Buffers are a language-neutral, platform-neutral mechanism for serializing structured data. They can be used to define interfaces for APIs and exchange data between systems. Protocol Buffers include a data definition language to define message types, a serialization format to encode structured data in a compact binary form, and code generation plugins to generate data access code in multiple languages. Protocol Buffers provide a flexible and efficient method for serializing structured data for storage or network transmission.
Integration of java ee applications on c – based implementations
This academic article discusses integrating Java applications with C/C++ implementations using the Java Native Interface (JNI). It describes developing JNI code with IBM WebSphere Integration Developer. The key steps are:
1. Create a Java class with methods to expose to native code. Compile to generate a C header file.
2. Implement the native methods in a shared library, allowing calls to other C APIs.
3. Configure the shared library in the WebSphere runtime.
This allows integrating existing C/C++ applications like scientific software with Java programs through the JNI bridge in an enterprise environment.
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...
Ever wondered how IDE’s are built? In this talk, we’ll skip the marketing bit and dive into the architecture and implementation of JetBrains Rider. We’ll look at how and why we have built (and open sourced) a reactive protocol, and how the IDE uses a “microservices” architecture to communicate with the debugger, Roslyn, a WPF renderer and even other tools like Unity3D. We’ll explore how things are wired together, both in-process and across those microservices. Let’s geek out!
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
Ever wondered how IDE’s are built? In this talk, we’ll skip the marketing bit and dive into the architecture and implementation of JetBrains Rider.
We’ll look at how and why we have built (and open sourced) a reactive protocol, and how the IDE uses a “microservices” architecture to communicate with the debugger, Roslyn, a WPF renderer and even other tools like Unity3D. We’ll explore how things are wired together, both in-process and across those microservices. Let’s geek out!
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
Ever wondered how IDE’s are built? In this talk, we’ll skip the marketing bit and dive into the architecture and implementation of JetBrains Rider. We’ll look at how and why we have built (and open sourced) a reactive protocol, and how the IDE uses a “microservices” architecture to communicate with the debugger, Roslyn, a WPF renderer and even other tools like Unity3D. We’ll explore how things are wired together, both in-process and across those microservices. Let’s geek out!
Silverlight 2 for Developers - TechEd New Zealand 2008
The document is a presentation about Silverlight 2 for developers. It includes an agenda covering CRUD, designers, patterns and testing. It discusses using Silverlight 2 for building applications with a dive log app as an example. It covers using services, securing applications, HTTP requests and using Blend. It also discusses using MVC patterns, separation of concerns, the presentation model pattern and implementing data binding, commands and value converters in applications.
This document provides an overview of new features and enhancements in Visual Studio 2005, also known as Whidbey. It summarizes improvements to languages like Visual Basic .NET, Visual C#, C++, and Visual J#, the .NET Framework, data access, web services, and mobile development. Key areas of focus include increased productivity, simplified development, and better integration across languages, frameworks, and platforms.
The document discusses the C/C++ Development Tools (CDT) plugin for Eclipse, including what the CDT is used for, how it parses code and generates an abstract syntax tree (AST) to facilitate code analysis and refactoring, and how the CDT uses an index to improve parsing performance for large projects.
This document summarizes a presentation on Microsoft .NET and C#. It discusses .NET as a set of technologies for connecting information and as an emphasis on web services. C# is presented as a language that combines the safety of Java, ease of Visual Basic, and power of C++. Key aspects of .NET like the Common Language Runtime and class libraries are defined. The document also provides a brief comparison between .NET and J2EE frameworks and languages.
The document discusses HTML5 as a platform for user interfaces. It outlines several new features of HTML5, including the <canvas> element for drawing, WebGL for 3D graphics, multi-touch support, local storage with Web SQL databases, real-time updates with Web Sockets, improved file handling, and offline application caching. The document argues that HTML5 provides many of the capabilities of native applications and recommends using HTML5 and JavaScript for cross-platform user interface development.
This document provides an overview of Visual Basic .NET, including an introduction to the .NET framework, Visual Studio integrated development environment, VB.NET language basics like variables, data types, operators, arrays, and enumerations. It concludes with details on creating a simple "Hello World" console application in VB.NET.
Framework design involves balancing many considerations, such as:
- Managing dependencies between components to allow for flexibility and evolution over time. Techniques like dependency injection and layering help achieve this.
- Designing APIs by first writing code samples for key scenarios and defining object models to support these samples to ensure usability.
- Treating simplicity as a feature by removing unnecessary requirements and reusing existing concepts where possible.
Software development has shifted focus from efficiency to productivity, reusability, and user-friendliness. Object-oriented programming (OOP) models objects that contain data and methods. Key OOP concepts include inheritance, where subclasses extend and modify superclass features. An integrated development environment (IDE) combines tools like editors, compilers, linkers, and debuggers. Java uses a hybrid approach of compiling to bytecode, then interpreting for platform independence. Console applications use text input/output. Graphical user interface (GUI) applications use menus and buttons. Applets run in web browsers.
This document summarizes a presentation on building VSTO applications using LINQ. The presentation covers the fundamentals of VSTO development, how and why to use LINQ, and includes demos. Reasons for using VSTO over VBA are discussed, as well as how to add LINQ to a VSTO application.
Visual Studio 2010 includes many new features to improve the developer experience such as breakpoint grouping, parallel debugging tools, and a more extensible architecture. It can be used both as a robust code editor and as a platform for extensions. .NET 4.0 focuses on four main areas: better component integration, improved performance through parallelism and concurrency, enhanced language features, and reducing bugs. It includes new libraries like PLINQ and TPL for parallel programming and MEF for extensibility.
Easing offline web application development with GWT
At this current time, HTML5 APIs are mature enough so that the web browser can now be a very good platform for applications that were before only implemented as native applications : offline applications with locally stored data, embedded SQL engines, etc. Although there are many good Javascript frameworks out there, the Java language allows to build, maintain, debug and work with ease on really big applications (> 100,000 LOC).
You'll discover in this presentation all the tools we assembled to make an application available with its data 100% of the time, even without internet!
This document provides an overview and summary of the Android deep dive presentation given by Marko Gargenta at Sprint Dev Con 2010. It discusses the Android stack including the Linux kernel, native libraries like WebKit and SQLite, the Dalvik VM, and the application framework. It also covers building a basic "Hello World" Android app, common app components like activities, services, content providers and broadcasts receivers. The document summarizes the Android user interface approach using XML layouts and views, and operating system features such as security, files system, and cloud integration.
The document provides an overview of the iOS development platform. It describes the core components of iOS including Cocoa Touch, Core OS, Core Services, and Media frameworks. It explains concepts like the Model-View-Controller pattern and the iOS application structure and life cycle. Key topics like Objective-C classes, methods, properties, dynamic binding, and common frameworks like Foundation are also summarized.
This document provides an overview and introduction to developing applications for the Windows 8 platform. It covers WinRT basics, best practices for architecture and patterns like MVVM, using pickers and contracts to integrate app functionality, tiles and notifications for live updates and notifications, and resources for further information.
The fundamental problems of GUI applications and why people choose React
Instead of asking people which JavaScript framework to learn, let's look back into GUI application architecture (which Web Front-end is a case). Then you will understand why people created those library & frameworks and why React became so popular.
Lars Vogel gives an overview of Android programming. Android uses the Java programming language but runs applications on the Dalvik virtual machine instead of the Java Virtual Machine. The main Android programming constructs are activities, views, intents, broadcast receivers, services, and content providers. Activities provide user interfaces, services run in the background, and broadcast receivers listen for system events.
Bringing nullability into existing code - dammit is not the answer.pptx
The C# nullability features help you minimize the likelihood of encountering that dreaded System.NullReferenceException. Nullability syntax and annotations give hints as to whether a type can be nullable or not, and better static analysis is available to catch unhandled nulls while developing your code. What's not to like?
Introducing explicit nullability into an existing code bases is a Herculean effort. There's much more to it than just sprinkling some `?` and `!` throughout your code. It's not a silver bullet either: you'll still need to check non-nullable variables for null.
In this talk, we'll see some techniques and approaches that worked for me, and explore how you can migrate an existing code base to use the full potential of C# nullability.
Nerd sniping myself into a rabbit hole... Streaming online audio to a Sonos s...
After buying a set of Sonos-compatible speakers at IKEA, I was disappointed there's no support for playing audio from a popular video streaming service. They stream Internet radio, podcasts and what not. Well, not that service I want it to play!
Determined - and not knowing how deep the rabbit hole would be - I ventured on a trip that included network sniffing on my access point, learning about UPnP and running a web server on my phone (without knowing how to write anything Android), learning how MP4 audio is packaged (and has to be re-packaged). This ultimately resulted in an Android app for personal use, which does what I initially wanted: play audio from that popular video streaming service on Sonos.
Join me for this story about an adventure that has no practical use, probably violates Terms of Service, but was fun to build!
Space is a team tool that integrates chats, meetings, git hosting, automation, and more. It has an HTTP API to integrate third party apps and workflows, but it's massive! And slightly opinionated.
In this session, we will see how we built the .NET SDK for Space, and how we make that massive API more digestible. We will see how we used code generation, and incrementally made the API feel more like a real .NET SDK.
Indexing and searching NuGet.org with Azure Functions and Search - .NET fwday...
Which NuGet package was that type in again? In this session, let's build a "reverse package search" that helps finding the correct NuGet package based on a public type.
Together, we will create a highly-scalable serverless search engine using Azure Functions and Azure Search that performs 3 tasks: listening for new packages on NuGet.org (using a custom binding), indexing packages in a distributed way, and exposing an API that accepts queries and gives our clients the best result.
JetBrains Australia 2019 - Exploring .NET’s memory management – a trip down m...
This document discusses .NET memory management and the garbage collector. It explains that the CLR manages memory in a heap and the garbage collector reclaims unused memory. It describes how objects are allocated in generations and discusses how to help the garbage collector perform better by reducing allocations, using value types when possible, and properly disposing of objects. The document also provides examples of hidden allocations and demonstrates tools for analyzing memory usage like ClrMD and dotMemory Unit.
.NET Conf 2019 - Indexing and searching NuGet.org with Azure Functions and Se...
Which NuGet package was that type in again? In this session, let's build a "reverse package search" that helps finding the correct NuGet package based on a public type.
Together, we will create a highly-scalable serverless search engine using Azure Functions and Azure Search that performs 3 tasks: listening for new packages on NuGet.org (using a custom binding), indexing packages in a distributed way, and exposing an API that accepts queries and gives our clients the best result.
https://blog.maartenballiauw.be/post/2019/07/30/indexing-searching-nuget-with-azure-functions-and-search.html
CloudBurst 2019 - Indexing and searching NuGet.org with Azure Functions and S...
Which NuGet package was that type in again? In this session, let's build a "reverse package search" that helps finding the correct NuGet package based on a public type.
Together, we will create a highly-scalable serverless search engine using Azure Functions and Azure Search that performs 3 tasks: listening for new packages on NuGet.org (using a custom binding), indexing packages in a distributed way, and exposing an API that accepts queries and gives our clients the best result.
NDC Oslo 2019 - Indexing and searching NuGet.org with Azure Functions and Search
Which NuGet package was that type in again? In this session, let's build a "reverse package search" that helps finding the correct NuGet package based on a public type.
Together, we will create a highly-scalable serverless search engine using Azure Functions and Azure Search that performs 3 tasks: listening for new packages on NuGet.org (using a custom binding), indexing packages in a distributed way, and exposing an API that accepts queries and gives our clients the best result.
Approaches for application request throttling - Cloud Developer Days Poland
Speaking from experience building a SaaS: users are insane. If you are lucky, they use your service, but in reality, they probably abuse. Crazy usage patterns resulting in more requests than expected, request bursts when users come back to the office after the weekend, and more! These all pose a potential threat to the health of our web application and may impact other users or the service as a whole. Ideally, we can apply some filtering at the front door: limit the number of requests over a given timespan, limiting bandwidth, ...
In this talk, we’ll explore the simple yet complex realm of rate limiting. We’ll go over how to decide on which resources to limit, what the limits should be and where to enforce these limits – in our app, on the server, using a reverse proxy like Nginx or even an external service like CloudFlare or Azure API management. The takeaway? Know when and where to enforce rate limits so you can have both a happy application as well as happy customers.
Indexing and searching NuGet.org with Azure Functions and Search - Cloud Deve...
This document discusses indexing NuGet packages using Azure Functions and Azure Search to power search capabilities in ReSharper and Rider. It proposes using Functions triggered by changes to the NuGet.org catalog to download packages, index them using reflection metadata, and upload the results to an Azure Search index. Each step would be a separate function to allow independent scaling. The final system would watch the catalog, index new/updated packages, and provide APIs for searching packages by type or namespace.
Approaches for application request throttling - dotNetCologne
Speaking from experience building a SaaS: users are insane. If you are lucky, they use your service, but in reality, they probably abuse. Crazy usage patterns resulting in more requests than expected, request bursts when users come back to the office after the weekend, and more! These all pose a potential threat to the health of our web application and may impact other users or the service as a whole. Ideally, we can apply some filtering at the front door: limit the number of requests over a given timespan, limiting bandwidth, ...
In this talk, we’ll explore the simple yet complex realm of rate limiting. We’ll go over how to decide on which resources to limit, what the limits should be and where to enforce these limits – in our app, on the server, using a reverse proxy like Nginx or even an external service like CloudFlare or Azure API management. The takeaway? Know when and where to enforce rate limits so you can have both a happy application as well as happy customers.
CodeStock - Exploring .NET memory management - a trip down memory lane
The .NET Garbage Collector (GC) is really cool. It helps providing our applications with virtually unlimited memory, so we can focus on writing code instead of manually freeing up memory. But how does .NET manage that memory? What are hidden allocations? Are strings evil? It still matters to understand when and where memory is allocated. In this talk, we’ll go over the base concepts of .NET memory management and explore how .NET helps us and how we can help .NET – making our apps better. Expect profiling, Intermediate Language (IL), ClrMD and more!
The document discusses functional programming in C# and how it can help control complexity. It defines functional programming as treating computations as mathematical functions without changing state. The document provides examples of copying photo files using both object-oriented and functional approaches in C#. The functional approach uses function composition and immutable data to avoid state changes and control flow, making the focus on specifying transformations rather than algorithms.
Slides of the university I gave at Devoxx Belgium with Antonio Goncalves on CDI, Java EE and JBoss Forge.
Abstract:
-------
During this 3 hours university, you will learn some CDI basis, and will quickly dive into more advance CDI features (such as extension). Using JBoss Forge we will quickly generate a Java EE 7 web application, and then, following business requirements, we will add CDI functionalities.
This university talk will be a mixture of code and slides, focusing on CDI and Java EE 7.
--------
Video of the university is available on YouTube: http://youtu.be/LYKMaj4XKvg
Code and Slides on GitHub: https://github.com/antoinesd/cdi-forge-uni/tree/DevoxxBe2015
Code camp 2011 Getting Started with IOS, Una DalyUna Daly
Presentation at Code Camp on Oct 8, 2011, 1:15 pm in the Foothill College Cafeteria. Overview of iOS Platform and development with demonstration of building two applications that demonstrate the model-view-controller architecture and feature buttons, textfields, labels, and alerts.
The document summarizes key concepts about the Android application model including application components, intents, activities and tasks, processes and threads, and component lifecycles. It explains that an Android application consists of fundamental components like activities, services, broadcast receivers and content providers. Activities display the user interface, services run in the background, broadcast receivers respond to system-wide broadcasts, and content providers manage shared data.
Dan Morrill discusses the different ways to code applications for Android, including managed Dalvik code, Ajax/web apps, and native code. He outlines what each approach is capable of and not capable of. He demonstrates k-means clustering implemented in each approach. Morrill concludes that there are benefits to different approaches and developers should choose based on their app's specific needs and the developer's skills.
Доклад Антона Минашкина для Съесть собаку #15, 27/11/18
Тезисы:
- Почему DI – такой популярный design pattern в Android;
- Что особенного в DI для Kotlin;
- Практическая польза и опции DI.
The document provides an overview of the Java programming language. It discusses that Java was developed in the early 1990s by Sun Microsystems. It then summarizes some of Java's main features, including that it is a simple, object-oriented, robust, distributed, platform independent, secured, architecture-neutral, portable, high-performance, multi-threaded, and dynamic language. It also briefly discusses the Java Virtual Machine, Java Runtime Environment, Java Development Kit, Java bytecode, and the main method.
Creating Great REST and gRPC API Experiences (in Swift)Tim Burks
Protocol Buffers are a language-neutral, platform-neutral mechanism for serializing structured data. They can be used to define interfaces for APIs and exchange data between systems. Protocol Buffers include a data definition language to define message types, a serialization format to encode structured data in a compact binary form, and code generation plugins to generate data access code in multiple languages. Protocol Buffers provide a flexible and efficient method for serializing structured data for storage or network transmission.
Integration of java ee applications on c – based implementationsAlexander Decker
This academic article discusses integrating Java applications with C/C++ implementations using the Java Native Interface (JNI). It describes developing JNI code with IBM WebSphere Integration Developer. The key steps are:
1. Create a Java class with methods to expose to native code. Compile to generate a C header file.
2. Implement the native methods in a shared library, allowing calls to other C APIs.
3. Configure the shared library in the WebSphere runtime.
This allows integrating existing C/C++ applications like scientific software with Java programs through the JNI bridge in an enterprise environment.
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...Maarten Balliauw
Ever wondered how IDE’s are built? In this talk, we’ll skip the marketing bit and dive into the architecture and implementation of JetBrains Rider. We’ll look at how and why we have built (and open sourced) a reactive protocol, and how the IDE uses a “microservices” architecture to communicate with the debugger, Roslyn, a WPF renderer and even other tools like Unity3D. We’ll explore how things are wired together, both in-process and across those microservices. Let’s geek out!
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...Maarten Balliauw
Ever wondered how IDE’s are built? In this talk, we’ll skip the marketing bit and dive into the architecture and implementation of JetBrains Rider.
We’ll look at how and why we have built (and open sourced) a reactive protocol, and how the IDE uses a “microservices” architecture to communicate with the debugger, Roslyn, a WPF renderer and even other tools like Unity3D. We’ll explore how things are wired together, both in-process and across those microservices. Let’s geek out!
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...Maarten Balliauw
Ever wondered how IDE’s are built? In this talk, we’ll skip the marketing bit and dive into the architecture and implementation of JetBrains Rider. We’ll look at how and why we have built (and open sourced) a reactive protocol, and how the IDE uses a “microservices” architecture to communicate with the debugger, Roslyn, a WPF renderer and even other tools like Unity3D. We’ll explore how things are wired together, both in-process and across those microservices. Let’s geek out!
Silverlight 2 for Developers - TechEd New Zealand 2008Jonas Follesø
The document is a presentation about Silverlight 2 for developers. It includes an agenda covering CRUD, designers, patterns and testing. It discusses using Silverlight 2 for building applications with a dive log app as an example. It covers using services, securing applications, HTTP requests and using Blend. It also discusses using MVC patterns, separation of concerns, the presentation model pattern and implementing data binding, commands and value converters in applications.
This document provides an overview of new features and enhancements in Visual Studio 2005, also known as Whidbey. It summarizes improvements to languages like Visual Basic .NET, Visual C#, C++, and Visual J#, the .NET Framework, data access, web services, and mobile development. Key areas of focus include increased productivity, simplified development, and better integration across languages, frameworks, and platforms.
The document discusses the C/C++ Development Tools (CDT) plugin for Eclipse, including what the CDT is used for, how it parses code and generates an abstract syntax tree (AST) to facilitate code analysis and refactoring, and how the CDT uses an index to improve parsing performance for large projects.
This document summarizes a presentation on Microsoft .NET and C#. It discusses .NET as a set of technologies for connecting information and as an emphasis on web services. C# is presented as a language that combines the safety of Java, ease of Visual Basic, and power of C++. Key aspects of .NET like the Common Language Runtime and class libraries are defined. The document also provides a brief comparison between .NET and J2EE frameworks and languages.
The document discusses HTML5 as a platform for user interfaces. It outlines several new features of HTML5, including the <canvas> element for drawing, WebGL for 3D graphics, multi-touch support, local storage with Web SQL databases, real-time updates with Web Sockets, improved file handling, and offline application caching. The document argues that HTML5 provides many of the capabilities of native applications and recommends using HTML5 and JavaScript for cross-platform user interface development.
This document provides an overview of Visual Basic .NET, including an introduction to the .NET framework, Visual Studio integrated development environment, VB.NET language basics like variables, data types, operators, arrays, and enumerations. It concludes with details on creating a simple "Hello World" console application in VB.NET.
Framework design involves balancing many considerations, such as:
- Managing dependencies between components to allow for flexibility and evolution over time. Techniques like dependency injection and layering help achieve this.
- Designing APIs by first writing code samples for key scenarios and defining object models to support these samples to ensure usability.
- Treating simplicity as a feature by removing unnecessary requirements and reusing existing concepts where possible.
Software development has shifted focus from efficiency to productivity, reusability, and user-friendliness. Object-oriented programming (OOP) models objects that contain data and methods. Key OOP concepts include inheritance, where subclasses extend and modify superclass features. An integrated development environment (IDE) combines tools like editors, compilers, linkers, and debuggers. Java uses a hybrid approach of compiling to bytecode, then interpreting for platform independence. Console applications use text input/output. Graphical user interface (GUI) applications use menus and buttons. Applets run in web browsers.
This document summarizes a presentation on building VSTO applications using LINQ. The presentation covers the fundamentals of VSTO development, how and why to use LINQ, and includes demos. Reasons for using VSTO over VBA are discussed, as well as how to add LINQ to a VSTO application.
Visual Studio 2010 includes many new features to improve the developer experience such as breakpoint grouping, parallel debugging tools, and a more extensible architecture. It can be used both as a robust code editor and as a platform for extensions. .NET 4.0 focuses on four main areas: better component integration, improved performance through parallelism and concurrency, enhanced language features, and reducing bugs. It includes new libraries like PLINQ and TPL for parallel programming and MEF for extensibility.
Easing offline web application development with GWTArnaud Tournier
At this current time, HTML5 APIs are mature enough so that the web browser can now be a very good platform for applications that were before only implemented as native applications : offline applications with locally stored data, embedded SQL engines, etc. Although there are many good Javascript frameworks out there, the Java language allows to build, maintain, debug and work with ease on really big applications (> 100,000 LOC).
You'll discover in this presentation all the tools we assembled to make an application available with its data 100% of the time, even without internet!
This document provides an overview and summary of the Android deep dive presentation given by Marko Gargenta at Sprint Dev Con 2010. It discusses the Android stack including the Linux kernel, native libraries like WebKit and SQLite, the Dalvik VM, and the application framework. It also covers building a basic "Hello World" Android app, common app components like activities, services, content providers and broadcasts receivers. The document summarizes the Android user interface approach using XML layouts and views, and operating system features such as security, files system, and cloud integration.
The document provides an overview of the iOS development platform. It describes the core components of iOS including Cocoa Touch, Core OS, Core Services, and Media frameworks. It explains concepts like the Model-View-Controller pattern and the iOS application structure and life cycle. Key topics like Objective-C classes, methods, properties, dynamic binding, and common frameworks like Foundation are also summarized.
This document provides an overview and introduction to developing applications for the Windows 8 platform. It covers WinRT basics, best practices for architecture and patterns like MVVM, using pickers and contracts to integrate app functionality, tiles and notifications for live updates and notifications, and resources for further information.
The fundamental problems of GUI applications and why people choose ReactOliver N
Instead of asking people which JavaScript framework to learn, let's look back into GUI application architecture (which Web Front-end is a case). Then you will understand why people created those library & frameworks and why React became so popular.
Android Introduction on Java Forum Stuttgart 11 Lars Vogel
Lars Vogel gives an overview of Android programming. Android uses the Java programming language but runs applications on the Dalvik virtual machine instead of the Java Virtual Machine. The main Android programming constructs are activities, views, intents, broadcast receivers, services, and content providers. Activities provide user interfaces, services run in the background, and broadcast receivers listen for system events.
Similar to Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020 (20)
Bringing nullability into existing code - dammit is not the answer.pptxMaarten Balliauw
The C# nullability features help you minimize the likelihood of encountering that dreaded System.NullReferenceException. Nullability syntax and annotations give hints as to whether a type can be nullable or not, and better static analysis is available to catch unhandled nulls while developing your code. What's not to like?
Introducing explicit nullability into an existing code bases is a Herculean effort. There's much more to it than just sprinkling some `?` and `!` throughout your code. It's not a silver bullet either: you'll still need to check non-nullable variables for null.
In this talk, we'll see some techniques and approaches that worked for me, and explore how you can migrate an existing code base to use the full potential of C# nullability.
Nerd sniping myself into a rabbit hole... Streaming online audio to a Sonos s...Maarten Balliauw
After buying a set of Sonos-compatible speakers at IKEA, I was disappointed there's no support for playing audio from a popular video streaming service. They stream Internet radio, podcasts and what not. Well, not that service I want it to play!
Determined - and not knowing how deep the rabbit hole would be - I ventured on a trip that included network sniffing on my access point, learning about UPnP and running a web server on my phone (without knowing how to write anything Android), learning how MP4 audio is packaged (and has to be re-packaged). This ultimately resulted in an Android app for personal use, which does what I initially wanted: play audio from that popular video streaming service on Sonos.
Join me for this story about an adventure that has no practical use, probably violates Terms of Service, but was fun to build!
Building a friendly .NET SDK to connect to SpaceMaarten Balliauw
Space is a team tool that integrates chats, meetings, git hosting, automation, and more. It has an HTTP API to integrate third party apps and workflows, but it's massive! And slightly opinionated.
In this session, we will see how we built the .NET SDK for Space, and how we make that massive API more digestible. We will see how we used code generation, and incrementally made the API feel more like a real .NET SDK.
Indexing and searching NuGet.org with Azure Functions and Search - .NET fwday...Maarten Balliauw
Which NuGet package was that type in again? In this session, let's build a "reverse package search" that helps finding the correct NuGet package based on a public type.
Together, we will create a highly-scalable serverless search engine using Azure Functions and Azure Search that performs 3 tasks: listening for new packages on NuGet.org (using a custom binding), indexing packages in a distributed way, and exposing an API that accepts queries and gives our clients the best result.
JetBrains Australia 2019 - Exploring .NET’s memory management – a trip down m...Maarten Balliauw
This document discusses .NET memory management and the garbage collector. It explains that the CLR manages memory in a heap and the garbage collector reclaims unused memory. It describes how objects are allocated in generations and discusses how to help the garbage collector perform better by reducing allocations, using value types when possible, and properly disposing of objects. The document also provides examples of hidden allocations and demonstrates tools for analyzing memory usage like ClrMD and dotMemory Unit.
.NET Conf 2019 - Indexing and searching NuGet.org with Azure Functions and Se...Maarten Balliauw
Which NuGet package was that type in again? In this session, let's build a "reverse package search" that helps finding the correct NuGet package based on a public type.
Together, we will create a highly-scalable serverless search engine using Azure Functions and Azure Search that performs 3 tasks: listening for new packages on NuGet.org (using a custom binding), indexing packages in a distributed way, and exposing an API that accepts queries and gives our clients the best result.
https://blog.maartenballiauw.be/post/2019/07/30/indexing-searching-nuget-with-azure-functions-and-search.html
CloudBurst 2019 - Indexing and searching NuGet.org with Azure Functions and S...Maarten Balliauw
Which NuGet package was that type in again? In this session, let's build a "reverse package search" that helps finding the correct NuGet package based on a public type.
Together, we will create a highly-scalable serverless search engine using Azure Functions and Azure Search that performs 3 tasks: listening for new packages on NuGet.org (using a custom binding), indexing packages in a distributed way, and exposing an API that accepts queries and gives our clients the best result.
NDC Oslo 2019 - Indexing and searching NuGet.org with Azure Functions and SearchMaarten Balliauw
Which NuGet package was that type in again? In this session, let's build a "reverse package search" that helps finding the correct NuGet package based on a public type.
Together, we will create a highly-scalable serverless search engine using Azure Functions and Azure Search that performs 3 tasks: listening for new packages on NuGet.org (using a custom binding), indexing packages in a distributed way, and exposing an API that accepts queries and gives our clients the best result.
Approaches for application request throttling - Cloud Developer Days PolandMaarten Balliauw
Speaking from experience building a SaaS: users are insane. If you are lucky, they use your service, but in reality, they probably abuse. Crazy usage patterns resulting in more requests than expected, request bursts when users come back to the office after the weekend, and more! These all pose a potential threat to the health of our web application and may impact other users or the service as a whole. Ideally, we can apply some filtering at the front door: limit the number of requests over a given timespan, limiting bandwidth, ...
In this talk, we’ll explore the simple yet complex realm of rate limiting. We’ll go over how to decide on which resources to limit, what the limits should be and where to enforce these limits – in our app, on the server, using a reverse proxy like Nginx or even an external service like CloudFlare or Azure API management. The takeaway? Know when and where to enforce rate limits so you can have both a happy application as well as happy customers.
Indexing and searching NuGet.org with Azure Functions and Search - Cloud Deve...Maarten Balliauw
This document discusses indexing NuGet packages using Azure Functions and Azure Search to power search capabilities in ReSharper and Rider. It proposes using Functions triggered by changes to the NuGet.org catalog to download packages, index them using reflection metadata, and upload the results to an Azure Search index. Each step would be a separate function to allow independent scaling. The final system would watch the catalog, index new/updated packages, and provide APIs for searching packages by type or namespace.
Approaches for application request throttling - dotNetCologneMaarten Balliauw
Speaking from experience building a SaaS: users are insane. If you are lucky, they use your service, but in reality, they probably abuse. Crazy usage patterns resulting in more requests than expected, request bursts when users come back to the office after the weekend, and more! These all pose a potential threat to the health of our web application and may impact other users or the service as a whole. Ideally, we can apply some filtering at the front door: limit the number of requests over a given timespan, limiting bandwidth, ...
In this talk, we’ll explore the simple yet complex realm of rate limiting. We’ll go over how to decide on which resources to limit, what the limits should be and where to enforce these limits – in our app, on the server, using a reverse proxy like Nginx or even an external service like CloudFlare or Azure API management. The takeaway? Know when and where to enforce rate limits so you can have both a happy application as well as happy customers.
CodeStock - Exploring .NET memory management - a trip down memory laneMaarten Balliauw
The .NET Garbage Collector (GC) is really cool. It helps providing our applications with virtually unlimited memory, so we can focus on writing code instead of manually freeing up memory. But how does .NET manage that memory? What are hidden allocations? Are strings evil? It still matters to understand when and where memory is allocated. In this talk, we’ll go over the base concepts of .NET memory management and explore how .NET helps us and how we can help .NET – making our apps better. Expect profiling, Intermediate Language (IL), ClrMD and more!
ConFoo Montreal - Approaches for application request throttlingMaarten Balliauw
Speaking from experience building a SaaS: users are insane. If you are lucky, they use your service, but in reality, they probably abuse. Crazy usage patterns resulting in more requests than expected, request bursts when users come back to the office after the weekend, and more! These all pose a potential threat to the health of our web application and may impact other users or the service as a whole. Ideally, we can apply some filtering at the front door: limit the number of requests over a given timespan, limiting bandwidth, ...
In this talk, we’ll explore the simple yet complex realm of rate limiting. We’ll go over how to decide on which resources to limit, what the limits should be and where to enforce these limits – in our app, on the server, using a reverse proxy like Nginx or even an external service like CloudFlare or Azure API management. The takeaway? Know when and where to enforce rate limits so you can have both a happy application as well as happy customers.
JetBrains Day Seoul - Exploring .NET’s memory management – a trip down memory...Maarten Balliauw
The .NET Garbage Collector (GC) is really cool. It helps providing our applications with virtually unlimited memory, so we can focus on writing code instead of manually freeing up memory. But how does .NET manage that memory? What are hidden allocations? Are strings evil? It still matters to understand when and where memory is allocated. In this talk, we’ll go over the base concepts of .NET memory management and explore how .NET helps us and how we can help .NET – making our apps better. Expect profiling, Intermediate Language (IL), ClrMD and more!
The .NET Garbage Collector (GC) is really cool. It helps providing our applications with virtually unlimited memory, so we can focus on writing code instead of manually freeing up memory. But how does .NET manage that memory? What are hidden allocations? Are strings evil? It still matters to understand when and where memory is allocated. In this talk, we’ll go over the base concepts of .NET memory management and explore how .NET helps us and how we can help .NET – making our apps better. Expect profiling, Intermediate Language (IL), ClrMD and more!
VISUG - Approaches for application request throttlingMaarten Balliauw
Speaking from experience building a SaaS: users are insane. If you are lucky, they use your service, but in reality, they probably abuse. Crazy usage patterns resulting in more requests than expected, request bursts when users come back to the office after the weekend, and more! These all pose a potential threat to the health of our web application and may impact other users or the service as a whole. Ideally, we can apply some filtering at the front door: limit the number of requests over a given timespan, limiting bandwidth, ...
In this talk, we’ll explore the simple yet complex realm of rate limiting. We’ll go over how to decide on which resources to limit, what the limits should be and where to enforce these limits – in our app, on the server, using a reverse proxy like Nginx or even an external service like CloudFlare or Azure API management. The takeaway? Know when and where to enforce rate limits so you can have both a happy application as well as happy customers.
What is going on - Application diagnostics on Azure - TechDays FinlandMaarten Balliauw
We all like building and deploying cloud applications. But what happens once that’s done? How do we know if our application behaves like we expect it to behave? Of course, logging! But how do we get that data off of our machines? How do we sift through a bunch of seemingly meaningless diagnostics? In this session, we’ll look at how we can keep track of our Azure application using structured logging, AppInsights and AppInsights analytics to make all that data more meaningful.
ConFoo - Exploring .NET’s memory management – a trip down memory laneMaarten Balliauw
The .NET Garbage Collector (GC) is really cool. It helps providing our applications with virtually unlimited memory, so we can focus on writing code instead of manually freeing up memory. But how does .NET manage that memory? What are hidden allocations? Are strings evil? It still matters to understand when and where memory is allocated. In this talk, we’ll go over the base concepts of .NET memory management and explore how .NET helps us and how we can help .NET – making our apps better. Expect profiling, Intermediate Language (IL), ClrMD and more!
Everybody is consuming or producing NuGet packages these days. It’s easy, right? We’ll look beyond what everyone is doing. How can we use the NuGet client API to fetch data from NuGet? Can we build an application plugin system based on NuGet? What hidden gems are there in the NuGet server API? Can we create a full copy of NuGet.org?
Speaking from experience building MyGet.org: users are insane. If you are lucky, they use your service, but in reality, they probably abuse. Crazy usage patterns resulting in more requests than expected, request bursts when users come back to the office after the weekend, and more! These all pose a potential threat to the health of our web application and may impact other users or the service as a whole. Ideally, we can apply some filtering at the front door: limit the number of requests over a given timespan, limiting bandwidth, ...
In this talk, we’ll explore the simple yet complex realm of rate limiting. We’ll go over how to decide on which resources to limit, what the limits should be and where to enforce these limits – in our app, on the server, using a reverse proxy like Nginx or even an external service like CloudFlare or Azure API management. The takeaway? Know when and where to enforce rate limits so you can have both a happy application as well as happy customers.
Measuring the Impact of Network Latency at TwitterScyllaDB
Widya Salim and Victor Ma will outline the causal impact analysis, framework, and key learnings used to quantify the impact of reducing Twitter's network latency.
How Social Media Hackers Help You to See Your Wife's Message.pdfHackersList
In the modern digital era, social media platforms have become integral to our daily lives. These platforms, including Facebook, Instagram, WhatsApp, and Snapchat, offer countless ways to connect, share, and communicate.
YOUR RELIABLE WEB DESIGN & DEVELOPMENT TEAM — FOR LASTING SUCCESS
WPRiders is a web development company specialized in WordPress and WooCommerce websites and plugins for customers around the world. The company is headquartered in Bucharest, Romania, but our team members are located all over the world. Our customers are primarily from the US and Western Europe, but we have clients from Australia, Canada and other areas as well.
Some facts about WPRiders and why we are one of the best firms around:
More than 700 five-star reviews! You can check them here.
1500 WordPress projects delivered.
We respond 80% faster than other firms! Data provided by Freshdesk.
We’ve been in business since 2015.
We are located in 7 countries and have 22 team members.
With so many projects delivered, our team knows what works and what doesn’t when it comes to WordPress and WooCommerce.
Our team members are:
- highly experienced developers (employees & contractors with 5 -10+ years of experience),
- great designers with an eye for UX/UI with 10+ years of experience
- project managers with development background who speak both tech and non-tech
- QA specialists
- Conversion Rate Optimisation - CRO experts
They are all working together to provide you with the best possible service. We are passionate about WordPress, and we love creating custom solutions that help our clients achieve their goals.
At WPRiders, we are committed to building long-term relationships with our clients. We believe in accountability, in doing the right thing, as well as in transparency and open communication. You can read more about WPRiders on the About us page.
INDIAN AIR FORCE FIGHTER PLANES LIST.pdfjackson110191
These fighter aircraft have uses outside of traditional combat situations. They are essential in defending India's territorial integrity, averting dangers, and delivering aid to those in need during natural calamities. Additionally, the IAF improves its interoperability and fortifies international military alliances by working together and conducting joint exercises with other air forces.
How RPA Help in the Transportation and Logistics Industry.pptxSynapseIndia
Revolutionize your transportation processes with our cutting-edge RPA software. Automate repetitive tasks, reduce costs, and enhance efficiency in the logistics sector with our advanced solutions.
Support en anglais diffusé lors de l'événement 100% IA organisé dans les locaux parisiens d'Iguane Solutions, le mardi 2 juillet 2024 :
- Présentation de notre plateforme IA plug and play : ses fonctionnalités avancées, telles que son interface utilisateur intuitive, son copilot puissant et des outils de monitoring performants.
- REX client : Cyril Janssens, CTO d’ easybourse, partage son expérience d’utilisation de notre plateforme IA plug & play.
Kief Morris rethinks the infrastructure code delivery lifecycle, advocating for a shift towards composable infrastructure systems. We should shift to designing around deployable components rather than code modules, use more useful levels of abstraction, and drive design and deployment from applications rather than bottom-up, monolithic architecture and delivery.
Coordinate Systems in FME 101 - Webinar SlidesSafe Software
If you’ve ever had to analyze a map or GPS data, chances are you’ve encountered and even worked with coordinate systems. As historical data continually updates through GPS, understanding coordinate systems is increasingly crucial. However, not everyone knows why they exist or how to effectively use them for data-driven insights.
During this webinar, you’ll learn exactly what coordinate systems are and how you can use FME to maintain and transform your data’s coordinate systems in an easy-to-digest way, accurately representing the geographical space that it exists within. During this webinar, you will have the chance to:
- Enhance Your Understanding: Gain a clear overview of what coordinate systems are and their value
- Learn Practical Applications: Why we need datams and projections, plus units between coordinate systems
- Maximize with FME: Understand how FME handles coordinate systems, including a brief summary of the 3 main reprojectors
- Custom Coordinate Systems: Learn how to work with FME and coordinate systems beyond what is natively supported
- Look Ahead: Gain insights into where FME is headed with coordinate systems in the future
Don’t miss the opportunity to improve the value you receive from your coordinate system data, ultimately allowing you to streamline your data analysis and maximize your time. See you there!
7 Most Powerful Solar Storms in the History of Earth.pdfEnterprise Wired
Solar Storms (Geo Magnetic Storms) are the motion of accelerated charged particles in the solar environment with high velocities due to the coronal mass ejection (CME).
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - MydbopsMydbops
This presentation, delivered at the Postgres Bangalore (PGBLR) Meetup-2 on June 29th, 2024, dives deep into connection pooling for PostgreSQL databases. Aakash M, a PostgreSQL Tech Lead at Mydbops, explores the challenges of managing numerous connections and explains how connection pooling optimizes performance and resource utilization.
Key Takeaways:
* Understand why connection pooling is essential for high-traffic applications
* Explore various connection poolers available for PostgreSQL, including pgbouncer
* Learn the configuration options and functionalities of pgbouncer
* Discover best practices for monitoring and troubleshooting connection pooling setups
* Gain insights into real-world use cases and considerations for production environments
This presentation is ideal for:
* Database administrators (DBAs)
* Developers working with PostgreSQL
* DevOps engineers
* Anyone interested in optimizing PostgreSQL performance
Contact info@mydbops.com for PostgreSQL Managed, Consulting and Remote DBA Services
Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...Bert Blevins
Today’s digitally connected world presents a wide range of security challenges for enterprises. Insider security threats are particularly noteworthy because they have the potential to cause significant harm. Unlike external threats, insider risks originate from within the company, making them more subtle and challenging to identify. This blog aims to provide a comprehensive understanding of insider security threats, including their types, examples, effects, and mitigation techniques.
Choose our Linux Web Hosting for a seamless and successful online presencerajancomputerfbd
Our Linux Web Hosting plans offer unbeatable performance, security, and scalability, ensuring your website runs smoothly and efficiently.
Visit- https://onliveserver.com/linux-web-hosting/
Transcript: Details of description part II: Describing images in practice - T...BookNet Canada
This presentation explores the practical application of image description techniques. Familiar guidelines will be demonstrated in practice, and descriptions will be developed “live”! If you have learned a lot about the theory of image description techniques but want to feel more confident putting them into practice, this is the presentation for you. There will be useful, actionable information for everyone, whether you are working with authors, colleagues, alone, or leveraging AI as a collaborator.
Link to presentation recording and slides: https://bnctechforum.ca/sessions/details-of-description-part-ii-describing-images-in-practice/
Presented by BookNet Canada on June 25, 2024, with support from the Department of Canadian Heritage.
Best Practices for Effectively Running dbt in Airflow.pdfTatiana Al-Chueyr
As a popular open-source library for analytics engineering, dbt is often used in combination with Airflow. Orchestrating and executing dbt models as DAGs ensures an additional layer of control over tasks, observability, and provides a reliable, scalable environment to run dbt models.
This webinar will cover a step-by-step guide to Cosmos, an open source package from Astronomer that helps you easily run your dbt Core projects as Airflow DAGs and Task Groups, all with just a few lines of code. We’ll walk through:
- Standard ways of running dbt (and when to utilize other methods)
- How Cosmos can be used to run and visualize your dbt projects in Airflow
- Common challenges and how to address them, including performance, dependency conflicts, and more
- How running dbt projects in Airflow helps with cost optimization
Webinar given on 9 July 2024
UiPath Community Day Kraków: Devs4Devs ConferenceUiPathCommunity
We are honored to launch and host this event for our UiPath Polish Community, with the help of our partners - Proservartner!
We certainly hope we have managed to spike your interest in the subjects to be presented and the incredible networking opportunities at hand, too!
Check out our proposed agenda below 👇👇
08:30 ☕ Welcome coffee (30')
09:00 Opening note/ Intro to UiPath Community (10')
Cristina Vidu, Global Manager, Marketing Community @UiPath
Dawid Kot, Digital Transformation Lead @Proservartner
09:10 Cloud migration - Proservartner & DOVISTA case study (30')
Marcin Drozdowski, Automation CoE Manager @DOVISTA
Pawel Kamiński, RPA developer @DOVISTA
Mikolaj Zielinski, UiPath MVP, Senior Solutions Engineer @Proservartner
09:40 From bottlenecks to breakthroughs: Citizen Development in action (25')
Pawel Poplawski, Director, Improvement and Automation @McCormick & Company
Michał Cieślak, Senior Manager, Automation Programs @McCormick & Company
10:05 Next-level bots: API integration in UiPath Studio (30')
Mikolaj Zielinski, UiPath MVP, Senior Solutions Engineer @Proservartner
10:35 ☕ Coffee Break (15')
10:50 Document Understanding with my RPA Companion (45')
Ewa Gruszka, Enterprise Sales Specialist, AI & ML @UiPath
11:35 Power up your Robots: GenAI and GPT in REFramework (45')
Krzysztof Karaszewski, Global RPA Product Manager
12:20 🍕 Lunch Break (1hr)
13:20 From Concept to Quality: UiPath Test Suite for AI-powered Knowledge Bots (30')
Kamil Miśko, UiPath MVP, Senior RPA Developer @Zurich Insurance
13:50 Communications Mining - focus on AI capabilities (30')
Thomasz Wierzbicki, Business Analyst @Office Samurai
14:20 Polish MVP panel: Insights on MVP award achievements and career profiling
3. Rider
Cross-platform, full-stack .NET IDE
All languages, all frameworks
Even WinForms (on Windows)
Rider C++ in preview
Lightweight, fast & yet a full IDE!
Built on IntelliJ IDEA and ReSharper
Helps you be more productive as a developer
Free trial! https://RiderIDE.net/maarten
5. JetBrains
Founded 2000 in Prague (Czech Republic)
2000 IntelliJ Renamer
2001 IntelliJ
2004 ReSharper
2020 20+ IDE’s and other developer tools
7. ReSharper IDE
Project was halted (but not gone to waste)
Keep functionality separate from the actual IDE
Same core, IDE interoperability layer on top
Visual Studio 2010, 2013, 2015, 2017 and 2019
ReSharper command line tools (CLI)
Several concepts and architecture remained
9. Why build a .NET IDE?
In 2017…
“When will JetBrains come with its own .NET IDE?”
ReSharper constrained by Visual Studio environment
32-bit process resource constraints
Changes in VS impact ReSharper
.NET Core
No good and consistent cross-platform IDE
10. Cross-platform...
...means a cross-platform UI toolkit is needed!
ReSharper UI built with WinForms and WPF
Existing ReSharper UI would need converting
WinForms? (Mono sort of has it)
GTKSharp?
Qt?
11. IntelliJ Platform
Foundation of all of our IDE’s
Project view, code completion, UI toolkit
+ Platform plugins such as version control, terminal, ...
+ JetBrains <product name> IDE plugins
Open source (build your own IDE – e.g. Android Studio, Comma IDE & others)
https://github.com/JetBrains/intellij-community
Windows, Linux, Mac – already cross-platform thanks to JVM
12. IntelliJ Platform + R# ?
IntelliJ Platform
Great foundation to build on
Windows, Linux, Mac
JVM
ReSharper (R#)
All of those .NET inspections, refactorings, code
generation, project model, ...
.NET
13. Options!
Rewrite R# in Java?
16 years of implementation and knowledge
Would bring 2 R# implementations... Automatic conversion?
Run R# as a command-line process
Already possible (thanks, 2004!)
“Just need our own UI on top”
14. IntelliJ Platform + R# !
Headless R# as a language server
Cross-platform (.NET on Windows, .NET Core on macOS/Linux)
No constraints
It is ReSharper! 2 products, 1 code base
IntelliJ as a thin UI
Control the R# process
15. Both sides are an IDE...
Is IntelliJ IDEA really a thin UI? Three sorts of features...
IJ handles everything
R# handles almost everything
Both IDE’s make a more awesome IDE
17. How to make them talk?
Inter-process communication
18. Example: Context actions (Alt+Enter)
IntelliJ
Text editor, caret(s)
Alt+Enter key binding
“Language infrastructure” + C# facade
ReSharper
C# language, inspections, actions
IntelliJ
Render actions, may add own entries
Data: a tree of id, name and icon nodes
19. 1. Bi-directional
User can be typing
A refactoring or completion may be injecting code at the same time
2. Can be implemented with delta’s
IntelliJ pushes delta to R#
R# pushes delta to IntelliJ
Can’t really do RPC (user experience would be bad)
How to handle concurrency?
Data: a delta (from line + column, to line + column, text to insert)
Example: Writing code
20. Data types aren’t that complex...
Context actions
A tree of id, name and icon nodes
Inspections
A set of name, icon, severity, tooltip, text range
Writing code
Delta with from line + column, to line + column, text to insert
Fairly simple messages! We can make this generic enough!
e.g. make one inspection work make them all work
21. Which protocol do we use?
Re-use Language Server Protocol (LSP)?
Great in itself – IDE concepts like window, editor, language, diagnostics, ...
We would need customizations for R# feature set
Or build a custom REST-like protocol?
Experimented with JSON, ProtoBuf, request/response style
22. Request-action-response
LSP and custom protocol are mostly request/response
Every call needs context (which solution, project, file, location in code, ...)
Realization: Why use this “request-action-response” flow? Why RPC?
Both IDE’s share a similar model and architecture
Messages are simple, but for RPC they would need context
(which solution, which file, state info, ...) – overhead!
23. Model-View-ViewModel (MVVM)
IntelliJ is our view, ReSharper provides the model
Protocol is the ViewModel, sharing lightweight data
Project.Files.Add("Foo.cs")
Project.Files["Foo.cs"].Inspections.Add(
"Possible null reference", "Warning", 20, 30, 20, 42);
Both processes can react to such change (observable + observer)
24. Conflict resolution...
Changes to data in shared model can come from IJ and R#
Can still cause conflicts due to features or timing/GC issues
IntelliJ: “I just deleted file foo.cs”
R#: “I just refactored foo.cs”
Solutions!
Locking? (freezes, how to handle deadlocks?)
Conventions!
25. Conflict conventions!
View + Model (or client: IntelliJ + server: ReSharper)
Each value stored in the view model has a version
Updates by the view/client increment the version
Updates by the model/server do not
Only accept changes if version is the same or newer
If not, the change is discarded
28. Rider protocol
“Reactive Distributed communication framework for .NET, Kotlin, JS, C++”
Open source - https://github.com/jetbrains/rd
1. Include protocol libraries
and build tools on all sides
2. Write view model in special DSL
3. Generate code
4. Work with generated model
.NET/Kotlin/JS/... code generator
Model definition DSL
Primitives
Conflict resolution, serialization, ...
Sockets, batching, binary wire protocol
29. Rider protocol
Only need to know about a few data types & create model
Conflict resolution, wire protocol, timeouts, ... handled by protocol
Code generated based on the defined view model
Bonus points: no reflection/introspection needed on every run
Hierarchical + lifetimes
30. Primitives
Primitive Description
Signal Event that is fired when something happens
Property Observable value
List/set/map Observable collections
Field Immutable value
Call/callback RPC-style call, needed from time to time
byte, short, int, long, float,
double, char, boolean, string,
securestring, void, enum, ...
Primitives and special types
Aggregatedef/classdef/structdef A node in the viewmodel
31. Signal (event)
Producers/subscribers
Observable/observer
Using lifetime to manage subscription
// Produceevent
interfaceISource<T>{
voidFire(T value);
}
// Subscribetoevent
interfaceISink<T> {
voidAdvise(Lifetimel,Action<T> handler);
}
// Event
interfaceISignal<T>:ISource<T>,ISink<T> { }
32. Property
Signal implementation
Lifetime to manage subscription
// Observableproperty
interfaceIProperty<T>: ISink<T> {
T Value{ get;set;}
voidAdvise(Lifetimel,Action<T> handler);
voidView(Lifetime l,Action<Lifetime,T>handler);
}
36. Rider protocol
Kotlin-based DSL - easy to work with for our developers
Update view model, generate code, work with generated code
Find Usages, Navigation, ... work while crafting model
No need to think about multiple processes, state, conflict resolution, ...
Cross-language, cross-platform
Plugin model for Rider is more complex (IJ and R# parts may be needed)
https://github.com/JetBrains/fsharp-support
https://github.com/JetBrains/resharper-unity
https://github.com/JetBrains/azure-tools-for-intellij
40. Multiple processes...
What if certain features were
running in their own process?
No need to run all the time
Own memory constraints
Start/stop/crash independently
41. Shared view model
Pass around a shared view model
to interested parties
Example: Roslyn analyzers/inspections
Pass around “reference” of
[
{ name, icon, severity,
tooltip, text range }
]
47. Model the view as well
public CSharpInteractiveOptionsPage(Lifetime lifetime, ...)
: base(lifetime, ...) {
AddHeader("Tool settings");
AddToolPathFileChooserOption(lifetime, commonFileDialogs);
AddEmptyLine();
AddStringOption((CSIOptions s) => s.ToolArguments,
"Tool arguments:", "Additional tool arguments");
AddHeader("Tool window behavior");
AddBoolOption((CSIOptions s) => s.FocusOnOpenToolWindow,
"Focus tool window on open");
AddBoolOption((CSIOptions s) => s.FocusOnSendLineText,
"Focus tool window on Send Line");
AddBoolOption((CSIOptions s) => s.MoveCaretOnSendLineText,
"Move caret down on Send Line");
// ...
}
48. Multiple machines
WPF on macOS/Linux
Rendering on Windows
Front-end on one machine,
back-end on another
...
49. Every IDE as both a client and server
Front-end and back-end: separate process & memory
Whatever happens in the backend, the frontend can process the user's typing
Bring this technology to other IDE’s?
Reuse WebStorm's HTML/CSS/JS functionality in ReSharper
(e.g. Visual Studio + R# using WebStorm in back-end mode)
51. Conclusion
Rider is an IDE built on
two IDE’s
two technology stacks
Rich and easy programming model was needed to bridge the two
Protocol gave rise to
more than two processes
more than one machine
micro UI
Free trial! www.jetbrains.com/rider
This talk is about:
How Rider came to be
How protocol allowed us to gain additional knowledge and ideas of separating parts of our IDEs and building TOWARDS microservices
This talk is also about building a new product based on many years of previous investments
Open ContosoUniversity in Rider
Show solution explorer
Show editor where you can type, show inspections, navigation, refactoring
Mention debugging
Mention tools like database
Mention cross platform
Now that we have seen a bit of the IDE, let’s look at some history first.
Talk about history of JetBrains a bit, mention Eclipse in 2002, need for a new product.
Mention ReSharper plugin to VS..
ReSharper 1.0 -> 2.0 – let’s do a full IDE
Rely on being a plugin to VS? Or build a full .NET IDE?
It was never released, but a fully functional prototype.
Provided a solution explorer, an editor, find usages, code completion and refactorings.
Built on .NET WinForms and Windows Presentation Foundation (WPF) wasn’t around.
Project halted – VS plugin seemed best way to go
Project halted (but not gone to waste)
Concepts and architecture remained
Action system
Text control implementation
Several tool windows and toolbar controls
Unit test runner
ReSharper command line tools (CLI)
Keep functionality separate from the actual IDE
Helped future versions of ReSharper: Visual Studio 2010, 2013, 2015 and 2017
Same core, IDE interoperability layer on top
Headless R# as a language server
Cross-platform (.NET on Windows, Mono on Linux and macOS)
No constraints (64 bit process, and its own memory space)
It is ReSharper! 2 products, 1 code base
IntelliJ as a thin UI
Control the R# process
Client/server or IPC communication
Is IntelliJ really a thin UI?
Full IDE for its own languages, no need for R# there
Combined languages (e.g. JS/TS/HTML in IJ and R#)
Change tracking, VCS, REST client, tool windows, ...
Three cases...
Features where IJ handles everything
Features where R# handles almost everything
Features where both IDE’s make an awesome IDE
Both sides are an IDE!
Same concepts, but not the same knowledge about the project
Open ContosoUniversity in Rider
Navigate to *.html – Navigation already includes all flows! Files in IJ, symbols in IJ, symbols in R#
HTML editor is purely IntelliJ
Navigate to *.cshtml – Again both IDE’s at work
CSHTML is both C# and HTML – now what? Both IDE’s!
Navigate to HomeController
C# is al ReSharper. Or is it? Show database tools + language injection with database query.
Mention local history – tracked by IJ but R# needs to know about this too, e.g. in a big refactoring
If we are going to make them talk, let’s look at how we could model the data that goes over the wire.
Re-use Language Server Protocol (LSP)?
Great in itself – IDE concepts like window, editor, language, diagnostics, ...Built for/with VS Code and the ideas in that IDE.Not bad! PoSh plugin uses this, and works fine! But feature set is a bit more limited than what we have in R#.
We would need customizations...
LSP is lowest common denominator – some R# refactorings can not be done
Mixed languages? e.g. CSHTML which can be HTML + CSS + JS + C#/VB.NET
Build a custom REST-like protocol?
Experimented with JSON, ProtoBuf, request/response style
Slow, hard to customize, hard to develop with when all is in motion
Objects bind to other objects, instead of parent keeping track of just direct children
Open empty project in Rider, install a NuGet package, show log tab
Open Rider in IntelliJ IDEA
NuGetModel.kt – explain it Extends the solution node in the model
Has a bunch of inner classes, and properties
Interesting is sink(“log”)
Generated version: RdNuGetHost – Kotlin implementation of our view model
In RiderNuGetLogPanel – init -> facade.host.log.advise(facade.lifetime)
Open ReSharperHost.Generated.sln in Rider
Generated version: RdNuGetHost – C# implementation of our model
In NuGetNativeLogger, public override void Log(ILogMessage message) => myHost.Log.Fire( new NuGetLogMessage(message.Time, NuGetLogContext.NuGet, Convert(message.Level), message.Message));
Open Rider in IntelliJ IDEA
NuGetModel.kt – find property("configFiles", immutableList(classdef("RdNuGetConfigFile") {
RiderNuGetSourcesPanel – init - facade.host.configManager.configFiles.advise(facade.lifetime) { newFiles ->
Similar construct to subscribe to sources being added to the view model
Open ReSharperHost.Generated.sln in Rider
In NuGetCredentialProviderHost, show lifetime example – when solution closes the lifetime closes, so this thing cleans up as well
Mention WPF, WinForms
Thought experiments: WPF/XAML renderer
Rider and Unity Editor can be started independently, but this does not prevent us from both processes to look for each other’s Rider Protocol connection.
When both are launched and the connection is allowed, Rider can share its view model with Unity Editor and vice-versa.
This lets Rider control play/pause/and stop buttons in Unity, and also provides the ability to debug code in Rider, even though it is running in the Unity Editor.
Rider and Unity Editor can be started independently, but this does not prevent us from both processes to look for each other’s Rider Protocol connection. When both are launched and the connection is allowed, Rider can share its view model with Unity Editor and vice-versa. This lets Rider control play/pause/and stop buttons in Unity, and also provides the ability to debug code in Rider, even though it is running in the Unity Editor.