— An async template - Oleksandr Khokhlov | Elixir Club Ukraine

Elixir Club
Elixir ClubElixir Club
Alexander Khokhlov
@nots_ioNots.io
— Knock, knock
— An async template
— Who’s there?
Co-Founder
Nots.io
01
— An async template  -  Oleksandr Khokhlov | Elixir Club Ukraine
01 • Nots.io
Company’s documentation:
Hard to find
Determine if fits the scope
Check whether relevant
Nots.io
Add docs for block of code,
function, module, file,
commit or branch
01
We Track
Relevance
You always know what’s fresh
and what’s not.
Promotes keeping docs
up-to-date.
Rewarding when everything is ✅
01 • Nots.io
Nots.io case
02
🏗
Choose File
page
02 • Nots.io case
In the
template
02 • Nots.io case
.branch-selector
= Notsapp.Renderer.simple_component({:"dropdown/dropdown", …})
%h2 Files
.tree
= Notsapp.Renderer.simple_component({:"code-tree/tree", …})
02 • Nots.io case
Microservices
YAY!
02 • Nots.io case
⛔
⛔
Blocking
02
.branch-selector
= Notsapp.Renderer.simple_component({:"dropdown/dropdown", …})
%h2 Files
.tree
= Notsapp.Renderer.simple_component({:"code-tree/tree", …})
But we want non-blocking
02
🚀
Good news: It’s doable!
02
But first
03
03
Phoenix
templates
But first
strings
03 • Phoenix templates
Bitstrings: << … >>
Binaries: bitstring with size(8)
String: binary with valid UTF8 codepoints
Charlist: list of integer codepoints
Phoenix strings: {:safe, String}
But first
iolist() | iodata()
03 • Phoenix templates
IO.puts(["Hello, ", "Elixir"])
IO.puts ["Hello, ", 69, 108, 105, 120,
105, 114]
IO.puts ["Hello, ", [69, [108, [105,
[120, [105, [114, ]]]]]]]
But first
iolist() | iodata()
Does not allocate new strings: Repeated
chunks are created only once
Does not concatenate strings/chars: Append
to the list is O(1) and doesn’t require copying
anything.
03 • Phoenix templates
Use iolist for I/O
iolist() | iodata()
With iolist & iodata work:
Console I/O functions
File I/O function
:gen_tcp.send()
:gen_udp.send()
03 • Phoenix templates
What about Elixir
& Phoenix?
03 • Phoenix templates
At compile time Phoenix runs through the templates folder
Uses EEx engine to convert each template
into a function
phoenix/lib/phoenix/template.ex
03 • Phoenix templates
At compile time
https://www.bignerdranch.com/blog/elixir-and-io-lists-part-2-io-lists-in-phoenix/
03 • Phoenix templates
<body>
<h1>Hello,
<%= @hello %>
</h1>
</body>
At compile time
https://www.bignerdranch.com/blog/elixir-and-io-lists-part-2-io-lists-in-phoenix/
03 • Phoenix templates
At compile time
03 • Phoenix templates
At compile time
https://www.bignerdranch.com/blog/elixir-and-io-lists-part-2-io-lists-in-phoenix/
03 • Phoenix templates
Reveal macro magic
At compile time
https://www.bignerdranch.com/blog/elixir-and-io-lists-part-2-io-lists-in-phoenix/
03 • Phoenix templates
Generated code of view
Gosh!
03 • Phoenix templates
At the end
of the day iex(1)> PageView.render("index.html", hello: "Elixir!")
{:safe,
[“<body>n <h1>Hello, n", "Elixir!", " </h1>n</body>n"]}
iolist
In runtime
03 • Phoenix templates
Rewind ⏪
04
.branch-selector
= Notsapp.Renderer.simple_component({:"dropdown/dropdown", …})
%h2 Files
.tree
= Notsapp.Renderer.simple_component({:"code-tree/tree", …})
What if we
return Task 🤔
Instead of HTML
04 • The solution
task = Task.async(fn -> do_heavy_work() end)
IO.puts "Do some more work"
result = Task.await(task)
What if we
return Task 🤔
in pseudocode
04 • The solution
{:safe, [["" | "<div class="branch-selector"""> "],
["" | Task.async(fn -> render_dropdown() end)] ,
["" | "n</div>nn"]]}
And when
everything is
ready — convert
04 • The solution
defmodule Notsapp.TemplateRenderer do
def process_rendered_template([h|t]) do
[process_rendered_template(h) | process_rendered_template(t)]
end
def process_rendered_template(%Notsapp.CljTask{task: task}) do
Task.await(task)
end
def process_rendered_template(e) do
e
end
defmacro __using__(_opts) do
quote do
def render(template, assigns) do
{:safe, io_list} = render_template(template, assigns)
{:safe, process_rendered_template(io_list)}
end
end
end
end
Apply to
every view
04 • The solution
def view do
quote do
use Phoenix.View
use Notsapp.TemplateRenderer # <--
use Phoenix.HTML
In parallel
Thank you
🤘
Alexander Khokhlov
point@nots.io
Nots.io
blog.nots.io
t.me/nots_io
1 of 37

Recommended

Anant kochhar _revealing_the_secrets - ClubHack2009 by
Anant kochhar _revealing_the_secrets - ClubHack2009Anant kochhar _revealing_the_secrets - ClubHack2009
Anant kochhar _revealing_the_secrets - ClubHack2009ClubHack
828 views39 slides
Yii 2.0 overview - 1 of 2 by
Yii 2.0 overview - 1 of 2Yii 2.0 overview - 1 of 2
Yii 2.0 overview - 1 of 2Cassiano Surek
1.9K views20 slides
Owasp Top 10 - A1 Injection by
Owasp Top 10 - A1 InjectionOwasp Top 10 - A1 Injection
Owasp Top 10 - A1 InjectionPaul Ionescu
841 views70 slides
— Knock, knock — An async templates — Who’s there? - Alexander Khokhlov | ... by
 — Knock, knock — An async templates — Who’s there? - Alexander Khokhlov  |  ... — Knock, knock — An async templates — Who’s there? - Alexander Khokhlov  |  ...
— Knock, knock — An async templates — Who’s there? - Alexander Khokhlov | ...Elixir Club
342 views41 slides
Andrii Yatsenko "Make the most of Twig" by
Andrii Yatsenko "Make the most of Twig"Andrii Yatsenko "Make the most of Twig"
Andrii Yatsenko "Make the most of Twig"Fwdays
817 views55 slides
XPages -Beyond the Basics by
XPages -Beyond the BasicsXPages -Beyond the Basics
XPages -Beyond the BasicsUlrich Krause
3.8K views58 slides

More Related Content

Similar to — An async template - Oleksandr Khokhlov | Elixir Club Ukraine

[DanNotes] XPages - Beyound the Basics by
[DanNotes] XPages - Beyound the Basics[DanNotes] XPages - Beyound the Basics
[DanNotes] XPages - Beyound the BasicsUlrich Krause
56.4K views80 slides
An Introduction To Python - Modules & Solving Real World Problems by
An Introduction To Python - Modules & Solving Real World ProblemsAn Introduction To Python - Modules & Solving Real World Problems
An Introduction To Python - Modules & Solving Real World ProblemsBlue Elephant Consulting
392 views15 slides
Python Spyder IDE | Edureka by
Python Spyder IDE | EdurekaPython Spyder IDE | Edureka
Python Spyder IDE | EdurekaEdureka!
901 views22 slides
COMMitMDE'18: Eclipse Hawk: model repository querying as a service by
COMMitMDE'18: Eclipse Hawk: model repository querying as a serviceCOMMitMDE'18: Eclipse Hawk: model repository querying as a service
COMMitMDE'18: Eclipse Hawk: model repository querying as a serviceAntonio García-Domínguez
132 views50 slides
Learn Electron for Web Developers by
Learn Electron for Web DevelopersLearn Electron for Web Developers
Learn Electron for Web DevelopersKyle Cearley
350 views52 slides
Top Maven Interview Questions in 2020 | Edureka by
Top Maven Interview Questions in 2020 | EdurekaTop Maven Interview Questions in 2020 | Edureka
Top Maven Interview Questions in 2020 | EdurekaEdureka!
1.3K views59 slides

Similar to — An async template - Oleksandr Khokhlov | Elixir Club Ukraine(20)

[DanNotes] XPages - Beyound the Basics by Ulrich Krause
[DanNotes] XPages - Beyound the Basics[DanNotes] XPages - Beyound the Basics
[DanNotes] XPages - Beyound the Basics
Ulrich Krause56.4K views
Python Spyder IDE | Edureka by Edureka!
Python Spyder IDE | EdurekaPython Spyder IDE | Edureka
Python Spyder IDE | Edureka
Edureka!901 views
Learn Electron for Web Developers by Kyle Cearley
Learn Electron for Web DevelopersLearn Electron for Web Developers
Learn Electron for Web Developers
Kyle Cearley350 views
Top Maven Interview Questions in 2020 | Edureka by Edureka!
Top Maven Interview Questions in 2020 | EdurekaTop Maven Interview Questions in 2020 | Edureka
Top Maven Interview Questions in 2020 | Edureka
Edureka!1.3K views
Adobe Flex - Developing Rich Internet Application Workshop Day 2 by Shyamala Prayaga
Adobe Flex - Developing Rich Internet Application Workshop Day 2Adobe Flex - Developing Rich Internet Application Workshop Day 2
Adobe Flex - Developing Rich Internet Application Workshop Day 2
Shyamala Prayaga2.1K views
Technical writing tools by Anil Menon
Technical writing toolsTechnical writing tools
Technical writing tools
Anil Menon2.5K views
UKLUG 2012 - XPages, Beyond the basics by Ulrich Krause
UKLUG 2012 - XPages, Beyond the basicsUKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basics
Ulrich Krause2.2K views
Intro to Pentesting Jenkins by Brian Hysell
Intro to Pentesting JenkinsIntro to Pentesting Jenkins
Intro to Pentesting Jenkins
Brian Hysell696 views
How fluentd fits into the modern software landscape by Phil Wilkins
How fluentd fits into the modern software landscapeHow fluentd fits into the modern software landscape
How fluentd fits into the modern software landscape
Phil Wilkins954 views
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdf by Ortus Solutions, Corp
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdfITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdf
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdf
OCCIware by OCCIware
OCCIwareOCCIware
OCCIware
OCCIware752 views
Alfresco tech talk live on web quick start by Alfresco Software
Alfresco tech talk live on web quick startAlfresco tech talk live on web quick start
Alfresco tech talk live on web quick start
Alfresco Software1.2K views
Krzysztof kotowicz. something wicked this way comes by Yury Chemerkin
Krzysztof kotowicz. something wicked this way comesKrzysztof kotowicz. something wicked this way comes
Krzysztof kotowicz. something wicked this way comes
Yury Chemerkin1.3K views
Lorraine JUG (1st June, 2010) - Maven by Arnaud Héritier
Lorraine JUG (1st June, 2010) - MavenLorraine JUG (1st June, 2010) - Maven
Lorraine JUG (1st June, 2010) - Maven
Arnaud Héritier1.1K views
Something wicked this way comes - CONFidence by Krzysztof Kotowicz
Something wicked this way comes - CONFidenceSomething wicked this way comes - CONFidence
Something wicked this way comes - CONFidence
Krzysztof Kotowicz2.8K views

More from Elixir Club

Kubernetes + Docker + Elixir - Alexei Sholik, Andrew Dryga | Elixir Club Ukraine by
Kubernetes + Docker + Elixir - Alexei Sholik, Andrew Dryga | Elixir Club UkraineKubernetes + Docker + Elixir - Alexei Sholik, Andrew Dryga | Elixir Club Ukraine
Kubernetes + Docker + Elixir - Alexei Sholik, Andrew Dryga | Elixir Club UkraineElixir Club
627 views18 slides
Integrating 3rd parties with Ecto - Eduardo Aguilera | Elixir Club Ukraine by
Integrating 3rd parties with Ecto -  Eduardo Aguilera | Elixir Club UkraineIntegrating 3rd parties with Ecto -  Eduardo Aguilera | Elixir Club Ukraine
Integrating 3rd parties with Ecto - Eduardo Aguilera | Elixir Club UkraineElixir Club
394 views38 slides
BEAM architecture handbook - Andrea Leopardi | Elixir Club Ukraine by
BEAM architecture handbook - Andrea Leopardi  | Elixir Club UkraineBEAM architecture handbook - Andrea Leopardi  | Elixir Club Ukraine
BEAM architecture handbook - Andrea Leopardi | Elixir Club UkraineElixir Club
326 views108 slides
You ain't gonna need write a GenServer - Ulisses Almeida | Elixir Club Ukraine by
You ain't gonna need write a GenServer - Ulisses Almeida  | Elixir Club UkraineYou ain't gonna need write a GenServer - Ulisses Almeida  | Elixir Club Ukraine
You ain't gonna need write a GenServer - Ulisses Almeida | Elixir Club UkraineElixir Club
561 views86 slides
Performance measurement methodology — Maksym Pugach | Elixir Evening Club 3 by
Performance measurement methodology — Maksym Pugach | Elixir Evening Club 3Performance measurement methodology — Maksym Pugach | Elixir Evening Club 3
Performance measurement methodology — Maksym Pugach | Elixir Evening Club 3Elixir Club
489 views26 slides
Erlang cluster. How is it? Production experience. — Valerii Vasylkov | Elixi... by
Erlang cluster. How is it? Production experience. —  Valerii Vasylkov | Elixi...Erlang cluster. How is it? Production experience. —  Valerii Vasylkov | Elixi...
Erlang cluster. How is it? Production experience. — Valerii Vasylkov | Elixi...Elixir Club
306 views19 slides

More from Elixir Club(20)

Kubernetes + Docker + Elixir - Alexei Sholik, Andrew Dryga | Elixir Club Ukraine by Elixir Club
Kubernetes + Docker + Elixir - Alexei Sholik, Andrew Dryga | Elixir Club UkraineKubernetes + Docker + Elixir - Alexei Sholik, Andrew Dryga | Elixir Club Ukraine
Kubernetes + Docker + Elixir - Alexei Sholik, Andrew Dryga | Elixir Club Ukraine
Elixir Club627 views
Integrating 3rd parties with Ecto - Eduardo Aguilera | Elixir Club Ukraine by Elixir Club
Integrating 3rd parties with Ecto -  Eduardo Aguilera | Elixir Club UkraineIntegrating 3rd parties with Ecto -  Eduardo Aguilera | Elixir Club Ukraine
Integrating 3rd parties with Ecto - Eduardo Aguilera | Elixir Club Ukraine
Elixir Club394 views
BEAM architecture handbook - Andrea Leopardi | Elixir Club Ukraine by Elixir Club
BEAM architecture handbook - Andrea Leopardi  | Elixir Club UkraineBEAM architecture handbook - Andrea Leopardi  | Elixir Club Ukraine
BEAM architecture handbook - Andrea Leopardi | Elixir Club Ukraine
Elixir Club326 views
You ain't gonna need write a GenServer - Ulisses Almeida | Elixir Club Ukraine by Elixir Club
You ain't gonna need write a GenServer - Ulisses Almeida  | Elixir Club UkraineYou ain't gonna need write a GenServer - Ulisses Almeida  | Elixir Club Ukraine
You ain't gonna need write a GenServer - Ulisses Almeida | Elixir Club Ukraine
Elixir Club561 views
Performance measurement methodology — Maksym Pugach | Elixir Evening Club 3 by Elixir Club
Performance measurement methodology — Maksym Pugach | Elixir Evening Club 3Performance measurement methodology — Maksym Pugach | Elixir Evening Club 3
Performance measurement methodology — Maksym Pugach | Elixir Evening Club 3
Elixir Club489 views
Erlang cluster. How is it? Production experience. — Valerii Vasylkov | Elixi... by Elixir Club
Erlang cluster. How is it? Production experience. —  Valerii Vasylkov | Elixi...Erlang cluster. How is it? Production experience. —  Valerii Vasylkov | Elixi...
Erlang cluster. How is it? Production experience. — Valerii Vasylkov | Elixi...
Elixir Club306 views
Promo Phx4RailsDevs - Volodya Sveredyuk by Elixir Club
Promo Phx4RailsDevs - Volodya SveredyukPromo Phx4RailsDevs - Volodya Sveredyuk
Promo Phx4RailsDevs - Volodya Sveredyuk
Elixir Club128 views
Web of today — Alexander Khokhlov by Elixir Club
Web of today —  Alexander KhokhlovWeb of today —  Alexander Khokhlov
Web of today — Alexander Khokhlov
Elixir Club256 views
ElixirConf Eu 2018, what was it like? – Eugene Pirogov by Elixir Club
ElixirConf Eu 2018, what was it like? – Eugene PirogovElixirConf Eu 2018, what was it like? – Eugene Pirogov
ElixirConf Eu 2018, what was it like? – Eugene Pirogov
Elixir Club275 views
Implementing GraphQL API in Elixir – Victor Deryagin by Elixir Club
Implementing GraphQL API in Elixir – Victor DeryaginImplementing GraphQL API in Elixir – Victor Deryagin
Implementing GraphQL API in Elixir – Victor Deryagin
Elixir Club983 views
WebPerformance: Why and How? – Stefan Wintermeyer by Elixir Club
WebPerformance: Why and How? – Stefan WintermeyerWebPerformance: Why and How? – Stefan Wintermeyer
WebPerformance: Why and How? – Stefan Wintermeyer
Elixir Club576 views
GenServer in Action – Yurii Bodarev by Elixir Club
GenServer in Action – Yurii Bodarev   GenServer in Action – Yurii Bodarev
GenServer in Action – Yurii Bodarev
Elixir Club624 views
Russian Doll Paradox: Elixir Web without Phoenix - Alex Rozumii by Elixir Club
Russian Doll Paradox: Elixir Web without Phoenix - Alex RozumiiRussian Doll Paradox: Elixir Web without Phoenix - Alex Rozumii
Russian Doll Paradox: Elixir Web without Phoenix - Alex Rozumii
Elixir Club139 views
Practical Fault Tolerance in Elixir - Alexei Sholik by Elixir Club
Practical Fault Tolerance in Elixir - Alexei SholikPractical Fault Tolerance in Elixir - Alexei Sholik
Practical Fault Tolerance in Elixir - Alexei Sholik
Elixir Club299 views
Phoenix and beyond: Things we do with Elixir - Alexander Khokhlov by Elixir Club
Phoenix and beyond: Things we do with Elixir - Alexander KhokhlovPhoenix and beyond: Things we do with Elixir - Alexander Khokhlov
Phoenix and beyond: Things we do with Elixir - Alexander Khokhlov
Elixir Club296 views
Monads are just monoids in the category of endofunctors - Ike Kurghinyan by Elixir Club
Monads are just monoids in the category of endofunctors - Ike KurghinyanMonads are just monoids in the category of endofunctors - Ike Kurghinyan
Monads are just monoids in the category of endofunctors - Ike Kurghinyan
Elixir Club154 views
Craft effective API with GraphQL and Absinthe - Ihor Katkov by Elixir Club
Craft effective API with GraphQL and Absinthe - Ihor KatkovCraft effective API with GraphQL and Absinthe - Ihor Katkov
Craft effective API with GraphQL and Absinthe - Ihor Katkov
Elixir Club1K views
Elixir in a service of government - Alex Troush by Elixir Club
Elixir in a service of government - Alex TroushElixir in a service of government - Alex Troush
Elixir in a service of government - Alex Troush
Elixir Club187 views
Pattern matching in Elixir by example - Alexander Khokhlov by Elixir Club
Pattern matching in Elixir by example - Alexander KhokhlovPattern matching in Elixir by example - Alexander Khokhlov
Pattern matching in Elixir by example - Alexander Khokhlov
Elixir Club315 views
Ecto and Phoenix: Doing web with Elixir - Yurii Bodarev by Elixir Club
Ecto and Phoenix: Doing web with Elixir - Yurii BodarevEcto and Phoenix: Doing web with Elixir - Yurii Bodarev
Ecto and Phoenix: Doing web with Elixir - Yurii Bodarev
Elixir Club671 views

Recently uploaded

Igniting Next Level Productivity with AI-Infused Data Integration Workflows by
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Safe Software
225 views86 slides
Business Analyst Series 2023 - Week 3 Session 5 by
Business Analyst Series 2023 -  Week 3 Session 5Business Analyst Series 2023 -  Week 3 Session 5
Business Analyst Series 2023 - Week 3 Session 5DianaGray10
209 views20 slides
Data-centric AI and the convergence of data and model engineering: opportunit... by
Data-centric AI and the convergence of data and model engineering:opportunit...Data-centric AI and the convergence of data and model engineering:opportunit...
Data-centric AI and the convergence of data and model engineering: opportunit...Paolo Missier
34 views40 slides
Attacking IoT Devices from a Web Perspective - Linux Day by
Attacking IoT Devices from a Web Perspective - Linux Day Attacking IoT Devices from a Web Perspective - Linux Day
Attacking IoT Devices from a Web Perspective - Linux Day Simone Onofri
15 views68 slides
RADIUS-Omnichannel Interaction System by
RADIUS-Omnichannel Interaction SystemRADIUS-Omnichannel Interaction System
RADIUS-Omnichannel Interaction SystemRADIUS
15 views21 slides

Recently uploaded(20)

Igniting Next Level Productivity with AI-Infused Data Integration Workflows by Safe Software
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Safe Software225 views
Business Analyst Series 2023 - Week 3 Session 5 by DianaGray10
Business Analyst Series 2023 -  Week 3 Session 5Business Analyst Series 2023 -  Week 3 Session 5
Business Analyst Series 2023 - Week 3 Session 5
DianaGray10209 views
Data-centric AI and the convergence of data and model engineering: opportunit... by Paolo Missier
Data-centric AI and the convergence of data and model engineering:opportunit...Data-centric AI and the convergence of data and model engineering:opportunit...
Data-centric AI and the convergence of data and model engineering: opportunit...
Paolo Missier34 views
Attacking IoT Devices from a Web Perspective - Linux Day by Simone Onofri
Attacking IoT Devices from a Web Perspective - Linux Day Attacking IoT Devices from a Web Perspective - Linux Day
Attacking IoT Devices from a Web Perspective - Linux Day
Simone Onofri15 views
RADIUS-Omnichannel Interaction System by RADIUS
RADIUS-Omnichannel Interaction SystemRADIUS-Omnichannel Interaction System
RADIUS-Omnichannel Interaction System
RADIUS15 views
Future of Learning - Yap Aye Wee.pdf by NUS-ISS
Future of Learning - Yap Aye Wee.pdfFuture of Learning - Yap Aye Wee.pdf
Future of Learning - Yap Aye Wee.pdf
NUS-ISS41 views
The Importance of Cybersecurity for Digital Transformation by NUS-ISS
The Importance of Cybersecurity for Digital TransformationThe Importance of Cybersecurity for Digital Transformation
The Importance of Cybersecurity for Digital Transformation
NUS-ISS27 views
Empathic Computing: Delivering the Potential of the Metaverse by Mark Billinghurst
Empathic Computing: Delivering  the Potential of the MetaverseEmpathic Computing: Delivering  the Potential of the Metaverse
Empathic Computing: Delivering the Potential of the Metaverse
Mark Billinghurst470 views
Perth MeetUp November 2023 by Michael Price
Perth MeetUp November 2023 Perth MeetUp November 2023
Perth MeetUp November 2023
Michael Price15 views
Web Dev - 1 PPT.pdf by gdsczhcet
Web Dev - 1 PPT.pdfWeb Dev - 1 PPT.pdf
Web Dev - 1 PPT.pdf
gdsczhcet55 views
Five Things You SHOULD Know About Postman by Postman
Five Things You SHOULD Know About PostmanFive Things You SHOULD Know About Postman
Five Things You SHOULD Know About Postman
Postman27 views
Understanding GenAI/LLM and What is Google Offering - Felix Goh by NUS-ISS
Understanding GenAI/LLM and What is Google Offering - Felix GohUnderstanding GenAI/LLM and What is Google Offering - Felix Goh
Understanding GenAI/LLM and What is Google Offering - Felix Goh
NUS-ISS41 views
.conf Go 2023 - How KPN drives Customer Satisfaction on IPTV by Splunk
.conf Go 2023 - How KPN drives Customer Satisfaction on IPTV.conf Go 2023 - How KPN drives Customer Satisfaction on IPTV
.conf Go 2023 - How KPN drives Customer Satisfaction on IPTV
Splunk88 views
Emerging & Future Technology - How to Prepare for the Next 10 Years of Radica... by NUS-ISS
Emerging & Future Technology - How to Prepare for the Next 10 Years of Radica...Emerging & Future Technology - How to Prepare for the Next 10 Years of Radica...
Emerging & Future Technology - How to Prepare for the Next 10 Years of Radica...
NUS-ISS16 views
Special_edition_innovator_2023.pdf by WillDavies22
Special_edition_innovator_2023.pdfSpecial_edition_innovator_2023.pdf
Special_edition_innovator_2023.pdf
WillDavies2216 views
AMAZON PRODUCT RESEARCH.pdf by JerikkLaureta
AMAZON PRODUCT RESEARCH.pdfAMAZON PRODUCT RESEARCH.pdf
AMAZON PRODUCT RESEARCH.pdf
JerikkLaureta15 views
SAP Automation Using Bar Code and FIORI.pdf by Virendra Rai, PMP
SAP Automation Using Bar Code and FIORI.pdfSAP Automation Using Bar Code and FIORI.pdf
SAP Automation Using Bar Code and FIORI.pdf

— An async template - Oleksandr Khokhlov | Elixir Club Ukraine