{"id":232,"date":"2019-03-13T14:02:01","date_gmt":"2019-03-13T13:02:01","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/iot-development-the-snap4city-way\/"},"modified":"2020-02-14T10:20:18","modified_gmt":"2020-02-14T09:20:18","slug":"iot-development-the-snap4city-way","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/","title":{"rendered":"IOT Development: the Snap4City way"},"content":{"rendered":"<p>During the last decade, application development has extended its borders far and beyond the classical <span id=\"urn:batch-analysis-2ae4996f-ff4c-4615-905c-4513128d806f\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/web_application\">web application<\/span> paradigm. In particular, two main tendencies arose, namely <span id=\"urn:batch-analysis-50a64e32-adc5-496d-8c03-f7a356ebdbb4\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/cloud_computing\">Cloud Computing<\/span> and the <span id=\"urn:batch-analysis-e25a974d-5ef1-4829-92b9-040b22c905b5\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/internet_of_things\">Internet of Things<\/span>.<\/p>\n<p>Delivering applications on cloud frameworks is now a simple and standard task for <span id=\"urn:batch-analysis-4d0b8e89-58fe-4f2c-a595-6853cf794f71\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/programmer\">programmers<\/span>. Production environments or even retail customers or software vendors require the capability to do it easily and efficiently. The same is becoming true for IOT applications, which pose a different level of <span id=\"urn:batch-analysis-0f03399f-2e49-4745-9bfe-fe8104cdc791\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/complexity\">complexity<\/span> and new challenges to developers.<\/p>\n<p>Indeed, by its very nature, IOT has to do with different hardware devices and communication protocols and it displays a manifold of ways to collect <span id=\"urn:batch-analysis-6e219cd4-2e1a-457b-8032-9f32f08bd48f\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/data\">data<\/span>, connect to a device or even manage devices to prepare them for a connection. While in the <span id=\"urn:batch-analysis-91defd97-d469-413c-8e08-446464b4e658\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/cloud_computing\">Cloud Computing<\/span> paradigm big vendors provide APIs and frameworks which have become de facto standards, in the IOT realm there is a more fragmented picture concerning platforms, devices and standards.<\/p>\n<p>In particular, IOT development aimed at smart city applications is becoming an important issue. Providing a unified, integrated and complete framework is where&nbsp;&nbsp;<a href=\"https:\/\/www.snap4city.org\/\">Snap4City<\/a> comes into play. It delivers a fully <span id=\"urn:batch-analysis-064ca37b-a15a-4ace-ad18-9e57b6d32e50\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/open_source\">open source<\/span>, data-driven, scalable platform based on cloud, which also enables its users to analyse and aggregate huge amounts of <span id=\"urn:batch-analysis-4ec444c4-7fa7-46c4-b599-a69c906571a7\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/data\">data<\/span> by means of big data and machine learning techniques, and to offer services such as anomaly detection, early warning and environmental risk assessment.<\/p>\n<p>Snap4City applications should be viewed as data-driven applications, which may be customised tailoring on specific needs and shared among the <span id=\"urn:batch-analysis-7052aab3-adc3-4706-bb8b-cbaea363e892\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/community\">community<\/span>. The basic tool to use and manage IOT applications on Snap4City is the dashboard, which is in a sense the governance layer of smart city application within Snap4City itself:<br \/>\n&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3355\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/caressa301.png\" alt=\"\" width=\"500\" height=\"183\"><\/p>\n<p><em>Img 1: Interaction between Snap4City Dashboard, IOT application and the <span id=\"urn:batch-analysis-9e0561a0-2dca-4030-98da-adab8dca2b14\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/smart_city\">Smart City<\/span>.<\/em><\/p>\n<p>The dashboard provides both the front-end of the applications and the development environment in which to create them. Snap4City allows us to set up an application by combining micro-services according to a given logic flow, in a stateful manner, thanks to a GUI editor to describe graphically the logic flow and all the single services it ought to connect.<\/p>\n<p>The <span id=\"urn:batch-analysis-53cf0da1-5130-4fc4-8e7c-ca09cd6ec733\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/programmer\">programmer<\/span> can choose from dozens of micro-services which perform a single micro-task, such as, for example:<\/p>\n<ul>\n<li>Device search services (geolocalisation, getting info, public transport routes search, etc.)<\/li>\n<li>Snap4City job scheduling management (check existing jobs, trigger a <span id=\"urn:batch-analysis-88486ccb-ff3b-4731-8397-93e8ab1a6c17\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/job\">job<\/span>, pause a <span id=\"urn:batch-analysis-c3d7a04d-627a-4528-8c62-bba6f05662b5\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/job\">job<\/span>, etc.)<\/li>\n<li>Data analytics (descriptive <span id=\"urn:batch-analysis-49578b59-dc70-4fb1-812d-7cf272fd970a\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/statistics\">statistics<\/span>, <span id=\"urn:batch-analysis-ba2a092f-e7a8-459c-9628-05f8c6e5594d\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/machine_learning\">machine learning<\/span> predictions, time series predictions, etc.)<\/li>\n<li>Service search (by GPS position, by keywords and tags criteria, by bus routes, etc.)<\/li>\n<li>Application data management<\/li>\n<li>Dashboard customisation (adding widgets, buttons, contents and more on a dashboard)<\/li>\n<li>Sigfox integration (recall that Sigfox is a low cost connectivity solution for IOT https:\/\/www.sigfox.com\/en).<\/li>\n<li>Device handling (registration, etc.).<\/li>\n<\/ul>\n<p>&nbsp;<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3356\" title=\"Example of a micro-service description (developer view)\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/caressa302.png\" alt=\"\" width=\"700\" height=\"312\"><\/p>\n<p><em>Img 2: Example of a micro-service description (developer view)<\/em><\/p>\n<p>To actually build the application, Snap4City provides a graphical tool resembling BPMs, to assemble the invocation of micro-services into a control flow, and to insert a code snippet to perform some simple specific tasks which do not require a service but which alter the state of the application (for example variables\u2019 values).<br \/>\n&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3357\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/caressa303.png\" alt=\"\" width=\"700\" height=\"352\"><\/p>\n<p><em>Img 3: GUI wizard to create and manage micro-services control flow.<\/em><\/p>\n<p>More precisely, Snap4City provides a NodeRED-like tool augmented by the large set of micro-services discussed above. In this way, IOT applications can be fully integrated behind a City Dashboard for decision makers and for city users as well. However, it is worth stressing that an IOT application may or may not have a dashboard at all, or they also have many dashboards. Indeed, a dashboard itself is represented as a block in the oriented graph representing the control flow of the application.<\/p>\n<p>It is worth showing how easy to use the Snap4City wizard is to build applications, with a simple toy example. Let us suppose we have two devices, providing temperature values in Celsius and in Fahrenheit, the first one storing the value in a JSON file, the second one just emitting a single value, the first one with frequency of five seconds, the second one with frequency of seven seconds.<br \/>\nThus we have two devices with different values, different formats, communication protocols and different frequencies. We want to integrate their <span id=\"urn:batch-analysis-08224c51-252a-405a-b445-0d8bcd84f2d7\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/data\">data<\/span> inside a unique application to collect them and aggregate them into a single time series.<br \/>\n&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3358\" title=\"Two simple different flows to be integrated, as they appear in the Wizard.\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/caressa305.png\" alt=\"\" width=\"700\" height=\"312\"><\/p>\n<p><em>Img 4: Two simple different flows to be integrated, as they appear in the Wizard.<\/em><\/p>\n<p>Next we can introduce two blocks, for example one Orion Context Broker block and one MQTT input block and configure them, by adding a \u201ctemperature\u201d variable in the Orion block and linking it in the MQTT block, which also displays the name of the value produced by the second device:<br \/>\n&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3359\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/caressa306.png\" alt=\"\" width=\"700\" height=\"312\"><br \/>\n&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3360\" title=\"Blocks configuration 2\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/caressa307.png\" alt=\"\" width=\"700\" height=\"312\"><\/p>\n<p><em>Img 5 and 6: Blocks configuration.<\/em><\/p>\n<p>To read the temperature from the <span id=\"urn:batch-analysis-8de1552f-d096-4b08-91ad-de73c7b1ba47\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/json\">JSON<\/span>, via the Orion broker, it is needed to define a simple function block containing the code needed to get the value from the <span id=\"urn:batch-analysis-e19106d9-2388-47e9-9ceb-ce7c05b9552e\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/json\">JSON<\/span> and return it into a message. Notice that the snippet is written in <span id=\"urn:batch-analysis-223fe17e-0544-40eb-8cb5-041aab969765\" class=\"textannotation disambiguated wl-no-link wl-creative work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/javascript\">Javascript<\/span>:<br \/>\n&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3361\" title=\"Code snippet (into a function) to get a value from a JSON.\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/caressa308.png\" alt=\"\" width=\"700\" height=\"312\"><\/p>\n<p><em>Img 7: Code snippet (into a function) to get a value from a <span id=\"urn:batch-analysis-80de3e86-e269-4db2-b3e0-8dbb87d2b938\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/json\">JSON<\/span>.<\/em><\/p>\n<p>Also needed is a function to convert Fahrenheit to Celsius, and we put it into another function block:<br \/>\n&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3362\" title=\"Code snippet (into a function) to convert from Fahrenheit to Celsius.\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/caressa309.png\" alt=\"\" width=\"700\" height=\"312\"><\/p>\n<p><em>Img 8: Code snippet (into a function) to convert from Fahrenheit to Celsius.<\/em><\/p>\n<p>At this point, we have all the element displayed in the wizard:<br \/>\n&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3363\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/caressa310.png\" alt=\"Flow control before aggregation and connection.\" width=\"700\" height=\"312\"><\/p>\n<p><em>Img 9: Flow control before aggregation and connection.<\/em><\/p>\n<p>To properly connect them, one can use an aggregator node. This one has to be installed by managing the user palette, which lets the developer search all along the NodeRED repository and filter according to keywords:<br \/>\n&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3364\" title=\"Adding NodeRED nodes to the user palette.\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/caressa311.png\" alt=\"\" width=\"700\" height=\"312\"><\/p>\n<p><em>Img 10: Adding NodeRED nodes to the user palette.<\/em><\/p>\n<p>Deploying and testing the application is simple as well as building it, as we have done in this toy example.<\/p>\n<p>A final word: each application is executed through the Computation Management Service tools that have to verify the actual possibility to deploy and to execute each application on allocating and connecting the corresponding microservices (according to the compatible hardware and possible allocations). This allows for a kind of hybrid solution exploiting Edge\/Fog Computing, cloud facilities, parallel and distributed batch processing, and also taking advantage of contextual information, and reducing latency in developed services.<\/p>\n<h2><strong>Snap4City Hack<\/strong><\/h2>\n<p>Snap4City platforms and solutions are available at <a href=\"https:\/\/www.snap4city.org\">Snap4city.org<\/a> website, where you can register and start exploring its <span id=\"urn:batch-analysis-eb5ea824-4f78-425b-8a8a-86f5b01cee1e\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/feature_machine_learning\">features<\/span>. But if you want <strong>to really challenge your skills and propose your innovative solutions for connected cities, you can join the upcoming Snap4City Hack, the big online hackathon on the topics of <span id=\"urn:batch-analysis-6b184126-09b6-4151-b1cd-d074d960c7d2\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/smart_city\">Smart City<\/span> and IoT.<\/strong><\/p>\n<blockquote><p><q>Snap4City launched a big online Hackathon on Ecological Watch, Social and Service Evolution, Stimulating Business Growth, City Aware.<\/q><\/p><\/blockquote>\n<p>Using Snap4City tools to manage IoT, Big Data and analytics, the hackathon challenges will cover different themes &#8211;&nbsp;<strong>Ecological Watch, Social and Service Evolution, Stimulating Business Growth, City Aware<\/strong> &#8211; and real <span id=\"urn:batch-analysis-b5495232-2692-4098-81a2-2e87fee6c708\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/data\">data<\/span> from cities such as <strong>Helsinki or Antwerp<\/strong>.<\/p>\n<p>Further information on the Hackathon is available on the on <a href=\"https:\/\/www.snap4city.org\/hackathon\">Snap4City.org\/hackathon<\/a> website.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>During the last decade, application development has extended its borders far and beyond the classical web application paradigm. In particular, two main tendencies arose, namely Cloud Computing and the Internet of Things. Delivering applications on cloud frameworks is now a simple and standard task for programmers. Production environments or even retail customers or software vendors&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/\">Read more<\/a><\/p>\n","protected":false},"author":5,"featured_media":233,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[16],"tags":[3357],"collections":[],"class_list":{"0":"post-232","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-big-data","8":"tag-iot","9":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>IOT Development: the Snap4City way - Codemotion Magazine<\/title>\n<meta name=\"description\" content=\"Codemotion and Facebook organized the Tech Leadership Training boot camp, heres a personal reportage from one of our attendees.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"IOT Development: the Snap4City way\" \/>\n<meta property=\"og:description\" content=\"Codemotion and Facebook organized the Tech Leadership Training boot camp, heres a personal reportage from one of our attendees.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2019-03-13T13:02:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-02-14T09:20:18+00:00\" \/>\n<meta name=\"author\" content=\"Paolo Caressa\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview.png\" \/>\n<meta name=\"twitter:creator\" content=\"@www_caressa_it\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Paolo Caressa\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/\"},\"author\":{\"name\":\"Paolo Caressa\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/11b502309bc50a6923aafd79c6259f85\"},\"headline\":\"IOT Development: the Snap4City way\",\"datePublished\":\"2019-03-13T13:02:01+00:00\",\"dateModified\":\"2020-02-14T09:20:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/\"},\"wordCount\":1190,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview.png\",\"keywords\":[\"IoT\"],\"articleSection\":[\"Big Data\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/\",\"name\":\"IOT Development: the Snap4City way - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview.png\",\"datePublished\":\"2019-03-13T13:02:01+00:00\",\"dateModified\":\"2020-02-14T09:20:18+00:00\",\"description\":\"Codemotion and Facebook organized the Tech Leadership Training boot camp, heres a personal reportage from one of our attendees.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview.png\",\"width\":838,\"height\":539},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"AI\/ML\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Big Data\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"IOT Development: the Snap4City way\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/11b502309bc50a6923aafd79c6259f85\",\"name\":\"Paolo Caressa\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b55795d60b54b1cc8b605f9967dbbe68b3fcf826249490cecafd797ee4f18d4c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b55795d60b54b1cc8b605f9967dbbe68b3fcf826249490cecafd797ee4f18d4c?s=96&d=mm&r=g\",\"caption\":\"Paolo Caressa\"},\"description\":\"I spent the first part of my life enjoying studies up to a math BS+MS and PhD. Next I worked both as math researcher (differential geometry) and as IT consultant (R&amp;D, feasibility studies, business analysis). Eventually I left academia and worked some years in finance (maths &amp; implementation of derivative pricings and risk management models), then again in IT (as technical consultant and writer, project manager, program manager). In the meanwhile I write books and articles on maths and computer science and I give lectures on workshops and conferences (applied maths, AI, etc.). I also serve as adjunct professor in the Engineering Department of \\\"Sapienza\\\" University of Rome (calculus and CS classes).\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/paolocaressa\/\",\"https:\/\/x.com\/www_caressa_it\"],\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/paolo-caressa\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"IOT Development: the Snap4City way - Codemotion Magazine","description":"Codemotion and Facebook organized the Tech Leadership Training boot camp, heres a personal reportage from one of our attendees.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/","og_locale":"en_US","og_type":"article","og_title":"IOT Development: the Snap4City way","og_description":"Codemotion and Facebook organized the Tech Leadership Training boot camp, heres a personal reportage from one of our attendees.","og_url":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2019-03-13T13:02:01+00:00","article_modified_time":"2020-02-14T09:20:18+00:00","author":"Paolo Caressa","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview.png","twitter_creator":"@www_caressa_it","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Paolo Caressa","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/"},"author":{"name":"Paolo Caressa","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/11b502309bc50a6923aafd79c6259f85"},"headline":"IOT Development: the Snap4City way","datePublished":"2019-03-13T13:02:01+00:00","dateModified":"2020-02-14T09:20:18+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/"},"wordCount":1190,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview.png","keywords":["IoT"],"articleSection":["Big Data"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/","url":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/","name":"IOT Development: the Snap4City way - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview.png","datePublished":"2019-03-13T13:02:01+00:00","dateModified":"2020-02-14T09:20:18+00:00","description":"Codemotion and Facebook organized the Tech Leadership Training boot camp, heres a personal reportage from one of our attendees.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview.png","width":838,"height":539},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/iot-development-the-snap4city-way\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"AI\/ML","item":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/"},{"@type":"ListItem","position":3,"name":"Big Data","item":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/big-data\/"},{"@type":"ListItem","position":4,"name":"IOT Development: the Snap4City way"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/11b502309bc50a6923aafd79c6259f85","name":"Paolo Caressa","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/b55795d60b54b1cc8b605f9967dbbe68b3fcf826249490cecafd797ee4f18d4c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b55795d60b54b1cc8b605f9967dbbe68b3fcf826249490cecafd797ee4f18d4c?s=96&d=mm&r=g","caption":"Paolo Caressa"},"description":"I spent the first part of my life enjoying studies up to a math BS+MS and PhD. Next I worked both as math researcher (differential geometry) and as IT consultant (R&amp;D, feasibility studies, business analysis). Eventually I left academia and worked some years in finance (maths &amp; implementation of derivative pricings and risk management models), then again in IT (as technical consultant and writer, project manager, program manager). In the meanwhile I write books and articles on maths and computer science and I give lectures on workshops and conferences (applied maths, AI, etc.). I also serve as adjunct professor in the Engineering Department of \"Sapienza\" University of Rome (calculus and CS classes).","sameAs":["https:\/\/www.linkedin.com\/in\/paolocaressa\/","https:\/\/x.com\/www_caressa_it"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/paolo-caressa\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview-600x400.png","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview-600x539.png","author_info":{"display_name":"Paolo Caressa","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/paolo-caressa\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview.png",838,539,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview-150x150.png",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview-300x193.png",300,193,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview-768x494.png",768,494,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview.png",838,539,false],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview.png",838,539,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview.png",838,539,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview.png",100,64,false],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview-180x128.png",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview-838x504.png",838,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview-400x225.png",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview-600x400.png",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/preview-600x539.png",600,539,true]},"uagb_author_info":{"display_name":"Paolo Caressa","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/paolo-caressa\/"},"uagb_comment_info":0,"uagb_excerpt":"During the last decade, application development has extended its borders far and beyond the classical web application paradigm. In particular, two main tendencies arose, namely Cloud Computing and the Internet of Things. Delivering applications on cloud frameworks is now a simple and standard task for programmers. Production environments or even retail customers or software vendors&#8230;&hellip;","lang":"en","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/232","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=232"}],"version-history":[{"count":3,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/232\/revisions"}],"predecessor-version":[{"id":3124,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/232\/revisions\/3124"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/233"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=232"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=232"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=232"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=232"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}