SlideShare une entreprise Scribd logo
1  sur  67
Télécharger pour lire hors ligne
Deep dive into
Android Data Binding
+RadoslawPiekarz
@radzio
Radosław Piekarz
Head of Mobile at Tango Agency
droidconde2016
talixo.de
10 € discount
Basics
How it works?
Lambdas
Two-Way data binding
New stuff announced during Google IO 2016
Dos and don'ts
MVVM & TDD
Summary
Basics
How it works?
Lambdas
Two-Way data binding
New stuff announced during Google IO 2016
Dos and don'ts
MVVM & TDD
Summary
Setup
// <app-module>/build.gradle
apply plugin: "com.android.application"
android {
dataBinding {
enabled = true
}
}
Changes in layout file
<layout
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/my_id"/>
</layout>
Changes in Activity / Fragment code
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
MainActivityBinding binding = DataBindingUtil
.setContentView(this, R.layout.main_activity);
binding.myId.setText("John Doe")
}
Type safe!
Binding utils
DataBindingUtil.setContentView(activity, layoutId);
DataBindingUtil.inflate(inflater, layoutId, parent, attachToParrent);
ListItemBinding binding = ListItemBinding.bind(viewRoot);
Use for activities
Use for any view
Bind view that was
already inflated
Changes in layout file
<layout
xmlns:android="http://schemas.android.com/apk/res/android">
<data class="CustomClassName">
<variable name="user" type="com.example.User"/>
</data>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{user.firstName}" />
</layout>
Changes in Activity / Fragment Code
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
binding = DataBindingUtil
.setContentView(this, R.layout.main_activity);
binding.setUser(new User());
}
Binding expression operators
Grouping ()
Literals character, String,
numeric, null
Method calls, field access
Ternary operator ?:
Array access []
Null coalescing operator ??
Mathematical + - / * %
String concatenation +
Logical && ||
Binary & | ^
Unary + - ! ~
Shift >> >>> <<
Comparison == > < >= <=
instanceof, cast
Binding expression operators
android:text="@{user.displayName ?? user.lastName}"
android:text="@{user.displayName != null ? user.displayName : user.lastName}"
=
Notifying view #1
public class User extends BaseObservable {
private String firstName;
public User(String firstName) {
this.firstName = firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
notifyPropertyChanged(BR.firstName);
}
@Bindable
public String getFirstName() {
return this.firstName;
}
}
Notifying view #2
public class User {
public final ObservableField<String> firstName;
public User(String name) {
this.firstName = new ObservableField<>(firstName);
}
public void setName(String firstName) {
this.firstName.set(firstName);
}
}
Observable fields & collections
Observable<T>
ObservableBoolean
ObservableByte
ObservableChar
ObservableShort
ObservableInt
ObservableLong
ObservableFloat
ObservableDouble
ObservableParcelable<T>
ObservableList<T>
ObservableArrayList<T>
ObservableMap<K, V>
ObservableArrayMap<K, V>
Binding Adapters
<layout>
<ImageView
bind:imageUrl="@{viewModel.someNiceImageUrl}"
bind:error="@{@drawable/defaultImage}"/>
</layout>
@BindingAdapter({"bind:imageUrl", "bind:error"})
public static void loadImage(ImageView view, String url, Drawable error)
{
Picasso.with(view.getContext()).load(url).error(error).into(view);
}
Binding Adapters
@BindingAdapter({"bind:imageUrl", "bind:error"})
public static void loadImage(ImageView view, String url, Drawable error)
{
Picasso.with(view.getContext()).load(url).error(error).into(view);
}
java.lang.IllegalStateException
Required DataBindingComponent is null. If you don't use an inflation
method taking a DataBindingComponent, use
DataBindingUtil.setDefaultComponent or make all BindingAdapter
methods static.
Binding Component
public class MyDataBindingCoponent implements DataBindingComponent
{
public EditTextBindings getEditTextBindings()
{
return new EditTextBindings();
}
}
Binding Component
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
binding = DataBindingUtil
.setContentView(this,
R.layout.activity_main,
new MyDataBindingCoponent());
binding.setViewModel(new ViewModel());
}
Binding Conversions
android:background="@{isError ? @color/red : @color/white}"
@BindingConversion
public static ColorDrawable convertColorToDrawable(int color) {
return new ColorDrawable(color);
}
Binding methods
@BindingMethods({
@BindingMethod(type = CircularProgressBar.class,
attribute = "progressText", method = "setProgressMessage")
})
public class ViewBindings
{
}
RecyclerView bindings
https://github.com/radzio/android-data-binding-recyclerview
Talk is cheap. Show me the code
RecyclerView Binding #1
<android.support.v7.widget.RecyclerView
android:id="@+id/activity_users_recycler"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
app:items="@{usersViewModel.users}"
app:itemViewBinder="@{view.itemViewBinder}"
/>
RecyclerView Binding #2
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
usersViewModel = new UsersViewModel();
usersViewModel.users
.add(new SuperUserViewModel(new User("Android", "Dev")));
binding = DataBindingUtil.setContentView(this, R.layout.users_view);
binding.setUsersViewModel(usersViewModel);
binding.setView(this);
}
RecyclerView Binding #3
public class UsersViewModel extends BaseObservable
{
@Bindable
public ObservableArrayList<UserViewModel> users;
public UsersViewModel()
{
this.users = new ObservableArrayList<>();
}
public void addUser(String name, String surname)
{
this.users.add(new UserViewModel(new User(name, surname)));
}
}
RecyclerView Binding #4
public ItemBinder<UserViewModel> itemViewBinder()
{
return new CompositeItemBinder<UserViewModel>(
new SuperUserBinder(BR.user, R.layout.item_super_user),
new UserBinder(BR.user, R.layout.item_user)
);
}
Basics
How it works?
Lambdas
Two-Way data binding
New stuff announced during Google IO 2016
Dos and don'ts
MVVM & TDD
Summary
How it works?
Bind ViewModel to
View
Register for
property change
callbacks
Trigger
notifyPropertyChanged
Request rebind
Execute pending
bindings
User input or from
code
How it works?
public void setViewModel(TwoWayViewModel viewModel) {
updateRegistration(0, viewModel);
this.mViewModel = viewModel;
synchronized(this) {
mDirtyFlags |= 0x1L;
notifyPropertyChanged(BR.viewModel);
super.requestRebind();
}
How it works?
@Override
protected void executeBindings() {
long dirtyFlags = 0;
synchronized(this) {
dirtyFlags = mDirtyFlags;
mDirtyFlags = 0;
}
if ((dirtyFlags & 0x7L) != 0) {
if (viewModel != null) {
colorViewModel = viewModel.getColor();
}
if ((dirtyFlags & 0x7L) != 0) {
ColorPickerViewBindings.setColor(this.colorpicker, colorViewModel);
EditTextBindings.setText(this.mboundView2, colorViewModel);
}
if ((dirtyFlags & 0x4L) != 0) {
ColorPickerViewBindings.setColorListener(this.colorpicker, null, colorpickercolorAttr);
TextViewBindingAdapter.setTextWatcher(this.mboundView2, null, null, null, mboundView2androidTe);
this.mboundView3.setOnClickListener(mCallback2);
}
}
Basics
How it works?
Lambdas
Two-Way data binding
New stuff announced during Google IO 2016
Dos and don'ts
MVVM & TDD
Summary
Lambdas
<Button
android:onClick="@{() -> viewModel.sendAction()}
/>
public class MainViewModel extends BaseObservable
{
public void sendAction()
{
//code
}
}
Method References
<Button
android:onClick="@{viewModel::sendAction}"
/>
public class MainViewModel extends BaseObservable
{
public void sendAction(View view)
{
//code
}
}
Basics
How it works?
Lambdas
Two-Way data binding
New stuff announced during Google IO 2016
Dos and don'ts
MVVM & TDD
Summary
Two-Way data binding
<layout>
...
<LinearLayout>
<EditText
android:text="@{viewModel.twoWayText}"
/>
</LinearLayout>
</layout>
Two-Way data binding
<layout>
...
<LinearLayout>
<EditText
android:text="@={viewModel.twoWayText}"
/>
</LinearLayout>
</layout>
Two-Way data binding
classpath 'com.android.tools.build:gradle:2.1.0-alpha3'// or above
Views with Two-Way Binding support
• AbsListView -> android:selectedItemPosition
• CalendarView -> android:date
• CompoundButton -> android:checked
• DatePicker -> android:year, android:month, android:day
• NumberPicker -> android:value
• RadioGroup -> android:checkedButton
• RatingBar -> android:rating
• SeekBar -> android:progres
• TabHost -> android:currentTab
• TextView -> android:text
• TimePicker -> android:hour, android:minute
What about custom views?
NO PROBLEM!
Two-Way data binding
@InverseBindingAdapter(attribute = "color", event = "colorAttrChanged")
public static int getColor(ColorPickerView view)
{
return view.getColor();
}
attribute + AttrChanged
Activity
@BindingAdapter("colorAttrChanged")
public static void setColorListener(ColorPickerView view,
final InverseBindingListener colorChange)
{
if (colorChange == null)
{
view.setOnColorChangedListener(null);
}
else
{
view.setOnColorChangedListener(new OnColorChangedListener()
{
@Override
public void onColorChanged(int newColor)
{
colorChange.onChange();
}
});
}
}
Two-Way data binding
@BindingAdapter("color")
public static void setColor(ColorPickerView view, int color)
{
if (color != view.getColor())
{
view.setColor(color);
}
}
Avoiding cycles
Two-Way data binding
public class TwoWayViewModel extends BaseObservable
{
private int color;
public void setColor(int color)
{
this.color = color;
this.notifyPropertyChanged(BR.color);
}
@Bindable
public int getColor()
{
return this.color;
}
}
Two-Way data binding
public class TwoWayBindingActivity extends AppCompatActivity
{
private ActivityTwoWayBinding binding;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_two_way);
binding.setViewModel(new TwoWayViewModel());
}
}
Two-Way data binding
<LinearLayout>
<com.github.danielnilsson9.colorpickerview.view.ColorPickerView
bind:color="@={viewModel.color}"
/>
<EditText
android:text="@={viewModel.color}"
/>
<Button
android:text="Set defined color"
android:onClick="@{() -> viewModel.setColor(Color.parseColor(`#C97249`))}"
/>
</LinearLayout>
Basics
How it works?
Lambdas
Two-Way data binding
New stuff announced during Google IO 2016
Dos and don'ts
MVVM & TDD
Summary
Special Variables
<TextView
android:id="@+id/tv_congrats"
/>
<Button
android:onClick="@{() -> clickHandler.clicked(tvCongrats)}"
/>
<TextView
android:text="@{TextService.load(context, myModel)}"
/>
Context
View IDs
Implied Event Updates
<CheckBox
android:id="@+id/cb_show_more"
/>
<TextView
android:visibility="@{cbShowMore.checked ? View.VISIBLE : View.GONE}"
/>
Repeated expressions
<TextView
android:id="@+id/tv_congrats"
android:visibility="@{cbShowMore.checked ? View.VISIBLE : View.GONE}"
/>
<TextView
android:visibility="@{cbShowMore.checked ? View.VISIBLE : View.GONE}"
/>
<TextView
android:visibility="@{cbShowMore.checked ? View.VISIBLE : View.GONE}"
/>
Repeated expressions
<TextView
android:id="@+id/tv_congrats"
android:visibility="@{cbShowMore.checked ? View.VISIBLE : View.GONE}"
/>
<TextView
android:visibility="@{tvCongrats.visibility}"
/>
<TextView
android:visibility="@{tvCongrats.visibility}"
/>
Basics
How it works?
Lambdas
Two-Way data binding
New stuff announced during Google IO 2016
Dos and don'ts
MVVM & TDD
Summary
Dos
• From time to time look at generated code
• Learn from already implemented bindings for framework views
• Move view operations to custom bindings as much as possible
• Try to use it together with MVVM design pattern
• Give it a chance!
Dos
• Use Data Binding for backward
compatibility!
Dos
• Always check if data binging library will work with your other libraries
(squidb won’t work )
Don’ts
• Don’t reinvent the wheel, on Github there are many ready to use
bindings
• Don’t forget about unit tests!
Don’ts
<EditText
android:layout_height="wrap_content"
android:hint="@string/hint_ticketNumber"
android:inputType="number"
android:layout_width="fill_parent"
android:text="@{viewModel.name == null?
String.format(viewModel.format, viewModel.surname, viewModel.nick) :
viewModel.name + viewModel.city}"
/>
Don’t move your business logic to xml layout
Just don’t!
Basics
How it works?
Lambdas
Two-Way data binding
New stuff announced during Google IO 2016
Dos and don'ts
MVVM & TDD
Summary
Say hello to
MVVM
MVVM & TDD
@Mock
ISendService sendService;
@Test
public void mainViewModel_sendAction_sendService_send()
{
final MainViewModel viewModel = new MainViewModel(sendService);
final String givenText = "my text";
viewModel.setTwoWayText(givenText);
viewModel.sendAction();
verify(sendService).send(givenText);
}
Basics
How it works?
Lambdas
Two-Way data binding
New stuff announced during Google IO 2016
Dos and don'ts
MVVM & TDD
Summary
Method count
• ~700 methods from databinding library
• n methods from your custom binding adapters, conversions etc.
• k methods from generated code for each layout xml with data binding
enabled
Summary
Cons
Compiler errors are sometimes not saying
too much
Still in beta
Documentation is not updated
May break other libraries (for example squidb)
Pros
Easy to start
Less boilerplate code
Code generation during compilation
Easy to integrate with custom views and
libraries
Really powerful
Officialy created and supported by Google
Android Team
Q&A
Q&A
https://github.com/radzio/DeepDiveIntoAndroidDataBinding
+RadoslawPiekarz
@radzio
Radosław Piekarz
Head of Mobile at Tango Agency

