# wallabag_entry

title: No title found
created_at: 2018-03-22 11:23:07
updated_at: 2018-03-22 11:23:07
mimetype: text/html
domain_name: www.linkedin.com
http_status: 999
url:
  https://www.linkedin.com/pulse/ces-entreprises-anarchiques-o%C3%B9-lirrationalit%C3%A9-r%C3%A8gne-sur-faibis

content:
[cell repeats an earlier one in this file: 191 characters]


title: J'ai travaillé pour des menteurs
url: http://www.howimetyourstartup.com/blog/j-ai-travaille-pour-des-menteurs
created_at: 2018-03-22 13:06:01
updated_at: 2018-03-22 13:06:01
mimetype: text/html
language: fr
domain_name: www.howimetyourstartup.com
http_status: 200
content:
  <p>Néanmoins, il m’a fallu trois jours pour me rendre compte que l’entreprise ne vendait pas la technologie qu’elle proposait, mais assurait tout de même le service vendu. « Notre technologie c’est du <em>Bullshit</em>. Ça c’est pour envoyer des paillettes dans les yeux de nos futurs clients. Tu leur parles de nouvelles technologies et de progrès, ils se sentent à la pointe. Alors qu’en vérité, on n’a pas d’IA, mais on sous-traite le travail de l’IA à l’étranger. L’idéal serait de développer l’IA qu’on promet, mais on a tellement de demandes aujourd’hui qu’il vaut mieux améliorer la plateforme sur laquelle les agents de notre sous-traitant travaillent pour leur faire gagner en productivité. »</p><p>Start-up oblige, j’étais bien entendu dans un open-space à côté des développeurs (stagiaires également). Lors des pauses cafés, ils ont pu me confier que c’était dommage de leur vendre à eux une possibilité de coder une IA en R ou Python alors qu’il ne faisait que modifier et améliorer une plateforme pour les sous-traitant. « On se sent un peu escroqué, mais bon on apprend quand même ».</p>

preview_picture:
  http://res.cloudinary.com/hrscywv4p/image/upload/c_limit,fl_lossy,h_9000,w_1200,f_auto,q_auto/v1/989062/DFkaSs2XoAEsSe4_zlllom.jpg


title: Why we are not cross-platform developers – AndroidPub
url: https://android.jlelse.eu/why-we-are-not-cross-platform-developers-fd7ef70e976d?gi=27b32c817336
created_at: 2018-03-22 13:06:20
updated_at: 2018-03-22 13:06:20
mimetype: text/html
domain_name: android.jlelse.eu
preview_picture: https://cdn-images-1.medium.com/max/1200/1*25ZVlvohNSYEOgkNCfe2CA.jpeg
http_status: 200
content:
  <p id="f70f" class="graf graf--p graf--hasDropCapModel graf--hasDropCap graf-after--h3">Since the invention of the smartphone many developers have asked the same question: how can I build and release an app for multiple platforms? Where at first there were iPhones and BlackBerries, Android joined, Windows Phone made a brief appearance, and all along web has been part of the discussion. Releasing your app for each and every platform sounds expensive— surely there must be a solution that cuts the cost of developing multiple apps, right?</p><p class="graf graf--p graf-after--p">Here at <a href="https://pixplicity.com" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">Pixplicity</a>, where we’ve been making apps for over six years, things are no different: though we started out exclusively as native Android developers before we offered full-spectrum solutions, over the years we’ve tried and tested many of the cross-platform solutions out there, like <strong class="markup--strong markup--p-strong">PhoneGap</strong>, <strong class="markup--strong markup--p-strong">Xamarin</strong> and <strong class="markup--strong markup--p-strong">React</strong>. In the end, we’ve always preferred native solutions for both Android and iOS. Let me try to explain our preference in this post.</p><h3 class="graf graf--h3 graf-after--p">So what is this cross-platform anyway?</h3><p class="graf graf--p graf-after--h3">iOS apps are traditionally written in Objective-C or in Swift; Android apps in Java or Kotlin. These are <em class="markup--em markup--p-em">native</em> languages — ones that are supported by the system out of the box. This means that if you’d want to make an app for both platforms, you’d need to know at least two programming languages. Add the web to the mix, and you’ll need HTML+CSS+JavaScript for the UI, and something like PHP or Ruby for the business logic. That’s a mess.</p><p class="graf graf--p graf-after--p">Cross-platform solutions aim to simplify (part of) this problem by using a single programming language for multiple platforms. Those solutions can be split into two categories:</p><ul class="postList"><li class="graf graf--li graf-after--p">The ones that use <strong class="markup--strong markup--li-strong">web technology</strong> that is supported by all platforms. These solutions basically load up a mobile browser in the app and perform all logic within that browser, while offering added functionality that traditional website technology does not, such as push notifications or access to the file storage. This category includes <strong class="markup--strong markup--li-strong">PhoneGap</strong> (or <strong class="markup--strong markup--li-strong">Cordova</strong>), <strong class="markup--strong markup--li-strong">Sencha</strong>, and <strong class="markup--strong markup--li-strong">Ionic</strong> (a framework built on top of PhoneGap), and uses JavaScript as their main programming language.</li><li class="graf graf--li graf-after--li">The other category is often referred to as ‘<strong class="markup--strong markup--li-strong">native cross-platform</strong>’ — because the code written by the programmer is automatically translated by a program into native code. This has the advantage that the resulting app can achieve near-native performance, whereas the web-based solution has the overhead of running non-compiled code in a browser. This category includes <strong class="markup--strong markup--li-strong">React Native </strong>and the (probably) most popular one: <strong class="markup--strong markup--li-strong">Xamarin</strong>.</li></ul><p class="graf graf--p graf-after--li">Those native cross-platform solutions can be further split into two subcategories: the ones that share UI code (the visual part of the app) and the ones that don’t.</p><ul class="postList"><li id="fb52" class="graf graf--li graf-after--p">For example, regular old Xamarin shares the business logic code between platforms but the UI code (and other platform-specific code) is written specifically for each platform. Even though as a developer you are now using a single language (<strong class="markup--strong markup--li-strong">C#</strong> in this case) you are still writing separate code for the UI on iOS and Android.</li><li id="b109" class="graf graf--li graf-after--li">Xamarin also offers an API called <strong class="markup--strong markup--li-strong">Xamarin.Forms</strong> that allows sharing UI code. Instead of writing separate UI code, you write it using Xamarin.Form’s own markup format which then gets translated to native controls for you. React also falls in this category; instead of writing native views you’ll write React views, and React takes care for the rest.</li></ul><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*mm8DRELG0BiHQ_w_iVDpXg.png" alt="image" /></div>Writing UI code only once, the React version<h3 id="d3ca" class="graf graf--h3 graf-after--figure">The Good</h3><p class="graf graf--p graf-after--h3">Sounds good, I’m in! All these technologies are rather nifty. Shared code means less work and less learning. That is all true, let’s have a look at the benefits of using either of the aforementioned options:</p><ul class="postList"><li class="graf graf--li graf-after--p"><strong class="markup--strong markup--li-strong">Shared business logic</strong> — Write your business logic once, run it on any platform. Google managed to <a href="https://arstechnica.com/information-technology/2014/11/how-google-inbox-shares-70-of-its-code-across-android-ios-and-the-web/" class="markup--anchor markup--li-anchor" rel="noopener" target="_blank">re-use 70% of its code across Android, iOS and the web</a> for their app Inbox, using their own Java-to-Objective-C converter <a href="https://developers.google.com/j2objc/" class="markup--anchor markup--li-anchor" rel="noopener" target="_blank">J2ObjC</a>. This vastly <strong class="markup--strong markup--li-strong">reduced the amount of work</strong> required to build the apps, <strong class="markup--strong markup--li-strong">reducing costs</strong>, and resulting in a <strong class="markup--strong markup--li-strong">shorter time-to-launch</strong>.</li><li id="f773" class="graf graf--li graf-after--li"><strong class="markup--strong markup--li-strong">Maintenance</strong> — Shared code doesn’t just reduce cost during the initial build, it’ll be beneficial for the lifetime of your app. Every update again. (Or at least, it should… keep reading!)</li><li id="cda3" class="graf graf--li graf-after--li"><strong class="markup--strong markup--li-strong">Learn one language</strong> — If you’re a developer looking to target multiple platforms, it’s easier to learn a single language (or set of languages — usually a programming language, build script language, and mark-up language for the UI) than two sets of languages.</li><li id="c732" class="graf graf--li graf-after--li"><strong class="markup--strong markup--li-strong">Same team working on both apps</strong> — This is a big one. A single team is cheaper, makes project management easier, and works more efficiently. Knowledge is shared more easily within the team. Members of the Android team can help out the iOS team and vice versa, because <em class="markup--em markup--li-em">there is no Android team and there is no iOS team</em>. There’s only one team.</li><li class="graf graf--li graf-after--li"><strong class="markup--strong markup--li-strong">Shared unit tests </strong>— If you have unit tests (as you should), a cross-platform code base can also share the unit tests. This means less time spent on writing tests, or the same time spent on writing <em class="markup--em markup--li-em">more </em>tests.</li><li id="e19d" class="graf graf--li graf-after--li"><strong class="markup--strong markup--li-strong">Works with the web </strong>—When using a web-based solution (or a native one that supports the web), then all the above rules also apply for the web platform. Where Xamarin can only share code across iOS and Android, a web-based tool has all the benefits mentioned before <em class="markup--em markup--li-em">also</em> for the web version of your app.</li></ul><p id="b095" class="graf graf--p graf-after--li">So apparently there’s a lot to gain from these benefits, whether you’re a single developer, a multinational working with multiple development teams, or even a student learning to build your first app. ‘<strong class="markup--strong markup--p-strong">Write Once, Run Anywhere</strong>’ it’s often called, and while I won’t argue that it is sometimes a perfect solution for a project, this already sounds a little too good to be true, doesn’t it?</p>Chet Haase, Senior Staff Software Engineer at Google, puts it eloquently.<p class="graf graf--p graf-after--figure">Over the years the team at Pixplicity and I have used several of those platforms (with varying degrees of success) and we probably won’t stop trying out new ones in the future. Along the way, we have encountered several major pitfalls that I think should be carefully considered before committing to a cross-platform tool.</p><h3 id="bfc5" class="graf graf--h3 graf-after--p">The Bad</h3><p id="b994" class="graf graf--p graf-after--h3">Ok, so all the big names are doing cross-platform, right? Google created and uses (a lot) of J2ObjC. Facebook created and actively maintains React. Microsoft <a href="https://blogs.microsoft.com/blog/2016/02/24/microsoft-to-acquire-xamarin-and-empower-more-developers-to-build-apps-on-any-device/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">bought</a> and very actively maintains Xamarin. Then what’s the catch?</p><h4 id="e4ee" class="graf graf--h4 graf-after--p"><strong class="markup--strong markup--h4-strong">Different platforms are different</strong></h4><p class="graf graf--p graf-after--h4">You can’t build an app for one platform and expect it to get good ratings when you simply copy-paste it onto another platform. I know you want to, and though you technically <em class="markup--em markup--p-em">can</em>, you <em class="markup--em markup--p-em">shouldn’t. </em><strong class="markup--strong markup--p-strong">Android and iOS are different</strong>, Android and iOS users are different, and they should be approached differently. Each platform has <a href="https://developer.apple.com/app-store/guidelines/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">their</a> <a href="https://developer.android.com/guide/practices/ui_guidelines/index.html" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">own</a> <a href="https://developer.android.com/guide/practices/ui_guidelines/index.html" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">list</a> of design guidelines and <a href="https://developer.apple.com/app-store/review/rejections/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">rules</a> to live by, and users will know when you break them.</p><p class="graf graf--p graf-after--p">As Google <a href="https://developers.google.com/j2objc/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">puts it</a>:</p><blockquote id="be63" class="graf graf--blockquote graf-after--p"><div>J2ObjC does not provide any sort of platform-independent UI toolkit, nor are there any plans to do so in the future. We believe that iOS UI code needs to be written in Objective-C, Objective-C++ or Swift using Apple’s iOS SDK (Android UIs using Android’s API, web app UIs using GWT, etc.).</div></blockquote><p id="cc11" class="graf graf--p graf-after--blockquote">Or Facebook, on <a href="https://code.facebook.com/posts/1014532261909640/react-native-bringing-modern-web-techniques-to-mobile/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">the very page</a> that promotes React [emphasis mine]:</p><blockquote class="graf graf--blockquote graf-after--p"><div>It’s worth noting that we’re not chasing “<strong class="markup--strong markup--blockquote-strong">write once, run anywhere</strong>.” Different platforms have different looks, feels, and capabilities, and as such, we should still be developing discrete apps for each platform, but the same set of engineers should be able to build applications for whatever platform they choose, without needing to learn a fundamentally different set of technologies for each. We call this approach “<strong class="markup--strong markup--blockquote-strong">learn once, write anywhere.</strong>”</div></blockquote><p class="graf graf--p graf-after--blockquote">So that means when you want to optimize the UI for each platform specifically, that shared-UI platforms (like Xamarin.Forms) are already out the window. Which in turn means that near-100% code sharing becomes an unreachable goal. More realistically, assume 60% of code being shared across the platforms, depending on the nature of your app.</p><p class="graf graf--p graf-after--p">The web then again is totally different of either mobile platform, or at least it is when used on a laptop or desktop. Screen sizes matter a lot, so does the presence of a keyboard, and so does the interaction when using a mouse vs. a touch screen. Once we get to the bit about performance, you’ll see there are not many benefits to web-based solutions anymore, unless you’re very experienced in web technology and absolutely don’t want to learn a new language.</p><p id="f301" class="graf graf--p graf-after--p">Note that platform differences are not limited to the visual side of your app. It includes all the features that are present, missing, or different on each OS. There’s a whole slew of features available to Android developers that are not possible on iOS. Think of Android’s rich notifications, open access to Bluetooth, NFC and USB communications, always-on-top views, <a href="https://developer.android.com/topic/instant-apps/index.html" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">Instant Apps</a>, launch screen widgets, and probably more. Vice versa for iOS: smart app banners, dedicated encryption hardware, 3D-touch. Others are too different to be unified in a cross-platform wrapper: Picture-in-Picture, ARKit vs. ARCore, the mechanism of playing music, if and how long apps can perform tasks in the background, when and how to ask for permissions, accessing external storage…</p>Romain Guy, Senior Staff Software Engineer at Google, shares our concerns.<h4 id="f14c" class="graf graf--h4 graf-after--figure">Performance</h4><p id="cf46" class="graf graf--p graf-after--h4"><strong class="markup--strong markup--p-strong">Faster than native is literally not possible.</strong> Native cross-platform code is translated to byte code or native machine code and can therefore <em class="markup--em markup--p-em">theoretically </em>achieve <em class="markup--em markup--p-em">as-good-as-native</em> performance, however, there are often various penalties. Xamarin for example ships each app with a library of functionality that causes some overhead — it might not matter for the smoothness of animations or responsiveness to user interactions, but it will matter in start-up time, memory usage and application size. A simple “hello world” app built in Xamarin can <a href="https://www.altexsoft.com/blog/engineering/performance-comparison-xamarin-forms-xamarin-ios-xamarin-android-vs-android-and-ios-native-applications/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">take up a staggering 16Mb</a> (which is 4 times larger than the maximum size of an Instant App!).</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*9DUbqcuiK5L-4WvUKMH_Xw.png" alt="image" /></div>‘Near native’ performance? Loading and saving pictures in milliseconds; lower is better. <a href="https://www.altexsoft.com/blog/engineering/performance-comparison-xamarin-forms-xamarin-ios-xamarin-android-vs-android-and-ios-native-applications/" class="markup--anchor markup--figure-anchor" rel="noopener" target="_blank">Stats from August 2017</a><p id="d731" class="graf graf--p graf-after--figure"><strong class="markup--strong markup--p-strong">The performance of web-based approaches doesn’t even cut it close</strong>. Running a website in a mobile browser or web view has traditionally been bad for performance, and while it has improved tremendously over the years, the difference in responsiveness are not only measurable but also very noticeable. A simple and well-made, web-based app might fool your users into thinking it is native, but however smooth the animations and native-like its UI components are, a flickering screen transition or device rotation will give you away. This has been a major reason why Facebook has invented React. Remember the old, horribly slow Facebook app? That was all web views.</p><blockquote class="graf graf--pullquote graf--startsWithDoubleQuote graf-after--p"><div>“Unfortunately, because all the rendering is done using web tech, we can’t produce a truly native user experience.”</div></blockquote><blockquote class="graf graf--pullquote graf-after--pullquote"><div>~ <a href="https://code.facebook.com/posts/1014532261909640/react-native-bringing-modern-web-techniques-to-mobile/" class="markup--anchor markup--pullquote-anchor" rel="noopener" target="_blank">Facebook</a></div></blockquote><h4 id="cae2" class="graf graf--h4 graf-after--pullquote">Ease of development</h4><p class="graf graf--p graf-after--h4">This one is a bit of a personal gripe for me as I’ve encountered my fair share of trouble while creating Xamarin apps. The tools have been so buggy and the development process so cumbersome that I’ll have to try my best to keep post from becoming a personal vendetta against Xamarin. Still though, I want to get the biggest one off my chest first: the bugs. Holy IDE’s, Batman, the bugs!</p><ul class="postList"><li class="graf graf--li graf-after--p"><strong class="markup--strong markup--li-strong">Bugs — </strong>Android and iOS are solid platforms, but even those have bugs. There are bugs or unexpected or undocumented behaviours in the operating systems, in the development tools, and in the libraries you use. It sucks, but it happens. Add another layer of software into the development process, and you’ll add more bugs. In the case of Xamarin, <a href="https://bugzilla.xamarin.com/describecomponents.cgi" class="markup--anchor markup--li-anchor" rel="noopener" target="_blank">this list is LONG</a>. There’s a reason we have a shared document titled ‘<em class="markup--em markup--li-em">The Grand List of Xamarin Sh*t</em>’ at our office. It’s not just dealing with <em class="markup--em markup--li-em">more</em> bugs, it’s also that the increased complexity of the toolchain causes a more complex debugging process. Whenever something goes wrong, it is more difficult to pinpoint the issue, to google the issue, and to know if the problem is your code or the platform’s. This <em class="markup--em markup--li-em">will</em> eat up hours of development time that you did not account for.</li></ul><blockquote id="d6df" class="graf graf--pullquote graf-after--li"><div>We have a shared document titled “<em class="markup--em markup--pullquote-em">The Grand List of Xamarin Sh*t</em>” at our office.</div></blockquote><ul class="postList"><li class="graf graf--li graf-after--pullquote"><strong class="markup--strong markup--li-strong">Immaturity of the tools — </strong>The fact that cross-platform toolchains are less matured than the native platforms does not solely result in the higher amount of bugs that they manifest. It also means that they are less <em class="markup--em markup--li-em">complete</em>. Think of the automated code-checks that XCode and Android Lint perform, which warn about bugs and security issues during development. Think of the IDE’s that aid and speed up writing code, that aid in tracking down bugs, tracking down performance issues (memory, cpu, gpu, battery usage, etc.). While other platforms are certainly also releasing similar tools of their own, the native platforms have had a head-start of <em class="markup--em markup--li-em">years</em>.</li></ul><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*25ZVlvohNSYEOgkNCfe2CA.jpeg" alt="image" /></div>Advanced Java IDE<ul class="postList"><li id="c5a0" class="graf graf--li graf-after--figure"><strong class="markup--strong markup--li-strong">Slow integration of new platform features </strong>— XCode and Android Studio (based on IntelliJ) are tried and tested, always the first to release new features, and are also guaranteed to provide access to 100% of the platform’s functionality that is available to developers. Due to their nature, cross-platform tools will <em class="markup--em markup--li-em">always be behind the curve</em> with every update. Granted, Xamarin has always been very quick to adopt, and they even <a href="https://www.xamarin.com/faq#q6" class="markup--anchor markup--li-anchor" rel="noopener" target="_blank">boldly claim it takes ‘a few hours’</a> to include new OS features, but issues are a-plenty. There was the time that the Appstore enforced apps to be built for 64-bit CPUs while Xamarin wasn’t stable yet. Also, good luck trying to build an <a href="https://developer.android.com/topic/instant-apps/index.html" class="markup--anchor markup--li-anchor" rel="noopener" target="_blank">Instant App</a> using any cross-platform solution any time soon.</li><li id="ed2e" class="graf graf--li graf-after--li"><strong class="markup--strong markup--li-strong">Programming language</strong> — There are (online) wars fought over which programming language is considered ‘good’ and which are ‘bad’. Each language has their pros and cons, their fanboys &amp; -girls and haters, their advocates and enemies. But however much personal opinion plays a role in this discussion, some languages are inherently <em class="markup--em markup--li-em">safer</em> than others. No matter how good your codestyle-check or IDE is, there are simply certain bugs that can be made in one language and not in another. <a href="https://medium.com/javascript-non-grata/javascript-is-a-dysfunctional-programming-language-a1f4866e186f" class="markup--anchor markup--li-anchor" target="_blank">Yes, this bit is about Javascript</a>. Javascript (used by React) allows you to make typo’s that are uncatchable by the interpreter, causing runtime error instead of spellchecker-like warnings while writing.</li></ul><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*LLqAx7KahuftV1XWCni6yQ.png" alt="image" /></div>JavaScript thinks truth is just, like, your opinion man.<ul class="postList"><li class="graf graf--li graf-after--figure"><strong class="markup--strong markup--li-strong">Availability of libraries</strong> — Popular cross-platform solutions often have a good package manager that provides a wide array of plugins or libraries. Xamarin’s NuGet repository for example has an amazingly large offer of plugins and includes many popular native libraries. None of these repositories compare to the amount of libraries available for native platforms. The nice thing is that you often <em class="markup--em markup--li-em">can</em> port existing native libraries, the bad thing is that you often <em class="markup--em markup--li-em">have to</em>. And for some of cross-platform technologies this means you’re going to have to have knowledge of the native programming languages, which is what you were trying to avoid when choosing a cross-platform language.</li><li class="graf graf--li graf-after--li"><strong class="markup--strong markup--li-strong">Slow coding and running cycle</strong> — Admittedly, this argument goes both ways. There are web-based and native cross-platform options that can show code changes pretty much on the fly, and there are those (looking at you again, Xamarin) that take foreeeeever to deploy onto a device or simulator every time you make a small change.</li><li class="graf graf--li graf-after--li"><strong class="markup--strong markup--li-strong">White labeling</strong> — This one matters when you deploy your app with different branding for different clients. ‘Build flavors’ on Android or ‘Targets’ on iOS — these platforms have easy systems in place for supporting this. None of the cross-platform approaches that I know of support this, so you’ll end up scripting your own solution in the build process — investing development time, and making every deployment more complex.</li></ul><h4 class="graf graf--h4 graf-after--li">Expertise</h4><p class="graf graf--p graf-after--h4">Expertise is a subjective thing. If you’re experienced in <strong class="markup--strong markup--p-strong">Ruby</strong>, you’re probably most comfortable creating mobile apps in <a href="https://github.com/rhomobile/rhodes" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">Rhomobile</a>. If you’ve been programming in <strong class="markup--strong markup--p-strong">Basic</strong> for the last 30 years, you can stick to what you know and use <a href="https://www.b4x.com/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">B4X</a>.<strong class="markup--strong markup--p-strong"> </strong>The developers at Pixplicity have years of experience in native technologies, we’ve been programming at a high level for a long time and are regularly teaching our knowledge at our Android Academy and conferences around the world. But that’s just us; your expertise might be in C# or in web technology. That will influence your choice when picking a technology to develop your app, but should it? Certainly yes, but that’s not the whole answer:</p><ul class="postList"><li class="graf graf--li graf-after--p"><strong class="markup--strong markup--li-strong">Learn one language — </strong>I mentioned this as a ‘pro’ of cross-platform development. But is it that simple? If you want to write a high-quality app, you will need to know the platforms you’re targeting inside and out. You’ll need to know what the platforms can and can’t do, what their SDKs offer, and even which bugs or peculiarities you have to take into account. For each platform. Often even for each <em class="markup--em markup--li-em">version</em> of each platform. It is easy to under-estimate the amount of knowledge you’ll still have to learn, and to over-estimate what you already know. If you’re an experienced C# developer, all knowledge about .Net and GDI is useless. Actually, <em class="markup--em markup--li-em">learning a programming language is the easy part of app development</em>. It’s a small step from C# to Java, or from Swift to Kotlin. If you understand the concept, the syntax is trivial.</li><li id="ef71" class="graf graf--li graf-after--li"><strong class="markup--strong markup--li-strong">Years of experience</strong> — Surely those cross-platform <em class="markup--em markup--li-em">languages</em> like Ruby, C# or JavaScript have been around for ages, but those <em class="markup--em markup--li-em">platforms</em> have not. React Native was released in March 2015. At the time of writing it is simply <em class="markup--em markup--li-em">not possible</em> to find a React Native developer with over 2.5 years of experience.</li><li id="b5f9" class="graf graf--li graf-after--li"><strong class="markup--strong markup--li-strong">Documentation — </strong>Any decent cross-platform solution is very well documented. Native development is documented <em class="markup--em markup--li-em">better.</em> They have a larger online community. They have more conferences and more local meet-ups. On Stack Overflow (the massive cheat sheet for all developers) there are <a href="https://stackoverflow.com/questions/tagged/android+java?sort=active&amp;pageSize=15" class="markup--anchor markup--li-anchor" rel="noopener" target="_blank">191,918</a> active questions on Android+Java, <a href="https://stackoverflow.com/questions/tagged/ios+swift" class="markup--anchor markup--li-anchor" rel="noopener" target="_blank">103,641</a> on iOS+Swift, <a href="https://stackoverflow.com/questions/tagged/react" class="markup--anchor markup--li-anchor" rel="noopener" target="_blank">59,355</a> on React, <a href="https://stackoverflow.com/questions/tagged/cordova" class="markup--anchor markup--li-anchor" rel="noopener" target="_blank">54,126</a> on Cordova, <a href="https://stackoverflow.com/questions/tagged/xamarin" class="markup--anchor markup--li-anchor" rel="noopener" target="_blank">25,976</a> on Xamarin. Surely this is an indication of community size and engagement, and not of the incomprehensibility of native programming.</li></ul><h4 class="graf graf--h4 graf-after--li">Your business depends on it</h4><p class="graf graf--p graf-after--h4">So by now you know that <em class="markup--em markup--p-em">I</em> have a strong dislike for cross-platform development, and hopefully now so do <em class="markup--em markup--p-em">you</em>. Yet so far I’ve only even covered the practical side of app development. Let’s look at the future, and see how it might affect your business.</p><p id="cc78" class="graf graf--p graf-after--p">Apple and Google have huge teams building their platforms, and they will have for as long as those platforms exist. This is the best guarantee you can get regarding long-time support for the tools they’re offering, and the active continuous development of it. The popularity of the native platforms also creates a larger support for the community around them, and a more steady supply of experienced programmers (should you be looking to hire).</p><p id="c3de" class="graf graf--p graf-after--p">Cross-platform tools however, are fully dependent on the agenda of the companies funding them. None of them give any guarantees about support and future plans. There are no guarantees they will be compatible with the next update of Android or iOS, <strong class="markup--strong markup--p-strong">there are no guarantees that they’ll even exist next month</strong>. If that happens, you can only hope that the technology will be handed over to the community and will continue as open source, undoubtedly with a much, much slower pace of development.</p><blockquote id="fefd" class="graf graf--pullquote graf--startsWithDoubleQuote graf-after--p"><div>“The company hasn’t provided <em class="markup--em markup--pullquote-em">any</em> guarantees that it <em class="markup--em markup--pullquote-em">won’t</em> pull the plug on the project — not just for the foreseeable future, but for the lifetime of <em class="markup--em markup--pullquote-em">your app</em>.” ~ Ariel Elkon <a href="https://arielelkin.github.io/articles/why-im-not-a-react-native-developer.html" class="markup--anchor markup--pullquote-anchor" rel="noopener" target="_blank">about React Native</a></div></blockquote><p class="graf graf--p graf-after--pullquote">If the past is any indication of the future, then today’s popular cross-platform solution will be superseded in about two years time. Titanium, PhoneGap and Adobe AIR have all been regarded as the next big thing in cross-platform development. Now it’s React and Xamarin wearing that crown; Progressive Web Apps are probably next.</p><h4 class="graf graf--h4 graf-after--p">Notable exceptions</h4><p class="graf graf--p graf-after--h4">So when <em class="markup--em markup--p-em">should</em> you use some cross-platform toolkit, if at all? Well, there are two big exceptions to the story:</p><ul class="postList"><li id="b636" class="graf graf--li graf-after--p"><strong class="markup--strong markup--li-strong">Games</strong> — More often than not, games are not dependent on native components. They’re using custom UI components that are designed to fit the look and feel of the game anyway, so there’s no pressure to write native layouts. Whether 2D or 3D, games are often built on top of OpenGL, where performance is excellent, where the visual logic makes up a very large portion of the app, which <em class="markup--em markup--li-em">can</em> be shared across platforms. If you’re making a game then yes, you <em class="markup--em markup--li-em">should</em> use something like <strong class="markup--strong markup--li-strong">Unity</strong> or <strong class="markup--strong markup--li-strong">Unreal</strong>.</li><li class="graf graf--li graf-after--li"><strong class="markup--strong markup--li-strong">Rapid prototyping</strong> — If you quickly want to test an idea and deploy it to a group of testers, you’re probably more interested in how your app interacts rather than whether it has good performance and all that. Depending on your expertise, a cross-platform toolset can be a perfect fit for creating a prototype in a quick and easy manner.</li></ul><h3 id="aac4" class="graf graf--h3 graf-after--li">TL;DR</h3><p id="cb2c" class="graf graf--p graf-after--h3">You were promised <a href="http://www.appcelerator.com/mobile-app-development-products/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">60%</a> to <a href="https://www.xamarin.com/faq#q1" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">90%</a> shared code, resulting in faster development and less maintenance. But the development process has slowed down due to inadequate tools, the developers are unhappy, they’re making more components by hand due to lack of libraries, and with every software update things start to break. Deployment takes longer. Testing is inadequate so there are more bugs. Now you have cut development cost by only 20% instead of the expected 60–90%, and on top of that your users are leaving bad ratings.</p><p class="graf graf--p graf-after--p">We’ve seen it happen, and we’ll continue seeing it happen. Surely your mileage may very — nobody’s saying it <em class="markup--em markup--p-em">will</em> happen to you too, but please consider this article when choosing a platform. Clients have come to us with a cross-platform app asking to have it rebuilt using native technology. Not once has it been the other way around.</p><h4 id="f028" class="graf graf--h4 graf-after--p">About the author</h4><p id="bfcb" class="graf graf--p graf-after--h4">Mathijs Lagerberg co-founded <a href="https://pixplicity.com" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">Pixplicity</a> at the beginning of 2012 after building a couple of Android apps. The Android OS was still young ‘back in those days’ and it only had a tiny market share. Having programmed in countless languages for the better part of his life, it made sense to dive head-first into this new technology and join a start-up that focussed on building mobile apps. Over time Pixplicity has grown to a creative tech agency that has the privilege of playing with all the fun two-letter abbreviations: A.R., V.R. and A.I.. Still building apps though, but not cross-platform ones.</p>


title: De l’état du marché du développement – Arpinum – Medium
url: https://medium.com/arpinum/de-létat-du-marché-du-développement-4187836015a5
created_at: 2018-03-22 13:06:35
updated_at: 2018-03-22 13:06:35
mimetype: text/html
domain_name: medium.com
preview_picture: https://cdn-images-1.medium.com/max/1200/1*xAFAiAxqZVrOVLBTo9tf6w.jpeg
http_status: 200
content:
  <div class="section-divider"><hr class="section-divider" /></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h1 class="graf graf--h3 graf--leading graf--title">De l’état du marché du développement</h1><p id="fd13" class="graf graf--p graf-after--h3">Il est possible de lire un peu tout et son contraire je trouve sur l’état du marché du développement en général. Il est tout à fait possible de tomber d’un côté, sur un article parlant de salaires incroyables, de recruteurs se battant et s’arrachant les vêtements pour attirer le top du top ; et de l’autre certains articles font état d’une réalité plus sordide, ou les développeurs indépendants, ou pas, luttent pour dépasser un certain seuil de rémunération, étant considérés comme des ouvriers vaguement qualifiés, interchangeables, tout juste bon à visser les boulons d’une vision géniale imaginée par quelqu’un n’ayant pas une once de culture tech, et donc mécaniquement ancrée dans une certaine mesure dans de la pensée magique.</p><p id="ed4f" class="graf graf--p graf-after--p">J’avais envie d’ajouter mon grain de sel, pour tenter de décrire une réalité qui me semble bien plus complexe que «la méchante culture française fait qu’on utilise mal notre incroyable talent».</p><p id="ac76" class="graf graf--p graf-after--p">(petite note de lecture avant le suite : le terme “développeur” est hélas genré, mais par une flemme cosmique, et par souci de style, je prie le lecteur bien intentionné d’ajouter un “et développeuse” à chaque fois).</p></div><div class="section-inner sectionLayout--outsetColumn"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/2000/1*xAFAiAxqZVrOVLBTo9tf6w.jpeg" alt="image" /></div>Photo by <a href="https://unsplash.com/photos/xrVDYZRGdw4?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" class="markup--anchor markup--figure-anchor" rel="nofollow noopener" target="_blank">Émile Perron</a></div><div class="section-inner sectionLayout--insetColumn"><h4 class="graf graf--h4 graf-after--figure">Une histoire de magnétisme et de prophétie auto-réalisatrice</h4><p id="e1f3" class="graf graf--p graf-after--h4">Disons qu’une entreprise n’ayant aucune connaissance particulière en développement ait décidé de réaliser une application quelconque, par un indépendant, entreprise, agence quelconque. Imaginons que cette personne ait réussi à les convaincre d’utiliser une technologie RAD (WordPress, Rails, Django, peu importe), car vous comprenez, les grands groupes font confiance à cette technologie, elle permet d’employer des juniors, il y a une grosse communauté, etc. Le prestataire peut empiler stagiaires et débutants sur le code, car c’est là la promesse de l’approche, leur mettre la pression, et après pas mal de larmes, de retard, et de dépit, une application dont personne n’est fier part en production. Peu de temps après, il faut tout de même la faire évoluer. Quelle est l’annonce qui va être produite pour le recrutement ? Cherche développeur wordpress/rails/django, niveau bac+5 exigé, aimant le challenge, connaissant au moins 10 blagues et étant force de proposition sous la pression.</p><p class="graf graf--p graf-after--p">Et c’est parti, le problème est maintenant auto-répliquant : l’entreprise ne va attirer que des personnes qui ne voient aucun souci avec ce qui a été produit. Ils vont peut être rire de comment ça a été mal fait, oubliant par la même la quantité de pression, et de décisions prises à la hâte ayant menées à cette situation.</p><p class="graf graf--p graf-after--p">Dans un monde comme celui-là, ce cycle paraît normal. C’est le jeu de l’informatique : tout est toujours hors budget, en retard et bugué. Du coup, autant ne pas payer cher quelque chose qui sera de toute manière cassé.</p><p id="dde8" class="graf graf--p graf-after--p">Pour expliquer le titre de cette section, que s’est-il passé ici ? Étant donné la configuration initiale, l’entreprise est un aimant à attirer les personnes en accord avec elles. Ainsi, oui elle n’attire que du pisseur de code, producteur de bugs. Donc, en pensant initialement que l’expérience ne sert à rien, que les bugs sont inévitables, que le logiciel est un centre de coût et qu’il faut embaucher à pas cher, et mettre la pression, l’entreprise n’attire que des profils qui vont valider ces hypothèses.</p><p class="graf graf--p graf-after--p">J’ai pris des frameworks RAD comme exemple, mais bien entendu, ces mots clefs sont remplaçables par n’importe quel autre, à n’importe quelle échelle : du moment qu’une technologie a été choisie indépendamment du problème, avec pour but d’économiser un maximum d’argent lors de la création du produit, ou pour tenter de pouvoir recruter du junior pressurisable, la situation est identique.</p><h4 class="graf graf--h4 graf-after--p">CV-driven</h4><p id="fbaa" class="graf graf--p graf-after--h4">Une manière d’augmenter ses tarifs dans un tel écosystème, est de faire du CV-driven development. Le CV-driven development consiste à imposer des technologies à la mode sur un produit, indépendamment de leur pertinence, afin ensuite de trouver un emploi bien payé en tant qu’expert de cette technologie.</p><p class="graf graf--p graf-after--p">Si vous vous vendez sur vos connaissances techniques, vous allez aller dans des boîtes en accord avec ça. Étant donné que le CV-driven donne rarement de bons développeurs, vous allez donc être pisseur. Il est possible d’être mieux payé dans cette catégorie, en surfant sur la vague de la hype, mais votre valeur ne sera jamais perçue comme supérieure à celle d’un autre CV-driven plus jeune, et nécessairement moins cher.</p><p class="graf graf--p graf-after--p">Je ne sais pas si c’est une tendance de fond, mais je connais plusieurs anciens élèves s’étant lancés immédiatement en tant que freelance, grâce à une vague connaissance de ruby on rails, angular, react (peu importe encore une fois). C’est la quintessence du CV-driven démarré dès le début de carrière.</p><p id="c542" class="graf graf--p graf-after--p">Cette approche peut éventuellement un jour vous transformer en un développeur expérimenté, mais les chances sont faibles. Les chances sont plutôt que vous deviendrez à un moment ou un autre, un expert local.</p><h4 id="e625" class="graf graf--h4 graf-after--p">Expert local</h4><p class="graf graf--p graf-after--h4">Une autre approche pour augmenter son salaire consiste à devenir ce que j’appelle un expert local.</p><p class="graf graf--p graf-after--p">Dans une entreprise x ou y, vous êtes celui qui a mis en place tel ou tel projet, telle ou telle technologie, ou qui l’a repris. Vous vous êtes entêté, et vous êtes maintenant LA personne vers qui tout le monde se tourne en cas de souci sur cette plate-forme.</p><p class="graf graf--p graf-after--p">Soyons bien clair avec cette approche : cela ne fait pas de vous un développeur expérimenté, même après 40 ans de carrière : cela fait de vous l’expert local de cette entreprise. Votre valeur sur le marché est imperceptible. Peu m’importe que vous soyez l’expert SAP de cette entreprise, le fait est que vous ne savez rien sorti de ce contexte. C’est donc une position risquée également : en cas de changement de cap de l’entreprise, vous avez de fait, plus aucune valeur pour elle non plus. J’ai par exemple vu le cas chez des développeurs devenus maîtres dans l’art de patcher un vieux et très gros site en ASP (tout court). Au fils des années, cette solution a été remplacée par une nouvelle version en .NET. Elle n’était pas nécessairement mieux codée, mais certains développeurs se sont retrouvés sur le carreau, car ils n’avaient pas appris .NET pour tout un tas de raisons, et leurs connaissances du vieux système étaient devenues inutiles.</p><h4 class="graf graf--h4 graf-after--p">Briser le cercle : la posture du développeur expérimenté</h4><p class="graf graf--p graf-after--h4">Comme tout cercle vicieux, il existe toujours des moyens de le transformer en cercle vertueux.</p><p class="graf graf--p graf-after--p">Plutôt que de tenter d’agir sur quelque chose sur lequel je n’ai pas la main : les attentes des entreprises, et pleurer éternellement qu’elles ne comprennent pas; je préfère me concentrer sur quelque chose qui est à ma portée : ma propre attitude.</p><p id="b9fb" class="graf graf--p graf-after--p">Qu’est-ce que l’expérience ? Pour ne pas refaire un énorme pavé, je vous encourage à relire mon article sur les <a href="http://www.arpinum.fr/2014/04/08/les-phases-du-programmeur/" class="markup--anchor markup--p-anchor" rel="noopener nofollow" target="_blank">phases du programmeur</a>. En peu de mots, l’expérience, ce n’est pas la même année répétée 10 fois. L’expérience, c’est le recul sur la technologie, c’est la compréhension qu’un langage n’est qu’un modèle de pensée pour résoudre un problème, c’est la compréhension que faire une SPA, ce n’est pas être un développeur de génie, juste un développeur qui fait des applications comme on en faisait en WinForm il y a 20 ans. En gros, l’expérience, c’est avoir assez de connaissances pour avoir un recul considérable sur les outils, et pouvoir enfin nous concentrer sur le problème. Être expérimenté, c’est également savoir qu’on ne sait pas, mais savoir qu’on peut apprendre, ou avoir des intuitions sur des chemins à prendre que nous n’avons pourtant pas encore parcourus.</p><p class="graf graf--p graf-after--p">La posture du développeur expérimenté n’est non plus de créer de nouveaux problèmes dissimulant plus ou moins les anciens, mais bel et bien de les faire disparaître.</p><p class="graf graf--p graf-after--p">À partir de là, je fuis toute annonce ou demande alignant des mots-clefs, c’est un signe très clair que le client en face ne veut pas quelqu’un pour résoudre ses problèmes, mais quelqu’un pour augmenter le nombre d’heures qu’il peut aligner dans la construction de sa pyramide.</p><p class="graf graf--p graf-after--p">Pour augmenter la perception de ma valeur sur le marché, comparé à un junior, je vais avoir tendance à mettre en avant les problèmes que j’ai déjà aidé à résoudre, plutôt que les mots clefs que je peux aligner.</p><p class="graf graf--p graf-after--p">Un premier contact chez <a href="http://arpinum.fr" class="markup--anchor markup--p-anchor" rel="nofollow noopener" target="_blank">Arpinum</a> du coup peut être un peu déroutant : là ou certains clients veulent tout de suite parler technique, nous passons notre temps à éviter le sujet, et creuser les raisons profondes de leur présence. C’est vraiment dans un dernier temps que nous allons cogiter à un chemin technique pour résoudre les problèmes que nous avons identifiés.</p><h4 class="graf graf--h4 graf-after--p">Un impératif : ne pas avoir plus de développeurs, mais plus de développeurs (réellement) expérimentés</h4><p class="graf graf--p graf-after--h4">Il est strictement contre-productif, irréaliste, et bête, de blâmer des juniors pour leur absence de connaissance. De plus, étant donné qu’il est strictement impossible de fabriquer une formation permettant d’être réellement prêt à coder en sortant, cela veut dire que la charge de la formation repose sur les épaules des développeurs expérimentés. Par le binomage, par la création d’environnements permettant de se remettre de ses erreurs, par des revues de code, par le partage des bonnes informations au bon moment, petit à petit on peut passer du stade du développeur sachant à peine ce qu’il est train de faire, au stade du développeur expérimenté.</p><p id="cede" class="graf graf--p graf-after--p">Le souci, c’est que les chiffres sont en notre défaveur : il y a beaucoup trop de nouveaux entrants sur le marché par rapport aux personnes de bonnes volontés pour les accompagner (ou dans l’entreprise, ou à l’extérieur).</p><p class="graf graf--p graf-after--p">Le paradoxe, c’est que cette absence participe à l’hémorragie des développeurs : après plusieurs années en tant que développeur dans un milieu toxique, si jamais personne ne nous a montré que ce n’est pas une fatalité, qu’il est possible de faire autrement, pire, de prendre du plaisir à faire ce métier, alors on abandonne, d’une manière ou d’une autre.</p><p class="graf graf--p graf-after--p">L’autre paradoxe que j’ai déjà abordé dans mes billets et conférences, c’est que la posture du développeur expérimenté est souvent prise, parfois à raison, parfois à tort, comme de l’arrogance, ou du corporatisme. Quand on associe ça à la propension de notre profession <a href="http://videos.ncrafts.io/video/223268149" class="markup--anchor markup--p-anchor" rel="noopener nofollow" target="_blank">à ne pas avoir d’histoire</a>, cela crée ce gouffre de compréhension qui fait dire “TDD, c’est pour des extrémistes qui veulent nous faire sentir coupable de ne pas avoir de test”. Ou bien “on n’a rien à apprendre du développement de clients lourds, nous on fait du web”. etc. La solution bien sûr est également de laisser son ego à la porte quand on participe au développement d’un produit, mais c’est également un trait qui accompagne l’expérience hélas.</p><p class="graf graf--p graf-after--p">Tout ceci est bien dommage, car d’un autre côté, le bon environnement permet de progresser très vite. J’ai déjà travaillé avec des personnes fraichement diplômées, qui en à peine un an ou deux, m’avaient rattrapé ou dépassé.</p><p id="d9ef" class="graf graf--p graf-after--p">C’est pour cela, je pense, qu’il faut arrêter de prétendre qu’apprendre à développer est facile. Oui en deux mois on peut commencer à être un amateur passionné, mais pas le CTO d’une startup hautement technologique. Il faut arrêter de cautionner des environnements de travail toxiques, cautionner des heures de travail de forçats imposées à des stagiaires pensant que c’est bien normal. Il faut arrêter de chercher encore et encore les mêmes profils, et diversifier les idées et cultures que nous sommes prêts à accueillir dans nos entreprises.</p><p class="graf graf--p graf-after--p">Il n’y a rien de neuf sous le soleil, cette situation n’est pas propre à l’informatique. Seulement, nous confions bien trop d’aspect de nos vies à du code pour que cela ne m’inquiète pas. Et même sans prendre cet aspect en compte, il s’agit tout simplement d’assurer le bonheur à ceux et celles qui veulent faire ce métier tellement passionnant.</p><h4 class="graf graf--h4 graf-after--p">Conclusion</h4><p class="graf graf--p graf-after--h4">Si vous ne devez retenir que quatre choses de ce trop long billet c’est :</p><ul class="postList"><li id="cc9f" class="graf graf--li graf-after--p">Si vous êtes développeur junior, cherchez un ou plusieurs mentors, internes ou externes, de préférence non formaté dans le même moule que votre entreprise</li><li class="graf graf--li graf-after--li">Si vous êtes un développeur expérimenté, participez activement à la formation des juniors.</li><li class="graf graf--li graf-after--li">Si vous êtes chef de projet/entreprise, etc, ne recrutez plus au mot clef. En payant des cacahuètes, vous n’obtiendrez que des singes.</li><li class="graf graf--li graf-after--li graf--trailing">Et nous tous, arrêtons de faire briller ce miroir aux alouettes, faisant croire que développer est facile.</li></ul></div></div></div>


title: Moving from PHP to GO and back again – Ivan Jaros – Medium
url: https://medium.com/@ivanjaros/moving-from-php-to-go-and-back-again-9ea1f57018c4
created_at: 2018-03-22 13:06:45
updated_at: 2018-03-22 13:06:45
mimetype: text/html
domain_name: medium.com
preview_picture: https://cdn-images-1.medium.com/max/1200/1*R5iE9Y4tnf1HRMDZQdoeYQ.jpeg
http_status: 200
content:
  <div class="section-divider"><hr class="section-divider" /></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h1 class="graf graf--h3 graf--leading graf--title">Moving from PHP to GO and back again</h1><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*Oho3sxVbWOQ78P1d4GnfUQ.jpeg" alt="image" /></div><a href="http://www.montanaoutdoor.com/wp-content/uploads/2015/06/o-GOPHER-ALBERTA-FLOOD-facebook.jpg" class="markup--anchor markup--figure-anchor" rel="nofollow noopener" target="_blank">http://www.montanaoutdoor.com/wp-content/uploads/2015/06/o-GOPHER-ALBERTA-FLOOD-facebook.jpg</a><p id="ff6b" class="graf graf--p graf-after--figure">I don't know why but my previous blog post got almost 5k views in 24 hours. I guess a lot of people are hungry for information about Go? Who knows..</p><p class="graf graf--p graf-after--p">Anyhow, <strong class="markup--strong markup--p-strong">Golang is not happening</strong>. I gave it 5 full days but Go is not the redeemer that I got a feeling the community is trying to proclaim it is.</p><p class="graf graf--p graf-after--p">Sure, I haven't mastered the language, but I've learnt enough so that I can make an opinion on the technology.</p><p class="graf graf--p graf-after--p">First of all, <strong class="markup--strong markup--p-strong">Go is absolutely a systems programming language</strong> and t<a href="https://golang.org/doc/faq" class="markup--anchor markup--p-anchor" rel="nofollow noopener" target="_blank">he authors are no saying otherwise.</a></p><blockquote class="graf graf--blockquote graf-after--p"><div>Go was born out of frustration with existing languages and environments for systems programming.</div></blockquote><p class="graf graf--p graf-after--blockquote">This might seem like an unimportant information but in this context it means that the place Go shines is low level programming(that's also why its on par with C when it comes to performance).</p><p class="graf graf--p graf-after--p">This means that Go will be excelling when writing networking or data manipulation libraries, but that's about it.</p><p class="graf graf--p graf-after--p">Trying to use it out of this scope means you will be using the wrong tool for the job.. and this is what I tried to do.</p><p class="graf graf--p graf-after--p">You see, there are some well known projects built with Go — like Kubernetes, Docker, basically all HashiCorp's products, Moby, Prometheus.. and this gives you the impression that Go is a great tool for building bigger applications.</p><p id="cec7" class="graf graf--p graf-after--p">And the truth is the exact opposite. These companies/teams have picked Go most likely for the same reason Google has made it for itself. And that is — making low level language powerful enough to be as performant as C but as simple as Python, for example, and allowing large teams with different background(lower/higher level) to work together on single platform. The reasoning behind this is well known and you can simply google the reasons which I am not going to reiterate in here.</p><p class="graf graf--p graf-after--p">In other words, those people have selected Go because it is a great mix of powerful and simple, allowing fast progression without performance regression within teams with different programming language backgrounds. Simply, they didn't have much choice.</p><p id="c2cf" class="graf graf--p graf-after--p">For those low level tasks it's a great tool but I will argue that it is absolutely not a great tool for anything higher-level.</p><p id="cb05" class="graf graf--p graf-after--p">Go's simplicity works very well in your favour if you are creating a single purpose low-level library or application that is small in size and purpose.</p><p class="graf graf--p graf-after--p">If you look at those bigger projects, the code base is a mess, due to the way Go forces you to work by splitting code into different “namespaces”. On itself, that is not a sin. But another point I want to make is that in Go, you absolutely, under no circumstances, should be even trying to reuse code or define an interface. Sooner or later, it will bite you in the ass.</p><p id="e026" class="graf graf--p graf-after--p">Go is not OOP in any shape or form, no matter what “they” try to tell you. Go is imperative language with procedural style of writing code. Yes, you have objects and you can attach methods to them, similarly to Ruby where everything is an object, but that's basically it. Never, ever, try to <a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself" class="markup--anchor markup--p-anchor" rel="noopener nofollow" target="_blank">repeat yourself</a> in Go. You will crash and burn.</p><p class="graf graf--p graf-after--p">When it comes to Go, spaghetti code is what you want to write.</p><p id="b9f5" class="graf graf--p graf-after--p">Go has composition instead of inheritance and polymorphism but you will be running in circles if you'll try to create any re-usable code. You will fail badly.</p><p class="graf graf--p graf-after--p">There is a reason why Go is lacking “real” frameworks. Sure, you have Go Kit, Micro, Gin and few others but they will never be able to come even close to Symfony, Laravel, RoR, Django or Flask.</p><p id="b6ac" class="graf graf--p graf-after--p">And that is because they are limited by the language itself. You cannot define interfaces on their own. It has no meaning. You have to define basic functionality that can be extended by the user. You can do this and have an interface and base struct but once the user extends the struct via composition all you binding methods will go out of the window and the user is left with having to re-implement everything anyway.</p><p class="graf graf--p graf-after--p">OK, so no frameworks and DRY. What does it mean? It means that when you write Go code you should not think about the future and possibilities of extending or altering the code. You should be thinking in “right now”.</p><p id="e857" class="graf graf--p graf-after--p">You write your application directly, no traits, not plugins, no interfaces, no base classes, no helpers/tooling, nothing. Simply write the functionality for right now. Focus on your single main.go file. Coming from higher level languages, it is very tempting to start thinking in “namespaces” and sub-directories but that is a fool's errand.</p><p class="graf graf--p graf-after--p">Go was meant to solve problems as efficiently as possible. And this collides with higher level languages, like PHP, Java, C#, Python or whatever you're using.</p><p class="graf graf--p graf-after--p">These languages provide you with a lot of abstractions to make writing code easier and not having to think about IOs, packets, bits and bytes, gc and whatnot.</p><p class="graf graf--p graf-after--p">Go is not like that and trying to make it work the way you are used to work simply won't work. It will be painful and pointless.</p><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*g_KVT2Y-m0z9ZZZCsJvg2g.jpeg" alt="image" /></div><a href="https://captainsblogafrica.files.wordpress.com/2012/05/ecc81leph-braco-02.jpg" class="markup--anchor markup--figure-anchor" rel="nofollow noopener" target="_blank">https://captainsblogafrica.files.wordpress.com/2012/05/ecc81leph-braco-02.jpg</a><h3 class="graf graf--h3 graf-after--figure">Microservices</h3><p class="graf graf--p graf-after--h3">I've chosen Go because it had good track in the mainstream in regard to micro services architecture. The high performance and small system resource requirements seem like a great match. And it is, it really is… but not really.</p><p class="graf graf--p graf-after--p">When the topic of microservices comes up there is no single rule that can describe what a micro service is or how it should look.</p><p id="a447" class="graf graf--p graf-after--p">And this is the source of confusion in regard to Go. Let me explain…</p><p id="ffb1" class="graf graf--p graf-after--p">As I've mentioned, Go is a great low level language for small efficient libraries that interact with network or IOs. But that does not mean that writing an application with thousands of line of code is also a good place to use Go.</p><p class="graf graf--p graf-after--p">I would argue that Go should be used only for nano services. I do not mean that as a measure of lines of code. I mean it as a representation of very simple and small unit of logic that is to be performed.</p><p id="dfff" class="graf graf--p graf-after--p">For example, Go would be perfect language to use for a micro service whose purpose is to receive events from event store in event sourced architecture and normalize them into consumable messages for the message broker to distribute to interested 3rd parties.</p><p id="a081" class="graf graf--p graf-after--p">Such service would basically receive a binary data, unpack it, make it into JSON, do some cleaning and forward it away. Go would excel in this scenario.</p><p class="graf graf--p graf-after--p">It is a very simple task that does not require much logic. It could be handled by Python or PHP but Go will be in different level of performance.</p><p id="a376" class="graf graf--p graf-after--p">Now imagine a microservice where you have to connect to a database, fetch some results, perform some business logic and send some messages out.</p><p class="graf graf--p graf-after--p">This does not sound much different from the previous example. But this time there is a database in play. <em class="markup--em markup--p-em">Do we have a driver for it in Go?</em> If yes, good for us. But then there is also the business logic. And this is what it all boils down to — can you imagine having your business logic written in plan functions? And not one or two, probably tens, most likely hundreds. Are you up for this? Will you be ok managing and <strong class="markup--strong markup--p-strong">maintaining </strong>this monster?</p><p id="bcba" class="graf graf--p graf-after--p">I don't think so. Why is that? It's because Go is out of its element. This is not place for it. Do not ask Go to do things that other languages will do better. Not faster, but better.</p><p class="graf graf--p graf-after--p">Human factor has to come in play in here. Writing code is not about performance — unless you are in finance.</p><p id="c392" class="graf graf--p graf-after--p">Writing code has to be pleasant experience. Writing code is like painting or sculpting. You have to have a passion for it. You have to love it. Otherwise, what's the point? You'd be better off working behind an assembly line for some car manufacturer.</p><p id="b5c6" class="graf graf--p graf-after--p">My point is that you should use Go in place where you used to use C, Haskell, OCaml or whatever(I'm not a programming languages aficionado). But not where you've used Python, PHP, Ruby or Java.</p><p class="graf graf--p graf-after--p">Hence, after trying to bend Go to do my bidding, I am forfaiting and going back to PHP. I will most likely be using Go for some nano services where it has its place but absolutely not as my primary programming language.</p><p id="c424" class="graf graf--p graf-after--p">I had a look at goroutines and it looks like I can do the same with Amp or ReactPHP if I'm on single threaded machine, which is the case of all cheaper cloud hosted computing options.</p><p id="dee2" class="graf graf--p graf-after--p">On multithreaded machine I can utilize the PThreads PHP extension and Amp/Parallel or potentially Swoole.</p><p id="ecc1" class="graf graf--p graf-after--p">I have looked at other languages but I haven't found any that would perform better than PHP and provide similar functionality at the same time. The exception being Java but I have quite a dislike for it. Don't know why really, I've never wrote in it, but over the years I've read too much about being too resource-hungry and a lot of disliking in general.</p><p class="graf graf--p graf-after--p">Go's big advantage is that it has really big standard library. It comes with very performant http server out of the box, which cannot be said about PHP. But I think that PHP profiled itself as being out-of-the-box solution whereas it's ecosystem of libraries is really broad and I think it is time for me to have a good look at it, get my hands dirty and do some compilation stuff.</p><p id="b60b" class="graf graf--p graf-after--p">I feel that PHP is still going strong and is very mature, and now even performant, language but I think it is time for it to start taking parallelism and deployability more seriously. Hopefully, version 8 will bring some massive changes. I would love to see breaking the backward compatibility finally. It is the most limiting factor for progression in these large projects.</p><p class="graf graf--p graf-after--p">Some people have figured out what I just did before me: <a href="https://news.ycombinator.com/item?id=8201244" class="markup--anchor markup--p-anchor" rel="nofollow noopener" target="_blank">https://news.ycombinator.com/item?id=8201244</a></p><p id="c56d" class="graf graf--p graf-after--p">I guess, without trial and error we wouldn't be able to progress anyway.</p><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*R5iE9Y4tnf1HRMDZQdoeYQ.jpeg" alt="image" /></div><a href="http://www.johnlund.com/Images/Elephant-On-Razor-Scooter.jpg" class="markup--anchor markup--figure-anchor" rel="nofollow noopener" target="_blank">http://www.johnlund.com/Images/Elephant-On-Razor-Scooter.jpg</a><p class="graf graf--p graf-after--figure">If you're interested in concurrency or paralellism in PHP have a look at:</p><p class="graf graf--p graf-after--p"><a href="https://blog.madewithlove.be/post/thread-carefully/" class="markup--anchor markup--p-anchor" rel="nofollow noopener" target="_blank">https://blog.madewithlove.be/post/thread-carefully/</a><br /><a href="https://github.com/elazar/asynchronous-php" class="markup--anchor markup--p-anchor" rel="nofollow noopener" target="_blank">https://github.com/elazar/asynchronous-php</a><br /><a href="https://gist.github.com/krakjoe/6437782" class="markup--anchor markup--p-anchor" rel="nofollow noopener" target="_blank">https://gist.github.com/krakjoe/6437782</a></p><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><div class="iframeContainer"><iframe width="700" height="393" src="https://medium.com/media/2775d05ca7ef75191f18f31a5b26ed82?postId=9ea1f57018c4" allowfullscreen="allowfullscreen" frameborder="0">[embedded content]</iframe></div></div><p class="graf graf--p graf-after--figure">— — —</p><ul class="postList"><li class="graf graf--li graf-after--p"><em class="markup--em markup--li-em">footnote removed since it detracts the main points</em></li></ul><p class="graf graf--p graf-after--li"><em class="markup--em markup--p-em">PS: It has been a month now that I work with Go every day and nothing has changed. The language is very limiting and has a ton of gotchas that will cause you a shitload of wasted hours and you will have to rewrite a ton of code. Go is very performant and great tool when you know what it's about and when and where to use it. Otherwise it will be just a massive pain.</em></p><h3 id="bdfb" class="graf graf--h3 graf-after--p graf--trailing"><a href="https://medium.com/@ivanjaros/golang-post-mortem-what-me-no-likey-37aedf5bf77f" class="markup--anchor markup--h3-anchor" target="_blank">Next: Golang: post-mortem &amp; what me no likey</a></h3></div></div></div></div></div></div>


title: REST is the new SOAP – freeCodeCamp
url: https://medium.freecodecamp.org/rest-is-the-new-soap-97ff6c09896d?gi=81e094f6448c
created_at: 2018-03-22 13:06:53
updated_at: 2018-03-22 13:06:53
mimetype: text/html
domain_name: medium.freecodecamp.org
preview_picture: https://cdn-images-1.medium.com/max/1200/1*VlkAg8dodbaaKp-Po7DrAA.jpeg
http_status: 200
content:
  <p id="dd88" class="graf graf--p graf-after--h3"><em class="markup--em markup--p-em">Written by Pascal Chambon, reviewed by Raphaël Gomès</em></p><p class="graf graf--p graf-after--p"><strong class="markup--strong markup--p-strong"><em class="markup--em markup--p-em">Update</em></strong><em class="markup--em markup--p-em">: this article mostly deals with the RESTish ecosystem, which now constitutes a major part of webservices. For more in-depth analysis of the original REST, and of HATEOAS, see my </em><a href="https://medium.com/@pakaldebonchamp/follow-up-to-rest-is-the-new-soap-the-origins-of-rest-21c59d243438" class="markup--anchor markup--p-anchor" target="_blank"><em class="markup--em markup--p-em">follow-up article</em></a><em class="markup--em markup--p-em">.</em></p><h3 class="graf graf--h3 graf-after--p">Introduction</h3><p class="graf graf--p graf-after--h3">Some years ago, I developed a new information system in a big telecom company. We had to communicate with an increasing number of web services, exposed by older systems or by business partners.</p><p class="graf graf--p graf-after--p">Needless to say, we had our fair share of <a href="https://en.wikipedia.org/wiki/SOAP" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">SOAP</a> Hell. Abstruse <a href="https://en.wikipedia.org/wiki/Web_Services_Description_Language" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">WSDLs</a>, incompatible libraries, weird bugs… So whenever we could, we advocated — and used — simple Remote Procedure Call protocols: XMLRPC or JSONRPC.</p><p class="graf graf--p graf-after--p">Our first servers and clients for these protocols were pretty basic, limited, fragile. But gradually, we improved them; and with a few hundreds lines of additional code, we achieved the dream: support for different dialects (such as Apache-specific XMLRPC extensions), built-in conversion between python exceptions and hierarchical error codes, separate handling of functional and technical errors, auto-retries for the latter, relevant logging and stats before/after requests, thorough validation of input data…</p><p id="acef" class="graf graf--p graf-after--p">Now we were able to robustly connect to any such API, with just a few lines of code.</p><p id="a7cc" class="graf graf--p graf-after--p">Now we were able to expose any set of functions to a wide audience, to servers and to web browsers, with a few decorators and doc updates.</p><p class="graf graf--p graf-after--p">And when it came to communicating between our different applications (microservice-style), it was a job for our system administrator; software-side, it was almost transparent.</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*s5CjnzON8j3VV2EB2m_AYw.jpeg" alt="image" /></div>Developer resting after a tough 30mn spent integrating an RPC API.<p class="graf graf--p graf-after--figure"><strong class="markup--strong markup--p-strong">Then came REST. <br />REpresentational State Transfer.</strong></p><p class="graf graf--p graf-after--p">A wave of renewal shook the foundations of inter-services communication.</p><p class="graf graf--p graf-after--p">RPC was dead, the future was RESTful: resources living each on its own URL, and manipulated exclusively through HTTP protocol.</p><p id="c6b1" class="graf graf--p graf-after--p">From then on, every API we had to expose or consume became a new challenge; not to say a testimony to insanity.</p><h3 id="bb20" class="graf graf--h3 graf-after--p">What’s the problem with REST?</h3><p id="c43f" class="graf graf--p graf-after--h3">A short example is worth a long talk. Here is a small API, with data types removed for readability.</p><pre class="graf graf--pre graf-after--p">createAccount(username, contact_email, password) -&gt; account_id</pre><pre class="graf graf--pre graf-after--pre">addSubscription(account_id, subscription_type) -&gt; subscription_id</pre><pre class="graf graf--pre graf-after--pre">sendActivationReminderEmail(account_id) -&gt; null</pre><pre class="graf graf--pre graf-after--pre">cancelSubscription(subscription_id, reason, immediate=True) -&gt; null</pre><pre id="c449" class="graf graf--pre graf-after--pre">getAccountDetails(account_id) -&gt; {full data tree}</pre><p id="dafa" class="graf graf--p graf-after--pre">Just add a properly documented hierarchy of exceptions (InvalidParameterError, MissingParameterError, WorkflowError…), with subclasses to identify important cases (eg. AlreadyExistingUsernameError), and you’re good to go.</p><p class="graf graf--p graf-after--p">This API is easy to understand, easy to use, and robust. It is backed by a precise state machine, but the restricted set of available operations keeps users away from nonsensical interactions (like changing the creation date of an Account).</p><p class="graf graf--p graf-after--p"><strong class="markup--strong markup--p-strong">Estimated time to expose this API as a simple RPC service: a few hours.</strong></p><p class="graf graf--p graf-after--p">Ok, now time to go the RESTful way.</p><p class="graf graf--p graf-after--p">No more standards, no more precise specifications. Just a vague “RESTful philosophy”, prone to endless metaphysical debates, and as many ugly workarounds.</p><p class="graf graf--p graf-after--p">How do you map the precise functions above, to a handful of CRUD operations? Is sending the activation reminder email an update on a “must_send_activation_reminder_email” attribute? Or the creation of a “activation_reminder_email resource”? Is it sensible to use DELETE for cancelSubscription() if the subscription remains alive during a grace period, and may be resurrected during that time? How do you split the data tree of getAccountDetails() between endpoints, to respect the data model of REST?</p><p class="graf graf--p graf-after--p">What URL endpoint do you assign to each of your “resources”? Yeah it’s easy, but it has to be done anyway.</p><p class="graf graf--p graf-after--p">How do you express the diversity of error conditions, using the very limited bunch of HTTP codes?</p><p class="graf graf--p graf-after--p">What serialization formats, which specific dialects do you use for input and output payloads?</p><p id="a72f" class="graf graf--p graf-after--p">How exactly do you scatter these simple signatures between HTTP method, URL, query string, payload, headers, and status code?</p><p class="graf graf--p graf-after--p">And you’re gone for hours, reinventing the wheel. Not even a tailored, smart wheel. A broken and fragile wheel, requiring tons of documentation to be understood, and violating specifications without even knowing it.</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*9Rvg-2GBv4R_92aNePXfGA.png" alt="image" /></div><p class="graf graf--p graf-after--figure"><strong class="markup--strong markup--p-strong">How come REST means so much WORK? </strong><br /><em class="markup--em markup--p-em">This is both a paradox, and a shameless pun.</em></p><p class="graf graf--p graf-after--p">Let’s dive further into the artificial problems born from this design philosophy.</p><h3 class="graf graf--h3 graf-after--p">The joy of REST verbs</h3><p id="d235" class="graf graf--p graf-after--h3">Rest is not CRUD, its advocates will ensure that you don’t mix up these two. Yet minutes later they will rejoice that HTTP methods have well defined semantics to create (POST), retrieve (GET), update (PUT/PATCH) and delete (DELETE) resources.</p><p class="graf graf--p graf-after--p">They’ll delight in professing that these few “verbs”are enough to express any operation. Well, of course they are; the same way that a handful of verbs would be enough to express any concept in English: “Today I updated my CarDriverSeat with my body, and created an EngineIgnition, but the FuelTank deleted itself”; being possible doesn’t make it any less awkward. Unless you’re an admirator of the <a href="https://en.wikipedia.org/wiki/Toki_Pona" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">Toki Pona</a> language.</p><p class="graf graf--p graf-after--p">If the point is to be minimalist, at least let it be done right. Do you know why PUT, PATCH, and DELETE have never been implemented in web browser forms? Because they are useless and harmful. We can just use GET for read and POST for write. Or POST exclusively, when HTTP-level caching is unwanted. Other methods will at best get in your way, at worst ruin your day.</p><p class="graf graf--p graf-after--p">You want to use PUT to update your resource? OK, but some Holy Specifications state that the data input has to be equivalent to the representation received via a GET. So what do you do with the numerous read-only parameters returned by GET (creation time, last update time, server-generated token…)? You omit them and violate the PUT principles? You include them anyway, and expect an “HTTP 409 Conflict” if they don’t match server-side values (forcing you to then issue a GET...)? You give them random values and expect servers to ignore them (the joy of silent errors)? Pick your poison, REST clearly has no clue what a read-only attribute it, and this won’t be fixed anytime soon. Meanwhile, a GET is dangerously supposed to return the password (or credit card number) which was sent in a previous POST/PUT; good luck dealing with such write-only parameters too.</p><p class="graf graf--p graf-after--p">Did I forget to mention that PUT also brings dangerous race conditions, where several clients will override each other’s changes, whereas they just wanted to update different fields?</p><p class="graf graf--p graf-after--p">You want to use PATCH to update your resource? Nice, but like 99% of people using this verb, you’ll just send a subset of resource fields in your request payload, hoping that the server properly understands the operation intended (and all its possible side effects); lots of resource parameters are deeply linked or mutually exclusive(ex. it’s either credit card OR paypal token, in a user’s billing info), but RESTful design hides this important information too. Anyway, you’d violate specs once more: PATCH is not supposed to just send a bunch of fields to be overridden. Instead, you’re supposed to provide a “set of instructions” to be applied on the resources. So here you go again, take your paperboard and your coffee mug, you’ll have to decide how to express these instructions. Often with handcrafted specifications, since Not-Invented-Here Syndrome is a de-facto standard in the REST world. (Edit: REST advocates have backpedaled on this subject, with <a href="https://tools.ietf.org/html/rfc7386" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">Json Merge Patch</a>, an alternative to formats like <a href="https://tools.ietf.org/html/rfc6902" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">Json Patch</a>)</p><p id="a45e" class="graf graf--p graf-after--p">You want to DELETE resources? OK, but I hope you don’t need to provide substantial context data; like a PDF scan of the termination request from the user. DELETE prohibits having a payload. A constraint that REST architects often dismiss, since most webservers don’t enforce this rule on the requests they receive. How compatible, anyway, would be a DELETE request with 2 MBs of base64 query string attached? (Edit: the <a href="https://tools.ietf.org/html/rfc2616#section-4.3" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">RFC 2616</a>, indicating that payloads without semantics should be ignored, is now obsolete)</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*YCrFiVDbRL04YQePi566qQ.png" alt="image" /></div><p class="graf graf--p graf-after--figure">REST aficionados<em class="markup--em markup--p-em"> </em>easily profess that “people are doing it wrong” and their APIs are “actually not RESTful”. For exemple, lots of developers use PUT to create a resource directly on its final URL (<em class="markup--em markup--p-em">/myresourcebase/myresourceid</em>), whereas the “good way” (edit: according to many) of doing it is to POST on a parent URL (<em class="markup--em markup--p-em">/myresourcebase</em>), and let the server indicate, with an HTTP “Location” header, the new resource’s URL (edit: it’s not an HTTP redirection though). The good news is: it doesn’t matter. These rigorous principles are like Big Endian vs Little Endian, they occupy philosophers for hours, but have very little impact on real life problems, i.e “getting stuff done”.</p><p id="fa35" class="graf graf--p graf-after--p">By the way… handcrafting URLs is always great fun. Do you know how many implementations properly urlencode() identifiers while building REST urls? Not that many. Get ready for nasty breakages and SSRF/CSRF attacks.</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*IMeQwZ3twaG24DVCPk-obg.jpeg" alt="image" /></div>When you forget to urlencode usernames in 1 of your 30 handcrafted URLs.<h3 id="f779" class="graf graf--h3 graf-after--figure">The joy of REST error handling</h3><p class="graf graf--p graf-after--h3">About every coder is able to make a “nominal case” work. Error handling is one of these features which will decide if your code is robust software, or a huge pile of matchsticks.</p><p class="graf graf--p graf-after--p">HTTP provides a list of error codes out-of-the-box. Great, let’s see that.</p><p class="graf graf--p graf-after--p">Using “HTTP 404 Not Found” to notify about an unexisting resource sounds RESTful as heck, doesn’t it? Too bad: your nginx was misconfigured for 1 hour, so your API consumers got only 404 errors and purged hundreds of accounts, thinking they were deleted….</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*sdlrtm_QU7K0PW6P-vQ2OQ.jpeg" alt="image" /></div>Our customers, after we deleted their gigabytes of kitten images by error.<p id="a463" class="graf graf--p graf-after--figure">Using “HTTP 401 Unauthorized” when a user doesn’t have access credentials to a third-party service sounds acceptable, doesn’t it? However, if an ajax call in your Safari browser gets this error code, it <em class="markup--em markup--p-em">might </em>startle your end customer with a very unexpected password prompt [it did, years ago, YMMV].</p><p class="graf graf--p graf-after--p">HTTP existed long before “RESTful webservices”, and the web ecosystem is filled with assumptions about the meaning of its error codes. Using them to transport application errors is like using milk bottles to dispose of toxic waste: inevitably, one day, there will be trouble.</p><p id="c442" class="graf graf--p graf-after--p">Some standard HTTP error codes are specific to Webdav, others to Microsoft, and the few remaining have definitions so fuzzy that they are of no help. In the end, like most REST users, you’ll probably use random HTTP codes, like “HTTP 418 I’m a teapot” or unassigned numbers, to express your application-specific exceptions. Or you’ll shamelessly return “HTTP 400 Bad Request” for all functional errors, and then invent your own clunky error format, with booleans, integer codes, slugs, and translated messages stuffed into an arbitrary payload. Or you’ll give up altogether on proper error handling; you’ll just return a plain message, in natural language, and hope that the caller will be a human able to analyze the problem, and take action. Good luck interacting with such APIs from an autonomous program.</p><h3 id="ef6b" class="graf graf--h3 graf-after--p">The joy of REST concepts</h3><p class="graf graf--p graf-after--h3">REST has made a career out of boasting about concepts that any service architect in his right mind already respects, or about principles that it doesn’t even follow. Here are some excerpts, grabbed from top-ranked webpages.</p><p id="a9de" class="graf graf--p graf-after--p"><em class="markup--em markup--p-em">REST is a client-server architecture. The client and the server both have a different set of concerns.</em> What a scoop in the software world.</p><p id="d2c1" class="graf graf--p graf-after--p"><em class="markup--em markup--p-em">REST provides a uniform interface between components.</em> Well, like any other protocol does, when it’s enforced as the <em class="markup--em markup--p-em">franca lingua</em> of a whole ecosystem of services.</p><p class="graf graf--p graf-after--p"><em class="markup--em markup--p-em">REST is a layered system. Individual components cannot see beyond the immediate layer with which they are interacting.</em> It sounds like a natural consequence of any well designed, loosely coupled architecture; amazing.</p><p class="graf graf--p graf-after--p">Rest is awesome, because it is STATELESS. Yes there is probably a huge database behind the webservice, but it doesn’t remember the state of the client. Or, well, yes, actually it remember its authentication session, its access permissions… but it’s stateless, nonetheless. Or more precisely, just as stateless as any HTTP-based protocol, like simple RPC mentioned previously.</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*SNHPbOMcF2hUik348lo26A.png" alt="image" /></div><p class="graf graf--p graf-after--figure">With REST, you can leverage the power of HTTP CACHING! Well here is at last one concluding point: a GET request and its cache-control headers are indeed friendly with web caches. That being said, aren’t local caches (Memcached etc.) enough for 99% of web services? Out-of-control caches are dangerous beasts; how many people want to expose their APIs in clear text, so that a Varnish or a Proxy on the road may keep delivering outdated content, long after a resource has been updated or deleted? Maybe even delivering it “forever”, if a configuration mistake once occurred? A system must be secure by default. I perfectly admit that some heavily loaded systems want to benefit from HTTP caching, but it costs much less to expose a few GET endpoints for heavy read-only interactions, than to switch all operations to REST and its dubious error handling.</p><p class="graf graf--p graf-after--p"><em class="markup--em markup--p-em">Thanks to all this, REST has HIGH PERFORMANCE</em>! Are we sure of that? Any API designer knows it: locally, we want fine-grained APIs, to be able to do whatever we want; and remotely, we want coarse-grained APIs, to limit the impact of network round-trips. Here is again a domain in which REST fails miserably. The split of data between “resources”, each instance on its own endpoint, naturally leads to the N+1 Query problem. To get a user’s full data (account, subscriptions, billing information…), you have to issue as many HTTP requests; and you can’t parallelize them, since you don’t know in advance the unique IDs of related resources. This, plus the inability to fetch only part of resource objects, naturally creates nasty bottlenecks.</p><p class="graf graf--p graf-after--p"><em class="markup--em markup--p-em">REST offers better compatibility.</em> How so? Why do so many REST webservices have “/v2/” or “/v3/” in their base URLs then? Backwards and forward compatible APIs are not hard to achieve, with high level languages, as long as simple rules are followed when adding/deprecating parameters. As far as I know, REST doesn’t bring anything new on the subject.</p><p class="graf graf--p graf-after--p"><em class="markup--em markup--p-em">REST is SIMPLE, everyone knows HTTP! </em>Well, everyone knows pebbles too, yet people are happy to have better blocks when building their house. The same way XML is a meta-language, HTTP is a meta-protocol. To have a real application protocol (like “dialects” are to XML), you’ll need to specify lots of things; and you’ll end up with Yet Another RPC Protocol, as if there were not enough already.</p><p id="dc97" class="graf graf--p graf-after--p"><em class="markup--em markup--p-em">REST is so easy, it can be queried from any shell, with CURL! </em>OK, actually, every HTTP-based protocol can be queried with CURL. Even SOAP. Issuing a GET is particularly straightforward, for sure, but good luck writing json or xml POST payloads by hand; people usually use fixture files, or, much more handy, full-fledged API clients instantiated directly in the command line interface of their favorite language.</p><p class="graf graf--p graf--startsWithDoubleQuote graf-after--p"><em class="markup--em markup--p-em">“The client does not need any prior knowledge of the service in order to use it”</em>. This is by far my favourite quote. I’ve found it numerous times, under different forms, especially when the buzzword <a href="https://fr.wikipedia.org/wiki/HATEOAS" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">HATEOAS</a> lurked around; sometimes with some careful (but insufficient) “except” phrases following. Still, I don’t know in which fantasy world these people live, but in this one, a client program is not a colony of ants; it doesn’t browse remote APIs randomly, and then decide how to best handle them, based on pattern recognition or black magic. Quite the opposite; the client has strong expectations on what it means, to PUT this one field to this one URL with this one value, and the server had better respect the semantic which was agreed upon during integration, else all hell might break loose.</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*KUJ2Zl358Q_tS9gijKB49Q.jpeg" alt="image" /></div>When you ask how HATEOAS is supposed to work.<h3 id="a2c9" class="graf graf--h3 graf-after--figure">How to do REST right and quick?</h3><p id="eb47" class="graf graf--p graf-after--h3">Forget about the “right” part. REST is like a religion, no mere mortal will ever grasp the extent of its genius, nor “do it right”.</p><p class="graf graf--p graf-after--p">So the real question is: if you’re forced to expose or consume webservices in a kinda-RESTful way, how to rush through this job, and switch to more constructive tasks <em class="markup--em markup--p-em">asap</em>?</p><p class="graf graf--p graf-after--p"><strong class="markup--strong markup--p-strong"><em class="markup--em markup--p-em">Update</em></strong><em class="markup--em markup--p-em">: it turns out that there are actually lots of “standards” and industrialization efforts for REST, although I had never encountered them personnally (maybe because few people use them?). More information in my </em><a href="https://medium.com/@pakaldebonchamp/follow-up-to-rest-is-the-new-soap-the-origins-of-rest-21c59d243438" class="markup--anchor markup--p-anchor" target="_blank"><em class="markup--em markup--p-em">follow-up article</em></a><em class="markup--em markup--p-em">.</em></p><h4 id="bd4d" class="graf graf--h4 graf-after--p">How to industrialize server-side exposure?</h4><p class="graf graf--p graf-after--h4">Each web framework has its own way of defining URL endpoint. So expect some big dependencies, or a good layer of handwritten boilerplate, to plug your existing API onto your favorite server as a set of REST endpoint.</p><p id="bf1f" class="graf graf--p graf-after--p">Libraries like Django-Rest-Framework automate the creation of REST APIs, by acting as data-centric wrappers above SQL/noSQL schemas. If you just want to make “CRUD over HTTP”, you could be fine with them. But if you want to expose common “do-this-for-me” APIs, with workflows, constraints, complex data impacts and such, you’ll have a hard time bending any REST framework to fit your needs.</p><p class="graf graf--p graf-after--p">Be prepared to connect, one by one, each HTTP method of each endpoint, to the corresponding method call; with a fair share of handmade exception handling, to translate passing-through exceptions into corresponding error codes and payloads.</p><h4 class="graf graf--h4 graf-after--p">How to industrialize client-side integration?</h4><p class="graf graf--p graf-after--h4">From experience, my guess is: you don’t.</p><p id="db8e" class="graf graf--p graf-after--p">For each API integration, you’ll have to browse lengthy docs, and follow detailed recipes on how each of the N possible operations has to be performed.</p><p class="graf graf--p graf-after--p">You’ll have to craft URLs by hand, write serializers and deserializers, and learn how to workaround the ambiguities of the API. Expect quite some trial-and-error before you tame the beast.</p><p class="graf graf--p graf-after--p">Do you know how webservices providers make up for this, and ease adoption?</p><p class="graf graf--p graf-after--p">Simple, they write their own official client implementations.</p><p id="dd39" class="graf graf--p graf-after--p">FOR. EVERY. MAJOR. LANGUAGE. AND. PLATFORM.</p><p class="graf graf--p graf-after--p">I’ve recently dealt with a subscription management system. They provide clients for PHP, Ruby, Python, .NET, iOS, Android, Java… plus some external contributions for Go and NodeJS.</p><p class="graf graf--p graf-after--p">Each client lives in its own Github repository. Each with its own big list of commits, bug tracking tickets, and pull requests. Each with its own usage examples. Each with its own awkward architecture, somewhere between ActiveRecord and RPC proxy.</p><p id="ba55" class="graf graf--p graf-after--p">This is astounding. How much time is spent developing such weird wrappers, instead of improving the real, the valuable, the getting-stuff-done, webservice?</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*VlkAg8dodbaaKp-Po7DrAA.jpeg" alt="image" /></div><em class="markup--em markup--figure-em">Sisyphus developing </em>Yet Another Client for his API.<h3 class="graf graf--h3 graf-after--figure"><strong class="markup--strong markup--h3-strong">Conclusion</strong></h3><p id="c740" class="graf graf--p graf-after--h3">For decades, about every programming language has functioned with the same workflow: sending inputs to a callable, and getting results or errors as output. This worked well. Quite well.</p><p class="graf graf--p graf-after--p">With Rest, this has turned into an insane work of mapping apples to oranges, and praising HTTP specifications to better violate them minutes later.</p><p id="d8d8" class="graf graf--p graf-after--p">In an era where <a href="https://en.wikipedia.org/wiki/Microservices" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">MICROSERVICES</a> are more and more common, how come such an easy task — linking libraries over networks — remains so artificially crafty and cumbersome?</p><p class="graf graf--p graf-after--p">I don’t doubt that some smart people out there will provide cases where REST shines; they’ll showcase their homemade REST-based protocol, allowing to discover and do CRUD operation on arbitrary object trees, thanks to hyperlinks; they’ll explain how the REST design is so brilliant, that I’ve just not read enough articles and dissertations about its concepts.</p><p id="f109" class="graf graf--p graf-after--p">I don’t care. Trees are recognized by their own fruits. What took me a few hours of coding and worked very robustly, with simple RPC, now takes weeks and can’t stop inventing new ways of failing or breaking expectations. Development has been replaced by tinkering.</p><p id="f7e0" class="graf graf--p graf-after--p">Almost-transparent remote procedure call was what 99% people really needed, and existing protocols, as imperfect as they were, did the job just fine. This mass monomania for the lowest common denominator of the web, HTTP, has mainly resulted in a huge waste of time and grey matter.</p><p id="d26d" class="graf graf--p graf-after--p"><strong class="markup--strong markup--p-strong">REST promised simplicity and delivered complexity.<br />REST promised robustness and delivered fragility.<br />REST promised interoperability and delivered heterogeneity.<br />REST is the new SOAP.</strong></p><h3 class="graf graf--h3 graf-after--p">Epilogue</h3><p id="ab8c" class="graf graf--p graf-after--h3">The future could be bright. There are still tons of excellent protocols available, in binary or text format, with or without schema, some leveraging the new abilities of HTTP2… so let’s move on, people. We can’t forever remain in the Stone Age of Webservices.</p><p id="c37e" class="graf graf--p graf-after--p"><em class="markup--em markup--p-em">Edit</em>: many people asked for these alternative protocols, the subject would deserve its own story, but one could have a look at XMLRPC and JSONRPC (simple but quite relevant), or JSONWSP (includes schemas), or language-specific layers like Pyro or RMI when for internal use, or new kids in the block like GraphQL and gRPC for public APIs…</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*gcVvKJVJ9kV596vyXlZiNA.jpeg" alt="image" /></div>“Always finish a rant on a positive note”, momma said.<p class="graf graf--p graf-after--figure">Edited on December 12, 2017:</p><ul class="postList"><li id="f73e" class="graf graf--li graf-after--p">normalize section titles</li><li class="graf graf--li graf-after--li">remove some typos</li><li class="graf graf--li graf-after--li">rectify improper “HTTP redirection” wording after POST operations</li><li id="d45b" class="graf graf--li graf-after--li">add suggestions of alternative protocols</li></ul><p class="graf graf--p graf-after--li">Edited on December 28, 2017:</p><ul class="postList"><li id="ac93" class="graf graf--li graf-after--p">fix mixup between “HTTP methods” and “REST verbs”</li></ul><p class="graf graf--p graf-after--li">Edited on January 7, 2018</p><ul class="postList"><li class="graf graf--li graf-after--p">fix ambiguous wordings</li></ul><p class="graf graf--p graf-after--li">Edited on January 19, 2018</p><ul class="postList"><li class="graf graf--li graf-after--p">fix wrong wording on “PUT vs GET” remarks</li><li class="graf graf--li graf-after--li">precise the notion of “real APIs” (non-CRUD)</li><li class="graf graf--li graf-after--li">mention risk of overrides with PUT</li><li class="graf graf--li graf-after--li">update paragraphs on PATCH and DELETE troubles</li></ul><p id="fa89" class="graf graf--p graf-after--li">Edited on January 19, 2018</p><ul class="postList"><li class="graf graf--li graf-after--p">fix wording around Not-Invented-Here Syndrome</li></ul><p class="graf graf--p graf-after--li">Edited on February 2, 2018</p><ul class="postList"><li class="graf graf--li graf-after--p graf--trailing">add links to follow-up article on The Original REST, in “introduction” and “how to industrialize” chapters</li></ul>


title: Hiring Smart
created_at: 2018-03-22 13:07:13
updated_at: 2018-03-22 13:07:13
mimetype: text/html
language: en
domain_name: inventinghealth.blogspot.fr
http_status: 200
url:
  http://inventinghealth.blogspot.fr/2017/11/hiring-smart.html?lipi=urn:li:page:d_flagship3_pulse_read;hkzJGGiIQaaRjuoISaPmXA==&m=1

content:
  <div class="separator">
  <a href="https://3.bp.blogspot.com/-Reydo9jXo-g/Wgr02Xi1SOI/AAAAAAAAAkE/Ns2RdsNOLOQU51qbDABPRSMqhPg8VtLYACLcBGAs/s1600/Steve%2BJobs.jpg"><img height="160" src="https://3.bp.blogspot.com/-Reydo9jXo-g/Wgr02Xi1SOI/AAAAAAAAAkE/Ns2RdsNOLOQU51qbDABPRSMqhPg8VtLYACLcBGAs/s280/Steve%2BJobs.jpg" width="280" alt="image" style="border: 0px;" /></a></div>
  <div class="MsoNormal">
  <br /></div>
  <div class="MsoNormal">
  <br /></div>
  <div class="MsoNormal">
  As leaders, hiring good people can be the most difficult
  aspect of our jobs. However, good hiring decisions can also yield the most
  reward. When looking to hire folks for your team, it is important to not only
  consider a candidate’s skill set and prior experience, but also what they can
  bring to your team as far as IQ and emotional intelligence.<p></p></div>
  <div class="MsoNormal">
  <br /></div>
  <div class="MsoNormal">
  I know some managers who like to surround themselves with
  yes folks - those who are just going to tell them what they like to hear and
  simply carry out orders given from on high. From my perspective, my success and
  that of my team is a result of having team members who challenge assumptions or
  dismantle the, “but that is how we do it here” refrain in order to get to the
  best possible result. I have seen that the top performing team members are
  those who possess the confidence to challenge the status quo, think
  strategically and speak up in order to put the success of the organization at
  the front of every decision.<p></p></div>
  <div class="MsoNormal">
  <br /></div>
  <div class="MsoNormal">
  When looking to hire new team members, I am drawn to
  innovators. These are folks who can look at a challenge in front of them,
  analyze and synthesize the necessary information, and come up with a plan of
  attack in order to create something new, exciting and profitable for the
  organization. Simply put, they are willing to try new things. This is in
  contrast to team members who operate from a place of “no” and are the first to
  give you five reasons why something cannot be done. I like people who say, “why
  not?”<p></p></div>
  <div class="MsoNormal">
  <br /></div>
  <div class="MsoNormal">
  As we have discussed in previous posts, office politics and
  the emotional needs of team members and colleagues can take up a lot of time
  and energy and be dispiriting for all folks involved. And so, when casting for
  new team members, I like to onboard folks whom I feel will stay above the fray
  and not get embroiled in organizational politics. For them, the top priority is
  a job well-done and one that supports the organization as a whole, rather than
  their own personal advancement. <p></p></div>
  <div class="MsoNormal">
  <br /></div>
  <div class="MsoNormal">
  But hiring smart, innovative people is only half of the
  equation. Keeping them engaged and their skills sharp requires work. The best
  way to foster this type of focus and dedication is to really get to know your
  team members. This is done by developing lasting and meaningful relationships
  with them. Listen to them, find out their passions and concerns, and understand
  how they envision their professional growth and development. This will deepen your bond and breed loyalty. The best team
  members are often the most creative, and providing them with additional outlets
  to shine will drive them even further and make them even more valuable.<p></p></div>








































  <br /><div class="MsoNormal">
  The key to leading a successful organization is developing a
  team that enables members to contribute to the best of their ability. By
  surrounding yourself with smart and driven folks, who are able to be just that
  - smart and driven - you will develop a culture that yields a great deal of
  success.<p></p></div>
  <div></div>

preview_picture:
  https://3.bp.blogspot.com/-Reydo9jXo-g/Wgr02Xi1SOI/AAAAAAAAAkE/Ns2RdsNOLOQU51qbDABPRSMqhPg8VtLYACLcBGAs/w1200-h630-p-k-no-nu/Steve%2BJobs.jpg


title: Dubsmash: Scaling To 200 Million Users With 3 Engineers - Dubsmash Tech Stack | StackShare
url: https://stackshare.io/dubsmash/dubsmash-scaling-to-200-million-users-with-3-engineers
created_at: 2018-03-22 13:07:19
updated_at: 2018-03-22 13:07:19
mimetype: text/html
domain_name: stackshare.io
preview_picture: https://img.stackshare.io/stack/306419/M6yhJjIz5tPrl952.png
http_status: 200
content:
  <p><em>By <a href="https://stackshare.io/tspecht">Tim Specht</a>, Co-Founder and CTO, <a href="https://stackshare.io/dubsmash" target="_blank">Dubsmash</a>.</em></p>
  <hr /><div style="text-align: center;"><a href="https://itunes.apple.com/us/app/dubsmash/id918820076?mt=8"><img src="https://img.stackshare.io/featured_posts/dubsmash_ios.png" alt="Dubsmash iOS" /></a></div>
  <p><a href="http://www.dubsmash.com/">Dubsmash</a> is the global internet phenomenon that lets you be anyone you want to be.  By adding famous movie, television, and internet quotes to your camera, you can create fun, memorable, meaningful videos to share with the world. We’ve reached over 350 million installs, 6 billion videos created so far and tens of thousands of daily downloads across 192 countries—including Jimmy Fallon, Rihanna (RIHANNA!), Cara Delevingne, and an unmanageable backlog of A-list celebrities (along with regular people like you and me) creating dubs and showing the world who they are. (If you haven't used it, check out <a href="https://www.instagram.com/dubsmash/">our Instagram</a> or just click the gif below to see how it works.) Dubsmash is redefining the relationship between people and the content they love.  Oh, and it’s addictive as hell.</p>
  <div style="text-align: center;"><a href="https://www.instagram.com/p/BFgnMLdrPHW/?hl=en&amp;taken-by=dubsmash"><img src="https://img.stackshare.io/featured_posts/dubsmash_xmen.gif" alt="Beast Mode Dubsmash" /></a></div>
  <p>As Co-Founder and CTO my main focus is setting the technical direction and building the engineering team—making sure the product development is going as quickly and smoothly as possible to ensure we put a smile on our users’ faces on a daily basis. </p>
  <h2>The team</h2>
  <p>Our engineering team is <strong>intelligent, scrappy, and experimental. With only three engineers, we have to be!</strong> We have all the necessary skills and capabilities to build core applications in-house, from Android, iOS and frontend development over backend engineering to infrastructure. While we usually try to work in cross-functional teams, we break out into platform-specific tasks sometimes when needed. We usually aim to be an intelligent version of scrappy and don’t try to reinvent the wheel - if there is someone out there offering a hosted solution to one of our problems with great technology under the hood, we are usually all up for it!</p>
  <p>As the engineering team is still quite small, everyone is wearing multiple different hats every day, tackling different problems. While this is certainly a fun and entertaining challenge, every single one of us gets to impact our huge user base in very direct and meaningful ways.</p>
  <p>We just finished relocating the team from Berlin, Germany to New York. We came to the realization a few months ago that we weren’t just a mobile app, but a content-centric platform that needs to live across the web and other applications. You have to radically rethink how you do business, and how you build and architect your systems.</p>
  <p>We’re currently 3 engineers and 12 people in total, but are looking to expand to 9 engineers over the next couple months. Key positions include a VP Engineering, a Senior React Engineer, Product Managers, and iOS / Android Engineers. If you want to join our team drop us an <a href="https://www.dubsmash.com/jobs/">application</a>!</p>
  <h2>How it all started</h2>
  <p>Dubsmash started off as a simple mobile application containing all the funny Quotes you could imagine. We consider a Quote a short, memorable, exciting part of a movie, TV show or any other part of the quoteable internet. Since our initial launch we transformed Dubsmash into an interactive video Quote database that enables you to interact with those Quotes, dub (e.g. lip-sync) them and most importantly—share them with your friends! We are still very actively working on our product to make sure it’s the one-stop-shop to discover, enjoy and share the funny little moments everyone of us loves so much :)</p>
  <p>The app in the beginning was simply downloading a JSON file from <a href="https://stackshare.io/amazon-s3">S3</a> containing the Quote metadata. This file was updated &amp; uploaded to S3 by hand every time we had new content available; we would simply put in the URL to the sound file, the name of the Quote, and re-upload the file. We chose this really simple mechanism to avoid having to bootstrap a custom API to distribute the content to the clients. This turned out to be a great business decision as well, since we didn’t need to worry at all about any scaling issues in the beginning; this became an even better call a couple weeks after the initial launch.</p>
  <p><a href="https://stackshare.io/jenkins">Jenkins</a> ran all our code-pushes on both Android &amp; iOS and was executing custom-written shell scripts utilising xcodebuild and gradle. We used <a href="https://stackshare.io/google-analytics">Google Analytics</a> to track user and market growth and <a href="https://stackshare.io/pushwoosh">Pushwoosh</a> to send out push notifications by hand to promote new content. Even though we didn’t localize our pushes at all, we added custom tags to devices when registering with the service so we could easily target certain markets (e.g. send a push to German users only) which was totally sufficient at the time. </p>
  <p>Since we were always big supporters of an “iterate quickly &amp; learn things” mentality we didn’t even submit our mobile applications to the respective stores until we were tens of thousands of users in. We used our own simple web page to distribute the APK files directly and a separate Enterprise account for iOS devices to distribute the applications to our users (gotta love iOS 8!).  Users would go on our own small, static HTML site, download the APK or IPA file and could run the application right away. Once we pushed updates we had a small alert popping up inside the application that would ask the users to update to the latest version automatically. This enabled us to ship updates multiple times a day and increase the speed of product iterations dramatically. Within minutes of the code being written, our users would already have it on their phones and start using it!</p>
  <h2>From prototype to 200 million users around the globe</h2>
  <div style="text-align: center;"><img src="https://img.stackshare.io/featured_posts/dubsmash_metrics.png" alt="Dubsmash Metrics" /></div>
  <p>Our stack has gone through quite an evolution from shipping the first version two years ago. Not only has Dubsmash seen immense user growth (well over 350 million installations) but also dozens of features to service them. Naturally, this forced us to invest in a more advanced architecture on both the frontend side and the backend.</p>
  <h4>Overview</h4>
  <p>Dubsmash mobile applications are still written natively in <a href="https://stackshare.io/java">Java</a> on <a href="https://stackshare.io/android">Android</a> and <a href="https://stackshare.io/swift">Swift</a> on iOS. After a transition phase of over a year having both <a href="https://stackshare.io/objective-c">Objective-C</a> and Swift side-by-side in our iOS application, we made the switch to Swift-only a couple of months ago. Right after Swift was initially released by Apple in 2014 we tried it out—and were big fans of features like Optionals, Generics and Extensions right away! We found it to have a very nice learning curve and were able to quickly write our code in a much nicer, more concise, and safer way compared to Objective-C and wouldn’t want to miss it in our toolbox nowadays!</p>
  <p>While we are actively observing the developments around <a href="https://stackshare.io/kotlin">Kotlin</a> on Android, we haven’t done the switch yet and will most likely follow a hybrid approach for the next couple of months.</p>
  <p>The backend systems consist of 10 services (and rising …), written primarily in <a href="https://stackshare.io/python">Python</a> with a couple in <a href="https://stackshare.io/go">Go</a> and <a href="https://stackshare.io/nodejs">Node.js</a>. The Python services are written using <a href="https://stackshare.io/django">Django</a> and <a href="https://stackshare.io/django-rest-framework">Django REST Framework</a> since we collected quite a lot of domain-knowledge over the years and Django has proven itself as a reliable tool for us to quickly and reliably build out new services and features. We recently started to add <a href="https://stackshare.io/flask">Flask</a> to our Python stack to support smaller services running on <a href="https://stackshare.io/aws-lambda">AWS Lambda</a> using the (awesome) <a href="https://stackshare.io/zappa">Zappa</a> framework. While we could talk about our stack for days on days, some things that are worth pointing out:</p>
  <h4>Infrastructure</h4>
  <p>A microservice architecture usually requires services to communicate with each other in certain situations; hence, we implemented both simple HTTP-based (e.g. internal APIs) as well as task-based communications channels on top of <a href="https://stackshare.io/celery">Celery</a> and <a href="https://stackshare.io/rabbitmq">RabbitMQ</a> for inter-service communication.  </p>
  <p>We started using <a href="https://stackshare.io/go">Go</a> as the language of choice for high-performance services a little over a year ago and both our authentication services as well as our search-service are running on Go today. 
  In order to build out web applications we use <a href="https://stackshare.io/react">React</a>, <a href="https://stackshare.io/reduxjs">Redux</a>, <a href="https://stackshare.io/apollo">Apollo</a>, and <a href="https://stackshare.io/graphql">GraphQL</a>.</p>
  <p>Since we deployed our very first lines of Python code more than 2 years ago we are happy users of <a href="https://stackshare.io/heroku">Heroku</a>: it lets us focus on building features rather than maintaining infrastructure, has super-easy scaling capabilities, and the support team is always happy to help (in the rare case you need them). We played with the thought of moving our computational needs over to barebone <a href="https://stackshare.io/amazon-ec2">EC2</a> instances or a container-management solution like <a href="https://stackshare.io/kubernetes">Kubernetes</a> a couple of times, but the added costs of maintaining this architecture and the ease-of-use of Heroku have kept us from moving forward so far. Running independent services for different needs of our features gives us the flexibility to choose whatever data storage is best for the given task. Over the years we have added a wide variety of different storages to our stack including <a href="https://stackshare.io/postgresql">Postgres</a> (some <a href="https://stackshare.io/heroku-postgres">hosted by Heroku</a>, some by <a href="https://stackshare.io/amazon-rds-for-mysql">RDS</a>) for storing relational data, <a href="https://stackshare.io/amazon-dynamodb">DynamoDB</a> to store non-relational data like recommendations &amp; user connections, or <a href="https://stackshare.io/redis">Redis</a> to hold pre-aggregated data to speed up API endpoints. Since we started running Postgres ourselves on RDS instead of only using the managed offerings of Heroku, we've gained additional flexibility in scaling our application while reducing costs at the same time. We are also heavily testing <a href="https://stackshare.io/amazon-rds-for-aurora">Aurora</a> in its Postgres-compatible version and will also give the new release of Aurora Serverless a try!</p>
  <h4>Search</h4>
  <p>Although we were using <a href="https://stackshare.io/elasticsearch">Elasticsearch</a> in the beginning to power our in-app search, we moved this part of our processing over to <a href="https://stackshare.io/algolia">Algolia</a> a couple of months ago; this has proven to be a fantastic choice, letting us build search-related features with more confidence and speed.  Elasticsearch is only used for searching in internal tooling nowadays; hosting and running it reliably has been a task that took up too much time for us in the past and fine-tuning the results to reach a great user-experience was also never an easy task for us. With Algolia we can flexibly change ranking methods on the fly and can instead focus our time on fine-tuning the experience within our app.</p>
  <p><a href="https://stackshare.io/memcached">Memcached</a> is used in front of most of the API endpoints to cache responses in order to speed up response times and reduce server-costs on our side.</p>
  <h4>Video upload</h4>
  <p>In the early days features like My Dubs, which enable users to upload their Dubs onto our platform, uploads were going directly against our API, which then stored the files in <a href="https://stackshare.io/amazon-s3">S3</a>. We quickly saw that this approach was crumbling our API performance big time. Since users usually have slower internet connections on their phones, the process of uploading the file took up a huge percentage of the processing time on our end, forcing us to spin up way more machines than we actually needed. We since have moved to a multi-way handshake-like upload process that uses signed URLs vendored to the clients upon request so they can upload the files directly to S3. These files are then distributed, cached, and served back to other clients through <a href="https://stackshare.io/amazon-cloudfront">Cloudfront</a>.</p>
  <h4>Notifications</h4>
  <p>Whenever we need to notify a user of something happening on our platform, whether it’s a personal push notification from one user to another, a new Dub, or a notification going out to millions of users at the same time that new content is available, we rely on <a href="https://stackshare.io/aws-lambda">AWS Lambda</a> to do this task for us. When we started implementing this feature 2 years ago we were luckily able to get early access to the Lambda Beta and are still happy with the way things are running on there, especially given all the easy to set up integrations with other AWS services. Lambda enables us to quickly send out million of pushes within a couple of minutes by acting as a multiplexer in front of <a href="https://stackshare.io/amazon-sns">SNS</a>. We simply call a first Lambda function with a batch of up to 300 push notifications to be sent, which then calls a subsequent Lambda function with 20 pushes each, which then does the call to SNS to actually send out the push notifications. This multi-tier process of sending push notifications enables us to quickly adjust our sending volume while keeping costs &amp; maintenance overhead, on our side, to a bare minimum.</p>
  <h2>Feeds and Trending</h2>
  <p>As already mentioned Dubsmash's very small engineering team has always made a point to spend its resources on solving product questions rather than managing &amp; running underlying infrastructure. We recently started using <a href="https://stackshare.io/stream">Stream</a> for building activity feeds in various forms and shapes. Using Stream we are able to rapidly iterate on features like newsfeeds, trending feeds and more while making sure everything runs smooth and snappy in the background. With their advanced ranking algorithms and their <a href="https://getstream.io/blog/switched-python-go/">recent transition</a> from Python to Go, we are able to change our feeds ranking on the fly and gauge user impact immediately!</p>
  <h2>Scaling in-house analytics to millions of events per minute</h2>
  <p>The engineering team at Dubsmash has always made it a top priority to ship features vs. spending too much time on running and maintaining infrastructure. While this approach benefits us hugely most of the time, we still need to revisit certain architectural decisions from time to time to make sure things continue flowing nicely through our systems.</p>
  <p>In order to accurately measure &amp; track user behaviour on our platform we moved over quickly from the initial solution using <a href="https://stackshare.io/google-analytics">Google Analytics</a> to a custom-built one due to resource &amp; pricing concerns we had. While this does sound complicated, it’s as easy as clients sending JSON blobs of events to <a href="https://stackshare.io/amazon-kinesis">AWS Kinesis</a> from where we use Lambda &amp; <a href="https://stackshare.io/amazon-sqs">SQS</a> to batch and process incoming events and then ingest them into <a href="https://stackshare.io/google-bigquery">Google BigQuery</a>. Once events are stored in BigQuery (which usually only takes a second from the time the client sends the data until it’s available), we can use almost-standard-SQL to simply query for data while Google makes sure that, even with terabytes of data being scanned, query times stay in the range of seconds rather than hours.</p>
  <p>Before ingesting their data into the pipeline, our mobile clients are aggregating events internally and, once a certain threshold is reached or the app is going to the background, sending the events as a JSON blob into the stream. In the past we had workers running that continuously read from the stream and would validate and post-process the data and then enqueue them for other workers to write them to BigQuery. However, we discovered after some time that the custom Python implementation for those workers was dropping up to 5% of the events. This was mostly due to the nature of how reading happens with Kinesis: every stream has multiple shards (ours up to 50!) and each reading client would use a so-called shard iterator to keep track of where it was reading last. Since the used machines could always crash, be recycled, or scaled down, we needed to save those shard iterators in some serialized format to <a href="https://stackshare.io/redis">Redis</a> and share them across machines and process boundaries. Since we had so many shards, every once in awhile we would skip events and hence lose them.</p>
  <p>In order to fix this behavior, we opted to switch the reading to AWS Lambda since it started supporting triggers directly from Kinesis. We were hoping that this would not only fix the lost-event issue but also significantly simplify the infrastructure needed on our side to read from the stream. We went ahead and implemented the Lambda-based approach in such a way that Lambda functions would automatically be triggered for incoming records, pre-aggregate events, and write them back to SQS, from which we then read them, and persist the events to BigQuery. While this approach had a couple of bumps on the road, like re-triggering functions asynchronously to keep up with the stream and proper batch sizes, we finally managed to get it running in a reliable way and are very happy with this solution today. You can read more on the technical details including some code examples <a href="https://engineering.dubsmash.com/implementing-real-time-analytics-using-aws-kinesis-lambda-1ea56f10e473?gi=5ca284375e7a">here</a>.</p>
  <h2>Continuous Integration &amp; Deployment at Dubsmash</h2>
  <p>On the backend side we started using <a href="https://stackshare.io/docker">Docker</a> almost 2 years ago. While in the beginning we used it mostly to ease-up local development, we have since started using it quickly to also run all of our CI &amp; CD pipeline on top of it. This not only enabled us to speed things up drastically locally by using <a href="https://stackshare.io/docker-compose">docker-compose</a> to spin up different services &amp; dependencies and making sure they can talk to each other, but also made sure that we had reliable builds on our build infrastructure and could easily debug problems using the baked images in case anything should go wrong. Using Docker was a slight change in the beginning but we ultimately found that it forces you to think through how your services are composed and structured and thus improves the way you structure your systems. Looking back, this was absolutely the right decision, as running things manually with so many services and so few engineers wouldn’t have been possible at all.</p>
  <p>We use <a href="https://stackshare.io/buildkite">Buildkite</a> to run our tests on top of elastic EC2 workers (which get spun-up using <a href="https://stackshare.io/aws-cloudformation">Cloudformation</a> as needed) and <a href="https://stackshare.io/quay-io">Quay.io</a> to store our Docker images for local development and other later uses. </p>
  <p>Our code is hosted on <a href="https://stackshare.io/github">Github</a>. Once a commit is pushed to one of our many repositories, it’s automatically picked up by our fleet of CI workers. Stylechecks are run on the code as well as an extensive testing suite covering all areas of the service. Coverage data is collected while running the tests so we can keep track of whether a specific change is missing crucial tests.</p>
  <p>Once a pull request is reviewed and  approved, it’s automatically deployed to our staging environment where it’s tested for feature-completeness by both the developer and the PM. Once those manual last checks are done, the commit is automatically deployed to production without any further buttons needing to be pressed or scripts to be executed.</p>
  <p>Our engineering team has always made ownership a crucial part of its culture: developers are responsible for their work from start to end. This includes not only developing but also QAing and deploying the changes. Hence we don’t need a dedicated QA-team or infrastructure team. If anything should go wrong we can easily roll back changes using just one click and revisit a breaking change at any time. Since we are still a small team that is servicing millions of users across the world every single day we've invested heavily in automation. For quite some time we have been running all our deployments completely automatically after they passed CI; we have tight alerting set-up on all our systems and services and can detect performance regressions automatically.</p>
  <p>Not only has the deployment pipeline on the backend side significantly improved, but the deployment process on mobile has become a lot more advanced and powerful over the years. While using <a href="https://stackshare.io/jenkins">Jenkins</a> in the beginning in conjunction with custom-written build-scripts, we since have moved over to use <a href="https://stackshare.io/fastlane">fastlane</a> not only for building our applications but also managing certificates locally &amp; other useful tasks. We also switched over to running our builds on <a href="https://stackshare.io/buddybuild">Buddybuild</a> after using dedicated Mac Minis in our office for some time. The same principle of trying to minimize the amount of time spent on infrastructure-related tasks applies here as well. The one thing that did not change over the years though is the use of <a href="https://stackshare.io/crashlytics">Crashlytics</a> (now <a href="https://stackshare.io/fabric-by-twitter">Fabric</a>): since day one we used the platform for both crash reporting as well as shipping betas and still do so today. Every time a new beta build or even just a feature-branch-based build is finished, it automatically gets uploaded and distributed to either the Dubsmash team only or our external beta tester group.</p>
  <div style="text-align: center;"><a href="https://www.instagram.com/p/3ZDGRBLPK1/"><img src="https://img.stackshare.io/featured_posts/dubsmash_jlo.gif" alt="JLo Dubsmash" /></a></div>
  <h2>Future challenges</h2>
  <p>Dubsmash is continuously investing in new technologies and ways of shipping our products to the users. We are currently looking into more use-cases for serverless architectures, deepening our knowledge of React and related technologies, and starting to analyze Cloudfront logs to gain accurate viewership counts, as well as working on recommender systems to further enhance the ways our users can explore and enjoy the content they love on Dubsmash.</p>
  <p>Since starting Dubsmash almost three years ago, we have been through a crazy journey of development on both the technical as well the team side. Working on making the quotable internet accessible to everyone worldwide is an exciting challenge that has many interesting engineering problems left to solve—ensuring we are excited to come to work every single day!</p>
  <p>If you want to be part of our kick-ass team and join us on our next big step, <a href="https://www.dubsmash.com/jobs/">come join us</a>!</p>
  <br />


title: Comment les entreprises surveillent notre quotidien – Framablog
url: https://framablog.org/2017/10/25/comment-les-entreprises-surveillent-notre-quotidien/
created_at: 2018-03-22 13:07:31
updated_at: 2018-03-22 13:07:31
mimetype: text/html
language: fr-FR
domain_name: framablog.org
http_status: 200
content:
  <p class="text-right"><i class="fa fa-clock-o"> </i>Temps de lecture 75 min</p><div id="wtr-content"><div class="pdfprnt-buttons pdfprnt-buttons-post pdfprnt-top-right"><a href="https://framablog.org/2017/10/25/comment-les-entreprises-surveillent-notre-quotidien/?print=pdf" class="pdfprnt-button pdfprnt-button-pdf" target="_blank"><img src="https://framablog.org/wp-content/plugins/pdf-print/images/pdf.png" alt="image_pdf" title="View PDF" /></a><a href="https://framablog.org/2017/10/25/comment-les-entreprises-surveillent-notre-quotidien/?print=print" class="pdfprnt-button pdfprnt-button-print" target="_blank"><img src="https://framablog.org/wp-content/plugins/pdf-print/images/print.png" alt="image_print" title="Print Content" /></a></div><p>Vous croyez tout savoir déjà sur l’exploitation de nos données personnelles ? Parcourez plutôt quelques paragraphes de ce très vaste dossier…</p>
  <p>Il s’agit du remarquable travail d’enquête procuré <a href="http://crackedlabs.org/en">par Craked Labs</a>, une organisation sans but lucratif qui se caractérise ainsi :</p>
  <p><em>… un institut de recherche indépendant et un laboratoire de création basé à Vienne, en Autriche. Il étudie les impacts socioculturels des technologies de l’information et développe des innovations sociales dans le domaine de la culture numérique.</em></p>
  <p><em>…  Il a été créé en 2012 pour développer l’utilisation participative des technologies de l’information et de la communication, ainsi que le libre accès au savoir et à l’information – indépendamment des intérêts commerciaux ou gouvernementaux. </em><em>Cracked Labs se compose d’un réseau interdisciplinaire et international d’experts dans les domaines de la science, de la théorie, de l’activisme, de la technologie, de l’art, du design et de l’éducation et coopère avec des parties publiques et privées.</em></p>
  <p>Bien sûr, vous connaissez les GAFAM omniprésents aux avant-postes pour nous engluer au point que s’en déprendre complètement est difficile… Mais connaissez-vous Acxiom et LiveRamp, Equifax, Oracle, Experian et TransUnion ? Non ? Pourtant il y a des chances qu’ils nous connaissent bien…</p>
  <p>Il existe une industrie très rentable et très performante des données « client ».</p>
  <p>Dans ce long article documenté et qui déploie une vaste gamme d’exemples dans tous les domaines, vous ferez connaissance avec les coulisses de cette industrie intrusive pour laquelle il semble presque impossible de « passer inaperçu », où notre personnalité devient un profil anonyme mais tellement riche de renseignements que nos nom et prénom n’ont aucun intérêt particulier.</p>
  <p>L’article est long, vous pouvez préférer le lire à votre rythme en format .PDF (2,3 Mo)</p>
  <p><a href="https://framablog.org/wp-content/uploads/2017/10/framablog.org-Comment-les-entreprises-surveillent-notre-quotidien-NEW.pdf">–&gt; framablog.org-Comment-les-entreprises-surveillent-notre-quotidien-NEW</a></p>
  <p>L’équipe de Framalang s’est largement mobilisée pour vous procurer cette longue traduction : Abel, mo, Moutmout, Penguin, Opsylac, Luc, Lyn., hello, Jérochat, QS, Jérochat, Asta, Mannik, roptat, audionuma, Opsylac, Lumibd, linuxmario, goofy et un anonyme.</p>
  <h2 id="des-entreprises-mettent-notre-quotidien-sous-surveillance">Des entreprises mettent notre quotidien sous surveillance</h2>
  <p><strong>Source :</strong> <a href="http://crackedlabs.org/en/corporate-surveillance">http://crackedlabs.org/en/corporate-surveillance</a></p>
  <p><strong>Par Wolfie Christl </strong></p>
  <p><strong>avec les contributions de : Katharina Kopp, Patrick Urs Riechert / </strong><strong>I</strong><strong>llustrations de Pascale Osterwalder.</strong></p>
  <p>Comment des milliers d’entreprises surveillent, analysent et influencent la vie de milliards de personnes. Quels sont les principaux acteurs du pistage numérique aujourd’hui ? Que peuvent-ils déduire de nos achats, de nos appels téléphoniques, de nos recherches sur le Web, de nos <em>Like</em> sur Facebook ? Comment les plateformes en ligne, les entreprises technologiques et les courtiers en données font-ils pour collecter, commercialiser et exploiter nos données personnelles ?</p>
  <p>Ces dernières années, des entreprises dans de nombreux secteurs se sont mises à surveiller, pister et suivre les gens dans <strong>pratiquement tous les aspects de leur vie</strong>. les comportements, les déplacements, les relations sociales, les centres d’intérêt, les faiblesses et les moments les plus intimes de milliards de personnes sont désormais continuellement enregistrés, évalués et analysés en temps réel. L’exploitation des données personnelles est devenue une industrie pesant plusieurs milliards de dollars. Pourtant, de ce pistage numérique omniprésent, on ne voit que <strong>la partie émergée de l’iceberg</strong> ; la majeure partie du processus se déroule dans les coulisses et reste opaque pour la plupart d’entre nous.</p>
  <p><strong>Ce rapport</strong> de Cracked Labs examine le fonctionnement interne et les pratiques en vigueur dans cette industrie des données personnelles. S’appuyant sur des années de recherche et sur un précédent rapport de 2016, l’enquête donne à voir la circulation cachée des données entre les entreprises. Elle cartographie la structure et l’étendue de <strong>l’écosystème numérique de pistage et de profilage</strong> et explore tout ce qui s’y rapporte : les technologies, les plateformes, les matériels ainsi que les dernières évolutions marquantes.</p>
  <p>Le rapport complet (93 pages, en anglais) est disponible <a href="http://crackedlabs.org/dl/CrackedLabs_Christl_CorporateSurveillance.pdf">en téléchargement au format PDF</a>, et cette publication web en présente un résumé <strong>en dix parties</strong>.</p>
  <p><strong>Sommaire</strong></p>
  <ul><li><a href="https://framablog.org/2017/10/25/comment-les-entreprises-surveillent-notre-quotidien/#ch01">I. Analyser les individus</a></li>
  <li><a href="https://framablog.org/2017/10/25/comment-les-entreprises-surveillent-notre-quotidien/#ch02">II. Analyser les individus dans la finance, les assurances et la santé</a></li>
  <li><a href="https://framablog.org/2017/10/25/comment-les-entreprises-surveillent-notre-quotidien/#ch03">III. Collecte et utilisation massives de données client</a></li>
  <li><a href="https://framablog.org/2017/10/25/comment-les-entreprises-surveillent-notre-quotidien/#ch04">IV. Les courtiers en données/ et le marché des données personnelles</a></li>
  <li><a href="https://framablog.org/2017/10/25/comment-les-entreprises-surveillent-notre-quotidien/#ch05">V. La surveillance en temps réel des comportements quotidiens</a></li>
  <li><a href="https://framablog.org/2017/10/25/comment-les-entreprises-surveillent-notre-quotidien/#ch06">VI. Relier, faire correspondre et combiner des profils numériques</a></li>
  <li><a href="https://framablog.org/2017/10/25/comment-les-entreprises-surveillent-notre-quotidien/#ch07">VII. Gérer les clients et les comportements : personnalisation et contrôle</a></li>
  <li><a href="https://framablog.org/2017/10/25/comment-les-entreprises-surveillent-notre-quotidien/#ch08">VIII. Dans les mailles du filet : vie quotidienne, données commerciales et analyse du risque</a></li>
  <li><a href="https://framablog.org/2017/10/25/comment-les-entreprises-surveillent-notre-quotidien/#ch09">IX. Cartographie de l’écosystème du pistage et du profilage commercial</a></li>
  <li><a href="https://framablog.org/2017/10/25/comment-les-entreprises-surveillent-notre-quotidien/#ch10">X. Vers une société du contrôle social numérique généralisé ?</a></li>
  </ul><p>En 2007, Apple a lancé le smartphone, Facebook a atteint les 30 millions d’utilisateurs, et des entreprises de publicité en ligne ont commencé à cibler les internautes en se basant sur des données relatives à leurs préférences individuelles et leurs centres d’intérêt. Dix ans plus tard, <strong>un large ensemble d’entreprises dont le cœur de métier est les données (les data-companies ou entreprises de données en français) a émergé</strong>, on y trouve de très gros acteurs comme Facebook ou Google mais aussi des milliers d’autres entreprises, qui sans cesse, <strong>se partagent et se vendent les unes aux autres des profils numériques</strong>. Certaines entreprises ont commencé à combiner et à relier des données du web et des smartphones avec les données clients et les informations hors-ligne qu’elles avaient accumulées pendant des décennies.</p>
  <p>La machine omniprésente de surveillance en temps réel qui a été développée pour la publicité en ligne s’étend rapidement à d’autres domaines, <strong>de la tarification à la communication politique en passant par le calcul de solvabilité et la gestion des risques</strong>. Des plateformes en ligne énormes, des entreprises de publicité numérique, des courtiers en données et des entreprises de divers secteurs peuvent maintenant identifier, trier, catégoriser, analyser, évaluer et classer les utilisateurs via les plateformes et les matériels. <strong>Chaque clic sur un site web</strong> et chaque mouvement du doigt sur un smartphone peut activer un large éventail de mécanismes de partage de données distribuées entre plusieurs entreprises, ce qui, en définitive, <strong>affecte directement les choix offerts aux gens</strong>. Le pistage numérique et le profilage, en plus de la personnalisation ne sont pas seulement utilisés pour surveiller, mais aussi pour influencer les comportements des personnes.</p>
  <blockquote><p>Vous devez vous battre pour votre vie privée, sinon vous la perdrez.</p>
  <p>Eric Schmidt, <em>Google/Alphabet</em>, 2013</p></blockquote>
  <h3 id="analyser-les-individus"><a id="ch01" class="ta-textContent">Analyser les individus</a></h3>
  <p>Des études scientifiques démontrent que de nombreux aspects de la personnalité des individus peuvent être déduits des données générées par des recherches sur Internet, des historiques de navigation, des comportements lors du visionnage d’une vidéo, des activités sur les médias sociaux ou des achats. Par exemple, des <strong>données personnelles sensibles</strong> telles que l’origine ethnique, les convictions religieuses ou politiques, la situation amoureuse, l’orientation sexuelle, ou l’usage d’alcool, de cigarettes ou de drogues peuvent être assez précisément déduites des <strong><em>Like</em> sur Facebook d’une personne</strong>. L’analyse des profils de réseaux sociaux peut aussi prédire des traits de personnalité comme la stabilité émotionnelle, la satisfaction individuelle, l’impulsivité, la dépression et l’intérêt pour le sensationnel.</p>
  <p><strong>Analyser les <em>like</em> Facebook, les données des téléphones, et les styles de frappe au clavier</strong></p>
  <a href="https://framablog.org/wp-content/uploads/2017/09/image_001.jpg"><img class="wp-image-10392 size-medium" src="https://framablog.org/wp-content/uploads/2017/09/image_001-300x133.jpg" alt="" width="300" height="133" /></a>Pour plus de détails, se référer à Christl and Spiekermann 2016 (p. 14-20). Sources : Kosinski et al 2013, Chittaranjan et al 2011, Epp at al 2011.
  <p>De la même façon, il est possible de déduire certains traits de caractères d’une personne à partir de données sur les sites Web qu’elle a visités, sur les appels téléphoniques qu’elle a passés, et sur les applis qu’elle a utilisées. <strong>L’historique de navigation</strong> peut donner des informations sur la profession et le niveau d’étude. Des chercheurs canadiens ont même réussi à évaluer des états émotionnels comme la confiance, la nervosité, la tristesse ou la fatigue en analysant la <strong>façon dont on tape sur le clavier de l’ordinateur</strong>.</p>
  <h3><a id="ch02" class="ta-textContent">Analyser les individus dans la finance, les assurances et la santé</a></h3>
  <p>Les résultats des méthodes actuelles d’extraction et d’analyse des données reposent sur des <strong>corrélations statistiques</strong> avec un certain niveau de probabilité. Bien qu’ils soient significativement plus fiables que le hasard dans la prédiction des caractéristiques ou des traits de caractère d’un individu, ils ne sont évidemment pas toujours exacts. Néanmoins, ces méthodes sont déjà mises en œuvre pour <strong>trier, catégoriser, étiqueter, évaluer, noter et classer les personnes</strong>, non seulement dans une approche marketing mais aussi pour prendre des décisions dans des domaines riches en conséquence comme la finance, l’assurance, la santé, pour ne citer qu’eux.</p>
  <h4>L’évaluation de crédit basée sur les données de comportement numérique</h4>
  <p>Des startups comme Lenddo, Kreditech, Cignifi et ZestFinance utilisent déjà les données récoltées sur les réseaux sociaux, lors de recherches sur le web ou sur les téléphones portables pour <strong>calculer la solvabilité d’une personne</strong> sans même utiliser de données financières. D’autres se basent sur la façon dont quelqu’un va remplir un formulaire en ligne ou naviguer sur un site web, sur la grammaire et la ponctuation de ses textos, ou sur l’état de la batterie de son téléphone. Certaines entreprises incluent même des données sur les amis avec lesquels une personne est connectée sur un réseau social pour évaluer sa solvabilité.</p>
  <p>Cignifi, qui calcule la solvabilité des clients en fonction <strong>des horaires et de la fréquence des appels téléphoniques</strong>, se présente comme « la plateforme ultime de monétisation des données pour les opérateurs de réseaux mobiles ». De grandes entreprises, notamment MasterCard, le fournisseur d’accès mobile Telefonica, les agences d’évaluation de solvabilité Experian et Equifax, ainsi que le géant chinois de la recherche web Baidu, ont commencé à nouer des partenariats avec des startups de ce genre. L’application à plus grande échelle de services de cette nature est particulièrement en croissance dans les pays du Sud, ainsi qu’auprès de groupes de population vulnérables dans d’autres régions.</p>
  <p>Réciproquement, les données de crédit nourrissent le marketing en ligne. Sur Twitter, par exemple, les annonceurs peuvent cibler leurs publicités en fonction de la <strong>solvabilité supposée des utilisateurs de Twitter</strong> sur la base des données client fournies par le courtier en données Oracle. Allant encore plus loin dans cette logique, <strong>Facebook</strong> a déposé un brevet pour une évaluation de crédit basée sur la cote de solvabilité de vos amis sur un réseau social. Personne ne sait s’ils ont l’intention de réellement mettre en application cette intégration totale des réseaux sociaux, du marketing et de l’évaluation des risques.</p>
  <blockquote><p>On peut dire que toutes les données sont des données sur le crédit, mais il manque encore la façon de les utiliser.</p>
  <p>Douglas Merrill, fondateur de <em>ZestFinance</em> et ancien directeur des systèmes d’informations chez <em>Google</em>, 2012</p></blockquote>
  <h4>Prédire l’état de santé à partir des données client</h4>
  <p>Les entreprises de données et les assureurs travaillent sur des programmes qui utilisent les informations sur la vie quotidienne des consommateurs pour prédire leurs risques de santé. Par exemple, l’assureur <strong>Aviva</strong>, en coopération avec la société de conseil Deloitte, a utilisé des données clients achetées à un courtier en données et habituellement utilisées pour le marketing, pour prédire les <strong>risques de santé individuels</strong> (comme le diabète, le cancer, l’hypertension et la dépression) de 60 000 personnes souhaitant souscrire une assurance.</p>
  <p>La société de conseil McKinsey a aidé à <strong>prédire les coûts hospitaliers</strong> de patients en se basant sur les données clients d’une « grande compagnie d’assurance » santé américaine. En utilisant les informations concernant la démographie, la structure familiale, les achats, la possession d’une voiture et d’autres données, McKinsey a déclaré que ces « renseignements peuvent aider à identifier des sous-groupes stratégiques de patients avant que des périodes de coûts élevés ne surviennent ».</p>
  <p>L’entreprise d’analyse santé <strong>GNS Healthcare</strong> a aussi calculé les risques individuels de santé de patients à partir d’un large champ de données tel que la génétique, les dossiers médicaux, les analyses de laboratoire, les appareils de santé mobiles et le comportement du consommateur. Les sociétés partenaires des assureurs tels que Aetna donnent une note qui identifie « les personnes susceptibles de subir une opération » et proposent de <strong>prédire l’évolution de la maladie et les résultats des interventions</strong>. D’après un rapport sectoriel, l’entreprise « classe les patients suivant le retour sur investissement » que l’assureur peut espérer s’il les cible pour des interventions particulières.</p>
  <p><strong>LexisNexis Risk Solutions</strong>, à la fois, un important courtier en données et une société d’analyse de risque, fournit un produit d’évaluation de santé qui calcule les risques médicaux ainsi que les frais de santé attendus individuellement, en se basant sur une importante quantité de données consommateurs, incluant les achats.</p>
  <h3><a id="ch03" class="ta-textContent">Collecte et utilisation massives de données client</a></h3>
  <p>Les plus importantes plates-formes connectées d’aujourd’hui, <strong>Google et Facebook</strong> en premier lieu, ont des informations détaillées sur la vie quotidienne de milliards de personnes dans le monde. Ils sont les plus visibles, les plus envahissants et, hormis les entreprises de renseignement, les publicitaires en ligne et les services de détection des fraudes numériques, peut-être les acteurs les plus avancés de <strong>l’industrie de l’analyse et des données personnelles</strong>. Beaucoup d’autres agissent en coulisse et hors de vue du public.</p>
  <p>Le cœur de métier de la <strong>publicité en ligne</strong> consiste en un écosystème de milliers d’entreprises concentrées sur la traque constante et le profilage de milliards de personnes. À chaque fois qu’une publicité est affichée sur un site web ou une application mobile, un profil d’utilisateur vient juste d’être vendu au plus gros enchérisseur dans les millisecondes précédentes. Contrairement à ces nouvelles pratiques, les <strong>agences d’analyse de solvabilité</strong> et les <strong>courtiers en données clients</strong> exploitent des données personnelles depuis des décennies. Ces dernières années, ils ont commencé à combiner les très nombreuses données dont ils disposent sur la vie hors-ligne des personnes avec les bases de données utilisateurs et clients utilisées par de grandes plateformes, par des entreprises de publicité et par une multitude d’autres entreprises dans de nombreuses secteurs.</p>
  <p><strong>Les entreprises de données ont des informations détaillées sur des milliards de personnes</strong></p>
  <p><strong>Plateformes en ligne grand public</strong></p>
  <table rules="all"><tbody><tr class="odd"><td align="center">Facebook  dispose
  <p>des profils de</p></td>
  <td align="center">1,9 milliards d’utilisateurs de Facebook
  <p>1,2 milliards d’utilisateurs de Whatsapp</p>
  <p>600 millions d’utilisateurs d’Instagram</p></td>
  </tr><tr class="even"><td align="left">Google dispose
  <p>des profils de</p></td>
  <td align="left">
  <p> 2 milliards  d’utilisateurs d’Android</p>
  <p>+ d’un milliard  d’utilisateurs de Gmail</p>
  <p>+ d’un milliard  d’utilisateurs de Youtube</p>
  </td>
  </tr><tr class="odd"><td align="left">Apple dispose
  <p>des profils de</p></td>
  <td align="left">1 milliard d’utilisateurs d’iOS</td>
  </tr></tbody></table>
  <p><strong>Sociétés d’analyse de la solvabilité</strong></p>
  <table rules="all" cellpadding="3px"><tbody><tr class="odd"><td align="left">Experian</td>
  <td align="left">  dispose des données de solvabilité de  918 millions de personnes
  <p>dispose des données marketing de 700 millions de personnes</p>
  <p>a un “aperçu” sur 2,3 milliards de personnes</p></td>
  </tr><tr class="even"><td align="left">Equifax</td>
  <td align="left">dispose des données de 820 millions de personnes
  <p>et d’1 milliard d’appareils</p></td>
  </tr><tr class="even"><td align="left">TransUnion</td>
  <td align="left">dispose des données d’1 milliard de personnes</td>
  </tr></tbody></table>
  <p><strong>Courtiers en données clients</strong></p>
  <table rules="all"><tbody><tr class="odd"><td rowspan="3" align="left">Acxiom</td>
  <td rowspan="3" align="left">dispose des données de</td>
  <td align="left">700 millions de personnes</td>
  </tr><tr class="even"><td align="left">1 milliard de cookies et d’appareils mobiles</td>
  </tr><tr class="odd"><td align="left">3,7 milliards de profils clients</td>
  </tr><tr class="even"><td rowspan="3" align="left">Oracle</td>
  <td rowspan="2" align="left">dispose des données de</td>
  <td align="left">1 milliard d’utilisateurs d’appareils mobiles</td>
  </tr><tr class="odd"><td align="left">1,7 milliards d’internautes</td>
  </tr><tr class="even"><td align="left">donne accès à</td>
  <td align="left">5 milliards d’identifiants uniques client</td>
  </tr></tbody></table>
  <p><strong>Facebook</strong> utilise au moins 52 000 caractéristiques personnelles pour trier et classer ses 1,9 milliard d’utilisateurs suivant, par exemple, leur orientation politique, leur origine ethnique et leurs revenus. Pour ce faire, la plateforme analyse leurs messages, leurs <em>Likes</em>, leurs partages, leurs amis, leurs photos, leurs mouvements et beaucoup d’autres comportements. De plus, Facebook <strong>acquiert à d’autres entreprises des données sur ses utilisateurs</strong>. En 2013, la plateforme démarre son partenariat avec les quatre courtiers en données Acxiom, Epsilon, Datalogix et BlueKai, les deux derniers ont ensuite été rachetés par le géant de l’informatique Oracle. Ces sociétés aident Facebook à <strong>pister et profiler</strong> ses utilisateurs bien mieux qu’il le faisait déjà en lui fournissant des données collectées en dehors de sa plateforme.</p>
  <h3><a id="ch04" class="ta-textContent">Les courtiers en données et le marché des données personnelles</a></h3>
  <p>Les courtiers en données client ont un rôle clé dans le marché des données personnelles actuel. Ils agrègent, combinent et échangent des quantités astronomiques d’informations sur des populations entières, collectées depuis des sources en ligne et hors-ligne. Les courtiers en données collectent de l’information disponible publiquement et achètent le droit d’utiliser les données clients d’autres entreprises. Leurs données proviennent en général de <strong>sources qui ne sont pas les individus eux-mêmes</strong>, et sont collectées en grande partie sans que le consommateur soit au courant. Ils analysent les données, en font des déductions, construisent des catégories de personnes et fournissent à leurs clients des informations sur des milliers de caractéristiques par individu.</p>
  <p><strong>Dans les profils individuels créés par les courtiers en données</strong>, on trouve non seulement des informations à propos de l’éducation, de l’emploi, des enfants, de la religion, de l’origine ethnique, de la position politique, des loisirs, des centres d’intérêts et de l’usage des médias, mais aussi à propos du comportement en ligne, par exemple les recherches sur Internet. Sont également collectées les données sur les achats, l’usage de carte bancaire, le revenu et l’endettement, la gestion bancaire et les polices d’assurance, la propriété immobilière et automobile, et tout un tas d’autres types d’information. Les courtiers en données calculent et <strong>attribuent aussi des notes aux individus afin de prédire leur comportement futur</strong>, par exemple en termes de stabilité économique, de projet de grossesse ou de changement d’emploi.</p>
  <p><strong>Quelques exemples de données clients fournies par Acxiom et Oracle</strong></p>
  <div class="figure">
  <a href="https://framablog.org/wp-content/uploads/2017/09/image_002.jpg"><img class="wp-image-10431 size-medium" src="https://framablog.org/wp-content/uploads/2017/09/image_002-300x169.jpg" alt="" width="300" height="169" /></a>exemples de données clients fournies par Axciom et Oracle (en avril/mai 2017) – sources : voir le rapport</div>
  <h4>Acxiom, un important courtier en données</h4>
  <p>Fondée en 1969, Acxiom gère l’une des plus grandes bases de données client commerciales au monde. Disposant de milliers de sources, l’entreprise fournit jusqu’à 3000 types de données sur 700 millions de personnes réparties dans de nombreux pays, dont les États-Unis, le Royaume-Uni et l’Allemagne. Née sous la forme d’une entreprise de marketing direct, Acxiom a développé ses bases de données client centralisées à la fin des années 1990.</p>
  <p>À l’aide de son système <strong>Abilitek Link</strong>, l’entreprise tient à jour une sorte de registre de la population dans lequel chaque personne, chaque foyer et chaque bâtiment reçoit un identifiant unique. En permanence, l’entreprise met à jour ses bases de données sur la base d’informations concernant <strong>les naissances et les décès, les mariages et les divorces, les changements de nom ou d’adresse</strong> et aussi bien sûr de nombreuses autres données de profil. Quand on lui demande des renseignements sur une personne, Acxiom peut par exemple donner une appartenance religieuse parmi l’une des 13 retenues comme « catholique », « juif », ou « musulman » et une appartenance ethnique sur quasiment 200 possibles.</p>
  <p>Acxiom commercialise l’accès aux profils détaillés des consommateurs et aide ses clients à trouver, cibler, identifier, analyser, trier, noter et classer les gens. L’entreprise gère aussi directement pour ses propres clients <strong>15 000 bases de données clients</strong> représentant des milliards de profils consommateurs. Les clients d’Acxiom sont des grandes banques, des assureurs, des services de santé et des organismes gouvernementaux. En plus de son activité de commercialisation de données, Acxiom fournit également des services de vérification d’identité, de gestion du risque et de détection de fraude.</p>
  <p><strong>Acxiom et ses fournisseurs de données, ses partenaires et ses services</strong></p>
  <div class="figure">
  <a href="https://framablog.org/wp-content/uploads/2017/09/image_003.jpg"><img class="size-medium wp-image-10432" src="https://framablog.org/wp-content/uploads/2017/09/image_003-300x169.jpg" alt="" width="300" height="169" /></a>Axciom et ses fournisseurs de données, ses partenaires et ses clients (en avril/mai 2017) – sources : voir le rapport</div>

  <p>Depuis l’acquisition en 2014 de la société de données en ligne <strong>LiveRamp</strong>, Acxiom a déployé d’importants efforts pour connecter son dépôt de données – couvrant une dizaine d’années – au monde numérique. Par exemple, Acxiom était parmi les premiers courtiers en données à fournir de l’information additionnelle à Facebook, Google et Twitter afin d’aider ces plateformes à mieux pister ou catégoriser les utilisateurs en fonction de leurs achats mais aussi en fonction d’autres comportements qu’ils ne savaient pas encore eux-mêmes pister.</p>
  <p>LiveRamp de Acxiom <strong>connecte et combine les profils numériques</strong> issus de centaines d’entreprises de données et de publicité. Au centre se trouve son système IdentityLink, qui aide à reconnaître les individus et à relier les informations les concernant, dans les bases de données, les plateformes et les appareils en se basant sur leur adresse de courriel, leur numéro de téléphone, l’identifiant de leur téléphone, ou d’autres identifiants. Bien que l’entreprise assure que les correspondances et les associations se fassent de manière « anonyme » et « dé-identifiée », elle dit aussi pouvoir « connecter des données hors-ligne et en ligne sur un seul identifiant ».</p>
  <p>Parmi les entreprises qui ont récemment été reconnues comme étant des fournisseurs de données par LiveRamp, on trouve les géants de l’analyse de solvabilité <strong>Equifax, Experian et TransUnion</strong>. De plus, de nombreux services de pistage numérique collectant des données par Internet, par les applications mobiles, et même par <strong>des capteurs placés dans le monde réel</strong>, fournissent des données à LiveRamp. Certains d’entre eux utilisent les base de données de LiveRamp, qui permettent aux entreprises « d’acheter et de vendre des données client précieuses ». D’autres fournissent des données afin que Acxiom et LiveRamp puissent reconnaître des individus et relier les informations enregistrées avec les profils numériques d’autres provenances. Mais le plus préoccupant, c’est sans doute le partenariat entre Acxiom et Crossix, une entreprise avec <strong>des données détaillées sur la santé</strong> de 250 millions de consommateurs américains. Crossix figure parmi les fournisseurs de données de LiveRamp.</p>
  <blockquote><p>Quiconque enregistrant des données sur les consommateurs peut potentiellement être un fournisseur de données. »</p>
  <p>Travis May, Directeur général de <em>Acxiom-LiveRamp</em></p></blockquote>
  <h4>Oracle, un géant des technologies de l’information pénètre le marché des données client</h4>
  <p>En faisant l’acquisition de plusieurs entreprises de données telles que Datalogix, BlueKai, AddThis et CrossWise, Oracle, un des premiers fournisseurs de logiciels d’entreprises et de bases de données dans le monde, est également récemment devenu <strong>un des premiers courtiers en données clients</strong>. Dans son « cloud », Oracle rassemble 3 milliards de profils utilisateurs issus de 15 millions de sites différents, les données d’un milliard d’utilisateurs mobiles, des milliards d’historiques d’achats dans des chaînes de supermarchés et 1500 détaillants, ainsi que 700 millions de messages par jour issus des réseaux sociaux, des blogs et des sites d’avis de consommateurs.</p>
  <p><strong>Oracle rassemble des données sur des milliards de consommateurs</strong></p>
  <div class="figure">
  <a href="https://framablog.org/wp-content/uploads/2017/09/image_004.jpg"><img class="size-medium wp-image-10433" src="https://framablog.org/wp-content/uploads/2017/09/image_004-300x169.jpg" alt="" width="300" height="169" /></a>Oracle et ses fournisseurs de données, ses partenaires et ses clients (en avril/mai 2017) – sources : voir le rapport<p class="caption"><em> </em></p>
  </div>
  <p>Oracle catalogue près de 100 fournisseurs de données dans son répertoire de données, parmi lesquels figurent Acxiom et des agences d’analyse de solvabilité telles que <strong>Experian et TransUnion</strong>, ainsi que des entreprises qui tracent les visites de sites Internet, l’utilisation d’applications mobiles et les déplacements, ou qui collectent des données à partir de questionnaires en ligne. <strong>Visa et MasterCard</strong> sont également référencés comme fournisseurs de données. En coopération avec ses partenaires, Oracle fournit plus de 30 000 catégories de données différentes qui peuvent être attribuées aux consommateurs. Réciproquement, l’entreprise partage des données avec Facebook et aide <strong>Twitter</strong> à calculer la solvabilité de ses utilisateurs.</p>
  <p>Le <strong>Graphe d’Identifiants</strong> Oracle détermine et combine des profils utilisateur provenant de différentes entreprises. Il est le « trait d’union entre les interactions » à travers les différentes bases de données, services et appareils afin de « créer un profil client adressable » et « d’identifier partout les clients et les prospects ». D’autres entreprises peuvent envoyer à Oracle, des clés de correspondance construites à partir <strong>d’adresses courriel, de numéros de téléphone, d’adresse postale ou d’autres identifiants</strong>, Oracle les synchronisera ensuite à son « réseau d’identifiants utilisateurs et statistiques, connectés ensemble dans le Graphe d’Identifiants Oracle ». Bien que l’entreprise promette de n’utiliser que des identifiants utilisateurs anonymisés et des profils d’utilisateurs anonymisés, ceux-ci font tout de même référence à certains individus et peuvent être utilisés pour les reconnaître et les cibler dans de nombreux contextes de la vie.</p>
  <p>Le plus souvent, les clients d’Oracle peuvent <strong>télécharger dans le « cloud » d’Oracle leurs propres données concernant : leurs clients, les visites sur leur site ou les utilisateurs d’une application</strong> ; ils peuvent les combiner avec des données issues de nombreuses autres entreprises, puis les transférer et les utiliser en temps réel sur des centaines d’autres plateformes de commerce et de publicité. Ils peuvent par exemple les utiliser pour <strong>trouver et cibler</strong> des personnes sur tous les appareils et plateformes, <strong>personnaliser leurs interactions</strong>, et le cas échéant <strong>mesurer</strong> la réaction des clients qui ont été personnellement ciblés.</p>
  <h3><a id="ch05" class="ta-textContent">La surveillance en temps réel des comportements quotidiens</a></h3>
  <p>Les plateformes en ligne, les fournisseurs de technologies publicitaires, les courtiers en données, et les négociants de toutes sortes d’industries peuvent maintenant surveiller, reconnaître et analyser des individus dans de nombreuses situations. Ils peuvent étudier ce qui intéresse les gens, ce qu’ils ont fait aujourd’hui, ce qu’ils vont sûrement faire demain, et leur valeur en tant que client.</p>
  <h4>Les données concernant les vies en ligne et hors ligne des personnes</h4>
  <p>Une large spectre d’entreprises collecte des informations sur les personnes depuis des décennies. Avant l’existence d’Internet, les agences de crédit et les agences de marketing direct servaient de point d’intégration principal entre les données provenant de différentes sources. Une première étape importante dans <strong>la surveillance systématique des consommateurs</strong> s’est produite <strong>dans les années 1990</strong>, par la commercialisation de bases de données, les programmes de fidélité et l’analyse poussée de solvabilité. Après l’essor d’Internet et de la publicité en ligne <strong>au début des années 2000</strong>, et la montée des réseaux sociaux, des smartphones et de la publicité en ligne <strong>à la fin des années 2000</strong>, on voit maintenant <strong>dans les années 2010</strong> l’industrie des données clients s’intégrer avec le nouvel écosystème de pistage et de profilage numérique.</p>
  <p><strong>Cartographie de la collecte de données clients</strong></p>
  <div class="figure">
  <a href="https://framablog.org/wp-content/uploads/2017/09/image_005.jpg"><img class="size-medium wp-image-10434" src="https://framablog.org/wp-content/uploads/2017/09/image_005-300x169.jpg" alt="" width="300" height="169" /></a>Différents niveaux, domaines et sources de collecte de données clients par les entreprises</div>

  <p>De longue date, les courtiers en données clients et d’autres entreprises acquièrent des informations sur <strong>les abonnés à des journaux et à des magazines</strong>, sur les membres de clubs de lecture et de ciné-clubs, sur les acheteurs de catalogues de vente par correspondance, sur les personnes réservant dans les agences de voyage, sur les participants à des séminaires et à des conférences, et sur les consommateurs qui remplissent les cartes de garantie pour leurs achats. La collecte de données d’achats grâce à des <strong>programmes de fidélité</strong> est, de ce point de vue, une pratique établie depuis longtemps.</p>
  <p>En complément des données provenant directement des individus, sont utilisées, par exemple les informations concernant <strong>le type quartiers et d’immeubles</strong> où résident les personnes afin de décrire, étiqueter, trier et catégoriser ces personnes. De même, les entreprises utilisent maintenant des profils de consommateurs s’appuyant sur les métadonnées concernant <strong>le type de sites Internet fréquentés</strong>, les vidéos regardées, les applications utilisées et les zones géographiques visitées. Au cours de ces dernières années, l’échelle et le niveau de détail des flux de données comportementales générées par toutes sortes d’activités du quotidien, telles que l’utilisation d’Internet, des réseaux sociaux et des équipements, ont rapidement augmenté.</p>
  <blockquote><p>Ce n’est pas un téléphone, c’est mon mouchard /<em>pisteur</em>/. New York Times, 2012</p></blockquote>
  <h4>Un pistage et un profilage omniprésents</h4>
  <p>Une des principales raisons pour lesquelles le pistage et le profilage commerciaux sont devenus si généralisés c’est que quasiment tous les sites Internet, les fournisseurs d’applications mobiles, ainsi que de nombreux vendeurs d’équipements, partagent activement des données comportementales avec d’autres entreprises.</p>
  <p>Il y a quelques années, la plupart des sites Internet ont commencé à inclure dans leur propre site <strong>des services de pistage qui transmettent des données à des tiers</strong>. Certains de ces services fournissent des fonctions visibles aux utilisateurs. Par exemple, lorsqu’un site Internet montre un bouton Facebook « j’aime » ou une vidéo YouTube encapsulée, des données utilisateur sont transmises à Facebook ou à Google. En revanche, de nombreux autres services ayant trait à la publicité en ligne demeurent cachés et, pour la plupart, ont pour seul objectif de collecter des données utilisateur. <strong>Le type précis de données utilisateur</strong> partagées par les éditeurs numériques et la façon dont les tierces parties utilisent ces données reste largement méconnus. Une partie de ces activités de pistage peut être analysée par n’importe qui ; par exemple en installant l’extension pour navigateur Lightbeam, il est possible de visualiser le réseau invisible des trackers des parties tierces.</p>
  <p>Une étude récente a examiné un million de sites Internet différents et a trouvé plus de <strong>80 000 services tiers</strong> recevant des données concernant les visiteurs de ces sites. Environ 120 de ces services de pistage ont été trouvés sur plus de 10 000 sites, et six entreprises surveillent les utilisateurs sur plus de 100 000 sites, dont Google, Facebook, Twitter et BlueKai d’Oracle. Une étude sur 200 000 utilisateurs allemands visitant 21 millions de pages Internet a montré que les trackers tiers étaient présents <strong>sur 95 %</strong> des pages visitées. De même, la plupart des applications mobiles partagent des informations sur leurs utilisateurs avec d’autres entreprises. Une étude menée en 2015 sur les applications à la mode en Australie, en Allemagne et aux États-Unis a trouvé qu’<strong>entre 85 et 95 % des applications gratuites</strong>, et même <strong>60 % des applications payantes</strong> se connectaient à des tierces parties recueillant des données personnelles.</p>
  <p>Une <strong>carte interactive des services cachés de pistage tiers</strong> sur les applications Android créée par des chercheurs européens et américains peut être explorée à l’adresse suivante : <a class="uri" href="https://haystack.mobi/panopticon/">haystack.mobi/panopticon</a></p>
  <div class="figure">
  <a href="https://framablog.org/wp-content/uploads/2017/09/image_006.jpg"><img class="size-medium wp-image-10435" src="https://framablog.org/wp-content/uploads/2017/09/image_006-300x171.jpg" alt="" width="300" height="171" /></a>Copie d’écran du ISCI Haystack Panopticon disponible sur haystack.mobi/panopticon, © mis à disposition gracieusement par ISCI, Université de Berkeley<p class="caption">
  </p></div>
  <p>En matière d’appareils, ce sont peut-être <strong>les smartphones</strong> qui actuellement contribuent le plus au recueil omniprésent données. L’information enregistrée par les téléphones portables fournit un aperçu détaillé de la personnalité et de la vie quotidienne d’un utilisateur. Puisque les consommateurs ont en général besoin d’un <strong>compte Google, Apple ou Microsoft</strong> pour les utiliser, une grande partie de l’information est déjà reliée à l’identifiant d’une des principales plateformes.</p>
  <p><strong>La vente de données utilisateurs</strong> ne se limite pas aux éditeurs de sites Internet et d’applications mobiles. Par exemple, l’entreprise d’intelligence commerciale SimilarWeb reçoit des données issues non seulement de centaines de milliers de sources de mesures directes depuis les sites et les applications, mais aussi des logiciels de bureau et des extensions de navigateur. Au cours des dernières années, de nombreux autres appareils avec des capteurs et des connexions réseau ont intégré la vie de tous les jours, <strong>cela va des liseuses électroniques et autres accessoires connectés aux télés intelligentes, compteurs, thermostats, détecteurs de fumée, imprimantes, réfrigérateurs, brosses à dents, jouets et voitures</strong>. À l’instar des smartphones, ces appareils donnent aux entreprises un accès sans précédent au comportement des consommateurs dans divers contextes de leur vie.</p>
  <h4>Publicité programmatique et technologie marketing</h4>
  <p>La plus grande partie de la publicité numérique prend aujourd’hui la forme d’enchères en temps réel hautement automatisées entre les éditeurs et les publicitaires ; on appelle cela la <strong>publicité programmatique</strong>. Lorsqu’une personne se rend sur un site Internet, les données utilisateur sont envoyées à une kyrielle de services tiers, qui cherchent ensuite à reconnaître la personne et extraire l’information disponible sur le profil. Les publicitaires souhaitant livrer une publicité à cet individu, en particulier du fait de certains attributs ou comportements, placent une enchère. En quelques millisecondes, le publicitaire le plus offrant gagne et place la pub. Les publicitaires peuvent de la même façon <strong>enchérir sur les profils utilisateurs</strong> et le placement de publicités au sein des applications mobiles.</p>
  <p>Néanmoins, ce processus ne se déroule pas, la plupart du temps, entre <strong>les éditeurs et les publicitaires</strong>. L’écosystème est constitué d’une pléthore de toutes sortes de données différentes et de fournisseurs de technologies en interaction les uns avec les autres, parmi lesquels des réseaux publicitaires, des marchés publicitaires, des plateformes côté vente et des plateformes côté achat. Certains se spécialisent dans le pistage et la publicité suivant les résultats de recherche, dans la publicité généraliste sur Internet, dans la pub sur mobile, dans les pubs vidéos, dans les pubs sur les réseaux sociaux, ou dans les pubs au sein des jeux. D’autres se concentrent sur l’approvisionnement en données, en analyse ou en services de personnalisation.</p>
  <p>Pour tracer le portrait des utilisateurs d’Internet et d’applications mobiles, toutes les parties impliquées ont développé des méthodes sophistiquées pour accumuler, regrouper et relier les informations provenant de différentes entreprises afin <strong>de suivre les individus dans tous les aspects de leur vie</strong>. Nombre d’entre elles recueillent et utilisent des profils numériques sur des centaines de millions de consommateurs, leurs navigateurs Internet et leurs appareils.</p>
  <h4>De nombreux secteurs rejoignent l’économie de pistage</h4>
  <p>Au cours de ces dernières années, des entreprises dans plusieurs secteurs ont commencé à partager et à utiliser à très grande échelle des données concernant leurs utilisateurs et clients.</p>
  <p>La plupart des <strong>détaillants</strong> vendent des formes agrégées de <strong>données sur les habitudes d’achat</strong> auprès des entreprises d’études de marchés et des courtiers en données. Par exemple, l’entreprise de données IRI accède aux données de plus de 85 000 magasins (‘alimentation, grande distribution, médicaments, d’alcool et d’animaux de compagnie, magasin à prix unique et magasin de proximité). Nielsen déclare recueillir les informations concernant les ventes de 900 000 magasins dans le monde dans plus de 100 pays. L’enseigne de grande distribution britannique <strong>Tesco</strong> sous-traite son programme de fidélité et ses activités en matière de données auprès d’une filiale, Dunnhumby, dont le slogan est « transformer les données consommateur en régal pour le consommateur ». Lorsque Dunnhumby a fait l’acquisition de l’entreprise technologique de publicité allemande Sociomantic, il a été annoncé que Dunnhumby « conjuguerait ses connaissances étendues au sujet sur les préférences d’achat de 400 millions de consommateurs » avec les « données en temps réel de plus de 700 millions de consommateurs en ligne » de Sociomantic afin personnaliser et d’évaluer les publicités.</p>
  <p><strong>Cartographie de l’écosystème du pistage et du profilage commercial</strong></p>
  <div class="figure">
  <a href="https://framablog.org/wp-content/uploads/2017/09/image_007.jpg"><img class="size-medium wp-image-10437" src="https://framablog.org/wp-content/uploads/2017/09/image_007-300x204.jpg" alt="" width="300" height="204" /></a>Aujourd’hui de nombreux industriels dans divers secteurs ont rejoint l’écosystème de pistage et de profilage numérique, aux cotés des grandes plateformes en ligne et des professionnels de l’analyse des données clients.<p class="caption">
  </p></div>
  <p>De grands <strong>groupes médiatiques</strong> sont aussi fortement intégrés dans l’écosystème de pistage et de profilage numérique actuel. Par exemple, Time Inc. a fait l’acquisition d’Adelphic, une importante société de pistage et de technologies publicitaires multi-support, mais aussi de Viant, une entreprise qui déclare avoir accès à plus de 1,2 milliard d’utilisateurs enregistrés. La plateforme de streaming <strong>Spotify</strong> est un exemple célèbre d’éditeur numérique qui vend les données de ses utilisateurs. Depuis 2016, la société partage avec le département données du géant du marketing WPP des informations à propos de ce que les utilisateurs écoutent, sur leur humeur ainsi que sur leur comportement et leur activité en termes de playlist. WPP a maintenant accès « aux préférences et comportements musicaux des 100 millions d’utilisateurs de Spotify ».</p>
  <p>De nombreuses grandes <strong>entreprises de télécom et de fournisseurs d’accès Internet</strong> ont fait l’acquisition d’entreprises de technologies publicitaires et de données. Par exemple, Millennial Media, une filiale d’<strong>AOL-Verizon</strong>, est une plateforme de publicité mobile qui collecte les données de plus de 65 000 applications de différents développeurs, et prétend avoir accès à environ 1 milliard d’utilisateurs actifs distincts dans le monde. <strong>Singtel</strong>, l’entreprise de télécoms basée à Singapour, a acheté Turn, une plateforme de technologies publicitaires qui donne accès aux distributeurs à 4,3 milliards d’appareils pouvant être ciblés et d’identifiants de navigateurs et à 90 000 attributs démographiques, comportementaux et psychologiques.</p>
  <p>Comme les compagnies aériennes, les hôtels, les commerces de détail et les entreprises de beaucoup d’autres secteur, le secteur des <strong>services financiers</strong> a commencé à agréger et utiliser des données clients supplémentaires grâce à des programmes de fidélité dans les années 80 et 90. Les entreprises dont la clientèle cible est proche et complémentaires partagent depuis longtemps certaines de leurs données clients entre elles, un processus souvent géré par des intermédiaires. Aujourd’hui, l’un de ces intermédiaires est Cardlytics, une entreprise qui gère des programmes de fidélité pour plus de 1 500 institutions financières, telles que <strong>Bank of America</strong> et MasterCard. Cardlytics s’engage auprès des institutions financières à « générer des nouvelles sources de revenus en exploitant le pouvoir de [leurs] historiques d’achat ». L’entreprise travaille aussi en partenariat avec LiveRamp, la filiale d’Acxiom qui combine les données en ligne et hors ligne des consommateurs.</p>
  <p>Pour <strong>MasterCard</strong>, la vente de produits et de services issus de l’analyse de données pourrait même devenir son <strong>cœur de métier</strong>, sachant que la production d’informations, dont la vente de données, représentent une part considérable et croissante de ses revenus. <strong>Google</strong> a récemment déclaré qu’il capture environ 70 % des transactions par carte de crédit aux États-Unis via « partenariats tiers » afin de tracer les achats, mais n’a pas révélé ses sources.</p>
  <blockquote><p>Ce sont vos données. Vous avez le droit de les contrôler, de les partager et de les utiliser comme bon vous semble.</p>
  <p>C’est ainsi que le courtier en données Lotame s’adresse sur son site Internet à ses entreprises clientes en 2016.</p></blockquote>
  <h3><a id="ch06" class="ta-textContent">Relier, faire correspondre et combiner des profils numériques</a></h3>
  <p>Jusqu’à récemment, les publicitaires, sur Facebook, Google ou d’autres réseaux de publicité en ligne, ne pouvaient cibler les individus qu’en analysant leur comportement en ligne. Mais depuis quelques années, grâce aux moyens offerts par les entreprises de données, les profils numériques issus de différentes plateformes, de différentes bases de données clients et du monde de la publicité en ligne peuvent désormais être associés et combinés entre eux.</p>
  <h4>Connecter les identités en ligne et hors ligne</h4>
  <p>Cela a commencé en 2012, quand Facebook a permis aux entreprises de télécharger leurs propres <strong>listes d’adresses de courriel et de numéros de téléphone</strong> sur la plateforme. Bien que les adresses et numéros de téléphone soient convertis en pseudonyme, Facebook est en mesure de relier directement ces données client provenant d’entreprises tierces avec ses propres comptes utilisateur. Cela permet par exemple aux entreprises de <strong>trouver et de cibler très précisément sur Facebook</strong> les personnes dont elles possèdent les adresses de courriel ou les numéros de téléphone. De la même façon, il leur est éventuellement possible d’exclure certaines personnes du ciblage de façon sélective, ou de déléguer à la plateforme le repérage des personnes qui ont des caractéristiques, centre d’intérêts, et comportements communs.</p>
  <p>C’est une <strong>fonctionnalité puissante</strong>, peut-être plus qu’il n’y paraît au premier abord. Elle permet en effet aux entreprises d’associer systématiquement leurs données client avec les données Facebook. Mieux encore, d’autres publicitaires et marchands de données peuvent également synchroniser leurs bases avec celles de la plateforme et en exploiter les ressources, ce qui équivaut à fournir une sorte de <strong>télécommande en temps réel pour manipuler l’univers des données Facebook</strong>. Les entreprises peuvent maintenant capturer en temps réel des données comportementales extrêmement précises comme un clic de souris sur un site, le glissement d’un doigt sur une application mobile ou un achat en magasin, et demander à Facebook de trouver et de cibler aussitôt les personnes qui viennent de se livrer à ces activités. Google et Twitter ont mis en place des fonctionnalités similaires en 2015.</p>
  <h4>Les plateformes de gestion de données</h4>
  <p>De nos jours, la plupart des entreprises de technologie publicitaire croisent en continu plusieurs sources de codage relatives aux individus. Les <strong>plateformes de gestion de données</strong> permettent aux entreprises de tous les domaines <strong>d’associer et de relier leurs propres données clients</strong>, comprenant des informations en temps réel sur les achats, les sites web consultés, les applications utilisées et les réponses aux courriels, avec des profils numériques fournis par une multitude de fournisseurs tiers de données. Les données associées peuvent alors être analysées, triées et classées, puis utilisées pour envoyer un message donné à des personnes précises via des réseaux ou des appareils particuliers. Une entreprise peut, par exemple, cibler un groupe de clients existants ayant visité une page particulière sur son site ; ils sont alors <strong>perçus comme pouvant devenir de bons clients</strong>, bénéficiant alors de contenus personnalisés ou d’une réduction, que ce soit sur Facebook, sur une appli mobile ou sur le site même de l’entreprise.</p>
  <p>L’émergence des plateformes de gestion de données <strong>marque un tournant</strong> dans le développement d’un envahissant pistage des comportements d’achat. Avec leur aide, les entreprises dans tous les domaines et partout dans le monde peuvent <strong>très facilement associer et relier</strong> les données qu’elles ont collectées depuis des années sur leurs clients et leurs prospects avec les milliards de profils collectés dans le monde numérique. Les principales entreprises faisant tourner ces plateformes sont : Oracle, Adobe, Salesforce (Krux), Wunderman (KBM Group/Zipline), Neustar, Lotame et Cxense.</p>
  <blockquote><p>Nous vous afficherons des publicités basées sur votre identité, mais cela ne veut pas dire que vous serez identifiable.</p>
  <p>Erin Egan, Directeur de la protection de la vie privée chez Facebook, 2012</p></blockquote>
  <h4>Identifier les gens et relier les profils numériques</h4>
  <p>Pour surveiller et suivre les gens dans les différentes situations de leur vie, pour leur associer des profils et toujours les reconnaître comme un seul et même individu, les entreprises amassent une grande variété de types de données qui, en quelque sorte, les identifient.</p>
  <p>Parce qu’il est ambigu, le nom d’une personne a toujours été un mauvais identifiant pour un recueil de données. <strong>L’adresse postale</strong>, par contre, a longtemps été et est encore, une indication clé qui permet d’associer et de relier des données de différentes origines sur les consommateurs et leur famille. Dans le monde numérique, les identifiants les plus pertinents pour relier les profils et les comportements sur les différentes bases de données, plateformes et appareils sont : <strong>l’adresse de courriel, le numéro de téléphone</strong>, et le code propre à chaque smartphone ou autre appareil.</p>
  <p>Les <strong>identifiants de compte utilisateur</strong> sur les immenses plateformes comme Google, Facebook, Apple et Microsoft jouent aussi un rôle important dans le suivi des gens sur Internet. Google, Apple, Microsoft et Roku attribuent un <strong>« identifiant publicitaire »</strong> aux individus, qui est maintenant largement utilisé pour faire correspondre et relier les données d’appareils tels que les smartphones avec les autres informations issues du monde numérique. Verizon utilise son propre identifiant pour pister les utilisateurs sur les sites web et les appareils. Certaines grandes entreprises de données comme <strong>Acxiom, Experian et Oracle</strong> disposent, au niveau mondial, d’un identifiant unique par personne qu’elles utilisent pour relier des dizaines d’années de données clients avec le monde numérique. Ces <strong>identifiants d’entreprise</strong> sont constitués le plus souvent de deux identifiants ou plus qui sont attachés à différents aspects de la vie en ligne et hors ligne d’une personne et qui peuvent être d’une certaine façon reliés l’un à l’autre.</p>
  <p><strong>Des Identifiants utilisés pour pister les gens sur les sites web, les appareils et les lieux de vie</strong></p>
  <div class="figure">
  <a href="https://framablog.org/wp-content/uploads/2017/09/image_008.jpg"><img class="size-medium wp-image-10479" src="https://framablog.org/wp-content/uploads/2017/09/image_008-300x169.jpg" alt="" width="300" height="169" /></a>Comment les entreprises identifient les consommateurs et les relient à des informations de profils – sources : voir le rapport<p class="caption">
  </p></div>
  <p><strong>Les entreprises de pistage</strong> utilisent également des identifiants plus ou moins temporaires, comme les cookies qui sont attachés aux utilisateurs surfant sur le web. Depuis que les utilisateurs peuvent ne pas autoriser ou supprimer les cookies dans leur navigateur, elles ont développé des méthodes sophistiquées permettant de calculer une empreinte numérique unique basée sur diverses caractéristiques du navigateur et de l’ordinateur d’une personne. De la même manière, les entreprises amassent les empreintes sur les appareils tels que les smartphones. Les cookies et les empreintes numériques sont <strong>continuellement synchronisés</strong> entre les différents services de pistage et ensuite reliés à des identifiants plus permanents.</p>
  <p>D’autres entreprises fournissent des services de pistage multi-appareils qui utilisent le <em>machine learning</em> (<a href="https://fr.wikipedia.org/wiki/Apprentissage_automatique">voir Wikipédia)</a> pour analyser de grandes quantités de données. Par exemple, <strong>Tapad</strong>, qui a été acheté par le géant des télécoms norvégiens Telenor, analyse les données de deux milliards d’appareils dans le monde et utilise des modèles basés sur les comportements et les relations pour trouver la probabilité qu’un ordinateur, une tablette, un téléphone ou un autre appareil appartienne à la même personne.</p>
  <h4 id="un-profilage-anonyme">Un profilage « anonyme » ?</h4>
  <p>Les entreprises de données suppriment les noms dans leurs profils détaillés et utilisent des fonctions de hachage (<a href="https://fr.wikipedia.org/wiki/Fonction_de_hachage">voir Wikipedia)</a> pour convertir les adresses de courriel et les numéros de téléphone en <strong>code alphanumérique</strong> comme “e907c95ef289”. Cela leur permet de déclarer sur leur site web et dans leur politique de confidentialité qu’elles recueillent, partagent et utilisent uniquement des données clients « anonymisées » ou « dé-identifiées ».</p>
  <p>Néanmoins, comme la plupart des entreprises utilisent les mêmes process déterministes pour calculer ces codes alphanumériques, on devrait les considérer comme des pseudonymes qui sont en fait bien plus pratiques que les noms réels pour identifier les clients dans le monde numérique. Même si une entreprise partage des profils contenant uniquement des adresses de courriels ou des numéros de téléphones chiffrés, <strong>une personne peut toujours être reconnue</strong> dès qu’elle utilise un autre service lié avec la même adresse de courriel ou le même numéro de téléphone. De cette façon, bien que chaque service de pistage impliqué ne connaissent qu’une partie des informations du profil d’une personne, les entreprises peuvent <strong>suivre et interagir avec les gens</strong> au niveau individuel via les services, les plateformes et les appareils.</p>
  <blockquote><p>Si une entreprise peut vous suivre et interagir avec vous dans le monde numérique – et cela inclut potentiellement votre téléphone mobile ou votre télé – alors son affirmation que vous êtes anonyme n’a aucun sens, en particulier quand des entreprises ajoutent de temps à autre des informations hors-ligne aux données en ligne et masquent simplement le nom et l’adresse pour rendre le tout « anonyme ».</p>
  <p>Joseph Turow, spécialiste du marketing et de la vie privée dans son livre « The Daily You », 2011</p></blockquote>
  <h3><a id="ch07" class="ta-textContent">Gérer les clients et les comportements : personnalisation et évaluation</a></h3>
  <p>S’appuyant sur les méthodes sophistiquées d’interconnexion et de combinaison de données entre différents services, les entreprises de tous les secteurs d’activité peuvent utiliser les <strong>flux de données comportementales actuellement omniprésents</strong> afin de surveiller et d’analyser une large gamme d’activités et de comportements de consommateurs pouvant être pertinents vis-à-vis de leurs intérêts commerciaux.</p>
  <p>Avec l’aide des vendeurs de données, les entreprises tentent d’entrer en contact avec les clients tout au long de leurs parcours autant de fois que possible, à travers les achats en ligne ou en boutique, le publipostage, les pubs télé et les appels des centres d’appels. Elles tentent <strong>d’enregistrer et de mesurer chaque interaction</strong> avec un consommateur, y compris sur les sites Internet, plateformes et appareils qu’ils ne contrôlent pas eux-mêmes. Elles peuvent recueillir en continu une abondance de données concernant leurs clients et d’autres personnes, les améliorer avec des informations provenant de tiers, et utiliser les profils améliorés au sein de l’écosystème de commercialisation et de technologie publicitaire. À l’heure actuelle, les plateformes de gestion des données clients permettent <strong>la définition de jeux complexes de règles</strong> qui régissent la façon de réagir automatiquement à certains critères tels que des activités ou des personnes données ou une combinaison des deux.</p>
  <p>Par conséquent, les <strong>individus ne savent jamais</strong> si leur comportement a déclenché une réaction de l’un de ces réseaux de pistage et de profilage constamment mis à jour, interconnectés et opaques, ni, le cas échéant, comment cela influence les options qui leur sont proposées à travers les canaux de communication et dans les situations de vie.</p>
  <p><strong>Tracer, profiler et influencer les individus en temps réel</strong></p>
  <div class="figure">
  <a href="https://framablog.org/wp-content/uploads/2017/09/image_009.jpg"><img class="size-medium wp-image-10480" src="https://framablog.org/wp-content/uploads/2017/09/image_009-300x169.jpg" alt="" width="300" height="169" /></a>Chaque interaction enclenche un large éventail de flux de données entre de nombreuses entreprises.<p class="caption">
  </p></div>
  <h4>Personnalisation en série</h4>
  <p>Les flux de données échangés entre les publicitaires en ligne, les courtiers en données, et les autres entreprises ne sont pas seulement utilisés pour diffuser de la publicité ciblée sur les sites web ou les applis mobiles. Ils sont de plus en plus utilisés pour <strong>personnaliser les contenus, les options et les choix</strong> offerts aux consommateurs sur le site d’une entreprise par exemple. Les entreprises de technologie des données, comme par exemple Optimizely, peuvent aider à personnaliser un site web spécialement pour les personnes qui le visitent pour la première fois, en s’appuyant sur les profils numériques de ces visiteurs fournis par Oracle.</p>
  <p>Les boutiques en ligne, par exemple, personnalisent l’accueil des visiteurs : <strong>quels produits</strong> seront mis en évidence, <strong>quelles promotions</strong> seront proposées, et même le prix et des produits ou des services peuvent être différents selon la personne qui visite le site. Les services de détection de la fraude évaluent les utilisateurs en temps réel et décident <strong>quels moyens de paiement et de transport</strong> peuvent être proposés.</p>
  <p>Les entreprises développent des technologies pour calculer et évaluer en continu le potentiel de valeur à long terme d’un client en s’appuyant sur son historique de navigation, de recherche et de localisation, mais aussi sur son usage des applis, sur les produits achetés et sur ses amis sur les réseaux sociaux. Chaque clic, chaque glissement de doigt, chaque <em>Like</em>, chaque partage est susceptible d’influencer <strong>la manière dont une personne est traitée en tant que client</strong>, combien de temps elle va attendre avant que la <em>hotline</em> ne lui réponde, ou si elle sera complètement exclue des relances et des services marketing.</p>
  <blockquote><p>L’Internet des riches n’est pas le même que celui des pauvres.</p>
  <p>Michael Fertik, fondateur de <em>reputation.com</em>, 2013</p></blockquote>
  <p>Trois types de <strong>plateformes technologiques</strong> jouent un rôle important dans cette sorte de personnalisation instantanée. Premièrement, les entreprises utilisent des systèmes de gestion de la relation client pour gérer leurs données sur les clients et les prospects. Deuxièmement, elles utilisent des plateformes de gestion de données pour connecter leurs propres données à l’écosystème de publicité numérique et obtiennent ainsi des informations supplémentaires sur le profil de leurs clients. Troisièmement, elles peuvent utiliser des <strong>plateformes de marketing prédictif</strong> qui les aident à produire le bon message pour la bonne personne au bon moment, calculant comment convaincre quelqu’un en exploitant ses faiblesses et ses préjugés.</p>
  <p>Par exemple, l’entreprise de données <strong>RocketFuel</strong> promet à ses clients de « leur apporter des milliers de milliards de signaux numériques ou non pour créer des profils individuels et pour fournir aux consommateurs une expérience personnalisée, toujours actualisée et toujours pertinente » s’appuyant sur les 2,7 milliards de profils uniques de son dépôt de données. Selon RocketFuel, il s’agit « de noter chaque signal selon sa propension à influencer le consommateur ».</p>
  <p>La plateforme de marketing prédictif <strong>TellApart</strong>, qui appartient à <strong>Twitter</strong>, associe une valeur à chaque couple client/produit acheté, une « synthèse entre la probabilité d’achat, l’importance de la commande et la valeur à long terme », s’appuyant sur « des centaines de signaux en ligne et en magasin sur un consommateur anonyme unique ». En conséquence, TellApart regroupe automatiquement du contenu tel que « l’image du produit, les logos, les offres et toute autre métadonnée » pour construire des publicités, des courriels, des sites web et des offres personnalisées.</p>
  <h4>Tarifs personnalisés et campagnes électorales</h4>
  <p>Des méthodes identiques peuvent être utilisées pour personnaliser les tarifs dans les boutiques en ligne, par exemple, en prédisant le niveau d’achat d’un client à long terme ou le montant qu’il sera probablement prêt à payer un peu plus tard. Des preuves sérieuses suggèrent que les boutiques en ligne affichent déjà des <strong>tarifs différents selon les consommateurs</strong>, ou même des prix différents pour le même produit, en s’appuyant sur leur comportement et leurs caractéristiques. Un champ d’action similaire est la personnalisation lors des campagnes électorales. Le ciblage des électeurs avec des messages personnalisés, adaptés à leur personnalité, et à leurs opinions politiques sur des problèmes donnés a fait monter les débats sur une possible <strong>manipulation politique</strong>.</p>
  <p><strong>Utiliser les données, les analyser et les personnaliser pour gérer les consommateurs</strong></p>
  <div class="figure">
  <a href="https://framablog.org/wp-content/uploads/2017/09/image_010.jpg"><img class="size-medium wp-image-10481" src="https://framablog.org/wp-content/uploads/2017/09/image_010-300x169.jpg" alt="" width="300" height="169" /></a>Actuellement, dans tous les domaines, les entreprises peuvent mobiliser les réseaux de suivi et de profilage pour trouver, évaluer, contacter, trier et gérer les consommateurs<p class="caption">
  </p></div>
  <h4>Tests et expériences sur les personnes</h4>
  <p>La personnalisation s’appuyant sur de riches informations de profil et sur du suivi invasif en temps réel est devenue <strong>un outil puissant pour influencer le comportement du consommateur</strong> quand il visite une page web, clique sur une pub, s’inscrit à un service, s’abonne à une newsletter, télécharge une application ou achète un produit.</p>
  <p>Pour améliorer encore cela, les entreprises ont commencé à faire des expériences en continu sur les individus. Elles procèdent à <strong>des tests en faisant varier</strong> les fonctionnalités, le design des sites web, l’interface utilisateur, les titres, les boutons, les images ou mêmes les tarifs et les remises, surveillent et mesurent avec soin comment les différents groupes d’utilisateurs interagissent avec ces modifications. De cette façon, les entreprises <strong>optimisent sans arrêt leur capacité à encourager les personnes</strong> à agir comme elles veulent qu’elles agissent.</p>
  <p>Les organes de presse, y compris à grand tirage comme le Washington Post, utilisent <strong>différentes versions des titres de leurs articles</strong> pour voir laquelle est la plus performante. Optimizely, un des principaux fournisseurs de technologies pour ce genre de tests, propose à ses clients la capacité de « faire des tests sur l’ensemble de l’expérience client sur n’importe quel canal, n’importe quel appareil, et n’importe quelle application ». Expérimenter sur des usagers qui l’ignorent <strong>est devenu la nouvelle norme</strong>.</p>
  <p>En 2014, <strong>Facebook</strong> a déclaré faire tourner « plus d’un millier d’expérimentations chaque jour » afin « d’optimiser des résultats précis » ou pour « affiner des décisions de design sur le long terme ». En 2010 et 2012, la plateforme a mené des expérimentations sur des millions d’utilisateurs et montré qu’en manipulant l’interface utilisateur, les fonctionnalités et le contenu affiché, Facebook <strong>pouvait augmenter significativement le taux de participation électorale</strong> d’un groupe de personnes. Leur célèbre expérimentation sur l’humeur des internautes, portant sur 700 000 individus, consistait à manipuler secrètement la quantité de messages émotionnellement positifs ou négatifs présents dans les fils d’actualité des utilisateurs : il s’avéra que cela avait <strong>un impact sur le nombre de messages positifs ou négatifs</strong> que les utilisateurs postaient ensuite eux-mêmes.</p>

  <p>Suite à la critique massive de Facebook par le public concernant cette expérience, la plateforme de rendez-vous <strong>OkCupid</strong> a publié un article de blog provocateur défendant de telles pratiques, déclarant que « nous faisons des expériences sur les êtres humains » et « c’est ce que font tous les autres ». OkCupid a décrit une expérimentation dans laquelle a été manipulé le pourcentage de « compatibilité » montré à des paires d’utilisateurs. Quand on affichait un taux de 90 % entre deux utilisateurs qui en fait étaient peu compatibles, les utilisateurs échangeaient nettement plus de messages entre eux. OkCupid a déclaré que quand elle « dit aux gens » qu’ils « vont bien ensemble », alors ils « agissent comme si c’était le cas ».</p>
  <p>Toutes ces expériences qui posent de vraies questions éthiques montrent le <strong>pouvoir de la personnalisation basée sur les données pour influer sur les comportements</strong>.</p>
  <h3><a id="ch08" class="ta-textContent">Dans les mailles du filet : vie quotidienne, données commerciales et analyse du risque</a></h3>
  <p>Les données concernant les comportements des personnes, les liens sociaux, et les moments les plus intimes sont de plus en plus utilisées dans des contextes ou à des fins complètement différents de ceux dans lesquels elles ont été enregistrées. Notamment, elles sont de plus en plus utilisées pour prendre des <strong>décisions automatisées au sujet d’individus</strong> dans des domaines clés de la vie tels que la finance, l’assurance et les soins médicaux.</p>
  <h4>Données relatives aux risques pour le marketing et la gestion client</h4>
  <p>Les agences d’évaluation de la solvabilité, ainsi que d’autres acteurs clés de l’évaluation du risque, principalement dans des domaines tels que la <strong>vérification des identités, la prévention des fraudes, les soins médicaux et l’assurance</strong> fournissent également des solutions commerciales. De plus, la plupart des courtiers en données s’échangent divers types d’informations sensibles, par exemple des informations concernant la situation financière d’un individu, et ce à des fins commerciales. <strong>L’utilisation de l’évaluation de solvabilité à des fins de marketing</strong> afin soit de cibler soit d’exclure des ensembles vulnérables de la population a évolué pour devenir des produits qui associent le marketing et la gestion du risque.</p>
  <p>L’agence d’évaluation de la solvabilité <strong>TransUnion</strong> fournit, par exemple, un <strong>produit d’aide à la décision piloté par les données</strong> à destination des commerces de détail et des services financiers qui leur permet « de mettre en œuvre des stratégies de marketing et de gestion du risque sur mesure pour atteindre les objectifs en termes de clients, canaux de vente et résultats commerciaux », il inclut des données de crédit et promet « un aperçu inédit du comportement, des préférences et des risques du consommateur. » Les entreprises peuvent alors laisser leurs clients « choisir parmi une gamme complète d’offres sur mesure, répondant à leurs besoins, leurs préférences et leurs profils de risque » et « évaluer leurs clients sur divers produits et canaux de vente et leur présenter uniquement la ou les offres les plus pertinente pour eux et les plus rentables » pour l’entreprise. De même, <strong>Experian</strong> fournit un produit qui associe « crédit à la consommation et informations commerciales, fourni avec plaisir par Experian. »</p>

  <blockquote><p>En matière de surveillance, il n’est pas question de connaître vos secrets, mais de gérer des populations, de gérer des personnes.</p>
  <p>Katarzyna Szymielewicz, Vice-Présidente <em>EDRi</em>, 2015</p></blockquote>
  <h4>Vérification des identités en ligne et détection de la fraude</h4>
  <p>Outre la machine de surveillance en temps réel qui a été développée au travers de la publicité en ligne, d’autres formes de pistage et de profilage généralisées ont émergé dans les domaines de <strong>l’analyse de risque, de la détection de fraudes et de la cybersécurité</strong>.</p>
  <p>De nos jours, les services de détection de fraude en ligne utilisent des technologies hautement intrusives afin <strong>d’évaluer des milliards de transactions numériques</strong>. Ils recueillent d’énormes quantités d’informations concernant les appareils, les individus et les comportements. Les fournisseurs habituels dans l’évaluation de solvabilité, la vérification d’identité, et la prévention des fraudes ont commencé à surveiller et à évaluer la façon dont les personnes surfent sur le web et utilisent leurs appareils mobiles. En outre, ils ont entrepris <strong>de relier les données comportementales en ligne avec l’énorme quantité d’information</strong> hors-connexion qu’ils recueillent depuis des dizaines d’années.</p>
  <p>Avec l’émergence de services passant par l’intermédiaire d’objets technologiques, la vérification de l’identité des consommateurs et la prévention de la fraude sont devenues de plus en plus importantes et de plus en plus contraignantes, notamment au vu de la cybercriminalité et de la fraude automatisée. Dans un même temps, les systèmes actuels d’analyse du risque ont agrégé <strong>des bases de données gigantesques contenant des informations sensibles</strong> sur des pans entiers de population. Nombre de ces systèmes répondent à un grand nombre de cas d’utilisation, parmi lesquels la preuve d’identité pour les services financiers, l’évaluation des réclamations aux compagnies d’assurance et des demandes d’indemnités, de l’analyse des transactions financières et l’évaluation de milliards de transactions en ligne.</p>
  <p>De tels systèmes d’analyse du risque peuvent décider si une requête ou une transaction est <strong>acceptée ou rejetée</strong> ou décider des options de livraison disponibles pour une personne lors d’une transaction en ligne. Des services marchands de vérification d’identité et d’analyse de la fraude sont également employés dans des domaines tels que <strong>les forces de l’ordre et la sécurité nationale</strong>. La frontière entre les applications commerciales de l’analyse de l’identité et de la fraude et celles utilisées par les agences gouvernementales de renseignement est de plus en plus floue.</p>
  <p>Lorsque des individus sont ciblés par des systèmes aussi opaques, ils peuvent être <strong>signalés comme étant suspects et nécessitant un traitement particulier ou une enquête</strong>, ou bien ils peuvent être rejetés sans plus d’explication. Ils peuvent recevoir un courriel, un appel téléphonique, une notification, un message d’erreur, ou bien le système peut tout simplement ne pas indiquer une option, sans que l’utilisateur ne connaisse son existence pour d’autres. Des évaluations erronées peuvent se propager d’un système à l’autre. Il est souvent <strong>difficile, voire impossible de faire recours</strong> contre ces évaluations négatives qui excluent ou rejettent, notamment à cause de la difficulté de s’opposer à quelque chose dont on ne connaît pas l’existence.</p>
  <h4>Exemples de détection de fraude en ligne et de service d’analyse des risques</h4>
  <p>L’entreprise de cybersécurité <strong>ThreatMetrix</strong> traite les données concernant 1,4 milliard de « comptes utilisateur uniques » sur des « milliers de sites dans le monde. » Son Digital Identity Network (Réseau d’Identité Numérique) enregistre des « millions d’opérations faites par des consommateurs chaque jour, notamment des connexions, des paiements et des créations de nouveaux comptes », et cartographie les « associations en constante évolution entre les individus et leurs appareils, leurs positions, leurs identifiants et leurs comportements » à des fins de vérification des identités et de prévention des fraudes. L’entreprise collabore avec Equifax et TransUnion. Parmi ses clients se trouvent Netflix, Visa et des entreprises dans des secteurs tels que le jeu vidéo, les services gouvernementaux et la santé.</p>
  <p>De façon analogue, l’entreprise de données <strong>ID Analytics</strong>, qui a récemment été achetée par <strong>Symantec</strong>, exploite un Réseau d’Identifiants fait de « 100 millions de nouveaux éléments d’identité quotidiens issus des principales organisations interprofessionnelles. ». L’entreprise agrège des données concernant 300 millions de consommateurs, sur les prêts à haut risque, les achats en ligne et les demandes de carte de crédit ou de téléphone portable. Son Indice d’Identité, ID Score, prend en compte les appareils numériques ainsi que les noms, les numéros de sécurité sociale et les adresses postales et courriel.</p>
  <p><strong>Trustev</strong>, une entreprise en ligne de détection de la fraude dont le siège se situe en Irlande et qui a été rachetée par l’agence d’évaluation de la solvabilité <strong>TransUnion</strong> en 2015, juge des transactions en ligne pour des clients dans les secteurs des services financiers, du gouvernement, de la santé et de l’assurance en s’appuyant sur l’analyse des comportements numériques, les identités et les appareils tels que les téléphones, les tablettes, les ordinateurs portables, les consoles de jeux, les télés et même les réfrigérateurs. L’entreprise propose aux entreprises clientes la possibilité d’analyser <strong>la façon dont les visiteurs cliquent et interagissent avec les sites Internets et les applications</strong>. Elle utilise une large gamme de données pour évaluer les utilisateurs, y compris les numéros de téléphone, les adresses courriel et postale, les empreintes de navigateur et d’appareil, les vérifications de la solvabilité, les historiques d’achats sur l’ensemble des vendeurs, les adresses IP, les opérateurs mobiles et la géolocalisation des téléphones. Afin d’aider à « accepter les transactions futures », chaque appareil se voit attribuer une empreinte digitale d’appareil unique. Trustev propose aussi une technologie de marquage d’empreinte digitale sociale qui analyse le contenu des réseaux sociaux, notamment une « analyse de la liste d’amis » et « l’identification des schémas ». TransUnion a intégré la technologie Trustev dans ses propres solutions identifiantes et anti-fraude.</p>
  <p><strong>Selon son site Internet, Trustev utilise une large gamme de données pour évaluer les personnes</strong></p>
  <div class="figure">
  <a href="https://framablog.org/wp-content/uploads/2017/09/image_011.jpg"><img class="size-medium wp-image-10487" src="https://framablog.org/wp-content/uploads/2017/09/image_011-300x167.jpg" alt="" width="300" height="167" /></a>Capture d’écran du site Internet de Trustev, 2 juin 2016</div>

  <p>De façon similaire, l’agence d’évaluation de la solvabilité Equifax affirme qu’elle possède des données concernant près de 1 milliard d’appareils et peut affirmer « l’endroit où se situe en fait un appareil et s’il est associé à d’autres appareils utilisés dans des fraudes connues ». En associant ces données avec « des milliards d’identités et d’événements de crédit pour trouver les activités douteuses » dans tous les secteurs, et en utilisant des informations concernant <strong>la situation d’emploi</strong> et les <strong>liens entre les ménages, les familles et les partenaires</strong>, Equifax prétend être capable « de distinguer les appareils ainsi que les individus ».</p>
  <h4 id="je-ne-suis-pas-un-robot">Je ne suis pas un robot</h4>
  <p>Le produit <strong>reCaptcha</strong> de Google fournit en fait un service similaire, du moins en partie. Il est incorporé dans des millions de sites Internets et aide les fournisseurs de sites Internets à décider si un visiteur est un être humain ou non. Jusqu’à récemment, les utilisateurs devaient résoudre diverses sortes de défis rapides tels que le déchiffrage de lettres dans une image, la sélection d’images dans une grille, ou simplement en cochant la case « Je ne suis pas un robot ». En 2017, <strong>Google</strong> a présenté une version invisible de reCaptcha, en expliquant qu’à partir de maintenant, les utilisateurs humains pourront passer « <strong>sans aucune interaction utilisateur</strong>, contrairement aux utilisateurs douteux et aux robots ». L’entreprise ne révèle pas le type de données et de comportements utilisateurs utilisés pour reconnaître les humains. Des analyses laissent penser que Google, outre les adresses IP, les empreintes de navigateur, la façon dont l’utilisateur frappe au clavier, déplace la souris ou utilise l’écran tactile « avant, pendant et après » une interaction reCaptcha, utilise plusieurs témoins Google. <strong>On ne sait pas exactement</strong> si les individus sans compte utilisateur sont désavantagés, si Google est capable d’identifier des individus particuliers plutôt que des « humains » génériques, ou si Google utilise les données enregistrées par reCaptcha à d’autres fins que la détection de robots.</p>
  <h4>Le pistage numérique à des fins publicitaires et de détection de la fraude ?</h4>
  <p>Les flux omniprésents de données comportementales enregistrées pour la publicité en ligne s’écoulent vers les systèmes de détection de la fraude. Par exemple, <strong>la plateforme de données commerciales</strong> Segment propose à ses clients des moyens faciles d’envoyer des données concernant leurs clients, leur site Internet et les utilisateurs mobiles à une kyrielle de services de technologies commerciales, ainsi qu’à des <strong>entreprises de détection de fraude</strong>. Castle est l’une d’entre-elles et utilise « les données comportementales des consommateurs pour prédire les utilisateurs qui présentent vraisemblablement un risque en matière de sécurité ou de fraude ». Une autre entreprise, Smyte, aide à « prévenir les arnaques, les messages indésirables, le harcèlement et les fraudes par carte de crédit ».</p>
  <p>La grande agence d’analyse de la solvabilité <strong>Experian</strong> propose un service de pistage multi-appareils qui fournit de la reconnaissance universelle d’appareils, sur mobile, Internet et les applications <strong>pour le marketing numérique</strong>. L’entreprise s’engage à concilier et à associer les « identifiants numériques existants » de leurs clients, y compris des « témoins, identifiants d’appareil, adresses IP et d’autres encore », fournissant ainsi aux commerciaux un « lien omniprésent, cohérent et permanent sur tous les canaux ».</p>
  <p>La technologie d’identification d’appareils provient de <strong>41st parameter</strong> (le 41e paramètre), une entreprise de détection de la fraude rachetée par Experian en 2013. En s’appuyant sur la technologie développée par 41st parameter, Experian propose aussi une solution d’intelligence d’appareil pour <strong>la détection de la fraude</strong> au cours des paiements en ligne. Cette solution qui « créé un identifiant fiable pour l’appareil et recueille des données appareil abondantes » « identifie en quelques millisecondes chaque appareil à chaque visite » et « fournit une visibilité jamais atteinte de l’individu réalisant le paiement ». On ne sait pas exactement si Experian utilise les mêmes données pour ses services d’identification d’appareils pour détecter la fraude que pour le marketing.</p>
  <h3><a id="ch09" class="ta-textContent">Cartographie de l’écosystème du pistage et du profilage commercial</a></h3>
  <p>Au cours des dernières années, les pratiques déjà existantes de surveillance commerciale ont rapidement muté en un large éventail d’acteurs du secteur privé qui surveillent en permanence des populations entières. Certains des acteurs de l’écosystème actuel de pistage et de profilage, tels que <strong>les grandes plateformes</strong> et d’autres <strong>entreprises avec un grand nombre de clients</strong>, tiennent une position unique en matière d’étendue et de niveau de détail de leurs profils de consommateurs. Néanmoins, les données utilisées pour prendre des décisions concernant les individus sur de nombreux sujets ne sont généralement pas centralisées en un lieu, mais plutôt assemblées en temps réel à partir de plusieurs sources selon les besoins.</p>
  <p>Un large éventail <strong>d’entreprises de données et de services d’analyse</strong> en marketing, en gestion client et en analyse du risque recueillent, analysent, partagent et échangent de façon uniforme des données client et les associent avec des informations supplémentaires issues de milliers d’autres entreprises. Tandis que l’industrie des données et des services d’analyse fournissent les moyens pour déployer ces puissantes technologies, <strong>les entreprises dans de nombreuses industries</strong> contribuent à augmenter la quantité et le niveau de détail des données collectées ainsi que la capacité à les utiliser.</p>
  <p><strong>Cartographie de l’écosystème du pistage et du profilage commercial numérique</strong></p>
  <div class="figure">
  <a href="https://framablog.org/wp-content/uploads/2017/09/image_012.jpg"><img class="size-medium wp-image-10488" src="https://framablog.org/wp-content/uploads/2017/09/image_012-300x204.jpg" alt="" width="300" height="204" /></a>En plus des grandes plateformes en ligne et de l’industrie des données et des services d’analyse des consommateurs, des entreprises dans de nombreux secteurs ont rejoint les écosystèmes de pistage et de profilage numérique généralisé.<p class="caption">
  </p></div>
  <p><strong>Google et Facebook</strong>, ainsi que d’autres grandes plateformes telles que Apple, Microsoft, Amazon et Alibaba ont un accès sans précédent à des données concernant les vies de milliards de personnes. Bien qu’ils aient des modèles commerciaux différents et jouent par conséquent des rôles différents dans l’industrie des données personnelles, ils ont le pouvoir de dicter dans une large mesure les paramètres de base des marchés numériques globaux. Les grandes plateformes limitent principalement la façon dont les autres entreprises peuvent obtenir leurs données. Ainsi, ils les obligent à utiliser les <strong>données utilisateur de la plateforme dans leur propre écosystème</strong> et recueillent des données au-delà de la portée de la plateforme.</p>
  <p>Bien que <strong>les grandes multinationales</strong> de différents secteurs ayant des interactions fréquentes avec des centaines de millions de consommateurs soient en quelque sorte dans une situation semblable, elles ne font pas qu’acheter des données clients recueillies par d’autres, elles en fournissent aussi. Bien que certaines parties des secteurs des services financiers et des télécoms ainsi que des <strong>domaines sociétaux critiques</strong> tels que la santé, l’éducation et l’emploi soient soumis à une réglementation plus stricte dans la plupart des juridictions, un large éventail d’entreprises a commencé à utiliser ou fournissent des données aux réseaux actuels de surveillance commerciale.</p>
  <p><strong>Les détaillants</strong> et d’autres entreprises qui vendent des produits et services aux consommateurs vendent pour la plupart les données concernant les achats de leurs clients. <strong>Les conglomérats médiatiques et les éditeurs numériques</strong> vendent des données au sujet de leur public qui sont ensuite utilisées par des entreprises dans la plupart des autres secteurs. <strong>Les fournisseurs de télécoms et d’accès haut débit</strong> ont entrepris de suivre leurs clients sur Internet. Les grandes groupes de distribution, de médias et de télécoms ont acheté ou achètent <strong>des entreprises de données, de pistage et de technologie publicitaire</strong>. Avec le rachat de NBC Universal par Comcast et le rachat probable de Time Warner par AT&amp;T, les grands groupes de télécoms aux États-Unis sont aussi en train de devenir des éditeurs gigantesques, créant par là même des portefeuilles puissants de contenu, de données et de capacité de pistage. Avec l’acquisition de AOL et de Yahoo, Verizon aussi est devenu une « plateforme ».</p>
  <p><strong>Les institutions financières</strong> ont longtemps utilisé des données sur les consommateurs pour la gestion du risque, notamment dans l’évaluation de la solvabilité et la détection de fraude, ainsi que pour le marketing, l’acquisition et la rétention de clientèle. Elles complètent leurs propres données avec des données externes issues d’agences d’évaluation de la solvabilité, de courtiers en données et d’entreprises de données commerciales. <strong>PayPal</strong>, l’entreprise de paiements en ligne la plus connue, partage des informations personnelles avec plus de 600 tiers, parmi lesquels d’autres fournisseurs de paiements, des agences d’évaluation de la solvabilité, des entreprises de vérification de l’identité et de détection de la fraude, ainsi qu’avec les acteurs les plus développés au sein de l’écosystème de pistage numérique. Tandis que les réseaux de cartes de crédit et les banques ont partagé des informations financières sur leurs clients avec les fournisseurs de données de risque depuis des dizaines d’années, ils ont maintenant commencé <strong>à vendre des données sur les transactions</strong> à des fins publicitaires.</p>
  <p>Une myriade d’entreprises, grandes ou petites, <strong>fournissant des sites Internets, des applications mobiles, des jeux et d’autres solutions</strong> sont étroitement liées à l’écosystème de données commerciales. Elles utilisent des services qui leur permettent de facilement transmettre à des services tiers des données concernant leurs utilisateurs. Pour nombre d’entre elles, la vente de flux de données comportementales concernant leurs utilisateurs constitue un élément clé de leur <em>business model</em>. De façon encore plus inquiétante, les entreprises qui fournissent des services tels que les <strong>enregistreurs d’activité physique</strong> intègrent des services qui transmettent les données utilisateurs à des tierces parties.</p>
  <p>L’envahissante machine de surveillance en temps réel qui a été développée pour <strong>la publicité en ligne</strong> est en train de s’étendre vers d’autres domaines dont la politique, la tarification, la notation des crédits et la gestion des risques. Partout dans le monde, <strong>les assureurs</strong> commencent à proposer à leurs clients des offres incluant du suivi en temps réel de leur comportement : comment ils conduisent, quelles sont leurs activités santé ou leurs achats alimentaires et quand ils se rendent au club de gym. Des nouveaux venus dans <strong>l’analyse assurantielle et les technologies financières</strong> prévoient les risques de santé d’un individu en s’appuyant sur les données de consommation, mais évaluent aussi la solvabilité à partir de données de comportement via les appels téléphoniques ou les recherches sur Internet.</p>
  <p><strong>Les courtiers en données</strong> sur les consommateurs, les entreprises de gestion de clientèle et les agences de publicité comme Acxiom, Epsilon, Merkle ou Wunderman/WPP jouent un rôle prépondérant en assemblant et reliant les données entre les plateformes, les multinationales et le monde de la technologie publicitaire. <strong>Les agences d’évaluation de crédit</strong> comme Experian qui fournissent de nombreux services dans des domaines très sensibles comme l’évaluation de crédit, la vérification d’identité et la détection de la fraude jouent également un rôle prépondérant dans l’actuel envahissant écosystème de la commercialisation des données.</p>
  <p>Des entreprises particulièrement importantes qui fournissent des données, des analyses et des solutions logicielles sont également appelées « plateforme ». <strong>Oracle</strong>, un fournisseur important de logiciel de base de données est, ces dernières années, devenu un courtier en données de consommation. <strong>Salesforce</strong>, le leader sur le marché de la gestion de la relation client qui gère les bases de données commerciales de millions de clients qui ont chacun de nombreux clients, a récemment acquis Krux, une grande entreprise de données, connectant et combinant des données venant de l’ensemble du monde numérique. L’entreprise de logiciels <strong>Adobe</strong> joue également un rôle important dans le domaine des technologies de profilage et de publicité.</p>
  <p>En plus, les principales grandes entreprises <strong>du conseil, de l’analyse et du logiciel commercial</strong>, comme IBM, Informatica, SAS, FICO, Accenture, Capgemini, Deloitte et McKinsey et même des <strong>entreprises spécialisées dans le renseignement et la défense</strong> comme Palantir, jouent également un rôle significatif dans la gestion et l’analyse des données personnelles, de la gestion de la relation client à celle de l’identité, du marketing à l’analyse de risque pour les assureurs, les banques et les gouvernements.</p>
  <h4><a id="ch10" class="ta-textContent">Vers une société du contrôle social numérique généralisé ?</a></h4>
  <p>Ce rapport montre qu’aujourd’hui, les réseaux entre plateformes en ligne, fournisseurs de technologies publicitaires, courtiers en données, et autres peuvent <strong>suivre, reconnaître et analyser des individus dans de nombreuses situations de la vie courante</strong>. Les informations relatives aux comportements et aux caractéristiques d’un individu sont reliées entre elles, assemblées, et utilisées en temps réel par des entreprises, des bases de données, des plateformes, des appareils et des services. Des acteurs uniquement motivés par des buts économiques ont fait naître un environnement de données dans lequel les individus sont constamment <strong>sondés et évalués, catégorisés et regroupés, notés et classés, numérotés et comptés, inclus ou exclus</strong>, et finalement traités de façon différente.</p>
  <p>Ces dernières années, plusieurs <strong>évolutions importantes</strong> ont donné de nouvelles capacités sans précédent à la surveillance omniprésente par les entreprises. Cela comprend l’augmentation des médias sociaux et des appareils en réseau, le pistage et la mise en relation en temps réel de flux de données comportementales, le rapprochement des données en ligne et hors ligne, et la consolidation des données commerciales et de gestion des risques. L’envahissant pistage et profilage numériques, mélangé à la personnalisation et aux tests, ne sont pas seulement utilisés pour surveiller, mais aussi pour influencer systématiquement <strong>le comportement des gens</strong>. Quand les entreprises utilisent les données sur les situations du quotidien pour prendre des décisions parfois triviales, parfois conséquente sur les gens, cela peut conduire à <strong>des discriminations</strong>, et renforcer voire aggraver des inégalités existantes.</p>
  <p>Malgré leur omniprésence, seul le haut de l’iceberg des données et des activités de profilage est visible pour les particuliers. La plupart d’entre elles restent opaques et à peine compréhensible par la majorité des gens. Dans le même temps, les gens ont <strong>de moins en moins de solutions pour résister au pouvoir de cet ecosystème de données</strong> ; quitter le pistage et le profilage envahissant, est devenu synonyme de quitter la vie moderne. Bien que les responsables des entreprises affirment que la vie privée est morte (tout en prenant soin de préserver leur propre vie privée), Mark Andrejevic suggère que les gens perçoivent en fait l’asymétrie du pouvoir dans le monde numérique actuel, mais se sentent « frustrés par un sentiment d’impuissance face à une collecte et à une exploitation de données de plus en plus sophistiquées et exhaustives. »</p>
  <p>Au regard de cela, ce rapport se concentre sur le fonctionnement interne et les pratiques en vigueur dans l’actuelle industrie des données personnelles. Bien que l’image soit devenue plus nette, de larges portions du système restent encore dans le noir. <strong>Renforcer la transparence sur le traitement des données par les entreprises</strong> reste un prérequis indispensable pour résoudre le problème de l’asymétrie entre les entreprises de données et les individus. Avec un peu de chance, les résultats de ce rapport encourageront des travaux ultérieurs de la part de journalistes, d’universitaires, et d’autres personnes concernés par les libertés civiles, la protection des données et celle des consommateurs ; et dans l’idéal des travaux des législateurs et des entreprises elles-mêmes.</p>
  <p>En 1999, Lawrence Lessig, avait bien prédit que, laissé à lui-même, le cyberespace, deviendrait un parfait outil de contrôle façonné principalement par la « main invisible » du marché. Il avait dit qu’il était possible de « construire, concevoir, ou programmer le cyberespace pour protéger les valeurs que nous croyons fondamentales, ou alors de construire, concevoir, ou programmer le cyberespace pour permettre à toutes ces valeurs de disparaître. » De nos jours, la deuxième option est presque devenue réalité au vu des milliards de dollars investis dans le capital-risque pour financer des modèles économiques s’appuyant sur une exploitation massive et sans scrupule des données. L’insuffisance de régulation sur la vie privée aux USA et l’absence de son application en Europe ont réellement gêné l’émergence <strong>d’autres modèles d’innovation numérique</strong>, qui seraient fait de pratiques, de technologies, de modèles économiques qui protègent la liberté, la démocratie, la justice sociale et la dignité humaine.</p>
  <p>À un niveau plus global, la législation sur la protection des données ne pourra pas, à elle seule, atténuer les conséquences qu’un monde « conduit par les données » a sur les individus et la société que ce soit aux USA ou en Europe. Bien que le <strong>consentement et le choix</strong> soient des principes cruciaux pour résoudre les problèmes les plus urgents liés à la collecte massive de données, ils peuvent également mener à une illusion de volontarisme. En plus d’instruments de régulation supplémentaires sur la non-discrimination, la protection du consommateur, les règles de concurrence, il faudra en général <strong>un effort collectif important</strong> pour donner une vision positive d’une future société de l’information. Sans quoi, on pourrait se retrouver bientôt dans une société avec un envahissant contrôle social numérique, dans la laquelle la vie privée deviendrait, si elle existe encore, un luxe pour les riches. Tous les éléments en sont déjà en place.</p>
  <h4 id="lectures-pour-approfondir-le-sujet">Lectures pour approfondir le sujet</h4>
  <p>— L’article ci-dessus en format .PDF (376,2 Ko)<br />
  –&gt; <a href="https://framablog.org/wp-content/uploads/2017/10/framablog.org-Comment-les-entreprises-surveillent-notre-quotidien.pdf">framablog.org-Comment les entreprises surveillent notre quotidien</a><br />
  — Un essai plus exhaustif sur les questions abordées par la publication ci-dessus ainsi que des références et des sources peuvent être trouvés dans <a href="http://crackedlabs.org/dl/CrackedLabs_Christl_CorporateSurveillance.pdf">le rapport complet, disponible au téléchargement en PDF. </a></p>
  <p>— Le rapport de 2016 « Les réseaux du contrôle » par Wolfie Christl et Sarah Spiekermann sur lequel le présent rapport est largement fondé est <a href="http://crackedlabs.org/en/networksofcontrol">disponible au téléchargement en PDF ainsi qu’en format papier.</a></p>
  <p>La production de ce rapport, matériaux web et illustrations a été soutenue par Open Society Foundations.</p>
  <h3>Bibliographie</h3>
  <div class="csl-bib-body">
  <div class="csl-entry">Christl, W. (2017, juin). Corporate surveillance in everyday life. Cracked Labs.</div>

  <div class="csl-entry">Christl, W., &amp; Spiekermann, S. (2016). <i>Networks of Control, a Report on Corporate Surveillance, Digital Tracking, Big Data &amp; Privacy</i> (p. 14‑20). Consulté à l’adresse https://www.privacylab.at/wp-content/uploads/2016/09/Christl-Networks__K_o.pdf</div>

  <div class="csl-entry">Epp, C., Lippold, M., &amp; Mandryk, R. L. (2011). Identifying emotional states using keystroke dynamics (p. 715). ACM Press. https://doi.org/10.1145/1978942.1979046</div>

  <div class="csl-entry">Kosinski, M., Stillwell, D., &amp; Graepel, T. (2013). Private traits and attributes are predictable from digital records of human behavior. <i>Proceedings of the National Academy of Sciences</i>, <i>110</i>(15), 5802‑5805. https://doi.org/10.1073/pnas.1218772110</div>

  <div class="csl-entry">Turow, J. (s. d.). Daily You | Yale University Press. Consulté 25 septembre 2017, à l’adresse https://yalebooks.yale.edu/book/9780300188011/daily-you</div>

  </div>
  <div title="Diaspora*" id="diaspora-button-container"><a href="denied:javascript:(function(){var url = 'https://framablog.org/2017/10/25/comment-les-entreprises-surveillent-notre-quotidien/' ;var title = 'Comment les entreprises surveillent notre quotidien';   window.open('https://framablog.org/wp-content/plugins/share-on-diaspora/new_window.php?url='+encodeURIComponent(url)+'&amp;title='+encodeURIComponent(title),'post','location=no,links=no,scrollbars=no,toolbar=no,width=620,height=400')})()"><img id="diaspora-button-ownimage-img" src="https://framablog.org/wp-content/uploads/2017/11/diaspora.png" alt="" /></a></div></div>		<div class="social-sharing ss-social-sharing">&#13;
  				        <a rel="external nofollow" class="ss-button-facebook" href="http://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fframablog.org%2F2017%2F10%2F25%2Fcomment-les-entreprises-surveillent-notre-quotidien%2F" target="_blank">Share on Facebook</a><a rel="external nofollow" class="ss-button-twitter" href="http://twitter.com/intent/tweet/?text=Comment+les+entreprises+surveillent+notre+quotidien&amp;url=https%3A%2F%2Fframablog.org%2F2017%2F10%2F25%2Fcomment-les-entreprises-surveillent-notre-quotidien%2F" target="_blank">Share on Twitter</a>	        	    </div>&#13;


title: “username or password incorrect” is bullshit – Hacker Noon
url: https://hackernoon.com/username-or-password-is-incorrect-is-bullshit-89985ca2be48?gi=b0237ac9d9d5
created_at: 2018-03-22 13:07:36
updated_at: 2018-03-22 13:07:36
mimetype: text/html
domain_name: hackernoon.com
preview_picture: https://cdn-images-1.medium.com/max/1200/1*XjOkBwmPXh613-nldQlSYQ.png
http_status: 200
content:
  <p id="ddb7" class="graf graf--p graf-after--h3">There’s a security best practice where sign ins aren’t supposed to say “password is incorrect”. Instead they’re supposed to say the “<em class="markup--em markup--p-em">username</em> or password is incorrect”. This “best practice” is bullshit.</p><p class="graf graf--p graf-after--p">Stripe and GitHub’s sign ins for example follow this practice.</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*hisYwzk7kIhUdfxZ9vwBBA.png" alt="image" /></div><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*Nie0O5MurE_fvTuKbYkXzw.png" alt="image" /></div><p class="graf graf--p graf-after--figure">The idea is if an attacker knows a username, he or she could concentrate on that account using SQL injection, brute forcing the password, phishing, and so on.</p><p class="graf graf--p graf-after--p">Here’s the problem.</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*k9s51jl1KGEx59iyiojYPg.png" alt="image" /></div>Stripe’s sign up page.<div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*XjOkBwmPXh613-nldQlSYQ.png" alt="image" /></div>Shit, y’all know my username… Guess I’m fucked. Not to mention you could’ve just gone to https://github.com/travisjeffery.<p id="fac0" class="graf graf--p graf-after--figure">All a hacker has to do is sign up to know whether the username is valid or not. Why bother then with obfuscating the sign in? Only the dumbest, laziest hacker is stopped by the “username or password is incorrect” sign in. You gain no security, yet your customers lose clarity.</p><p class="graf graf--p graf-after--p">Stripe has their form submission behind reCAPTCHA to prevent naive scripts attacking their sign up. However this has been broken multiple times (<a href="https://www.blackhat.com/docs/asia-16/materials/asia-16-Sivakorn-Im-Not-a-Human-Breaking-the-Google-reCAPTCHA-wp.pdf" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">1</a>, <a href="https://github.com/eastee/rebreakcaptcha" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">2</a>) and likely won’t ever be perfect. Even if reCAPTCHA was perfect, a hacker could manually validate their usernames of interest by trying to sign up, then automate an attack on the sign in page.</p><p id="e2b2" class="graf graf--p graf-after--p">To prevent attackers from knowing whether an account exists or not your signup must only take an email address and provide no feedback in the UI if the sign up succeeded or not. Instead the user would receive an email saying they’re signed up. The only way an attacker would know if an account exists is if they had access to the target’s email.</p><p id="a9cb" class="graf graf--p graf-after--p">Barring that, “username or password incorrect” is just bullshit.</p><p class="graf graf--p graf-after--p">–</p><p class="graf graf--p graf-after--p">Please say hi at <a href="https://twitter.com/travisjeffery" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">@travisjeffery</a>.</p><p class="graf graf--p graf-after--p">Hit the 👏 and share if you found this useful.</p><p class="graf graf--p graf-after--p">Thanks for reading.</p><div class="aspectRatioPlaceholder is-locked"><a href="https://goo.gl/w4Pbea" class="graf-imageAnchor"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*PZjwR1Nbluff5IMI6Y1T6g@2x.png" alt="image" /></a></div>


title: Dirty secrets of DevOps
url: https://dev.to/liquid_chickens/dirty-secrets-of-devops
created_at: 2018-03-22 13:07:40
updated_at: 2018-03-22 13:07:40
mimetype: text/html
language: en
domain_name: dev.to
http_status: 200
content:
  <p>I've read dozens of DevOps success stories, tales of bold IT leaders transforming their business and steering big corporate ships into the future. It's hard to avoid all these stories about "DevOps transformation" and how some guy named Jim pulled the IT department out of the stone age. The trades, blogs, and conference presentations are filled with them. </p>
  <p>No one talks about the failures though, very few even write about their struggles implementing DevOps. It's all sunshine and rainbows, which sucks, because that isn't real. </p>
  <p>Success teaches us little other than survivorship bias and how to feel bad about what we haven't achieved. Failure and hardship are where we learn. That's where the good, meaty stuff is. </p>
  <p>So here are a few dirty secrets of DevOps.</p>
  <h2>Most companies that say they are "doing DevOps", aren't.</h2>
  <p>Because of all the success stories (real or imagined) that have wiggled their way into the minds of CXOs, "we should be doing DevOps" became an empty corporate directive that inspired thousands of executives to start calling their IT infrastructure groups "DevOps" instead of "Infrastructure" or "Systems" or "Operations". </p>
  <p>Unfortunately, this seems to often play out as "We've renamed the group, so we're going to be letting most of the team go, because we're DevOpsing all the things now and being lean and mean. Also, the developers are still a separate group and they'll be throwing more stuff over the wall to you." </p>
  <p>So you end up with a few overworked, traditional Ops folks trying to keep the wheels on the bus with zero changes to the way work is managed or how the IT group functions day-to-day. Their manager is shouting down the hall about automation while the poor Ops team is trying to pivot a SAN-installing, server-racking skill set into something that looks like a cave-man version of coding. </p>
  <p>The only metric that improves in this scenario is "personnel cost", and only temporarily because burnout and churn spike, driving up staffing costs a few quarters down the road. But it looks good long enough for someone to say "See, we did it!" and feel validated. </p>
  <p>Even if you get the "IT folks" on board, getting plugged into the business so DevOps practices can benefit other groups and the overall bottom line comes with its own challenges. </p>
  <p>Fixing this issue requires a lot of skill managing upward and sideways. Often times, it's not worth trying to change and moving on is a better option. Your mileage may vary.</p>
  <h2>Implementing DevOps is Really Fucking Hard™</h2>
  <p>DevOps is all about people and process, getting everyone working together to do fewer dumb things, and smart things faster. </p>
  <p>Historically, getting people to work together and not be jerks to one-another has been a bit of a challenge. Humans achieve awesome things when we collaborate (like spaceships and lasers), but we usually suck at working together. Because of that, I'm always impressed when I come across an excellent people-whisperer, someone who can motivate different groups to work towards a common goal without burning down each other's village. </p>
  <p>Problem is, there's like five of those people on the face of the planet and chances are, they don't work for your company. You might have lucked out and have 1 or 2 folks who are kind of OK at people-wrangling and peace-keeping, but most businesses (especially the bigger ones) seem about three seconds and a passive-aggressive sticky note in the office kitchen away from an all out blood bath. </p>
  <p>Assuming you can get people working together, you're now faced with the challenge of implementing process. You probably have one person on your team who loves process. Everyone else hates process and that person.</p>
  <h2>You're never finished</h2>
  <p>There's no such thing as "we achieved DevOps". It's a practice like healthy living or Buddhism. There has to be a champion(s) on your team who pushes every day to make things better. </p>
  <p>When someone talks about DevOps success, what they're really talking about is achieving flow, that there is a functional work process in place that is continually measured and improved upon. It's an <a href="https://en.wikipedia.org/wiki/Ouroboros">ouroboros</a> value pipeline. </p>
  <p>That's not something you can arrive at and stop tending to. Without constant care and feeding, the processes you worked so hard to implement will start to die off. </p>
  <p>No champion, no DevOps.</p>
  <h2>All that being said...</h2>
  <p>None of this means that DevOps isn't worth doing, just that you need to be realistic about the challenges you're going to face. I've leaned on hyperbole pretty hard to swing the pendulum away from sunshine and rainbows, because reality is somewhere in the middle. </p>
  <p>Getting Dev and Ops (and Security), groups who have traditionally walked down the hall waving their middle fingers at each other, to 1.) work together and 2.) implement and adhere to process, will likely be one of the most difficult things you've attempted in your career. You have to put a lot of work into making the right things the easy things, reducing friction wherever you can. Setting mandates or badgering doesn't work, you have to sell the value. </p>
  <p>Getting top-down buy-in (and understanding!) of true DevOps/Agile practices is hard. It requires reorganizing groups and a sustained sales pitch to all involved. The need for this trails off a little once the business and IT staff start seeing value, but expect it to be a long, sustained effort. I'm always a bit dubious when I hear something like "we transformed IT in three months" - either that group really has their shit together, someone is lying, or we're not using the same dictionary. </p>
  <p>For practitioners and evangelists, these are the things we need to start talking about more. There's a slick consultant vibe that's weaved throughout discussions about DevOps that glosses over the practical and prescriptive. Too many of these conversations focus on high-level what-to-dos and not enough on concrete how-tos and context, especially when it comes to people-centric issues.</p>
  <p>Originally posted on <a href="http://chrisdodds.net/dirty-secrets-of-devops/">chrisdodds.net</a></p>

preview_picture:
  https://res.cloudinary.com/practicaldev/image/fetch/s--AGDSZSE_--/c_imagga_scale,f_auto,fl_progressive,h_500,q_auto,w_1000/https://thepracticaldev.s3.amazonaws.com/i/56716wu39oyc0dsz8n54.jpg


title: CDN caching strategy for a high trafic site at L’Equipe
url: https://medium.com/@alboury36/cdn-caching-strategy-for-a-high-trafic-site-like-lequipe-d555e7ce1057
created_at: 2018-03-22 13:07:47
updated_at: 2018-03-22 13:07:47
mimetype: text/html
domain_name: medium.com
preview_picture: https://cdn-images-1.medium.com/max/1200/1*_FUpG58_d2BPPjbTCKUrTA.png
http_status: 200
content:
  <div class="section-divider"><hr class="section-divider" /></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h1 id="bcfb" class="graf graf--h3 graf--leading graf--title">CDN caching strategy for a high trafic site at L’Equipe</h1><p id="f015" class="graf graf--p graf-after--h3">This article is based on a presentation made at Cedexis office in June 2017.</p><p id="ead7" class="graf graf--p graf-after--p">Lequipe (www.lequipe.fr) is a French sport media (newspaper, sites and TV) and the first French media site in terms of traffic whith about 1.5 billion page views per month.</p><p id="c54c" class="graf graf--p graf-after--p">The site traffic peaks can be very abrupt according to sports events and exceed 5 Gbps. The outgoing annual traffic is approximately 4 Po (4000 Tera bytes).</p><p class="graf graf--p graf-after--p">NB This traffic, and therefore this article, does not include videos that are outsourced.</p><p class="graf graf--p graf-after--p">Until 2006 we just worked with our servers with ad hoc adjustments according to events like the World Cup soccer. From 2006 we experimented with a “home” cache solution proposed by our host.</p><p class="graf graf--p graf-after--p">But starting in 2008, as our traffic continues to grow, we decided it was time to use a content delivery network (CDN) solution, namely Akamai. <br />Akamai is most known CDN and I never had a problem with it. The only point of attention is that you have to negotiate its rates which can be very variable depending on who you are!</p><p id="c90d" class="graf graf--p graf-after--p">Next important step, in 2010, we started working with French company <a href="http://www.cedexis.com" class="markup--anchor markup--p-anchor" rel="nofollow noopener" target="_blank">Cedexis</a> (the Net Switcher) which is a multi CDN traffic distribution solution. L’Equipe was among its first customers.</p><p class="graf graf--p graf-after--p">The advantages of such a solution</p><ol class="postList"><li class="graf graf--li graf-after--p">fault tolerance of a CDN.</li><li class="graf graf--li graf-after--li">improved performance by automatically selecting the best CDN depending on the location and network of the user.</li><li class="graf graf--li graf-after--li">flexibility in management (you can divide your traffic between CDN to performances or costs)</li><li class="graf graf--li graf-after--li">enhanced independence (you do not depend on a single CDN)</li><li class="graf graf--li graf-after--li">better position when you renegotiate your bandwidth costs. Every year for us.</li></ol><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*_FUpG58_d2BPPjbTCKUrTA.png" alt="image" /></div><p class="graf graf--p graf-after--figure">At the time we used Akamai and Level 3. Later we replaced Level 3 with Limelight and recently Limelight with Max CDN.</p><p id="bc45" class="graf graf--p graf-after--p">In 2013, new evolution with the introduction of “CDN box”. <br />In practice they are servers with a Varnish, taken in our case at OVH and Online which give us for a modest rate a relatively large bandwidth. 1 Gbps at OVH and 400 Mbps at Online with an unsecured 1 Gbps burst.</p><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*kH1CEqODTYlQv8bYlrNbBg.png" alt="image" /></div><p class="graf graf--p graf-after--figure">The first advantage sought was the cost (about a tenth of a conventional CDN cost even well negotiated!). <br />These servers being located in France are also very effective for the traffic of lequipe.fr</p><p class="graf graf--p graf-after--p">The disadvantage is that the bandwidth is limited so you have to manage the peaks and avoid overflowing. For this, an algorithm is positioned on the Cedexis side to which we go back the bandwidth information on the CDN box and when we approach our limit a braking system allows to switch the traffic on a “real” CDN. This braking must of course be effective very quickly.</p><p class="graf graf--p graf-after--p">CDN box currently takes between 30 and 40% of our traffic.</p><p class="graf graf--p graf-after--p">Example of distribution of traffic between CDN on 24h</p><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*VV3uzHok1HquafHANyWmoA.jpeg" alt="image" /></div><p class="graf graf--p graf-after--figure"><strong class="markup--strong markup--p-strong">https migration</strong></p><p class="graf graf--p graf-after--p">This is where having many providers is a bit awkward. Indeed you must install your certificates on each CDN.<br />But we do not migrate to https every year !</p><p class="graf graf--p graf-after--p"><strong class="markup--strong markup--p-strong">Conclusion</strong></p><p id="ceaf" class="graf graf--p graf-after--p">The system put in place has met our expectations.</p><p class="graf graf--p graf-after--p">We were able to introduce the CDN boxs and also change CDN providers without problem. <br />And therefore maintain pressure on prices.</p><p class="graf graf--p graf-after--p graf--trailing">Cedexis allowed us to not be impacted by the recent OVH failure <br />On the other hand I think that 2 main CDN plus boxs is a good compromise, introduce more CDN would complicate the management for few gains except if one wants perfs on precise geographical zones.</p></div></div></div></div></div>


title: Drag and Drop for Design Systems – UX Collective
url: https://uxdesign.cc/drag-and-drop-for-design-systems-8d40502eb26d?gi=6157fab52e5d
created_at: 2018-03-22 13:07:53
updated_at: 2018-03-22 13:07:53
mimetype: text/html
domain_name: uxdesign.cc
preview_picture: https://cdn-images-1.medium.com/max/1200/1*bXCSaXR9_ky8vZyIIBwNgw.png
http_status: 200
content:
  <div class="section-inner sectionLayout--insetColumn"><p id="ad51" class="graf graf--p graf-after--h4">You probably use drag and drop in your everyday interfaces — dropping Gmail threads into folders, moving around Trello cards, or rearranging tabs in Chrome. These interactions are a lot more complex than you think, something that I learned while designing drag and drop patterns at VMware.</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*uHHXFO_Vm9FFGlXX95FCaA.gif" alt="image" /></div>Dropping Gmail threads into folders<div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*g6X_n0fj2K3e4Fdw714YwA.gif" alt="image" /></div>Moving Trello cards around (Asian crackers 😋)<div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*AOndnOVI2KDrKSGYYOOiwQ.gif" alt="image" /></div>Rearranging tabs in Chrome<p id="a6ed" class="graf graf--p graf-after--figure">Drag and drop interactions are often overlooked or go unnoticed. Sometimes they happen so naturally that you don’t even realize it. But if you look closely and compare these three examples, each one demonstrates very different UX standards around drag and drop.</p></div><div class="section-inner sectionLayout--insetColumn"><p id="abce" class="graf graf--p graf-after--figure">There’s nothing wrong with these interfaces having different UX standards around drag and drop. Each interface probably selected certain patterns over others for a reason. For example, maybe Trello chose to tilt cards when they are dragged because this behavior fits their friendly design language.</p><p class="graf graf--p graf-after--p">But where the problem lies is when there aren’t clear UX standards for drag and drop within a common interface. You might come across instances when dragging something in one part of an interface is a completely different experience in another.</p><p class="graf graf--p graf-after--p">To illustrate this, let’s take a look at <a href="https://salesforce-ux.github.io/dnd-a11y-patterns/#/canvas?_k=f9z073" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">Salesforce’s accessible drag and drop library</a>. It showcases five patterns for drag and drop, each of which is a drastically different experience from the other.</p></div><div class="section-inner sectionLayout--insetColumn"><p id="b397" class="graf graf--p graf-after--figure">While many great points are made about accessibility (check out <a href="https://medium.com/salesforce-ux/4-major-patterns-for-accessible-drag-and-drop-1d43f64ebf09" class="markup--anchor markup--p-anchor" target="_blank">an interesting article</a> written about it 👍🏻), unfortunately there is little design consistency across these five patterns. A different cursor is used in each of the five patterns, and there are three different icons being used as drag handles:</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*XrMdEyMk7YMqx0c4XCFVPA.png" alt="image" /></div>But which one is for drag and drop? Answer: All of them.<p id="c58a" class="graf graf--p graf-after--figure">Does a three-line icon indicate a draggable element? Or is it a three-dot icon? Which of the five cursors shows that I can drag things? Imagine the confusion of having all five patterns applied to one interface!</p><p class="graf graf--p graf-after--p">In a design system, components should look and feel like one cohesive entity. Likewise, drag and drop interactions should look and feel consistent across components within an interface.</p><blockquote id="b4f1" class="graf graf--pullquote graf-after--p"><div>Design systems don’t just create consistency across UI components — they should advocate for consistent experiences too.</div></blockquote><h3 class="graf graf--h3 graf-after--pullquote">Case Study</h3><p class="graf graf--p graf-after--h3">This is a UX case study about drag and drop patterns I worked on for <a href="https://vmware.github.io/clarity/" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">Clarity</a>, VMware’s design system. Clarity is open source, so our users aren’t just VMware employees, but anyone who wants to leverage our Angular-based library or design guidelines.</p><p class="graf graf--p graf-after--p">Our users requested the ability to perform drag and drop on some of our UI components: <a href="https://vmware.github.io/clarity/documentation/tree-view" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">tree view</a>, <a href="https://vmware.github.io/clarity/documentation/datagrid/structure" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">datagrid</a> (data table), and <a href="https://vmware.github.io/clarity/documentation/cards" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">cards</a>. My task was to unify the user experience across all of the following use cases involving drag and drop:</p><h4 id="a2fd" class="graf graf--h4 graf-after--p">Use cases</h4><ul class="postList"><li class="graf graf--li graf-after--h4">Reordering and nesting tree view nodes</li><li id="ffa9" class="graf graf--li graf-after--li">Reordering columns in a datagrid</li><li class="graf graf--li graf-after--li">Reordering rows in a datagrid</li><li class="graf graf--li graf-after--li">Drag and drop between a tree view and a datagrid</li><li class="graf graf--li graf-after--li">Rearranging and merging cards</li></ul><p id="c6d9" class="graf graf--p graf-after--li"><em class="markup--em markup--p-em">For data-heavy enterprise UIs like VMware’s, drag and drop is crucial to enabling our users to organize complex and large amounts of data.</em></p><h3 class="graf graf--h3 graf-after--p">Creating an affordance library</h3><p id="da12" class="graf graf--p graf-after--h3">I started by establishing a small library of simple, yet effective design affordances that represent drag and drop and tie separate instances of drag and drop together. That way, the affordances can still be applied to new use cases that aren’t one of the ones listed above.</p><p id="ed0e" class="graf graf--p graf-after--p"><em class="markup--em markup--p-em">If you work on a design system team, these might help you start thinking about how to address drag and drop patterns for your own design system.</em></p><h4 class="graf graf--h4 graf-after--p">1. The color purple (not the book, or the movie)</h4><p id="b39f" class="graf graf--p graf-after--h4"><strong class="markup--strong markup--p-strong">Use a distinct color choice that isn’t used often in your design system to identify drag and drop interactions.</strong> Avoid colors that already have significance in your interface (ex: red for destructive actions).</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*lVErPJgVdZJrwuWJOc5iKg.gif" alt="image" /></div>Rearranging cards (Stranger Things, amirite?)<p class="graf graf--p graf-after--figure">We chose the color purple to represent drag and drop in every single use case. Purple isn’t a primary color used in Clarity, so whenever users encounter the color purple, they can expect some sort of drag and drop experience. We purposely avoided using blue (which is a common color for drag and drop) because in Clarity, it’s reserved for action buttons and other clickable elements.</p><h4 id="dcbc" class="graf graf--h4 graf-after--p">2. State styles</h4><p class="graf graf--p graf-after--h4"><strong class="markup--strong markup--p-strong">Establish styles for the different states of an element being dragged.</strong> Specify exactly what kind of visual treatment an element will get while it’s being dragged, after it’s been dragged, etc.</p><p class="graf graf--p graf-after--p">In Clarity, while an element is dragged, it will have the following styles:</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*YPlKC1at3_7xnfAgET863w.png" alt="image" /></div>Reordering tree view nodes<p id="e7d5" class="graf graf--p graf-after--figure"><em class="markup--em markup--p-em">Adding a subtle drop shadow gives the impression the element is actually being picked up off of the page.</em></p><p id="cdbd" class="graf graf--p graf-after--p">Another state we added was the original position of an element while it’s being dragged, called Previous state.</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*unhz5-L_CmoNu1h4oDKcNg.png" alt="image" /></div>Nesting tree view nodes<p id="d0fc" class="graf graf--p graf-after--figure">This acts as a small reminder to users where the element was previously. Note that this state wouldn’t apply to natural movement drag and drop, which is when other elements naturally move out of the way of a dragged element.</p><h4 class="graf graf--h4 graf-after--p">3. System cursors</h4><p id="e6a7" class="graf graf--p graf-after--h4"><strong class="markup--strong markup--p-strong">Use system cursors to indicate when an element is draggable</strong>. This one seems minor, but will significantly improve discoverability of draggable elements.</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*WD0D_mMnUHIj8Hvi4s9fgQ.png" alt="image" /></div><p class="graf graf--p graf-after--figure">For Mac, we use the <em class="markup--em markup--p-em">grab</em> (open Mickey Mouse hand) and <em class="markup--em markup--p-em">grabbing</em> (closed Mickey Mouse hand) cursors. The <em class="markup--em markup--p-em">grab </em>cursor appears on hover when an element is draggable. Once it’s dragged, the cursor will change to the <em class="markup--em markup--p-em">grabbing </em>cursor. For areas where an element cannot be dropped, we used the <em class="markup--em markup--p-em">unavailable </em>cursor.</p><p id="d492" class="graf graf--p graf-after--p">For Windows, we use the <em class="markup--em markup--p-em">move</em> cursor (arrow cross). The cursor will remain the <em class="markup--em markup--p-em">move </em>cursor while an element is dragged. Again, for areas where an element cannot be dropped, we used the <em class="markup--em markup--p-em">unavailable </em>cursor.</p><h4 class="graf graf--h4 graf-after--p">4. Drop targets</h4><p class="graf graf--p graf-after--h4"><strong class="markup--strong markup--p-strong">Establish patterns for drop targets, which are valid areas where dragged elements can be dropped. </strong>Like state styles above, explicitly write out what styles drop targets have.</p><p class="graf graf--p graf-after--p">Since reordering is a key drag and drop interaction, we specified a <em class="markup--em markup--p-em">position </em>drop target, which indicates the position where an element will be dropped.</p></div><div class="section-inner sectionLayout--insetColumn"><p class="graf graf--p graf-after--figure">We added a circle to the left-end of the position target to differentiate the drop target even more from just a normal line or border. This is an important additional affordance, especially to color-blind users who might not notice the color change.</p><h4 class="graf graf--h4 graf-after--p">Case-by-case affordances</h4><p class="graf graf--p graf-after--h4">One area that depends on a case-by-case basis is when to present drag handles. Drag handles are small icons that indicate an element is draggable. Gmail chose a 12-dot icon for drag handles, while we chose a six-dot icon for drag handles:</p><div class="aspectRatioPlaceholder is-locked"><img class="graf-image" src="https://cdn-images-1.medium.com/max/1600/1*BJPwV1Tad7qo11p9mva3Nw.png" alt="image" /></div><p id="fe4a" class="graf graf--p graf-after--figure">The presence of drag handles largely depends on context. For components that don’t typically involve drag and drop, a drag handle helps users discover drag and drop as an available action. But in cases where drag and drop is always an expected behavior, it isn’t necessary.</p><p class="graf graf--p graf-after--p">For example, we didn’t present handles in a tree view because it’s expected to be able to move around nodes in a tree view. However, we did present handles for cards because not all cards are draggable.</p><p id="c58d" class="graf graf--p graf-after--p">There are many different icons used to represent drag handles, but choose only one and stick with it.</p><h3 class="graf graf--h3 graf-after--p">One drag and drop family</h3><p id="fe93" class="graf graf--p graf-after--h3">These standards will help set up a basic foundation for connecting drag and drop instances within an interface, but there are many other ways to standardize drag and drop across components.</p><p class="graf graf--p graf-after--p">Setting up any kind of UX standard will help drag and drop become a familiar interaction rather than feeling like a disjointed experience. See how the drag and drop use cases I designed all came together after I applied the affordance library: <a href="https://invis.io/2MFBFWUY3NG" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">Invision</a>.</p><p id="ea3b" class="graf graf--p graf-after--p">The Clarity team is just starting the development process for these drag and drop patterns, starting with <a href="https://github.com/vmware/clarity/issues/1771" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">reordering columns in a datagrid</a>. You can actually track development progress in our <a href="https://github.com/vmware/clarity" class="markup--anchor markup--p-anchor" rel="noopener" target="_blank">GitHub repo</a>. 🎉</p><h4 id="c410" class="graf graf--h4 graf-after--p">Sources</h4><ul class="postList"><li class="graf graf--li graf-after--h4"><a href="https://medium.com/@alexandereardon/rethinking-drag-and-drop-d9f5770b4e6b" class="markup--anchor markup--li-anchor" target="_blank">Alex Reardon’s amazing article</a> was my drag and drop bible</li><li id="eea0" class="graf graf--li graf-after--li"><a href="https://salesforce-ux.github.io/dnd-a11y-patterns/#/canvas?_k=6ikxim" class="markup--anchor markup--li-anchor" rel="noopener" target="_blank">Salesforce UX’s accessible drag and drop patterns</a></li></ul></div>


title: La blockchain expliquée aux développeurs web, 3ème partie : la vérité sur la blockchain
url: https://marmelab.com/blog/2016/06/24/blockchain-expliquee-aux-developers-web-la-verite.html
created_at: 2018-03-22 13:08:07
updated_at: 2018-03-22 13:08:07
mimetype: text/html
domain_name: marmelab.com
preview_picture: https://marmelab.com/images/blog/chainwall.jpg
http_status: 200
content:
  <p>Après avoir <a href="https://marmelab.com/blog/2016/05/12/blockchain-expliquee-aux-developpeurs-web-la-theorie.html">exploré de manière théorique la blockchain</a>, et après avoir <a href="https://marmelab.com/blog/2016/05/20/blockchain-for-web-developers-in-practice.html">utilisé la blockchain pour de vrai</a>, nous avons maintenant une meilleure compréhension de ses forces et de ses faiblesses. Surprise : nos conclusions sont très différentes de ce que vous pourrez lire ailleurs sur le web. Peut-être est-ce parce que nous ne relayons pas aveuglément la fascination ambiante, engendrée par l'impressionnante valorisation du BitCoin et des autres crypto-monnaies. C'est sûrement dû au fait que la dure réalité à propos de la blockchain, c'est qu'en fait elle n'est pas encore prête. Ce billet décrit en détail comment nous en sommes arrivés à cette conclusion, et les preuves solides sur lesquelles nous nous appuyons. Il est la traduction d'un <a href="https://marmelab.com/blog/2016/06/14/blockchain-for-web-developers-the-truth.html">billet en langue anglaise</a> publié il y a quelques jours sur ce même blog.</p><div class="tips">
  <p>Vous préférez la version en vidéo ? Cette série d'articles a donné lieu à une conférence de 40 minutes, que vous pouvez visionner en ligne. Rendez-vous sur l'article associé: <a href="https://marmelab.com/blog/2018/01/25/blockchain-conference.html">La blockchain, quand l'individu sert au collectif... malgré lui</a></p>
  </div>
  <h2 id="la-technologie-nest-pas-assez-mature"><a href="https://marmelab.com/blog/2016/06/24/blockchain-expliquee-aux-developers-web-la-verite.html#la-technologie-nest-pas-assez-mature" class="anchor"></a>La technologie n'est pas assez mature</h2>
  <p>Comme nous l'avons expliqué en détail dans <a href="http://marmelab.com/blog/2016/05/20/blockchain-for-web-developers-in-practice.html">le second article de cette série</a>, développer des <strong>DApps</strong> (<em>Decentralized Apps</em> en anglais) sur la blockchain, c'est douloureux. La communauté des développeurs est plutôt restreinte, les extraits de code disponibles ne fonctionnent pas, les tutoriels sont périmés, les librairies sont criblées de bugs, il n'y a pas d'outils pour développer, les bugs ne déclenchent pas d'alertes, etc.</p>
  <p>Ce n'est pas parce que les développeurs et la communauté Ethereum sont mauvais. Bien au contraire : ils sont incroyables, et ils investissent beaucoup de temps et d'expertise dans leurs outils. Mais construire un <em>framework</em> de blockchain, c'est beaucoup de travail, et ils n'en sont même pas à la moitié. Ethereum n'a pas encore atteint le point il est vraiment utilisable. J'ai la certitude que cela va changer dans le futur, mais je ne sais pas si ça prendra des mois ou des années.</p>
  <p><a href="https://en.wikipedia.org/wiki/Science_and_inventions_of_Leonardo_da_Vinci" title="Oui, c'est une bonne idée, mais il faudrait travailler un peu plus pour qu'elle devienne utilisable"><img src="https://marmelab.com/images/blog/Da-Vinci-glider.jpg" class="medium" alt="image" /></a></p>
  <p><strong>Note</strong>: Nous n'avons pas développé d'application décentralisée (DApp) pour Bitcoin, mais j'ai entendu dire que c'était encore pire. Au lieu d'utiliser un langage proche de JavaScript (Solidity) pour écrire les smart contracts, il faut utiliser un langage proche de l'assembleur, qui n'est même pas <a href="https://fr.wikipedia.org/wiki/Turing-complet">Turing-complet</a>. Beurk.</p>
  <p>La conséquence est que <strong>les développeurs ne veulent pas travailler sur des projets blockchain</strong>. Ils trouvent cette technologie très frustrante. Si vous les forcez à travailler avec une technologie qu'ils détestent, ils partiront. Et vu qu'il est extrêmement difficile de trouver des développeurs compétents ces temps-ci, vous devriez regarder à deux fois avant de vous lancer sur la blockchain.</p>
  <p>La deuxième conséquence est qu'<strong>il est impossible d'estimer le temps que prendra un projet</strong> sur la blockchain. Et si vous ne pouvez pas estimer vos coûts, je vous souhaite bonne chance pour construire un Business model sur la blockchain.</p>
  <h2 id="les-smart-contracts-ne-peuvent-pas-appeler-dapi"><a href="https://marmelab.com/blog/2016/06/24/blockchain-expliquee-aux-developers-web-la-verite.html#les-smart-contracts-ne-peuvent-pas-appeler-dapi" class="anchor"></a>Les Smart Contracts ne peuvent pas appeler d'API</h2>
  <p>Dans notre expérimentation sur la blockchain, tout ce qui était un peu intelligent dans le <em>smart contract</em> a dû être déplacé vers un bon vieux service web tournant <strong>hors de la blockchain</strong>, dans un environnement de confiance. Par exemple, un smart contract ne peut pas déterminer si la personne demandant un emplacement publicitaire est bien l'auteur d'une <em>pull request</em>, parce qu'un smart contract ne peut pas appeler l'API GitHub. Du coup, notre smart contract ne conserve que très peu de logique, et devient, par voie de conséquence, un <strong>dumb contract</strong>. Ce n'est pas ce que nous voulions, mais nous n'avons pas pu faire autrement.</p>
  <p><a href="https://en.wikipedia.org/wiki/Pulp_Fiction" title="Impossible d'appeler le monde extérieur"><img src="https://marmelab.com/images/blog/blockchain_gag.png" class="medium" alt="image" /></a></p>
  <p>La blockchain est conçue pour être déterministe. Cela veut dire que si vous prenez tout l'historique des transactions, et que vous les rejouez localement, vous devez aboutir au même état que tous les autres noeuds. C'est ce qui interdit d'appeler des API externes, car les réponses pourraient varier dans le temps, ou varier selon celui qui les appelle.</p>
  <p>Une blockchain est un espace clos. On peut y exécuter un contrat venu du monde extérieur, mais le contrat lui-même ne peut pas dépendre de données provenant d'une source externe. Si un smart contract nécessite des données externes, il faut <strong>injecter ces données dans blockchain</strong> au préalable.</p>
  <p>Dans la vraie vie, très peu d'applications fonctionnent de manière isolée. <strong>Toutes</strong> les applications que nous avons développées ces trois dernières années reposaient sur des API externes - pour de la gestion d'identité, du paiement, de la transformation d'image, du stockage, etc. En pratique, les possibilités trop limitées des smart contracts les rendent inutiles.</p>
  <p>Des efforts sont faits pour permettre aux smart contracts d'appeler à l'extérieur, avec notamment le concept des <a href="http://www.oraclize.it/">oracles</a>. Mais un oracle a besoin d'un système de réputation et une gouvernance centralisée. Fini la désintermédiation, retour à la case départ.</p>
  <h2 id="il-faut-un-doctorat-pour-sy-retrouver"><a href="https://marmelab.com/blog/2016/06/24/blockchain-expliquee-aux-developers-web-la-verite.html#il-faut-un-doctorat-pour-sy-retrouver" class="anchor"></a>Il faut un doctorat pour s'y retrouver</h2>
  <p>Si vous avez lu le premier article de cette série, vous pensez probablement que vous avez compris la blockchain. Vraiment ? Alors allez lire <a href="http://www.truthcoin.info/blog/contracts-oracles-sidechains/">cet article</a> pour voir. Je suis un ingénieur moyen avec seulement 20 ans d'expérience en développement web, et je n'ai plus rien compris à partir de la référence à Jurassic Park. Des termes comme "<em>two-way-pegged blockchains</em>", "<em>pre-determined Host Oracle Contract</em>", et des phrases comme "<em>The M-S result, combined with our inability to feed (non-BB) a revelation mechanism, means that Oracles are out</em>" me donnent la désagréable impression d'être un étudiant de première année.</p>
  <p>Le concept de blockchain est <strong>complexe</strong>. Les implémentations existantes s'appuient sur des design patterns rares, que l'on n'apprend pas à l'école. Le vocabulaire de la blockchain est cabalistique.</p>
  <p><a href="https://flic.kr/p/5GyYVj" title="Ca ne va pas suffire"><img src="https://marmelab.com/images/blog/cs_library.jpg" class="medium" alt="image" /></a></p>
  <p>Développer des applications décentralisées en s'appuyant sur la blockchain nécessite de comprendre trop de concepts compliqués, qui ne tiennent pas dans le cerveau d'un développeur moyen. A mon avis, il n'y a pas assez de programmeurs hautement compétents pour assurer la révolution promise par la blockchain. Et il n'y en aura jamais, tant que ce sera si difficile à comprendre.</p>
  <p>Il en résulte que <strong>la plupart des apps décentralisées sont vraiment bugguées</strong>. Un article récent annonçait que <a href="http://vessenes.com/ethereum-contracts-are-going-to-be-candy-for-hackers/">les smart contracts Ethereum contiennent 1 bug toutes les 10 lignes de code</a>, faisant d'Ethereum "du pain béni pour les hackers". Ce ne serait pas vraiment un problème si les bugs n'étaient pas si difficiles à corriger. Malheureusement, comme nous l'avons expliqué dans <a href="http://marmelab.com/blog/2016/05/20/blockchain-for-web-developers-in-practice.html">l'article précédent</a>, vous ne pouvez pas mettre à jour un smart contract. Vous devez créer un nouveau contrat, transférer toutes les données et les pointeurs depuis l'ancien contrat vers le nouveau, et attendre que la blockchain propage les changements. Les vieux contrats tout buggés restent dans la blockchain pour toujours.</p>
  <h2><a href="https://marmelab.com/blog/2016/06/24/blockchain-expliquee-aux-developers-web-la-verite.html#le-pouvoir-aux-développeurs" class="anchor"></a>Le pouvoir aux développeurs</h2>
  <p>Les créateurs de blockchains disent que c'est un espace où "le code, c'est la loi" (<em>Code as law</em> en anglais). Je ne veux pas trop noircir le tableau, mais, dans mon esprit, les scénarios possibles d'une société gouvernée par des machines ne se terminent pas tous par un "happy end".</p>
  <p><a href="https://en.wikipedia.org/wiki/The_Terminator" title="Quand les machines contrôlent le monde"><img src="https://marmelab.com/images/blog/skynet.jpg" alt="When machines control the world" class="medium" /></a></p>
  <p>"Le code, c'est la loi", ça veut aussi dire "les bugs, c'est la loi", vu que tout programme contient des bugs. Ces bugs peuvent être utilisés par certains développeurs malins (les criminels, la NSA, etc.) pour s'affranchir de jouer selon les règles. Les bugs sont très courants, même dans des projets open-source célèbres.</p>
  <p>Bitcoin, par exemple, a dû essuyer de nombreux <a href="http://uk.businessinsider.com/bitcoin-app-blockchain-issues-critical-update-random-number-bug-security-breakdown-android-2015-6">bugs critiques qui ont mené à des "cyber-vols"</a>. Le récent <a href="http://nakamotoinstitute.org/mempool/ethereum-is-doomed/">scandale de la DAO</a> (la DAO est une sorte de KickStarter ouvert, basé sur Ethereum) jette lui aussi une lumière crue sur ce problème : en utilisant une faille dans un smart contract, un hacker a siphonné 50 millions de dollars, en toute légalité. Donc laisser les clefs aux développeurs, ça veut dire donner un pouvoir extraordinaire aux <strong>développeurs moyens</strong>.</p>
  <p>Et même si l'on écarte les développeurs moyens, donner le pouvoir aux bons développeurs est également dangereux. Le problème, c'est que <strong>les développeurs sont irresponsables</strong> (sans vouloir être méchant - je suis un développeur moi-même). Ce n'est pas qu'ils soient puérils, c'est juste que personne ne leur a jamais demandé d'écrire des lois et de les assumer.</p>
  <p>De plus, les développeurs ne sont pas élus par la population. Si vous n'êtes pas d'accord avec la direction que prend Bitcoin (favorisant la spéculation plutôt que des applications pratiques), tant pis pour vous. Il n'y a rien que vous puissiez faire contre cela. Et c'est ce qui arrive actuellement : le réseau Bitcoin <a href="https://medium.com/@octskyward/the-resolution-of-the-bitcoin-experiment-dabb30201f7">subit une crise majeure</a> à cause d'une mésentente entre quelques développeurs centraux.</p>
  <p>La décision d'une demi-douzaine de développeurs pourrait causer l'effondrement d'une capitalisation d'un milliard de dollars. Mais personne ne les tiendra pour responsables si cela arrive.</p>
  <h2><a href="https://marmelab.com/blog/2016/06/24/blockchain-expliquee-aux-developers-web-la-verite.html#un-gigantesque-gâchis" class="anchor"></a>Un gigantesque gâchis</h2>
  <p>Une blockchain effectue des traitements automatisés <strong>pas optimisés</strong> du tout. C'est même un immense gâchis de ressources.</p>
  <p>Prenez la réplication de données par exemple. La blockchain <strong>réplique toutes les transactions sur tous les noeuds</strong>. Les ingénieurs ont inventé depuis longtemps des stratégies de réplication avec une meilleure gestion de l'espace mémoire. Comparez la Blockchain avec <a href="https://fr.wikipedia.org/wiki/RAID_(informatique)#RAID_6">une grappe de disques en RAID6</a> par exemple:</p>
  <blockquote>
  <p>Dans un réseau Blockchain, 10 noeuds de 1GB chacun permettent la réplication d'un volume de données total de 1GB. Vous pouvez perdre jusqu'à 9 noeuds, et récupérer l'ensemble des données.</p>
  <p>Dans une grappe RAID6, 10 disques dur de 1GB chacun permettent la réplication d'un volume de données total de 8GB. Vous pouvez perdre jusqu'à 2 disques durs, et récupérer l'ensemble des données.</p>
  </blockquote>
  <p>Miner des bitcoins nécessite du matériel très cher, avec des cartes graphiques très puissantes et beaucoup de mémoire. Les fermes de minage représentent des investissements considérables. Si vous vous demandez à quoi ça ressemble, jetez un oeil à <a href="http://motherboard.vice.com/read/chinas-biggest-secret-bitcoin-mine">ce reportage éclairant sur une ferme de minage secrète en Chine</a>.</p>
  <p>99.99% de la capacité de calcul est tout bonnement gâchée. Tous les mineurs sont en compétition pour miner un bloc en essayant de résoudre des challenges mathématiques complexes. Dans Bitcoin, seul un noeud gagne toutes les 10 minutes. Seul ce noeud est réellement utile à la chaîne, en créant un bloc. Les calculs faits par tous les autres noeuds sont purement et simplement jetés à la poubelle.</p>
  <p>Ethereum est en train d'essayer de résoudre ce problème : ils pensent basculer d'un algorithme de consensus dit de <em>proof-of-work</em> vers un algorithme de consensus dit de <a href="https://blog.ethereum.org/2015/12/24/understanding-serenity-part-i-abstraction/"><em>proof-of-stake</em></a>, qui est bien moins gourmand en ressources. Mais le proof-of-stake a lui aussi des effets de bord, comme le fait de donner plus de pouvoir aux personnes ou aux sociétés qui possèdent de grandes quantités de monnaie virtuelle. De toute façon, c'est loin d'être déjà opérationnel (pas avant un an).</p>
  <p><a href="https://flic.kr/p/3Bzjgg" title="Power Plant at Sunset"><img src="https://marmelab.com/images/blog/power_plant.jpg" class="medium" alt="image" /></a></p>
  <p>Ce gâchis de stockage, de capacité de calcul et de mémoire se traduit par un énorme gâchis en énergie. Si l'on en croit un opérateur de ferme de minage de Bitcoin, <a href="http://www.coindesk.com/carbon-footprint-bitcoin/">produire un Bitcoin en 2014 nécessitait 240kWh</a> (l'équivalent de 60 litres d'essence). Les fermes de minage sont des usines transformant l'électricité en chaleur. <strong>Une blockchain est, en résumé, un gros radiateur</strong>. L'efficacité énergétique est un sujet important dans le contexte actuel de réchauffement climatique.</p>
  <h2><a href="https://marmelab.com/blog/2016/06/24/blockchain-expliquee-aux-developers-web-la-verite.html#très-chers-contrats" class="anchor"></a>Très chers contrats</h2>
  <p>Qui paie pour l'énergie dilapidée ? Les compagnies qui publient et utilisent les smart contracts. Oui, c'est vous, si vous voulez monter un business sur la blockchain. Lorsque vous payez pour une transaction sur la blockchain, vous payez aussi pour les 99.99% du réseau qui tourne à fond pour rien. Cela rend les transactions sur la blockchain <strong>très chères</strong>.</p>
  <p><a href="http://www.publicdomainpictures.net/view-image.php?image=32972&amp;" title="Un million de dollars en billets"><img src="https://marmelab.com/images/blog/money_suitcase.jpg" alt="Un million de dollars en billets" class="medium" /></a></p>
  <p>En moyenne, une transaction BitCoin coûte <a href="https://bitcoinfees.21.co/">BTC 0.0002</a> ($0.11) en frais de transaction. Ce montant est en train d'augmenter. Ce n'est pas vraiment moins cher que les frais de transaction entre deux banques (à moins que vous ne considériez un transfert entre deux banques de deux pays et deux monnaies différentes, bien sûr).</p>
  <p>Pour ZeroDollarHomepage, exécuter une méthode de 10 lignes dans un contrat Ethereum coûte environ un cent ($0.01). C'est horriblement cher. Amazon Lambda, par comparaison, <a href="https://aws.amazon.com/lambda/pricing/">coûte $0.0000002 par requête</a> (après le premier million de requêtes gratuit par mois).</p>
  <p>Il est normal de payer pour des coûts d'hébergement lorsque vous utilisez une plate-forme, mais les coûts sur la blockchain sont beaucoup, beaucoup plus chers que le plus cher des <em>Platform-as-a-Service</em>.</p>
  <h2><a href="https://marmelab.com/blog/2016/06/24/blockchain-expliquee-aux-developers-web-la-verite.html#volatilité-et-spéculation" class="anchor"></a>Volatilité et Spéculation</h2>
  <p>Vous pourriez dire que les coûts liés à la blockchain ne sont pas un problème, tant que des personnes sont prêtes à utiliser ce réseau et à payer pour ces transactions. C'est une question d'offre et de demande, et la demande pour les monnaies virtuelles est suffisamment élevée pour que le système soit profitable. Mais cette demande élevée amène de la spéculation, ce qui rend <strong>très volatile</strong> le prix des transactions dans une blockchain (n'importe laquelle).</p>
  <p><a href="http://bitcoincharts.com/charts/bitstampUSD#tgCzm1g10zm2g25" title="Cours du Bitcoin en Dollars en USD"><img src="https://marmelab.com/images/blog/btc2usd.png" alt="Cours du Bitcoin en Dollars" class="responsive" /></a></p>
  <p>Certains analystes <a href="https://next.ft.com/content/1877c388-8797-11e5-90de-f44762bf9896">comparent Bitcoin à une pyramide de Ponzi</a>, et prédisent que sa valeur sur le marché va s'effondrer au moment ou l'intérêt général aura disparu.</p>
  <p>Si vous bâtissez un business sur la blockchain d'Ethereum, la plupart des dépenses seront en Ether. Si vous ne le minez pas vous-mêmes, il faudra payer cet Ether avec de l'argent sonnant et trébuchant. Mais vu que la valeur en Dollars US de l'Ether est susceptible de décupler d'ici un an, un tel business peut rapidement passer de rentable à très déficitaire au cours de cette même période. Et vous ne pourrez rien faire contre ça. Par ailleurs, si vous minez vous-mêmes, ce qui est aujourd'hui abordable (faire tourner un petit serveur pour couvrir ses dépenses en Ether) peut devenir très cher une fois que de grandes fermes cesseront de miner du Bitcoin (de moins en moins rentable) pour miner de l'Ether.</p>
  <p>La grande volatilité des monnaies virtuelles <strong>interdit à tout business model d'être profitable à long terme</strong> s'il est construit sur la blockchain - à part si ce business model est basé sur la spéculation.</p>
  <h2><a href="https://marmelab.com/blog/2016/06/24/blockchain-expliquee-aux-developers-web-la-verite.html#lent-à-pleurer" class="anchor"></a>Lent à pleurer</h2>
  <p>Comparé à de nombreuses innovations liées aux ordinateurs et aux réseaux, la blockchain est <strong>extrêmement lente</strong>. Les experts disent qu'il faut <a href="https://en.bitcoin.it/wiki/Confirmation">attendre 6 blocs pour être certain qu'une transaction soit légitime</a>. Ce qui veut dire plus d'une minute sur Ethereum, ou plus d'une heure sur Bitcoin.</p>
  <p>Sur un <em>Ad server</em> traditionnel, planifier une publicité prend environ 100ms. Si vous avez utilisé notre <em>Adserver</em> ZeroDollarHomepage bâti sur la blockchain, vous avez probablement eu une expérience très différente : planifier une publicité prend environ une minute. La communication avec réseau blockchain et la réplication des transactions sont rapides ; la majorité du temps est passée à attendre que le réseau <em>mine la transaction</em>, et qu'il ajoute quelques blocs après ça. Au final, la blockchain Ethereum est <strong>vraiment beaucoup plus lente que de l'informatique traditionnelle</strong>.</p>
  <p><a href="https://www.google.com/search?as_st=y&amp;tbm=isch&amp;hl=fr&amp;as_q=spinner+gif&amp;as_epq=&amp;as_oq=&amp;as_eq=&amp;cr=&amp;as_sitesearch=&amp;safe=images&amp;tbs=isz:i,itp:animated" title="Une DApp, ça eessemble à ça"><img src="https://marmelab.com/images/blog/spinner.gif" alt="wait" /></a></p>
  <p>Pour les utilisateurs, chaque seconde compte. L'<a href="https://docs.google.com/presentation/d/11fLFu-Mq5zM3wAfZkMbEzJSu6dy9cp2HH0njU11OPPI/edit">optimisation de la performance web</a> met l'accent sur l'augmentation des revenus par le gain d'une ou deux secondes sur le temps de chargement. Parier sur une technologie qui nécessite d'obtenir un accord du monde entier à chaque transaction n'est pas la meilleure manière de faire du business.</p>
  <h2><a href="https://marmelab.com/blog/2016/06/24/blockchain-expliquee-aux-developers-web-la-verite.html#libéralisme-et-anarchie" class="anchor"></a>Libéralisme et anarchie</h2>
  <p>Une des promesses de la blockchain est de libérer les marchés qui nécessitent encore un intermédiaire. Plus d'avocats, de banquiers, ni de bookmakers. Une super opportunité pour de nouveaux business ?</p>
  <p>C'est sans compter sur le fait que ces intermédiaires signalent les activités criminelles aux forces de l'ordre, qui se chargent ensuite de faire appliquer la loi. Si vous supprimez les intermédiaires, vous supprimez également la police, et vous laissez donc les criminels proliférer. La première application d'envergure acceptant les bitcoins s'appelait <a href="https://en.wikipedia.org/wiki/Silk_Road_(marketplace)">The Silk Road</a>. C'était un marché noir en ligne pour tout ce qui est illégal : drogues, armes, pédopornographie... Sans compter l'utilisation des monnaies virtuelles pour l'évasion fiscale.</p>
  <p><a href="https://en.wikipedia.org/wiki/The_Princess_Bride_(film)" title="Une référence à The Silk Road se cache dans cette image. Sauras-tu la retrouver ?"><img src="https://marmelab.com/images/blog/The-Princess-Bride.jpg" class="medium" alt="image" /></a></p>
  <p>Même les ultra-libéraux reconnaissent qu'un certain niveau de régulation économique est nécessaire pour éviter le chaos total. Faire du business au milieu de criminels et sans police n'est jamais rentable - à moins que vous ne soyez un criminel vous-même. Par exemple, la <a href="https://en.wikipedia.org/wiki/Mt._Gox">Banqueroute Mt. Gox de 2014</a> a coûté près de 450 millions de dollars aux utilisateurs de Bitcoin.</p>
  <p>Tout comme il a fallu longtemps aux gouvernements pour <a href="https://en.wikipedia.org/wiki/Who_Controls_the_Internet%3F">contrôler Internet</a> (qui était, et reste, un havre pour les criminels), il faudra du temps aux régulateurs pour contrôler l'anarchie engendrée par la blockchain. La blockchain a beau porter en elle la promesse d'un futur meilleur sur le long terme, pour ce qui est du futur proche, mieux vaut sortir armé.</p>
  <h2 id="avez-vous-vraiment-besoin-dune-blockchain-"><a href="https://marmelab.com/blog/2016/06/24/blockchain-expliquee-aux-developers-web-la-verite.html#avez-vous-vraiment-besoin-dune-blockchain-" class="anchor"></a>Avez-vous vraiment besoin d'une blockchain ?</h2>
  <p>Les plus enthousiastes au sujet de la blockchain sont des personnes qui ne comprennent pas vraiment ses forces ni ses faiblesses. Ils utiliseraient probablement une autre solution s'ils étaient mieux informés. Voici quelques fausses bonnes raisons de choisir la blockchain.</p>
  <p><strong>Vous pouvez utiliser une blockchain privée</strong> Près de 80% des projets blockchain dont j'entends parler, spécialement dans le domaine de la finance, misent sur des blockchains privées. Cela va totalement à l'encontre du principe même de blockchain, qui est d'obtenir un accord entre des tiers malgré l'absence de tiers de confiance. Si un projet tourne sur une blockchain privée, alors seuls des tiers de confiance peuvent le rejoindre, et il n'y a donc pas de problème de confiance. Et dans un réseau contrôlé, il y a de très nombreux autres outils pour partager un registre de faits - et bien mieux optimisés que la blockchain (un web service par exemple).</p>
  <p><strong>Cela permet d'obtenir un consensus distribué</strong> C'est vrai, mais seulement si ce consensus peut être écrit avec du code. Par exemple, une société travaillant dans la gestion des droits d'auteur de musique nous a récemment contacté pour bâtir une plate-forme internationale de rétribution des artistes via la blockchain. Sauf que quand deux pays sont en désaccord sur la façon de rétribuer des ayant-droits, chaque pays a déjà un contrat valide dans son droit local. Seul un tribunal les mettre d'accord, en utilisant l'esprit des lois et non la lettre - aucun smart contract ne peut remplacer cela. Il faut donc, avant de passer sur une blockchain, des règles de gouvernance qui fonctionnent déjà.</p>
  <p><strong>C'est sécurisé</strong> La cryptographie asymétrique est une des forces de la blockchain. Cependant, la technologie blockchain, au même titre que toutes les autres technologies, est sécurisée jusqu'à ce que quelqu'un y trouve une faille. C'est déjà arrivé par le passé. Les concepts informatiques derrière la blockchain sont si complexes que seuls quelques développeurs sont en mesure de contribuer ou de faire des revues de code. Pour moi, les smart contracts et les blockchains sont relativement moins sûrs que, disons,  TSL sur le web (via HTTPS). Et même si le code marchait parfaitement, il ne pourrait pas empêcher la fraude. Vous vous souvenez du <a href="https://marmelab.com/blog/2016/04/28/blockchain-for-web-developers-the-theory.html">problème de double dépense</a> de notre premier article ? En fait, des gens tentent régulièrement ce mauvais coup sur les blockchains (voir les <a href="https://blockchain.info/double-spends">200 dernières double dépenses sur la blockchain Bitcoin</a>).</p>
  <p><a href="https://flic.kr/p/2KcaZ" title="Dicemanic"><img src="https://marmelab.com/images/blog/transparent_dice.jpg" class="medium" alt="image" /></a></p>
  <p><strong>C'est transparent</strong> Entendu, toutes les transactions sont publiques, et affichent <a href="https://blockchain.info/en/inv/f30407f7b07ba59ef4b176ad79e9f7816d4d8e947ce66587a6646a3e11fad690">la localisation et l'adresse IP</a> de l'expéditeur. Mais aucune information personnelle ne transite jamais - seulement des hashs anonymes. Même le créateur de Bitcoin est un mystère. Donc la transparence de la blockchain ne protège ni du crime, ni de la fraude. De plus, la transparence est généralement un inconvénient pour le business. Est-ce que vous seriez prêt à parier sur une technologie qui permet à tout le monde de suivre toutes vos transactions, et qui expose votre code aux hackers ?</p>
  <p><strong>Les données sont répliquées et sécurisées</strong> Bien sûr, mais avec la pire des stratégies du point de vue rendement. Amazon S3 réplique chaque octet de donnée au moins 3 fois avec une disponibilité de 100%, pour une fraction du prix. Et si vous avez réellement besoin d'un historique complet de vos transactions, utilisez un <a href="https://geteventstore.com/">event store</a>.</p>
  <p><strong>Ca permet de connecter des pairs anonymes</strong> Mais si c'est seulement pour un stockage partagé (par exemple, si vous n'avez pas besoin d'un ordonnancement des transactions), alors un protocole peer-to-peer comme BitTorrent fait l'affaire.</p>
  <p><strong>C'est tendance</strong> Ah là, personne ne peut dire le contraire. Crier le mot "blockchain" à tous les vents est actuellement une excellente manière de décrocher un budget d'innovation. Cependant, beaucoup des produits existants qui prétendent se baser sur la blockchain ne sont en fait que des présentations powerpoint. A côté de ça, vous obtiendrez certainement de meilleurs résultats avec une autre technologie. Et il n'es pas besoin de rappeler que le terme blockchain évoque également blanchiment d'argent, fraude fiscale, et pornographie.</p>
  <p>Si vous voulez développer un business avec la blockchain, assurez-vous au préalable que vous en avez besoin, et que cela sera vraiment utile pour vous.</p>
  <h2 id="conclusion"><a href="https://marmelab.com/blog/2016/06/24/blockchain-expliquee-aux-developers-web-la-verite.html#conclusion" class="anchor"></a>Conclusion</h2>
  <p>Les blockchains sont une idée brillante, avec d'immenses implications possibles. Mais les implémentations actuelles sont-elles prêtes pour supporter les applications révolutionnaires de la prochaine décennie ?</p>
  <p>Du point de vue technique, certaines fonctionnalités élémentaires ne sont tout simplement pas faisables. Les blockchains ne sont pas assez rapides, pas assez attirantes pour les développeurs, et donnent beaucoup trop de pouvoir à une petite ligue de développeurs extraordinaires sans fondations politiques et économiques suffisantes.</p>
  <p>D'un point de vue business, la blockchain change beaucoup trop vite, elle est trop chère, et souvent bien trop lourde pour le service rendu. Les coûts peuvent décupler sans raison. Bâtir un business sur une plate-forme aussi instable est incroyablement risqué.</p>
  <p>Mon avis est qu'il faut attendre. La <strong>blockchain n'est pas encore prête</strong>. Elle a besoin de plus de maturité, une autre application phare qu'un moteur de spéculation, une communauté de développeurs plus étendue, une plus grande responsabilité économique et écologique. Combien de temps cela va-t-il prendre ? Un an, peut-être deux ? Personne ne peut le dire.</p>
  <p><a href="https://en.wikipedia.org/wiki/Gordon_Gekko" title="C'est sûr, un jour ce truc marchera"><img src="https://marmelab.com/images/blog/gordon-gekko-phone.jpg" class="medium" alt="image" /></a></p>
  <p>Pour être honnête, cette conclusion m'a surpris. La plupart des publications à propos de la blockchain suggèrent le contraire. Elles disent "c'est le moment", "ne ratez pas le train", ou encore "les grands business de la prochaine décennie sont en train d'être construits sur la blockchain, en ce moment même". Peut-être qu'ils ont tort, ou alors c'est nous qui avons tort. Nous avons essayé d'étayer cette analyse avec des preuves tangibles. Si votre avis diffère du nôtre, je vous invite à vous exprimer dans les commentaires ci-dessous.</p>
  <p>Nous ne manquerons pas de suivre attentivement les développements des différents projets de blockchain. Assurez-vous de suivre ce blog pour rester informé !</p>
  <p><em>Merci à <a href="https://twitter.com/yann_g">Yann Gensollen</a> pour la traduction</em>.</p>


title: Nutrition to improve sleep | Jeukendrup - Trusted sports nutrition advice & exercise science news
url: http://www.mysportscience.com/single-post/2017/09/10/Nutrition-to-improve-sleep?_escaped_fragment_=
created_at: 2018-03-22 13:08:08
updated_at: 2018-03-22 13:08:08
mimetype: text/html
language: en
domain_name: www.mysportscience.com
preview_picture: http://static.wixstatic.com/media/a04440_0e452b3f8908421fbc49379102f01134%7Emv2_d_2052_1554_s_2.png
http_status: 200
content:
  <img width="649" title="Nutrition may be used to improve sleep" src="http://static.wixstatic.com/media/a04440_0e452b3f8908421fbc49379102f01134~mv2_d_2052_1554_s_2.png/v1/fill/w_649,h_491/a04440_0e452b3f8908421fbc49379102f01134~mv2_d_2052_1554_s_2.png" height="491.4941520467836" alt="Nutrition may be used to improve sleep" /><p>
                      
                           
                      
                      
                          
                              Sleep is generally recognised as a critical factor in athlete’s performance. Sleep is thought to affect both physiological and cognitive function, that can affect sports performance. Recent evidence, suggests that athletes have lower quality of sleep as well as lower quantity of sleep, compared with the non-athlete, particularly during periods of intensified training (Read
                              
                                  <a target="_blank" href="http://www.mysportscience.com/single-post/2015/10/26/Sleep-disturbances-in-trained-athletes" shape="rect">Sleep disturbances in trained athletes</a>
                              
                              ). Lack of sufficient sleep is likely to have detrimental effects on athletic performance.Compromised sleep might also influence cognition, learning, memory, pain perception, immunity and inflammation. Chronic partial sleep deprivation may result in changes in carbohydrate metabolism, protein synthesis, appetite, and food intake. These factors can ultimately have a negative influence on an athlete’s nutritional, metabolic and hormonal status and could therefore potentially reduce athletic performance.
                          
                      
                  </p>
                  <div>
                      <img width="649" src="http://static.wixstatic.com/media/a04440_3a6f190776f045878499a3fc7caef3a7~mv2.png/v1/fill/w_649,h_407/a04440_3a6f190776f045878499a3fc7caef3a7~mv2.png" height="406.61104972375693" alt="" /></div>
                  <p>
                      
                          
                              A number of neurotransmitters (e.g. 5-HT, gamma-aminobutyric acid, orexin, melanin-concentrating hormone, norepinephrine, and histamine) have been associated with the sleep-wake cycle. There are some nutritional interventions that can influence these neurotransmitters in the brain and so may thus influence sleep. For example, carbohydrate, tryptophan, valerian, and melatonin and others have been investigated as possible sleep inducers and represent promising potential interventions to improve sleep quantity and/or quality.
                          
                      
                  </p>
                  
                  <p>
                      
                          
                              Synthesis of 5-HT in the brain is dependent on the availability of its precursor, the amino acid tryptophan (Trp). Trp is transported across the blood–brain barrier by a transport system that is shared by a number of large neutral amino acids (LNAA) including the branched chain amino acids (BCAA) leucine, isoleucine and valine. Thus, the ratio of Trp/LNAA in the blood is crucial to the rate of transport of Trp into the brain. Ingestion of protein generally decreases the uptake of Trp into the brain, as Trp is the least abundant amino acid and therefore other LNAA are preferentially transported into the brain. The ingestion of carbohydrate, however, increases brain Trp as the rise in circulating insulin (as a result of the increase in blood glucose concentration) stimulates the uptake of LNAA into skeletal muscle, which results in an increase in free Trp in the circulation, an effect that promotes its uptake into the brain.
                          
                      
                  </p>
                  
                  <p>
                      
                          
                              There have been numerous investigations of the effects of Trp supplementation on sleep (1), and it appears that Trp doses as low as 1 g can improve sleep latency (time before falling asleep) and subjective sleep quality.
                          
                      
                  </p>
                  
                  <p>
                      
                          
                              Melatonin is a hormone that influences the sleep-wake cycle by inducing a sleep promoting effect. Light exposure of the retina of the eyes results in a suppression of melatonin secretion. Some nutritional interventions that increase Trp availability or reduce the plasma concentration of LNAA can increase melatonin production and promote sleep. This can be achieved by several means:
                          
                      
                  </p>
                  <ul class="font_8"><li>
                          <p>
                              
                                  a high protein diet that contains more Trp than LNAA
                              
                          </p>
                      </li>
                      <li>
                          <p>
                              
                                  
                                      ingestion of carbohydrate (This may increase the ratio of free Trp to LNAA and facilitate the release of insulin, which promotes the uptake of BCAA into the muscle)
                                  
                              
                          </p>
                      </li>
                  </ul><p>
                      
                          
                              Research investigating the use of melatonin for primary insomnia has demonstrated inconclusive results. A meta-analysis reported a reduction in sleep-onset latency of 7 min, and concluded that while melatonin appeared safe for short-term use, there was no evidence that melatonin was effective for most primary sleep disorders (2).
                          
                      
                  </p>
                  
                  <p>
                      
                          
                              Another recently investigated nutritional supplement is tart cherry juice which contains relatively large amounts of phytochemicals including melatonin. The ingestion of tart cherry juice has been shown to increase urinary melatonin, and when consumed for a one week period was shown to result in modest improvements in sleep time and quality (3) compared with placebo.
                          
                      
                  </p>
                  
                  <p>
                      
                          
                              Recent studies on the effects of carbohydrate ingestion on indices of sleep quality and quantity indicate that high carbohydrate meals consumed in the hour before bedtime improve sleep quality and reduce wakefulness. Solid compared with liquid meals tend to reduce sleep onset latency (time taken to fall asleep) up to 3 h after ingestion, and a high glycemic index (GI) meal significantly improves sleep-onset latency above that with a low GI meal if consumed 4 h (but not 1 h) before bedtime. A few studies have investigated more chronic manipulations of habitual dietary intake on sleep and these have suggested that diets higher in carbohydrate result in shorter sleep-onset latencies, diets higher in protein result in fewer wake episodes and diets high in fat may negatively influence total sleep time.
                          
                      
                  </p>
                  
                  <p>
                      
                          
                              Valerian is a herb that binds to gamma-aminobutyric acid type A receptors and is thought to induce a calming effect by regulation of the nervous system. Results of a meta-analysis investigating the efficacy of valerian showed a subjective improvement in sleep quality (4). While valerian is one of the more common ingredients found in supplements claiming to promote sleep, side effects such as drowsiness, dizziness and allergic reactions can be observed.
                          
                      
                  </p>
                  
                  <p>
                      
                          
                              Other suggested sleep aids have not been adequately investigated and are not supported by scientific evidence: passionflower, kava, St. John’s wort, lysine, glycine, magnesium, lavender, skullcap, lemon balm, magnolia bark, and nucleotides. Many of these can be found in supplements that are claimed to improve sleep quantity and/or quality. 
                          
                      
                  </p>
                  
                  <p>
                      
                          Current practical recommendations to improve sleep via nutritional interventions include:
                      
                  </p>
                  <ul class="font_8"><li>
                          <p>
                              
                                  High GI foods such as white rice, pasta, bread, and potatoes may promote sleep; however, they should be 
                              
                              
                                  consumed more than 1 h before bedtime.
                              
                          </p>
                      </li>
                      <li>
                          <p>
                              
                                  Diets high in carbohydrate may result in shorter sleep latencies.
                              
                          </p>
                      </li>
                      <li>
                          <p>
                              
                                  Diets high in protein may result in improved sleep quality.
                              
                          </p>
                      </li>
                      <li>
                          <p>
                              
                                  Diets high in fat may negatively influence total sleep time.
                              
                          </p>
                      </li>
                      <li>
                          <p>
                              
                                  When total caloric intake is decreased, sleep quality may be disturbed.
                              
                          </p>
                      </li>
                      <li>
                          <p>
                              
                                  Small doses of tryptophan (1 g) may improve both sleep latency and sleep quality. This can be achieved by
                              
                               
                              
                                  consuming a supplement or approximately 300 g of turkey.
                              
                          </p>
                      </li>
                      <li>
                          <p>
                              
                                  The hormone melatonin and foods that have a high melatonin concentration (e.g. tart cherries) may decrease sleep onset time.
                              
                          </p>
                      </li>
                      <li>
                          <p>
                              
                                  Subjective sleep quality may be improved with the ingestion of the herb valerian
                              
                          </p>
                      </li>
                  </ul><p>It is important to note though that the research in this area is limited and more work is needed before firm conclusions can be drawn. </p>
                  
                  <p>
                      
                          
                              References 
                          
                      
                  </p>
                  
                  <p>
                      1. Silber BY, Schmitt JA. Effects of tryptophan loading on human cognition, mood, and sleep. Neurosci Biobehav Rev. 34(3):387-407, 2010.
                  </p>
                  
                  <p>
                      
                          2. Buscemi N, Vandermeer B, Hooton N, Pandya R, Tjosvold L, Hartling L, Baker G, Klassen TP, Vohra S. The efficacy and safety of exogenous melatonin for primary sleep disorders. A meta-analysis. J Gen Intern Med. 20(12):1151-8, 2005.
                      
                  </p>
                  
                  <p>
                      
                          3. Howatson G, Bell PG, Tallent J, Middleton B, McHugh MP, Ellis J. Effect of tart cherry juice (Prunus cerasus) on melatonin levels and enhanced sleep quality. Eur J Nutr. 51(8):909-16, 2012.
                      
                  </p>
                  
                  <p>
                      
                          4. Fernández-San-Martín MI, Masa-Font R, Palacios-Soler L, Sancho-Gómez P, Calbó-Caldentey C, Flores-Mateo G. Effectiveness of Valerian on insomnia: a meta-analysis of randomized placebo-controlled trials. Sleep Med. 11(6):505-11, 2010.
                      
                  </p>
                  
                  <p>A highly recommended overview is written by Shona Halson:</p>
                  <p>
                      
                          <a target="_blank" href="https://link.springer.com/article/10.1007%2Fs40279-014-0147-0" shape="rect">
                              Halson, S. Sleep in Elite Athletes and Nutritional Interventions to Enhance Sleep. Sports Medicine 44, S1, 13–23, 2014
                          </a>
                      
                  </p>


title: A GraphQL Primer: Why We Need A New Kind Of API (Part 1)
url: https://www.smashingmagazine.com/2018/01/graphql-primer-new-api-part-1/
created_at: 2018-03-22 13:09:54
updated_at: 2018-03-22 13:09:54
mimetype: text/html
language: en
domain_name: www.smashingmagazine.com
http_status: 200
content:
  <p>In this series, I want to introduce you to GraphQL. By the end, you should understand not just what it is but also its origins, its drawbacks and the basics of how to work with it. In this first article, rather than jumping into the implementation, I want to go over how and why we have arrived at GraphQL (and similar tools) by looking at the lessons learned from the last 60 years of API development, from RPC to now. After all, as Mark Twain colorfully described, there are no new ideas.</p><p>But first, I have to address the elephant in the room. New things are always exciting, but they can also feel exhausting. You may have heard about GraphQL and just thought to yourself: “Why…😩” Alternatively, maybe you thought something more like, “Why do I care about a new API design trend? REST is… fine.” These are legitimate questions so let me help explain why you should pay attention to this one.</p><p>The benefits of bringing new tools to your team have to be weighed against its costs. There are lots of things to measure. There is the time it takes to learn, the time converting takes away from feature development, the overhead of maintaining two systems. With such high costs, <strong>any new tech has to be better, faster, or more productive</strong> by a huge amount. Incremental improvements, while exciting, just aren’t worth the investment. The types of APIs I want to talk about, GraphQL in particular, are in my opinion a huge step forward and deliver more than enough benefit to justify the cost.</p><p>Rather than exploring features first, it is helpful to put them into context and to understand how they came to exist. To do this, I am going to start with a bit of a recap of the history of APIs.</p><div class="c-garfield-the-cat">
  <h3 id="rpc">RPC</h3>
  <p>RPC was, arguably the first major API pattern and its origins go all the way back to early computing in the mid-60s. At the time, computers were still so big and expensive that the notion of API driven application development, as we think of it, was mostly just theoretical. Constraints like bandwidth/latency, computation power, shared compute time and physical proximity <strong>forced engineers to think in terms of distributed systems</strong> rather than of services that expose data. From ARPANET in the 60s, all the way up into the mid-90s with things like CORBA and Java’s RMI, most computers interacted with each other using Remote Procedure Calls (RPC) which is a client-server interaction model where a client causes a procedure (or method) to execute on a remote server.</p>
  <p>There are a lot of nice things about RPC. Its main principle is allowing a developer to treat code in a remote environment as if it were in a local one, albeit a lot slower and less reliable which creates continuity in otherwise distinct and disparate systems. Like many things that came out ARPANET, it was ahead of its time since this type of continuity is something we still strive for when working with unreliable and asynchronous actions like DB access and external service calls.</p>
  <p>Over the decades, there has been an enormous amount of research into how to allow developers to embed asynchronous behavior like this into the typical flow of a program; had there been things like Promises, Futures and ScheduledTasks available at the time, it is possible that our API landscape would look different.</p>
  <p>Another great thing about RPC is that since it is unconstrained by the structure of data, highly specialized methods can be written for clients that request and retrieve exactly the information needed which can result in minimal network overhead and smaller payloads.</p>
  <p>There are, however, things that make RPC difficult. First, <strong>continuity requires context</strong>. RPC, by design, creates quite a lot of coupling between local and remote systems — you lose the boundaries between your local and your remote code. For some domains, this is okay or even preferred like in client SDKs, but for APIs where client code is not well understood, it can be considerably less flexible than something more data-oriented.</p>
  <p>More important though, is <strong>the potential for proliferation of API methods</strong>. In theory, an RPC service exposes a small thoughtful API that can handle any task. In practice, a huge number of external endpoints can accrete without much structure. It takes a tremendous amount of discipline to prevent overlapping APIs and duplication over time as team members come and go and projects pivot.</p>
  <p>It is true that with proper tooling and documentation changes, like the ones I mentioned, can be managed but in my time writing software I have come across a scant few auto-documenting and disciplined services so, to me, this is a bit of a red herring.</p>
  <h3 id="soap">SOAP</h3>
  <p>The next major API type to come along was SOAP, which was born in the late 90s at Microsoft Research. SOAP (<strong>S</strong>imple <strong>O</strong>bject <strong>A</strong>ccess <strong>P</strong>rotocol) is an ambitious protocol spec for XML based communication between applications. SOAP’s stated ambition was to address some of the practical drawbacks of RPC, XML-RPC in particular, by creating a well-structured foundation for complex web services. In effect, this just meant adding a behavioral type system to XML. Sadly, it created more impediments than it solved as evidenced by the fact that very few new SOAP endpoints are written today.</p>
  <blockquote><div>"SOAP is what most people would consider a moderate success."<p>— Don Box</p></div></blockquote>
  <p>SOAP did have some good things going for it despite its unbearable verbosity and terrible names. The enforceable contracts in the WSDL and WADL (pronounced “wizdle” and “waddle”) between the client and server guaranteed predictable, type-safe results, and the WSDL could be used to generate documentation or to create integrations with IDEs and other tools.</p>
  <p>The big revelation of SOAP regarding API evolution was its gradual and possibly unintentional introduction of more resource-oriented calls. SOAP endpoints allow you to request data with a predetermined structure rather than think about the methods required to generate the data (assuming it is written this way).</p>
    
  <p>The most significant downside of SOAP is that being so verbose; <strong>it is nearly impossible to use without lots of tooling</strong>. You need tooling to write tests, tooling to inspect responses from a server and tooling to parse all of the data. Many older systems still use SOAP, but the requirement of tooling makes it too cumbersome for most new projects, and the number of bytes needed for the XML structure makes it a poor choice for serving mobile devices or chatty distributed systems.</p>
  <p>For more information, it’s worth reading the <a href="https://www.w3.org/TR/2001/WD-soap12-20010709/">SOAP spec</a> as well as the surprisingly interesting <a href="https://www.xml.com/pub/a/ws/2001/04/04/soap.html">history of SOAP</a> from Don Box, one of the original team members.</p>
  <h3 id="rest">REST</h3>
  <p>Finally, we have come to the API design pattern du jour: REST. REST, introduced in a doctoral dissertation by Roy Fielding in 2000, swung the pendulum in a fully different direction. REST is, in many ways, the antithesis of SOAP and looking at them side by side makes you feel like his dissertation was a bit of a rage quit.</p>
  <p>SOAP uses HTTP as a dumb transport and builds its structure in the request and response body. REST, on the other hand, throws out the client-server contracts, tooling, XML and bespoke headers, replacing them with HTTPs semantics as it is structure choosing instead to use HTTP verbs interact with data and URIs that reference a resource in some hierarchy of data.</p>
  <p>REST completely and explicitly changes API design from modeling interactions to simply modeling the data of a domain. Being fully resource-oriented when working with a REST API you no longer need to know, or care, what it takes to retrieve a given piece of data; nor are you required to know anything about the implementation of the backend services.</p>
  <p>Not only was the simplicity a boon for developers but since URLs represent stable information it is easily cacheable, its statelessness makes it easy to scale horizontally and, since it models the data rather than anticipating consumers needs, it can dramatically reduce the surface area of APIs.</p>
  <p>REST is great, and its ubiquity is an astonishing success but, like all solutions that came before it, REST is not without its flaws. To talk concretely about some of its shortcomings let’s go over a basic example. Let’s pretend that we have to build the landing page of a blog which displays a list of blog posts and their author’s name.</p>
  <img src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a567aa04-9817-4828-be8f-1fc8f16cbb69/blog-homepage.png" alt="The homepage of a basic blog" />
  			The homepage of a basic blog displaying the title and author of each post. (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/a567aa04-9817-4828-be8f-1fc8f16cbb69/blog-homepage.png">Large preview)</a>
  		<p>Let’s write the code that can retrieve the homepage data from a plain REST API. We will start with a few functions that wrap our resources.</p>
  <pre class="language-javascript">const getPosts = () =&gt; fetch(`${API_ROOT}/posts`);
  const getPost = postId =&gt; fetch(`${API_ROOT}/posts/${postId}`);
  const getAuthor = authorId =&gt; fetch(`${API_ROOT}/authors/${authorId}`);
  </pre>
  <p>Now, let’s orchestrate!</p>
  <pre class="language-javascript">const getPostWithAuthor = postId =&gt; {
    return getPost(postId)
      .then(post =&gt; getAuthor(post.author))
      .then(author =&gt; {
        return Object.assign({}, post, { author })
      })
  };
  const getHomePageData = () =&gt; {
    return getPosts()
      .then(postIds =&gt; {
        const postDetails = postIds.map(getPostWithAuthor);
        return Promise.all(postDetails);
      })
  };
  </pre>
  <p>So our code will do the following:</p>
  <ul><li>Fetch all Posts;</li>
  <li>Fetch the details about each Post;</li>
  <li>Fetch Author resource for each Post.</li>
  </ul><p>The nice thing is that this is pretty easy to reason about, well organized and the conceptual boundaries of each resource are well drawn. The bummer here is that we just made eight network requests, many of which happen in serial.</p>
  <pre class="language-bash">GET /posts
  GET /posts/234
  GET /posts/456
  GET /posts/17
  GET /posts/156
  GET /author/9
  GET /author/4
  GET /author/7
  GET /author/2
  </pre>
  <p>Yes, you could criticize this example by suggesting that the API could have a paginated <code>/posts</code> endpoint but that is splitting hairs. The fact remains that you often have a collection of API calls to make that depend on each other to render a complete application or page.</p>
  <p>Developing REST clients and servers is certainly better than what came before it, or at least more idiot proof, but a lot has changed in the two decades since Fielding’s paper. At the time, all computers were beige plastic; now they are <a href="https://youtu.be/g_HMXVm9zFs">aluminum</a>! Seriously though, 2000 was near the peak of the explosion in personal computing. Every year processors were doubling in speed, and networks were getting faster at an incredible rate. Market penetration of internet was <a href="http://www.pewinternet.org/2012/04/13/digital-differences/">around 45%</a> with nowhere to go but up.</p>
  <p>Then, around 2008, mobile computing went mainstream. With mobile, we effectively regressed a decade in terms of speed/performance overnight. In 2017, we have nearly <a href="http://www.pewresearch.org/fact-tank/2017/06/28/10-facts-about-smartphones/">80% domestic</a> and over 50% global smartphone penetration, and it is the time to rethink some of our assumptions about API design.</p>
    <div class="container product-panel--book__container">
        <div class="panel__description panel__description--book">
          <p>
            Is your pattern library up to date today? <em>Alla Kholmatova</em> has just finished a fully fledged book on <strong>Design Systems</strong> and how to get them right. With common traps, gotchas and the lessons she learned. Hardcover, eBook. <em>Just sayin'.</em>
          </p>
          <a href="https://www.smashingmagazine.com/printed-books/design-systems/">
            
          </a>
        </div>
        <div class="panel__image panel__image--book">
          <a href="https://www.smashingmagazine.com/printed-books/design-systems/" class="books__book__image">
          
            <img src="https://d33wubrfki0l68.cloudfront.net/91ed41706514200a7ef212ebfeead7471354e622/01dcc/images/books/design-systems--large-opt.png" alt="image" /></a></div>
        
        </div>
      </div>
    <h4 id="rest-s-weaknesses">REST’s Weaknesses</h4>
  <p>The following is a critical look at REST from the perspective of a client application developer, particularly one working in mobile. GraphQL and GraphQL-style APIs are not new and do not solve problems that are outside of the grasp of REST developers. GraphQL’s most significant contribution is its ability to solve these problems systematically and with a level of integration that is not readily available elsewhere. In other words, it is a “batteries included” solution.</p>
  <p>The primary authors of REST, including Fielding, published a paper in late 2017 (<a href="https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/46310.pdf">Reflections on the REST Architectural Style and “Principled Design of the Modern Web Architecture”</a>) reflecting on two decades of REST and the many patterns that it has inspired. It is short and absolutely worth the read for anybody interested in API design.</p>
  <p>With some historical context and a reference app, let’s look at REST’s three main weaknesses.</p>
  <p><strong>REST Is Chatty</strong></p>
  <p>REST services tend to be at least somewhat “chatty” since it takes multiple round trips between client and server to get enough data to render an application. This cascade of requests has devastating performance impacts, especially on mobile. Going back to the blog example, even in a best-case scenario with a new phone and reliable network with a 4G connection you have spent almost .5s on just latency overhead before the first byte of data is downloaded.</p>
  <p><em><strong>55ms 4G latency * 8 requests = 440ms overhead</strong></em></p>
  <img src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c130883f-d4d1-43b7-9f48-1bc92904aec4/hpbn-responsiveness.png" alt="Chart illustrating user response to app performance" />
  			A chart describing user response to various levels of app performance. (Image credit: <a href="https://hpbn.co/primer-on-web-performance/">High Performance Browser Networking</a>) (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/c130883f-d4d1-43b7-9f48-1bc92904aec4/hpbn-responsiveness.png">Large preview</a>)
  		<p>Another problem with chatty services is that in many cases it takes less time to download one large request than many small ones. The reduced performance of small requests is true for many reasons including TCP Slow Start, lack of header compression and gzip efficiency and if you are curious about it, I highly recommend reading Ilya Grigorik’s <a href="https://hpbn.co/">High-Performance Browser Networking</a>. The <a href="https://www.maxcdn.com/one/visual-glossary/tcp-slow-start/">MaxCDN blog</a> also has a great overview.</p>
  <p>This problem is not technically with REST but with HTTP, specifically HTTP/1. <a href="https://http2.github.io/faq/">HTTP/2</a> all but solves the problem of chattiness regardless of API style, and it has broad support in clients like browsers and native SDKs. Unfortunately, the rollout has been slow on the API side. Among the top 10k websites, adoption is <a href="https://w3techs.com/technologies/details/ce-http2/all/all">around 20%</a> (and climbing) as of late 2017. Even Node.js, much to my surprise, got HTTP/2 support in their 8.x release. If you have the ability, please update your infrastructure! In the meantime, let’s not dwell since this is only one part of the equation.</p>
  <p>HTTP aside, the final piece of why chattiness matters, has to do with how mobile devices, and specifically their radios work. The long and short of it is that operating the radio is one of the most battery intensive parts of a phone so the OS turns it off at every opportunity. Not only does starting the radio drain the battery but it adds even more overhead to each request.</p>
  <p><strong>TMI (Overfetching)</strong></p>
  <p>The next problem with REST-style services is that the send way more information than is needed. In our blog example, all we need is each post’s title and its author’s name which is only about 17% of what was returned. That is a 6x loss for a very simple payload. In a real-world API, that kind of overhead can be enormous. E-commerce sites, for example, often represent a single product as thousands of lines of JSON. Like the problem of chattiness, REST services can handle this scenario today using “sparse fieldsets” to conditionally include or exclude parts of the data. Unfortunately, support for this is spotty, incomplete or problematic for network caching.</p>
  <p><strong>Tooling And Introspection</strong></p>
  <p>The final thing that REST APIs lack are mechanisms for introspection. Without any contract with information about the return types or structure of an endpoint, there is no way to reliably generate documentation, create tooling or interact with the data. It is possible to work within REST to solve this problem to varying degrees. Projects that fully implement OpenAPI, OData, or JSON API are often clean, well-specified and, to varying extents, well documented but backends like this are rare. Even Hypermedia, a relatively low hanging fruit, despite having been touted at conference talks for decades, still is not frequently done well, if at all.</p>
  <h3 id="conclusion">Conclusion</h3>
  <p>Each of the API types is flawed, but every pattern is. This writing is not a judgment of the phenomenal groundwork that the giants in software have laid, only to be a sober assessment of each of these patterns, applied in their “pure” form from the perspective of a client developer. I hope that rather than coming away from this thinking a pattern like REST or RPC is broken, that you can come away thinking about how they each made tradeoffs and the areas where <strong>an engineering organization might focus its efforts to improve its own APIs</strong>.</p>
  <p>In the <a href="https://www.smashingmagazine.com/2018/01/graphql-primer-new-api-part-2/">next article</a>, I will be exploring GraphQL and how it aims to address some of the problems I mentioned above. The innovation in GraphQL and similar tools is in their level of integration and not in their implementation. Please, if you or your team is not looking for a “batteries included” API, consider looking into something like the new OpenAPI spec that can help build a stronger foundation today!</p>
  <p>If you enjoyed this article (or if you hated it) and would like to give me feedback, please find me on Twitter as <a href="https://twitter.com/ebaerbaerbaer">@ebaerbaerbaer</a> or LinkedIn at <a href="https://www.linkedin.com/in/ericjbaer">ericjbaer</a>.</p>
    

preview_picture:
  https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/21a1482e-50c9-4783-99f2-958de3bccdea/hpbn-responsiveness.png


title: Le Granola maison, rien de plus simple ! La recette d’Alex
created_at: 2018-03-22 13:10:05
updated_at: 2018-03-22 13:10:05
mimetype: text/html
language: fr-FR
domain_name: journaldunebigorexiqueblessee.wordpress.com
preview_picture: https://journaldunebigorexiqueblessee.files.wordpress.com/2018/01/granola-1.jpg
http_status: 200
url:
  https://journaldunebigorexiqueblessee.wordpress.com/2018/01/04/le-granola-maison-rien-de-plus-simple-la-recette-dalex/

content:
  <img width="816" height="611" src="https://journaldunebigorexiqueblessee.files.wordpress.com/2018/01/granola-1.jpg?w=816" class="attachment-rowling-post-image size-rowling-post-image wp-post-image" alt="" /><p>
  					Date: <a href="https://journaldunebigorexiqueblessee.wordpress.com/2018/01/04/le-granola-maison-rien-de-plus-simple-la-recette-dalex/">4 janvier 2018</a>Author: <a href="https://journaldunebigorexiqueblessee.wordpress.com/author/journaldunebigorexiqueblessee/">journaldunebigorexiqueblessee</a> 
  											
  							<a href="https://journaldunebigorexiqueblessee.wordpress.com/2018/01/04/le-granola-maison-rien-de-plus-simple-la-recette-dalex/#respond">0 Commentaires</a>						
  					
  					
  				</p> 
  				<div class="post-inner">
  					
  						<div class="post-content">
  							<p><strong><img class="wp-image-814 aligncenter" src="https://journaldunebigorexiqueblessee.files.wordpress.com/2018/01/granola-3.jpg?w=616&amp;h=513" alt="Granola 3" width="616" height="513" /></strong></p>
  <p>En regardant les ingrédients et l’apport énergétique des céréales industrielles type Cruesli vous ne serez pas surpris d’y retrouver beaucoup de sucre et de graisses saturées. S’agissant de sucre raffiné, l’index glycémique de ces préparations est élevé provoquant un pic  insulinique responsable du stockage rapide du sucre  et du gras dans les cellules. Vos papilles se seront peut-être régalées quelques instants mais sur le plan nutritionnel on peut mieux faire…</p>
  <h2><strong>Éclairage nutritionnel</strong></h2>
  <p>Le Granola peut être réalisé maison en un clin d’œil avec des ingrédients permettant de préserver un bon équilibre nutritionnel. Rien de bien sorcier!</p>
  <ul><li>Côté sucre on évite le sucre raffiné… et on privilégie les sucres à index glycémique bas pour éviter le pic insulinique. Le sucre sera alors préférentiellement utilisé par l’organisme à des fins énergétiques plutôt que d’être stocké immédiatement dans les cellules.</li>
  <li>Pour le gras inutile d’ajouter du beurre ou de l’huile aux céréales ! On retrouve du « bon » gras dans les oléagineux (amandes, noix de cajou, noix de Pécan, noix de Macadamia, noisettes, pignons, pistaches). Autant s’en servir !</li>
  <li>Ajoutons à cela des fibres solubles que l’on retrouve dans les flocons d’avoine par exemple qui en plus de prolonger la sensation de satiété vont diminuer l’index glycémique global de votre délicieuse préparation maison.</li>
  </ul><h2><strong>A vos courses !</strong></h2>
  <ul><li>150g de flocons d’avoine</li>
  <li>50g de noisettes concassées</li>
  <li>50g d’amandes concassées</li>
  <li>50g de raisins secs</li>
  <li>50g de pépites de chocolat noir</li>
  <li>3 cuillères à soupe de graines de sésame</li>
  <li>1 cuillère à soupe de sucre roux complet</li>
  <li>150ml de jus de pomme</li>
  <li>Une pointe de cannelle</li>
  </ul><h2><strong>Cuisinez…</strong></h2>
  <p>Pour cette recette rien de plus simple…</p>
  <ul><li>Dans un grand saladier, mélangez tous les ingrédients secs.</li>
  <li>Ajoutez le jus de pomme.</li>
  <li>Mélangez le tout et réservez 1h au frigo.</li>
  <li>Pendant ce temps préchauffez le four à 160 degrés.</li>
  <li>Emiettez la préparation sur plaque recouverte de papier sulfurisé.</li>
  <li>Vous pouvez même en faire des biscuits si vous voulez. A l’aide d’un emporte-pièce formez de petits biscuits à déposer sur la plaque recouverte de papier sulfurisé. A défaut d’emporte-pièce faites tout simplement des boules à écraser légèrement pour former des petits palets.</li>
  <li>Enfournez 15 minutes environ le temps que ce soit bien doré.</li>
  <li>Sortez du four, laissez refroidir.</li>
  </ul><h2><strong>Dégustez…</strong></h2>
  <p>Avec du lait ou un yaourt, quelques graines de Chia et un fruit frais en morceaux…</p>
  <p><img class="alignnone size-full wp-image-813" src="https://journaldunebigorexiqueblessee.files.wordpress.com/2018/01/granola-2.jpg?w=616" alt="Granola 2" /></p>
  		<div class="wpcnt">
  			<div class="wpa wpmrec">
  				Publicités
  				
  						
  				
  		
  			</div>
  		</div>
  							
  						</div>
  					
  					</div> 
  			


title: Cyclisme : Team Sky, de proche de l’UCI à cible numéro un
created_at: 2018-03-22 13:10:13
updated_at: 2018-03-22 13:10:13
mimetype: text/html
language: fr
domain_name: mobile.lemonde.fr
preview_picture: http://img.lemde.fr/2018/03/07/209/0/3438/1719/1200/0/0/0/14c6ba0_5101211-01-06.jpg
http_status: 200
url:
  http://mobile.lemonde.fr/cyclisme/article/2018/03/08/cyclisme-team-sky-proche-de-l-uci-a-cible-numero-un_5267764_1616656.html?xtref=https://www.google.com/

content:
  <p class="node-attr">Et si le grand perdant de l’élection à la présidence de l’Union cycliste internationale (UCI) n’avait pas été le Britannique Brian Cookson, mais son compatriote Dave Brailsford, manageur de la puissante équipe Sky ? Lorsque le tranquille président de l’UCI a été déposé en septembre 2017 au profit du Français David Lappartient, c’est tous les canaux directs entre la meilleure équipe du monde et la fédération internationale qui ont été coupés. Et la communication feutrée de Brian Cookson a laissé place à celle, moins contrôlée et plus offensive, de l’élu breton, de vingt-deux ans son cadet.</p>
      <div class="cm-figure__media-container">
      <div class="ca-lazy-img">
          <img class="js-lazy-img ca-lazy-img__img ca-lazy-img__img--placeholder" src="denied:data:image/gif;base64,%20iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAAC0lEQVQImWNgwAUAABoAAaQ3efYAAAAASUVORK5CYII=" alt="" /><noscript>
              <img src="http://img.lemde.fr/2018/03/08/0/0/5315/3543/450/0/0/0/f755309_6408-14jugqh.ia4bl.jpg" class="ca-lazy-img__img ca-lazy-img__img--noscript" alt="" /></noscript>
      </div>
      
      
  </div>
                      
                  David Lappartient s’illustre, depuis son élection à la présidence de l’UCI en septembre 2017, par son attitude offensive vis-à-vis de la Team Sky.
                                      FRANCK FIFE / AFP
                              <p class="node-attr">Depuis son élection, sur tous les sujets, le Français porte le fer contre la Team Sky. Cette attitude, consciente ou non, a atteint son apogée mercredi 7 mars dans une interview à la BBC, donc à forte résonance au pays de Christopher Froome : pêle-mêle, il a accusé Team Sky de <em>« triche »</em>, recommandé qu’une enquête ait lieu sur ses pratiques passées et réclamé que Froome ne puisse pas courir le Tour de France si sa situation disciplinaire n’était pas tranchée, à la suite de son contrôle anormal au salbutamol.</p>
      <div class="cm-figure__media-container">
      <div class="ca-lazy-img">
          <img class="js-lazy-img ca-lazy-img__img ca-lazy-img__img--placeholder" src="denied:data:image/gif;base64,%20iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAAC0lEQVQImWNgwAUAABoAAaQ3efYAAAAASUVORK5CYII=" alt="" /><noscript>
              <img src="http://img.lemde.fr/2018/03/06/0/0/2000/1514/450/0/0/0/d9bfddf_76c623fae3b64266b057f7b6aa496bad-76c623fae3b64266b057f7b6aa496bad-0.jpg" class="ca-lazy-img__img ca-lazy-img__img--noscript" alt="" /></noscript>
      </div>
      
      
  </div>
                      
                  Christopher Froome a encore attiré la presse au départ de Tirreno-Adriatico, sa deuxième course de l’année.
                                      DARIO BELINGHERI / AP
                              
      
  <p class="node-attr"><em>« Ce serait un désastre pour l’image du cyclisme. Et je ne veux pas mettre notre sport en danger. De mon point de vue, cela aurait été mieux qu’il ne coure pas »</em>, a-t-il dit à la BBC, alors que Chris Froome affine actuellement sur Tirreno-Adriatico sa préparation pour le prochain Tour d’Italie, en mai. David Lappartient n’est <em>« pas sûr »</em> que la sanction contre Chris Froome soit prononcée d’ici au départ du Giro mais redemandera à la Sky de ne pas aligner le quadruple vainqueur de l’épreuve sur le Tour de France si l’incertitude demeure, au début de juillet.</p>

      sur le même sujet
      <a href="http://mobile.lemonde.fr/cyclisme/article/2017/12/14/cyclisme-le-cas-froome-ne-sera-pas-tranche-avant-plusieurs-mois_5229561_1616656.html" class="cm-same-subject__link">
          Cyclisme : le cas Froome ne sera pas tranché avant plusieurs mois
      </a>
  <p class="node-attr">Sur cette question, le président de l’UCI n’a jamais ménagé la Team Sky. Il ne s’est pas défilé en décembre lorsque <em>Le Monde</em> et le <em>Guardian </em>lui ont demandé la confirmation du contrôle anormal subi par le Britannique sur le Tour d’Espagne, qu’il avait appris le jour de son élection à la présidence. Il a ensuite réclamé, un mois plus tard dans <em>Le Télégramme</em>, que Sky n’aligne pas son leadeur dans la situation actuelle, une suggestion que l’équipe britannique a écartée d’un revers de la main. La Sky est dans son droit, même si son attitude est considérée comme contraire à l’éthique et l’intérêt du cyclisme par de nombreuses équipes et plusieurs rivaux de Chris Froome.</p>

      sur le même sujet
      <a href="http://mobile.lemonde.fr/cyclisme/article/2018/01/19/cyclisme-le-president-de-l-uci-souhaite-que-froome-soit-suspendu-par-son-equipe_5244271_1616656.html" class="cm-same-subject__link">
          Cyclisme : le président de l’UCI souhaite que Froome soit suspendu par son équipe
      </a>
  <p class="node-attr">L’UCI aurait la possibilité de suspendre unilatéralement Christopher Froome, mais cette porte de sortie offerte par le code mondial antidopage n’a jamais été utilisée par aucune fédération sportive internationale. Si elle l’activait, l’UCI pourrait être poursuivie par Sky devant le Tribunal arbitral du sport, qui pourrait considérer que Froome fait l’objet d’un traitement défavorable.</p>
      
  <p class="node-attr">L’interview à la BBC tombait au surlendemain de la publication d’un rapport du Parlement britannique sur le dopage dans le sport, dont un pan important était consacré à Team Sky. L’équipe était accusée d’avoir profité des largesses du règlement antidopage pour améliorer les performances de Bradley Wiggins, vainqueur du Tour de France en 2012.</p>

      sur le même sujet
      <a href="http://mobile.lemonde.fr/cyclisme/article/2018/03/05/cyclisme-le-team-sky-a-utilise-des-medicaments-pour-ameliorer-les-performances-de-ses-coureurs_5265654_1616656.html" class="cm-same-subject__link">
          Cyclisme : « Team Sky a utilisé des médicaments pour améliorer les performances de ses coureurs »
      </a>
  <p class="node-attr">Loin de choisir une position de retrait, ce qu’il pourrait faire puisque Team Sky conteste les conclusions accablantes du rapport, David Lappartient adhère fermement aux accusations des parlementaires et particulièrement de Damian Collins, député conservateur à la tête de la commission d’enquête que le Breton avait rencontré durant sa campagne présidentielle.</p>
  <p class="node-attr"><em>« Si vous utilisez des substances pour améliorer vos performances, je crois que c’est la définition de la triche »</em>, a-t-il dit à la BBC.</p>
      
  <p class="node-attr">Le Français a également souhaité que la Fondation antidopage du cyclisme (CADF), théoriquement indépendante de l’UCI, enquête sur la pratique des prises de corticoïdes chez Team Sky. <em>« Bien sûr à l’époque ils avaient des AUT </em>[autorisation d’usage thérapeutique]<em> validées par cette institution </em>[l’UCI]<em>, mais il semble désormais que cela ait été organisé »</em>, a-t-il dit.</p>
  <p class="node-attr">En 2016, les pirates informatiques russes de Fancy Bears avaient révélé l’existence d’AUT accordées à Bradley Wiggins pour prendre de la triamcinolone, un puissant corticoïde, selon lui pour traiter des allergies au pollen. Deux ans plus tôt, <em>Le Journal du dimanche </em>avait révélé qu’une AUT avait été délivrée à la hâte par l’UCI pour permettre à Christopher Froome de prendre des corticoïdes lors du Tour de Romandie, qu’il avait remporté. Les procédures de délivrance des AUT, jusqu’alors à la discrétion du seul directeur médical de l’UCI, avaient été révisées à la demande de l’Agence mondiale antidopage.</p>

      sur le même sujet
      <a href="http://mobile.lemonde.fr/cyclisme/article/2016/09/27/cyclisme-bradley-wiggins-les-corticoides-et-le-monstre-du-loch-ness_5003938_1616656.html" class="cm-same-subject__link">
          Cyclisme : Bradley Wiggins, les corticoïdes et le monstre du Loch Ness
      </a>
  <p class="node-attr">Selon nos informations, la CADF a déjà revérifié, après les révélations des Fancy Bears, que ces AUT avaient été délivrées dans les règles. Et, si l’agence antidopage de l’UCI est en contact avec l’UKAD, son homologue britannique, elle n’a aucun moyen pour l’heure d’ouvrir une enquête sur des faits dont tout le monde s’accorde à dire qu’ils n’étaient pas en infraction des règles.</p>
  <p class="node-attr">La situation changerait radicalement si le docteur Richard Freeman, à l’époque praticien de Team Sky et de Wiggins, se mettait à table et affirmait que de la triamcinolone a été administrée au coureur en juin 2011, au soir du Critérium du Dauphiné et hors de toute AUT. UKAD et les parlementaires britanniques le soupçonnent mais n’en ont pas la preuve.</p>
      
      <div class="cm-figure__media-container">
      <div class="ca-lazy-img">
          <img class="js-lazy-img ca-lazy-img__img ca-lazy-img__img--placeholder" src="denied:data:image/gif;base64,%20iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAAC0lEQVQImWNgwAUAABoAAaQ3efYAAAAASUVORK5CYII=" alt="" /><noscript>
              <img src="http://img.lemde.fr/2018/03/07/0/0/3438/2255/450/0/0/0/14c6ba0_5101211-01-06.jpg" class="ca-lazy-img__img ca-lazy-img__img--noscript" alt="" /></noscript>
      </div>
      
      
  </div>
                      
                  Loin de ces polémiques, le coureur de Team Sky Wout Poels a pris mercredi 7 mars la tête du Paris-Nice.
                                      JEFF PACHOUD / AFP
                              <p class="node-attr">Cette interview particulièrement offensive a davantage pour objet de mettre la pression sur Sky et son patron, Dave Brailsford, très fragilisé dans son pays après la publication du rapport parlementaire.</p>
  <p class="node-attr">La Sky est déjà dans le viseur de l’UCI pour son outrageuse domination sur le Tour de France, attribuée notamment à sa puissance collective. Sous la pression des organisateurs, Brian Cookson avait dû se résoudre à faire passer de neuf à huit le nombre de coureurs sur les grands tours, une innovation de l’édition 2018. Et David Lappartient réfléchit désormais à un encadrement de la masse salariale globale des équipes, afin d’équilibrer les chances entre Sky et des équipes dont le budget est deux à trois fois inférieur.</p>

      sur le même sujet
      <a href="http://mobile.lemonde.fr/sport/article/2017/07/24/le-tour-de-france-face-au-casse-tete-team-sky_5164075_3242.html" class="cm-same-subject__link">
          Le Tour de France face au casse-tête Team Sky
      </a>
  <p class="node-attr">Par cette attitude, le Français se distingue nettement de son prédécesseur. Les contacts entre l’équipe Cookson et Team Sky étaient fréquents, même si Dave Brailsford et lui n’étaient pas réputés pour s’entendre particulièrement bien. Et lorsqu’une question devait être tranchée, elle était rarement défavorable à Team Sky. Avant d’être élu à la tête du cyclisme mondial, Brian Cookson avait dirigé pendant quinze ans British Cycling, la fédération britannique, et supervisé la création de Team Sky en 2010.</p>
      
  <p class="node-attr">David Lappartient aurait pu se retrouver dans la même position, mais le projet de Team Sky à la française, qu’il avait porté en tant que président de la Fédération française de cyclisme (2009-2017), n’avait pu être mené à bien.</p>

      sur le même sujet
      <a href="http://mobile.lemonde.fr/tour-de-france/article/2015/07/24/entre-sky-et-l-uci-des-relations-consanguines_4696778_1616918.html" class="cm-same-subject__link">
          Tour de France : entre Sky et l’UCI, des relations consanguines
      </a>


title: Robin, stagiaire chez Framasoft et porteur de projet – Framablog
url: https://framablog.org/2018/03/29/robin-stagiaire-chez-framasoft-et-porteur-de-projet/
created_at: 2018-03-29 08:45:29
updated_at: 2018-03-29 08:45:29
mimetype: text/html
language: fr-FR
domain_name: framablog.org
http_status: 200
content:
  <p class="text-right"><i class="fa fa-clock-o"> </i>Temps de lecture 23 min</p><div id="wtr-content"><div class="pdfprnt-buttons pdfprnt-buttons-post pdfprnt-top-right"><a href="https://framablog.org/2018/03/29/robin-stagiaire-chez-framasoft-et-porteur-de-projet/?print=pdf" class="pdfprnt-button pdfprnt-button-pdf" target="_blank"><img src="https://framablog.org/wp-content/plugins/pdf-print/images/pdf.png" alt="image_pdf" title="View PDF" /></a><a href="https://framablog.org/2018/03/29/robin-stagiaire-chez-framasoft-et-porteur-de-projet/?print=print" class="pdfprnt-button pdfprnt-button-print" target="_blank"><img src="https://framablog.org/wp-content/plugins/pdf-print/images/print.png" alt="image_print" title="Print Content" /></a></div><p>Vous ne connaissez pas Robin ? C’est le stagiaire qui a conçu <a href="https://framablog.org/2018/02/14/les-pages-framasite-plus-cest-facile-plus-on-partage/">les pages Framasites dont nous parlions ici</a>, ou plus exactement le logiciel libre qui les fait tourner, à savoir PrettyNoémieCMS</p>
  <p>
  </p><p>Si son stage est terminé, nous ne pouvions pas le laisser partir sans parler avec lui de sa démarche, ses projets, etc.</p>
  <p>Pour le plaisir, nous avons décidé d’illustrer ce long échange de captures d’écrans de <a href="https://frama.site">pages Framasite</a> qui ont retenu notre attention.</p>
  <a href="https://numahell2.frama.site/"><img class="size-full wp-image-11836" src="https://framablog.org/wp-content/uploads/2018/03/page-framasite-sur-les-pages-framasite.png" alt="" width="1873" height="958" /></a><em>Cliquez pour découvrir cette page Framasite qui explique comment faire une page Framasite. Hyper-méta, tavu.</em><h2>Portrait de Robin</h2>
  <p><strong>Bonjour Robin, peux-tu te présenter en quelques phrases</strong></p>
  <p>J’ai bientôt 30 ans et j’ai un parcours avec pleins de virages qui m’ont fait passer par les cases école d’ingé, CAP cuisine, travail social… le tout avec des fortes valeurs éthiques et un intérêt particulier et assez central pour l’abolition du capitalisme (lectures, engagement militant, syndical, squat…). le dernier virage m’a amené à l’envie de créer un outil numérique d’émancipation sociale dont l’idée a pointé pendant le mouvement contre la loi travail, j’ai donc dû passer à l’apprentissage du code pour pouvoir le réaliser.</p>
  <p><strong>Comment on se retrouve stagiaire pour Framasoft avec ce parcours ?</strong></p>
  <p>Framasoft me permettait plusieurs choses intéressantes : découvrir de l’intérieur le monde du libre et de la production collaborative de services web, me faire une expérience intéressante en développant pour eux, et peut-être de faire de ce stage un tremplin pour mon projet… d’éviter enfin de me retrouver à bosser gratuitement pour une entreprise dont la finalité est le profit. J’ai fait une candidature spontanée en parlant de mon parcours de mon projet et de mes valeurs, et ça a très vite collé.</p>
  <p><strong>Comment as-tu été accueilli ?</strong></p>
  <p>J’ai rien à redire sur mon accueil, à la fois carré et sans laisser de faux espoirs et de fausses promesses et en même temps très chaleureux, rémunéré en plus ce qui est rare… Je suis quelqu’un d’autonome et je m’y suis bien retrouvé, les impératifs de la campagne de financement de fin d’année ne permettaient pas forcément à l’équipe de me tenir par la main, mais j’aime bien la liberté que ça m’a permis. et puis j’ai pu ressentir tout au long de mon stage une grande confiance dans les choix que je faisais et ça a été très encourageant.</p>
  <p><strong>Quelle était ta mission / ton cahier des charges ?</strong></p>
  <p>J’étais censé réaliser des améliorations de l’interface utilisateur du dernier service proposé par Framasoft : Framasite. L’idée était d’offrir une expérience utilisateur assez proche de la simplicité d’un WIX pour que n’importe qui, sans aucune compétences spécifique en informatique, puisse mettre en ligne un joli site web en quelques clics dans une interface très intuitive. La voie que je devais explorer pour y parvenir consistait à améliorer le CMS sur lequel était basé Framasite, en lui ajoutant tout plein d’améliorations le rendant plus simple à utiliser.</p>
  <a href="https://peppercarrot.frama.site/"><img class="wp-image-11835 size-full" src="https://framablog.org/wp-content/uploads/2018/03/fansite-de-Pepper-et-Carrot.jpg" alt="" width="1873" height="958" /></a><em>cliquez sur l’image pour découvrir ce fan-site consacré à Pepper and Carrot</em>
  <p><strong>…et finalement, tu as plongé dans le code et qu’est-ce que tu as découvert ?</strong></p>
  <p>Framasite est basé sur GRAV, un CMS au code élégant, qui permet de générer des pages assez rapidement avec relativement peu de compétence en PHP puisque il utilise un mélange de markdown, de fichier de configuration en YML et de templates en TWIG. beaucoup d’aspects sont très automatisés, et cela amène une grande élégance du CMS, comme par exemple la génération automatique des formulaires du panneau administrateur… Pourtant cette automatisation rend très difficile d’adapter l’interface afin d’offrir des parcours utilisateurs simplifiés pour la construction des pages, comme de regrouper certains champs d’un formulaire, n’en faire s’afficher que certains, ou de manière progressive… Il est très difficile de partir de l’expérience utilisateur souhaitée pour réaliser le code correspondant, et l’on se retrouve toujours avec des solutions de « bricolage ».</p>
  <p>L’image que j’ai en tête pour des personnes pas très familières avec le code : c’est un peu comme essayer de construire une belle armoire normande a partir d’une armoire IKEA, vu de loin ça a l’air pratique parce qu’on est pas très loin du résultat attendu, mais peu à peu on se rend compte que le design initial est très limitant, et oblige finalement à réaliser un travail bien plus laborieux et complexe que de partir d’un bon tas de planches et d’outils performants… d’autant plus que l’on me demandais que mes modifications restent compatibles avec les mises a jour de GRAV, et donc, pour filer la métaphore, que l’armoire IKEA ne soit pas cassée dans l’opération.</p>
  <p>Bref : Un vrai casse-tête.</p>
  <p><strong>Donc tu n’as pas rempli ta mission ? C’est un terrrrrrible échec qui te tourmente jour et nuit (debout) ? Comment a réagi la personne qui assurait l’encadrement de ton stage ?</strong></p>
  <p>J’ai assez rapidement été découragé de suivre l’option d’une modification de Grav pour obtenir l’effet attendu, et je suis revenu des fêtes de fin d’année en me disant que même si mon stage durait 6 mois, je ne crois pas que j’arriverais a faire mieux pour simplifier la création de site par mon utilisateur que de l’orienter vers un hébergeur solidaire offrant une installation de wordpress à la volée… donc j’en ai parlé à l’équipe et à la personne qui m’encadrait sans trop savoir ce qui allait advenir, j’étais prêt à peut-être partir sur un autre stage… c’est pas facile de remettre en question totalement les choix fait par une équipe, je sais qu’en cuisine ou ailleurs, ça aurait signifié une fin de contrat plus ou moins houleuse…</p>
  <p>Mais bon, mes arguments ont été plutôt convaincants, et on est assez vite arrivé a une solution qui m’est venue assez tôt dans le stage, créer un outil simple depuis le début en utilisant un framework PHP nettement plus bas niveau qu’un CMS, et surtout en partant d’une idée de ce que je souhaitais offrir à l’utilisateur plutôt que de partir de quelque chose d’inadapté pour le bidouiller.<br />
  Ça a été très motivant et en une quinzaine de jours j’ai pu réaliser une version limitée de cet outil, et j’ai eu de très bons retours, à la fois de mes amis non-codeurs qui étaient très intéressés par la simplicité avec laquelle ils pouvaient réaliser un site web mais aussi par les membres de l’équipe qui étaient très enthousiastes.</p>
  <p><strong>Une question de détail par un gars sur Mastodon (<a href="https://framapiaf.org/@lelibreauquotidien">Llaq @lelibreauquotidien</a>) : Hé, @Framasoft, pourquoi vous avez appelé le CMS des pages Framasite « PrettyNoemieCms » ?</strong></p>
  <p>Oh ben je suis amoureux d’une fille qui s’appelle Noëmie, donc le nom est venu comme ça… le premier nom c’était Easy ShowcaseSite CMS… c’est quand même mieux Noemie CMS, non ? Enfin moi je trouve. Il y a un proverbe dans le libre qui dit que c’est ceux qui font qui ont raison, et vu que c’est moi qui l’ai fait, c’est moi qui ai raison.</p>
  <p><strong>Comment a été accueilli ton travail, par Framasoft et par le public ?<br /></strong></p>
  <p>A la fin de mon stage, l’outil à été mis en ligne et j’ai tout de suite eu pas mal de bons retours, celui qui m’a fait le plus plaisir c’était quelqu’un qui m’a dit : « c’est le plus simple des CMS ». je sais pas si on peut être aussi catégorique, mais si j’ai réussi à créer un outil auquel on pourrait mettre juste une demi étoile sur 5 de difficulté, j’aurai vraiment réussi mon pari… En tout cas j’ai fais tout mon possible pour aller dans cette direction. Ce qui me plaît bien aussi c’est des amis non codeurs qui partagent le plaisir créatif qu’ils ressentent en utilisant l’outil, ils me disent qu’ils se sont « amusés » avec Noëmie, ce qui me ravit.</p>
  <p>J’ai eu aussi quelques retours de bugs, rapidement corrigés, et aussi plein de personnes qui s’y sont intéressé de près en voyant le potentiel de l’outil et qui m’ont fait part d’idées d’amélioration.<br />
  Les membres de l’association m’ont fait part non seulement de leur satisfaction quant à mon travail, mais ils m’ont aussi exprimé qu’ils avaient été impressionnés par ma capacité à sortir quelque-chose d’aussi abouti et de fonctionnel en si peu de temps. Ça me fait chaud au cœur, car je débute dans la programmation, il y a un an et demi je n’avais pas encore écrit une seule ligne de code, et je ne participe à une formation que depuis moins d’un an. Je tiens au passage à remercier chaleureusement Simplon (mon organisme de formation) et son formateur Patrick qui m’ont aidé à prendre peu à peu confiance dans mes capacités de développement, et m’ont guidé dans cet apprentissage.</p>
  <a href="https://fanart.frama.site/"><img class="size-full wp-image-11837" src="https://framablog.org/wp-content/uploads/2018/03/Framasoft-fan-art.png" alt="" width="1873" height="958" /></a><em>La page des « Framasoft fan art » de JCFrog nous a fait hurler de rire.</em>
  <p><strong>Quelle suite pour Noemie CMS ?<br /></strong></p>
  <p>Aujourd’hui je pense que ce CMS trouve sa place à coté de ceux déjàexistants, grâce a sa simplicité. il ne sera jamais aussi complexe et personnalisable qu’un WordPress ou un Grav, mais il peut trouver sa niche en étant « le plus simple des CMS ».</p>
  <p>Les contribution sur le <em>Repository</em> vont bon train : déjà 66 issues postées, dont 52 réalisées, 17 <em>merge request</em>, on peut dire que je me sens pas seul sur le projet. Plein de pistes d’amélioration se dégagent, et d’autres que moi se saisissent avec plaisir du projet. Quant à moi je suis partagé entre un projet perso qui me tient vraiment à cœur : HUmanBeing (on en reparlera en fin d’article), ma formation qui s’arrête et le besoin de trouver un moyen pour vivre qui risque de bouffer beaucoup de disponibilités et l’envie de poursuivre le travail entamé sur ce CMS. Ça fait beaucoup d’envies et malheureusement pas suffisamment de temps pour tout faire à 100 %.</p>
  <p>Dans l’idéal je reprendrais Noemie CMS depuis le début avec un framework JS frontend (Vue-React- angular) afin de rendre l’expérience utilisateur encore plus fluide (pas de rechargement de pages à chaque sauvegarde, possibilité d’aller plus loin dans la complexité du code pour proposer une expérience utilisateur toujours plus simple, et peut-être ajouter la possibilité de créer un site de plusieurs pages… enfin bon, si j’avais plus de temps et pas la nécessité de devoir faire un truc débile, plus ou moins néfaste pour les gens qui m’entourent et dans le seul but d’enrichir un patron pour pouvoir payer mon loyer ces prochains mois c’est ce que je ferais… mais bon… je crois pas que j’en aurai l’opportunité.</p>
  <p>En attendant, je vais quand même continuer de faire avancer tout doucement les fonctionnalités, résoudre des bugs, et surtout passer du temps à transmettre aux autres contributeurs « les clefs » de mon code pour qu’ils puissent aussi se l’approprier et le faire évoluer.</p>
  <p><strong>Pendant ta période de stage, on t’a aussi obligé à assister à l’assemblée générale de Framasoft, tu peux nous raconter un peu comment ça s’est passé ? Ils t’ont fait quelle impression les membres de l’association ? et le fonctionnement de l’asso, qu’est-ce que tu en penses ?</strong></p>
  <p>Ce fut très intéressant, j’ai rencontré plein de chouettes personnes, avec un beau projet en commun. les discussions étaient très riches. je me suis parfois demandé s’ils ne manquaient pas un peu d’ambitions : en effet le bilan financier leur permettrait à mes yeux de s’engager sur plus de projets, en termes de développement direct ou de soutien financier à des projets ; en même temps je comprends tout a fait que la « sérénité financière » de Framasoft est très récente, et je n’ai pas vraiment suffisamment de compétences en gestion pour pouvoir donner un avis là dessus.</p>
  <p>Peut-être aussi que ça m’a permis de prendre conscience d’un décalage entre la vision que j’avais de Framasoft et son projet associatif : avant mon stage j’envisageais Framasoft un peu comme une équipe associative de développeurs qui cherchaient à produire des outils libres et gratuits et de la meilleure qualité pour le plus grand nombre, pour le plaisir de pouvoir offrir des services libres et gratuits à leurs utilisateurs… peu à peu j’ai pris conscience que ce qui animait cette association était aussi très militant et axé sur des enjeux « idéologiques » dans le sens de réaliser des actions visant un faire évoluer les consciences, promouvoir le logiciel libre, lutter contre les GAFAM.</p>
  <p>Et j’avoue que je me suis moins reconnu dans ces enjeux, Ça peut paraître paradoxal par rapport à mon engagement sur les #NuitDebout, mais en vrai même sur les <em>Nuit debout</em> ça n’a jamais été le côté tribune et réflexion et changements des mentalités qui m’attiraient, mais plutôt le fait de trouver un espace où l’on pouvait participer et collaborer librement avec plein de gens pour produire au mieux toutes sortes de choses sans que viennent se mêler des question d’argent ni de hiérarchie (cuisine collaborative, organisation de la vie sur la place, résistance contre les flics…). Je crois que je suis pas très militant dans l’âme, dans le sens que j’ai pas la volonté de faire changer les consciences, ce qui m’intéresse c’est plus de partager des expérience de rapports sociaux désaliénés, et d’inviter un max de gens à me rejoindre dans le plaisir que représente le fait de cesser collectivement de se soumettre au fric et à l’état.<br />
  Je pense aussi que j’ai pu ressentir un décalage car je suis partagé pas leur rigueur sur les moyens à employer. J’utilise quotidiennement Google, Chrome, etc. et dans mon travail c’est pareil je vise surtout à utiliser les meilleurs outils dans l’objectif d’offrir des services agréables et gratuits aux personnes qui utiliseront mes travaux sans me préoccuper de leur caractère libre ou non. J’ai tendance à privilégier les outils qui m’offrent pratiquement plus de pouvoir d’agir plutôt que des outils « libres ». Cela ne veut pas dire que je ne reste pas attentif aux effets secondaire de l’utilisation de certains trucs propriétaires, mais je ne les exclus pas d’emblée, et les préfère parfois.</p>
  <a href="https://volivent.frama.site/"><img class="size-full wp-image-11838" src="https://framablog.org/wp-content/uploads/2018/03/volivent-frama-site.jpg" alt="" width="1873" height="958" /></a>Cliquez pour voir une très, très belle page Framasite : celle du groupe musical Volivent.
  <p><strong>Tu as eu aussi l’occasion d’intervenir pour présenter ton projet personnel, de quoi s’agit-il au juste ?</strong></p>
  <p>C’est ce projet qui m’a amené à l’informatique, guidé dans mon apprentissage des technos du développement web : durant les Nuits debout j’ai pris tristement conscience que 80 % des projets ne se font pas car les personnes avec des initiative se rencontrent trop difficilement. Du coup j’ai essayé de remédier à cela en faisant du lien, d’abord en notant sur un carnet, puis sous forme de fiches papier et de panneau d’affichage où chacun pouvait partager son projet pour potentiellement trouver des personnes pour le rejoindre. Ça avait plutôt bien marché, même si c’était pas du tout <em>scalable</em> pour parler en termes dev : en effet, en trois jours, il y avais 70 fiches de projets et d’initiatives sur le tableau d’affichage et cela devenait très complexe pour quelqu’un venant sur la place pour la première fois de trouver rapidement un projet sur lequel s’investir.</p>
  <p>J’ai donc commencé à créer un outil, en réfléchissant à la manière de répondre au mieux à ce besoin de mise en relation dans le monde non-marchand. En effet, le monde marchand dispose des Pôle emploi et des agences d’intérim pour mettre en lien les gens sur la base de leurs compétences et des projets, alors que le non-marchand n’a pratiquement rien de plus que le bouche à oreille, et c’est très frustrant de voir que 80 % des projets non marchands sont morts-nés faute de participants alors que très souvent les personnes potentiellement intéressées existent, mais ne sont pas dans le même réseau, le même cercle élargi de connaissance. Et on a la même problématique en ce qui concerne le partage, dans une grande majorité de cas, on se résout à aller au supermarché acheter un truc dont on a besoin alors qu’il y a probablement dix personnes dans le quartier, ou une asso qui produit cette ressource qui pourrait le donner ou le prêter gratuitement.</p>
  <p>La troisième problématique à laquelle j’aimerais pouvoir apporter une solution avec cette plate-forme, c’est celle de la multiplication exponentielle des outils collaboratifs lorsqu’on est investi sur plusieurs projets. je reçois par exemple en ce moment les mails de 5 listes de mails bavardes, je suis inscrit sur trois systèmes de chat différents, 2 pads, github et gitlab, et un kanban, tous avec leurs adresses différentes que je perds une fois sur deux… Bref : l’enfer, alors que pourtant je crois que je suis plutôt à l’aise avec l’outil informatique. Je rêve de quelque chose qui pourrait les centraliser sur une plate-forme, avec tous mes projets, et pour chacun des projets son agenda, sa liste de tâches, etc. — et ne plus me perdre dans un dédale d’outils collaboratifs dispersés.</p>
  <p>L’idée de HUmanBeing c’est de répondre à ce besoin, en proposant :</p>
  <ul><li>une plate-forme de mise en relations des utilisateurs sur la base des projets qu’ils créent, de leurs centres d’intérêt, de leur localisation, et de leurs compétences</li>
  <li>une suite d’outil collaboratifs pour tous les projets créés grâce à la plate-forme : agenda, forum-chat de discussion, liste des tâches.</li>
  <li>une plate-forme de partage pour que les projets et les utilisateurs puissent partager les ressources dont ils disposent, qu’ils créent et dont ils ont besoin.</li>
  <li>une plate-forme sans modérateur, dont la modération se fait de manière autonome par des votes de la communauté d’utilisateurs venant réguler les conflits et poser les base de ce qu’elle trouve acceptable ou non, une communauté créant ainsi sa propre légitimité autonome des lois étatiques.</li>
  </ul><p>L’objectif et l’ambition de cette plate-forme serait dans un premier temps d’apporter un sacré plus à tout les projets collaboratifs et non-marchands en leurs permettant de <em>scaler</em> et de prendre de l’ampleur au-delà des cercles de connaissances de chacun et donner du coup plus de possibilités d’agir sur le monde à tous ceux qui ont déjà cette éthique de vouloir donner du sens à leurs activités au quotidien.<br />
  L’espoir qui m’anime au-delà d’apporter ces possibilités à ces personnes, est lié à ma façon pessimiste de penser l’avenir de la société marchande et de l’état dans leurs capacité à répondre aux besoins des personnes. Je m’imagine la prochaine crise économique, lorsque par exemple le ramassage des ordures s’arrêtera en raison de la faillite de ma communauté de communes et que l’accès aux soins sera devenu aussi difficile qu’en Grèce… et je me dis, si à ce moment on a un outil qui me permet de trouver 2 médecins, 4 infirmiers pour faire un centre de soins autogéré, ou alors faire une recherche de 5 chauffeurs poids lourds et 10 autres personnes pour créer une équipe de ramassage des ordures en moins d’une journée… Je me dis que cet outil pourrait être un formidable vecteur par lequel la collaboration, le partage et la gratuité pourraient s’imposer face au capitalisme sur le plan de la production matérielle de l’existence des hommes.</p>
  <p>Et je me suis mis à le réaliser.</p>
  <p>J’avais commencé en symphony (un framework PHP), mais c’était vraiment inadapté, donc je suis parti sur le framework METEOR JS très à l’aise pour gérer le temps réel : bien pratique lorsqu’il s’agit de collaborer. Pour l’instant j’ai une messagerie en temps réel fonctionnelle (chiffrée <em>end to end</em>), on peut créer un projet, inviter d’autres membres, le rechercher en fonction des compétences, localité qu’ils ont renseignée,, chaque projet et chaque utilisateur peut s’exprimer publiquement grâce a un blog tout simple. je dirais que j’ai fait 80 % du travail de réflexion et 40 % de l’écriture du code avant de pouvoir en sortir une version Bêta…</p>
  <p>Ça fonctionne pas trop mal en local, c’est même plutôt joli, mais j’ai encore des soucis à le mettre en prod sur une version de démo et pas mal de bugs, dont certains pour lesquels je n’ai aucune piste de solution… mais bon, ça viendra, et je suis hyper motivé, j’ai appris à coder pour pouvoir créer cette plateforme, ce projet me tient à cœur depuis 2 ans maintenant, je suis pas prêt de baisser les bras !</p>
  <p>J’ai récemment réalisé une vidéo pour présenter l’avancement du travail que vous pouvez regarder ici :</p>
  <a href="https://www.youtube.com/watch?v=HNxRGuFSfZ0"><img class="wp-image-11841 size-full" src="https://framablog.org/wp-content/uploads/2018/03/Présentation-du-projet-HUmanBeing-YouTube.png" alt="" width="854" height="480" /></a><em>Cliquez sur l’image pour regarder la vidéo (YouTube)</em>
  <p><strong>Tu as demandé des retours, ils te les ont donnés, ça ne t’a pas paru trop violent ?</strong></p>
  <p>Ben d’une certaine manière les retours étaient très bons, ils ont été impressionnés par la quantité et la qualité du travail que j’avais réussi à réaliser en si peu de temps ainsi que par ma courbe d’apprentissage très rapide. D’autre part, l’objectif émancipateur visé par le projet à fait écho au projet associatif de Framasoft, on pourrait même dire que le projet HUmanBeing vise à inscrire la force de la création collaborative de contenus immatériels du libre (Wikipédia, Linux, etc..) dans la réalité matérielle concrète de la production des besoins des hommes.</p>
  <p>Néanmoins à mes yeux trois points font que ce projet n’avais pas les prérequis nécessaires pour pouvoir bénéficier du soutien matériel que j’ai demandé à Framasoft (même si cette interview me permet de le faire connaître assez largement et constitue un soutien qui est toujours bon à prendre).</p>
  <ul><li>Ce projet pose un rapport radical vis-à-vis de l’État et de l’économie ( « nous n’avons rien à attendre d’eux, créons un outil d’organisation qui nous permet de nous en émanciper »). Je pense que ça s’éloigne de la ligne directrice framasoftienne qui aurait plutôt tendance à vouloir créer des outils favorisant l’économie sociale et solidaire, des outils permettant plus d’interactions citoyenne s(framapetition, etc.), avec des valeurs de gauche moins radicales, basées, comme une grande partie de la gauche actuelle sur les valeurs du conseil national de la résistance : un état fort et démocratique gérant la répartition des richesse et le soutien au plus démuni. Il me semble que ce temps-là est dépassé, il appartient a une époque où les hausses de productivité annuelles permettaient au capitalisme ce genre de concessions au travailleurs, et que l’état et l’économie marchande nous démontrent jour après jour, et année après année que nous n’avons rien à attendre d’eux, si ce n’est l’intensification de l’exploitation de l’homme par l’homme et la destruction de l’écosystème permettant la vie des hommes.</li>
  <li>D’autre part il me semble aussi que la façon d’envisager ce projet s’écarte de l’idéal de décentralisation poursuivi par Framasoft, dans la mesure ou il se propose de rassembler sur une seule et même plateforme beaucoup de services. dans l’idéal je rêverais que HUmanBeing soit décentralisé, avec plusieurs instances communiquant entre elles sur un réseau commun, mais bon, il me semble que ça ne pourra venir qu’après avoir fait la proof of concept de cette plateforme, un début de comm dessus. Il faut bien se rendre compte que développer une application décentralisée double ou triple le temps de développement.</li>
  <li>enfin la façon de penser la modération de cette plateforme : autogérée et potentiellement porteuse de projets en-dehors du cadre légal (celui qui fait que les riches sont de plus en plus riches et les pauvres de plus en plus pauvres ou jetés en prison), a pu être perçue à juste titre par Framasoft comme quelque chose mettant potentiellement en danger le reste de ses activités.</li>
  </ul><p>Enfin bon, je reste plein d’enthousiasme pour la suite, et sais que quand je suis motivé je suis capable de déplacer des montagne et de résoudre tout un tas de problèmes. Toujours est-il que le soutien matériel de Framasoft aurait permis de solutionner le problème majeur de savoir comment je vais payer mon loyer si je passe 10 heures par jour à développer une plate-forme non marchande…</p>
  <p><strong>On voit qu’il reste du boulot pour mener à bien ton projet, c’est peut-être le moment de réunir une petite équipe de gens intéressés pour contribuer ?</strong><br /><strong>Tu as mis les sources quelque part en ligne ? C’est codé en quoi ? Comment on peut contribuer ?</strong></p>
  <p>Ben ouais, carrément ! Le projet est dès le départ très très ouvert à toutes les contributions, le « cahier des charges » s’est fait avec les contribution de plusieurs dizaines de personnes durant les Nuits debout, et au fil du temps je fais des rencontres et j’ai quelques petites contributions extérieures, plus tous mes amis qui me font des retours au fur et a mesure que j’avance dans les fonctionnalités. J’ai bien conscience que c’est un énorme projet et qu’il faudra qu’on soit nombreux à y participer pour que ça puisse exister durablement.</p>
  <p>Le projet est donc codé en JavaScript, HTML, CSS, mongoDB autour du framework METEOR JS (et matérialize css pour le <em>front end)</em>, qui est un outil assez facile à prendre en mains avec de très bons cours en français et en anglais et énormément de ressources. Il faudrait aussi des personnes avec des compétences en comm’ et aussi des personnes sans compétences particulières, avec juste l’envie de participer à l’aventure, et qui apporteront sans aucun doute au projet toute leur richesse.</p>
  <ul><li>Alors si vous voulez plus d’info sur le projet HUmanBeing, le github est ici : <a href="https://github.com/HUB-HUmanBeing/HUmanBeing">https://github.com/HUB-HUmanBeing/HUmanBeing</a></li>
  <li>Vous pouvez me contacter aussi en passant faire un coucou sur le chat du projet : <a href="https://riot.im/app/#/room/#HUmanBeing:matrix.org">https://riot.im/app/#/room/#HUmanBeing:matrix.org</a></li>
  <li>Enfin toutes les contributions financières sont les bienvenues, car elle me permettent de dégager du temps pour me consacrer plus entièrement au projet. Voici le lien vers mon compte Patreon :<br /><a href="https://www.patreon.com/robinbanquo">https://www.patreon.com/robinbanquo</a></li>
  </ul><p>Comme dirait un enfant du paradis : A vot’ bon cœur M’sieurs dames !</p>
  <p><strong>L’asso te remercie de ton implication et de ton travail et te souhaite une pleine réussite dans tes projets. On te laisse le mot de la fin comme d’habitude.</strong></p>
  <p>Je vous remercie de m’avoir fait confiance dans la création de Noemie CMS, et de m’avoir permis de faire ce qui me plaît le plus : contribuer, par mon travail, au bien-être des personnes qui m’entourent.<br />
  Je profite aussi de cette interview pour renvoyer vers <a href="https://robin-caramaschi.frama.site/">mon CV</a> (créé grâce aux pages Framasite et donc grâce a NoemieCMS), et informer les lecteurs qui auraient des pistes que je suis actuellement à la recherche d’un emploi.</p>
  <p>Merci beaucoup de m’avoir offert cet espace d’expression, ce fut un plaisir de répondre à cette interview.</p>
  <p><a href="https://framablog.org/wp-content/uploads/2018/03/human-being-HUB.gif"><img class="aligncenter size-full wp-image-11840" src="https://framablog.org/wp-content/uploads/2018/03/human-being-HUB.gif" alt="" width="806" height="448" /></a></p>
  <div title="Diaspora*" id="diaspora-button-container"><a href="denied:javascript:(function(){var url = 'https://framablog.org/2018/03/29/robin-stagiaire-chez-framasoft-et-porteur-de-projet/' ;var title = 'Robin, stagiaire chez Framasoft et porteur de projet';   window.open('https://framablog.org/wp-content/plugins/share-on-diaspora/new_window.php?url='+encodeURIComponent(url)+'&amp;title='+encodeURIComponent(title),'post','location=no,links=no,scrollbars=no,toolbar=no,width=620,height=400')})()"><img id="diaspora-button-ownimage-img" src="https://framablog.org/wp-content/uploads/2017/11/diaspora.png" alt="" /></a></div></div>		<div class="social-sharing ss-social-sharing">&#13;
  				        <a rel="external nofollow" class="ss-button-facebook" href="http://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fframablog.org%2F2018%2F03%2F29%2Frobin-stagiaire-chez-framasoft-et-porteur-de-projet%2F" target="_blank">Share on Facebook</a><a rel="external nofollow" class="ss-button-twitter" href="http://twitter.com/intent/tweet/?text=Robin%2C+stagiaire+chez+Framasoft+et+porteur+de+projet&amp;url=https%3A%2F%2Fframablog.org%2F2018%2F03%2F29%2Frobin-stagiaire-chez-framasoft-et-porteur-de-projet%2F" target="_blank">Share on Twitter</a>	        	    </div>&#13;


title: une graine d’alternative à YouTube vient d’éclore – Framablog
url: https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/
created_at: 2018-03-30 17:04:00
updated_at: 2018-03-30 17:04:00
mimetype: text/html
language: fr-FR
domain_name: framablog.org
http_status: 200
content:
  <p class="text-right"><i class="fa fa-clock-o"> </i>Temps de lecture 17 min</p><div id="wtr-content"><div class="pdfprnt-buttons pdfprnt-buttons-post pdfprnt-top-right"><a href="https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/?print=pdf" class="pdfprnt-button pdfprnt-button-pdf" target="_blank"><img src="https://framablog.org/wp-content/plugins/pdf-print/images/pdf.png" alt="image_pdf" title="View PDF" /></a><a href="https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/?print=print" class="pdfprnt-button pdfprnt-button-print" target="_blank"><img src="https://framablog.org/wp-content/plugins/pdf-print/images/print.png" alt="image_print" title="Print Content" /></a></div><p>Le 21 novembre dernier, nous annoncions notre volonté de développer PeerTube, un logiciel libre qui pose les bases d’une alternative aux YouTubes et autres plateformes centralisant les vidéos.</p>
  <p>
  </p><p>Parmi toutes <a href="https://contributopia.org">les actions de notre feuille de route Contributopia</a>, celle-ci a reçu une attention et un soutien tout particulier. Il est temps de vous montrer les premiers résultats, de faire un premier point d’étape à l’occasion de la sortie publique de la version bêta de PeerTube.</p>
  <p>« Bêta », cela signifie que ceci n’est qu’un début ! Nous espérons que vous verrez combien il est prometteur.</p>

  <div class="well">
  <p><strong id="sommaire">ATTENTION : cet article est long, car il compile de nombreuses explications. Pour vous aider à aller droit à ce qui vous intéresse, voici un sommaire.</strong></p>
  <ol><li><a href="https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/#peertube">Ce qu’est PeerTube</a>
  <ol><li><a href="https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/#hebergeur">Du point de vue d’un hébergeur</a></li>
  <li><a href="https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/#videaste">Du point de vue d’un vidéaste</a></li>
  <li><a href="https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/#spectateur">Du point de vue d’un spectateur</a></li>
  </ol></li>
  <li><a href="https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/#evolution">L’évolution de PeerTube</a>
  <ol><li><a href="https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/#technique">Aspects Techniques</a></li>
  <li><a href="https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/#pratique">Aspects Pratiques</a></li>
  <li><a href="https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/#humain">Aspects Humains</a></li>
  </ol></li>
  <li><a href="https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/#beta">PeerTube, aujourd’hui et demain</a>
  <ol><li><a href="https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/#present">Premiers hébergements</a></li>
  <li><a href="https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/#limites">Limites de la bêta</a></li>
  <li><a href="https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/#futur">Vers une V1</a></li>
  </ol></li>
  <li><a href="https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/#conclu">Conclusion</a>
  <ol><li><a href="https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/#liens">Liens utiles</a></li>
  </ol></li>
  </ol></div>

  <h2 id="peertube">PeerTube… ? C’est quoi ce « PeerTube », là… ?</h2>
  <p>Tout le monde ne suit pas assidûment les nombreux projets de Framasoft, alors on s’explique !</p>
  <p>Nous allons parler ici des principes au cœur de PeerTube : un logiciel libre qui allie fédération d’hébergements et diffusion en pair à pair pour publier des vidéos en ligne de manière décentralisée.</p>
  <p>Vous n’avez pas compris cette phrase… ? Tout va bien : on l’explique juste en dessous ;) (sinon, <a href="https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/#evolution">cliquez ici pour passer à la partie suivante</a>, et <a href="https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/#sommaire">le sommaire est là</a>.)</p>
  <p><a href="https://framablog.org/wp-content/uploads/2017/12/notebook.jpg"><img class="aligncenter size-full wp-image-10989" src="https://framablog.org/wp-content/uploads/2017/12/notebook.jpg" alt="" width="900" height="532" /></a></p>
  <h3 id="hebergeur">Pour qui sait administrer un serveur, PeerTube c’est…</h3>
  <p><strong>C’est un logiciel que vous installez sur votre serveur</strong> pour créer votre site web d’hébergement et de diffusion de vidéos… En gros : vous vous créez votre propre « YouTube maison » !</p>
  <p>Il existe déjà des logiciels libres qui vous permettent de faire cela. L’avantage ici, c’est que vous pouvez choisir de relier votre instance PeerTube (votre site web de vidéos), à l’instance PeerTube de Zaïd (où se trouvent les vidéos des conférences de son université populaire), à celle de Catherine (qui héberge les vidéos de son Webmédia), ou encore à l’instance PeerTube de Solar (qui gère le serveur de son collectif de vidéastes).</p>
  <p>Du coup, sur votre site web PeerTube, le public pourra voir vos vidéos, mais aussi celles hébergées par Zaïd, Catherine ou Solar… sans que votre site web n’ait à héberger les vidéos des autres ! Cette diversité dans le catalogue de vidéos devient très attractive. C’est ce qui a fait le succès des plateformes centralisatrices à la YouTube : le choix et la variété des vidéos.</p>
  <p><strong>Mais PeerTube ne centralise pas : il fédère.</strong> Grâce au protocole <a href="https://fr.wikipedia.org/wiki/ActivityPub">ActivityPub</a> (utilisé aussi par <a href="https://joinmastodon.org/">la fédération Mastodon</a>, une alternative libre à Twitter) PeerTube fédère plein de petits hébergeurs pour ne pas les obliger à acheter des milliers de disques durs afin d’héberger les vidéos du monde entier.</p>
  <p>Un autre avantage de cette fédération, c’est que <strong>chacun·e est indépendant·e</strong>. Zaïd, Catherine, Solar et vous-même pouvez avoir vos propres règles du jeu, et créer vos propres Conditions Générales d’Utilisation (on peut, par exemple, imaginer un MiaouTube où les vidéos de chiens seraient strictement interdites :) ).</p>
  <h3 id="videaste">Pour qui veut diffuser ses vidéos en ligne PeerTube permet…</h3>
  <p>Il vous permet de choisir un hébergement qui vous correspond. On l’a vu avec les dérives de YouTube : son hébergeur, Google-Alphabet, peut imposer son système <a href="https://scinfolex.com/2016/07/05/ce-que-le-filtrage-automatise-des-contenus-sur-youtube-fait-a-la-creation/">ContentID (le fameux « Robocopyright »)</a> ou ses outils de mise en valeur des vidéos, qui semblent aussi obscurs qu’injustes. Quoi qu’il arrive, il vous impose déjà <a href="https://tosdr.org/#youtube">de lui céder -gracieusement- des droits sur vos vidéos</a>.</p>
  <p>Avec PeerTube, <strong>vous choisissez l’hébergeur de vos vidéos selon ses conditions d’utilisation</strong>, sa politique de modération, ses choix de fédération… Comme vous n’avez pas un géant du web en face de vous, vous pourrez probablement discuter ensemble si vous avez un souci, un besoin, une envie…</p>
  <p>L’autre gros avantage de PeerTube, c’est que votre hébergeur n’a pas à craindre le succès soudain d’une de vos vidéos. En effet, PeerTube diffuse les vidéos avec le protocole <a href="https://fr.wikipedia.org/wiki/BitTorrent">WebTorrent</a>. Si des centaines de personnes regardent votre vidéo au même moment, leur navigateur envoie automatiquement des bouts de votre vidéo aux autres spectateurs.</p>
  <p>Mine de rien, avant cette diffusion en pair-à-pair, les vidéastes à succès (ou les vidéos qui font le buzz) étaient condamnés à s’héberger chez un géant du web dont l’infrastructure peut encaisser des millions de vues simultanées… Ou à payer très cher un hébergement de vidéo indépendant afin qu’il tienne la charge.</p>
  <a href="https://framablog.org/wp-content/uploads/2017/11/pt-free.png"><img class="wp-image-10889 size-full" src="https://framablog.org/wp-content/uploads/2017/11/pt-free.png" alt="" width="571" height="400" /></a>Illustration : CC-By-SA <a href="http://emmalidbury.fr/">Emma Lidbury</a><h3 id="spectateur">Pour qui veut voir des vidéos, PeerTube a pour avantage…</h3>
  <p>Un des avantages, c’est que <strong>vous devenez partie prenante de la diffusion des vidéos que vous êtes en train de regarder</strong>. Si d’autres personnes regardent une vidéo PeerTube en même temps que vous, tant que votre onglet reste ouvert, votre navigateur partage des bouts de cette vidéo et vous participez ainsi à une utilisation plus saine d’Internet.</p>
  <p>Bien sûr, le lecteur vidéo de PeerTube s’adapte à votre situation : si votre installation ne permet pas la diffusion en pair-à-pair (réseau d’entreprise, navigateur récalcitrant, etc…) la lecture de la vidéo se fera de manière classique.</p>
  <p>Mais surtout, <strong>PeerTube vous considère comme une personne, et non pas comme un produit</strong> qu’il faut pister, profiler, et enfermer dans des boucles vidéos pour mieux vendre votre temps de cerveau disponible. Ainsi, <a href="https://github.com/Chocobozzz/PeerTube">le code source</a> (la recette de cuisine) du logiciel PeerTube est ouvert, ce qui fait que son fonctionnement est transparent.</p>
  <p><strong>PeerTube n’est pas juste open-source : il est libre.</strong> Sa licence libre garantit nos libertés fondamentales d’utilisateurs ou d’utilisatrices. C’est ce respect de nos libertés qui permet à Framasoft de vous inviter à contribuer à ce logiciel, et de nombreuses évolutions (système de commentaires innovant, etc.) nous ont déjà été soufflées par certain·e·s d’entre vous.</p>
  <p><iframe src="https://peertube.cpy.re/videos/embed/e8a1af4e-414a-4d58-bfe6-2146eed06d10" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen">[embedded content]</iframe></p>
  <p><em>PeerTube, expliqué par MrBidouille, sur PeerTube.</em></p>
  <h2 id="evolution">Et sinon, Framatube, ça avance… ?</h2>
  <p>En novembre dernier,<a href="https://framablog.org/2017/11/22/framatube-aidez-nous-a-briser-lhegemonie-de-youtube/"> la campagne « Framatube »</a> avait pour objectif de permettre à Framasoft d’embaucher Chocobozzz, le développeur de PeerTube, pour qu’il puisse enfin consacrer son temps professionnel à ce projet personnel.</p>
  <p>On va pas se mentir : nous avons mis du « Frama » dedans pour mieux faire connaître le projet et susciter les contributions, financières et humaines. Si nous avons voulu mettre notre réputation (et nos savoir-faire) au service de PeerTube, ce n’est clairement pas Framasoft qui importe ici.</p>
  <p>Ce qui compte, ce que l’on va raconter ci-dessous, c’est l’évolution qu’a pu connaître le projet PeerTube. Une évolution technique comme pratique, qui a été rendue possible grâce aux personnes qui se sont impliquées dans le projet (et si vous avez déjà tout suivi, passez à la suite <a href="https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/#beta">en cliquant ici</a> et <a href="https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/#sommaire">le sommaire est là</a>).</p>
  <h3 id="technique">Sous le capot, le code</h3>
  <p>Une des plus grosses évolutions du <a href="https://github.com/Chocobozzz/PeerTube">code de PeerTube</a> a été de le rendre plus visuel, et plus agréable. En effet, le logiciel que Chocobozzz a écrit sur son temps libre permettait déjà de nombreuses choses : créer une instance, des comptes pour les vidéastes, etc. Mais une partie de tout cela se faisait en ligne de commande, dans un terminal. <strong>Aujourd’hui, l’interface web permet</strong> (presque)<strong> tout.</strong></p>
  <p>On dit « presque », car <strong>la nouvelle fonctionnalité d’import de vidéos en masse</strong> depuis d’autres plateformes (YouTube, mais aussi Viméo, Dailymotion, <a href="https://rg3.github.io/youtube-dl/supportedsites.html">et plein plein d’autres</a>) se fait encore<a href="https://github.com/Chocobozzz/PeerTube/blob/develop/support/doc/tools.md#import-videosjs"> en ligne de commande</a>… Si son utilisation reste réservée aux initié·e·s, l’outil reste bien pratique pour qui veut copier sa chaîne YouTube sur son instance PeerTube ;).</p>
  <p>Suite à de nombreux échanges sur notre forum des contributions, <strong>le système de fédération a été entièrement revu pour adopter le protocole <a href="https://fr.wikipedia.org/wiki/ActivityPub">ActivityPub</a></strong>, qui est utilisé, par exemple, par <a href="https://joinmastodon.org/">Mastodon</a> (l’alternative à Twitter libre et fédérée). Concrètement, cela permet à PeerTube de communiquer de manière standardisée avec d’autres logiciels fédérés… qui ne font pas forcément de la vidéo (comme Mastodon !). Pour l’instant, les échanges sont expérimentaux, mais ces tests sont prometteurs.</p>
  <p>Enfin, nous avons accompagné Chocobozzz afin qu’il puisse mieux définir des cas d’utilisation, ce qui lui a permis de coder divers rôles d’utilisateurs d’une instance PeerTube. Désormais, <strong>l’hébergeur d’une instance peut désigner des admins, des modos</strong>, et ainsi créer une communauté autour de son instance et des règles qui ont été adoptées.</p>
  <a href="https://framablog.org/wp-content/uploads/2017/11/pt-federation.png"><img class="size-full wp-image-10885" src="https://framablog.org/wp-content/uploads/2017/11/pt-federation.png" alt="" width="571" height="400" /></a>Illustration : CC-By-SA <a href="http://emmalidbury.fr/">Emma Lidbury</a><h3 id="pratique">Des outils pour faciliter les échanges</h3>
  <p>Cette fonctionnalité de rôles va de pair avec de meilleurs outils pour gérer les utilisateur·ice·s. Par exemple, <strong>un hébergeur peut définir un quota d’espace disque par vidéaste</strong>, afin de ne pas avoir une personne prenant tout les gigas disponibles sur son serveur. Les hébergeurs ont aussi la possibilité de<strong> définir le nombre de comptes disponibles</strong> sur leur instance (une fois dépassé, les inscriptions sont fermées).</p>
  <p>Tout cela, bien entendu, dépend des règles que chaque instance aura définies. C’est là qu’intervient <strong>un nouvel outil qui permettra de décrire le but de son instance</strong> (généraliste, réservée à tel types de vidéos, ou de communauté, etc.) <strong>et surtout les règles qui régissent cet hébergement</strong> dans les conditions générales d’utilisation. Une fédération d’instances diverses ouvre la porte à une diversité de gouvernances et d’identités : mieux vaut avoir un outil pour afficher tout cela en toute transparence !</p>
  <p>Les échanges se font aussi en dessous des vidéos. Pour cela, <strong>un outil de commentaires a été créé</strong>. Grâce au protocole de fédération ActivityPub, les commentaires de votre compte PeerTube sont automatiquement « pouettés » (un Pouet, c’est comme un Tweet qui se serait libéré de Twitter). Si les commentaires sont fonctionnels, ils sont voués à évoluer, car de nombreuses améliorations sont déjà discutées <a href="https://framacolibri.org/t/reflexions-et-proposition-sur-la-gestion-des-commentaires/2542">sur notre forum des contributions</a> (merci à Rigelk et Thoumou au passage !).</p>
  <p>Enfin, PeerTube a connu une grosse évolution graphique. On peut évoquer l’outil pour <strong>envoyer une miniature personnalisée</strong> sur sa vidéo, ou de celui qui permet de <strong>définir le contenu comme « Not Safe For Work »</strong> (« réservé à un public averti »)… Mais c’est surtout la contribution d’Olivier Massain qu’il faut souligner. Ce dernier a repensé le design de PeerTube et a créé les maquettes visuelles que Chocobozzz a intégré dans cette version bêta du logiciel. Désormais, <strong>PeerTube est plus évident à utiliser tout en gagnant une identité visuelle claire.</strong></p>
  <h3 id="humain">La dimension humaine de PeerTube</h3>
  <p>On l’oublie souvent mais un projet logiciel, surtout lorsqu’il est contributif, c’est avant tout des personnes qui y mettent de leur temps, de leurs envies, et de leur talent dedans. Suite à sa proposition initiale de design, <strong>Olivier Massain</strong> a poursuivi son travail avec Chocobozzz, lorsqu’il fallait créer de nouvelles visualisations, et on ne peut que l’en remercier chaleureusement.</p>
  <p>De même, <a href="https://framacolibri.org/c/qualite/peertube">la catégorie « PeerTube » de notre forum des contributions</a> s’est enrichie d’un contributeur de qualité en la personne de <strong>Rigelk</strong>. Sa présence, sa bienveillance et sa pertinence ont alimenté de nombreuses discussions avec pour résultat des propositions collaboratives vraiment intéressantes. De telles contributions permettent à Chocobozzz de gagner du temps qu’il peut consacrer au développement de PeerTube.</p>
  <p>Ce ne sont là que deux exemples de personnes qui ont grandement contribué à PeerTube (sans forcément apporter du code, d’ailleurs ^^). Il nous serait impossible de citer <strong>toutes les personnes ayant participé</strong> par leurs échanges, apports, questionnements, etc. Sachez simplement que PeerTube ne serait pas le même si nous l’avions fait juste « dans notre coin », alors merci à vous.</p>
  <p>D’ailleurs, <a href="https://soutenir.framasoft.org">vos contributions financières</a> à notre campagne de dons 2017 nous ont permis de <strong>renouveler le contrat de Chocobozzz</strong>, initialement embauché pour quatre mois. L’avoir avec nous jusqu’à fin 2018 nous permet d’envisager la poursuite du projet PeerTube jusqu’à une version 1, même si cela reste un pari financier pour Framasoft. Mais sa joyeuse présence, son professionnalisme (et ses connaissances en NodeJS) sont un apport indéniable à notre équipe salariée.</p>
  <p><iframe src="https://framatube.org/videos/embed/da2b08d4-a242-4170-b32a-4ec8cbdca701" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen">[embedded content]</iframe></p>
  <p><em>Et pis Chocobozzz, il montre même sur PeerTube comment marchent les commentaires PeerTube.</em></p>
  <h2 id="beta">PeerTube : aujourd’hui et demain</h2>
  <p>Alors non : ce n’est pas aujourd’hui que vous allez brûler vos comptes YouTube ni libérer vos vidéos des chaînes de Google (quoique… sentez-vous libres ^^). Si la sortie de cette bêta n’est pas une révolution, elle marque une étape importante, une première marche essentielle vers une alternative crédible aux plateformes centralisatrices.</p>
  <p>Ici, on va parler ensemble de la base commune que nous avons, expliquer pourquoi PeerTube ne répond pas encore à toutes les attentes (nombreuses et pressantes), et nos envies pour cheminer vers la version 1 de ce logiciel (pour aller <a href="https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/#conclu">direct à la conclusion, c’est ici</a> et <a href="https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/#sommaire">le sommaire est là</a>).</p>
  <h3 id="present">De beaux débuts communautaires</h3>
  <p>C’est un bonheur de l’annoncer : le pari est réussi. <strong>PeerTube est un logiciel qui marche, et permet de fédérer des sites hébergeant des vidéos diffusées de pairs à pairs.</strong> Vous pouvez regarder, commenter, approuver (ou désapprouver) des vidéos, et même découvrir comment soutenir la personne qui les a mises en ligne (si elle a rempli le texte qui se cache derrière le bouton soutenir ou « <em>support</em> »).</p>
  <p>Vous pouvez aussi, si vous en avez les capacités techniques, installer cette solution sur votre serveur et rejoindre la communauté naissante des hébergeurs PeerTube. À ce jour, nous comptons <strong>près d’<a href="https://instances.peertu.be/">une vingtaine d’instances</a> d’hébergement</strong> avec qui nous avons travaillé pour mettre en place une proto-fédération. Une mailing-list et un wiki ont d’ailleurs vu le jour pour partager les expériences et mettre en commun les savoirs de chacun·e, tout est sur le site <a href="https://joinpeertube.org">joinpeertube.org</a></p>
  <p><strong>Les vidéos disponibles sont extrêmement variées</strong> : du hacking (matériel comme social) à l’éducation populaire, des conférences gesticulées au let’s play, du data-journalisme au librisme… Il y en a tellement pour tous les goûts que nous allons vous détailler cela dans un autre article !</p>
  <p>Par contre, <strong>peu d’instances d’hébergement vont ouvrir leurs portes à vos vidéos</strong>… Car c’est un travail titanesque que d’héberger, modérer, et prendre la responsabilité de mettre sur son serveur le contenu d’autrui. Si votre envie est de publier vos vidéos sur une instance PeerTube, il va falloir que vous dénichiez une instance d’hébergement qui vous va… ou que vous vous organisiez pour le faire vous-même.</p>
  <a href="https://framablog.org/wp-content/uploads/2017/11/pt-p2p.png"><img class="size-full wp-image-10886" src="https://framablog.org/wp-content/uploads/2017/11/pt-p2p.png" alt="" width="571" height="400" /></a>Illustration : CC-By-SA <a href="http://emmalidbury.fr/">Emma Lidbury</a><h3 id="limites">Et il est où le Framatube de mes rêves ?</h3>
  <p>Alors Framatube est là : <a href="https://framatube.org">https://framatube.org</a> , mais le Framatube de vos rêves risque fort d’être… dans vos rêves. Nous l’avions annoncé : <strong>Framasoft n’ouvrira pas son hébergement aux vidéos du public.</strong> Non seulement par crainte de devenir un point de centralisation dans une solution qui prône la décentralisation, mais aussi parce que nous n’en avons pas les épaules. Entre passer notre énergie à modérer et diffuser vos contenus, et s’investir pour que vous puissiez le faire en toute indépendance, nous avons choisi : nous voulons améliorer l’outil.</p>
  <p>Car <strong>PeerTube est loin d’être parfait</strong>. Déjà, son interface n’existe qu’en anglais. Oui, cela fait râler les amoureuxses du Français que nous sommes (hihi ^^), mais si nous voulons une solution ouverte sur le monde, l’anglais est une base indispensable (et PeerTube dépasse déjà la simple francophonie). Or, le travail d’internationalisation (préparer un logiciel pour pouvoir traduire son interface en plusieurs langues) n’est pas encore fait… (mais on a des idées pour ça aussi, vous verrez !)</p>
  <p>De même, nous avons bien compris que <strong>la monétisation des vidéos est un sujet qui vous titille</strong>. C’est d’ailleurs étrange de noter combien Google a formaté nos façons de voir la diffusion de vidéos en ligne, à ce sujet… Pour l’instant, la seule solution proposée aux personnes qui mettent en ligne des vidéos est de mettre un texte et un lien qui apparaîtront dans le bouton soutenir (« <em>Support</em> ») sous la vidéo.</p>
  <p>Nous ne sommes pas allé·e·s plus loin car favoriser une solution technique serait imposer une vision des partages culturels et de leurs financements. Or nous avons ici une version bêta : <strong>de nombreuses améliorations sont à prévoir</strong>… Dont celles qui vous permettraient de créer (et choisir) vous-même les outils de monétisation qui vous intéressent !</p>
  <h3 id="futur">En route pour la version 1 !</h3>
  <p>On aimerait bien pouvoir dire à Chocobozzz « Bon, maintenant, va faire une petite sieste jusqu’à la prochaine ère glacière », mais… Il reste tellement de choses à faire ! Déjà, parce qu’avec la sortie d’une version bêta viennent les retours des bêta-tests. Ensuite parce que nous comptons avancer pour <strong>proposer une version 1 d’ici la fin de l’année</strong>…</p>
  <p>Or ce ne sont pas les envies qui manquent pour <strong>améliorer PeerTube vers sa V1</strong> : stabiliser le code, bien sûr, mais aussi travailler sa capacité à passer à l’échelle (comment se comporte PeerTube sur un petit RaspberryPi ou sur des grrrrrrrrros serveurs). Nous souhaitons aussi avoir un système d’internationalisation pour pouvoir traduire l’interface du logiciel, un outil pour mettre en ligne des sous-titres sur les vidéos, travailler le module de commentaires innovant imaginé sur le forum des contributions…</p>
  <p>Dans nos rêves les plus fous, il y a aussi des outils statistiques plus poussés, un système de <em>hooks</em> ou de <em>plugin</em> qui permettent de personnaliser son instance PeerTube (changer l’apparence, ajouter un bouton ici ou là, etc.), une application mobile… Mais tout cela dépendra des énergies qui nous rejoindront comme de notre capacité à les accueillir et à collaborer ensemble.</p>
  <p><strong>Car tout cela a un coût : humain, associatif et financier.</strong> Si nous avons pu prolonger le contrat de Chocobozzz, c’est grâce à des dons qui ont été faits pour l’ensemble des actions de Framasoft. Ainsi, son temps de développement ne sera plus exclusivement consacré à PeerTube, car d’autres logiciels libres ont aussi besoin de ses talents (rassurez-vous, hein : il va quand même continuer à travailler sur son beau bébé ^^).</p>
  <h2 id="conclu">Longue vie à PeerTube !</h2>
  <p>Le fait est que nous allons devoir trouver comment pérenniser le poste de Chocobozzz et le projet PeerTube, qui nous semble avoir toutes les qualités pour proposer, à terme, une alternative éthique et astucieuse aux géants de la vidéo sur le web. Si nous cherchons encore comment faire, nous savons que nous ne voulons pas uniquement nous reposer sur la générosité de la communauté francophone.</p>
  <p>En attendant, c’est aujourd’hui le jour où nous pouvons rendre publics les efforts qui ont été menés jusqu’à présent, en espérant que cela titille au moins votre curiosité… et au mieux vos envies de contribuer à cette belle aventure (ça se passe sur notre forum !).</p>
  <p>Car oui, la route vers une alternative à YouTube est longue… Mais on vient d’en défricher la voie, et on vous assure qu’elle est Libre !</p>
  <p>L’équipe Framasoft, qui lève son chapeau à Chocobozzz.</p>
  <h3 id="liens">Pour aller plus loin</h3>
  <ul><li><a href="https://joinpeertube.org">Découvrir PeerTube</a></li>
  <li><a href="https://instances.peertu.be">Parcourir les instances</a></li>
  <li>L’instance PeerTube de Framasoft : <a href="https://framatube.org">Framatube</a></li>
  <li>L’espace PeerTube de <a href="https://framacolibri.org/c/qualite/peertube">notre forum des contributions</a></li>
  <li>Le <a href="https://github.com/Chocobozzz/PeerTube">code de PeerTube</a></li>
  <li>PeerTube est un projet de <a href="https://contributopia.org">la feuille de route Contributopia</a></li>
  <li>Et vous pouvez <a href="https://soutenir.framasoft.org">soutenir Framasoft</a> dans l’ensemble de ses efforts</li>
  </ul><div title="Diaspora*" id="diaspora-button-container"><a href="denied:javascript:(function(){var url = 'https://framablog.org/2018/03/21/peertube-beta-une-graine-dalternative-a-youtube-vient-declore/' ;var title = 'PeerTube bêta : une graine d’alternative à YouTube vient d’éclore';   window.open('https://framablog.org/wp-content/plugins/share-on-diaspora/new_window.php?url='+encodeURIComponent(url)+'&amp;title='+encodeURIComponent(title),'post','location=no,links=no,scrollbars=no,toolbar=no,width=620,height=400')})()"><img id="diaspora-button-ownimage-img" src="https://framablog.org/wp-content/uploads/2017/11/diaspora.png" alt="" /></a></div></div>		<div class="social-sharing ss-social-sharing">&#13;
  				        <a rel="external nofollow" class="ss-button-facebook" href="http://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fframablog.org%2F2018%2F03%2F21%2Fpeertube-beta-une-graine-dalternative-a-youtube-vient-declore%2F" target="_blank">Share on Facebook</a><a rel="external nofollow" class="ss-button-twitter" href="http://twitter.com/intent/tweet/?text=PeerTube+b%C3%AAta%C2%A0%3A+une+graine+d%27alternative+%C3%A0+YouTube+vient+d%27%C3%A9clore&amp;url=https%3A%2F%2Fframablog.org%2F2018%2F03%2F21%2Fpeertube-beta-une-graine-dalternative-a-youtube-vient-declore%2F" target="_blank">Share on Twitter</a>	        	    </div>&#13;


