SophiaConf2010 Présentation des Retours d'expériences de la Conférence du 08 ...TelecomValley
SophiaConf2010 Présentation des Retours d'expériences de la Conférence du 08 Juillet - HTML 5, une plateforme contemporaine pour le Web : Stefano Crosta, Chief Technical Officer de SLICE FACTORY ; Raphaël Troncy, Maître de Conférences à Eurecom.
This presentation was used in the context of a FI-WARE webminar for introducing Kurento. Kurento is a framework for building multimedia and streaming applications based on predefined blocks. Send and receive median through RTP, WebRTC, HTTP and RTSP. Use processing for making face detection, plate recognition or object tracking. Use augmented reality, group communications or media mixing and blending among others. During the webminar, we used Kurento APIs for showing how to create media applications for videoconferencing or video streaming in a simple and seamless manner. We also demonstrated how these applications can be enriched with Kurento's advanced processing capabilities.
News web app which gives updated news. The news is been fetched from the different news website. This project is made by using Flask framework and python.
The Source code is available at: https://github.com/prateek-code-22/News-App
If you find it useful add STAR to it.
Thanks :)
SophiaConf2010 Présentation des Retours d'expériences de la Conférence du 08 ...TelecomValley
SophiaConf2010 Présentation des Retours d'expériences de la Conférence du 08 Juillet - HTML 5, une plateforme contemporaine pour le Web : Stefano Crosta, Chief Technical Officer de SLICE FACTORY ; Raphaël Troncy, Maître de Conférences à Eurecom.
This presentation was used in the context of a FI-WARE webminar for introducing Kurento. Kurento is a framework for building multimedia and streaming applications based on predefined blocks. Send and receive median through RTP, WebRTC, HTTP and RTSP. Use processing for making face detection, plate recognition or object tracking. Use augmented reality, group communications or media mixing and blending among others. During the webminar, we used Kurento APIs for showing how to create media applications for videoconferencing or video streaming in a simple and seamless manner. We also demonstrated how these applications can be enriched with Kurento's advanced processing capabilities.
News web app which gives updated news. The news is been fetched from the different news website. This project is made by using Flask framework and python.
The Source code is available at: https://github.com/prateek-code-22/News-App
If you find it useful add STAR to it.
Thanks :)
Peer-to-peer networks are right solution for distributing mostly static content to multiple clients while exploiting bandwidth of all clients to share file chunks and available bandwidth.
Torrent is currently most used P2P network protocol, but in this day and age it suffers from lack of official specification and has stigma attached to it. However, if you want to distribute software updates or create multiple disaster recovery sites it makes sense to create private torrent network which will to it's job.
In this presentation I will try to explain what it takes to create your own peer-to-peer cloud based on torrent protocol.
Kurento: a media server architecture and API for WebRTCLuis Lopez
Introducing Kurento for WebRTC Expo 2013 (Paris). Kurento is an Open Source multimedia framework, which provides a Java EE compatible API suitable for adding real-time communication capabilities to any WWW application in a simple and seamless way.
Developing rich multimedia applications with FI-WARE.Luis Lopez
FI-WARE will deliver a novel service infrastructure, building upon elements called Generic Enablers (GEs), which offer reusable and commonly shared functions making it easier to develop Future Internet Applications in multiple sectors. This presentation provides an overview of Kurento: the FI-WARE Generic Enabler that will ease development of advanced multimedia stream processing applications.
Developing rich multimedia applications with Kurento: a tutorial for JavaScri...Luis Lopez
This presentation was carried out at DevCon5'14 (New York) for introducing the Kurento new JavaScript developer APIs. These APIs make possible to create rich video applications supporting WebRTC and HTTP pseudo-streaming (video tag) and leveraging Kurento Media Server capabilities, which include computer vision, augmented reality, group communications and recording.
Developing rich multimedia applications with Kurento: a tutorial for Java Dev...Luis Lopez
This presentation contains a tutorial devoted to showing how Java developers can create rich multimedia applications with Kurento. Java developers will find natural Kurento development model, which is based on standard Java EE technologies and is inspired on the WWW Servlet model.
If you have ever developed a Web application, you may be familiar with this scheme. At the browser, HTML and JavaScript code is in charge of user interaction and generates HTTP requests to the server. This code is usually programmed with the help of APIs such as jQuery, DOM, XHR or others. Upon reception, HTTP requests are processed by some kind of server side technology (e. g.. PHP, Java, Ruby, etc.) using service APIs providing features such as DB access, communications, transactions, XML parsing, and others. As a result, an HTTP response is issued and sent back to the client. Following this scheme, both server and client side APIs are just capabilities simplifying developer work and providing abstractions for programming faster and more efficiently.
Kurento technologies adapt to the Web development model so that, from a programmer perspective, Kurento can be seen just as an additional set of APIs. Developers does not need to learn novel programming schemes and can reuse all their knowledge and previous background on WWW application development. When you need multimedia, just use Kurento APIs. For the rest, use your preferred APIs or reuse previous code. Kurento APIs have been designed for simplicity and Web developers will find them familiar and intuitive. Most of the low level details related to codecs, formats, protocols, profiles and containers are abstracted by the framework. Programmers just concentrate on specifying the sequence of processing steps that they want to execute on the media flows.
Try to imagine the amount of time and effort it would take you to write a bug-free script or application that will accept a URL, port scan it, and for each HTTP service that it finds, it will create a new thread and perform a black box penetration testing while impersonating a Blackberry 9900 smartphone. While you’re thinking, Here’s how you would have done it in Hackersh:
“http://localhost” \
-> url \
-> nmap \
-> browse(ua=”Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; en) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.1.0.346 Mobile Safari/534.11+”) \
-> w3af
Meet Hackersh (“Hacker Shell”) – A new, free and open source cross-platform shell (command interpreter) with built-in security commands and Pythonect-like syntax.
Aside from being interactive, Hackersh is also scriptable with Pythonect. Pythonect is a new, free, and open source general-purpose dataflow programming language based on Python, written in Python. Hackersh is inspired by Unix pipeline, but takes it a step forward by including built-in features like remote invocation and threads. This 120 minute lab session will introduce Hackersh, the automation gap it fills, and its features. Lots of demonstrations and scripts are included to showcase concepts and ideas.
Generating Unified APIs with Protocol Buffers and gRPCC4Media
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/2k1eZ00.
Chris Roche and Christopher Burnett discuss how they extended the Protocol Buffer (PB) IDL to create unified APIs and data models. From validation logic to automatic logging and statistics, PBs allows them to speed up development across Go, Python, and PHP stacks. They also show how they leverage the Envoy proxy to transparently upgrade HTTP/1.1 services to speak gRPC on the wire. Filmed at qconnewyork.com.
Chris Roche is a Core Libraries Engineer at Lyft focused on enriching the tools to create distributed systems. Christopher Burnett is Lead Core Libraries Engineer at Lyft, where he designs software for distributed systems.
Most developers start adopting Docker by integrating it with their development environment. Unfortunately development environments are nuanced. Using Docker to automate and isolate development environments is rewarding, but you'll need to keep a few things in mind when designing that integration.
Peer-to-peer networks are right solution for distributing mostly static content to multiple clients while exploiting bandwidth of all clients to share file chunks and available bandwidth.
Torrent is currently most used P2P network protocol, but in this day and age it suffers from lack of official specification and has stigma attached to it. However, if you want to distribute software updates or create multiple disaster recovery sites it makes sense to create private torrent network which will to it's job.
In this presentation I will try to explain what it takes to create your own peer-to-peer cloud based on torrent protocol.
Kurento: a media server architecture and API for WebRTCLuis Lopez
Introducing Kurento for WebRTC Expo 2013 (Paris). Kurento is an Open Source multimedia framework, which provides a Java EE compatible API suitable for adding real-time communication capabilities to any WWW application in a simple and seamless way.
Developing rich multimedia applications with FI-WARE.Luis Lopez
FI-WARE will deliver a novel service infrastructure, building upon elements called Generic Enablers (GEs), which offer reusable and commonly shared functions making it easier to develop Future Internet Applications in multiple sectors. This presentation provides an overview of Kurento: the FI-WARE Generic Enabler that will ease development of advanced multimedia stream processing applications.
Developing rich multimedia applications with Kurento: a tutorial for JavaScri...Luis Lopez
This presentation was carried out at DevCon5'14 (New York) for introducing the Kurento new JavaScript developer APIs. These APIs make possible to create rich video applications supporting WebRTC and HTTP pseudo-streaming (video tag) and leveraging Kurento Media Server capabilities, which include computer vision, augmented reality, group communications and recording.
Developing rich multimedia applications with Kurento: a tutorial for Java Dev...Luis Lopez
This presentation contains a tutorial devoted to showing how Java developers can create rich multimedia applications with Kurento. Java developers will find natural Kurento development model, which is based on standard Java EE technologies and is inspired on the WWW Servlet model.
If you have ever developed a Web application, you may be familiar with this scheme. At the browser, HTML and JavaScript code is in charge of user interaction and generates HTTP requests to the server. This code is usually programmed with the help of APIs such as jQuery, DOM, XHR or others. Upon reception, HTTP requests are processed by some kind of server side technology (e. g.. PHP, Java, Ruby, etc.) using service APIs providing features such as DB access, communications, transactions, XML parsing, and others. As a result, an HTTP response is issued and sent back to the client. Following this scheme, both server and client side APIs are just capabilities simplifying developer work and providing abstractions for programming faster and more efficiently.
Kurento technologies adapt to the Web development model so that, from a programmer perspective, Kurento can be seen just as an additional set of APIs. Developers does not need to learn novel programming schemes and can reuse all their knowledge and previous background on WWW application development. When you need multimedia, just use Kurento APIs. For the rest, use your preferred APIs or reuse previous code. Kurento APIs have been designed for simplicity and Web developers will find them familiar and intuitive. Most of the low level details related to codecs, formats, protocols, profiles and containers are abstracted by the framework. Programmers just concentrate on specifying the sequence of processing steps that they want to execute on the media flows.
Try to imagine the amount of time and effort it would take you to write a bug-free script or application that will accept a URL, port scan it, and for each HTTP service that it finds, it will create a new thread and perform a black box penetration testing while impersonating a Blackberry 9900 smartphone. While you’re thinking, Here’s how you would have done it in Hackersh:
“http://localhost” \
-> url \
-> nmap \
-> browse(ua=”Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; en) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.1.0.346 Mobile Safari/534.11+”) \
-> w3af
Meet Hackersh (“Hacker Shell”) – A new, free and open source cross-platform shell (command interpreter) with built-in security commands and Pythonect-like syntax.
Aside from being interactive, Hackersh is also scriptable with Pythonect. Pythonect is a new, free, and open source general-purpose dataflow programming language based on Python, written in Python. Hackersh is inspired by Unix pipeline, but takes it a step forward by including built-in features like remote invocation and threads. This 120 minute lab session will introduce Hackersh, the automation gap it fills, and its features. Lots of demonstrations and scripts are included to showcase concepts and ideas.
Generating Unified APIs with Protocol Buffers and gRPCC4Media
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/2k1eZ00.
Chris Roche and Christopher Burnett discuss how they extended the Protocol Buffer (PB) IDL to create unified APIs and data models. From validation logic to automatic logging and statistics, PBs allows them to speed up development across Go, Python, and PHP stacks. They also show how they leverage the Envoy proxy to transparently upgrade HTTP/1.1 services to speak gRPC on the wire. Filmed at qconnewyork.com.
Chris Roche is a Core Libraries Engineer at Lyft focused on enriching the tools to create distributed systems. Christopher Burnett is Lead Core Libraries Engineer at Lyft, where he designs software for distributed systems.
Most developers start adopting Docker by integrating it with their development environment. Unfortunately development environments are nuanced. Using Docker to automate and isolate development environments is rewarding, but you'll need to keep a few things in mind when designing that integration.
digitalSTROM Developer Day 2011: Wie Heimelektronik und digitalSTROM zusammen...digitalSTROM.org
Manfred Stock, Entwickler bei der Winterthurer Softwareschmiede futureLAB, besprach die Verbindung von etablierter Heimelektronik mit digitalSTROM am Beispiel des Squeezebox Servers von Logitech, der Musik in mehreren Räumen abspielt. Vorausgesetzt die Hard- oder Software bietet eine offene Schnittstelle kann diese via JSON-Schnittstelle mit dem dSS kommunizieren und eine digitalSTROM-Wohnung steuern. Stock programmierte dazu ein Plugin in Perl, das sich in den Squeezebox Server integriert. So wird die Fernbedienung des Soundsystems zum Eingabegerät für digitalSTROM.
Mehr unter: www.digitalstrom.org
digitalSTROM Developer Day 2011: digitalSTROM bindet auch externe Komponenten...digitalSTROM.org
dSS-Entwickler Patrick Stählin ging auf das Konzept zur Einbindung externer Komponenten ein, das beliebig auf jegliche Hard- und Software mit programmierbaren Schnittstellen anwendbar ist. Die Einbindung erfolgt jeweils über die JSON oder SOAP-Programmierschnittstelle des dSS, die es erlauben, digitalSTROM-Komponenten zu simulieren oder mittels Software virtuelle Geräte zu implementieren. So kommunizieren diese im digitalSTROM-Netzwerk und können in Szenen integriert und mit einem digitalSTROM-Taster oder der iPhone App aufgerufen werden. Stählin führte das Konzept anhand des VLC-Mediaplayers vor, der nun zum Beispiel beim Klingeln an der Tür die Musik kurz unterbrechen kann. Der entstandene Javascript Code kann nun mit geringem Aufwand an andere Mediaplayer angepasst werden.
digitalSTROM Developer Day 2011: Jump Start in die digitalSTROM-Server Entwic...digitalSTROM.org
Johannes Winkelmann, dSS-Entwickler, schloss an das Referat zum Entwicklungsprozess an. Er wies auf die konkreten Einstiegspunkte zu Informationen und Programmcode hin und zeigte die dafür notwendigen Entwicklungswerkzeuge. Ebenso stellte er die bereits erhältliche digitalSTROM Reference Platform vor – gewissermassen eine komplette digitalSTROM-Installation in einer Box, die es Entwicklern erlaubt, Scripts zu schreiben und ihre Ideen für Wohnen und Arbeiten mit digitalSTROM zu testen.
digitalSTROM Developer Day 2011: Neue Möglichkeiten mit dem digitalSTROM-ServerdigitalSTROM.org
Matthias Aebi, Vorstandsmitglied der digitalSTROM-Allianz, blickte als Erstes auf die Fortschritte in der Entwicklung der Open Source Software des digitalSTROM-Servers (dSS) zurück und stellte fest, dass die beim ersten Developer Day 2010 gesteckten Ziele weitestgehend erreicht wurden. Als Beispiel stellte er den digitalSTROM Apps store vor, der die Verteilung der Javascript basierten Plugins, den dSS-Apps, ermöglicht. Im zweiten Teil des Referates ging Aebi auf die interne Struktur des dSS ein und zeigte, an welchen Punkten Skripte auf Informationen zugreifen und das Verhalten des dSS beeinflussen können. Auch wurde der digitalSTROM accessHUB vorgestellt, mit dem der Fernzugriff auf den dSS ohne manuelle Konfiguration möglich wird. Zum Abschluss stellte Aebi den dSS-Entwicklungsprozess näher vor.
Mehr unter: www.digitalstrom.org
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024Neo4j
Neha Bajwa, Vice President of Product Marketing, Neo4j
Join us as we explore breakthrough innovations enabled by interconnected data and AI. Discover firsthand how organizations use relationships in data to uncover contextual insights and solve our most pressing challenges – from optimizing supply chains, detecting fraud, and improving customer experiences to accelerating drug discoveries.
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIVladimir Iglovikov, Ph.D.
Presented by Vladimir Iglovikov:
- https://www.linkedin.com/in/iglovikov/
- https://x.com/viglovikov
- https://www.instagram.com/ternaus/
This presentation delves into the journey of Albumentations.ai, a highly successful open-source library for data augmentation.
Created out of a necessity for superior performance in Kaggle competitions, Albumentations has grown to become a widely used tool among data scientists and machine learning practitioners.
This case study covers various aspects, including:
People: The contributors and community that have supported Albumentations.
Metrics: The success indicators such as downloads, daily active users, GitHub stars, and financial contributions.
Challenges: The hurdles in monetizing open-source projects and measuring user engagement.
Development Practices: Best practices for creating, maintaining, and scaling open-source libraries, including code hygiene, CI/CD, and fast iteration.
Community Building: Strategies for making adoption easy, iterating quickly, and fostering a vibrant, engaged community.
Marketing: Both online and offline marketing tactics, focusing on real, impactful interactions and collaborations.
Mental Health: Maintaining balance and not feeling pressured by user demands.
Key insights include the importance of automation, making the adoption process seamless, and leveraging offline interactions for marketing. The presentation also emphasizes the need for continuous small improvements and building a friendly, inclusive community that contributes to the project's growth.
Vladimir Iglovikov brings his extensive experience as a Kaggle Grandmaster, ex-Staff ML Engineer at Lyft, sharing valuable lessons and practical advice for anyone looking to enhance the adoption of their open-source projects.
Explore more about Albumentations and join the community at:
GitHub: https://github.com/albumentations-team/albumentations
Website: https://albumentations.ai/
LinkedIn: https://www.linkedin.com/company/100504475
Twitter: https://x.com/albumentations
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...SOFTTECHHUB
The choice of an operating system plays a pivotal role in shaping our computing experience. For decades, Microsoft's Windows has dominated the market, offering a familiar and widely adopted platform for personal and professional use. However, as technological advancements continue to push the boundaries of innovation, alternative operating systems have emerged, challenging the status quo and offering users a fresh perspective on computing.
One such alternative that has garnered significant attention and acclaim is Nitrux Linux 3.5.0, a sleek, powerful, and user-friendly Linux distribution that promises to redefine the way we interact with our devices. With its focus on performance, security, and customization, Nitrux Linux presents a compelling case for those seeking to break free from the constraints of proprietary software and embrace the freedom and flexibility of open-source computing.
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfPaige Cruz
Monitoring and observability aren’t traditionally found in software curriculums and many of us cobble this knowledge together from whatever vendor or ecosystem we were first introduced to and whatever is a part of your current company’s observability stack.
While the dev and ops silo continues to crumble….many organizations still relegate monitoring & observability as the purview of ops, infra and SRE teams. This is a mistake - achieving a highly observable system requires collaboration up and down the stack.
I, a former op, would like to extend an invitation to all application developers to join the observability party will share these foundational concepts to build on:
Securing your Kubernetes cluster_ a step-by-step guide to success !KatiaHIMEUR1
Today, after several years of existence, an extremely active community and an ultra-dynamic ecosystem, Kubernetes has established itself as the de facto standard in container orchestration. Thanks to a wide range of managed services, it has never been so easy to set up a ready-to-use Kubernetes cluster.
However, this ease of use means that the subject of security in Kubernetes is often left for later, or even neglected. This exposes companies to significant risks.
In this talk, I'll show you step-by-step how to secure your Kubernetes cluster for greater peace of mind and reliability.
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofsAlex Pruden
This paper presents Reef, a system for generating publicly verifiable succinct non-interactive zero-knowledge proofs that a committed document matches or does not match a regular expression. We describe applications such as proving the strength of passwords, the provenance of email despite redactions, the validity of oblivious DNS queries, and the existence of mutations in DNA. Reef supports the Perl Compatible Regular Expression syntax, including wildcards, alternation, ranges, capture groups, Kleene star, negations, and lookarounds. Reef introduces a new type of automata, Skipping Alternating Finite Automata (SAFA), that skips irrelevant parts of a document when producing proofs without undermining soundness, and instantiates SAFA with a lookup argument. Our experimental evaluation confirms that Reef can generate proofs for documents with 32M characters; the proofs are small and cheap to verify (under a second).
Paper: https://eprint.iacr.org/2023/1886
A tale of scale & speed: How the US Navy is enabling software delivery from l...sonjaschweigert1
Rapid and secure feature delivery is a goal across every application team and every branch of the DoD. The Navy’s DevSecOps platform, Party Barge, has achieved:
- Reduction in onboarding time from 5 weeks to 1 day
- Improved developer experience and productivity through actionable findings and reduction of false positives
- Maintenance of superior security standards and inherent policy enforcement with Authorization to Operate (ATO)
Development teams can ship efficiently and ensure applications are cyber ready for Navy Authorizing Officials (AOs). In this webinar, Sigma Defense and Anchore will give attendees a look behind the scenes and demo secure pipeline automation and security artifacts that speed up application ATO and time to production.
We will cover:
- How to remove silos in DevSecOps
- How to build efficient development pipeline roles and component templates
- How to deliver security artifacts that matter for ATO’s (SBOMs, vulnerability reports, and policy evidence)
- How to streamline operations with automated policy checks on container images
Removing Uninteresting Bytes in Software FuzzingAftab Hussain
Imagine a world where software fuzzing, the process of mutating bytes in test seeds to uncover hidden and erroneous program behaviors, becomes faster and more effective. A lot depends on the initial seeds, which can significantly dictate the trajectory of a fuzzing campaign, particularly in terms of how long it takes to uncover interesting behaviour in your code. We introduce DIAR, a technique designed to speedup fuzzing campaigns by pinpointing and eliminating those uninteresting bytes in the seeds. Picture this: instead of wasting valuable resources on meaningless mutations in large, bloated seeds, DIAR removes the unnecessary bytes, streamlining the entire process.
In this work, we equipped AFL, a popular fuzzer, with DIAR and examined two critical Linux libraries -- Libxml's xmllint, a tool for parsing xml documents, and Binutil's readelf, an essential debugging and security analysis command-line tool used to display detailed information about ELF (Executable and Linkable Format). Our preliminary results show that AFL+DIAR does not only discover new paths more quickly but also achieves higher coverage overall. This work thus showcases how starting with lean and optimized seeds can lead to faster, more comprehensive fuzzing campaigns -- and DIAR helps you find such seeds.
- These are slides of the talk given at IEEE International Conference on Software Testing Verification and Validation Workshop, ICSTW 2022.
Essentials of Automations: The Art of Triggers and Actions in FMESafe Software
In this second installment of our Essentials of Automations webinar series, we’ll explore the landscape of triggers and actions, guiding you through the nuances of authoring and adapting workspaces for seamless automations. Gain an understanding of the full spectrum of triggers and actions available in FME, empowering you to enhance your workspaces for efficient automation.
We’ll kick things off by showcasing the most commonly used event-based triggers, introducing you to various automation workflows like manual triggers, schedules, directory watchers, and more. Plus, see how these elements play out in real scenarios.
Whether you’re tweaking your current setup or building from the ground up, this session will arm you with the tools and insights needed to transform your FME usage into a powerhouse of productivity. Join us to discover effective strategies that simplify complex processes, enhancing your productivity and transforming your data management practices with FME. Let’s turn complexity into clarity and make your workspaces work wonders!
Maruthi Prithivirajan, Head of ASEAN & IN Solution Architecture, Neo4j
Get an inside look at the latest Neo4j innovations that enable relationship-driven intelligence at scale. Learn more about the newest cloud integrations and product enhancements that make Neo4j an essential choice for developers building apps with interconnected data and generative AI.
Pushing the limits of ePRTC: 100ns holdover for 100 daysAdtran
At WSTS 2024, Alon Stern explored the topic of parametric holdover and explained how recent research findings can be implemented in real-world PNT networks to achieve 100 nanoseconds of accuracy for up to 100 days.
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Albert Hoitingh
In this session I delve into the encryption technology used in Microsoft 365 and Microsoft Purview. Including the concepts of Customer Key and Double Key Encryption.
1.
UPnP AV MediaServer
and
digitalStrom Developer Day, January 15, 2010 Sergey 'Jin' Bostandzhyan
jin@mediatomb.cc
2.
Overview
● very brief introduction on UPnP
● introduction on MediaTomb and feature overview
● closer look at the “active items” feature
● interaction with digitalSTROM
3.
Universal Plug and Play
The UPnP forum, an industry initiative of more than 800
companies.
“The Forum's goals are to allow devices to connect seamlessly
and to simplify network implementation in the home and corporate
environments. Toward this end, UPnP Forum members work
together to define and publish UPnP device control protocols built
upon open, Internet-based communication standards.”
http://www.upnp.org/about/default.asp
4.
Universal Plug and Play
● allows peer-to-peer networking of CE devices, PC's, etc.
● protocol based on IP, TCP, UDP, HTTP, XML among others
● supports zero-configuration networking
● devices announce their presence
● devices can query and learn capability of other devices
● defines various standardized specifications
5.
Universal Plug and Play
MediaServer
● provides information about media format
● reads meta data from media files
● offers means to organize media collections
● presents a browseable hierarchy to the MediaRenderer via
the Content Directory Service
● allows to stream/download media
6.
Universal Plug and Play
MediaRenderer
● allows the user to browse content of media servers
● shows information about the media
● allows the user to play/watch media
7.
WAN
Universal Plug and Play
LAN Iomega StorCenter
running
MediaTomb
Philips SPF508 Digital Picture Frame
Notebook running MediaTomb D-Link DSM-510
8.
MediaTomb – UPnP AV MediaServer
http://mediatomb.cc
● open source, GPLv2
● meta data extraction from media files (ID3, EXIF, etc.)
● user configurable media layout / browse hierarchy via JS
● provides means for custom playlist parsing via JS
● highly flexible media format transcoding via plugins / scripts
● web UI with a tree view of the database and the file system
● runs on x86, Alpha, ARM, MIPS, Sparc, ...
● available in major Linux distributions like Debian, Fedora, etc.
9.
MediaTomb – UPnP AV MediaServer
http://mediatomb.cc
10.
MediaTomb – UPnP AV MediaServer
http://mediatomb.cc
Active Item Feature
● allows to run a script on the server when media was
requested for download
● allows the script to modify properties of the virtual UPnP
object that corresponds to the requested media
11.
MediaTomb – UPnP AV MediaServer
http://mediatomb.cc
“Browse”
User navigates into a container:
S browse request (SOAP, XML)
P
E Server lists container contents:
browse response (SOAP, XML)
L
R <DIDLLite>
<item id="1888" parentID="1752" restricted="1">
<dc:title>УАЗик, реставрация</dc:title> A
V <upnp:class>object.item.imageItem</upnp:class>
<dc:date>20091029</dc:date>
<res protocolInfo="httpget:*:image/jpeg:*" size="1526998"
Y
E resolution="2848x2136">http://192.168.5.5:50500/content/media/object_id
/1888/res_id/0/ext/file.jpg</res>
<res protocolInfo="httpget:*:image/jpeg:*"
E
R resolution="160x120">http://192.168.5.5:50500/content/media/object_id/
1888/res_id/1/rct/EX_TH/ext/file.jpg</res>
</item>
R
</DIDLLite>
12.
MediaTomb – UPnP AV MediaServer
http://mediatomb.cc
“Play”
S User presses “Play”: HTTP GET
http://192.168.5.5:50500/content/media/object_id/1888/res_id/0/ext/file.jpg
P
E ● server looks up object id 1888 in the database
● looks up the location of the media on disk L
R ● sends data
A
V
HTTP/1.1 200 OK
CONTENTLENGTH: 1526998
CONTENTTYPE: image/jpeg
Y
E DATE: Fri, 01 Jan 2010 21:39:18 GMT
LASTMODIFIED: Thu, 19 Nov 2009 09:22:57 GMT
SERVER: Linux/2.6.31.9174.fc12.x86_64, UPnP/1.0, MediaTomb/0.12.0
E
R CONNECTION: close
ContentDisposition: attachment; filename="DSCF7914.JPG"
AcceptRanges: bytes
R
13.
MediaTomb – UPnP AV MediaServer
http://mediatomb.cc
“Play”: Active Item
S User presses “Play”: HTTP GET
http://192.168.5.5:50500/content/media/object_id/1889/res_id/0/ext/file.jpg
P
E L
server looks up object id 1889 in the database
R
●
A
● recognizes, that the requested object is an “Active Item”
● ...
V Y
E E
R R
14.
MediaTomb – UPnP AV MediaServer
http://mediatomb.cc
“Play”: Active Item
S ●
●
...
recognizes, that the requested object is an “Active Item”
E ● renders the requested UPnP object as XML
R ● launches a user defined script, feeding it a the rendered XML on stdin
V ●
●
expects the script to spit out same or modified XML to stdout
updates the object in the database using the XML received from the script
E ● looks up the location of the updated object on disk
R ● sends the data to the player
16.
MediaTomb – UPnP AV MediaServer
http://mediatomb.cc
Active Item: script logic
● read XML from standard input
● parse XML and if needed evaluate the <status> tag
● perform any desired operation on the server machine
● update the XML if you want to pass along information to the user
● print updated XML to standard output
17.
MediaTomb – UPnP AV MediaServer
http://mediatomb.cc
Active Item: script output
<item id="2292" parentID="1752" restricted="1"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:upnp="urn:schemasupnporg:metadata1/upnp/">
<dc:title>I ran a script!</dc:title>
<upnp:class>object.item.imageItem</upnp:class>
<dc:date>20091029</dc:date>
<action>/usr/local/bin/myscript.py</action>
<state>1</state>
<location>/opt/Photos/УАЗ/251109/DSCF7919.JPG</location>
<mimetype>image/jpeg</mimetype>
</item>
18.
How to control digitalSTROM via MediaTomb?
We need to...
● think of an easy way to generate a browseable hierarchy of
active items which would represent the dS controls
● create a script that will be triggered by the active items, that
will identify them as particular dS controls and perform
appropriate calls to the digitalSTROM server
19.
How to control digitalSTROM via MediaTomb?
Generating the hierarchy can be done using MediaTomb's
playlist import feature which allows to write custom playlist
parsers using JavaScript.
We have to...
● come up with a meaningful playlist format that we could use
● tell MediaTomb to treat our file as a playlist
● customize the default playlist parser so that it handles our
playlist
20.
How to control digitalSTROM via MediaTomb?
Simply use JSON apartment structure dump from the
digitalSTROM server!
http://<dsshost>:8080/json/apartment/getStructure
{"ok":true,
"result":{"apartment":{
"zones":[{"id":313,"name":"Wohnzimmer","isPresent":true,"firstZoneOnDSMeter":0,
"devices":[{"id":"3504175fe000000000001b78","isSwitch":false,
"name":"Taster Eingang","fid":4098, "circuitID":0,"busID":897,
"isPresent":true,"lastDiscovered":"20100112 14:49:19",
"firstSeen":"20091109 10:44:16","on":false},
{"id":"3504175fe000000000001b9f","isSwitch":false,
"name":"Gehen Taster","fid":28770,"circuitID":0,"busID":898,
"isPresent":true,"lastDiscovered":"20100112 14:49:19",
"firstSeen":"20091109 10:44:16","on":false},
........
21.
How to control digitalSTROM via MediaTomb?
In the playlist parser script of MediaTomb, convert the JSON
data to a JS object and loop through the data:
do
{
json_content = json_content + line;
line = readln(); // readln function is provided by MediaTomb
}
while (line);
// evaluate content of json file
apartment = eval('(' + json_content + ')').result.apartment;
while(apartment.zones.length > 0)
{
zone = apartment.zones.shift();
addScenes(zone.id, zone.name); // helper function
};
22.
How to control digitalSTROM via MediaTomb?
Define desired scenes depending on the zone id:
function Scene(id, name) {
this.id = id;
this.name = name;
}
function addScenes(zoneid, zonename) {
var item = new Object();
// scene id > scene name mapping
if(zoneid == 313) // Wohnen
{
scenes = new Array(new Scene(5, "Essen"), new Scene(17, "Fernsehen"),
new Scene(18, "Lesen"), new Scene(19, "Putzen"),
new Scene(13, "Alles aus"));
} ...
23.
How to control digitalSTROM via MediaTomb?
Create new active item objects and add them to MediaTomb:
function addScenes(zoneid, zonename) {
.....
while(scenes.length > 0) {
scene = scenes.shift();
item.objectType = OBJECT_TYPE_ACTIVE_ITEM;
item.action = "/home/demo/Desktop/call_item_by_state.py";
item.state = "class=scene;zone=" + zoneid + ";scene=" + scene.id;
item.title = scene.name;
item.location = "/home/demo/Desktop/selected.mp3";
item.mimetype = 'audio/mpeg';
item.upnpclass = UPNP_CLASS_ITEM_MUSIC_TRACK;
chain = new Array("Wohnung – Musik", zonename, scene.name);
addCdsObject(item, createContainerChain(chain),
UPNP_CLASS_PLAYLIST_CONTAINER);
}
}
24.
How to control digitalSTROM via MediaTomb?
25.
How to control digitalSTROM via MediaTomb?
When the “Essen” item gets played, the action
/home/demo/Desktop/call_item_by_state.py is executed,
receving this XML on stdin:
<item id="49921" parentID="49920" restricted="1"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:upnp="urn:schemasupnporg:metadata10/upnp/">
<dc:title>Essen</dc:title>
<upnp:class>object.item.audioItem.musicTrack</upnp:class>
<action>/home/demo/Desktop/call_item_by_state.py</action>
<state>class=scene;zone=313;scene=5</state>
<location>/home/demo/Desktop/send.mp3</location>
<mimetype>audio/mpeg</mimetype>
</item>
26.
How to control digitalSTROM via MediaTomb?
call_item_by_state.py:
● parses the item XML and get the <state> value
● parses the state and gets zone and scene id's
● runs a helper script which calls the scene on the dSS
● returns unmodified XML back to MediaTomb (no item update)
27.
How to control digitalSTROM via MediaTomb?
call_scene.sh helper script:
#!/bin/bash
DSS_SERVER=localhost:8080
BASE_URL="http://$DSS_SERVER/json/zone/callScene"
if [ z "$2" ]; then
echo "Usage: $(basename $0) <zone id> <scene id>"
exit 1
fi
wget O "${BASE_URL}?id=$1&sceneNr=$2&groupID=1" &> /dev/null
28.
Summary
In order to perform calls on the dSS from any UPnP player
● download the JSON dump from dSS and use it as a playlist
in MediaTomb
● use the playlist parser from this presentation or customize
your own
● install the active item action script and the dSS helper script
● setup MediaTomb to use your parser and import the playlist
● on the player, navigate to the desired item and press play to
trigger a call to the dSS
Scripts used in this presentation are available here:
http://developer.digitalstrom.org/files/contrib/
29.
Questions?
http://www.digitalstrom.org/
http://mediatomb.cc/
jin@mediatomb.cc
Scripts used in this presentation:
http://developer.digitalstrom.org/files/contrib/