Contenu connexe

Tendances

[Final] ReactJS presentation
[Final] ReactJS presentation[Final] ReactJS presentation
[Final] ReactJS presentation
洪 鹏发
 

Tendances (20)

React js
React jsReact js
React js
 
Basic JavaScript Tutorial
Basic JavaScript TutorialBasic JavaScript Tutorial
Basic JavaScript Tutorial
 
CSS Best practice
CSS Best practiceCSS Best practice
CSS Best practice
 
Java script errors &amp; exceptions handling
Java script  errors &amp; exceptions handlingJava script  errors &amp; exceptions handling
Java script errors &amp; exceptions handling
 
Introduction Django
Introduction DjangoIntroduction Django
Introduction Django
 
Js ppt
Js pptJs ppt
Js ppt
 
JavaScript & Dom Manipulation
JavaScript & Dom ManipulationJavaScript & Dom Manipulation
JavaScript & Dom Manipulation
 
Jsp/Servlet
Jsp/ServletJsp/Servlet
Jsp/Servlet
 
NestJS
NestJSNestJS
NestJS
 
Javascript essentials
Javascript essentialsJavascript essentials
Javascript essentials
 
Bootstrap 5 ppt
Bootstrap 5 pptBootstrap 5 ppt
Bootstrap 5 ppt
 
