francescomecca.eu/output/rss.xml

706 lines
68 KiB
XML
Raw Normal View History

2018-11-10 18:19:00 +01:00
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Caught in the Net</title><link>francescomecca.eu</link><description></description><atom:link href="francescomecca.eu/rss.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2018 &lt;a href="mailto:francescomecca.eu"&gt;Francesco Mecca&lt;/a&gt; </copyright><lastBuildDate>Sat, 10 Nov 2018 17:14:01 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>eLearning in the age of Social Networks, the EduHack Platform</title><link>francescomecca.eu/blog/2018/10/2/addio-reddit/</link><dc:creator>Francesco Mecca</dc:creator><description>&lt;div&gt;&lt;p&gt;This is the revised transcript of my &lt;a href="http://conf.owlteh.org/contributions/published/elearning-in-the-age-of-social-networks-the-eduhack-model/"&gt;talk&lt;/a&gt; at the &lt;a href="https://www.conf.owlteh.org/"&gt;OWLTEH Conference 2018&lt;/a&gt; at the Coventry University.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Me, giving the talk" src="francescomecca.eu/wp-content/uploads/2018/coventry.jpg"&gt;&lt;/p&gt;
&lt;h2&gt;In the beginning there was the LMS&lt;/h2&gt;
&lt;p&gt;Learning Management Systems appeared on the market around the beginning of 2000.&lt;/p&gt;
&lt;p&gt;Since then they have been the foundation of the modern education sector, ranging from the basic functionalities of activity tracking, grades and analytics for the students (and in some cases the parents) to complex environments for remote education or even experimental pedagogies (e.g. &lt;a href="https://fare.polito.it"&gt;FARE&lt;/a&gt; that provides hospitalized students means to access the physical class and labs).&lt;/p&gt;
&lt;p&gt;In the last five years commercial LMS reduced the pace of their progress, while providing better accessibility and decentralization.&lt;/p&gt;
&lt;p&gt;The core of their principle hasn't changed. In this talk I am going to highlight their problems and outline a vision for a different approach that is supported by modern technologies.&lt;/p&gt;
&lt;h3&gt;The problem of traditional LMS&lt;/h3&gt;
&lt;p&gt;The design of a Learning Management System is based mainly around closed structures, such as very strict roles management and access management.&lt;/p&gt;
&lt;p&gt;In a scenario where a professor might want to bring a domain expert during classes and online, a traditional LMS doesn't provide any kind of facilities for things such a role (in terms of login rights, rights towards other users, moderation capabilities).&lt;/p&gt;
&lt;p&gt;There are many corner cases that lack a general method that allows users to expand the features of an LMS, especially when an institution lacks the technical means to bring development to such platforms.&lt;/p&gt;
&lt;p&gt;Moreover, traditional LMS are highly gerarchic and foster an epistemology of "possession": learners are defined by the content that they "possess", the course they subscribed to, the material they downloaded. The educator is forced to be an authoritative source of knowledge that needs to direct the activity of the learners by having students pull the knowledge through an online portal. The flow is unidirectional and content centric.&lt;/p&gt;
&lt;p&gt;In my experience instructors produce delivery-centered pedagogies because LMS lacks the flexibility to be adapted to learners, especially when they are used by a variety of instructors (e.g.: all of the professors of a UNI). While this model better reflects the traditional classroom I would argue that modern users are not used to this kind of dynamics in modern online communities.&lt;/p&gt;
&lt;p&gt;You can learn more about the friction in the usage of traditional LMS in the following papers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Rubin, Fernandes, Avgerinou, &amp;amp; Moore, 2010&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Naveh, Tubin, &amp;amp; Pliskin, 2010&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Parry, 2009; Sanchez-Franco, 2010&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Beebe et al., 2010&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Hacking Education with Digital Pedagogies&lt;/h3&gt;
&lt;p&gt;What happens when education gets "hacked" and transitions in the digital world?
This is what we envision within the realms of the EduHack project:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;"Content to consume" becomes "content to consume to produce content": learners become knowledge builders because producing intellectual outputs is the logical continuation to learning.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The environment goes from content centric to learner centric: teachers must be comfortable with the fluidity of such new roles.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The distribution of information goes from knowledge-push to knowledge-pull: learners actively seek out educational material and gets rewarded.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the academia the closest study in this direction has been:
eLearning 2 0 and new literacies are social practices lagging behind, W.-Y. Lim et al.&lt;/p&gt;
&lt;h4&gt;What do we gain with OSNs&lt;/h4&gt;
&lt;p&gt;In the Web 2.0 landscape and in particular for younger generations, Online Social Networks (OSNs) have strong potential for building and mantaining strong connections and create an informal learning environment that collects and puts into actions the ideas that I have described.
I wont rehash widely known statistics, but it must be said that nowadays OSNs, in particular Facebook, Youtube and Twitter have a high rate of penetration towards students of upper secondary and post secondary education. For younger students OSNs are their primary means of communication while dominating their usage of the internet overall.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Using Social Networks Technology to Enhance Learning in Higher Education: a Case Study using Facebook.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Web-Based Learning Platforms integratins Social Networking for Design Educations at High Schols in China.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Using online social networking for teaching and learning: Facebook use at the University of Cape Town.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Case studies: Facebook as an alternative LMS&lt;/h3&gt;
&lt;p&gt;Different case studies analyzed the possible uses of Facebook as a social LMS.
The following is a list of the positive and negative results of such studies grouped by User Experience Design (UX), Behavior of the users and Quantitative Participation.&lt;/p&gt;
&lt;h5&gt;UX&lt;/h5&gt;
&lt;p&gt;Advantages:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Photos and discussions are presented better than traditional LMS.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;User's walls, private messages and comments are considered just communication tools.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Users reported that the technologies used for sharing class related material was familiar.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Educators reported that Facebook was useful to answer questions in bulk.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Educators reported that given the capabilities above, they saved a lot of time that otherwise would have been spent dealing with class related communications and questions.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Disadvantages:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Users where skeptical in writing long essays.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Friction when used as a formal learning platform.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Private platforms have issues related to accessibilities and language. Communication was done in english even if that wasn't the case before;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Facebook doesn't support a wiki system.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;There are no tools for group management.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;There are no tools for sending bulk messages and group notifications.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;No capabilities for deletion and archival of material.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;No support for common multimedia (such as powerpoint slides or pdf).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Maximum characters limit for posts.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h5&gt;Behavior of the users&lt;/h5&gt;
&lt;p&gt;Advantages:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Users reached to older students and befriended them.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Users reported that they felt less pressure online.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Educators found that boldlier students asked more questions because of absense of face to face shyness.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Students help each other in answering questions&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Six people from prior classes idependently requested to join the group&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Constant and more accurate feedback for teachers&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Constant communication for teachers&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;They got to know classmates better&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In heavily moderated OSNs, few users find disappropriate contents.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In a comparison Facebook's discussion were more numerous than Moodle's discussions even when people were not allowed to be friends&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Disadvantages:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Addiction&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Students reported difficulties to get used to the new online persona.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Miscommunication: many prefer face to face interaction to express views. This maybe because they are used to it in traditional classrooms.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Some people say that they don't feel safe on FB (this is even more common when interviewing master students).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Some students worry that their personal life could be discovered and misjudged by tutors.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Students avoided to befriend educators and lecturers in order to hide their private lives.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;During the research period, no student befriended the interviewed lecturers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Students did not accept friend requests from lecturers.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h5&gt;Quantitative Participation&lt;/h5&gt;
&lt;p&gt;Advantages:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Overall the students are more responsive to issues and questions raised in classes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;There is a higher number of ongoing discussions in any period.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Users log to Facebook for class related activities also during vacations (while the university LMS was almost not used).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Very active participation: more than 90% of the students used Facebook outside of classes for study related activities.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Improved discussion outside of classes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Students post class related material.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Creation of many User Generated Content.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There are no relevant reported challenges regarding participation and usage patterns.&lt;/p&gt;
&lt;h3&gt;Where do we go from here?&lt;/h3&gt;
&lt;p&gt;I want to highlight some other threats that an OSN such as Facebook poses to the Open Web.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The issue of privacy: forcing students to use a service that mines and sells their data is &lt;strong&gt;unethical&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Identity pollution: the open web is based on the principle of pseudoanonimity, users should be capable of build a prism of different online identity for different communities and environments.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Studies report Facebook as more appropriate for younger students, but younger people have higher rates of addiction to OSNs as well.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Addicted OSNs users have a lower GPA.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;20% of college students reported being stalked on OSNs.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While the reported results about learners and educators participation in the usage of OSNs as LMS is astounding, forcing students to signup and give away their sensible data to private services is debatable and could be considered unethical.&lt;/p&gt;
&lt;h2&gt;The EduHack model&lt;/h2&gt;
&lt;p&gt;We need to develop a new LMS that is respectful of the Open Web standards without providing any friction to the users.&lt;/p&gt;
&lt;p&gt;For this reasons, as part of the EduHack Project, we are developing the EduHack Knowledge Sharing Platform.&lt;/p&gt;
&lt;p&gt;The EduHack Knowledge Sharing Platform was born around the assumption that many of the advantages in terms of user engagement and group dynamics&lt;/p&gt;
&lt;p&gt;provided by OSNs could be replicated by adopting their widely known design patterns and mimicing closely the UX.&lt;/p&gt;
&lt;p&gt;At the core of the platform there are the founding principles of the Open Web.&lt;/p&gt;
&lt;p&gt;For this reason no data is collected of mined. Users are provided with an account that could be separated from their different online persona.&lt;/p&gt;
&lt;h5&gt;A platform for collaborative learning&lt;/h5&gt;
&lt;p&gt;The EduHack Knowledge Sharing Platform is divided into two parts.&lt;/p&gt;
&lt;p&gt;The personal area is user centric and provides a window into the activities of the user in the form of multimedia blogposts.&lt;/p&gt;
&lt;p&gt;The user can create and manage different roles for external editors to his private area. By default no other user is allowed to post a "story" in his personal area, but other users can be added as team members and can manage group works in different blogs.&lt;/p&gt;
&lt;p&gt;Learners are expected to elaborate and remix what they learned (e.g. from online classes or MOOCs).&lt;/p&gt;
&lt;p&gt;The public area is modelled after the UX of Reddit and it is divided into diffent sections (e.g.: mathematics, IT, discrete phisics, etc...), each providing a wiki.&lt;/p&gt;
&lt;p&gt;Learners can subscribe to different sections or different users and be notified of new content or interactions.&lt;/p&gt;
&lt;p&gt;Every user is allowed to post a link, an essay or any other widely adopted multimedia artifact to any section. Every user can positively vote and comment every post made. Comments can be positively voted as well.&lt;/p&gt;
&lt;p&gt;Comments and content can be ordered by a custom algorithm (Wilson score interval) or chronologically.&lt;/p&gt;
&lt;p&gt;Educators have a custom flair, can create new sections and moderate them. Moderation consists in changing links, removing posts or comments. Vote cannot be altered.&lt;/p&gt;
&lt;h3&gt;Conclusions&lt;/h3&gt;
&lt;p&gt;The EduHack Knowledge Sharing Platform is an ongoing effort to evolve LMS and augment them with social features and modern group dynamics.&lt;/p&gt;
&lt;p&gt;The UX is modeled after a widely used social network without sacrificing consolidated approaches from traditional LMS.&lt;/p&gt;
&lt;p&gt;We want to provide with this model an ethically sound framework for user centric, knowledge-pull pedagogies.&lt;/p&gt;
&lt;h3&gt;References&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Using online social networking for Teaching and learning: Facebook use at the University of Cape Town, Tanja E Bosch.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The myths about e-learning in higher education, James Kariuki Njenga and Louis Cyril Henry Fourie&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Group Formation in eLearning-enabled Social Networks, Steffen Brauer and Thomas C. Schmidt &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;eLearning 2.0 and new literacies: are social laggin behind, Wei-Ying Lim, Hyo-Jeong So and Seng-Chee Tan&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Using the Facebook group as a learning management system: An exploratory study, Qiyun Wang, Huay Lit Woo, Choon Lang Quek, Yuqin Yang and Mei Liu&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Using Social Networking Technology to Enhance Learning in Higher Education: A Case Study Using Facebook, Peter Ractham and Daniel Firpo&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Students and teachers use of Facebook, Khe Foon Hew&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The future of e-learning: a shift to knowledge networking and social software, Mohamed Amine Chatti and Matthias Jarke&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Using Facebook as course management software: a case study, Elizabeth M. LaRue&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Electronic Social Media in Teaching: Usages, Benefits, and Barriers as Viewed by Sudanese Faculty Members, Ahmed Yousif Abdelraheem and Abdelrahman Mohammed Ahmed&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Use of Social Networking in Education: Challenges and Opportunities: Ashraf Jalal Yousef Zaidieh&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Findings on Facebook in higher education: A comparison of college faculty and student uses and perceptions of social networking sites, M.D. Roblyer, Michelle McDaniel, Marsena Webb, James Herman and James Vince Witty e,4&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Online social networks: Why do students use facebook? Christy M.K. Cheung, Pui-Yee Chiu and Matthew K.O. Lee&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;e-Learning: The student experience, Jennifer Gilbert, Susan Morton and Jennifer Rowley&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><category>education</category><category>elearning</category><category>Facebook</category><category>lms</category><category>reddit</category><guid>francescomecca.eu/blog/2018/10/2/addio-reddit/</guid><pubDate>Fri, 26 Oct 2018 00:00:00 GMT</pubDate></item><item><title>Un articolo per r/italyinformatica</title><link>francescomecca.eu/blog/2018/07/27/addio-reddit/</link><dc:creator>Francesco Mecca</dc:creator><description>&lt;div&gt;&lt;p&gt;Questo articolo è stato originalmente scritto per il &lt;a href="https://tldr.italyinformatica.org"&gt;blog&lt;/a&gt; di &lt;a href="https://reddit.com/r/italyinformatica"&gt;r/italyinformatica&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Negli ultimi anni abbiamo assistito all'ascesa di un gran numero di linguaggi di programmazione, in particolare &lt;a href="https://golang.rg"&gt;Go&lt;/a&gt; (2009), &lt;a href="https://www.rust-lang.org/en-US/"&gt;Rust&lt;/a&gt; (2010), &lt;a href="https://kotlinlang.org/"&gt;Kotlin&lt;/a&gt; (2011), &lt;a href="https://elixir-lang.org/"&gt;Elixir&lt;/a&gt; (2011), &lt;a href="https://crystal-lang.org/"&gt;Crystal&lt;/a&gt; (2014), &lt;a href="https://www.ponylang.or"&gt;Pony&lt;/a&gt; (2014).&lt;/p&gt;
&lt;p&gt;Questa esplosione di nuovi linguaggi è dovuta, fra le molte motivazioni, alla necessità di adottare paradigmi di programmazione non immediatamente recenti come cittadini di primo tipo.&lt;/p&gt;
&lt;p&gt;Rispetto ai più maturi C, C++ o Java, Python o Ruby questi linguaggi offrono "out of the box" supporto per:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;una visione moderna delle concorrenze (le goroutines di Go o il modello ad attori di Pony ed Elixir)&lt;/li&gt;
&lt;li&gt;Memory safeness, in particolare:&lt;ul&gt;
&lt;li&gt;assenza di NULL (Pony, Rust, Kotlin)&lt;/li&gt;
&lt;li&gt;gestione automatica della memoria, il cosiddetto &lt;a href="https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)%20(o%20%5BReference%20Counting%5D(https://en.wikipedia.org/wiki/Reference_counting)%20per%20Rust"&gt;Garbage Collector&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;assenza di puntatori&lt;/li&gt;
&lt;li&gt;assenza di deadlocks&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Supporto ad HTTP nella standard library&lt;/li&gt;
&lt;li&gt;Management delle dipendenze (ad eccezione di Kotlin)&lt;/li&gt;
&lt;li&gt;Namespaces&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Chiaramente nessuno di questi linguaggi è oggettivamente superiore agli altri, sono tutti &lt;a href="https://en.wikipedia.org/wiki/Turing_completeness"&gt;turing completi&lt;/a&gt; e la scelta del programmatore ricade su motivazioni del tutto personali (stile, programmazione ad oggetti, familiarità con altri linguaggi).&lt;/p&gt;
&lt;h3&gt;Un pò di contesto&lt;/h3&gt;
&lt;p&gt;Ho scritto la mie prime due righe di codice nel 2013 per il corso di Computer Science del Politecnico di Torino.&lt;/p&gt;
&lt;p&gt;Per mia fortuna, al Politecnico le cose si muovono ancora lentamente e ci hanno fatto usare C per tutta la durata della triennale. Si è aggiunto un corso di principi della programmazione ad oggetti al terzo anno, in Java.&lt;/p&gt;
&lt;p&gt;Personalmente ho imparato durante l'estate di quel primo anno le basi di C++ e Python poco dopo.&lt;/p&gt;
&lt;p&gt;Sono stati con i miei primi &lt;a href="https://github.com/framecca"&gt;progetti&lt;/a&gt; che ho capito che non si può avere un buon linguaggio senza un buon tooling ed una community vivace e soprattutto tanta, tanta documentazione. Per questo, per molto tempo C è stata la mia prima scelta, dato che il mio target è sempre Linux.&lt;/p&gt;
&lt;h3&gt;Gli obbiettivi prima del linguaggio&lt;/h3&gt;
&lt;p&gt;Questo post vuole essere una raccolta più o meno organizzata delle motivazioni per cui mi sono dovuto muovere oltre la frontiera di C nel mio ultimo progetto, ovvero un backend per la raccolta e presentazione di pubblicazione di ricerca e materiale didattico per più di 80 centri di ricerca.&lt;/p&gt;
&lt;p&gt;Per il Centro &lt;a href="http://nexa.polito.it/"&gt;Nexa&lt;/a&gt; del Politecnico di Torino mi sono ritrovato per la prima volta responsabile del codice che dovevo scrivere e dell'uso che se ne sarebbe fatto.&lt;/p&gt;
&lt;p&gt;Ho dovuto tenere in considerazione, oltre chiaramente alla funzionalità della piattaforma, in ordine di priorità:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Sicurezza&lt;/li&gt;
&lt;li&gt;Performance e scalabilità&lt;/li&gt;
&lt;li&gt;Separazione dal frontend&lt;/li&gt;
&lt;li&gt;Facilità di deploy in un server che non controllo&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Fortunatamente non mi è stata imposta nessuna limitazione sulla scelta del linguaggio, altrimenti Python sarebbe stato la scelta più adeguata se avessi dovuto tener conto anche di altri programmatori.&lt;/p&gt;
&lt;h3&gt;Benvenuto D&lt;/h3&gt;
&lt;p&gt;La mia scelta è caduta su &lt;a href="https://dlang.org"&gt;D&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Voglio provare ad affrontare ad uno ad uno i motivi di questa scelta magari inusuale.&lt;/p&gt;
&lt;h5&gt;Sicurezza&lt;/h5&gt;
&lt;p&gt;Nessuno vuole davvero vantarsi di usare un backend scritto in C/C++. Il &lt;a href="https://en.wikipedia.org/wiki/Buffer_overflow"&gt;buffer overflow&lt;/a&gt; può essere considerato il bug più comune e ci sono &lt;a href="https://techaeris.com/2017/09/27/buzz-fuzzing-find-uncommon-vulnerability/"&gt;situazioni&lt;/a&gt; in cui non appaiono affatto in maniera ovvia.&lt;/p&gt;
&lt;p&gt;Inoltre per un applicativo distribuito il Garbage Collector è la scelta più performante, &lt;a href="https://www.usenix.org/node/189882"&gt;specialmente se coordinato fra le varie istanze&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;D offre questo di design, e benchè il suo GC sia frutto di numerose &lt;a href="https://www.quora.com/Which-language-has-the-brightest-future-in-replacement-of-C-between-D-Go-and-Rust-And-Why/answer/Andrei-Alexandrescu"&gt;discussioni&lt;/a&gt;, offre in maniera del tutto innovativa, robustezza e &lt;a href="http://www.walterbright.com/gonewild.pdf"&gt;sicurezza&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In particolare, D presenta:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Array che sono slices (o ranges) ma non puntatori (e neanche oggetti)&lt;/li&gt;
&lt;li&gt;Bound checking durante la fase di compilazione.&lt;/li&gt;
&lt;li&gt;Inizializzazione automatica delle variabili.&lt;/li&gt;
&lt;li&gt;Safe Casting (chiaramente come eredità di C++).&lt;/li&gt;
&lt;li&gt;Restricted pointers: si può passare una funzione per referenza dichiarandola &lt;code&gt;ref&lt;/code&gt;, ma solo quando passata come parametro o di ritorno. Inoltre non c'è nessuna pointer arithmetic.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Resource_acquisition_is_initialization"&gt;RAII&lt;/a&gt;, ovvero l'acquisizione delle risorse equivale alla loro assegnazione e Scopes: le variabili hanno una lifetime limitata allo scope di dichiarazione. Nessun dangling pointer come in C.&lt;/li&gt;
&lt;li&gt;Strutture immutabili: come nelle specifiche di molti linguaggi funzionali, si può dichiarare una variabile come &lt;code&gt;immutable&lt;/code&gt; e quindi può essere facilmente condivisa fra threads.&lt;/li&gt;
&lt;li&gt;@safe, @trusted: le specifiche del linguaggio permettono di annotare delle funzioni come sicure o affidabili affinchè il compilatore controlli che non gestiscano puntatori (ad esempio interfacciandosi con C) ed utilizzino il subset "sicuro" del linguaggio (maggiori dettagli in seguito).&lt;/li&gt;
&lt;li&gt;funzioni pure: le funzioni inoltre possono essere dichiarate pure, prive di effetti collaterali e sempre &lt;a href="https://en.wikipedia.org/wiki/Reentrancy_(computing)"&gt;rientranti&lt;/a&gt;. Questo permette di evitare &lt;a href="https://en.wikipedia.org/wiki/Deadlock"&gt;deadlocks&lt;/a&gt; e un controllo totale sul risultato delle funzioni.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Performance&lt;/h5&gt;
&lt;p&gt;Ci sono moltissime soluzioni per scrivere un applicativo che si interfaccia con il web, ma hanno tutte la loro origine nel famoso &lt;a href="http://www.kegel.com/c10k.html"&gt;C10K problem&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Nel mio caso ho deciso di utilizzare un approccio &lt;a href="https://stackoverflow.com/questions/10960998/how-different-async-programming-is-from-threads"&gt;asincrono&lt;/a&gt; con coroutines (anche detti &lt;a href="https://en.wikipedia.org/wiki/Green_threads"&gt;threads leggeri&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Benchè D abbia &lt;a href="https://dlang.org/library/core/thread/fiber.html"&gt;supporto nativo&lt;/a&gt; alle coroutines, ho deciso di appoggiarmi al framework più comune per web dev in D: &lt;a href="francescomecca.eu/blog/2018/07/27/addio-reddit/vibed.org"&gt;vibe.d&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ogni volta che Vibe accetta una richiesta dall'esterno ed esegue una funzione bloccante (che interrompe l'esecuzione del programma fino al ritorno della funzione), questa viene messa in una pool di azioni da eseguire e Vibe controlla periodicamente che almeno una di queste sia pronta a ritornare un risultato e continuare con l'esecuzione di questa.&lt;/p&gt;
&lt;p&gt;Inoltre, benchè questo meccanismo funzioni interamente su un solo thread, è elementare coordinare una &lt;a href="https://en.wikipedia.org/wiki/Thread_pool"&gt;thread pool&lt;/a&gt; che distribuisa il carico fra i vari core che eseguono migliaia di threads leggeri concorrentemente.&lt;/p&gt;
&lt;h5&gt;Contratti e Tests&lt;/h5&gt;
&lt;p&gt;Non amo scrivere commenti sui programmi. Penso sia assolutamente necessario commentare il codice di librerie ma al di fuori di queste il codice (buon codice) dovrebbe essere autoesplicativo.&lt;/p&gt;
&lt;p&gt;Inoltre, nelle mie recenti esperienze, il comportamento del programma era chiaro a partire dai tests.&lt;/p&gt;
&lt;p&gt;In D questo concetto viene portato agli estremi applicando il &lt;a href="https://en.wikipedia.org/wiki/Design_by_contract"&gt;"Design by Contract programming&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Un contratto è la divisione di una funzione in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Precondizione, ovvero le condizioni che devono essersi verificate prima della chiamata della funzione;&lt;/li&gt;
&lt;li&gt;Postcondizione, ovvero le condizioni che devono essere rispettate all'uscita della funzione (solitamente applicate al risultato);&lt;/li&gt;
&lt;li&gt;Invarianti, ovvero le specifiche di una struttura dati che devono rimanere verificate in ogni funzione;&lt;/li&gt;
&lt;li&gt;Corpo della funzione&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un esempio:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;struct Clock {
short time;
invariant {
assert (time &amp;gt; 0);
}
}
short addReturnTime(Clock c, short n)
in {
n &amp;gt; 0;
}
body {
return c-&amp;gt;time + t;
}
out (result){
result &amp;gt; c-&amp;gt;time;
}
unittest {
auto clock = Clock(60);
assert (addReturnTime(clock, 10) == 70);
}
&lt;/pre&gt;
&lt;p&gt;Come si nota dall'esempio il supporto ai tests è built-in nel linguaggio e distanti solo una flag in fase di compilazione.&lt;/p&gt;
&lt;h5&gt;Un approccio moderno alle concorrenze&lt;/h5&gt;
&lt;p&gt;Il modello primitivo delle concorrenze in Posix è discutibilmente datato e prono ad errori per il programmatore.&lt;/p&gt;
&lt;p&gt;D di default evita la condivisione di dati fra Threads.
Fra le varie motivazioni c'è il fatto che questo rifletta più realisticamente l'hardware, ma sicuramente l'obbiettivo finale è la riduzione di bug.&lt;/p&gt;
&lt;p&gt;Non voglio dilungarmi nei dettagli di ogni singolo approccio, ma per completezza D offre out of the box i seguenti modelli:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Message passing e &lt;a href="http://dist-prog-book.com/chapter/3/message-passing.html"&gt;attori&lt;/a&gt;, ovvero tutti i dati che vogliono essere condivisi fra thread sono incapsulati in &lt;a href="https://en.wikipedia.org/wiki/Remote_procedure_call"&gt;RPC&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;Green threads, come nel mio caso;&lt;/li&gt;
&lt;li&gt;Multi processing, ovvero &lt;code&gt;man 3 fork&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;TaskPools, ovvero future e promises di Python e Javascript;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://moss.csc.ncsu.edu/~mueller/cluster/ps3/SDK3.0/docs/accessibility/sdkpt/cbet_1simdvector.html"&gt;SIMD vectorization&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Andrei Alexandrescu, uno dei due creatori del linguaggio, dedica un intero capitolo alle concorrenze che potete leggere liberamente &lt;a href="http://www.informit.com/articles/article.aspx?p=1609144"&gt;qui&lt;/a&gt;.&lt;/p&gt;
&lt;h5&gt;Assenza di dogmatismi&lt;/h5&gt;
&lt;p&gt;Non potrei mai pensare di scrivere un linguaggio di programmazione senza mettere al secondo posto la semplicità.&lt;/p&gt;
&lt;p&gt;Ma chiaramente ancora prima di discutere di semplicità la dobbiamo definire.&lt;/p&gt;
&lt;p&gt;Go e Python sono due linguaggi semplici. Lo sono per la ridotta sintassi (Go in particolare) e perchè attraverso il loro dogmatismo costringono il programmatore ad adottare dei paradigmi di programmazione scelti dai designer di quel linguaggio. E` il motivo per cui in python non abbiamo delle vere lambda e per cui Go non ha le eccezioni.&lt;/p&gt;
&lt;p&gt;In D il programmatore ha libertà piena di scelta. Oltre ad un paradigma di programmazione si può ridefinire la sintassi e evitare il Garbage Collector. Si può in ultimo disattivare tutte le feature del linguaggio che sono @safe e adottare uno stile molto più vicino al C/C++, con tanto di inline asm.&lt;/p&gt;
&lt;h3&gt;Dove iniziare&lt;/h3&gt;
&lt;p&gt;Non posso non concludere un post propagandistico senza indirizzare i più interessati alle prime risorse per imparare D.&lt;/p&gt;
&lt;p&gt;Personalmente consiglio il &lt;a href="http://www.informit.com/store/d-programming-language-9780321635365?w_ptgrevartcl=Concurrency+in+the+D+Programming+Language_1609144"&gt;libro&lt;/a&gt; di Andrei che offre in particolare moltissimi dettagli sulle motivazioni del design di D. Non ho ancora letto un libro che affrontasse così chiaramente il design di linguaggi di programmazione e i vari compromessi fra performance, semplicità e complessità del compilatore.&lt;/p&gt;
&lt;p&gt;Inoltre il sito della community offre due intro per chi proviene da &lt;a href="https://dlang.org/ctod.html"&gt;C&lt;/a&gt; e &lt;a href="https://dlang.org/cpptod.html"&gt;C++&lt;/a&gt;, oltre al classi &lt;a href="https://tour.dlang.org/"&gt;tour&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Inoltre la libreria standard, &lt;a href="https://github.com/dlang/phobos"&gt;Phobos&lt;/a&gt;, è talmente chiara che solitamente mi trovo a mio agio a consultare direttamente il codice piuttosto che la documentazione online.&lt;/p&gt;&lt;/div&gt;</description><category>dlang</category><category>programming</category><category>reddit</category><guid>francescomecca.eu/blog/2018/07/27/addio-reddit/</guid><pubDate>Fri, 27 Jul 2018 00:00:00 GMT</pubDate></item><item><title>Addio Reddit</title><link>francescomecca.eu/blog/2018/3/27/addio-reddit/</link><dc:creator>Francesco Mecca</dc:creator><description>&lt;div&gt;&lt;blockquote&gt;
&lt;p&gt;It is also common ground, however, that the First Amendment does not guarantee the right to communicate one's views at all times and places or in any manner that may be desired.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Tempo fa rimasi colpito nel leggere questo &lt;a href="https://www.courtlistener.com/opinion/110532/heffron-v-international-soc-for-krishna-consciousness-inc/"&gt;orientamento&lt;/a&gt; della corte degli Stati Uniti dal quale ho tratto la precedente citazione.&lt;/p&gt;
&lt;p&gt;La libertà di espressione è un diritto molto potente che ha storicamente molteplici interpretazioni. Benchè ingenuamente potrebbe essere inteso come la possibilità di manifestare qualsiasi idea, ci sono delle situazioni in cui si deve intendere come il diritto di un individuo minoritario nel poter esprimersi liberamente e senza ritorsioni.&lt;/p&gt;
&lt;p&gt;Con questa premessa posso inquadrare più facilmente il motivo per cui ritengo che il &lt;a href="https://www.reddit.com/r/announcements/comments/39bpam/removing_harassing_subreddits/"&gt;ban del 2015&lt;/a&gt; da parte degli amministratori di Reddit nei confronti di /r/FatPeopleHate e altri subreddit di minor dimensioni non sia stata un'azione ipocrita rispetto agli ideali della piattaforma.&lt;/p&gt;
&lt;p&gt;&lt;img alt="reddit policies" src="francescomecca.eu/wp-content/uploads/2018/reddit_freespeech.jpg"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nymag.com/selectall/2017/07/angela-nagles-kill-all-normies-the-alt-right-and-4chan.html"&gt;Angela Nagle&lt;/a&gt; ci ricorda che quegli spazi online &lt;a href="https://hackerchick.com/the-unstoppable-power-of-leaderless-organizations/"&gt;senza leader&lt;/a&gt; roccaforte di ideali minoritari di sinistra, hanno permesso di esprimere non un'idea, ma qualsiasi idea, anche di estrema destra.
Diventa quindi inevitabile che una piattaforma delle dimensioni di Reddit, che nello specifico raccoglie una moltitudine di argomenti e discussioni grazie ai quali è stata ritenuta un bastione della eterogeneità, prima o poi debba adottare una linea di moderazione più definita.&lt;/p&gt;
&lt;p&gt;&lt;img alt="1968" src="francescomecca.eu/wp-content/uploads/2018/Situationist.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Il &lt;a href="https://np.reddit.com/r/announcements/comments/863xcj/new_addition_to_sitewide_rules_regarding_the_use/"&gt;recente ban&lt;/a&gt; invece non riguarda la libertà di espressione, e mi colpisce personalmente, nonostante io non abbia mai visitato alcuno dei subreddit recentementi banditi e le mie uniche transazioni si siano limitate agli utenti di r/MechanicalKeyboards.&lt;/p&gt;
&lt;p&gt;Sono approdato a Reddit inizialmente a causa del mio hobby per le tastiere meccaniche. Da lì mi sono mosso verso r/italy e altri subreddit di indirizzo informatico.
Ho interessi di nicchia e Reddit mi permetteva di riunirmi con persone dall'altra parte del globo che mi fornivano informazioni che non avrei potuto ottenere altrimenti.&lt;/p&gt;
&lt;p&gt;Ora questo rimane valido solo per le persone i quali interessi sono allineati con quelle comunità che riflettono una buona immagine per Reddit e gli investitori. Benchè i miei subreddit di riferimento non siano stati banditi, riconosco che nel recente ban ci sono degli intenti politici o misteriosamente economici.&lt;/p&gt;
&lt;p&gt;Con questo post dico addio a Reddit. Da spazio di discussione a spazio di intolleranza e divisione politica, dove delle comunità che non rientrano nei canoni di buona reputazione per delle agenzie pubblicitarie devono essere eliminate.&lt;/p&gt;
&lt;p&gt;Non voglio che ogni mia parola sia pesata oltre i valori della comunità a cui sottoscrivo, non voglio fare esercizi di autocensura nei post che scrivo.&lt;/p&gt;
&lt;p&gt;Aderivo a delle regole ben definite e delle quali gli amministratori si assumevano la responsabilità. Con il ban di marzo 2018 il sito che conoscevo ha cambiato faccia ed il post di un &lt;a href="https://np.reddit.com/user/Reddit-Policy"&gt;utente anonimo&lt;/a&gt; sarà l'ultimo post che downvoterò.&lt;/p&gt;&lt;/div&gt;</description><category>ban</category><category>free speech</category><category>moderation</category><category>PesceWanda</category><category>reddit</category><guid>francescomecca.eu/blog/2018/3/27/addio-reddit/</guid><pubDate>Tue, 27 Mar 2018 00:00:00 GMT</pubDate></item><item><title>Minidox, a guide for the Europeans and the Scrooges</title><link>francescomecca.eu/blog/2017/10/2/minidoxguide/</link><dc:creator>Francesco Mecca</dc:creator><description>&lt;div&gt;&lt;p&gt;This guide is adapted from the &lt;a href="https://github.com/nicinabox/lets-split-guide/blob/master/assembly.md"&gt;Let's split guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It is tailored between the Scrooges like me and all the europeans that couldn't find some TRRS jacks.&lt;/p&gt;
&lt;h3&gt;Helpful references&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://imgur.com/a/vImo6#Rfd586V"&gt;/u/that-canadian's original build log&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Parts&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;PCBs - You will need two of them and you should participated in the group buy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2&lt;/strong&gt; ATmega32U4 - 5V/16MHz Pro Micros, you can find them easily on ebay or amazon. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;36&lt;/strong&gt; 1N4148 diodes, easy to source, even real world shops has them. &lt;/li&gt;
&lt;li&gt;&lt;s&gt;2 TRRS or TRS jacks&lt;/s&gt; our source of all problems, this build log will do without.&lt;/li&gt;
&lt;li&gt;Plate, from &lt;a href="https://github.com/dotdash32/Cases/tree/master/Minidox"&gt;u/dotdash32&lt;/a&gt; or &lt;a href="https://github.com/pjones/minidox-case"&gt;pjones&lt;/a&gt;, 3D printable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;36&lt;/strong&gt; Switches of your choice&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;36&lt;/strong&gt; Keycaps of your choice&lt;/li&gt;
&lt;li&gt;&lt;s&gt; TRRS or TRS cable &lt;/s&gt; No jacks, no cable.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Cost Breakdown&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align="left"&gt;Cost&lt;/th&gt;
&lt;th align="left"&gt;Part&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="left"&gt;$8&lt;/td&gt;
&lt;td align="left"&gt;PCB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="left"&gt;€ 12-30&lt;/td&gt;
&lt;td align="left"&gt;Pro Micros&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="left"&gt;€3-8&lt;/td&gt;
&lt;td align="left"&gt;Diodes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="left"&gt;€14-80&lt;/td&gt;
&lt;td align="left"&gt;Switches&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="left"&gt;€14-180&lt;/td&gt;
&lt;td align="left"&gt;Keycaps&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This is a very cheap build, mine was about 30 € given that I already had the keycaps.&lt;/p&gt;
&lt;h3&gt;Mount the Diodes&lt;/h3&gt;
&lt;p&gt;Diodes allow current to flow in one direction only. Mount the diodes with the black (negative, cathode) line facing the thicker line.&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="francescomecca.eu/wp-content/uploads/2017/minidox1.jpg"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Double check your work&lt;/strong&gt;. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Tip:&lt;/em&gt; &lt;strong&gt;Lightly&lt;/strong&gt; tack each diode in from the top. This will keep them snug against the surface once we flip it over and do the real soldering from the bottom. You only need a tiny amount of solder here and you should still be able to see through the hole.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Connect Jumpers&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;This part is not really needed, but you may want to do it in case you will mount the TRRS jacks in the future.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;On the &lt;strong&gt;underside&lt;/strong&gt; of the PCB, right below the TRRS jack, you'll see two sets of 3 pads labelled VCC and GND. Jumper them like this:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;VCC [x] [ ] VCC
[x] [x]
GND [ ] [x] GND
&lt;/pre&gt;
&lt;p&gt;Do both PCBs the same.&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="https://i.imgur.com/AUT3VUd.png"&gt;&lt;/p&gt;
&lt;h3&gt;Mount Header Pins&lt;/h3&gt;
&lt;p&gt;You should have received header pins with your Pro Micro. Insert the short side into the bottom of PCB and solder them in.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Tip:&lt;/em&gt; To keep them aligned you can slip the Pro Micro over the pins but &lt;strong&gt;do not solder the Pro Micro at this time&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Tack the pins on the end and inspect. If the pins are not quite aligned with the board, heat one side with your iron and press it in. It should make a satisfactory "click".&lt;/p&gt;
&lt;p&gt;Solder the rest of the pins (it won't take much solder here).&lt;/p&gt;
&lt;p&gt;The long part of the pins should be protruding from the bottom. We'll trim these later after soldering the Pro Micro, but you can leave them be for now.&lt;/p&gt;
&lt;h3&gt;Mount the Pro Micro&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Pay special attention on this step&lt;/strong&gt;. There are several things that need to be done in the right order and orientation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Tip:&lt;/em&gt; Flash your Pro Micro now before you mount it. You can test it by using a multimeter to measure the voltage between VCC and RAW. It should be around 5V. If it's bad it'll be a lot less headache than desoldering.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;Mount the 2 switches under the Pro Micro&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Grab two of your switches.&lt;/li&gt;
&lt;li&gt;Snap the switches into your plate in the spots that overlay the Pro Micro (on the left side that's column 2, and on the right that's column 5).&lt;/li&gt;
&lt;li&gt;Line up your PCB with the switches and solder them between the header pins&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Mount the Pro Micro&lt;/h4&gt;
&lt;p&gt;You'll be working from the bottom of the board for this step.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On the &lt;strong&gt;left PCB&lt;/strong&gt; the Pro Micro should be &lt;strong&gt;smooth side up&lt;/strong&gt; (facing you)&lt;/li&gt;
&lt;li&gt;On the &lt;strong&gt;right PCB&lt;/strong&gt; the Pro Micro should be &lt;strong&gt;component side up&lt;/strong&gt; (facing you)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It gets easier if you notice that on the Pro Micros and the PCBs there is "RAW" printed. The raw pin must go through the hole with the same sign.&lt;/p&gt;
&lt;p&gt;If you made my same mistake, instead of desoldering without the right equipment you can try to just cut the dividers on the Pro Micro and detach it by breaking the header pins.&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="francescomecca.eu/wp-content/uploads/2017/promicro2.jpg"&gt;&lt;/p&gt;
&lt;h3&gt;Mount the rest of the switches&lt;/h3&gt;
&lt;p&gt;Home stretch. Gently snap in the rest of the switches and solder them.&lt;/p&gt;
&lt;p&gt;This would have been easier with a plate, I needed the help of a friend in order to have them aligned correctly.&lt;/p&gt;
&lt;h3&gt;Connect the Pro Micro&lt;/h3&gt;
&lt;p&gt;Given that sourcing the trrs jacks (even TRS if you go without leds) is a little bit difficult in Europe (I got mine from aliexpress), we are gonna connect the two Pro Micros directly.&lt;/p&gt;
&lt;p&gt;The Pro Micros just need communication between three of their pins.&lt;/p&gt;
&lt;p&gt;This means that the Minidox works if you connect the correct pins with a simple copper cable.&lt;/p&gt;
&lt;p&gt;The pins are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Data pin on the right (pin 6 in figure)&lt;/li&gt;
&lt;li&gt;VCC pin, left side (21)&lt;/li&gt;
&lt;li&gt;GND pin, just below the RAW pin (23)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="" src="francescomecca.eu/wp-content/uploads/2017/promicropinout.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="francescomecca.eu/wp-content/uploads/2017/promicro4.jpg"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="francescomecca.eu/wp-content/uploads/2017/promicro5.jpg"&gt;&lt;/p&gt;
&lt;p&gt;In my case I have used some old molex cable because raw copper wires tend to be very weak and break apart in a few days.&lt;/p&gt;
&lt;h2&gt;Troubleshooting&lt;/h2&gt;
&lt;h4&gt;Column 2 or column 5 doesn't work (under the controller)&lt;/h4&gt;
&lt;p&gt;If you're having trouble with a dead column right over your Pro Micro it could be that you've got a short from the switch pins. Try to get under there and bend them down.&lt;/p&gt;
&lt;h4&gt;One side isn't working&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Double check if the copper wires are in working conditions and if you have connected the right pins.&lt;/li&gt;
&lt;li&gt;Check that the wires are insulated and that they do not touch the other pins.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;End Result&lt;/h2&gt;
&lt;p&gt;Beautiful? &lt;a href="https://en.wikipedia.org/wiki/Don%27t-care_term"&gt;W&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="francescomecca.eu/wp-content/uploads/2017/promicro3.jpg"&gt;&lt;/p&gt;&lt;/div&gt;</description><category>DIY</category><category>mechanical keyboard</category><category>Minidox</category><category>PesceWanda</category><guid>francescomecca.eu/blog/2017/10/2/minidoxguide/</guid><pubDate>Mon, 02 Oct 2017 00:00:00 GMT</pubDate></item><item><title>Cyber-utopia and vaporwave</title><link>francescomecca.eu/blog/2017/5/9/vaporwave/</link><dc:creator>Francesco Mecca</dc:creator><description>&lt;div&gt;&lt;p&gt;Recently I decided to change the &lt;a href="https://github.com/jasonlong/cayman-theme"&gt;css&lt;/a&gt; of my blog to reflect a vaporwave-ish aestethic. &lt;/p&gt;
&lt;p&gt;Although I don't listen to a lot of electronic music, 2814 has been my go to music when I am programming and I go through a lot of James Ferraro's works during the day.&lt;/p&gt;
&lt;p&gt;What is the reason for my recent obsession on vaporwave culture?&lt;/p&gt;
&lt;h3&gt;A dream that disappeared&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;The narrative of Western civilization has become a broken record... should we be surprised when a chopped and screwed trip through the cold war period resonates broadly? &lt;/p&gt;
&lt;p&gt;Vaporwave creates a language to reflect on the inability to break free from the chains of an Orwellian culture. &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Internet gave me a personal space, a community, heck even a lot of fun masked by a sense of purpose for the free software culture.&lt;/p&gt;
&lt;p&gt;But from a higher point of view Internet failed us. The Cyberspace has been dead.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/John_Perry_Barlow"&gt;John Barlow&lt;/a&gt; on the &lt;a href="https://www.eff.org/cyberspace-independence"&gt;Declaration of the Independence of Cyberspace&lt;/a&gt; wrote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Governments of the Industrial World, you weary giants of flesh and steel, I come from Cyberspace, the new home of Mind. On behalf of the future, I ask you of the past to leave us alone. You are not welcome among us. You have no sovereignty where we gather.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;But at a certain point in time the Cyberspace didn't want to be left alone and with its own feet headed to real world. Cyberspace blended with the Meatspace&lt;/p&gt;
&lt;p&gt;Every manifestation of the Cyberspace into reality is some sort of virus that eats bites of our existences in the Meatspace and translates that to bytes that are stored in virtual treasure chests. &lt;/p&gt;
&lt;p&gt;Real life communication is &lt;a href="https://medium.freecodecamp.com/mark-zuckerberg-is-the-most-powerful-person-on-earth-but-is-he-responsible-5fbcaeb29ee1"&gt;divoured&lt;/a&gt; into digital data by Facebook, Amazon doesn't stop at our doorbells anymore but &lt;a href="https://www.amazon.com/echoshow"&gt;creeps&lt;/a&gt; into our house, and sleeping is no more a function of how much we are offline but some sort of distorted &lt;a href="https://techcrunch.com/2017/05/09/apple-acquires-sleep-tracking-company-beddit/"&gt;self analytics&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There is no shame when a &lt;a href="https://www.nytimes.com/2014/06/30/technology/facebook-tinkers-with-users-emotions-in-news-feed-experiment-stirring-outcry.html?_r=0"&gt;web giant plays with the emotions of the user of the platforms&lt;/a&gt;, or &lt;a href="http://www.theaustralian.com.au/business/media/digital/facebook-targets-insecure-young-people-to-sell-ads/news-story/a89949ad016eee7d7a61c3c30c909fa6"&gt;sells them&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;All of that was done by drying out the so called Hackerspace and transmuting it into "Dataspace", where experiment are conducted on people by means of data and algorithms.&lt;/p&gt;
&lt;p&gt;Data on which platforms are built and people are chained to.&lt;/p&gt;
&lt;p&gt;&lt;img alt="vaporwave aesthetic" src="francescomecca.eu/wp-content/uploads/2017/oc_starw.png"&gt;&lt;/p&gt;
&lt;h3&gt;Corporate smooth Jazz&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Floral Shoppe traces the outlines of the mental prison in which we now live, it gives us hope of one day transcending it. It reminds us what real freedom, the freedom of the heart, tastes like.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In the novel &lt;a href="https://en.wikipedia.org/wiki/Neuromancer"&gt;Neuromance&lt;/a&gt; by cyberpunk father William Gibson the Internet is conceived as some sort of "consensual allucination". In the world where that book was written Internet is just a collective delusion.&lt;/p&gt;
&lt;p&gt;Vaporwave forces us to recognize our helplessness with the Dataspace and for me it is a remembrace of a cyber-utopia that never got off the ground.&lt;/p&gt;&lt;/div&gt;</description><category>blog</category><category>cyberpunk</category><category>cyberspace</category><category>music</category><category>PesceWanda</category><category>utopia</category><category>vaporwave</category><guid>francescomecca.eu/blog/2017/5/9/vaporwave/</guid><pubDate>Tue, 09 May 2017 00:00:00 GMT</pubDate></item><item><title>Late Stage Capitalism meets FOSS</title><link>francescomecca.eu/blog/2017/5/7/latestage_handbrake/</link><dc:creator>Francesco Mecca</dc:creator><description>&lt;div&gt;&lt;p&gt;&lt;img alt="brainwashing" src="francescomecca.eu/wp-content/uploads/2017/hn_handbrake_hack.jpg"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://archive.is/XA3rj"&gt;source&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><category>apple</category><category>hacker news</category><category>handbrake</category><category>PesceWanda</category><category>propaganda</category><category>vendor lockin</category><guid>francescomecca.eu/blog/2017/5/7/latestage_handbrake/</guid><pubDate>Sun, 07 May 2017 00:00:00 GMT</pubDate></item><item><title>Some shallow thoughts from my tiny virtual space</title><link>francescomecca.eu/blog/2017/3/20/spazio-digitale-rant-facebook__eng/</link><dc:creator>Francesco Mecca</dc:creator><description>&lt;div&gt;&lt;p&gt;I am not the kind of guy who goes to concerts. Ever.&lt;/p&gt;
&lt;p&gt;I prefer studio recordings because in these, the logical thoughts of the artist emerge as the track comes to life and reaches our ears. I have always been attracted by that, much more than to the sprinkle of emotions that come from venues and theaters.&lt;/p&gt;
&lt;p&gt;In my case the exceptions are the live performances of Dale Crover (from The Melvins) and Jeff Mangum. Both of which were some kind of unshaped epiphanic experiences for me. &lt;/p&gt;
&lt;p&gt;Milan, December 2015, The Melvins were at the end of their most recent European tour when Jeff Pinkus drops the bass guitar, tunes the effects pedal and kicks the bass with his bare foot until the right repetition of sounds comes out of the speakers. Slowly, each one of the members leaves the stage, sounds are still coming from
the earlier kicks to the speakers up to my ears.&lt;/p&gt;
&lt;p&gt;Once home, the performance by The Melvins made me recognize the different stages of communication. &lt;/p&gt;
&lt;p&gt;We can think of three stages. The first one is &lt;strong&gt;trial&lt;/strong&gt;, or
experimentation, field test. This first phase is as obvious as it is accidental.&lt;/p&gt;
&lt;p&gt;The second stage is about &lt;strong&gt;excess&lt;/strong&gt;. Excess is to acknowledge that what was played today will be different to what will be played tomorrow. A draft becomes a singular work that may not come to an end.&lt;/p&gt;
&lt;p&gt;The last one is the most important one if we want to understand the dynamics of the Internet: &lt;strong&gt;dissipation&lt;/strong&gt;. With the act of dissipation, the work of the artist that reached its own way on a tiny and crucial fraction of time, that is the moment, folds on itself, and it is forever lost by an act of absence, the absence of objective memory.&lt;/p&gt;
&lt;h3&gt;Internet dynamics&lt;/h3&gt;
&lt;p&gt;On the internet &lt;strong&gt;hounding&lt;/strong&gt; supersedes &lt;em&gt;dissipation&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Hounding is the reason why thousands of men from different backgrounds congregate in small Facebook groups and share photos of their friends, wives and relevant others.&lt;/p&gt;
&lt;p&gt;On the original Italian &lt;a href="http://francescomecca.eu/pescewanda/2017/03/07/spazio-digitale-rant-facebook/"&gt;blog post&lt;/a&gt; I reported some Italian references on this phenomenon that dont have much cultural significance for the English readers. Therefore,
I want to explain the phenomenon in other words. &lt;/p&gt;
&lt;p&gt;The discussion about these Facebook groups in Italy consist of an online phenomenon regarding group of males playing what they call the game of "What would you do"
with sexually or less explicit photos of friends and wives.&lt;/p&gt;
&lt;p&gt;The game is as far as ever from an online &lt;a href="https://en.wikipedia.org/wiki/Role-playing_game"&gt;rpg&lt;/a&gt; or creative. It degrades every time in vulgar and extremist comments about the body of the girls depicted.&lt;/p&gt;
&lt;p&gt;I do believe that one of the many reasons to explain the inception of these online groups is the impossibility to overcome the absence of dissipation in online
communication.&lt;/p&gt;
&lt;p&gt;Machines do not remember but they never make us forget, they cross our space online with a continuous stream of photos and other people's moments.
Algorithms do not follow our placid flow of continuous time online and they snap it in collages of instants.&lt;/p&gt;
&lt;h3&gt;Recollection&lt;/h3&gt;
&lt;p&gt;In my first online experience, the interactions I had did not have the quality of recollection.
I divided my time between irc and mailing lists. I felt the obligation to archive every tiny succession of words that gave some light to me.&lt;/p&gt;
&lt;p&gt;(I still do).&lt;/p&gt;
&lt;p&gt;Then web caches arrived, the &lt;a href="francescomecca.eu/blog/2017/3/20/spazio-digitale-rant-facebook__eng/archive.org"&gt;Wayback Machine&lt;/a&gt;, Reddit, social networks. Nowdata can hardly ever disappear.&lt;/p&gt;
&lt;p&gt;It seems to me that it is just a worthy form of tenacity, not remembrance in any form.&lt;/p&gt;
&lt;p&gt;For the joy of archivists and the ones with a wistful gaze. And still unpleasant for someone.&lt;/p&gt;
&lt;p&gt;(This translation is for Madeline, thank you for still taking the time to read my blog)&lt;/p&gt;&lt;/div&gt;</description><category>community</category><category>Facebook</category><category>feudalesimo</category><category>feudalism</category><category>PesceWanda</category><category>Rivoluzione Digitale</category><guid>francescomecca.eu/blog/2017/3/20/spazio-digitale-rant-facebook__eng/</guid><pubDate>Mon, 20 Mar 2017 00:00:00 GMT</pubDate></item><item><title>Breve riflessione dal mio piccolo mondo virtuale</title><link>francescomecca.eu/blog/2017/3/7/spazio-digitale-rant-facebook/</link><dc:creator>Francesco Mecca</dc:creator><description>&lt;div&gt;&lt;p&gt;Non sono una persona che va ai concerti. &lt;/p&gt;
&lt;p&gt;La registrazione in studio esplicita i processi logici che l'artista segue per arrivare al processo di consegna e questo mi ha sempre affascinato, in maniera assai maggiore della carica emotiva sprigionata da un concerto di notte.&lt;/p&gt;
&lt;p&gt;Ma ci sono due artisti, Dale Crover dei Melvins e Jeff Mangum le cui performance live sono state per me, come spettatore, in qualche modo epifaniche.&lt;/p&gt;
&lt;p&gt;Milano, dicembre del 2015, i Melvins stanno concludendo il loro più recente tour in Europa quando Jeff Pinkus lascia cadere il basso sul pavimento, regola gli effetti sulla pedaliera e lo prende a calci finché non produce la giusta ripetizione di suoni. Lentamente ciascun musicista si allontana dal palco, il basso insistente, ancora a terra.&lt;/p&gt;
&lt;p&gt;Quell'esecuzione mi fece riflettere sui processi di produzione che dominano la nostra comunicazione.
Possiamo immaginarci delle fasi. La prima é quella di &lt;strong&gt;sperimentazione&lt;/strong&gt; che é tanto più ovvia quanto immediata e involontaria.&lt;/p&gt;
&lt;p&gt;La seconda é quella del &lt;strong&gt;superamento&lt;/strong&gt;. Superamento é la consapevolezza che il brano composto oggi verrà suonato diversamente domani, é la ragion d'essere delle bozze, anche quando infinite.&lt;/p&gt;
&lt;p&gt;La terza e quella più importante per comprendere le dinamiche di rete é la &lt;strong&gt;dissipazione&lt;/strong&gt;.
Attraverso la dissipazione l'opera, che fissata nel momento aveva acquisito una propria dimensione di senso, é costretta a ripiegarsi su se stessa, vana si perde a causa dell'assenza di memoria.&lt;/p&gt;
&lt;h3&gt;Le dinamiche della Rete&lt;/h3&gt;
&lt;p&gt;In rete l' &lt;strong&gt;accanimento&lt;/strong&gt; si sostituisce alla &lt;em&gt;dissipazione&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;L' accanimento é il motivo per cui qualche migliaio di uomini di qualsiasi fattura sociale si riuniscono in &lt;a href="http://archive.is/g6wDr#selection-989.483-989.484"&gt;gruppi&lt;/a&gt; e condividono foto delle loro mogli, fidanzate e qualche amica. Non c'é nessuno scandalo nella foto in sé, sono scatti quotidiani spesso "rubati" dagli stessi profili delle donne riprese.&lt;/p&gt;
&lt;p&gt;Ne ha parlato &lt;a href="http://espresso.repubblica.it/inchieste/2017/01/17/news/stupro-su-facebook-ecco-cosa-si-dicono-gli-uomini-che-umiliano-le-donne-1.293546"&gt;Repubblica&lt;/a&gt;, se ne é parlato su &lt;a href="https://www.reddit.com/r/italy/comments/5nqtgt/una_ragazza_su_facebook_ha_denunciato_lesistenza/"&gt;reddit&lt;/a&gt;, perfino &lt;a href="http://i.imgur.com/Of41aQ0.jpg"&gt;Mentana&lt;/a&gt; nella sua ridicola posizione da cavaliere bianco di Facebook ha urlato contro questo fenomeno.&lt;/p&gt;
&lt;p&gt;Fenomeno che dal mio punto di vista nasce da una difficoltà di alcuni abitanti della rete ad affrontare l'assenza di dissipazione nella comunicazione online.&lt;/p&gt;
&lt;p&gt;Le macchine non ricordano eppure non smettono di ricordarci, anzi invadono il nostro spazio in rete con un continuo susseguirsi di foto e momenti di vita delle altre persone.&lt;/p&gt;
&lt;p&gt;Gli algoritmi non seguono il pacato moto del nostro tempo online e anzi lo spezzano, lo frammentano in attimi che hanno il ritmo di un giro della rotella del mouse, lo scorrere di un pollice.&lt;/p&gt;
&lt;h3&gt;Memoria&lt;/h3&gt;
&lt;p&gt;Nei miei primi anni le mie fugaci interazioni virtuali non avevano la qualità della memoria.&lt;/p&gt;
&lt;p&gt;Bulimico degli ascii, passavo da lunghe e sostenute conversazioni su irc al lurking di qualche mailing list, saltuariamente 4chan. Mi sentivo (e mi sento tutt'ora) obbligato ad archiviare qualsiasi riga che suscitasse un minimo di interesse o potesse avere qualche valore futuro.&lt;/p&gt;
&lt;p&gt;Poi sono arrivate le cache, &lt;a href="francescomecca.eu/blog/2017/3/7/spazio-digitale-rant-facebook/archive.org"&gt;Wayback Machine&lt;/a&gt;, Reddit, e sembra che i contenuti non scompaiano più.&lt;/p&gt;
&lt;p&gt;Eppure mi ci é voluto un po' per capire che questa non é memoria, solo una forma nobile di accanimento.&lt;/p&gt;
&lt;p&gt;Piace ai nostalgici, agli archivisti. &lt;/p&gt;
&lt;p&gt;Spaventa a chi di Internet non vuole farsene una ragione.&lt;/p&gt;&lt;/div&gt;</description><category>community</category><category>Facebook</category><category>feudalesimo</category><category>PesceWanda</category><category>Rivoluzione Digitale</category><guid>francescomecca.eu/blog/2017/3/7/spazio-digitale-rant-facebook/</guid><pubDate>Tue, 07 Mar 2017 00:00:00 GMT</pubDate></item><item><title>Capire il Machine Learning (parte 3)</title><link>francescomecca.eu/blog/2016/11/15/machine-learning-parte3/</link><dc:creator>Francesco Mecca</dc:creator><description>&lt;div&gt;&lt;h3&gt;Riconoscimento delle immagini&lt;/h3&gt;
&lt;p&gt;Il machine learning viene utilizzato anche per il riconoscimento delle immagini.
La tipologia di rete neurale utilizzata per questa applicazione è chiamata rete neural a convoluzione ( &lt;strong&gt;convolutional neural networks&lt;/strong&gt;), abbreviata CNN.&lt;/p&gt;
&lt;p&gt;Innanzitutto consideriamo che ogni immagine può essere codificata come una matrice di valori&lt;/p&gt;
&lt;p&gt;&lt;img alt="pixel" src="francescomecca.eu/wp-content/uploads/2016/8.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Vediamo ora quali sono le operazioni compiute da una &lt;strong&gt;CNN&lt;/strong&gt; per riconoscere delle immagini.&lt;/p&gt;
&lt;h5&gt;Convoluzione&lt;/h5&gt;
&lt;p&gt;Durante la fase di apprendimento, la rete neurale analizza moltissime immagini (categorizzate) utilizzando dei "filtri", ovvero delle funzioni che mescolate all'input originale permettono di evidenziare dei pattern nell'immagine.
Questi pattern corrispondono alle caratteristiche proprie di un oggetto (quali possono essere ad esempio per un uccello il becco, le piume, le ali) e nel caso queste sono presenti, possiamo riconoscere l'immagine.&lt;/p&gt;
&lt;p&gt;In questo esempio l'immagine di Wally é mescolata (l'operazione si chiama &lt;strong&gt;convoluzione&lt;/strong&gt;) con un filtro "a cerchio" che risponde molto bene a caratteristiche come quella di possedere degli occhi.&lt;/p&gt;
&lt;p&gt;&lt;img alt="waldoblue" src="francescomecca.eu/wp-content/uploads/2016/bluefilter.png"&gt;&lt;/p&gt;
&lt;p&gt;La &lt;strong&gt;convoluzione&lt;/strong&gt; é un'operazione che ha la proprietà di essere indipendente dalla posizione. Non importa la posizione degli occhi, quando applichiamo la &lt;strong&gt;convoluzione&lt;/strong&gt; su un'immagine con un filtro "a cerchio" notiamo che gli occhi sono presenti.&lt;/p&gt;
&lt;h5&gt;Subsampling&lt;/h5&gt;
&lt;p&gt;Ogni segnale contiene del "rumore", ovvero degli elementi che la allontanano dal comportamento ideale. &lt;/p&gt;
&lt;p&gt;&lt;img alt="ideal" src="francescomecca.eu/wp-content/uploads/2016/ideal.jpg"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="real" src="francescomecca.eu/wp-content/uploads/2016/real.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Attraverso il subsampling possiamo ridurre il rumore e rendere il nostro algoritmo meno suscettibile a queste piccole variazioni; benché l'immagine abbia una risoluzione minore, i pattern rimangono.&lt;/p&gt;
&lt;p&gt;&lt;img alt="waldosub" src="francescomecca.eu/wp-content/uploads/2016/sub.png"&gt;&lt;/p&gt;
&lt;h5&gt;Connessione completa&lt;/h5&gt;
&lt;p&gt;Alla fine dell'analisi tutte le caratteristiche estrapolate vengono considerate nell'insieme e in questo modo possiamo capire a quale categoria appartiene l'immagine.&lt;/p&gt;
&lt;p&gt;Questo procedimento a livello algoritmo si esplicita con una connessione completa fra tutti i nodi della rete neurale che possono poi restituire l'output (probabilità che l'immagine appartenga ad una determinata categoria).&lt;/p&gt;
&lt;h5&gt;Fase di rinforzo&lt;/h5&gt;
&lt;p&gt;Durante il training é presente un'ultima fase (o strato), chiamato più propriamente &lt;strong&gt;loss layer&lt;/strong&gt;. Questo strato provvede a dare un &lt;strong&gt;feedback&lt;/strong&gt; alla rete neurale analizzando l'output in relazione ai dati di partenza (ovvero le immagini già categorizzate).&lt;/p&gt;&lt;/div&gt;</description><category>AI</category><category>algoritmi genetici</category><category>Genetic algorithm</category><category>Neural networks</category><category>PesceWanda</category><category>programming</category><category>reti neurali</category><guid>francescomecca.eu/blog/2016/11/15/machine-learning-parte3/</guid><pubDate>Tue, 15 Nov 2016 00:00:00 GMT</pubDate></item><item><title>Capire il Machine Learning (parte 2)</title><link>francescomecca.eu/blog/2016/11/11/machine-learning-parte2/</link><dc:creator>Francesco Mecca</dc:creator><description>&lt;div&gt;&lt;p&gt;Nel precedente &lt;a href="francescomecca.eu/pescewanda/2016/11/10/machine-learning-intro/"&gt;post&lt;/a&gt; abbiamo preso in considerazione una rete neurale molto basica.
Proviamo ora ad approfondire il concetto aggiungendo una proprietà fondamentale, la memoria.&lt;/p&gt;
&lt;h3&gt;Memoria e Stati&lt;/h3&gt;
&lt;p&gt;La rete neurale che abbiamo modellato non ha alcun tipo di memoria. con gli stessi dati di input, l'output è (quasi certamente) lo stesso.
Possiamo ampliare il nostro modello introducendo il concetto di &lt;em&gt;stato&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Poniamo il problema della vendita delle auto in questo modo:
immaginiamo di avere un algoritmo di machine learning che valuti le auto e faccia delle offerte di vendita che conseguentemente vengono valutate da delle persone e accettate oppure rifiutate.
Ogni volta che una proposta viene accettata la teniamo in memoria e nell'aggiustare i pesi per la seguente offerta, teniamo in considerazione la validità dei pesi usati in precedenza.
In altre parloe, in ogni operazione di valutazione dell'auto salviamo lo stato dell'offerta precedente (rifiutata o accettata) e la consideriamo quando vogliamo proporre l'offerta successiva.
Abbiamo in questo modo una &lt;em&gt;recurrent neural network&lt;/em&gt; (RNN) dove ogni stato precedente viene utilizzato per modificare l'output dell'algoritmo.&lt;/p&gt;
&lt;h5&gt;Generazione di testo attraverso le RNN&lt;/h5&gt;
&lt;p&gt;Immaginiamo di voler creare un algoritmo che utilizzando una RNN possa generare del testo o prevedere quale sarà il prossimo carattere inserito (come nel caso del T9).&lt;/p&gt;
&lt;p&gt;Inizialmente dobbiamo permettere alla RNN di analizzare almeno qualche sample del nostro testo.
La RNN analizza carattere dopo carattere e costruisce un grande grafo dove collega ogni carattere al suo successivo.
Inizialmente l'output della nostra RNN non ha alcun valore:
in questo esempio, abbiamo l'output di una RNN allenata attraverso Guerra e Pace:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;tyntd-iafhatawiaoihrdemot lytdws e ,tfti, astai f ogoh eoase rrranbyne 'nhthnee e
plia tklrgd t o idoe ns,smtt h ne etie h,hregtrs nigtike,aoaenns lngty
&lt;/pre&gt;
&lt;p&gt;L'output prodotto dalla RNN, benchè non abbia nessun valore per un umano, viene analizzato dalla RNN per arricchire il grafo costituito inizialmente dai caratteri (e le loro relazioni) di Guerra e Pace.
Questo procedimento continua all'infinito.
Ogni volta che la RNN produce dell'output lo salva e lo riutilizza come input in maniera ricorsiva per generare nuovo output.&lt;/p&gt;
&lt;p&gt;Dopo 300 iterazioni abbiamo un output di questo tipo:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;"Tmont thithey" fomesscerliund
Keushey. Thom here
sheulke, anmerenith ol sivh I lalterthend Bleipile shuwy fil on aseterlome
coaniogennc Phe lism thond hon at. MeiDimorotion in ther thize."
&lt;/pre&gt;
&lt;p&gt;Dopo quasi mille:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;Aftair fall unsuch that the hall for Prince Velzonski's that me of
her hearly, and behs to so arwage fiving were to it beloge, pavu say falling misfort
how, and Gogition is so overelical and ofter.
&lt;/pre&gt;
&lt;p&gt;Duemila:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;"Why do what that day," replied Natasha, and wishing to himself the fact the
princess, Princess Mary was easier, fed in had oftened him.
Pierre aking his soul came to the packs and drove up his father-in-law women.
&lt;/pre&gt;
&lt;p&gt;Possiamo notare come l'output migliori visibilmente.&lt;/p&gt;
&lt;p&gt;Nel prossimo post tratterò una variante di rete neurale utilizzata per classificare e riconoscere immagini.&lt;/p&gt;&lt;/div&gt;</description><category>AI</category><category>algoritmi genetici</category><category>Genetic algorithm</category><category>Neural networks</category><category>PesceWanda</category><category>programming</category><category>reti neurali</category><guid>francescomecca.eu/blog/2016/11/11/machine-learning-parte2/</guid><pubDate>Fri, 11 Nov 2016 00:00:00 GMT</pubDate></item></channel></rss>