Functional programming, though far from new, has gained much traction recently. Functional programming characteristics have started to appear in the PHP world, too. Microframeworks including Silex and Slim, middleware architectures (Stack) and even standards (PSR-7) rely on concepts such as lambdas, referential transparency and immutability, all of which come from functional programming.
I’ll give you a crash course in Erlang, a pragmatic functional language to make you feel familiar with the functional paradigm. By comparing code samples between Erlang and PHP, you’ll find out how and why you should employ functional programming in your PHP applications. You’ll see that functional programming is nothing to be scared of. On the contrary, understanding its concepts broadens your programming horizon and provides you with valuable solutions to your problems.
scala.concurrent.Future is familiar to nearly all Scala devs.
This presentation first talks about referential transparency and the IO Monad in general. (Monix Task is an impl of the IO Monad.)
Then it compares Future Monix 3.x Task with their Pros and Cons.
Interop with Future: As Scala's Future is used in many environments and libraries, we look at the conversion from Task to Future and - vice versa - from Future to Task.
I will also take a look at Task evaluation, cancelation and memoization as well as tail recursive loops and asynchronous boundaries.
The presentation will include a comparative discussion on ExecutionContext (required for Future) and Scheduler (required for Task, but only to run it).
Often recurring on the valuable Monix Task doumentation at https://monix.io/docs/3x/eval/task.html the presentation can also be seen as an introduction to Monix Task.
Functional programming, though far from new, has gained much traction recently. Functional programming characteristics have started to appear in the PHP world, too. Microframeworks including Silex and Slim, middleware architectures (Stack) and even standards (PSR-7) rely on concepts such as lambdas, referential transparency and immutability, all of which come from functional programming.
I’ll give you a crash course in Erlang, a pragmatic functional language to make you feel familiar with the functional paradigm. By comparing code samples between Erlang and PHP, you’ll find out how and why you should employ functional programming in your PHP applications. You’ll see that functional programming is nothing to be scared of. On the contrary, understanding its concepts broadens your programming horizon and provides you with valuable solutions to your problems.
scala.concurrent.Future is familiar to nearly all Scala devs.
This presentation first talks about referential transparency and the IO Monad in general. (Monix Task is an impl of the IO Monad.)
Then it compares Future Monix 3.x Task with their Pros and Cons.
Interop with Future: As Scala's Future is used in many environments and libraries, we look at the conversion from Task to Future and - vice versa - from Future to Task.
I will also take a look at Task evaluation, cancelation and memoization as well as tail recursive loops and asynchronous boundaries.
The presentation will include a comparative discussion on ExecutionContext (required for Future) and Scheduler (required for Task, but only to run it).
Often recurring on the valuable Monix Task doumentation at https://monix.io/docs/3x/eval/task.html the presentation can also be seen as an introduction to Monix Task.
Planet-HTML5-Game-Engine is HTML5 Game Engine for Mobile Devices. This slide presents a few V8 Javascript engine specific techniques to get better performance for this game engine on mobile chrome browser.
Great Scott! C# 7 is almost out!
Time to hop into the DeLorean with Doc Brown. If my calculations are correct, when this baby hits 88 miles per hour, we'll be traveling back to the future with C# 7. Switches? Where we're going, we don't need Switches we got Pattern Matching. Just hold on for one second. Let's get this straight, in the future Tuples will be usable! This will beg the questions. Where are we? When are we? We are in the future and we now have Local Functions and Records.
You'll walk away with a sense of where C# is going and how you can learn about its new features today by looking back to the future. This is heavy.
Being functional in PHP (PHPDay Italy 2016)David de Boer
Functional programming, though far from new, has gained much traction recently. Functional programming characteristics have started to appear in the PHP world, too. Microframeworks such as Silex and Slim, middleware architectures such as Stack and even standards such as PSR-7 rely on concepts such as lambdas, referential transparency and immutability, all of which come from functional programming. I’ll give you a crash course in Erlang, a pragmatic functional language to make you feel familiar with the functional paradigm. By comparing code samples between Erlang and PHP, you’ll find out how you can employ functional programming in your PHP applications where appropriate. You’ll see that functional programming is nothing to be scared of. On the contrary, understanding its concepts broadens your programming horizon and provides you with valuable solutions to your problems.
For the past few years in the functional Scala community, the standard approach for adding features to an effect type (features like logging, stateful updates, or accessing config) has been Monad Transformers (EItherT, OptionT, WriterT, ReaderT, etc.).
While elegant and proven, monad transformers were imported directly from Haskell, and in Scala, they have poor ergonomics and poor performance. Using tagless-final on transformers can eliminate some of the boilerplate, but cannot improve performance, and tagless-final makes it insanely hard to locally introduce and eliminate features.
In this presentation, John will introduce an alternate approach he coined ‘effect rotation’, which shares most of the power of monad transformers, but with better ergonomics and no loss of performance. You will see how to use the ZIO library that John created to composably add different features into the ZIO effect type, to solve the same problems as monad transformers, but in a way that feels natural and idiomatic for Scala.
OOP and FP - Become a Better ProgrammerMario Fusco
The story of Simon, an experienced OOP Java developer, exposed to the new lambda features of JDK 8. His friend Mario, a long-bearded FP geek, will try to convince him that FP can help him develop more readable and maintainable code. A journey into the discovery of the main new feature - lambda expressions - of JDK 8
With my simple implementation I wanted to demonstrate the basic ideas of th IO Monad.
My impl of the IO Monad is just a feasibility study, not production code!
When coding my impl of IO I was very much inspired by cats.effect.IO and monix.eval.Task which I studied at that time. Both are implementions of the IO Monad.
The API of my IO is very similar to the basics of Monix Task. This IO implementation also helped me to understand the IO Monad (of cats-effect) and Monix Task.
Interop with Future is also supported. You can convert IO to a Future. Vice versa you can convert a Future to an IO.
The development of my impl can be followed step by step in the code files in package iomonad.
Kotlin provides a lot of features out of the box even though those are not supported by JVM. Have you ever wondered how Kotlin does it? If yes, then this presentation is for you.
Kotlin compiler tweaks our code in such a way that, JVM can execute it. this deck goes through lots of Kotlin features and explains how it looks at runtime for JVM compatibility. Of course we are not going to look into bytecode, instead we will look into the decompiled version of the bytecode generated by Kotlin compiler.
NOTE: This was presented at DevFest Kolkata 2019.
ZIO: Powerful and Principled Functional Programming in ScalaWiem Zine Elabidine
This is an introduction of purely functional programming type safe abstractions that provide a variety of features for building asynchronous and concurrent applications data structures built on ZIO.
You'll learn by examples about the power of functional programming to solve the hard problems of software development in a principled, without compromises.
Planet-HTML5-Game-Engine is HTML5 Game Engine for Mobile Devices. This slide presents a few V8 Javascript engine specific techniques to get better performance for this game engine on mobile chrome browser.
Great Scott! C# 7 is almost out!
Time to hop into the DeLorean with Doc Brown. If my calculations are correct, when this baby hits 88 miles per hour, we'll be traveling back to the future with C# 7. Switches? Where we're going, we don't need Switches we got Pattern Matching. Just hold on for one second. Let's get this straight, in the future Tuples will be usable! This will beg the questions. Where are we? When are we? We are in the future and we now have Local Functions and Records.
You'll walk away with a sense of where C# is going and how you can learn about its new features today by looking back to the future. This is heavy.
Being functional in PHP (PHPDay Italy 2016)David de Boer
Functional programming, though far from new, has gained much traction recently. Functional programming characteristics have started to appear in the PHP world, too. Microframeworks such as Silex and Slim, middleware architectures such as Stack and even standards such as PSR-7 rely on concepts such as lambdas, referential transparency and immutability, all of which come from functional programming. I’ll give you a crash course in Erlang, a pragmatic functional language to make you feel familiar with the functional paradigm. By comparing code samples between Erlang and PHP, you’ll find out how you can employ functional programming in your PHP applications where appropriate. You’ll see that functional programming is nothing to be scared of. On the contrary, understanding its concepts broadens your programming horizon and provides you with valuable solutions to your problems.
For the past few years in the functional Scala community, the standard approach for adding features to an effect type (features like logging, stateful updates, or accessing config) has been Monad Transformers (EItherT, OptionT, WriterT, ReaderT, etc.).
While elegant and proven, monad transformers were imported directly from Haskell, and in Scala, they have poor ergonomics and poor performance. Using tagless-final on transformers can eliminate some of the boilerplate, but cannot improve performance, and tagless-final makes it insanely hard to locally introduce and eliminate features.
In this presentation, John will introduce an alternate approach he coined ‘effect rotation’, which shares most of the power of monad transformers, but with better ergonomics and no loss of performance. You will see how to use the ZIO library that John created to composably add different features into the ZIO effect type, to solve the same problems as monad transformers, but in a way that feels natural and idiomatic for Scala.
OOP and FP - Become a Better ProgrammerMario Fusco
The story of Simon, an experienced OOP Java developer, exposed to the new lambda features of JDK 8. His friend Mario, a long-bearded FP geek, will try to convince him that FP can help him develop more readable and maintainable code. A journey into the discovery of the main new feature - lambda expressions - of JDK 8
With my simple implementation I wanted to demonstrate the basic ideas of th IO Monad.
My impl of the IO Monad is just a feasibility study, not production code!
When coding my impl of IO I was very much inspired by cats.effect.IO and monix.eval.Task which I studied at that time. Both are implementions of the IO Monad.
The API of my IO is very similar to the basics of Monix Task. This IO implementation also helped me to understand the IO Monad (of cats-effect) and Monix Task.
Interop with Future is also supported. You can convert IO to a Future. Vice versa you can convert a Future to an IO.
The development of my impl can be followed step by step in the code files in package iomonad.
Kotlin provides a lot of features out of the box even though those are not supported by JVM. Have you ever wondered how Kotlin does it? If yes, then this presentation is for you.
Kotlin compiler tweaks our code in such a way that, JVM can execute it. this deck goes through lots of Kotlin features and explains how it looks at runtime for JVM compatibility. Of course we are not going to look into bytecode, instead we will look into the decompiled version of the bytecode generated by Kotlin compiler.
NOTE: This was presented at DevFest Kolkata 2019.
ZIO: Powerful and Principled Functional Programming in ScalaWiem Zine Elabidine
This is an introduction of purely functional programming type safe abstractions that provide a variety of features for building asynchronous and concurrent applications data structures built on ZIO.
You'll learn by examples about the power of functional programming to solve the hard problems of software development in a principled, without compromises.
Python is a high level language focused on readability. The Python community developed the concept of "Pythonic Code", requiring not only semantic correctness, but also conformity to universally acknowledged stylistic criteria.
A pre-requisite to write pythonic code is to write idiomatic code. Using the right idioms is a matter of acquired taste and experience, however, some idioms are quite easy to learn.
This presentation focuses on some of these idioms and other stylistic criteria:
* for vs. while
* iterators, itertools
* code conventions (space invaders)
* avoid default values bugs
* first order functions
* internal/external iterators
* substituting the switch statement
* properties, attributes, read only objects
* named tuples
* duck typings
* bits of metaprogramming
* exception management: LBYL vs. EAFP
From Java to Scala - advantages and possible risksSeniorDevOnly
Oleksii Petinov during his presentation gave the audience the overview of his vision of Scala pros and contras. In his vision Scala smoothly integrates features of object-oriented and functional languages, enabling Java and other programmers to be more productive.
There is admittedly some truth to the statement that “Scala is complex”, but the learning curve is well worth the investment.
This is the slide for what I shared in JS Group meetup, 2014, Taiwan. It covers what JavaScript could do for making the program more "functional", the benefits, price and the limitation.
After 10 years of Object Orientated Java, 2 years of Functional Programming in Scala was enough to convince me that I could never switch back. But why? The answer is simple: Functional Scala lets you think less. It reduces the number of moving parts you need to hold in your head, lets you stay focussed and saves your mental stack from overflowing.
In this talk I'll show you how to stop treating Scala as a better Java and start exploring the world of Functional Programming. I'll use code examples to demonstrate a four step path that'll let you ease yourself into the world of Functional Programming while continuing to deliver production quality code.
With each step we'll learn a new technique, and understand how it leaves you with less to think about: Hopefully this talk will convince you that Functional Scala leads to code that's easier to hold in your head, and leave you excited about learning a new paradigm.
Clojure is a new dialect of LISP that runs on the Java Virtual Machine (JVM). As a functional language, it offers great benefits in terms of programmer productivity; as a language that runs on the JVM, it also offers the opportunity to reuse existing Java libraries. Simon’s interest is in using Clojure to build desktop applications with the Java Swing GUI library. In this presentation Simon discusses how the power of Clojure can be applied to Swing, and whether it hits the sweet spot.
Functional Programming You Already KnowKevlin Henney
Presented at NDC 2013 in Oslo (13th June 2013)
Video available on Vimeo: https://vimeo.com/68327245
From JVM to .NET languages, from minor coding idioms to system-level architectures, functional programming is enjoying a long overdue surge in interest. Functional programming is certainly not a new idea and, although not apparently as mainstream as object-oriented and procedural programming, many of its concepts are also more familiar than many programmers believe.
This talk examines functional and declarative programming styles from the point of view of coding patterns, little languages and programming techniques already familiar to many programmers.
GAFAnomics Tesla Volume 2 - Is Tesla the disruptor we need?Fabernovel
Valued at 210 billion dollars, that is to say the valuations of Ford, GM, Draimler, PSA and Uber combined, Tesla, the leading company in electric car sales, recently became the world's leading manufacturer ahead of Toyota. It is because the company has succeeded in breaking the codes of a century-old industry, symbol of the industrial model of the 20th century, that Tesla deserves its place at the top of the list of the most disruptive companies. Fabernovel presents its new study "Is Tesla the disruptor we need? which reveals the secrets of its success but also provides thought on the future of mobility, which the company has not disrupted to date.
Lancement de ReCOVery - Sortie de crise - Les nouveaux raisonnablesFabernovel
La crise que le monde traverse atteint individus et acteurs économiques avec une puissance inédite et nécessite de repenser en profondeur nos modèles de développement, sur la base de solutions véritablement actionnables.
Plusieurs entreprises et associations d’entreprises s’unissent donc pour lancer reCOVery, une initiative collaborative visant à faire redémarrer l’économie selon un modèle plus durable, plus juste et plus résilient. Voici la présentation donnée lors de lancement de cette plateforme pour échanger sur une mutation appelée de toutes parts, et redémarrer en mettant en œuvre la transformation vers les "nouveaux raisonnables".
We are pleased to release the second volume of our new KPIs report series. This study is dedicated to the new value creation levers in the digital era and in particular on the talent pillar: why it is a critical asset, how to monitor it, assess it and optimize valuation.
This comes jointly with an index to assess one’s company maturity on talent capital.
If you want to get a full version or have any question about this study, please email us: kpi@fabernovel.com.
You can find our first study Customer KPIs here : https://www.slideshare.net/faberNovel/fabernovel-study-new-economy-new-kpi-the-customer-era
Fabernovel analyse les tendances publicitaires du super bowl de 2020Fabernovel
Aux États-Unis le Super Bowl est le plus grand événement sportif de l’année, suivi par près d'un américain sur trois. La compétition n'y est pas seulement sportive, elle est également publicitaire. À 5,6 millions de dollars les 30 secondes d'antenne, les marques ne regardent pas à la dépense et font de leur campagne de véritables spectacles. Si bien que pour 23% des américains, les publicités sont devenues la partie la plus importante du Super Bowl, contre 35% pour le jeu et 9% pour le show de mi-temps. Cette 54ème édition n'a pas dérogé à la règle !
Alors, pourquoi tant d’engouement autour des campagnes publicitaires du Super Bowl ?
Et quelles sont les tendances 2020 ?
À découvrir dans notre analyse.
Amazon: friend or foe?
This presentation looks at the ways to work with Amazon, its opportunities and threats for brands and the winning distribution strategies for you.
Fabernovel is pleased to release this new edition of “Gafanomics Quarterly”, our publication which offers you every quarter a transversal review of the earnings releases and strategic announcements of the disruptive Tech giants.
This last quarter was somewhat special in our view, ushering in new times at several levels : a new fiscal year, a new decade and the accelerating change towards new value patterns.
After a challenging Q3, the Tech segment outperformed all other sectors on the Street with an impressive cumulated market cap gain of more than $1,300bn for our sample of 20 firms (i.e. the equivalent of Microsoft market value or the annual GDP of Spain). This was underpinned by the robust quarterly delivery of most of the Tech leaders with a value pattern still favouring user and top-line growth pattern compared to margin expansion. Our sample of Tech disruptors posted a median revenue growth of 23% and 17% EBIT growth in Q4 19, with very similar figures for FY19.
Is this outperformance set to last?
Beyond their economic power, the Tech leaders face several challenges. Facing rising maturity and competition, they are increasingly criticized on their dark side and their Achilles heel: Corporate and Social Responsibility. Several of them recorded in the last months the departures of their founders (Travis Kalanick at Uber, Jack Ma from Alibaba, Larry Page and Sergey Brin at Google, Adam Neumann at WeWork). Softbank has seen the arrival of activist investors in their capital.
The Green tide was the most striking new theme emerging from Q4 releases. Many tech players (Microsoft, Amazon, …) have started to communicate on the environmental impact. Greenwashing or strategic reality? Probably both. But we hope that the latter will prevail! Given their deep pockets, innovation culture and infrastructure power, Tech giants are probably among the few Corporates that can save the planet. The Coronavirus crisis has shown that software can help adapt in critical situation with new practices (more remote work) that can reduce carbon emissions.
In a new world where transparency and responsibility will increasingly drive valuation, we are convinced that this Green horizon can be a structuring value path for GAFAM & Co but also an area where they can join forces with other Corporates.
Kereitsu of modern times, Softbank has pioneered with its Vision Fund an Innovation at scale strategy powered by an agressive venture investments. It has thus opened an alternative way to GAFAM’s model that relied primarily on an organic technology model amplified by some bolt-on M&A.
SoftBank’s transformation case is in our view particularly interesting at a time when the European startups and innovation ecosystems need to catch-up with their American and Asian and many Corporates are entering in « coopetition » with Investment funds, launching or reinventing their ventures set-up in order to address their innovation at scale challenge.
For sure, like all disruptors Softbank has been somewhat extreme in its approach (especially in terms of risk aversion, fundraising, inflationary valuation) and not always exemplary in its practices (CSR, governance, financial disclosure...). Nevertheless we are witnessing some interesting read-across for European players, especially as vision, risk taking and entrepreneurial approaches are in our view critical success factors in the new economy.
Thus one of our wishes for 2020 is that some European Softbank may emerge and create a new way for innovation at scale.
Retail Apocalypse. Voilà comment Business Insider qualifiait il y a quelques semaines la situation actuelle (et future ?) du retail. Et à raison : aux US plus de 8600 magasins physiques doivent fermer en 2019. La France n’est pas épargnée - en témoignent les fermetures de huit enseignes Gap et plus de 30 Conforama cet été, pour n'en citer que quelques unes.
Dans le même temps, les Digitally Native Vertical Brands - ces ovnis du e-commerce devenus leaders aussi inspirants qu’anxiogènes - envahissent les rues. Littéralement : sur les 84 DNVB à fort potentiel identifiées en 2016 par Andy Dunn dans son article phare, 44 comptent désormais au moins un magasin physique. Ici aussi : difficile de se balader dans Paris aujourd’hui sans passer devant une boutique Sezane, Le Slip Français ou Jimmy Fairly.
Pour passer à l'échelle, il semblerait que les DNVB doivent faire tomber le “D”. “Halo effect” disent les Américains pour décrire ce phénomène qui consiste à ouvrir une boutique physique pour considérablement augmenter les ventes online. Mais alors...
Entre apocalypse et terre promise, à quoi ressemble vraiment le retail de demain ?
Quel modèle, quels KPIs et quelles conditions pour émerger ?
Présentée lors du MobileOne 2019 par Benoît AUDOUARD, responsable projet myCANAL chez Canal+ et Julie ROLLIN-MOUSTÉOU, Senior Product Manager chez Fabernovel.
Fabernovel is pleased to share this playbook reviewing various offerings of
WeChat advertising and the possibilities for brands to reach and engage the tech
savvy consumers.
Since the inception of WeChat, Tencent has been very cautious about introducing
promotional messages on its platform. The Super APP is envisioned more as a
productive toolkit for the users' daily life than a source of media revenue stream itself.
On contrary to 1 ad for every 10 posts on Facebook, the Shenzhen tech giant makes
sure its users exposed to maximum 2 ads per day.
That being said, WeChat advertising offerings have become so comprehensive and
impactful to capture the attention of Chinese consumers from both home and
abroad. To build successful WeChat strategies, it is now crucial for business to master
these various ad formats, ad touch points, ad features, bidding tactics and audience
targeting possibilities.
Let’s discover more with this playbook!
[Extract] Study The We Company: is real estate a disruptable industry?Fabernovel
A lot has been said about WeWork, whether it is about its controversial CEO, its delusional valuation, its abyssal losses, its obscure governance or its esoteric motto. But, as analysts passionated by new models and disruption players, we could not stay away from the debate surrunding the one startup that has shaken the real estate market.
Our study does not predict whether Wework will become public, or whether it will actually survive. But, it aims at describing how WeWork has made coworking a thing, which lessons should be drawn from its model (whether considered tech or not tech) , and which possible future can be imagined for the industry.
Insight Report by Fabernovel - The Hidden consumption force of Overseas Chine...Fabernovel
Fabernovel, the global innovation agency operating in Europe, US and China, is pleased to share its latest in-depth study analyzing Overseas Chinese Residents, “The hidden consumption force”.
Study Ardian & Fabernovel - The Augmented Infrastructure: Digital for climate?Fabernovel
Foreword:
2020 is tomorrow. Once a synonym for “future”,
this key date is a symbol for new dawn where
the issue of long term value can not be but linked
to digital sobriety and technological responsibility.
At Fabernovel, that is why when working on transformation projects, services design or engineering, we follow a triple approach: entrepreneurial, digital but first and foremost responsible.
I am convinced that this approach can be applied
to infrastructures. Regarding carbon impact issue, beyond mitigation measures and energy recycling,
we need to act upstream by rethinking the way we design services and technology.
Innovation more than ever, has to be thought in a global ecosystem perspective to prevent drifts and limit impact.
Let’s build this inclusive future together.
Stéphane Distinguin, CEO & Co-founder at Fabernovel
Services urbains : faut il vraiment penser utilisateur ?Fabernovel
Ils investissent l'espace, orchestrent les flux, bouleversent les usages et uniformisent nos villes : les géants du numérique saisissent l'espace urbain et nous forcent à requestionner notre façon de concevoir les services urbains.
A quoi doit ressembler une ville à l'ère du numérique ?
Peut-on vraiment "penser utilisateur" dans un contexte urbain ?
Comment réconcilier besoins individuels et communautaires ?
Nous sommes convaincus que c'est par le design que nous répondrons à ces nouveaux enjeux.
Pour échanger avec nous sur ces questions essentielles, nous avons eu le plaisir de recevoir Agnes Kwek, ambassadrice Design pour la ville de Singapour et Dominique Sciamma, Directeur et Doyen de Strate Ecole de Design et Président de l'APCI.
Découvrez dans cette keynote les nouveaux paradigmes de la Ville moderne, et contactez-nous pour échanger davantage sur ce sujet passionnant !
[Fabernovel study] New economy, new KPI: the customer eraFabernovel
By creating some disruption in value chains and favouring the emergence of new models, the digital revolution has induced deep changes in the way value is created and shared. It is more and more decorrelated from short term financial performance. That should push organizations and investors to review their monitoring and valuation of innovative projects, as well as pay attention to the value of some intangible assets, such as customer capital, talent capital, ecosystem, software or societal and environmental impact.
Customer centricity was at the heart of the digital revolution, which explains why among these assets, customer capital is the easiest to value by investors. However, if we’ve focused our analysis in this presentation on this asset, this should not overshadow the other key levers that organizations need now for their transformation to be more and more systemic.
Digital native economic models have been built by design according to an extra-financial approach with monitoring and communication already focused on customer KPIs, and sometimes on talent or ecosystem metrics. By contrast, if players other than digital natives have initiated a deep transformation of their model, they have not yet adapted their reporting styles, even though this would enable them to better allocate resources and value the customer acquisition strategy.
Combined with this document, we are launching a new index dedicated to testing your own maturity regarding customer capital (how you’ve integrated this approach, how customer-centric your reporting is, how you use it). Once this assessment has been completed, this presentation will help drive you along the path towards a new reporting approach. Additionally, it will help you harness your organization's potential, which we've identified at both the internal and external levels, while focusing on stakeholder engagement and value creation levers.
Gafanomics - The Quarterly - Episode 2 (Q2FY19)Fabernovel
Financial analysis of some of the most disruptive Tech companies in the world. This document aims to provide you with some major insights concerning the financial markets and the most disruptive innovations for the second quarter of the financial year 2019.
The Future of Corporate Learning: from Training to Learning ExperienceFabernovel
With innovation cycles becoming ever shorter, companies are faced with a new challenge: keeping their key skills up to date in real time. This strategic dimension of ‘workforce planning’ cannot rely solely on recruitment; existing employees must be able to continuously learn new things. As such, the number one skill companies now look for is the capacity to learn, and companies are particularly looking for ‘learning animals’, a term coined by Google.
To download the full report: http://eepurl.com/guJvA5
Gafanomics - The Quarterly - Episode 1 (Q1FY19)Fabernovel
Financial analysis of some of the most disruptive Tech companies in the world. This document aims to provide you with some major insights concerning the financial markets and the most disruptive innovations for the first quarter of the financial year 2019.
Vers une nouvelle ère de vos expériencesFabernovel
L’exposition Vasarely en cours actuellement au Centre Pompidou à Paris nous le rappelle : l’art est aussi affaire de méthode, de système, de programme. L’oeuvre de l’artiste hongrois-français ne doit rien au hasard : dès sa première période artistique, il met au point un alphabet plastique, lui permettant des combinaisons infinies de couleurs et de formes - garantissant une harmonie entre toutes ses créations, tout en rendant possible leur “industrialisation”. Digression ? Non, car les enjeux du design d’expérience aujourd’hui sont précisément ceux-là.
Cinquante-neuf ans après “Alphabet VR”, ce sont les expériences qui doivent passer à l’échelle. Et c’est exactement le propos du design system : une sorte de “toolbox” digitale à destination des designers, mais aussi des développeurs, chefs de projets et quiconque serait engagé de près ou de loin dans la conception d’une nouvelle expérience. Fini de bricoler des bouts d’expérience par-ci, par-là : le design system permet d’assurer la cohérence et l’harmonie sur tous les pans d’expérience d’une marque. Un outil plus qu’essentiel à l’ère de l’expérience.
In this study Gafanomics by Fabernovel, you’ll discover what is, to us – FABERNOVEL is among Slack’s early adopters, using it since 2014 –, Slack’s secret sauce and what makes it so special.
Slack is surely an incredible company with tremendous growth perspectives. But what does it mean in terms of work ideology? How can a single application transform culture, work relationships and, ultimately, entire organizations?
There is a (work) life before Slack... and another one after it: let’s see how Slack has impacted the corporate world.
In his public lecture, Christian Timmerer provides insights into the fascinating history of video streaming, starting from its humble beginnings before YouTube to the groundbreaking technologies that now dominate platforms like Netflix and ORF ON. Timmerer also presents provocative contributions of his own that have significantly influenced the industry. He concludes by looking at future challenges and invites the audience to join in a discussion.
Securing your Kubernetes cluster_ a step-by-step guide to success !KatiaHIMEUR1
Today, after several years of existence, an extremely active community and an ultra-dynamic ecosystem, Kubernetes has established itself as the de facto standard in container orchestration. Thanks to a wide range of managed services, it has never been so easy to set up a ready-to-use Kubernetes cluster.
However, this ease of use means that the subject of security in Kubernetes is often left for later, or even neglected. This exposes companies to significant risks.
In this talk, I'll show you step-by-step how to secure your Kubernetes cluster for greater peace of mind and reliability.
A tale of scale & speed: How the US Navy is enabling software delivery from l...sonjaschweigert1
Rapid and secure feature delivery is a goal across every application team and every branch of the DoD. The Navy’s DevSecOps platform, Party Barge, has achieved:
- Reduction in onboarding time from 5 weeks to 1 day
- Improved developer experience and productivity through actionable findings and reduction of false positives
- Maintenance of superior security standards and inherent policy enforcement with Authorization to Operate (ATO)
Development teams can ship efficiently and ensure applications are cyber ready for Navy Authorizing Officials (AOs). In this webinar, Sigma Defense and Anchore will give attendees a look behind the scenes and demo secure pipeline automation and security artifacts that speed up application ATO and time to production.
We will cover:
- How to remove silos in DevSecOps
- How to build efficient development pipeline roles and component templates
- How to deliver security artifacts that matter for ATO’s (SBOMs, vulnerability reports, and policy evidence)
- How to streamline operations with automated policy checks on container images
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
State of ICS and IoT Cyber Threat Landscape Report 2024 previewPrayukth K V
The IoT and OT threat landscape report has been prepared by the Threat Research Team at Sectrio using data from Sectrio, cyber threat intelligence farming facilities spread across over 85 cities around the world. In addition, Sectrio also runs AI-based advanced threat and payload engagement facilities that serve as sinks to attract and engage sophisticated threat actors, and newer malware including new variants and latent threats that are at an earlier stage of development.
The latest edition of the OT/ICS and IoT security Threat Landscape Report 2024 also covers:
State of global ICS asset and network exposure
Sectoral targets and attacks as well as the cost of ransom
Global APT activity, AI usage, actor and tactic profiles, and implications
Rise in volumes of AI-powered cyberattacks
Major cyber events in 2024
Malware and malicious payload trends
Cyberattack types and targets
Vulnerability exploit attempts on CVEs
Attacks on counties – USA
Expansion of bot farms – how, where, and why
In-depth analysis of the cyber threat landscape across North America, South America, Europe, APAC, and the Middle East
Why are attacks on smart factories rising?
Cyber risk predictions
Axis of attacks – Europe
Systemic attacks in the Middle East
Download the full report from here:
https://sectrio.com/resources/ot-threat-landscape-reports/sectrio-releases-ot-ics-and-iot-security-threat-landscape-report-2024/
Unlocking Productivity: Leveraging the Potential of Copilot in Microsoft 365, a presentation by Christoforos Vlachos, Senior Solutions Manager – Modern Workplace, Uni Systems
Dr. Sean Tan, Head of Data Science, Changi Airport Group
Discover how Changi Airport Group (CAG) leverages graph technologies and generative AI to revolutionize their search capabilities. This session delves into the unique search needs of CAG’s diverse passengers and customers, showcasing how graph data structures enhance the accuracy and relevance of AI-generated search results, mitigating the risk of “hallucinations” and improving the overall customer journey.
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...James Anderson
Effective Application Security in Software Delivery lifecycle using Deployment Firewall and DBOM
The modern software delivery process (or the CI/CD process) includes many tools, distributed teams, open-source code, and cloud platforms. Constant focus on speed to release software to market, along with the traditional slow and manual security checks has caused gaps in continuous security as an important piece in the software supply chain. Today organizations feel more susceptible to external and internal cyber threats due to the vast attack surface in their applications supply chain and the lack of end-to-end governance and risk management.
The software team must secure its software delivery process to avoid vulnerability and security breaches. This needs to be achieved with existing tool chains and without extensive rework of the delivery processes. This talk will present strategies and techniques for providing visibility into the true risk of the existing vulnerabilities, preventing the introduction of security issues in the software, resolving vulnerabilities in production environments quickly, and capturing the deployment bill of materials (DBOM).
Speakers:
Bob Boule
Robert Boule is a technology enthusiast with PASSION for technology and making things work along with a knack for helping others understand how things work. He comes with around 20 years of solution engineering experience in application security, software continuous delivery, and SaaS platforms. He is known for his dynamic presentations in CI/CD and application security integrated in software delivery lifecycle.
Gopinath Rebala
Gopinath Rebala is the CTO of OpsMx, where he has overall responsibility for the machine learning and data processing architectures for Secure Software Delivery. Gopi also has a strong connection with our customers, leading design and architecture for strategic implementations. Gopi is a frequent speaker and well-known leader in continuous delivery and integrating security into software delivery.
Essentials of Automations: The Art of Triggers and Actions in FMESafe Software
In this second installment of our Essentials of Automations webinar series, we’ll explore the landscape of triggers and actions, guiding you through the nuances of authoring and adapting workspaces for seamless automations. Gain an understanding of the full spectrum of triggers and actions available in FME, empowering you to enhance your workspaces for efficient automation.
We’ll kick things off by showcasing the most commonly used event-based triggers, introducing you to various automation workflows like manual triggers, schedules, directory watchers, and more. Plus, see how these elements play out in real scenarios.
Whether you’re tweaking your current setup or building from the ground up, this session will arm you with the tools and insights needed to transform your FME usage into a powerhouse of productivity. Join us to discover effective strategies that simplify complex processes, enhancing your productivity and transforming your data management practices with FME. Let’s turn complexity into clarity and make your workspaces work wonders!
Climate Impact of Software Testing at Nordic Testing DaysKari Kakkonen
My slides at Nordic Testing Days 6.6.2024
Climate impact / sustainability of software testing discussed on the talk. ICT and testing must carry their part of global responsibility to help with the climat warming. We can minimize the carbon footprint but we can also have a carbon handprint, a positive impact on the climate. Quality characteristics can be added with sustainability, and then measured continuously. Test environments can be used less, and in smaller scale and on demand. Test techniques can be used in optimizing or minimizing number of tests. Test automation can be used to speed up testing.
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
PHP Frameworks: I want to break free (IPC Berlin 2024)Ralf Eggert
In this presentation, we examine the challenges and limitations of relying too heavily on PHP frameworks in web development. We discuss the history of PHP and its frameworks to understand how this dependence has evolved. The focus will be on providing concrete tips and strategies to reduce reliance on these frameworks, based on real-world examples and practical considerations. The goal is to equip developers with the skills and knowledge to create more flexible and future-proof web applications. We'll explore the importance of maintaining autonomy in a rapidly changing tech landscape and how to make informed decisions in PHP development.
This talk is aimed at encouraging a more independent approach to using PHP frameworks, moving towards a more flexible and future-proof approach to PHP development.
9. CONTEXT: TECH STACKCONTEXT: TECH STACK
Technologies we commonly use:
Play (web)
Anorm (persistence)
Relational database (PostgreSQL)
4
10. FOCUSING ON ANORMFOCUSING ON ANORM
How to use it (from of cial documentation)
import anorm._
def one(implicit c: java.sql.Connection): Int = {
val query: SimpleSql = SQL("select 1 as res")
query.as(SqlParser.int("res").single)
}
5
13. OUR AIMOUR AIM
What could be improved ?
Not blocking the current thread
Representing effect as type (DB read is a side-effect)
6
14. OUR AIMOUR AIM
What could be improved ?
Not blocking the current thread
Representing effect as type (DB read is a side-effect)
Doesn't compose
6
15. OUR AIMOUR AIM
What could be improved ?
Not blocking the current thread
Representing effect as type (DB read is a side-effect)
Doesn't compose
Purity (Referential Transparency + no side-effects)
6
17. An expression is called referentially transparent if it
can be replaced with its corresponding value
without changing the program's behavior.
8 . 1
19. REFERENTIAL TRANSPARENCYREFERENTIAL TRANSPARENCY
BACK TO ANORM EXAMPLEBACK TO ANORM EXAMPLE
is NOT equivalent to:
Because the database will not be called
implicit val c: Connection = ...
def one(implicit c: Connection): Int = {
val query: SimpleQuery = SQL("select 1 as res")
query.as(SqlParser.str("res").single)
}
val res = one
// console:> res: Int = 1
val res = 1 // Replacing one by its value
// console:> res: Int = 1
8 . 3
23. PRINCIPLESPRINCIPLES
Functional principles to rely on:
separating representation from interpretation
case class Plus(x: Int, y: Int)
def run(op: Plus): Int = op.x + op.y
val op = Plus(1, 2)
// console:> op: Plus = Plus(1,2)
run(op)
// console:> res0: Int = 3
11 . 2
24. PRINCIPLESPRINCIPLES
Functional principles to rely on:
separating representation from their interpretation
composition
// Composition with For-comprehensions (ie monadic)
val zipped = for {
x <- List(1, 2, 3)
y <- List("a", "b", "c")
} yield (x, y)
// console:> zipped: List[Int] = List((1, "a"), (2, "b"), (3, "c"))
11 . 3
25. PRINCIPLESPRINCIPLES
Functional principles to rely on:
separating representation from interpretation
composition
lazy evaluation
val stream = 100 #:: 200 #:: 85 #:: Stream.empty
val doubledStream = stream.map(_ * 2) // do nothing
doubledStream.print()
// console:> 200, 400, 170, empty
11 . 4
27. THE PURPOSETHE PURPOSE
Solution: Using a lazy representational structure which compose (F)
case class User(id: Int, name: String, age: Int)
def readUser(id: Int): F[User]
def updateUser(user: User): F[Unit]
// Composing DB atomic operations into a single one
def changeUserName(id: Int, newName: String): F[Unit] =
for {
user <- readUser(id)
newUser = user.copy(name = newName)
result <- updateUser(newUser)
} yield result
12 . 1
29. THE PURPOSETHE PURPOSE
Lazy representational structure => interpreter needed
val op = changeUserName(1, "John Doe")
val result: Future[Unit] = interpreter.run(op)
12 . 2
30. THE PURPOSETHE PURPOSE
Lazy representational structure => interpreter needed
Interpretation process:
val op = changeUserName(1, "John Doe")
val result: Future[Unit] = interpreter.run(op)
12 . 2
31. THE PURPOSETHE PURPOSE
Lazy representational structure => interpreter needed
Interpretation process:
1. Provide context
val op = changeUserName(1, "John Doe")
val result: Future[Unit] = interpreter.run(op)
12 . 2
32. THE PURPOSETHE PURPOSE
Lazy representational structure => interpreter needed
Interpretation process:
1. Provide context
2. Execute our operation (within our effect)
val op = changeUserName(1, "John Doe")
val result: Future[Unit] = interpreter.run(op)
12 . 2
33. THE PURPOSETHE PURPOSE
Lazy representational structure => interpreter needed
Interpretation process:
1. Provide context
2. Execute our operation (within our effect)
3. Translate it into another effect (F -> Future)
val op = changeUserName(1, "John Doe")
val result: Future[Unit] = interpreter.run(op)
12 . 2
34. SHAPING OUR SOLUTIONSHAPING OUR SOLUTION
import anorm.SimpleSql
def readUser(id: Int)(implicit c: Connection): SimpleSql[User] =
SQL(s"select * from user where id = $id")
def updateUser(user: User)(implicit c: Connection): SimpleSql[Unit] =
SQL(s"update user set ...")
// NO: doesn't compose
// def changeUserName(id: Int, newName: String): SimpleSql[Unit] = for {
// user <- readUser(id)
// newUser = user.copy(name = newUser)
// result <- updateUser(user)
// } yield result
13 . 1
35. SHAPING OUR SOLUTIONSHAPING OUR SOLUTION
def readUser(id: Int): Future[User] =
Future(SQL(s"select * from user where id = $id").as(...))
def updateUser(user: User): Future[Unit] =
Future(SQL(s"update user set ...").execute())
// commit when ???
def changeUserName(id:Int, newName:String)(implicit c:Connection): Future[Unit] =
for {
user <- readUser(id)
newUser = user.copy(name = newName)
result <- updateUser(newUser)
} yield result
13 . 2
36. SHAPING OUR SOLUTIONSHAPING OUR SOLUTION
Desiging our lazy representational structure which compose:
import java.sql.Connection
case class Query[A](f: Connection => A) {
def map[B](f: A => B): Query[B]
def flatMap[B](f: A => Query[B]): Query[B]
}
13 . 3
37. SHAPING OUR SOLUTIONSHAPING OUR SOLUTION
How could we use it ?
def one: Query[Int] = Query { implicit c =>
SQL("Select 1 as one").as(SqlParser.str("one").single)
}
13 . 4
38. ABOUT THE PRINCIPLESABOUT THE PRINCIPLES
Real word example (create a user's bank account):
case class User(id: String, name: String)
case class Account(id: String, userId: String, balance: BigDecimal)
def createUser(user: User): Query[Unit] = ???
def createAccount(account: Account, userId: String): Query[Unit] = ???
def createUserWithAccount(user: User, account: Account): Query[Unit] =
for { // composing operations
_ <- createUser(user)
_ <- createAccount(account, user.id)
} yield () // transactional
val op: Query[Unit] =
createUserWithAccount(User("1", "John Doe"), Account("a1", "1", 100))
// Query[Unit] => lazy => purity !!!
14 . 1
39. ABOUT THE PRINCIPLESABOUT THE PRINCIPLES
Real word example (create a user's bank account):
val runner = ???
runner(op) // we run the operations (caution: side-effect)
// Do it at end of your program
// Could not compose anymore
14 . 2
45. INTRODUCING READERINTRODUCING READER
Reader: monad which pass along a context
From signature: a wrapper over a function (of 1 arg)
map == function composition (g andThen f)
class Reader[-A, +B](f: A => B)
18 . 1
46. INTRODUCING READERINTRODUCING READER
Reader: monad which pass along a context
From signature: a wrapper over a function (of 1 arg)
map == function composition (g andThen f)
atMap == function composition with wrapping / unwrapping
class Reader[-A, +B](f: A => B)
18 . 1
47. INTRODUCING READERINTRODUCING READER
Implementation could be easily derived:
case class Reader[-A, +B](f: A => B) {
def map[C](g: B => C): Reader[A, C] =
Reader(g compose f) // function composition
def flatMap[C](g: B => Reader[A, C]): Reader[A, C] =
Reader(a => g(f(a)).f(a)) // composition & unwrapping
}
object Reader {
def pure[C, A](a: A): Reader[C, A] = Reader(_ => a)
// Get only the context
def ask[A]: Reader[A, A] = Reader(identity)
}
18 . 2
48. DEDUCING IMPLEMENTATIONDEDUCING IMPLEMENTATION
Query could be implemented in term of Reader:
type Query[A] = Reader[Connection, A]
object Query {
def pure[A](a: A) = Reader.pure[Connection, A](a)
def apply[A](f: Connection => A) = new Query(f)
}
19
49. HANDLING MONAD STACKHANDLING MONAD STACK
Recurrent problem with monad:
Query == Reader
How to flatMap over Reader stack ?
def divideBy2(x: Int): Query[Option[Int]]
def divideBy3(x: Int): Query[Option[Int]]
// Query is monad, Option is a monad
// but Query[Option[_]] is not
// how to compose Query[Option[_]] without nesting ?
def divideBy6(x: Int): Query[Option[Int]] = for {
y <- divideBy2(x)
z <- divideBy3(y) // DOES NOT COMPILE: divideBy3 expect Int, y is Option[Int]
} yield z
20
50. TRANSFORMERSTRANSFORMERS
One solution: Monad transformer
Transformer for Reader: ReaderT
/** @param F the monad we add to our stack */
case class ReaderT[F[_], -A, +B](f: A => F[B]) {
def map[C](g: B => C)(implicit F: Functor[F]): ReaderT[F, A, C] =
ReaderT(a => F.map(f(a))(g))
def flatMap[C](g: B => ReaderT[F, A, C])(
implicit M: Monad[F]
): ReaderT[F, A, C] =
ReaderT(a => M.flatMap(f(a))(b => g(b).f(a)))
}
21 . 1
58. GETTING CONTEXTGETTING CONTEXT
Pre-requisite: how to get the context ?
Need to abstract the way we get the connection
solution: Loan pattern
trait WithResource {
def apply[A](f: Connection => Future[A]): Future[A]
}
25
59. GETTING CONTEXTGETTING CONTEXT
Pre-requisite: how to get the context ?
Need to abstract the way we get the connection
solution: Loan pattern
User need to implement it and pass it when trying to interpret a
query
trait WithResource {
def apply[A](f: Connection => Future[A]): Future[A]
}
25
60. RESOURCE LOANER EXAMPLERESOURCE LOANER EXAMPLE
val loaner = new WithResource {
def apply[A](f: Connection => Future[A]): Future[A] = {
val conn: Connection = DriverManager.getConnection(URL, USER, PASSWD)
f(conn)
.andThen {
case Success(x) =>
connection.commit()
x
case Failure(ex) =>
connection.rollback()
}
.andThen { case _ => connection.close() }
}
}
26
64. NAIVE INTERPRETERNAIVE INTERPRETER
Naive runner implementation
Edge case: M == Future
The connection will be closed before the termination of our
operation
class QueryRunner(wr: WithResource)(implicit ec: ExecutionContext) {
def apply[M[_], T](query: QueryT[M, T]): Future[M[T]] =
wr { connection =>
Future(query.f(connection))
}
}
27
65. REFINED INTERPRETERREFINED INTERPRETER
How to handle composition with asynchronous effects ?
Solution: A typeclass which handle composition
trait ComposeWithCompletion[F[_], Out] {
type Outer
def apply[In](loaner: WithResource[In], f: In => F[Out]): Future[Outer]
}
28 . 1
66. REFINED INTERPRETERREFINED INTERPRETER
Two instances of ComposeWithCompletion:
one to compose on Future
implicit def futureOut[A] = // asynchronous effect
new ComposeWithCompletion[Future, A] {
type Outer = A
def apply[In](
loaner: WithResource[In],
f: In => Future[A]
): Future[Outer] = loaner(f)
}
28 . 2
67. REFINED INTERPRETERREFINED INTERPRETER
Two instances of ComposeWithCompletion:
one for other effects (with low priority)
implicit def pureOut[F[_], A] = // synchronous effects
new ComposeWithCompletion[F, A] {
type Outer = F[A]
def apply[In](loaner: WithResource[In], f: In => F[A]): Future[Outer] =
loaner(r => Future(f(r)))
}
28 . 3
68. REFINED INTERPRETERREFINED INTERPRETER
Two instances of ComposeWithCompletion:
one to compose on Future
one for other effects (with low priority)
trait LowPriorityCompose {
implicit def pureOut[F[_], A] = ???
}
object ComposeWithCompletion extends LowPriorityCompose {
implicit def futureOut[A] = ???
}
28 . 4
74. QUERY-MONAD LIBRARYQUERY-MONAD LIBRARY
compiled into a library:
open-source (contribution accepted ;-) )
modulable and extensible
based on cats
https://github.com/zengularity/query-
monad
34
75. FEATURES:FEATURES:
abstracted Query
type Query[Resource, A] = Reader[Resource, A]
type QueryT[F[_], Resource, A] = ReaderT[F, Resource, A]
type QueryO[Resource, A] = QueryT[Option, Resource, A]
type QueryE[Resource, Err, A] = QueryT[Either[Err, ?], Resource, A]
35
76. FEATURES:FEATURES:
aliases for sql databases (context == java.sql.Connection)
import java.sql.Connection
type SqlQuery[A] = Query[Connection, A]
type SqlQueryT[F[_], A] = QueryT[F, Connection, A]
type SqlQueryO[A] = QueryO[Connection, A]
type SqlQueryE[A, Err] = QueryE[Connection, A, Err]
// aliases for interpreter
type WithSqlConnection = WithResource[Connection]
type SqlQueryRunner = QueryRunner[Connection]
36
77. FEATURES:FEATURES:
Resource loaner implementation for Play 2
import java.sql.Connection
import play.api.db.Database
class WithPlayTransaction(db: Database) extends WithSqlConnection {
def apply[A](f: Connection => A): A = { ... }
}
37