[Final] ReactJS presentation
[Final] ReactJS presentation[Final] ReactJS presentation
[Final] ReactJS presentation
 
Improving the performance of Odoo deployments
Improving the performance of Odoo deploymentsImproving the performance of Odoo deployments
Improving the performance of Odoo deployments
 
Html5 and-css3-overview
Html5 and-css3-overviewHtml5 and-css3-overview
Html5 and-css3-overview
 
ReactJS presentation
ReactJS presentationReactJS presentation
ReactJS presentation
 
MVVM with DataBinding on android
MVVM with DataBinding on androidMVVM with DataBinding on android
MVVM with DataBinding on android
 
An Introduction to the DOM
An Introduction to the DOMAn Introduction to the DOM
An Introduction to the DOM
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js
 
Nodejs presentation
Nodejs presentationNodejs presentation
Nodejs presentation
 
JavaScript - Chapter 10 - Strings and Arrays
 JavaScript - Chapter 10 - Strings and Arrays JavaScript - Chapter 10 - Strings and Arrays
JavaScript - Chapter 10 - Strings and Arrays
 

En vedette

Android - Thread, Handler and AsyncTask
Android - Thread, Handler and AsyncTaskAndroid - Thread, Handler and AsyncTask
Android - Thread, Handler and AsyncTask
Hoang Ngo
 

