Un sacco di applicazioni che utilizziamo quotidianamente sono sviluppate in C++. Per esempio, se stai leggendo questo abstract in un browser, allora probabilmente stai usando un software scritto in C++. Nonostante la diffusione di tanti altri eccellenti linguaggi, perché il C++ è ancora così utilizzato? Sapevi che nel 2014 è stato il secondo linguaggio più amato della SO Developer Survey? Cosa offre in più rispetto ad altre tecnologie? Presenterò la mia visione, e anche alcuni “segreti” che rendono il C++ speciale ed evoluto.
OCA, da Oggi Contribuisco Anch'io!
Ovvero come contribuire all'OCA sfruttando al meglio github. Scopriremo come orientarsi tra i vari repository e come è strutturato un progetto; come muoversi tra guidelines e convenzioni; analizzeremo i principali strumenti messi a disposizione da github (issues e PRs).
Vedremo gli aspetti social che agevolano la collaborazione con la community e, non ultimo, lo scopo che anima tutto questo.
Ovvero come contribuire all'OCA sfruttando al meglio github. Scopriremo come orientarsi tra i vari repository e come è strutturato un progetto; come muoversi tra guidelines e convenzioni; analizzeremo i principali strumenti messi a disposizione da github (issues e PRs).
Vedremo gli aspetti social che agevolano la collaborazione con la community e, non ultimo, lo scopo che anima tutto questo
- Alex Comba -
BigData & Graphs in Rome
OrientDB & Big Data:storie di vita vissuta
Da un caso di successo a un futuro che “spacca”
Un backstage di un caso di successo con un occhio critico ai problemi avuti, ma con la consapevolezza di un futuro brillante.
Il riassunto della nascita di una suite di business intelligence.
By Luca Bianconi
@LucaBianconi74
OCA, da Oggi Contribuisco Anch'io!
Ovvero come contribuire all'OCA sfruttando al meglio github. Scopriremo come orientarsi tra i vari repository e come è strutturato un progetto; come muoversi tra guidelines e convenzioni; analizzeremo i principali strumenti messi a disposizione da github (issues e PRs).
Vedremo gli aspetti social che agevolano la collaborazione con la community e, non ultimo, lo scopo che anima tutto questo.
Ovvero come contribuire all'OCA sfruttando al meglio github. Scopriremo come orientarsi tra i vari repository e come è strutturato un progetto; come muoversi tra guidelines e convenzioni; analizzeremo i principali strumenti messi a disposizione da github (issues e PRs).
Vedremo gli aspetti social che agevolano la collaborazione con la community e, non ultimo, lo scopo che anima tutto questo
- Alex Comba -
BigData & Graphs in Rome
OrientDB & Big Data:storie di vita vissuta
Da un caso di successo a un futuro che “spacca”
Un backstage di un caso di successo con un occhio critico ai problemi avuti, ma con la consapevolezza di un futuro brillante.
Il riassunto della nascita di una suite di business intelligence.
By Luca Bianconi
@LucaBianconi74
Molte aziende hanno costruito negli anni sistemi informatici complessi che gestiscono i processi interni e i processi di gestione i clienti/fornitori. Con il cambiamento delle abitudini dei consumatori quello che una volta si faceva intermediato da un agente, commesso o addetto che usava il sistema gestionale per rispondere alla richiesta del cliente ora si fa in modalità self service semplicemente con uno smartphone, il cliente si aspetta di essere autonomo nel rapporto con l’azienda. L’esperienza che ci si aspetta come consumatore è quella che si vive usando piattaforma native digitali come ad esempio Netflix e Spotify. Il problema è che la maggior parte delle aziende non è partita nativamente digitale e non è possibile azzerare tutto e ripartire da capo senza correre rischi di business continuity importanti che vedono milioni di clienti coinvolti e impatti significativi a livello economico in caso di down. Se non è possibile ripartire da zero, quindi come fare? Una risposta è un approccio graduale di evoluzione architetturale e tecnologica dove Kubernetes, e il suo ecosistema, giocano un ruolo chiave. In questa presentazione vedremo i tre principi cardine sulla quale si basa questa strategia: API as a Product; architetture evolutive; fast data con pattern CQRS; che si uniscono per creare una strategia di Modernizzazione delle Applicazioni utilizzando i componenti dell’ecosistema del landscape CNCF (https://landscape.cncf.io). Da qui capiremo quali siano i benefici nel breve, medio e lungo termine e quali passi iniziare a fare per avviare questa strategia.
Per quando ti serve la presentazione? – ASAP Quando prevedi di lanciare la prossima versione del sito? – ASAP Hai eseguito i controlli di security come da linee guida aziendali? – Uh?
In questi anni, nel mondo IT regna incontrastata una sola parola: ASAP. Tutto deve essere fatto prima di ieri, ovviamente al minor costo possibile. Provate a pensare se questo criterio fosse stato usato quando hanno costruito il tetto della vostra casa o il circuito frenante della vostra auto potente. Bhe, in realtà voi usate questo approccio quando costruite il vostro business aziendale.
In questa sfrenata corsa a scegliere la miglior stringa possibile di 0 e 1, spesso test funzionali o di integrazione sono eseguiti poco o male. Penetration test applicativi e code review ovviamente sono le prime cose a saltare.
Da un lato i tempi dei controlli di security non si conciliano bene con processi veloci di rilascio. Quindi, in una terra dove non esiste il giusto o lo sbagliato, proveremo a dare una risposta ad una semplice domanda.
Ma noi la sicurezza applicativa come la facciamo in queste condizioni?
Tag: bdd, code review, penetration test, gauntlt, linee guida, sviluppo sicuro
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...Idriss Riouak
Uno studio sull'efficacia del checker Clang Tidy in particolare sull'efficacia del modulo "modernize". Il test è stato applicato sulla Parma Polyhedra Library.
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023AndreaStagi3
Slide del MeetUp di Angular Roma dove Cristian Borelli e Andrea Stagi ci hanno raccontato le evoluzioni fatte sul Design Kit e Bootstrap Italia: dalle nuove tecnologie ai temi dell'accessibilità. L’occasione è stata utile per presentare i lavori per il nuovo Design Kit Angular che andrà ad arricchire le componenti Bootstrap Italia.
La ragione principale per cui le aziende decidono di non adottare il DevOps per il database è di preservare la sicurezza del database stesso. Eppure, si tratta di una concezione errata: applicando il DevSecOps al DB, infatti, è possibile creare in ambienti strutturati le condizioni per un rilascio sicuro degli script del database, gestendo al meglio potenziali rischi di sicurezza. Segui il webinar per apprendere come includere il DB all’interno della tua strategia DevSecOps.
Ambiente di Continuous Delivery che gira in container docker, produce container docker sfruttando altri container docker, testa container docker usando altri container docker e rilascia container docker in container docker.
Questo è un racconto di come abbiamo imparato a usare i container e sfruttato le loro caratteristiche per creare le nostre build pipeline e l’infrastruttura stessa di build e test. Sarà un viaggio tra le sfide affrontate e illustrando le pratiche, buone e cattive, che abbiamo adottato. Da (le ceneri di) un build server confusionario, poco flessibile e con capacità limitate abbiamo realizzato un sistema ordinato, flessibile e scalabile… tutto questo sfruttando docker fino all’eccesso (e oltre)!
Il sentiero che stiamo percorrendo è lungo e a tratti impervio e noi abbiamo ancora parecchia strada da percorrere, ma gli sforzi fatti ci hanno ripagato con grandi soddisfazioni e vale la pena condividere questa esperienza!
Con queste “14 misere” slide ho cercato d’introdurre Liferay e come iniziare con il piede giusto per affrontare lo sviluppo di applicazioni ai voi che siete proprio “novelli”. Spero di essere riuscito con questo primo episodio a suscitare la vostra curiosità e interesse.
Enabling DevOps for Machine Learning with Azure PipelinesLuca Milan
Slides dell'evento DevOps Heroes 2019 a Parma.
Al giorno d'oggi il "Machine Learning" (ML) estende le capacità di tanti software in centinaia di campi applicativi, dalla medicina agli istituti finanziari. Creare modelli predittivi realistici richiede però uno sforzo, da parte di tante persone con differenti background: da una parte, infatti, ci sono i team di sviluppo (Developers / DevOps) e dall'altra i team di "Data Science".
Per questa ragione, la vera sfida che abbiamo di fronte oggi, consiste nel saper rilasciare gli "Artefatti di ML" in maniera automatizzata, riproducibile ed affidabile sfruttando tutte le pratiche DevOps.
In questo talk illustreremo, con l'ausilio di una demo realizzata con il framework ML.NET, i passi che portano alla creazione di pipelines ad "altissima automazione" in grado di gestire le più comuni operazioni di un progetto di ML: dal training alla distribuzione del modello di apprendimento ai diversi "Consumers".
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Codemotion
Increased complexity makes it very hard and time-consuming to keep your software bug-free and secure. We introduce fuzz-testing as a method for automatically and continuously discovering vulnerabilities hidden in your code. The talk will explain how fuzzing works and how to integrate fuzz-testing into your Software Development Life Cycle to increase your code’s security.
Pompili - From hero to_zero: The FatalNoise neverending storyCodemotion
It was 1993 when we decided to venture in a beat'em up game for Amiga. The Catalypse's success story pushed me and my comrade to create something astonishing for this incredible game machine... but things went harder, assumptions were slightly different, and italian competitors appeared out of nowhere... the project died in 1996. Story ended? Probably not...
More Related Content
Similar to Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
Molte aziende hanno costruito negli anni sistemi informatici complessi che gestiscono i processi interni e i processi di gestione i clienti/fornitori. Con il cambiamento delle abitudini dei consumatori quello che una volta si faceva intermediato da un agente, commesso o addetto che usava il sistema gestionale per rispondere alla richiesta del cliente ora si fa in modalità self service semplicemente con uno smartphone, il cliente si aspetta di essere autonomo nel rapporto con l’azienda. L’esperienza che ci si aspetta come consumatore è quella che si vive usando piattaforma native digitali come ad esempio Netflix e Spotify. Il problema è che la maggior parte delle aziende non è partita nativamente digitale e non è possibile azzerare tutto e ripartire da capo senza correre rischi di business continuity importanti che vedono milioni di clienti coinvolti e impatti significativi a livello economico in caso di down. Se non è possibile ripartire da zero, quindi come fare? Una risposta è un approccio graduale di evoluzione architetturale e tecnologica dove Kubernetes, e il suo ecosistema, giocano un ruolo chiave. In questa presentazione vedremo i tre principi cardine sulla quale si basa questa strategia: API as a Product; architetture evolutive; fast data con pattern CQRS; che si uniscono per creare una strategia di Modernizzazione delle Applicazioni utilizzando i componenti dell’ecosistema del landscape CNCF (https://landscape.cncf.io). Da qui capiremo quali siano i benefici nel breve, medio e lungo termine e quali passi iniziare a fare per avviare questa strategia.
Per quando ti serve la presentazione? – ASAP Quando prevedi di lanciare la prossima versione del sito? – ASAP Hai eseguito i controlli di security come da linee guida aziendali? – Uh?
In questi anni, nel mondo IT regna incontrastata una sola parola: ASAP. Tutto deve essere fatto prima di ieri, ovviamente al minor costo possibile. Provate a pensare se questo criterio fosse stato usato quando hanno costruito il tetto della vostra casa o il circuito frenante della vostra auto potente. Bhe, in realtà voi usate questo approccio quando costruite il vostro business aziendale.
In questa sfrenata corsa a scegliere la miglior stringa possibile di 0 e 1, spesso test funzionali o di integrazione sono eseguiti poco o male. Penetration test applicativi e code review ovviamente sono le prime cose a saltare.
Da un lato i tempi dei controlli di security non si conciliano bene con processi veloci di rilascio. Quindi, in una terra dove non esiste il giusto o lo sbagliato, proveremo a dare una risposta ad una semplice domanda.
Ma noi la sicurezza applicativa come la facciamo in queste condizioni?
Tag: bdd, code review, penetration test, gauntlt, linee guida, sviluppo sicuro
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...Idriss Riouak
Uno studio sull'efficacia del checker Clang Tidy in particolare sull'efficacia del modulo "modernize". Il test è stato applicato sulla Parma Polyhedra Library.
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023AndreaStagi3
Slide del MeetUp di Angular Roma dove Cristian Borelli e Andrea Stagi ci hanno raccontato le evoluzioni fatte sul Design Kit e Bootstrap Italia: dalle nuove tecnologie ai temi dell'accessibilità. L’occasione è stata utile per presentare i lavori per il nuovo Design Kit Angular che andrà ad arricchire le componenti Bootstrap Italia.
La ragione principale per cui le aziende decidono di non adottare il DevOps per il database è di preservare la sicurezza del database stesso. Eppure, si tratta di una concezione errata: applicando il DevSecOps al DB, infatti, è possibile creare in ambienti strutturati le condizioni per un rilascio sicuro degli script del database, gestendo al meglio potenziali rischi di sicurezza. Segui il webinar per apprendere come includere il DB all’interno della tua strategia DevSecOps.
Ambiente di Continuous Delivery che gira in container docker, produce container docker sfruttando altri container docker, testa container docker usando altri container docker e rilascia container docker in container docker.
Questo è un racconto di come abbiamo imparato a usare i container e sfruttato le loro caratteristiche per creare le nostre build pipeline e l’infrastruttura stessa di build e test. Sarà un viaggio tra le sfide affrontate e illustrando le pratiche, buone e cattive, che abbiamo adottato. Da (le ceneri di) un build server confusionario, poco flessibile e con capacità limitate abbiamo realizzato un sistema ordinato, flessibile e scalabile… tutto questo sfruttando docker fino all’eccesso (e oltre)!
Il sentiero che stiamo percorrendo è lungo e a tratti impervio e noi abbiamo ancora parecchia strada da percorrere, ma gli sforzi fatti ci hanno ripagato con grandi soddisfazioni e vale la pena condividere questa esperienza!
Con queste “14 misere” slide ho cercato d’introdurre Liferay e come iniziare con il piede giusto per affrontare lo sviluppo di applicazioni ai voi che siete proprio “novelli”. Spero di essere riuscito con questo primo episodio a suscitare la vostra curiosità e interesse.
Enabling DevOps for Machine Learning with Azure PipelinesLuca Milan
Slides dell'evento DevOps Heroes 2019 a Parma.
Al giorno d'oggi il "Machine Learning" (ML) estende le capacità di tanti software in centinaia di campi applicativi, dalla medicina agli istituti finanziari. Creare modelli predittivi realistici richiede però uno sforzo, da parte di tante persone con differenti background: da una parte, infatti, ci sono i team di sviluppo (Developers / DevOps) e dall'altra i team di "Data Science".
Per questa ragione, la vera sfida che abbiamo di fronte oggi, consiste nel saper rilasciare gli "Artefatti di ML" in maniera automatizzata, riproducibile ed affidabile sfruttando tutte le pratiche DevOps.
In questo talk illustreremo, con l'ausilio di una demo realizzata con il framework ML.NET, i passi che portano alla creazione di pipelines ad "altissima automazione" in grado di gestire le più comuni operazioni di un progetto di ML: dal training alla distribuzione del modello di apprendimento ai diversi "Consumers".
Similar to Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015 (20)
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Codemotion
Increased complexity makes it very hard and time-consuming to keep your software bug-free and secure. We introduce fuzz-testing as a method for automatically and continuously discovering vulnerabilities hidden in your code. The talk will explain how fuzzing works and how to integrate fuzz-testing into your Software Development Life Cycle to increase your code’s security.
Pompili - From hero to_zero: The FatalNoise neverending storyCodemotion
It was 1993 when we decided to venture in a beat'em up game for Amiga. The Catalypse's success story pushed me and my comrade to create something astonishing for this incredible game machine... but things went harder, assumptions were slightly different, and italian competitors appeared out of nowhere... the project died in 1996. Story ended? Probably not...
Il Commodore 65 è un prototipo di personal computer che Commodore avrebbe dovuto mettere in commercio quale successore del Commodore 64. Purtroppo la sua realizzazione si fermò appunto allo stadio prototipale. Racconterò l'affascinante storia del suo sviluppo ed il perchè della soppressione del progetto ormai ad un passo dalla immissione in commercio.
Rivivere l'ebbrezza di progettare un vecchio computer o una consolle da bar è oggi possibile sfruttando le FPGA, ovvero logiche programmabili che consentono a chiunque di progettare il proprio hardware o di ricrearne uno del passato. In questa sessione si racconta come dal reverse engineering dell'hardware di vecchie glorie come il Commodore 64 e lo ZX Spectrum sia stato possibile farle rivivere attraverso tecnologie oggi alla portata di tutti.
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Codemotion
There's a lot of talk about blockchain, but how does the technology behind it actually work? For developers, getting some hands-on experience is the fastest way to get familiair with new technologies. So let's build a blockchain, then! In this session, we're going to build one in plain old Java, and have it working in 40 minutes. We'll cover key concepts of a blockchain: transactions, blocks, mining, proof-of-work, and reaching consensus in the blockchain network. After this session, you'll have a better understanding of core aspects of blockchain technology.
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Codemotion
When was the last time you were truly lost? Thanks to the maps and location technology in our phones, a whole generation has now grown up in a world where getting lost is truly a thing of the past. Location technology goes far beyond maps in the palm of our hand, however. In this talk, we will explore how a ridesharing app works. How do we discover our destination?How do we find the closest driver? How do we display this information on a map? How do we find the best route?To answer these questions,we will be learning about a variety of location APIs, including Maps, Positioning, Geocoding etc.
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Codemotion
Eward Driehuis, SecureLink's research chief, will guide you through the bumpy ride we call the cyber threat landscape. As the industry has over a decade of experience of dealing with increasingly sophisticated attacks, you might be surprised to hear more attacks slip through the cracks than ever. From analyzing 20.000 of them in 2018, backed by a quarter of a million security events and over ten trillion data points, Eward will outline why this happens, how attacks are changing, and why it doesn't matter how neatly or securely you code.
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 - Codemotion
IoT revolution is ended. Thanks to hardware improvement, building an intelligent ecosystem is easier than never before for both startups and large-scale enterprises. The real challenge is now to connect, process, store and analyze data: in the cloud, but also, at the edge. We’ll give a quick look on frameworks that aggregate dispersed devices data into a single global optimized system allowing to improve operational efficiency, to predict maintenance, to track asset in real-time, to secure cloud-connected devices and much more.
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Codemotion
What if Virtual Reality glasses could transform your environment into a three-dimensional work of art in realtime in the style of a painting from Van Gogh? One of the many interesting developments in the field of Deep Learning is the so called "Style Transfer". It describes a possibility to create a patchwork (or pastiche) from two images. While one of these images defines the the artistic style of the result picture, the other one is used for extracting the image content. A team from TNG Technology Consulting managed to build an AI showcase using OpenCV and Tensorflow to realize such goggles.
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Codemotion
Blockchain (and Cryptocurrency) is an evolution of 20-year old research from scientists like Chaum, Lamport, and Castro & Liskov. Due to the current hype, it's hard to distinguish beneficial aspects of the technology from a desire for a "silver bullet" for device security, verifiable logistics, or "saving democracy". The problem: blockchain introduces new security challenges - and blind adoption without understanding reduces overall security. In this talk, Melanie Rieback and Klaus Kursawe explain the pitfalls and limits of blockchain, so you can avoid making your applications LESS secure.
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Codemotion
Networking is a core part of computing in the digital world we inhabit. But, how well do you know how it works? Do you understand all the moving parts of the OSI stack inside your computer, and how the network is actually put together? How can this ever work? This guided safari of layers, standards, protocols, and happenstance will bring us close to the copper wire, and up through the layers of CDMA/CD, ARP, routing and HTTP. We will make a few excursions through patchworks that still work forty years later, and cleverly designed mechanisms that show that simplicity is the only way to last.
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Codemotion
Performance tests are not only an important instrument for understanding a system and its runtime environment. It is also essential in order to check stability and scalability – non-functional requirements that might be decisive for success. But won't my cloud hosting service scale for me as long as I can afford it? Yes, but… It only operates and scales resources. It won't automatically make your system fast, stable and scalable. This talk shows how such and comparable questions can be clarified with performance tests and how DevOps teams benefit from regular test practise.
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Codemotion
Sascha will demonstrate the opportunities and challenges of Conversational AI learned from the practice. Both Technology and User Experience will be covered introducing a process finding micro-moments, writing happy paths, gathering intents, designing the conversational flow, and finally publishing on almost all channels including Voice Services and Chatbots. Valuable for enterprises, developers, and designers. All live on stage in just minutes and with almost no code.
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Codemotion
A key challenge we face at Pacmed is quickly calibrating and deploying our tools for clinical decision support in different hospitals, where data formats may vary greatly. Using Intensive Care Units as a case study, I’ll delve into our scalable Python pipeline, which leverages Pandas’ split-apply-combine approach to perform complex feature engineering and automatic quality checks on large time-varying data, e.g. vital signs. I’ll show how we use the resulting flexible and interpretable dataframes to quickly (re)train our models to predict mortality, discharge, and medical complications.
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Codemotion
Coolblue is a proud Dutch company, with a large internal development department; one that truly takes CI/CD to heart. Empowerment through automation is at the heart of these development teams, and with more than 1000 deployments a day, we think it's working out quite well. In this session, Pat Hermens (a Development Managers) will step you through what enables us to move so quickly, which tools we use, and most importantly, the mindset that is required to enable development teams to deliver at such a rapid pace.
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...Codemotion
Quantum computers can use all of the possible pathways generated by quantum decisions to solve problems that will forever remain intractable to classical compute power. As the mega players vie for quantum supremacy and Rigetti announces its $1M "quantum advantage" prize, we live in exciting times. IBM-Q and Microsoft Q# are two ways you can learn to program quantum computers so that you're ready when the quantum revolution comes. I'll demonstrate some quantum solutions to problems that will forever be out of reach of classical, including organic chemistry and large number factorisation.
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Codemotion
Chinese food exploded across America in the early 20th century, rapidly adapting to local tastes while also spreading like wildfire. How was it able to spread so fast? The GY6 is a family of scooter engines that has achieved near total ubiquity in Europe. It is reliable and cheap to manufacture, and it's made in factories across China. How are these factories able to remain afloat? Chinese-American food and the GY6 are both riveting studies in product-market fit, and both are the product of a distributed open source-like development model. What lessons can we learn for open source software?
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Codemotion
The design space has exploded in size within the last few years and Sketch is one of the most important milestones to represent the phenomenon. But behind the scenes of this growing reality there is a remote team that revolutionizes the design space all without leaving the home office. This talk will present how Sketch has grown to become a modern, product designer's tool.
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Codemotion
Would you fly in a plane designed by a craftsman or would you prefer your aircraft to be designed by engineers? We are learning that science and empiricism works in software development, maybe now is the time to redefine what “Software Engineering” really means. Software isn't bridge-building, it is not car or aircraft development either, but then neither is Chemical Engineering. Engineering is different in different disciplines. Maybe it is time for us to begin thinking about retrieving the term "Software Engineering" maybe it is time to define what our "Engineering" discipline should be.
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Codemotion
What is the job of a CTO and how does it change as a startup grows in size and scale? As a CTO, where should you spend your focus? As an engineer aspiring to be a CTO, what skills should you pursue? In this inspiring and personal talk, I describe my journey from early Red Hat engineer to CTO at Bloomon. I will share my view on what it means to be a CTO, and ultimately answer the question: Should the CTO be coding?
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
1. MILAN 21.11.2015 - Marco Arena
Perché nel 2015 parliamo ancora di C++?
Marco Arena - Webshell
MILAN 21.11.2015 - Marco Arena
2. MILAN 21.11.2015 - Marco Arena
Chi sono
• 28 anni, romano, laureato in Ingegneria Informatica
• Da 4+ anni sviluppo software per una Scuderia di F1 italiana
• Nel 2013 ho fondato ++it, la comunità italiana dedicata al C++
https://marcoarena.wordpress.com/
marco@italiancpp.org
3. MILAN 21.11.2015 - Marco Arena
++it -> Italian C++ Community
Social e Gruppi di
Discussione
Spazio per i
principianti
Risorse Consigliate
News e
Newsletter Mensile
Offerte di Lavoro
Meetup, Eventi e
Partecipazioni
Piattaforma per
pubblicare articoli
www.italiancpp.org
10. MILAN 21.11.2015 - Marco Arena
Top 100 Android Playstore Apps (U.S.)
Non posso pubblicare questi dati!
Puoi trovarli presso la fonte ufficiale (slide 15):
https://github.com/CppCon/CppCon2015/tree/master/Present
ations/What's%20New%20In%20VS2015
14. MILAN 21.11.2015 - Marco Arena
Segreto #0: È molto polare
Fonte:www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Fonte: http://www.stroustrup.com/applications.html
15. MILAN 21.11.2015 - Marco Arena
Segreto #0: È molto popolare
Fonte: http://stackoverflow.com/research/developer-survey-2015
16. MILAN 21.11.2015 - Marco Arena
Segreto #1: È compatibile con il C
Realizzatotramitehttp://jibjab.com
18. MILAN 21.11.2015 - Marco Arena
“So just as C++ ‘won’ in the 90s because of its own
strengths plus its C compatibility, C++11 is being adopted
because of its own strengths plus its C++98 compatibility.”
Herb Sutter
Segreto #2: Si preoccupa del passato
19. MILAN 21.11.2015 - Marco Arena
Segreto #2: Si preoccupa del passato
"Semplificazione tramite aggiunta di complessità"
vector<Foo> v;
for(vector<Foo>::iterator it = v.begin(); it != v.end(); ++it) { // C++98
// use *it
}
for (auto it = begin(v); it != end(v); ++it) { // C++11
// use *it
}
for(const auto& i : v) { // Modern C++
// use i
}
21. MILAN 21.11.2015 - Marco Arena
Segreto #3: Non è garbage collected
• Di default il lifetime di oggetti/variabili è scoped ((de)allocazione automatica)
• ~distruttore() = meccanismo di UNDO general-purpose
(e.g. acquisizione/rilascio di risorse – RAII)
{
ifstream file{"hello.txt"};
// ...
} // file.close(); automatico
22. MILAN 21.11.2015 - Marco Arena
Segreto #3: Non è garbage collected
• Di default il lifetime di oggetti/variabili è scoped ((de)allocazione automatica)
• ~distruttore() = meccanismo di UNDO general-purpose
(e.g. acquisizione/rilascio di risorse – RAII)
class widget {
gadget g;
};
void do_work() {
auto x = …;
auto y = …;
}
Finalizzazione Deterministica:
• A prova di eccezione
• Generazione automatica (member-wise)
• In ordine (inverso a quello di definizione)
// fatto in automatico
~widget() {
g.~gadget();
}~y();
~x();
23. MILAN 21.11.2015 - Marco Arena
Segreto #3: Non è garbage collected
• Di default il lifetime di oggetti/variabili è scoped ((de)allocazione automatica)
• ~distruttore() = meccanismo di UNDO general-purpose
(e.g. acquisizione/rilascio di risorse – RAII)
class widget {
gadget g;
};
void do_work() {
auto x = …;
auto y = …;
}
Finalizzazione Deterministica:
• A prova di eccezione
• Generazione automatica (member-wise)
• In ordine (inverso a quello di definizione)
24. MILAN 21.11.2015 - Marco Arena
Segreto #3: Non è garbage collected
In alcuni casi il Garbage Collector può complicarti la vita, esempi:
• Sistemi latency-critical (e.g. non vuoi che il GC salti fuori senza controllo)
• Il rilascio di risorse dev’essere deterministico (e.g. files & threads)
http://samsaffron.com/archive/2011/10/28/in-
managed-code-we-trust-our-recent-battles-with-
the-net-garbage-collector
Una storia vera:
Stack Overflow vs .NET Garbage Collector
25. MILAN 21.11.2015 - Marco Arena
Segreto #4: È indipendente dal paradigma
Il miglior combattente non è un pugile, un
karateka o un judoka. Il miglior combattente è
qualcuno che si può adattare a qualsiasi stile
di combattimento.
Bruce Lee
26. MILAN 21.11.2015 - Marco Arena
void rotate_and_draw(vector<Shape*>& vs, int r)
{
for_each(vs.begin(), vs.end(), [](Shape* p) {
p->rotate(r);
});
for (Shape* p : vs)
p->draw();
}
Segreto #4: È indipendente dal paradigma
27. MILAN 21.11.2015 - Marco Arena
void rotate_and_draw(vector<Shape*>& vs, int r)
{
for_each(vs.begin(), vs.end(), [](Shape* p) {
p->rotate(r);
});
for (Shape* p : vs)
p->draw();
}
Segreto #4: È indipendente dal paradigma
Object-Oriented
Generic Funzionale
(una specie )
Procedurale
28. MILAN 21.11.2015 - Marco Arena
Segreto #4: È indipendente dal paradigma
int sum = accumulate(
ints(1)
| transform([](int i){ return i*i; })
| take(10)
, 0);
Fonte (range V3 di Eric Niebler): https://ericniebler.github.io/range-v3/
29. MILAN 21.11.2015 - Marco Arena
Fonte: http://www.agileday.it/front/sessioni-2014/#iop_vs_oop
public void CatchExceptions_IF()
{
var promocode = new PromocodeStatusIF();
try
{
promocode.Apply("g128g7d2g");
}
catch (AlreadyUsedPromocodeException)
{
Assert.Pass("Already used");
}
catch (ExpiredPromocodeException)
{
Assert.Pass("Expired");
}
catch (NotValidPromocodeException)
{
Assert.Pass("Not valid");
}
Assert.Fail("no exception");
}
public void RemoveCatchExceptionsAndUseMessages_NOIF()
{
var promocode = new PromocodeStatus();
promocode
.AlreadyUsed(() = > Assert.Pass("Already used"))
.Expired(() = > Assert.Pass("Expired"))
.NotValid(() = > Assert.Pass("Not valid"))
.Apply("g128g7d2g");
Assert.Fail("cannot handle this promocode");
}
int main()
{
PromocodeStatus{}
.AlreadyUsed([] { Assert::Pass("Already used"); })
.Expired([] { Assert::Pass("Expired"); })
.NotValid([] {Assert::Pass("NotValid"); })
.Apply("g128g7d2g");
Assert::Fail("cannot handle this promocode");
}
Bonus: Anti-IF in C#
Fonte: http://www.italiancpp.org/2014/11/23/anti-if-idioms-in-cpp/
30. MILAN 21.11.2015 - Marco Arena
// Go
func SomeFuntion()
{
defer func() {
Log("SomeFunction executed")
}
... Anything ...
}
Segreto #4: È indipendente dal paradigma – Go’s defer
31. MILAN 21.11.2015 - Marco Arena
// C++
void SomeFuntion()
{
defer d { [] {
Log("SomeFunction executed");
}};
... Anything ...
}
Segreto #4: È indipendente dal paradigma – Go’s defer
Implementazione: http://www.italiancpp.org/2013/07/16/defer-con-raii-lambda/
32. MILAN 21.11.2015 - Marco Arena
Segreto #5: È adatto alla Systems Programming
33. MILAN 21.11.2015 - Marco Arena
Segreto #5: È adatto alla Systems Programming
Di default:
• Buone/ottime prestazioni ("You don’t pay, at runtime, for what you don’t use" - 0-overhead principle)
• Allocazione su stack & move semantics
• Finalizzazione deterministica
• Contiguità
• Cross-platform
34. MILAN 21.11.2015 - Marco Arena
stackheapstackheap
ptr
ptr
ptr
stack heap
Fonte: http://channel9.msdn.com/Events/Build/2014/2-661
Segreto #5: È adatto alla Systems Programming - Contiguità
35. MILAN 21.11.2015 - Marco Arena
Segreto #5: È adatto alla Systems Programming
Di default:
• Buone/ottime prestazioni ("You don’t pay, at runtime, for what you don’t use" - 0-overhead principle)
• Allocazione su stack & move semantics
• Finalizzazione deterministica
• Contiguità
• Cross-platform
36. MILAN 21.11.2015 - Marco Arena
Cross-Platform: C++ come denominatore comune
• Riuso
• Performance
• Sicurezza
37. MILAN 21.11.2015 - Marco Arena
Segreto #5: È adatto alla Systems Programming
Di default:
• Buone/ottime prestazioni ("You don’t pay, at runtime, for what you don’t use" - 0-overhead principle)
• Allocazione su stack & move semantics
• Finalizzazione deterministica
• Contiguità
• Cross-platform
Se serve, controllo efficiente e completo di:
• Lifetime dei tuoi oggetti (copy, move, …)
• Hardware e risorse del SO (non sempre portabile)
• Data Layout (PODs, …)
• Program size
• In generale: "Fine tuning"
45. MILAN 21.11.2015 - Marco Arena
Troppo spesso viene "aperto il cofano" quando non serve
Il C++ è molto complicato
46. MILAN 21.11.2015 - Marco Arena
Non è un linguaggio che si impara su Stack Overflow
Il C++ è molto complicato
47. MILAN 21.11.2015 - Marco Arena
Il C++ è molto complicato
C++11
language
C# 3.0 (2008)
Java 7 (2011)
C++11
library
Fonte: http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/C-11-VC-11-and-Beyond
48. MILAN 21.11.2015 - Marco Arena
WG21
Fonte: http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/C-11-VC-11-and-Beyond
Il C++ è molto complicato
49. MILAN 21.11.2015 - Marco Arena
Standardizzare tutto quello che il C++ si è perso negli ultimi 10 anni
(Concorrenza, Parallelismo, Networking, Reflection, …)
Migliorare/arricchire/uniformare aspetti e strumenti propri del linguaggio
(Concepts, Moduli, Ranges, …)
Promuovere e «formalizzare»la diffusione di Guidelines sul «buon» C++
(https://github.com/isocpp/CppCoreGuidelines)
Cosa ci riserva il futuro?
50. MILAN 21.11.2015 - Marco Arena
Segreto #7: Ha un ecosistema straordinario
++it Meetup Bologna (Novembre 2014)
CppCon 2014 (Settembre 2014)
51. MILAN 21.11.2015 - Marco Arena
Segreto #7: Ha un ecosistema straordinario
52. MILAN 21.11.2015 - Marco Arena
Segreto #7: Ha un ecosistema straordinario
isocpp.org
cppcon.org
53. MILAN 21.11.2015 - Marco Arena
Quindi perché nel 2015 parliamo ancora di C++?
54. MILAN 21.11.2015 - Marco Arena
Perché nel 2015 parliamo ancora di C++?
È molto popolare
È compatibile con il C
Si preoccupa del passato
Non è garbage collected
È indipendente dal paradigma
È adatto alla Systems Programming
Sta crescendo in fretta
Ha un ecosistema straordinario
55. MILAN 21.11.2015 - Marco Arena
A general-purpose programming language with a bias towards
systems programming that is:
• a better C
• supports data abstraction
• supports object-oriented programming
• supports generic programming
It is defined by an ISO standard, offers stability over decades, and has a
large and lively user community.
Bonus: Cos’è il C++?
Bjarne Stroustrup
http://www.stroustrup.com/bs_faq.html#what-is
56. MILAN 21.11.2015 - Marco Arena
Leave your feedback on Joind.in!
https://m.joind.in/event/codemotion-milan-2015
MILAN 21.11.2015 - Marco Arena