En vedette (20)

Android Data Binding in action using MVVM pattern - droidconUK
Android Data Binding in action using MVVM pattern - droidconUKAndroid Data Binding in action using MVVM pattern - droidconUK
Android Data Binding in action using MVVM pattern - droidconUK
 
Dominando o Data Binding no Android
Dominando o Data Binding no AndroidDominando o Data Binding no Android
Dominando o Data Binding no Android
 
Data Binding in Action using MVVM pattern
Data Binding in Action using MVVM patternData Binding in Action using MVVM pattern
Data Binding in Action using MVVM pattern
 
Is Activity God? ~ The MVP Architecture ~
Is Activity God? ~ The MVP Architecture ~Is Activity God? ~ The MVP Architecture ~
Is Activity God? ~ The MVP Architecture ~
 
Data binding w Androidzie
Data binding w AndroidzieData binding w Androidzie
Data binding w Androidzie
 
Android Databinding Library
Android Databinding LibraryAndroid Databinding Library
Android Databinding Library
 
IPC: AIDL is not a curse
IPC: AIDL is not a curseIPC: AIDL is not a curse
IPC: AIDL is not a curse
 
Data binding
Data bindingData binding
Data binding
 
Android ipm 20110409
Android ipm 20110409Android ipm 20110409
Android ipm 20110409
 
Long-read: assets and challenges of a (not so) emerging technology
Long-read: assets and challenges of a (not so) emerging technologyLong-read: assets and challenges of a (not so) emerging technology
Long-read: assets and challenges of a (not so) emerging technology
 
Android Data Binding
Android Data BindingAndroid Data Binding
Android Data Binding
 
Dover ALS Safety Moment of the Week 20-Mar-2017
Dover ALS Safety Moment of the Week 20-Mar-2017Dover ALS Safety Moment of the Week 20-Mar-2017
Dover ALS Safety Moment of the Week 20-Mar-2017
 
Android MVVM
Android MVVMAndroid MVVM
Android MVVM
 
Memory Leaks in Android Applications
Memory Leaks in Android ApplicationsMemory Leaks in Android Applications
Memory Leaks in Android Applications
 
FFmpeg presentation
FFmpeg presentationFFmpeg presentation
FFmpeg presentation
 
Android - Thread, Handler and AsyncTask
Android - Thread, Handler and AsyncTaskAndroid - Thread, Handler and AsyncTask
Android - Thread, Handler and AsyncTask
 
Process Management
Process ManagementProcess Management
Process Management
 
Testable Android Apps using data binding and MVVM
Testable Android Apps using data binding and MVVMTestable Android Apps using data binding and MVVM
Testable Android Apps using data binding and MVVM
 
MVVM ( Model View ViewModel )
MVVM ( Model View ViewModel )MVVM ( Model View ViewModel )
MVVM ( Model View ViewModel )
 
FFMPEG on android
FFMPEG on androidFFMPEG on android
FFMPEG on android
 

Similaire à Deep dive into Android Data Binding

Big Data for each one of us
Big Data for each one of usBig Data for each one of us
Big Data for each one of us
OSCON Byrum
 
android design pattern
android design patternandroid design pattern
android design pattern
Lucas Xu
 

Similaire à Deep dive into Android Data Binding (20)

Infinum Android Talks #14 - Data binding to the rescue... or not (?) by Krist...
Infinum Android Talks #14 - Data binding to the rescue... or not (?) by Krist...Infinum Android Talks #14 - Data binding to the rescue... or not (?) by Krist...
Infinum Android Talks #14 - Data binding to the rescue... or not (?) by Krist...
 
Effective Android Data Binding
Effective Android Data BindingEffective Android Data Binding
Effective Android Data Binding
 
Knockout.js
Knockout.jsKnockout.js
Knockout.js
 
SE2016 Android Mikle Anokhin "Speed up application development with data bind...
SE2016 Android Mikle Anokhin "Speed up application development with data bind...SE2016 Android Mikle Anokhin "Speed up application development with data bind...
SE2016 Android Mikle Anokhin "Speed up application development with data bind...
 
Data binding 入門淺談
Data binding 入門淺談Data binding 入門淺談
Data binding 入門淺談
 
Knockoutjs databinding
Knockoutjs databindingKnockoutjs databinding
Knockoutjs databinding
 
Fundaments of Knockout js
Fundaments of Knockout jsFundaments of Knockout js
Fundaments of Knockout js
 
Knockoutjs
KnockoutjsKnockoutjs
Knockoutjs
 
How to use data binding in android
How to use data binding in androidHow to use data binding in android
How to use data binding in android
 
GDG Mediterranean Dev Fest Code lab #DevFestMed15 da android ad android wear ...
GDG Mediterranean Dev Fest Code lab #DevFestMed15 da android ad android wear ...GDG Mediterranean Dev Fest Code lab #DevFestMed15 da android ad android wear ...
GDG Mediterranean Dev Fest Code lab #DevFestMed15 da android ad android wear ...
 
SharePoint Conference 2018 - APIs, APIs everywhere!
SharePoint Conference 2018 - APIs, APIs everywhere!SharePoint Conference 2018 - APIs, APIs everywhere!
SharePoint Conference 2018 - APIs, APIs everywhere!
 
Data Binding - Android by Harin Trivedi
Data Binding - Android by Harin TrivediData Binding - Android by Harin Trivedi
Data Binding - Android by Harin Trivedi
 
Unit5 Mobile Application Development.doc
Unit5 Mobile Application Development.docUnit5 Mobile Application Development.doc
Unit5 Mobile Application Development.doc
 
Dialogs in Android MVVM (14.11.2019)
Dialogs in Android MVVM (14.11.2019)Dialogs in Android MVVM (14.11.2019)
Dialogs in Android MVVM (14.11.2019)
 
Vaadin 7 CN
Vaadin 7 CNVaadin 7 CN
Vaadin 7 CN
 
Big Data for each one of us
Big Data for each one of usBig Data for each one of us
Big Data for each one of us
 
Angular js
Angular jsAngular js
Angular js
 
Backbone Basics with Examples
Backbone Basics with ExamplesBackbone Basics with Examples
Backbone Basics with Examples
 
android design pattern
android design patternandroid design pattern
android design pattern
 
Getting your app ready for android n
Getting your app ready for android nGetting your app ready for android n
Getting your app ready for android n
 

Dernier

Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
chiefasafspells
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
masabamasaba
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 

Dernier (20)

WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - Keynote
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 

Deep dive into Android Data Binding