From 5b8b84f678b2b2e73ec8a957e2e9dca7e9eafaeb Mon Sep 17 00:00:00 2001 From: Igor Jeremic Date: Wed, 30 Oct 2024 21:41:45 +0100 Subject: [PATCH 1/4] Removing-2023 --- .env.example | 20 - .gitignore | 10 - .reuse/dep5 | 12 - LICENSE | 674 ----- LICENSES/CC0-1.0.txt | 121 - LICENSES/GPL-3.0-or-later.txt | 232 -- README.md | 62 - calls.http | 68 - config/nginx.admin.config.sample | 69 - config/nginx.global.config.sample | 58 - docker-compose.yaml | 66 - infrastructure/ansible/ansible.cfg | 4 - infrastructure/ansible/deploy.yml | 19 - infrastructure/ansible/hosts | 5 - infrastructure/ansible/requirements.yml | 2 - infrastructure/ansible/roles/.gitignore | 2 - infrastructure/docker-compose.build.yml | 7 - infrastructure/docker-compose.run.yml | 64 - infrastructure/docker/Dockerfile | 17 - requirements.txt | 47 - src/__init__.py | 0 src/app.py | 104 - src/conferences/__init__.py | 2 - src/conferences/api/__init__.py | 11 - src/conferences/api/admin.py | 41 - src/conferences/api/conference.py | 114 - src/conferences/api/flows.py | 28 - src/conferences/api/no_v3.py | 262 -- src/conferences/api/printers.py | 175 -- src/conferences/api/v3.py | 221 -- src/conferences/controller/__init__.py | 10 - src/conferences/controller/bookmarks.py | 112 - src/conferences/controller/conference.py | 767 ----- src/conferences/controller/controller.py | 76 - src/conferences/controller/notifications.py | 157 - src/conferences/controller/pretix.py | 131 - src/conferences/controller/ratings.py | 104 - src/conferences/models/__init__.py | 4 - src/conferences/models/conferences.py | 324 -- src/db_config.py | 30 - src/main.py | 28 - .../models/0_20231105181722_init.py | 146 - .../models/1_20231105232211_update.py | 16 - .../models/2_20231107215420_update.py | 14 - .../models/3_20231108175131_update.py | 23 - .../models/4_20231109165830_update.py | 14 - .../models/5_20231109214614_update.py | 14 - .../models/6_20231109214845_update.py | 14 - .../models/7_20231109222307_update.py | 14 - .../models/8_20231109224215_update.py | 23 - src/pyproject.toml | 4 - src/scripts/qrgen.py | 47 - src/shared/__init__.py | 0 src/shared/ex.py | 22 - src/shared/setup_logger.py | 47 - src/shared/utils.py | 27 - src/tests/assets/fake_attendees.json | 2682 ----------------- src/tests/assets/sfs2023streaming.yaml | 15 - src/tests/assets/sfscon2023.xml | 2023 ------------- .../assets/sfscon2023_event1day1_0830.xml | 2023 ------------- .../assets/sfscon2023_event1day1_0835.xml | 2023 ------------- src/tests/assets/sfscon2023sponsors.yaml | 169 -- src/tests/base_test_classes.py | 105 - src/tests/pytest.ini | 2 - src/tests/test_api.py | 491 --- src/tests/test_conference_controller.py | 551 ---- src/workers/push_notifications.py | 90 - 67 files changed, 14859 deletions(-) delete mode 100644 .env.example delete mode 100644 .gitignore delete mode 100644 .reuse/dep5 delete mode 100644 LICENSE delete mode 100644 LICENSES/CC0-1.0.txt delete mode 100644 LICENSES/GPL-3.0-or-later.txt delete mode 100644 README.md delete mode 100644 calls.http delete mode 100644 config/nginx.admin.config.sample delete mode 100644 config/nginx.global.config.sample delete mode 100644 docker-compose.yaml delete mode 100644 infrastructure/ansible/ansible.cfg delete mode 100644 infrastructure/ansible/deploy.yml delete mode 100644 infrastructure/ansible/hosts delete mode 100644 infrastructure/ansible/requirements.yml delete mode 100644 infrastructure/ansible/roles/.gitignore delete mode 100644 infrastructure/docker-compose.build.yml delete mode 100644 infrastructure/docker-compose.run.yml delete mode 100644 infrastructure/docker/Dockerfile delete mode 100644 requirements.txt delete mode 100644 src/__init__.py delete mode 100644 src/app.py delete mode 100644 src/conferences/__init__.py delete mode 100644 src/conferences/api/__init__.py delete mode 100644 src/conferences/api/admin.py delete mode 100644 src/conferences/api/conference.py delete mode 100644 src/conferences/api/flows.py delete mode 100644 src/conferences/api/no_v3.py delete mode 100644 src/conferences/api/printers.py delete mode 100644 src/conferences/api/v3.py delete mode 100644 src/conferences/controller/__init__.py delete mode 100644 src/conferences/controller/bookmarks.py delete mode 100644 src/conferences/controller/conference.py delete mode 100644 src/conferences/controller/controller.py delete mode 100644 src/conferences/controller/notifications.py delete mode 100644 src/conferences/controller/pretix.py delete mode 100644 src/conferences/controller/ratings.py delete mode 100644 src/conferences/models/__init__.py delete mode 100644 src/conferences/models/conferences.py delete mode 100644 src/db_config.py delete mode 100644 src/main.py delete mode 100644 src/migrations/models/0_20231105181722_init.py delete mode 100644 src/migrations/models/1_20231105232211_update.py delete mode 100644 src/migrations/models/2_20231107215420_update.py delete mode 100644 src/migrations/models/3_20231108175131_update.py delete mode 100644 src/migrations/models/4_20231109165830_update.py delete mode 100644 src/migrations/models/5_20231109214614_update.py delete mode 100644 src/migrations/models/6_20231109214845_update.py delete mode 100644 src/migrations/models/7_20231109222307_update.py delete mode 100644 src/migrations/models/8_20231109224215_update.py delete mode 100644 src/pyproject.toml delete mode 100644 src/scripts/qrgen.py delete mode 100644 src/shared/__init__.py delete mode 100644 src/shared/ex.py delete mode 100644 src/shared/setup_logger.py delete mode 100644 src/shared/utils.py delete mode 100644 src/tests/assets/fake_attendees.json delete mode 100644 src/tests/assets/sfs2023streaming.yaml delete mode 100644 src/tests/assets/sfscon2023.xml delete mode 100644 src/tests/assets/sfscon2023_event1day1_0830.xml delete mode 100644 src/tests/assets/sfscon2023_event1day1_0835.xml delete mode 100644 src/tests/assets/sfscon2023sponsors.yaml delete mode 100644 src/tests/base_test_classes.py delete mode 100644 src/tests/pytest.ini delete mode 100644 src/tests/test_api.py delete mode 100644 src/tests/test_conference_controller.py delete mode 100644 src/workers/push_notifications.py diff --git a/.env.example b/.env.example deleted file mode 100644 index 00f4ce7..0000000 --- a/.env.example +++ /dev/null @@ -1,20 +0,0 @@ -DB_HOST=localhost -DB_USERNAME=sfscon -DB_PASSWORD=sfscon -DB_NAME=sfscon -DB_PORT=5432 - -PRETIX_TOKEN=__PLACE_YOUR_PRETIX_TOKEN__ -PRETIX_CHECKLIST_ID=__PLACE_CHECKLIST_ID__ -PRETIX_EVENT_ID=__PLACE_EVENT_ID__ -PRETIX_ORGANIZER_ID=noi-digital - -JWT_SECRET_KEY=__SET_ANYTHING_FOR_ENCODING_JWT__ - -XML_URL="https://www.sfscon.it/?calendar=2023&format=xml" - -REDIS_SERVER=localhost - -ADMIN_USERNAME=__ADMIN_USERNAME__ -ADMIN_PASSWORD=__ADMIN_PLAINTEXT_PASSWORD__ -LANE_USERNAME_PREFIX=__ADMIN_USERNAME__ diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 8a8484b..0000000 --- a/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -.mypy_cache -.env -*.pyc -.venv -.idea -*~ -__pycache__ -.pytest_cache -TODO.txt -restore/ diff --git a/.reuse/dep5 b/.reuse/dep5 deleted file mode 100644 index 7799db9..0000000 --- a/.reuse/dep5 +++ /dev/null @@ -1,12 +0,0 @@ -Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: OpenCON -Upstream-Contact: DigitalCUBE -Source: https://m.opencon.dev/ - -Files: .gitignore *.sample .env.sample docker-compose.yaml src/*.yaml src/*.xml src/docker/* README.md requirements.txt src/pyproject.toml src/tests/assets/fake_attendees.json src/tests/pytest.ini -Copyright: 2023 DigitalCUBE -License: GPL-3.0-or-later - -Files: .github/* infrastructure/* .gitignore .env.example calls.http -Copyright: (c) NOI Techpark -License: CC0-1.0 \ No newline at end of file diff --git a/LICENSE b/LICENSE deleted file mode 100644 index f288702..0000000 --- a/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/LICENSES/CC0-1.0.txt b/LICENSES/CC0-1.0.txt deleted file mode 100644 index 0e259d4..0000000 --- a/LICENSES/CC0-1.0.txt +++ /dev/null @@ -1,121 +0,0 @@ -Creative Commons Legal Code - -CC0 1.0 Universal - - CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE - LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN - ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS - INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES - REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS - PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM - THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED - HEREUNDER. - -Statement of Purpose - -The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator -and subsequent owner(s) (each and all, an "owner") of an original work of -authorship and/or a database (each, a "Work"). - -Certain owners wish to permanently relinquish those rights to a Work for -the purpose of contributing to a commons of creative, cultural and -scientific works ("Commons") that the public can reliably and without fear -of later claims of infringement build upon, modify, incorporate in other -works, reuse and redistribute as freely as possible in any form whatsoever -and for any purposes, including without limitation commercial purposes. -These owners may contribute to the Commons to promote the ideal of a free -culture and the further production of creative, cultural and scientific -works, or to gain reputation or greater distribution for their Work in -part through the use and efforts of others. - -For these and/or other purposes and motivations, and without any -expectation of additional consideration or compensation, the person -associating CC0 with a Work (the "Affirmer"), to the extent that he or she -is an owner of Copyright and Related Rights in the Work, voluntarily -elects to apply CC0 to the Work and publicly distribute the Work under its -terms, with knowledge of his or her Copyright and Related Rights in the -Work and the meaning and intended legal effect of CC0 on those rights. - -1. Copyright and Related Rights. A Work made available under CC0 may be -protected by copyright and related or neighboring rights ("Copyright and -Related Rights"). Copyright and Related Rights include, but are not -limited to, the following: - - i. the right to reproduce, adapt, distribute, perform, display, - communicate, and translate a Work; - ii. moral rights retained by the original author(s) and/or performer(s); -iii. publicity and privacy rights pertaining to a person's image or - likeness depicted in a Work; - iv. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(a), below; - v. rights protecting the extraction, dissemination, use and reuse of data - in a Work; - vi. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation - thereof, including any amended or successor version of such - directive); and -vii. other similar, equivalent or corresponding rights throughout the - world based on applicable law or treaty, and any national - implementations thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention -of, applicable law, Affirmer hereby overtly, fully, permanently, -irrevocably and unconditionally waives, abandons, and surrenders all of -Affirmer's Copyright and Related Rights and associated claims and causes -of action, whether now known or unknown (including existing as well as -future claims and causes of action), in the Work (i) in all territories -worldwide, (ii) for the maximum duration provided by applicable law or -treaty (including future time extensions), (iii) in any current or future -medium and for any number of copies, and (iv) for any purpose whatsoever, -including without limitation commercial, advertising or promotional -purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each -member of the public at large and to the detriment of Affirmer's heirs and -successors, fully intending that such Waiver shall not be subject to -revocation, rescission, cancellation, termination, or any other legal or -equitable action to disrupt the quiet enjoyment of the Work by the public -as contemplated by Affirmer's express Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason -be judged legally invalid or ineffective under applicable law, then the -Waiver shall be preserved to the maximum extent permitted taking into -account Affirmer's express Statement of Purpose. In addition, to the -extent the Waiver is so judged Affirmer hereby grants to each affected -person a royalty-free, non transferable, non sublicensable, non exclusive, -irrevocable and unconditional license to exercise Affirmer's Copyright and -Related Rights in the Work (i) in all territories worldwide, (ii) for the -maximum duration provided by applicable law or treaty (including future -time extensions), (iii) in any current or future medium and for any number -of copies, and (iv) for any purpose whatsoever, including without -limitation commercial, advertising or promotional purposes (the -"License"). The License shall be deemed effective as of the date CC0 was -applied by Affirmer to the Work. Should any part of the License for any -reason be judged legally invalid or ineffective under applicable law, such -partial invalidity or ineffectiveness shall not invalidate the remainder -of the License, and in such case Affirmer hereby affirms that he or she -will not (i) exercise any of his or her remaining Copyright and Related -Rights in the Work or (ii) assert any associated claims and causes of -action with respect to the Work, in either case contrary to Affirmer's -express Statement of Purpose. - -4. Limitations and Disclaimers. - - a. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - b. Affirmer offers the Work as-is and makes no representations or - warranties of any kind concerning the Work, express, implied, - statutory or otherwise, including without limitation warranties of - title, merchantability, fitness for a particular purpose, non - infringement, or the absence of latent or other defects, accuracy, or - the present or absence of errors, whether or not discoverable, all to - the greatest extent permissible under applicable law. - c. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without - limitation any person's Copyright and Related Rights in the Work. - Further, Affirmer disclaims responsibility for obtaining any necessary - consents, permissions or other rights required for any use of the - Work. - d. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to - this CC0 or use of the Work. diff --git a/LICENSES/GPL-3.0-or-later.txt b/LICENSES/GPL-3.0-or-later.txt deleted file mode 100644 index f6cdd22..0000000 --- a/LICENSES/GPL-3.0-or-later.txt +++ /dev/null @@ -1,232 +0,0 @@ -GNU GENERAL PUBLIC LICENSE -Version 3, 29 June 2007 - -Copyright © 2007 Free Software Foundation, Inc. - -Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. - -Preamble - -The GNU General Public License is a free, copyleft license for software and other kinds of works. - -The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. - -To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. - -For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. - -Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. - -For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. - -Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. - -Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. - -The precise terms and conditions for copying, distribution and modification follow. - -TERMS AND CONDITIONS - -0. Definitions. - -“This License” refers to version 3 of the GNU General Public License. - -“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. - -“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. - -To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. - -A “covered work” means either the unmodified Program or a work based on the Program. - -To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. - -To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. - -An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. - -1. Source Code. -The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work. - -A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. - -The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. - -The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. - -The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. - -The Corresponding Source for a work in source code form is that same work. - -2. Basic Permissions. -All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. - -You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. - -Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. - -3. Protecting Users' Legal Rights From Anti-Circumvention Law. -No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. - -When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. - -4. Conveying Verbatim Copies. -You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. - -You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. - -5. Conveying Modified Source Versions. -You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. - - c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. - -A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. - -6. Conveying Non-Source Forms. -You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: - - a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. - - d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. - -A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. - -A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. - -“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. - -If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). - -The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. - -Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. - -7. Additional Terms. -“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. - -When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. - -Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or authors of the material; or - - e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. - -All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. - -If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. - -Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. - -8. Termination. -You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). - -However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. - -Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. - -Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. - -9. Acceptance Not Required for Having Copies. -You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. - -10. Automatic Licensing of Downstream Recipients. -Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. - -An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. - -You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. - -11. Patents. -A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”. - -A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. - -Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. - -In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. - -If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. - -If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. - -A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. - -Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. - -12. No Surrender of Others' Freedom. -If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. - -13. Use with the GNU Affero General Public License. -Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. - -14. Revised Versions of this License. -The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. - -If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. - -Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. - -15. Disclaimer of Warranty. -THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -16. Limitation of Liability. -IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -17. Interpretation of Sections 15 and 16. -If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. - -END OF TERMS AND CONDITIONS - -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - -If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”. - -You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . - -The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . diff --git a/README.md b/README.md deleted file mode 100644 index 430ae6b..0000000 --- a/README.md +++ /dev/null @@ -1,62 +0,0 @@ -# opencon - - -### Requirements - -the following software is requirement on your server to be able to run this -app - -- nginx -- docker -- docker compose -- postgresql 14+ - -### Installation - -- checkout this repository -- run docker compose build -- setup .env file (from .env.sample) -- setup global nginx (see configuration file in config/nginx.global.conf.sample -- run docker compose up -d - -currently and by default, the database has been setup on host machine -visible from docker containers on host.docker.internal - -this is defined at the top of .env file as - -``` -DB_HOST=host.docker.internal -DB_USERNAME=opencon_user # or any other your username -DB_PASSWORD=__your_password__ -DB_NAME=opencon_db # or any other database name -DB_PORT=5432 -``` - -create database __db_name__ with read/write/create_tables privilege for -__your_user__ - -as postgres admin - -``` -create role opencon_user with login createdb password '123'; -``` - -as opencon_user - -``` -psql -U opencon_user template1 -create database opencon_db -``` - -### bootstrap - -- run docker compose up -d - -from your browser open target url and login with username/password defined -in .env - -ADMIN_USERNAME=__your_admin_username__ -ADMIN_PASSWORD=__your_admin_password__ - -click to sync button to sync initial content from sfscon.it - diff --git a/calls.http b/calls.http deleted file mode 100644 index 010ee1a..0000000 --- a/calls.http +++ /dev/null @@ -1,68 +0,0 @@ -##### VSCODE / REST Client https://marketplace.visualstudio.com/items?itemName=humao.rest-client -# Create a .env file and set the corresponding variables -# See all $dotenv fields below - -@endpoint=https://pretix.eu/api/v1/ -@token={{$dotenv PRETIX_TOKEN}} - - -######################### -# organizers/ -######################### - -### -GET {{endpoint}}/organizers/ -Host: pretix.eu -Authorization: Token {{token}} - -######################### -# events -######################### - -GET {{endpoint}}/organizers/noi-digital/events -Host: pretix.eu -Authorization: Token {{token}} - -######################### -# checkin list -######################### - -GET {{endpoint}}/organizers/noi-digital/events/sfscon23/checkinlists -Host: pretix.eu -Authorization: Token {{token}} - -######################### -# checkin list status -######################### - -GET {{endpoint}}/organizers/noi-digital/events/sfscon23/checkinlists/313919/status -Host: pretix.eu -Authorization: Token {{token}} - -######################### -# create conf checkin list status -######################### - -@api=http://localhost:8000 - -GET {{api}}/openapi.json -Content-Type: application/json - -######################### -# create conf checkin list status -######################### - -POST {{api}}/api/conferences -Content-Type: application/json - -{ - "default": "True", - "force": "True" -} - -######################### -# get conferences -######################### - -GET {{api}}/api/conferences -Content-Type: application/json diff --git a/config/nginx.admin.config.sample b/config/nginx.admin.config.sample deleted file mode 100644 index 6364133..0000000 --- a/config/nginx.admin.config.sample +++ /dev/null @@ -1,69 +0,0 @@ - -upstream oneservices_v2 { ip_hash; server 127.0.0.1:8000 max_fails=3 fail_timeout=300s; } - - -server { - root /home/digital/app/frontend; - - server_name webadmin.app.sfscon.testingmachine.eu app.sfscon.it; - - client_max_body_size 20M; - - location / { - index index.html; - try_files $uri $uri/ /index.html; - } - - location /static { - root /home/digital/app/impresaone; - } - - location /pretix { - proxy_pass http://apilogger; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; - - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - proxy_read_timeout 3600s; - - } - - location /api/v3 { - proxy_pass http://oneservices_v2; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; - - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - proxy_read_timeout 3600s; - } - - location /api { - proxy_pass http://oneservices_v2; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; - - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - proxy_read_timeout 3600s; - } - - location /qr-codes { - root /home/digital/app; - index index.html; - } - - proxy_buffering off; - - # for sfscon mobile app forgot password - # rewrite ^/forgot-password(.*)$ sfscon://reset-password$1 permanent; - rewrite ^/password-redirect(.*)$ sfscon://reset-password$1 permanent; - # rewrite ^/password-redirect-expo-go(.*)$ sfscon://reset-password$1 permanent; - - rewrite ^/api/v3/(.*)$ /api/v3/$1 break; - rewrite ^/api/(.*)$ /api/$1 break; - - rewrite ^/pretix/(.*)$ /pretix/$1 break; - rewrite ^/qr-codes(.*)$ /qr-codes$1 break; - rewrite ^/(.*)$ /$1 break; - - listen 80; -} diff --git a/config/nginx.global.config.sample b/config/nginx.global.config.sample deleted file mode 100644 index 289ce2c..0000000 --- a/config/nginx.global.config.sample +++ /dev/null @@ -1,58 +0,0 @@ -upstream oneservices { ip_hash; server 127.0.0.1:8080 max_fails=3 fail_timeout=300s; } -upstream apilogger { ip_hash; server 127.0.0.1:8888 max_fails=3 fail_timeout=300s; } - -server { - listen 80 default; - root /home/digital/app/frontend/dist; - - server_name stage.opencon.dev; - - client_max_body_size 20M; - - location /static { - root /home/digital/app/impresaone; - } - - location / { - index index.html; - try_files $uri $uri/ /index.html; - } - - location /pretix { - proxy_pass http://apilogger; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; - - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - proxy_read_timeout 3600s; - - } - - location /api/v3 { - proxy_pass http://oneservices; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; - - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - proxy_read_timeout 3600s; - } - - location /qr-codes { - root /home/digital/app; - index index.html; - # try_files $uri $uri/ index.html; - } - - proxy_buffering off; - - # for sfscon mobile app forgot password - # rewrite ^/forgot-password(.*)$ sfscon://reset-password$1 permanent; - rewrite ^/password-redirect(.*)$ sfscon://reset-password$1 permanent; - # rewrite ^/password-redirect-expo-go(.*)$ sfscon://reset-password$1 permanent; - - rewrite ^/api/v3/(.*)$ /api/v3/$1 break; - rewrite ^/pretix/(.*)$ /pretix/$1 break; - rewrite ^/qr-codes(.*)$ /qr-codes$1 break; - rewrite ^/(.*)$ /$1 break; -} - diff --git a/docker-compose.yaml b/docker-compose.yaml deleted file mode 100644 index 79a3a8c..0000000 --- a/docker-compose.yaml +++ /dev/null @@ -1,66 +0,0 @@ -services: - conferences: - build: - context: . - dockerfile: infrastructure/docker/Dockerfile - command: uvicorn main:app --host 0.0.0.0 --reload # sleep 9999999999 - env_file: - - .env - volumes: - - opencon-logs:/var/log/opencon - ports: - - 8000:8000 - healthcheck: - test: curl --fail http://localhost:8000/openapi.json || exit 1 - interval: 5s - retries: 3 - start_period: 5s - timeout: 5s - extra_hosts: - - "host.docker.internal:host-gateway" - depends_on: - redis: - condition: service_started - postgres: - condition: service_started - - push_notifications: - build: - context: . - dockerfile: infrastructure/docker/Dockerfile - command: python workers/push_notifications.py - env_file: - - .env - volumes: - - opencon-logs:/var/log/opencon - depends_on: - redis: - condition: service_started - postgres: - condition: service_started - conferences: - condition: service_healthy - - postgres: - image: "postgres:14-alpine" - environment: - POSTGRES_DB: sfscon - POSTGRES_USER: sfscon - POSTGRES_PASSWORD: sfscon - hostname: postgres - volumes: - - postgres-data:/var/lib/postgresql/data - - redis: - command: redis-server - hostname: redis - image: redis:alpine - labels: - NAME: redis - ports: - - 6379:6379 - - -volumes: - opencon-logs: - postgres-data: \ No newline at end of file diff --git a/infrastructure/ansible/ansible.cfg b/infrastructure/ansible/ansible.cfg deleted file mode 100644 index bec5ce0..0000000 --- a/infrastructure/ansible/ansible.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[defaults] -inventory = ./hosts -roles_path = ./roles -retry_files_enabled = False diff --git a/infrastructure/ansible/deploy.yml b/infrastructure/ansible/deploy.yml deleted file mode 100644 index c01d4fe..0000000 --- a/infrastructure/ansible/deploy.yml +++ /dev/null @@ -1,19 +0,0 @@ ---- -- hosts: all - vars: - ansible_python_interpreter: /usr/bin/python3 - tasks: - - name: Login to GitHub Container Registry - ansible.builtin.shell: - cmd: echo "{{ docker_password }}" | docker login "{{ docker_host }}" --username "{{ docker_username }}" --password-stdin - - name: Execute Docker deployment - ansible.builtin.include_role: - name: ansible-docker-deployment - vars: - docker_deployment_project_name: '{{ project_name }}' - docker_deployment_release_name: '{{ release_name }}' - docker_deployment_release_files: - - local: ../docker-compose.run.yml - remote: docker-compose.yml - - local: ../../.env - remote: .env diff --git a/infrastructure/ansible/hosts b/infrastructure/ansible/hosts deleted file mode 100644 index 94e8d78..0000000 --- a/infrastructure/ansible/hosts +++ /dev/null @@ -1,5 +0,0 @@ -[test] -docker03.testingmachine.eu ansible_user='noi-techpark-bot' ansible_ssh_common_args='-o StrictHostKeyChecking=no' - -[prod] -docker03.opendatahub.com ansible_user='noi-techpark-bot' ansible_ssh_common_args='-o StrictHostKeyChecking=no' diff --git a/infrastructure/ansible/requirements.yml b/infrastructure/ansible/requirements.yml deleted file mode 100644 index cb9e81b..0000000 --- a/infrastructure/ansible/requirements.yml +++ /dev/null @@ -1,2 +0,0 @@ -- src: git+https://github.com/noi-techpark/ansible-docker-deployment.git - version: "2.0" diff --git a/infrastructure/ansible/roles/.gitignore b/infrastructure/ansible/roles/.gitignore deleted file mode 100644 index d6b7ef3..0000000 --- a/infrastructure/ansible/roles/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore diff --git a/infrastructure/docker-compose.build.yml b/infrastructure/docker-compose.build.yml deleted file mode 100644 index 5421236..0000000 --- a/infrastructure/docker-compose.build.yml +++ /dev/null @@ -1,7 +0,0 @@ -services: - - app: - image: ${DOCKER_IMAGE}:${DOCKER_TAG} - build: - context: ../ - dockerfile: infrastructure/docker/Dockerfile diff --git a/infrastructure/docker-compose.run.yml b/infrastructure/docker-compose.run.yml deleted file mode 100644 index 8a43af8..0000000 --- a/infrastructure/docker-compose.run.yml +++ /dev/null @@ -1,64 +0,0 @@ -services: - - conferences: - image: ${DOCKER_IMAGE}:${DOCKER_TAG} - command: uvicorn main:app --host 0.0.0.0 --reload # sleep 9999999999 - env_file: - - .env - ports: - - "${SERVER_PORT_CONFERENCES}:8000" - volumes: - - opencon-logs:/var/log/opencon - healthcheck: - test: curl --fail http://localhost:8000/openapi.json || exit 1 - interval: 30s - retries: 3 - timeout: 10s - depends_on: - redis: - condition: service_started - postgres: - condition: service_started - - push_notifications: - image: ${DOCKER_IMAGE}:${DOCKER_TAG} - command: python workers/push_notifications.py - env_file: - - .env - ports: - - "${SERVER_PORT_PUSH_NOTIFICATIONS}:8080" - volumes: - - opencon-logs:/var/log/opencon - depends_on: - redis: - condition: service_started - postgres: - condition: service_started - conferences: - condition: service_healthy - - postgres: - image: "postgres:14-alpine" - environment: - POSTGRES_DB: ${DB_NAME} - POSTGRES_USER: ${DB_USERNAME} - POSTGRES_PASSWORD: ${DB_PASSWORD} - hostname: postgres - volumes: - - postgres-data:/var/lib/postgresql/data - ports: - - 5432:5432 - - redis: - command: redis-server - hostname: redis - image: redis:alpine - labels: - NAME: redis - ports: - - 6379:6379 - -volumes: - opencon-logs: - postgres-data: - diff --git a/infrastructure/docker/Dockerfile b/infrastructure/docker/Dockerfile deleted file mode 100644 index f22d361..0000000 --- a/infrastructure/docker/Dockerfile +++ /dev/null @@ -1,17 +0,0 @@ -FROM python:3.11.5 - -ENV PYTHONUNBUFFERED 1 - -COPY src . - -RUN apt update - -RUN apt install -y joe vim redis postgresql-client - - -RUN pip install --upgrade pip -RUN pip install wheel - -COPY requirements.txt ./requirements.txt -RUN pip install -r requirements.txt - diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 1cb9991..0000000 --- a/requirements.txt +++ /dev/null @@ -1,47 +0,0 @@ -aerich==0.7.2 -aioredis==2.0.1 -aiosqlite==0.17.0 -annotated-types==0.6.0 -anyio==3.7.1 -async-timeout==4.0.3 -asyncpg==0.28.0 -beautifulsoup4==4.12.2 -certifi==2023.7.22 -click==8.1.7 -databases==0.8.0 -dictdiffer==0.9.0 -Faker==19.13.0 -fastapi==0.104.0 -h11==0.14.0 -httpcore==0.18.0 -httpx==0.25.0 -idna==3.4 -iniconfig==2.0.0 -iso8601==1.1.0 -packaging==23.2 -Pillow==10.1.0 -pluggy==1.3.0 -psycopg2-binary==2.9.9 -pydantic==2.4.2 -pydantic_core==2.10.1 -PyJWT==2.8.0 -pypika-tortoise==0.1.6 -pytest==7.4.3 -pytest-asyncio==0.21.1 -python-dateutil==2.8.2 -python-dotenv==1.0.0 -python-slugify==8.0.1 -pytz==2023.3.post1 -PyYAML==6.0.1 -redis==5.0.1 -six==1.16.0 -sniffio==1.3.0 -soupsieve==2.5 -SQLAlchemy==1.4.49 -starlette==0.27.0 -text-unidecode==1.3 -tomlkit==0.12.1 -tortoise-orm==0.20.0 -typing_extensions==4.8.0 -uvicorn==0.23.2 -xmltodict==0.13.0 diff --git a/src/__init__.py b/src/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/app.py b/src/app.py deleted file mode 100644 index 4907a5a..0000000 --- a/src/app.py +++ /dev/null @@ -1,104 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -import os -import logging -import uuid - -import psycopg2 -from fastapi import FastAPI -from fastapi import Depends -from tortoise import Tortoise -from dotenv import load_dotenv -from contextlib import asynccontextmanager - -load_dotenv() - -from db_config import DB_CONFIG - -logging.basicConfig(level=logging.INFO) -logger = logging.getLogger(__name__) - - -@asynccontextmanager -async def lifespan(app: FastAPI): - await startup_event() - yield - await shutdown_event() - - -async def startup_event(): - logger.info("Starting up...") - - test_mode = os.getenv("TEST_MODE", "false").lower() == "true" - - test_mode_pfx = 'test_' if test_mode else '' - - db_name = f"{test_mode_pfx}{os.getenv('DB_NAME')}" - - db_url = f"postgres://{os.getenv('DB_USERNAME')}:{os.getenv('DB_PASSWORD')}@{os.getenv('DB_HOST')}:{os.getenv('DB_PORT')}/{db_name}" - - if test_mode: - terminate_sessions_sql = f""" - SELECT pg_terminate_backend(pg_stat_activity.pid) - FROM pg_stat_activity - WHERE pg_stat_activity.datname = '{db_name}' - AND pid <> pg_backend_pid(); - """ - - conn = psycopg2.connect(user=os.getenv('DB_USERNAME'), password=os.getenv('DB_PASSWORD'), database='template1', host=os.getenv('DB_HOST')) - - conn.autocommit = True - - cur = conn.cursor() - - # Terminate active sessions - cur.execute(terminate_sessions_sql) - - cur.execute(f'DROP DATABASE IF EXISTS {db_name}') - - # Create a new database - cur.execute(f'CREATE DATABASE {db_name}') - - cur.close() - conn.close() - - # Initialize Tortoise ORM - await Tortoise.init( - db_url=db_url, - modules={"models": ["conferences.models"]} # Assuming models.py is in the same directory - ) - - # Generate the database schema - try: - await Tortoise.generate_schemas() - except Exception as e: - raise - ... - - # if os.getenv('TEST_MODE', 'false').lower() == 'true': - # yield - # await Tortoise.close_connections() - - -async def test_dependency_startup(): - if os.getenv('TEST_MODE', 'false').lower() == 'true': - await startup_event() - yield - await shutdown_event() - else: - yield - - -async def shutdown_event(): - logger.info("Shutting down...") - await Tortoise.close_connections() - - -def get_app(): - if not hasattr(get_app, 'app'): - get_app.app = FastAPI(lifespan=lifespan) - - return get_app.app - -# app = get_app() diff --git a/src/conferences/__init__.py b/src/conferences/__init__.py deleted file mode 100644 index a30aa4f..0000000 --- a/src/conferences/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE diff --git a/src/conferences/api/__init__.py b/src/conferences/api/__init__.py deleted file mode 100644 index b9c1696..0000000 --- a/src/conferences/api/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -from .conference import * - -from .v3 import * # TODO: REMOVE THIS -from .no_v3 import * -from .flows import * - -from .printers import * -from .admin import * diff --git a/src/conferences/api/admin.py b/src/conferences/api/admin.py deleted file mode 100644 index 3d9634c..0000000 --- a/src/conferences/api/admin.py +++ /dev/null @@ -1,41 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -import pydantic - -from app import get_app -import conferences.controller as controller - -app = get_app() - - -@app.get('/api/conferences/{conference_acronym}/dashboard', ) -async def get_conference_dashboard(conference_acronym: str): - return await controller.get_dashboard(acronym=conference_acronym) - - -@app.get('/api/conferences/{conference_acronym}/attendees') -async def get_conference_attendees(conference_acronym: str, page: int = 1, per_page: int = 7, search: str = None): - return await controller.get_conference_attendees(conference_acronym=conference_acronym, page=page, per_page=per_page, search=search) - - -@app.get('/api/conferences/{conference_acronym}/sessions') -async def get_conference_sessions(conference_acronym: str): - return await controller.get_conference_sessions(conference_acronym=conference_acronym) - - -class TestNotificationRequest(pydantic.BaseModel): - subject: str - message: str - - -@app.post('/api/conferences/pretix_orders/{id_pretix_order}/test_push_notification') -async def test_push_notification(id_pretix_order: str, request: TestNotificationRequest): - try: - conference = await controller.get_conference_by_acronym(acronym='sfscon2023') - - pretix_order = await controller.get_pretix_order(conference=conference, id_pretix_order=id_pretix_order) - res = await controller.enqueue_notification(pretix_order=pretix_order, subject=request.subject, message=request.message) - except Exception as e: - raise e - return res diff --git a/src/conferences/api/conference.py b/src/conferences/api/conference.py deleted file mode 100644 index 008fce0..0000000 --- a/src/conferences/api/conference.py +++ /dev/null @@ -1,114 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - - -import os -import uuid -import logging -import datetime -import pydantic - -from typing import Optional -from fastapi import HTTPException - -from app import get_app -from fastapi.responses import FileResponse -from fastapi.middleware.cors import CORSMiddleware -import conferences.controller as controller - -app = get_app() - - -origins = ["*"] - -app.add_middleware( - CORSMiddleware, - allow_origins=origins, -) - -@app.get('/api/conferences', ) -async def get_conferences(): - return await controller.get_all_conferences() - - -@app.get('/api/conferences/{id_conference}', ) -async def get_single_conference(id_conference: uuid.UUID): - return await controller.opencon_serialize(await controller.get_conference(id_conference=id_conference)) - - -class ConferenceImportRequest(pydantic.BaseModel): - default: Optional[bool] = True - xml_content: Optional[str] = None - force: Optional[bool] = False - - -class ConferenceImportRequestResponse(pydantic.BaseModel): - id: str - - -@app.post('/api/conferences', response_model=ConferenceImportRequestResponse) -async def create_conference(request: ConferenceImportRequest): - if request.default: - content = await controller.fetch_xml_content() - XML_URL = os.getenv("XML_URL", None) - else: - content = await controller.convert_xml_to_dict(request.xml_content) - XML_URL = 'local-file' - - res = await controller.add_conference(content, XML_URL, force=True) - - rlog = logging.getLogger('redis_logger') - if res['created']: - rlog.info(f'Conference {res["conference"].id} created') - elif res['changes']: - rlog.info(f'Conference {res["conference"].id} updated') - else: - rlog.info(f'No need for update for conference {res["conference"].id} / nothing changed in XML file') - - conference = res['conference'] - x = ConferenceImportRequestResponse(id=str(conference.id)) - return x - - -@app.get('/api/conferences/acronym/{acronym}', ) -async def get_conference_by_acronym(acronym: str): - conference = await controller.get_conference_by_acronym(acronym=acronym) - return {'id': conference.id} - - -@app.get('/api/conferences/health') -async def health_check(): - return {"health": True, 'service': 'conferences'} - - -@app.get('/api/conferences/{acronym}/get-csv') -async def getcsv(acronym: str): - csv_file = await controller.get_csv(acronym) - return FileResponse(csv_file, media_type='text/csv') - - -@app.get('/api/conferences/{acronym}/talks.csv') -async def getcsv(acronym: str): - csv_file = await controller.get_csv_talks(acronym) - return FileResponse(csv_file, media_type='text/csv') - - -@app.get('/api/conferences/{acronym}/attendees.csv') -async def getcsv(acronym: str): - csv_file = await controller.get_csv_attendees(acronym) - return FileResponse(csv_file, media_type='text/csv') - - -class ConferenceNotify5MinRequest(pydantic.BaseModel): - now_time: Optional[datetime.datetime] = None - test_only: Optional[bool] = True - - -@app.post('/api/conferences/{acronym}/notify-5-minutes-before-start') -async def notify_5_minutes_before_start(acronym: str, request: ConferenceNotify5MinRequest): - try: - conference = await controller.get_conference_by_acronym(acronym=acronym) - except Exception as e: - raise HTTPException(status_code=404, detail=str(e)) - - return await controller.send_notifications_5_minute_before_start(conference=conference, now_time=request.now_time, test_only=request.test_only) diff --git a/src/conferences/api/flows.py b/src/conferences/api/flows.py deleted file mode 100644 index 83040ba..0000000 --- a/src/conferences/api/flows.py +++ /dev/null @@ -1,28 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -import uuid - -import pydantic -from typing import Optional - -from app import get_app -import conferences.controller as controller - -app = get_app() - - -class FlowRequest(pydantic.BaseModel): - conference_id: Optional[uuid.UUID] - pretix_order_id: Optional[str] - - text: str - data: Optional[dict] = None - - -@app.post('/api/flows', ) -async def add_flow(request: FlowRequest): - conference = await controller.get_conference(id_conference=request.conference_id) if request.conference_id else None - pretix_order = await controller.get_pretix_order(conference, request.pretix_order_id) if request.pretix_order_id else None - - return await controller.add_flow(conference, pretix_order, request.text) diff --git a/src/conferences/api/no_v3.py b/src/conferences/api/no_v3.py deleted file mode 100644 index ff90371..0000000 --- a/src/conferences/api/no_v3.py +++ /dev/null @@ -1,262 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -import os -import jwt -import uuid -import json -import logging -import pydantic -import datetime - -from fastapi import Depends -from typing import Optional, Literal -from fastapi import HTTPException - -import shared.ex as ex -from app import get_app -import conferences.controller as controller -from conferences.controller import decode_token - -app = get_app() - -from fastapi import Request - -log = logging.getLogger('conference_logger') - - -def pretix_order(request: Request): - token = request.headers.get('Authorization', None) - - if not token: - log.info("Raising UNAUTHORIZED") - raise HTTPException(status_code=403, detail="UNAUTHORIZED") - - try: - res = decode_token(token.replace('Bearer ', '')) - log.info(f"Accessing with pretix_order: {res['pretix_order_id']}") - return res - except ex.AppException as e: - log.critical(f"Raising {e.id_message}") - raise HTTPException(status_code=e.status_code, detail=e.id_message) - except Exception as e: - - log.info('Trying to decode admin token') - try: - - res = decode_admin_token(token.replace('Bearer ', '')) - if res['username'] == os.getenv('ADMIN_USERNAME'): - res['pretix_order_id'] = '__admin__' - res['pretix_order_secret'] = '__admin__' - log.info(f"Accessing with admin token") - return res - - if res['username'].startswith('lane'): - res['pretix_order_id'] = res['username'] - res['pretix_order_secret'] = res['username'] - log.info(f"Accessing with lane token") - return res - raise Exception('Invalid lane user token') - - - except Exception as e: - log.critical(f"Raising INTERNAL_SERVER_ERROR {e}") - raise HTTPException(status_code=500, detail='INTERNAL_SERVER_ERROR') - - -class ConferenceImportRequest(pydantic.BaseModel): - default: Optional[bool] = True - xml_content: Optional[str] = None - - -class ConferenceImportRequestResponse(pydantic.BaseModel): - id: str - created: bool - changes: dict - - -@app.post('/api/conferences/import-xml', response_model=ConferenceImportRequestResponse, ) -async def V3CLONE_import_conference_xml_api(): - content = await controller.fetch_xml_content() - XML_URL = os.getenv("XML_URL", None) - - # print("\n"*5) - # print(content) - # print("\n"*5) - # print(XML_URL) - # print("\n"*5) - res = await controller.add_conference(content, XML_URL) - conference = res['conference'] - # print(conference) - # print("\n"*5) - - x = ConferenceImportRequestResponse(id=str(conference.id), created=res['created'], changes=res['changes']) - return x - - -# @app.get('/api/conferences/acronym/{acronym}', ) -# async def V3CLONE_get_conference_by_acronym(acronym: str): -# conference = await controller.get_conference_by_acronym(acronym=acronym) -# return {'id': conference.id} - - -@app.get('/api/conferences/users') -async def v3_users_admin_old_link(): - return await controller.get_conference_attendees(conference_acronym='sfscon2023') - - -# @app.get('/api/conferences/{id_conference}', ) -# async def V3CLONE_get_single_conference(id_conference: uuid.UUID): -# return await controller.opencon_serialize(await controller.get_conference(id_conference=id_conference)) -# - -class PretixRegistrationRequest(pydantic.BaseModel): - order: str - pushToken: Optional[str] = None - device: Optional[Literal['ios', 'android']] = None - - -@app.post('/api/conferences/{id_conference}/pretix', ) -async def V3CLONE_register_pretix_order(id_conference: uuid.UUID, request: PretixRegistrationRequest): - rlog = logging.getLogger('redis_logger') - rlog.info(f"DEVICE {request.device}") - - conference = await controller.get_conference(id_conference=id_conference) - try: - return await controller.register_pretix_order(conference=conference, - order_code=request.order, - push_notification_token=request.pushToken, - registered_in_open_con_app=True, - device=request.device - ) - except Exception as e: - raise HTTPException(status_code=406, detail="Pretix order not found") - - -@app.get('/api/tenants/code/{tenant_code}') -async def V3_GET_ID_TENANT(): - return {'id': uuid.uuid4()} - - -async def tenants_me(pretix_order): - import conferences.models as models - try: - if 'username' in pretix_order: - return { - 'id': uuid.uuid4(), - "role_code": "ADMIN", - 'first_name': f'{pretix_order["username"]}', - 'last_name': f'{pretix_order["username"]}', - 'email': f'{pretix_order["username"]}@opencon.dev', - 'data': {'organization': 'Admin', 'pretix_order': f'__{pretix_order["username"]}__'} - } - - db_pretix_order = await models.PretixOrder.filter(id_pretix_order=pretix_order['pretix_order_id']).get_or_none() - return { - 'id': db_pretix_order.id, - 'first_name': db_pretix_order.first_name, - 'last_name': db_pretix_order.last_name, - 'email': db_pretix_order.email, - 'data': {'organization': db_pretix_order.organization, 'pretix_order': pretix_order['pretix_order_id']} - } - except Exception as e: - raise - - -@app.get('/api/tenants/me') -async def get_me(pretix_order=Depends(pretix_order)): - return await tenants_me(pretix_order=pretix_order) - - -@app.post('/api/conferences/sessions/{id_session}/toggle-bookmark') -async def v3_toggle_bookmark(id_session, pretix_order=Depends(pretix_order)): - return await controller.toggle_bookmark_event_session(pretix_order_id=pretix_order['pretix_order_id'], event_session_id=id_session) - - -@app.get("/api/conferences/{id_conference}/bookmarks") -async def get_my_bookmarks(id_conference: uuid.UUID, pretix_order=Depends(pretix_order)): - return await controller.my_bookmarks(pretix_order_id=pretix_order['pretix_order_id']) - - -class RateEventRequest(pydantic.BaseModel): - rate: int - - -@app.post('/api/conferences/sessions/{id_session}/rate') -async def v3_rate_event(id_session: uuid.UUID, request: RateEventRequest, pretix_order=Depends(pretix_order)): - return await controller.add_stars(pretix_order_id=pretix_order['pretix_order_id'], event_session_id=id_session, stars=request.rate) - - -@app.get('/api/conferences/sessions/{id_session}/rate') -async def v3_rate_event(id_session: uuid.UUID, pretix_order=Depends(pretix_order)): - return await controller.get_stars(pretix_order_id=pretix_order['pretix_order_id'], event_session_id=id_session) - - -def generate_admin_token(username): - JWT_SECRET_KEY = os.getenv('JWT_SECRET_KEY', 'secret') - - payload = { - 'username': username, - 'iat': datetime.datetime.utcnow(), - 'exp': datetime.datetime.utcnow() + datetime.timedelta(days=31), - } - encoded_jwt = jwt.encode(payload, JWT_SECRET_KEY, algorithm='HS256') - - return encoded_jwt - - -def decode_admin_token(token): - JWT_SECRET_KEY = os.getenv('JWT_SECRET_KEY', 'secret') - - decoded_payload = jwt.decode(token, JWT_SECRET_KEY, algorithms=['HS256']) - - return decoded_payload - - -class LoginRequest(pydantic.BaseModel): - username: str - password: str - - -@app.post('/api/tenants/{id_tenant}/sessions') -async def v3_login_admin_with_tenant_not_in_use(id_tenant: uuid.UUID, request: LoginRequest): - if request.username.startswith(os.getenv('LANE_USERNAME_PREFIX')): - return {"token": generate_admin_token(request.username)} - - if request.username != os.getenv('ADMIN_USERNAME'): - raise HTTPException(status_code=403, detail="UNAUTHORIZED") - if request.password != os.getenv('ADMIN_PASSWORD'): - raise HTTPException(status_code=403, detail="UNAUTHORIZED") - - return {"token": generate_admin_token(request.username)} - - -@app.post('/api/tenants/sessions') -async def v3_login_admin(request: LoginRequest): - if request.username.startswith(os.getenv('LANE_USERNAME_PREFIX')): - return {"token": generate_admin_token(request.username)} - - if request.username != os.getenv('ADMIN_USERNAME'): - raise HTTPException(status_code=403, detail="UNAUTHORIZED") - if request.password != os.getenv('ADMIN_PASSWORD'): - raise HTTPException(status_code=403, detail="UNAUTHORIZED") - - return {"token": generate_admin_token(request.username)} - - -class ScanRequest(pydantic.BaseModel): - id_location: Optional[uuid.UUID] - - -@app.post('/api/conferences/scan') -async def v3_scan(request: ScanRequest): - lanes = json.loads(os.getenv('CHECKIN_LANES', '[]')) - - for l in lanes: - if lanes[l] == str(request.id_location): - return {'lane': l, - 'id': str(request.id_location), - 'label_scan_uri': 'http://164.90.234.123:8001/scan/' - } - - raise HTTPException(status_code=403, detail="LOCATION_NOT_RECOGNIZED") diff --git a/src/conferences/api/printers.py b/src/conferences/api/printers.py deleted file mode 100644 index 79ba337..0000000 --- a/src/conferences/api/printers.py +++ /dev/null @@ -1,175 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -import os -import uuid -import json -import logging -import pydantic - -from typing import Optional -from fastapi import Request -from fastapi.exceptions import HTTPException - -from app import get_app -import conferences.models as models -import conferences.controller as controller - -app = get_app() - - -class ScanPretixQRCodeRequest(pydantic.BaseModel): - pretix_response: dict - pretix_checkin_response: Optional[dict] = None - - -''' -/api/conferences/5a25539b-b8f2-4b9d-ad7e-d607bb248835/scans/lanes/5a25539b-b8f2-4b9d-ad7e-d607bb248835/d8cpm24fyuv2nn73zasrzgbcynfcfxd3 -''' - - -@app.post('/api/conferences/{id_conference}z`l/scans/lanes/{id_lane}/{secret}', ) -async def scan_pretix_qr_code(id_conference: uuid.UUID, id_lane: uuid.UUID, secret: str, request: ScanPretixQRCodeRequest): - if not request.pretix_response: - raise HTTPException(status_code=406, detail='PRETIX_RESPONSE_MISSING') - - if request.pretix_response['count'] < 1: - raise HTTPException(status_code=406, detail='PRETIX_RESPONSE_COUNT_MISSING') - - if not request.pretix_response['results'][0]['order']: - raise HTTPException(status_code=406, detail='PRETIX_RESPONSE_ORDER_MISSING') - - order_code = request.pretix_response['results'][0]['order'] - - # try: - # attendee_email = request.pretix_response['results'][0]['attendee_email'] - # attendee_first_name = request.pretix_response['results'][0]['attendee_name_parts']['given_name'] - # attendee_last_name = request.pretix_response['results'][0]['attendee_name_parts']['family_name'] - # company = request.pretix_response['results'][0]['company'] - # except Exception as e: - # logging.critical(f'Failed to parse pretix response: {e}') - # raise HTTPException(status_code=406, detail='PRETIX_RESPONSE_DATA_MISSING') - - conference = await controller.get_conference(id_conference=id_conference) - - lane = await models.Entrance.filter(id=id_lane).get_or_none() - - res = await controller.pretix_qrcode_scanned(conference.id, - secret, - id_lane, - order_code, - # attendee_email, - # attendee_first_name, - # attendee_last_name, - # company, - ) - - pretix_order = await models.PretixOrder.filter(id_pretix_order=order_code).get_or_none() - - pretix_order.nr_printed_labels += 1 - await pretix_order.save() - - text = f"Scanned QR code for order {order_code} on lane {lane.name}, {pretix_order}" - - await controller.add_flow(conference=conference, pretix_order=pretix_order, text=text, - data={'pretix_response': request.pretix_response, - 'pretix_checkin_response': request.pretix_checkin_response}) - - if request.pretix_checkin_response: - if 'status' in request.pretix_checkin_response and request.pretix_checkin_response['status'] == 'error': - reason = request.pretix_checkin_response['reason'] if 'reason' in request.pretix_checkin_response else 'UNKNOWN REASON' - text = f'Checkin failed for order {order_code} on lane {lane.name}, reason: {reason}' - else: - text = f"Checked in order {order_code} on lane {lane.name}" - - await controller.add_flow(conference=conference, pretix_order=pretix_order, text=text, - data={'pretix_response': request.pretix_response, - 'pretix_checkin_response': request.pretix_checkin_response}) - - return res - - -@app.post('/api/printers/unregister/{id_lane}') -async def unregister(id_lane, request: Request): - lane = await models.Entrance.filter(id=id_lane).get_or_none() - if not lane: - raise HTTPException(status_code=404, detail='LANE_NOT_FOUND') - - rlog = logging.getLogger('redis_logger') - - x_forwarded_for = request.headers.get("x-forwarded-for") - if x_forwarded_for: - client_ip = x_forwarded_for.split(",")[0] - else: - client_ip = request.client.host - - rlog.info(f"Printer on lane {lane.name} successfully unregistered from {client_ip}") - - -@app.post('/api/printers/register/{id_lane}') -async def register_printer_and_retrieve_credentials(id_lane, request: Request): - lane = await models.Entrance.filter(id=id_lane).get_or_none() - - if not lane: - raise HTTPException(status_code=404, detail='LANE_NOT_FOUND') - - rlog = logging.getLogger('redis_logger') - - x_forwarded_for = request.headers.get("x-forwarded-for") - if x_forwarded_for: - client_ip = x_forwarded_for.split(",")[0] - else: - client_ip = request.client.host - - conference = await models.Conference.filter(id=lane.conference_id).get_or_none() - - rlog.info(f"Printer on lane {lane.name} successfully registered from {client_ip}") - - LANE2PORT = os.getenv('LANE2PORT', default='{}') - LANE2PORT = json.loads(LANE2PORT) - if lane.name in LANE2PORT: - port = LANE2PORT[lane.name] - else: - raise HTTPException(status_code=404, detail='LANE_PORT_FOUND') - - return { - 'id': str(lane.id), - 'id_conference': str(conference.id), - "name": str(lane.name), - 'external_port': port, - 'pretix': {'token': os.getenv('PRETIX_TOKEN'), - 'checklist_id': os.getenv('PRETIX_CHECKLIST_ID'), - 'event_id': os.getenv('PRETIX_EVENT_ID'), - 'organizer_id': os.getenv('PRETIX_ORGANIZER_ID'), - } - } - - -@app.post('/api/printers/timeout/{id_lane}') -async def timeout_printing(id_lane: uuid.UUID, request: Request): - lane = await models.Entrance.filter(id=id_lane).get_or_none() - if not lane: - raise HTTPException(status_code=404, detail='LANE_NOT_FOUND') - - rlog = logging.getLogger('redis_logger') - - rlog.info(f"TIMEOUT while print on lane {lane.name}") - - return { - 'id': str(lane.id), - } - - -@app.post('/api/printers/printed/{id_lane}/{secret}') -async def successfully_printed(id_lane: uuid.UUID, secret: str, request: Request): - lane = await models.Entrance.filter(id=id_lane).get_or_none() - if not lane: - raise HTTPException(status_code=404, detail='LANE_NOT_FOUND') - - rlog = logging.getLogger('redis_logger') - - rlog.info(f"SUCCESSFULLY PRINTED {secret} on LANE {lane.name}") - - return { - 'id': str(lane.id), - } diff --git a/src/conferences/api/v3.py b/src/conferences/api/v3.py deleted file mode 100644 index ea193fa..0000000 --- a/src/conferences/api/v3.py +++ /dev/null @@ -1,221 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -import os -import jwt -import uuid -import logging -import pydantic -import datetime - -from fastapi import Depends -from typing import Optional -from fastapi import HTTPException - -import shared.ex as ex -from app import get_app -import conferences.controller as controller -from conferences.controller import decode_token - -app = get_app() - -from fastapi import Request - -log = logging.getLogger('conference_logger') - - -def pretix_order(request: Request): - token = request.headers.get('Authorization', None) - - if not token: - log.info("Raising UNAUTHORIZED") - raise HTTPException(status_code=403, detail="UNAUTHORIZED") - - try: - res = decode_token(token.replace('Bearer ', '')) - log.info(f"Accessing with pretix_order: {res['pretix_order_id']}") - return res - except ex.AppException as e: - log.critical(f"Raising {e.id_message}") - raise HTTPException(status_code=e.status_code, detail=e.id_message) - except Exception as e: - - log.info('Trying to decode admin token') - try: - res = decode_admin_token(token.replace('Bearer ', '')) - if res['username'] == os.getenv('ADMIN_USERNAME'): - res['pretix_order_id'] = '__admin__' - res['pretix_order_secret'] = '__admin__' - log.info(f"Accessing with admin token") - return res - - if res['username'].startswith('lane'): - res['pretix_order_id'] = res['username'] - res['pretix_order_secret'] = res['username'] - log.info(f"Accessing with lane token") - return res - raise Exception('Invalid lane user token') - - except Exception as e: - log.critical(f"Raising INTERNAL_SERVER_ERROR {e}") - raise HTTPException(status_code=500, detail='INTERNAL_SERVER_ERROR') - - -class ConferenceImportRequest(pydantic.BaseModel): - default: Optional[bool] = True - xml_content: Optional[str] = None - - -class ConferenceImportRequestResponse(pydantic.BaseModel): - id: str - created: bool - changes: dict - - -@app.post('/api/v3/conferences/import-xml', response_model=ConferenceImportRequestResponse, ) -async def V3CLONE_import_conference_xml_api(): - content = await controller.fetch_xml_content() - XML_URL = os.getenv("XML_URL", None) - - # print("\n"*5) - # print(content) - # print("\n"*5) - # print(XML_URL) - # print("\n"*5) - res = await controller.add_conference(content, XML_URL) - conference = res['conference'] - # print(conference) - # print("\n"*5) - - x = ConferenceImportRequestResponse(id=str(conference.id), created=res['created'], changes=res['changes']) - return x - - -@app.get('/api/v3/conferences/acronym/{acronym}', ) -async def V3CLONE_get_conference_by_acronym(acronym: str): - conference = await controller.get_conference_by_acronym(acronym=acronym) - return {'id': conference.id} - - -@app.get('/api/v3/conferences/users') -async def v3_users_admin_old_link(): - return await controller.get_conference_attendees(conference_acronym='sfscon2023') - - -@app.get('/api/v3/conferences/{id_conference}', ) -async def V3CLONE_get_single_conference(id_conference: uuid.UUID): - return await controller.opencon_serialize(await controller.get_conference(id_conference=id_conference)) - - -class PretixRegistrationRequest(pydantic.BaseModel): - order: str - pushToken: Optional[str] = None - - -@app.post('/api/v3/conferences/{id_conference}/pretix', ) -async def V3CLONE_register_pretix_order(id_conference: uuid.UUID, request: PretixRegistrationRequest): - conference = await controller.get_conference(id_conference=id_conference) - try: - return await controller.register_pretix_order(conference=conference, - order_code=request.order, - push_notification_token=request.pushToken, - registered_in_open_con_app=True - ) - except Exception as e: - raise HTTPException(status_code=406, detail="PRETIX_ORDER_NOT_FOUND") - - -@app.get('/api/v3/tenants/code/{tenant_code}') -async def V3_GET_ID_TENANT(): - return {'id': uuid.uuid4()} - - -async def tenants_me(pretix_order): - import conferences.models as models - try: - if 'username' in pretix_order: - return { - 'id': uuid.uuid4(), - "role_code": "ADMIN", - 'first_name': 'Admin', - 'last_name': 'Admin', - 'email': 'admin@opencon.dev', - 'data': {'organization': 'Admin', 'pretix_order': '__admin__'} - } - - db_pretix_order = await models.PretixOrder.filter(id_pretix_order=pretix_order['pretix_order_id']).get_or_none() - return { - 'id': db_pretix_order.id, - 'first_name': db_pretix_order.first_name, - 'last_name': db_pretix_order.last_name, - 'email': db_pretix_order.email, - 'data': {'organization': db_pretix_order.organization, 'pretix_order': pretix_order['pretix_order_id']} - } - except Exception as e: - raise - - - -@app.get('/api/v3/tenants/me') -async def V3_GET_ME_DEPRECATED(pretix_order=Depends(pretix_order)): - return await tenants_me(pretix_order=pretix_order) - - -@app.post('/api/v3/conferences/sessions/{id_session}/toggle-bookmark') -async def v3_toggle_bookmark(id_session, pretix_order=Depends(pretix_order)): - return await controller.toggle_bookmark_event_session(pretix_order_id=pretix_order['pretix_order_id'], event_session_id=id_session) - - -@app.get("/api/v3/conferences/{id_conference}/bookmarks") -async def get_my_bookmarks(id_conference: uuid.UUID, pretix_order=Depends(pretix_order)): - return await controller.my_bookmarks(pretix_order_id=pretix_order['pretix_order_id']) - - -class RateEventRequest(pydantic.BaseModel): - rate: int - - -@app.post('/api/v3/conferences/sessions/{id_session}/rate') -async def v3_rate_event(id_session: uuid.UUID, request: RateEventRequest, pretix_order=Depends(pretix_order)): - return await controller.add_stars(pretix_order_id=pretix_order['pretix_order_id'], event_session_id=id_session, stars=request.rate) - - -@app.get('/api/v3/conferences/sessions/{id_session}/rate') -async def v3_rate_event(id_session: uuid.UUID, pretix_order=Depends(pretix_order)): - return await controller.get_stars(pretix_order_id=pretix_order['pretix_order_id'], event_session_id=id_session) - - -def generate_admin_token(username): - JWT_SECRET_KEY = os.getenv('JWT_SECRET_KEY', 'secret') - - payload = { - 'username': username, - 'iat': datetime.datetime.utcnow(), - 'exp': datetime.datetime.utcnow() + datetime.timedelta(days=31), - } - encoded_jwt = jwt.encode(payload, JWT_SECRET_KEY, algorithm='HS256') - - return encoded_jwt - - -def decode_admin_token(token): - JWT_SECRET_KEY = os.getenv('JWT_SECRET_KEY', 'secret') - - decoded_payload = jwt.decode(token, JWT_SECRET_KEY, algorithms=['HS256']) - - return decoded_payload - - -class LoginRequest(pydantic.BaseModel): - username: str - password: str - - -@app.post('/api/v3/tenants/{id_tenant}/sessions') -async def v3_login_admin(id_tenant: uuid.UUID, request: LoginRequest): - if request.username != os.getenv('ADMIN_USERNAME'): - raise HTTPException(status_code=403, detail="UNAUTHORIZED") - if request.password != os.getenv('ADMIN_PASSWORD'): - raise HTTPException(status_code=403, detail="UNAUTHORIZED") - - return {"token": generate_admin_token(request.username)} diff --git a/src/conferences/controller/__init__.py b/src/conferences/controller/__init__.py deleted file mode 100644 index b7185b9..0000000 --- a/src/conferences/controller/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -from .conference import * -from .pretix import * -from .bookmarks import * -from .ratings import * -from .controller import * -from .notifications import * - diff --git a/src/conferences/controller/bookmarks.py b/src/conferences/controller/bookmarks.py deleted file mode 100644 index 10d1d30..0000000 --- a/src/conferences/controller/bookmarks.py +++ /dev/null @@ -1,112 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -import os -import json -import uuid -import redis -import logging - -import shared.ex as ex -import conferences.models as models - -log = logging.getLogger('conference_logger') -current_file_dir = os.path.dirname(os.path.abspath(__file__)) - -rlog = logging.getLogger('redis_logger') - - -async def toggle_bookmark_event_session(pretix_order_id: str, event_session_id: uuid.UUID): - try: - pretix_order = await models.PretixOrder.filter(id_pretix_order=pretix_order_id).prefetch_related('conference').get_or_none() - if not pretix_order: - raise ex.AppException(id_message='PRETIX_ORDER_NOT_FOUND', message='Order not found') - - from .conference import get_conference, get_pretix_order, add_flow - conference = pretix_order.conference - - event_session = await models.EventSession.filter(id=event_session_id).get_or_none() - if not event_session: - raise ex.AppException(id_message='EVENT_SESSION_NOT_FOUND', message='Event session not found') - - bookmark = await models.Bookmark.filter(pretix_order=pretix_order, event_session=event_session).get_or_none() - if not bookmark: - await models.Bookmark.create(pretix_order=pretix_order, event_session=event_session) - rlog.info(f'User {pretix_order.email} bookmarked event {event_session.title}') - - await add_flow(conference, pretix_order, f'User {pretix_order.email} bookmarked event {event_session.title}') - - return {'bookmarked': True} - - await bookmark.delete() - rlog.info(f'User {pretix_order.email} removed bookmark from event {event_session.title}') - - await add_flow(conference, pretix_order, f'User {pretix_order.email} removed bookmark from event {event_session.title}') - - return {'bookmarked': False} - - except Exception as e: - log.critical(f'Failed to toggle bookmark for {pretix_order_id} and {event_session_id} :: {e}') - raise - - -async def my_bookmarks(pretix_order_id: str): - try: - pretix_order = await models.PretixOrder.filter(id_pretix_order=pretix_order_id).get_or_none() - if not pretix_order: - raise ex.AppException(id_message='PRETIX_ORDER_NOT_FOUND', message='Order not found') - - return set([str(b.event_session_id) for b in await models.Bookmark.filter(pretix_order=pretix_order).all()]) - - except Exception as e: - raise - - -async def send_changes_to_bookmakers(conference, changes, test: bool = True): - changed_sessions = changes.keys() - - event_sessions = await models.EventSession.filter(conference=conference, id__in=changed_sessions).prefetch_related('bookmarks', - 'room', - 'bookmarks__pretix_order').all() - - if not event_sessions: - return {'nr_enqueued': 0, 'test': test, 'logs': []} - - nr_enqueued = 0 - - with redis.Redis(host=os.getenv('REDIS_SERVER'), port=6379, db=0) as r: - - for event_session in event_sessions: - event_change = changes[str(event_session.id)] - for bookmark in event_session.bookmarks: - if bookmark.pretix_order.push_notification_token: - - _start_dt = event_change['new_start_timestamp'] if 'new_start_timestamp' in event_change else event_session.start_date - _start_date = _start_dt.strftime('%d %b') - _start_time = _start_dt.strftime('%H:%M') - - text = f'The event "{event_session.title}" time has been changed to {_start_time} {_start_date} in room {event_session.room.name}' - - push_notification_token = models.PushNotificationQueue( - pretix_order=bookmark.pretix_order, - subject='Event time has been changed', - message=text, - ) - await push_notification_token.save() - nr_enqueued += 1 - - try: - # !!! Synchronous call - ignore pycharm warning about coroutine, redis is not aioredis - r.rpush('opencon_push_notification', json.dumps({'id': str(push_notification_token.id), - 'expo_push_notification_token': bookmark.pretix_order.push_notification_token, - 'subject': push_notification_token.subject, - 'message': push_notification_token.message - })) - except Exception as e: - log.critical(f'Failed to enqueue push notification for {push_notification_token.pretix_order.id_pretix_order}') - raise - - # for message in p.listen(): - # print(message) - - return {'nr_enqueued': nr_enqueued} diff --git a/src/conferences/controller/conference.py b/src/conferences/controller/conference.py deleted file mode 100644 index 688e469..0000000 --- a/src/conferences/controller/conference.py +++ /dev/null @@ -1,767 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -import os -import csv -import yaml -import uuid -import json -import httpx -import random -import slugify -import logging -import datetime -import xmltodict -import tortoise.timezone - -from fastapi import HTTPException, status - -import shared.ex as ex -import conferences.models as models - -log = logging.getLogger('conference_logger') -current_file_dir = os.path.dirname(os.path.abspath(__file__)) - -rlog = logging.getLogger('redis_logger') - - -async def db_add_conference(name, acronym, source_uri): - try: - conference = await models.Conference.create(name=name, acronym=acronym, source_uri=source_uri) - await models.Location.create(name='Noi Tech Park', slug='noi', conference=conference, ) - - except Exception as e: - log.critical(f'Error adding conference {name} {acronym} {source_uri} :: {str(e)}') - raise - - try: - entrances = os.getenv("CHECKIN_LANES", None) - if entrances: - entrances = json.loads(entrances) - - for entrance in entrances: - await models.Entrance.create(name=entrance, id=entrances[entrance], conference=conference, ) - - except Exception as e: - log.critical(f'Error parsing ENTRANCES :: {str(e)}') - raise - - return conference - - -async def read_xml_file(fname='sfscon2023.xml'): - with open(fname, 'r') as f: - content = xmltodict.parse(f.read(), encoding='utf-8') - return content['schedule'] - - -async def db_add_or_update_tracks(conference, content_tracks): - order = 0 - - tracks_by_name = {} - cvt = {'#text': 'name', '@color': 'color'} - - for track in content_tracks['track']: - order += 1 - defaults = {'conference': conference, 'order': order, 'color': 'black'} - - # TODO: Remove this after Luka fix it in XML - - if track == 'Main track - Main track': - track = 'Main track' - - if type(track) == str: - defaults['name'] = track - else: - for k, v in track.items(): - if k in cvt: - defaults[cvt[k]] = v - - defaults['slug'] = slugify.slugify(defaults['name']) - - try: - db_track = await models.Track.filter(conference=conference, name=defaults['name']).first() - if not db_track: - db_track = await models.Track.create(**defaults) - else: - await db_track.update_from_dict(defaults) - - except Exception as e: - log.critical(f'Error adding track {defaults["name"]} :: {str(e)}') - raise - - tracks_by_name[db_track.name] = db_track - - if 'SFSCON' not in tracks_by_name: - db_track = await models.Track.filter(conference=conference, name='SFSCON').get_or_none() - if not db_track: - db_track = await models.Track.create(**{'conference': conference, 'order': -1, 'name': f'SFSCON', 'slug': f'sfscon', 'color': 'black'}) - - tracks_by_name['SFSCON'] = db_track - - return tracks_by_name - - -async def convert_xml_to_dict(xml_text): - content = xmltodict.parse(xml_text, encoding='utf-8') - return content['schedule'] - - -async def fetch_xml_content(): - XML_URL = os.getenv("XML_URL", None) - - if not XML_URL: - raise ex.AppException('XML_URL_NOT_SET', 'XML_URL not set') - - async with httpx.AsyncClient() as client: - try: - res = await client.get(XML_URL) - - if res.status_code != 200: - raise ex.AppException('ERROR_FETCHING_XML', XML_URL) - - # for debugging purposes - with open('/tmp/last_saved_xml.xml', 'wt') as f: - f.write(res.text) - - return await convert_xml_to_dict(res.text) - except Exception as e: - log.critical(f'Error fetching XML from {XML_URL} :: {str(e)}') - raise - - -async def add_sessions(conference, content, tracks_by_name): - db_location = await models.Location.filter(conference=conference, slug='noi').get_or_none() - - changes = {} - - await models.ConferenceLecturer.filter(conference=conference).delete() - - def get_or_raise(key, obj): - if key not in obj: - raise HTTPException(status_code=status.HTTP_406_NOT_ACCEPTABLE, - detail=f"{key.upper()}_NOT_FOUND") - return obj[key] - - # test for duplicated unique_id - - events_by_unique_id = {} - - for day in content['day']: - - for room in day['room']: - room_event = room['event'] - if type(room_event) == dict: - room_event = [room_event] - for event in room_event: - if type(event) != dict: - continue - unique_id = get_or_raise('@unique_id', event) - if unique_id == '2023day1event5': - ... - if unique_id in events_by_unique_id: - raise HTTPException(status_code=status.HTTP_406_NOT_ACCEPTABLE, detail=f"EVENT_UNIQUE_ID_ALREADY_EXISTS:{unique_id}") - events_by_unique_id[unique_id] = unique_id - - for day in content['day']: - - date = day.get('@date', None) - if not date: - raise HTTPException(status_code=status.HTTP_406_NOT_ACCEPTABLE, - detail="DAY_DATE_NOT_VALID") - - room_by_name = {} - - for room in day['room']: - - room_name = room.get('@name', None) - - if not room_name: - raise HTTPException(status_code=status.HTTP_406_NOT_ACCEPTABLE, - detail="ROOM_NAME_NOT_VALID") - - room_slug = slugify.slugify(room_name) - - db_room = await models.Room.filter(conference=conference, - location=db_location, - slug=room_slug).first() - - if not db_room: - db_room = await models.Room.create(conference=conference, - location=db_location, - name=room_name, slug=room_slug) - - if db_room.name not in room_by_name: - room_by_name[db_room.name] = db_room - - room_event = room['event'] - if type(room_event) == dict: - room_event = [room_event] - for event in room_event: - - # try: - # if event['@id'] == '654a0e4cbd1d807a6ed7109ee6dc4ddb16ef4048a852e': - # print("\nFIND FSFE\n") - # except Exception as e: - # ... - # else: - # ... - # print(event['title']) - - if type(event) != dict: - continue - unique_id = get_or_raise('@unique_id', event) - - title = get_or_raise('title', event) - slug = slugify.slugify(title) - track_name = event.get('track', None) - if type(track_name) == dict: - track_name = track_name['#text'] - - # TODO: Remove this after Luka fix it in XML - - if track_name in ('SFSCON - Main track', 'Main track - Main track'): - track_name = 'SFSCON' # 'Main track' - - track = tracks_by_name[track_name] if track_name and track_name in tracks_by_name else None - # event_type = event.get('@type', None) - event_start = event.get('start', None) - description = event.get('description', None) - abstract = event.get('abstract', None) - - no_bookmark = event.get('@no_bookmark', False) - bookmarkable = not no_bookmark - rateable = bookmarkable - - if not bookmarkable: - ... - - if event_start and len(event_start) == 5: - event_start = datetime.datetime(year=int(date[0:4]), - month=int(date[5:7]), - day=int(date[8:10]), - hour=int(event_start[0:2]), - minute=int(event_start[3:5])) - else: - event_start = None - - event_duration = event.get('duration', None) - if event_duration and len(event_duration) == 5: - event_duration = int(event_duration[0:2]) * 60 * 60 + int(event_duration[3:5]) * 60 - else: - event_duration = None - - try: - track_name = track.name - room_name = db_room.name - - if room_name == 'Seminar 2': - event_start += datetime.timedelta(milliseconds=1) - if room_name == 'Seminar 3': - event_start += datetime.timedelta(milliseconds=2) - if room_name == 'Seminar 4': - event_start += datetime.timedelta(milliseconds=3) - if room_name.startswith('Auditorium'): - event_start += datetime.timedelta(milliseconds=4) - - db_event = await models.EventSession.filter(conference=conference, unique_id=unique_id).first() - # print("db_event", db_event) - if unique_id == '2023day1event5': - ... - - str_start_time = event_start.strftime('%Y-%m-%d %H:%M:%S') if event_start else None - - if not db_event: - db_event = await models.EventSession.create(conference=conference, - title=title, - abstract=abstract, - description=description, - unique_id=unique_id, - bookmarkable=bookmarkable, - rateable=rateable, - track=track, - room=db_room, - str_start_time=str_start_time, - start_date=event_start, - end_date=event_start + datetime.timedelta(seconds=event_duration) if event_start and event_duration else None, - ) - - await models.StarredSession.create(event_session=db_event, - nr_votes=0, - total_stars=0, - avg_stars=0) - else: - - event_start = tortoise.timezone.make_aware(event_start) - if event_start != db_event.start_date: - changes[str(db_event.id)] = {'old_start_timestamp': db_event.start_date, - 'new_start_timestamp': event_start} - - await db_event.update_from_dict({'title': title, 'abstract': abstract, - 'description': description, - 'unique_id': unique_id, - 'bookmarkable': bookmarkable, - 'rateable': rateable, - 'track': track, - 'db_room': db_room, - 'str_start_time': str_start_time, - 'start_date': event_start, - 'end_date': event_start + datetime.timedelta(seconds=event_duration) if event_start and event_duration else None}) - - await db_event.save() - - except Exception as e: - log.critical(f'Error adding event {title} :: {str(e)}') - raise - - persons = event.get('persons', []) - - if persons: - persons = persons['person'] - - if type(persons) == dict: - persons = [persons] - - event_persons = [] - - for person in persons: - - try: - db_person = await models.ConferenceLecturer.filter(conference=conference, external_id=person['@id']).get_or_none() - except Exception as e: - log.critical(f'Error adding person {person["#text"]} :: {str(e)}') - raise - - display_name = person['#text'] - # bio = person.get('@bio', None) - - bio = models.ConferenceLecturer.fix_bio(person.get('@bio', None)) - - pid = person.get('@id', None) - organization = person.get('@organization', None) - thumbnail_url = person.get('@thumbnail', None) - first_name = display_name.split(' ')[0].capitalize() - last_name = ' '.join(display_name.split(' ')[1:]).capitalize() - social_networks = person.get('@socials', None) - social_networks = json.loads(social_networks) if social_networks else [] - - if not db_person: - try: - db_person = await models.ConferenceLecturer.create(conference=conference, - external_id=pid, - bio=bio, - social_networks=social_networks, - first_name=first_name, - last_name=last_name, - display_name=display_name, - thumbnail_url=thumbnail_url, - slug=slugify.slugify(display_name), - organization=organization, - ) - except Exception as e: - log.critical(f'Error adding person {person["#text"]} :: {str(e)}') - raise - else: - await db_person.update_from_dict({'bio': bio, - 'social_networks': social_networks, - 'first_name': first_name, - 'last_name': last_name, - 'display_name': display_name, - 'thumbnail_url': thumbnail_url, - 'slug': slugify.slugify(display_name), - 'organization': organization, - }) - - await db_person.save() - - event_persons.append(db_person) - - if event_persons: - await db_event.fetch_related('lecturers') - await db_event.lecturers.add(*event_persons) - - return changes - - -async def add_conference(content: dict, source_uri: str, force: bool = False): - conference = await models.Conference.filter(source_uri=source_uri).get_or_none() - - created = False - if not conference: - created = True - conference = await db_add_conference(content['conference']['title'], - content['conference']['acronym'], - source_uri=source_uri - ) - - import shared.utils as utils - checksum = utils.calculate_md5_checksum_for_dict(content) - - if not force and conference.source_document_checksum == checksum: - return {'conference': conference, - 'created': False, - 'changes': {}, - 'checksum_matches': True, - } - else: - conference.source_document_checksum = checksum - await conference.save() - - content_tracks = content.get('tracks', []) - - tracks_by_name = await db_add_or_update_tracks(conference, content_tracks) - changes = await add_sessions(conference, content, tracks_by_name) - if created: - changes = {} - - changes_updated = None - if changes: - from conferences.controller import send_changes_to_bookmakers - changes_updated = await send_changes_to_bookmakers(conference, changes, test=True) - - return {'conference': conference, - 'created': created, - 'checksum_matches': False, - 'changes': changes, - 'changes_updated': changes_updated - } - - -async def get_conference_sessions(conference_acronym): - conference = await models.Conference.filter(acronym=conference_acronym).get_or_none() - if not conference: - raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, - detail="CONFERENCE_NOT_FOUND") - - conference = await get_conference(conference.id) - serialized = await opencon_serialize(conference) - - sessions = [] - - bookmark_per_event = {} - for bpe in await models.Bookmark.filter(pretix_order__conference=conference).prefetch_related('pretix_order').all(): - if str(bpe.event_session_id) not in bookmark_per_event: - bookmark_per_event[str(bpe.event_session_id)] = 0 - bookmark_per_event[str(bpe.event_session_id)] += 1 - - rate_per_event = {} - for rpe in await models.StarredSession.filter(event_session__conference=conference).prefetch_related('event_session').all(): - rate_per_event[str(rpe.event_session_id)] = rpe.total_stars / rpe.nr_votes if rpe.nr_votes else ' ' - - for day in serialized['conference']['idx']['ordered_sessions_by_days']: - for id_session in serialized['conference']['idx']['ordered_sessions_by_days'][day]: - session = serialized['conference']['db']['sessions'][id_session] - - - - sessions.append({ - 'event': session['title'], - 'speakers': ', '.join([serialized['conference']['db']['lecturers'][id_lecturer]['display_name'] for id_lecturer in session['id_lecturers']]), - 'date': session['date'], - 'bookmarks': bookmark_per_event[str(id_session)] if id_session in bookmark_per_event else 0, - 'rating': rate_per_event[str(id_session)] if str(id_session) in rate_per_event else ' ' - - # 'bookmarks': random.randint(0, 100), - # 'rating': round(random.randint(0, 500) / 100, 2) - }) - - return {'header': [ - {'name': 'Event', 'key': 'event', 'width': '100px'}, - {'name': 'Speakers', 'key': 'speakers', 'width': '100px'}, - {'name': 'Date', 'key': 'date', 'width': '100px'}, - {'name': 'Bookmarks', 'key': 'bookmarks', 'width': '100px'}, - {'name': 'Rating', 'key': 'rating', 'width': '100px'}, - ], 'data': sessions} - - -async def find_event_by_unique_id(conferece, unique_id): - return await models.EventSession.filter(conference=conferece, unique_id=unique_id).get_or_none() - - -async def get_all_conferences(): - try: - - logger = logging.getLogger('redis_logger') - logger.info('This is a test log message') - - x = [conference.serialize() for conference in await models.Conference.all()] - return x - except Exception as e: - log.critical(f'Error getting all conferences :: {str(e)}') - raise - - -async def get_pretix_order(conference: models.Conference, id_pretix_order: str): - try: - return await models.PretixOrder.filter(conference=conference, id_pretix_order=id_pretix_order).get_or_none() - except Exception as e: - log.critical(f'Error getting pretix order {id_pretix_order} :: {str(e)}') - raise - - -async def get_conference(id_conference: uuid.UUID): - conference = await models.Conference.filter(id=id_conference).prefetch_related('tracks', - 'locations', - 'event_sessions', - 'event_sessions__track', - 'event_sessions__room', - # 'event_sessions__room__location', - 'event_sessions__lecturers', - 'rooms', - # 'rooms__location', - 'lecturers', - 'lecturers__event_sessions', - 'event_sessions__starred_session' - ).get_or_none() - return conference - - -async def opencon_serialize(conference): - db = {} - idx = {} - - with open(current_file_dir + '/../../tests/assets/sfs2023streaming.yaml', 'r') as f: - streaming_links = yaml.load(f, yaml.Loader) - - idx['ordered_sponsors'] = [] - - db['tracks'] = {str(track.id): track.serialize() for track in conference.tracks} - db['locations'] = {str(location.id): location.serialize() for location in conference.locations} - db['rooms'] = {str(room.id): room.serialize() for room in conference.rooms} - db['sessions'] = {str(session.id): session.serialize(streaming_links) for session in conference.event_sessions} - db['lecturers'] = {str(lecturer.id): lecturer.serialize() for lecturer in conference.lecturers} - db['sponsors'] = {} - - days = set() - for s in db['sessions'].values(): - days.add(s['date']) - - idx['ordered_lecturers_by_display_name'] = [l['id'] for l in sorted(db['lecturers'].values(), key=lambda x: x['display_name'])] - idx['ordered_sessions_by_days'] = {d: [s['id'] for s in db['sessions'].values() if s['date'] == d] for d in sorted(list(days))} - idx['ordered_sessions_by_tracks'] = {t: [s['id'] for s in db['sessions'].values() if s['id_track'] == t] for t in db['tracks'].keys()} - idx['days'] = sorted(list(days)) - - conference_avg_rating = {'rates_by_session': {}} - for session in conference.event_sessions: - if session.starred_session and session.starred_session.nr_votes: - conference_avg_rating['rates_by_session'][str(session.id)] = [session.starred_session.avg_stars, - session.starred_session.nr_votes] - - with open(current_file_dir + '/../../tests/assets/sfscon2023sponsors.yaml', 'r') as f: - db['sponsors'] = yaml.load(f, yaml.Loader) - - re_ordered_lecturers = {} - for l in idx['ordered_lecturers_by_display_name']: - re_ordered_lecturers[l] = db['lecturers'][l] - - db['lecturers'] = re_ordered_lecturers - - return {'last_updated': str(tortoise.timezone.make_naive(conference.last_updated)), - 'conference_avg_rating': conference_avg_rating, - 'next_try_in_ms': 3000000, - 'conference': {'acronym': str(conference.acronym), - 'db': db, - 'idx': idx - } - } - - -async def get_conference_by_acronym(acronym: str): - acronym = 'sfscon-2023' - return await models.Conference.filter(acronym=acronym).get_or_none() - - -# def now_timestamp(): -# return datetime.datetime.now() - - -# def sec2minutes(seconds): -# mm = seconds // 60 -# ss = seconds % 60 -# return f'{mm}:{ss:02}' - - -# async def extract_all_session_event_which_starts_in_next_5_minutes(conference, now=None): -# if not now: -# try: -# now_time = tortoise.timezone.make_aware(datetime.datetime.now()) -# except Exception as e: -# raise -# -# else: -# now_time = now -# -# sessions = await models.EventSession.filter(conference=conference, -# start_date__gte=now_time, -# start_date__lte=now_time + datetime.timedelta(minutes=5)).all() -# -# to_notify_by_session_emails = {} -# to_notify_by_session = {} -# if sessions: -# for session in sessions: -# bookmarkers_to_notify = await models.Bookmark.filter(event_session=session, -# pretix_order__push_notification_token__isnull=False).prefetch_related('pretix_order').all() -# -# to_notify_by_session[str(session.id)] = [str(bookmark.pretix_order.id) for bookmark in bookmarkers_to_notify] -# to_notify_by_session_emails[session.title] = {'start_at': str(session.start_date), -# 'start_in': sec2minutes((session.start_date - now_time).seconds) + ' minutes', -# 'to_notify': [bookmark.pretix_order.email for bookmark in bookmarkers_to_notify]} -# -# return {'ids': to_notify_by_session, -# 'human_readable': to_notify_by_session_emails} - - -async def get_csv_attendees(acronym: str): - tmp_file = f'/tmp/{uuid.uuid4()}.csv' - - conference = await get_conference_by_acronym(acronym=acronym) - if not conference: - raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, - detail="CONFERENCE_NOT_FOUND") - - attendees = await models.PretixOrder.filter(conference=conference, - nr_printed_labels__gt=0 - ).order_by('first_name').all() - - with open(tmp_file, 'wt') as f: - - writer = csv.writer(f) - writer.writerow(['First Name', 'Last Name', 'Email', 'Organization', 'Pretix Order']) - for pretix_order in attendees: - writer.writerow([pretix_order.first_name, - pretix_order.last_name, - pretix_order.email, - pretix_order.organization, - pretix_order.id_pretix_order - ]) - - return tmp_file - - -async def get_csv_talks(acronym: str): - tmp_file = f'/tmp/{uuid.uuid4()}.csv' - - conference = await get_conference_by_acronym(acronym=acronym) - if not conference: - raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, - detail="CONFERENCE_NOT_FOUND") - - conference = await get_conference(conference.id) - serialized = await opencon_serialize(conference) - - bookmark_per_event = {} - for bpe in await models.Bookmark.filter(pretix_order__conference=conference).prefetch_related('pretix_order').all(): - if str(bpe.event_session_id) not in bookmark_per_event: - bookmark_per_event[str(bpe.event_session_id)] = 0 - bookmark_per_event[str(bpe.event_session_id)] += 1 - - rate_per_event = {} - for rpe in await models.StarredSession.filter(event_session__conference=conference).prefetch_related('event_session').all(): - rate_per_event[str(rpe.event_session_id)] = rpe.total_stars / rpe.nr_votes if rpe.nr_votes else '' - - - with open(tmp_file, 'wt') as f: - - writer = csv.writer(f) - writer.writerow(['Event', 'Speakers', 'Date', 'Bookmarks', 'Rating']) - for day in serialized['conference']['idx']['ordered_sessions_by_days']: - for id_session in serialized['conference']['idx']['ordered_sessions_by_days'][day]: - session = serialized['conference']['db']['sessions'][id_session] - - writer.writerow([session['title'], - ', '.join([serialized['conference']['db']['lecturers'][id_lecturer]['display_name'] for id_lecturer in session['id_lecturers']]), - session['date'], - bookmark_per_event[str(id_session)] if id_session in bookmark_per_event else 0, - rate_per_event[str(id_session)] if str(id_session) in rate_per_event else '' - # random.randint(0, 100), - # round(random.randint(0, 500) / 100, 2) - ]) - - return tmp_file - - -async def add_flow(conference: models.Conference | None, pretix_order: models.PretixOrder | None, text: str | None, data: dict | None = None): - if not text and not data: - raise HTTPException(status_code=status.HTTP_406_NOT_ACCEPTABLE, - detail="TEXT_OR_DATA_MUST_BE_SET") - - if not conference and pretix_order: - conference = pretix_order.conference - - flow_id = uuid.uuid4() - await models.Flow.create(id=flow_id, - conference=conference, - pretix_order=pretix_order, - text=text, - data=data) - - return {'id': flow_id} - - -async def get_flows(conference: models.Conference, page: int, per_page: int, search: str): - offset = (page - 1) * per_page - - query = models.Flow.filter(conference=conference).filter(text__icontains=search) - - flows = await query.order_by('-created_at').offset(offset).limit(per_page).all() - count = await query.count() - - summary = { - 'page': page, - 'per_page': per_page, - 'total_count': count, - 'total_pages': count // per_page + 1 if count % per_page else count // per_page, - 'previous_page': page - 1 if page > 1 else None, - 'next_page': page + 1 if page * per_page < count else None, - } - - return {'summary': summary, 'items': [flow.serialize() for flow in flows], - 'columns': [ - 'created', - 'pretix_order', - 'text', - ]} - - -async def get_dashboard(acronym: str): - conference = await get_conference_by_acronym(acronym=acronym) - - organizations = set() - for pretix_order in await models.PretixOrder.filter(conference=conference).all(): - if pretix_order.organization: - org = pretix_order.organization.strip().lower() - organizations.add(org) - - registered_users = 'N/A' - async with httpx.AsyncClient() as client: - try: - PRETIX_ORGANIZER_ID = os.getenv('PRETIX_ORGANIZER_ID', None) - PRETIX_EVENT_ID = os.getenv('PRETIX_EVENT_ID', None) - PRETIX_CHECKLIST_ID = os.getenv('PRETIX_CHECKLIST_ID', None) - PRETIX_TOKEN = os.getenv('PRETIX_TOKEN', None) - - url = f'https://pretix.eu/api/v1/organizers/{PRETIX_ORGANIZER_ID}/events/{PRETIX_EVENT_ID}/checkinlists/{PRETIX_CHECKLIST_ID}/status/' - - log.debug('Creating get request to ' + url) - - res = await client.get(url, headers={'Authorization': f'Token {PRETIX_TOKEN}'}) - jres = res.json() - - registered_users = jres['items'][0]['position_count'] + jres['items'][1]['position_count'] - attendees = jres['items'][0]['checkin_count'] + jres['items'][1]['checkin_count'] - - except Exception as e: - log.critical(f'Error getting info from pretix') - - from tortoise.queryset import Q - - flt = Q(Q(conference=conference), Q(Q(registered_in_open_con_app=True), Q(registered_from_device_type__isnull=False), join_type='OR'), join_type='AND') - - return [ - {'name': 'Registered users', 'value': registered_users}, - {'name': 'Attendees', 'value': attendees}, - {'name': 'SFSCON app users', 'value': await models.PretixOrder.filter(flt).count()}, - {'name': 'Organisations', 'value': len(organizations)}, - {'name': 'Total bookmarks', 'value': await models.Bookmark.filter(event_session__conference=conference).prefetch_related('event_session').count()}, - {'name': 'Ratings received', 'value': await models.Star.filter(event_session__conference=conference).prefetch_related('event_session').count()} - ] diff --git a/src/conferences/controller/controller.py b/src/conferences/controller/controller.py deleted file mode 100644 index 8ff2b3f..0000000 --- a/src/conferences/controller/controller.py +++ /dev/null @@ -1,76 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -import os -import jwt -import json -import logging - -import shared.ex as ex -import conferences.models as models - -log = logging.getLogger('conference_logger') -current_file_dir = os.path.dirname(os.path.abspath(__file__)) - -rlog = logging.getLogger('redis_logger') - - -async def get_conference_attendees(conference_acronym: str, page: int = 1, per_page: int = 7, search: str = ''): - # if not hasattr('get_conference_attendees', 'fake_attendees'): - # - # with open(current_file_dir+'/../../tests/assets/fake_attendees.json', 'rt') as f: - # all_fake_attendees = json.loads(f.read()) - # - # fake_attendees = [] - # if not search: - # fake_attendees = all_fake_attendees - # - # else: - # for attendee in all_fake_attendees: - # if search.lower() in attendee['first_name'].lower() or search.lower() in attendee['last_name'].lower() or search.lower() in attendee['organization'].lower() or search.lower() in \ - # attendee['email'].lower() or search.lower() in attendee['pretix_order'].lower(): - # fake_attendees.append(attendee) - # - - conference = await models.Conference.filter(acronym=conference_acronym).get_or_none() - - attendees = [a.serialize() for a in await models.PretixOrder.filter(conference=conference, nr_printed_labels__gt=0).order_by('first_name').all()] - - total_pages = len(attendees) / per_page - if len(attendees) // per_page != len(attendees) / per_page: - total_pages += 1 - - total_pages = int(total_pages) - - prev_page = page - 1 if page > 1 else None - next_page = page + 1 if page < total_pages else None - - summary = { - "total_items": len(attendees), - "total_pages": total_pages, - "page": page, - "per_page": per_page, - "previous_page": prev_page, - "next_page": next_page, - } - - offset = (page - 1) * per_page - - return {'header': [ - {'name': 'First Name', 'key': 'first_name', 'width': '100px'}, - {'name': 'Last Name', 'key': 'last_name', 'width': '100px'}, - {'name': 'Organization', 'key': 'organization', 'width': '100px'}, - {'name': 'Email', 'key': 'email', 'width': '100px'}, - {'name': 'Pretix Order', 'key': 'pretix_order', 'width': '100px'}, - {'name': 'Has SFSCON app', 'key': 'has_app', 'width': '100px'}, - ], - 'summary': summary, - - 'data': attendees[offset:offset + per_page]} - - -def decode_token(token): - JWT_SECRET_KEY = os.getenv('JWT_SECRET_KEY', 'secret') - - decoded_payload = jwt.decode(token, JWT_SECRET_KEY, algorithms=['HS256']) - return decoded_payload diff --git a/src/conferences/controller/notifications.py b/src/conferences/controller/notifications.py deleted file mode 100644 index fb7ad8f..0000000 --- a/src/conferences/controller/notifications.py +++ /dev/null @@ -1,157 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -import os -import json -import redis -import logging -import datetime - -import tortoise.timezone - -import shared.ex as ex -from .conference import add_flow -import conferences.models as models - -log = logging.getLogger('conference_logger') -current_file_dir = os.path.dirname(os.path.abspath(__file__)) - -rlog = logging.getLogger('redis_logger') - - -def sec2minutes(seconds): - mm = seconds // 60 - ss = seconds % 60 - return f'{mm}:{ss:02}' - - -async def extract_all_session_event_which_starts_in_next_5_minutes(conference, now=None): - if not now: - now = tortoise.timezone.now() - now = now + datetime.timedelta(hours=1) - else: - if tortoise.timezone.is_naive(now): - now = tortoise.timezone.make_aware(now) - - q = models.EventSession.filter(conference=conference, - start_date__gte=now, - start_date__lte=now + datetime.timedelta(minutes=5)) - print(q.sql()) - - sessions = await models.EventSession.filter(conference=conference, - start_date__gte=now, - start_date__lte=now + datetime.timedelta(minutes=5)).all() - - to_notify_by_session_emails = {} - to_notify_by_session = {} - if sessions: - for session in sessions: - bookmarkers_to_notify = await models.Bookmark.filter(event_session=session, - pretix_order__push_notification_token__isnull=False).prefetch_related('pretix_order').all() - - to_notify_by_session[str(session.id)] = [str(bookmark.pretix_order.id) for bookmark in bookmarkers_to_notify] - to_notify_by_session_emails[session.title] = {'start_at': str(session.start_date), - 'start_in': sec2minutes((session.start_date - now).seconds) + ' minutes', - 'to_notify': [bookmark.pretix_order.email for bookmark in bookmarkers_to_notify]} - - return {'ids': to_notify_by_session, - 'human_readable': to_notify_by_session_emails, - 'now': str(now) - } - - -async def send_notifications_5_minute_before_start(conference: models.Conference, now_time: datetime.datetime = None, test_only: bool = False): - # let see what we have 9 hours before start - res = await extract_all_session_event_which_starts_in_next_5_minutes(conference, now=now_time) - now_time = res['now'] - return await enqueue_5minute_before_notifications(conference, res['ids'], test_only=test_only, now=now_time) - - -async def enqueue_notification(pretix_order: models.PretixOrder, subject: str, message: str): - # pretix_order = await models.PretixOrder.filter(id_pretix_order=id_pretix_order).get_or_none() - # if not pretix_order: - # raise ex.AppException('PRETIX_ORDER_NOT_FOUND', id_pretix_order) - - if not pretix_order.push_notification_token: - raise ex.AppException('PUSH_NOTIFICATION_TOKEN_NOT_SET', pretix_order.id) - - with redis.Redis(host=os.getenv('REDIS_SERVER'), port=6379, db=0) as r: - push_notification_token = models.PushNotificationQueue( - pretix_order=pretix_order, - subject=subject, - message=message, - ) - await push_notification_token.save() - - # !!! Synchronous call - ignore pycharm warning about coroutine, redis is not aioredis - r.rpush('opencon_push_notification', json.dumps({'id': str(push_notification_token.id), - 'expo_push_notification_token': pretix_order.push_notification_token, - 'subject': subject, - 'message': message - })) - - -async def enqueue_5minute_before_notifications(conference, event_id_2_user_ids, test_only=False, now=None): - log.info(f"enqueue_5minute_before_notifications: {conference.acronym}") - - eids = list(event_id_2_user_ids.keys()) - if not eids: - log.info('No events to enqueue notifications for 5 minute before start') - return {'enqueued_messages': 0, 'test_only': test_only, 'now': str(now)} - - events = [e for e in await models.EventSession.filter(id__in=eids, notification5min_sent__isnull=True).prefetch_related('room').all()] - - if not events: - log.info('No events that are not already notified to enqueue notifications for 5 minute before start') - return {'enqueued_messages': 0, 'test_only': test_only, 'now': str(now)} - - log.info(f'Found {len(events)} events to enqueue notifications for 5 minute before start') - - users2notify = set() - for event in events: - for user_id in event_id_2_user_ids[str(event.id)]: - users2notify.add(user_id) - - log.info(f'Found {len(users2notify)} users to enqueue notifications for 5 minute before start') - - users2notify = {str(u.id): u for u in await models.PretixOrder.filter(id__in=users2notify).all()} - - if not users2notify: - log.info(f'nno users to be notieied for 5 minute before start') - return {'enqueued_messages': 0, 'test_only': test_only, 'now': str(now)} - - notified = 0 - _log = [] - rlog_1_msg = [] - for event in events: - user_ids = event_id_2_user_ids[str(event.id)] - for user_id in user_ids: - user = users2notify[str(user_id)] - if user.push_notification_token: - text = f'{event.title} begins at {event.start_date.time().strftime("%H:%M")} at {event.room.name}' - _log.append(str(users2notify[user_id])+': '+text) - log.info(f'sending notification {text} to {user.email}') - rlog_1_msg.append(f'sending notification: {text} to {user.email}') - - - if not test_only: - await add_flow(conference, user, text) - await enqueue_notification(user, 'The event will start shortly', text) - - notified += 1 - - if not test_only: - event.notification5min_sent = True - await event.save() - - rlog.info('\n'.join(rlog_1_msg)) - - if test_only: - return {'enqueued_messages': notified, - 'log': _log, - 'test_only': test_only, - 'now': str(now) - } - - log.info(f'notified {notified} users') - return {'enqueued_messages': notified, 'test_only': test_only, 'now': str(now)} diff --git a/src/conferences/controller/pretix.py b/src/conferences/controller/pretix.py deleted file mode 100644 index 5834b40..0000000 --- a/src/conferences/controller/pretix.py +++ /dev/null @@ -1,131 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -import os -import jwt -import httpx -import logging -import datetime - -import shared.ex as ex -import conferences.models as models - -log = logging.getLogger('conference_logger') -current_file_dir = os.path.dirname(os.path.abspath(__file__)) - -rlog = logging.getLogger('redis_logger') - - -async def fetch_pretix_order(conference, pretix_order_id): - return await models.PretixOrder.filter(conference=conference, id_pretix_order=pretix_order_id).get_or_none() - - -def generate_token(pretix_order): - JWT_SECRET_KEY = os.getenv('JWT_SECRET_KEY', 'secret') - - payload = { - 'pretix_order_id': pretix_order.id_pretix_order, - 'pretix_order_secret': pretix_order.secret, - 'iat': datetime.datetime.utcnow(), - 'exp': datetime.datetime.utcnow() + datetime.timedelta(days=31), - } - encoded_jwt = jwt.encode(payload, JWT_SECRET_KEY, algorithm='HS256') - - return encoded_jwt - - -async def fetch_order_from_prefix(conference, pretix_order_id): - PRETIX_TOKEN = os.getenv('PRETIX_TOKEN') - PRETIX_CHECKLIST_ID = os.getenv('PRETIX_CHECKLIST_ID') - PRETIX_EVENT_ID = os.getenv('PRETIX_EVENT_ID') - PRETIX_ORGANIZER_ID = os.getenv('PRETIX_ORGANIZER_ID') - - async with httpx.AsyncClient() as client: - try: - res = await client.get( - f'https://pretix.eu/api/v1/organizers/{PRETIX_ORGANIZER_ID}/events/{PRETIX_EVENT_ID}/checkinlists/{PRETIX_CHECKLIST_ID}/positions/?order={pretix_order_id}', - headers={'Authorization': f'Token {PRETIX_TOKEN}'}) - - if res.status_code != 200: - raise ex.AppException('PRETIX_ERROR', f'Pretix API returned {res.status_code}') - - pretix_data = res.json() - - except Exception as e: - log.critical(f'Failed to fetch order from pretix: {e}') - raise - - return pretix_data - - -async def register_pretix_order(conference, order_code, push_notification_token: str = None, registered_in_open_con_app: bool = None, device=None): - order_code = order_code.strip().upper() - - pretix_order = await models.PretixOrder.filter(conference=conference, id_pretix_order=order_code).get_or_none() - - if pretix_order: - if pretix_order.push_notification_token != push_notification_token: - pretix_order.push_notification_token = push_notification_token - await pretix_order.save() - - if pretix_order.registered_in_open_con_app != registered_in_open_con_app: - pretix_order.registered_in_open_con_app = registered_in_open_con_app - await pretix_order.save() - - if pretix_order.registered_from_device_type != device: - pretix_order.registered_from_device_type = device - await pretix_order.save() - - return {'id': str(pretix_order.id), 'token': generate_token(pretix_order), 'created': False} - - pretix_data = await fetch_order_from_prefix(conference, order_code) - - if len(pretix_data['results']) == 0: - raise ex.AppException(id_message='PRETIX_ORDER_NOT_FOUND', message='Order not found') - - first_name = pretix_data['results'][0]['attendee_name_parts']['given_name'] - last_name = pretix_data['results'][0]['attendee_name_parts']['family_name'] - organization = pretix_data['results'][0]['company'] - - email = pretix_data['results'][0]['attendee_email'] - secret = pretix_data['results'][0]['secret'] - - secret_per_sub_event = {} - for p in pretix_data['results']: - secret_per_sub_event[p['subevent']] = p['secret'] - - pretix_order = await models.PretixOrder.create(conference=conference, id_pretix_order=order_code, first_name=first_name, - last_name=last_name, organization=organization, email=email, secret=secret, - push_notification_token=push_notification_token, - secret_per_sub_event=secret_per_sub_event, - registered_from_device_type=device - ) - - await pretix_order.save() - - logger = logging.getLogger('redis_logger') - logger.info(f'User registered: {pretix_order.email}') - - return {'id': str(pretix_order.id), 'token': generate_token(pretix_order), 'created': True} - - -async def pretix_qrcode_scanned(id_conference, secret, id_lane, - pretix_order_code, - # pretix_attendee_email, - # pretix_attendee_first_name, - # pretix_attendee_last_name, - # pretix_company, - ): - conference = await models.Conference.filter(id=id_conference).get_or_none() - if not conference: - raise ex.AppException(id_message='CONFERENCE_NOT_FOUND', message='Conference not found') - - pretix_order = await fetch_pretix_order(conference, pretix_order_code) - if not pretix_order: - pretix_order = await register_pretix_order(conference, pretix_order_code, registered_in_open_con_app=False) - pretix_order = await models.PretixOrder.filter(id=pretix_order['id']).get_or_none() - - try: - rlog.info(f'User scanned: {pretix_order.first_name} {pretix_order.last_name} <{pretix_order.email}> | registered_in_app: {pretix_order.registered_in_open_con_app}') - except Exception as e: - raise diff --git a/src/conferences/controller/ratings.py b/src/conferences/controller/ratings.py deleted file mode 100644 index d3da558..0000000 --- a/src/conferences/controller/ratings.py +++ /dev/null @@ -1,104 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -import os -import jwt -import uuid -import json -import redis -import logging - -import shared.ex as ex -import conferences.models as models -from .conference import add_flow - -log = logging.getLogger('conference_logger') -current_file_dir = os.path.dirname(os.path.abspath(__file__)) - -rlog = logging.getLogger('redis_logger') - - -async def update_starred_session(event_session_id: uuid.UUID, my_rate: int): - try: - try: - event_session = await models.EventSession.filter(id=event_session_id).prefetch_related('starred_session').get_or_none() - except Exception as e: - log.critical(f'Failed to fetch event session: {e}') - raise - if not event_session: - raise ex.AppException(id_message='EVENT_SESSION_NOT_FOUND', message='Event session not found') - - starred_session = event_session.starred_session - starred_session.nr_votes = await models.Star.filter(event_session=event_session).count() - - c = 0 - for s in await models.Star.filter(event_session=event_session).all(): - c += s.stars - - starred_session.total_stars = c - starred_session.avg_stars = event_session.starred_session.total_stars / event_session.starred_session.nr_votes \ - if starred_session.nr_votes else 0 - - await starred_session.save() - - # {'avg': round(avg, 2), 'nr': nr, 'my_rate': my} - - return {'avg': round(event_session.starred_session.avg_stars, 2), 'nr': event_session.starred_session.nr_votes, 'my_rate': my_rate} - - # return {'total_stars': event_session.starred_session.total_stars, - # 'nr_votes': event_session.starred_session.nr_votes, - # 'avg_stars': event_session.starred_session.avg_stars} - - except Exception as e: - log.critical(f'Failed to update starred session: {e}') - raise - - -async def get_stars(pretix_order_id: str, event_session_id: uuid.UUID): - pretix_order = await models.PretixOrder.filter(id_pretix_order=pretix_order_id).get_or_none() - if not pretix_order: - raise ex.AppException(id_message='PRETIX_ORDER_NOT_FOUND', message='Order not found') - - event_session = await models.EventSession.filter(id=event_session_id).prefetch_related('starred_session').get_or_none() - - if not event_session: - raise ex.AppException(id_message='EVENT_SESSION_NOT_FOUND', message='Event session not found') - - star = await models.Star.filter(pretix_order=pretix_order, event_session=event_session).get_or_none() - - return {'avg': round(float(event_session.starred_session.avg_stars), 2), 'nr': event_session.starred_session.nr_votes, 'my_rate': star.stars if star else 0} - - -async def add_stars(pretix_order_id: str, event_session_id: uuid.UUID, stars: int): - try: - - pretix_order = await models.PretixOrder.filter(id_pretix_order=pretix_order_id).prefetch_related('conference').get_or_none() - - if not pretix_order: - raise ex.AppException(id_message='PRETIX_ORDER_NOT_FOUND', message='Order not found') - - event_session = await models.EventSession.filter(id=event_session_id).get_or_none() - if not event_session: - raise ex.AppException(id_message='EVENT_SESSION_NOT_FOUND', message='Event session not found') - - star = await models.Star.filter(pretix_order=pretix_order, event_session=event_session).get_or_none() - if not star: - star = await models.Star.create(pretix_order=pretix_order, event_session=event_session, stars=stars) - else: - if star.stars != stars: - star.stars = stars - await star.save() - await event_session.save() - - log.info(f'Added {stars} stars to {event_session_id} by {pretix_order.email}') - res = await update_starred_session(event_session_id, star.stars) - - rlog.info(f'User {pretix_order.email} Added {stars} stars to {event_session.title} Average is {res["avg"]} for {res["nr"]} votes') - - await add_flow(pretix_order.conference, pretix_order, f'User {pretix_order.email} Added {stars} stars to {event_session.title} Average is {res["avg"]} for {res["nr"]} votes') - - return res - - except Exception as e: - log.critical(f'Failed to add stars: {e}') - raise diff --git a/src/conferences/models/__init__.py b/src/conferences/models/__init__.py deleted file mode 100644 index fe875c8..0000000 --- a/src/conferences/models/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -from .conferences import * diff --git a/src/conferences/models/conferences.py b/src/conferences/models/conferences.py deleted file mode 100644 index c461b9b..0000000 --- a/src/conferences/models/conferences.py +++ /dev/null @@ -1,324 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -import bs4 - -from typing import Dict -from tortoise.models import Model -from tortoise import fields - - -class Conference(Model): - class Meta: - table = "conferences" - - id = fields.UUIDField(pk=True) - name = fields.TextField() - # start_date = fields.DateField() - # end_date = fields.DateField() - acronym = fields.TextField(null=True) - - tracks = fields.ReverseRelation['Track'] - event_sessions = fields.ReverseRelation['EventSession'] - locations = fields.ReverseRelation['Location'] - - created = fields.DatetimeField(auto_now_add=True) - last_updated = fields.DatetimeField(auto_now=True) - - source_uri = fields.TextField(null=True) - source_document_checksum = fields.CharField(max_length=128, null=True) - - def serialize(self): - return { - 'id': str(self.id), - 'name': self.name, - 'acronym': self.acronym, - } - - -class Track(Model): - class Meta: - table = "conferences_tracks" - - id = fields.UUIDField(pk=True) - name = fields.TextField() - slug = fields.TextField() - color = fields.TextField() - order = fields.IntField() - conference = fields.ForeignKeyField('models.Conference', related_name='tracks') - - def serialize(self): - return {'name': self.name, - 'color': self.color - } - - -class Location(Model): - class Meta: - table = "conferences_locations" - - id = fields.UUIDField(pk=True) - name = fields.TextField() - slug = fields.TextField() - conference = fields.ForeignKeyField('models.Conference', related_name='locations') - - def serialize(self): - return {'name': self.name, - 'slug': self.slug} - - -class Room(Model): - class Meta: - table = "conferences_rooms" - - id = fields.UUIDField(pk=True) - name = fields.TextField() - slug = fields.TextField() - conference = fields.ForeignKeyField('models.Conference', related_name='rooms') - location = fields.ForeignKeyField('models.Location', related_name='rooms') - - def serialize(self): - return {'name': self.name, - 'slug': self.slug, - "location": str(self.location_id) - } - - -class EventSession(Model): - class Meta: - table = "conferences_event_sessions" - unique_together = (('unique_id', 'conference'),) - ordering = ['start_date'] - - id = fields.UUIDField(pk=True) - unique_id = fields.CharField(max_length=255) - title = fields.TextField() - duration = fields.IntField(null=True) - abstract = fields.TextField(null=True) - description = fields.TextField(null=True) - - bookmarkable = fields.BooleanField(default=True) - rateable = fields.BooleanField(default=True) - - start_date = fields.DatetimeField() - end_date = fields.DatetimeField() - - str_start_time = fields.CharField(max_length=20, null=True) - - track = fields.ForeignKeyField('models.Track', related_name='event_sessions') - room = fields.ForeignKeyField('models.Room', related_name='event_sessions') - conference = fields.ForeignKeyField('models.Conference', related_name='event_sessions') - lecturers = fields.ManyToManyRelation['ConferenceLecturer'] - bookmarks = fields.ReverseRelation['Bookmark'] - - notification5min_sent = fields.BooleanField(default=None, null=True) - - def serialize(self, streaming_links: Dict[str, str] = None): - # import tortoise.timezone - - return { - 'id': str(self.id), - 'unique_id': self.unique_id, - 'share_link': "https://sfscon.it", - "date": self.start_date.strftime("%Y-%m-%d"), - "start": self.start_date.strftime("%Y-%m-%d %H:%M:%S"), - "duration": self.duration, - "title": self.title, - "abstract": None, - "description": self.description, - "bookmarkable": self.bookmarkable, - "can_share": True, - "can_ask_question": True, - "rateable": self.rateable, - "id_track": str(self.track_id), - "id_room": str(self.room_id), - "id_location": "TODO", - "id_lecturers": [str(l.id) for l in self.lecturers], - "stream_link": streaming_links[self.track.name] if streaming_links and self.track and self.track.name in streaming_links else None - } - - -class ConferenceLecturer(Model): - class Meta: - table = "conferences_lecturers" - - id = fields.UUIDField(pk=True) - slug = fields.CharField(max_length=255, null=False, index=True) - external_id = fields.CharField(max_length=255, index=True) - display_name = fields.TextField() - first_name = fields.TextField() - last_name = fields.TextField() - email = fields.TextField(null=True) - thumbnail_url = fields.TextField(null=True) - bio = fields.TextField(null=True) - organization = fields.TextField(null=True) - social_networks = fields.JSONField(null=True) - conference = fields.ForeignKeyField('models.Conference', related_name='lecturers') - event_sessions = fields.ManyToManyField('models.EventSession', related_name='lecturers') - - @staticmethod - def fix_bio(bio): - if not bio: - return '' - - bio = bio.replace("\\r\\n", "\n") - bio = bio.encode().decode('unicode_escape') # PRESERVE unicode - - soup = bs4.BeautifulSoup(bio, features="html.parser") - bio = soup.get_text() - bio = bio.strip('"') - bio = bio.replace('\n', '

') - bio = bio.replace('<\\/p>', '') - - return bio - - def serialize(self): - return { - "id": str(self.id), - "share_link": f"https://www.sfscon.it/speakers/{self.slug}/", - "company_name": self.organization, - "display_name": self.display_name, - "first_name": self.first_name, - "last_name": self.last_name, - "profile_picture": self.thumbnail_url, - "bio": self.bio, - "social_networks": self.social_networks, - "sessions": [str(s.id) for s in self.event_sessions] if self.event_sessions else []} - - -class PretixOrder(Model): - class Meta: - table = "conferences_pretix_orders" - unique_together = (('id_pretix_order', 'conference'),) - - id = fields.UUIDField(pk=True) - conference = fields.ForeignKeyField('models.Conference') - id_pretix_order = fields.CharField(max_length=32, index=True) - - first_name = fields.CharField(max_length=255, null=True, index=True) - last_name = fields.CharField(max_length=255, null=True, index=True) - organization = fields.CharField(max_length=255, null=True, index=True) - email = fields.CharField(max_length=255, null=True, index=True) - secret = fields.TextField() - secret_per_sub_event = fields.JSONField(null=True) - - push_notification_token = fields.CharField(max_length=64, null=True) - - registered_in_open_con_app = fields.BooleanField(default=None, null=True) - - registered_from_device_type = fields.CharField(max_length=32, null=True, index=True) - - nr_printed_labels = fields.IntField(default=0) - - created = fields.DatetimeField(auto_now_add=True, null=True) - - def __str__(self): - return f"{self.first_name} {self.last_name} <{self.email}> ({self.organization})" - - def serialize(self): - return {'first_name': self.first_name, - 'last_name': self.last_name, - 'organization': self.organization, - 'email': self.email, - 'pretix_order': self.id_pretix_order, - 'has_app': self.registered_in_open_con_app or self.registered_from_device_type is not None} - - -class Bookmark(Model): - class Meta: - table = "conferences_bookmarks" - unique_together = (('pretix_order', 'event_session'),) - - id = fields.UUIDField(pk=True) - pretix_order = fields.ForeignKeyField('models.PretixOrder') - event_session = fields.ForeignKeyField('models.EventSession', related_name='bookmarks') - created = fields.DatetimeField(auto_now_add=True) - - -class StarredSession(Model): - class Meta: - table = "conferences_starred_sessions" - - id = fields.UUIDField(pk=True) - event_session = fields.OneToOneField('models.EventSession', related_name='starred_session', index=True) - - nr_votes = fields.IntField() - total_stars = fields.IntField() - avg_stars = fields.DecimalField(max_digits=3, decimal_places=2) - - -class Star(Model): - class Meta: - table = "conferences_stars" - unique_together = (('pretix_order', 'event_session'),) - - id = fields.UUIDField(pk=True) - pretix_order = fields.ForeignKeyField('models.PretixOrder') - event_session = fields.ForeignKeyField('models.EventSession') - created = fields.DatetimeField(auto_now_add=True) - stars = fields.IntField() - - -class PushNotificationQueue(Model): - class Meta: - table = "conferences_push_notification_queue" - - id = fields.UUIDField(pk=True) - created = fields.DatetimeField(auto_now_add=True) - sent = fields.DatetimeField(null=True) - - attempt = fields.IntField(default=0) - last_response = fields.TextField(null=True) - - pretix_order = fields.ForeignKeyField('models.PretixOrder') - - subject = fields.TextField() - message = fields.TextField() - - -class Entrance(Model): - class Meta: - table = "conferences_entrances" - - id = fields.UUIDField(pk=True) - name = fields.TextField() - conference = fields.ForeignKeyField('models.Conference') - - -class PretixQRScan(Model): - class Meta: - table = "conferences_pretix_qr_scans" - - id = fields.UUIDField(pk=True) - created = fields.DatetimeField(auto_now_add=True) - - pretix_secret = fields.TextField() - pretix_order = fields.ForeignKeyField('models.PretixOrder', null=True) - - label_print_confirmed = fields.BooleanField(default=False) - label_printed = fields.DatetimeField(default=None, null=True) - - -class Flow(Model): - class Meta: - table = "conferences_flows" - - id = fields.UUIDField(pk=True) - conference = fields.ForeignKeyField('models.Conference', null=True, index=True) - - created = fields.DatetimeField(auto_now_add=True) - - pretix_order = fields.ForeignKeyField('models.PretixOrder', null=True, index=True) - - text = fields.TextField(null=True) - data = fields.JSONField(null=True) - - def serialize(self): - return { - # 'id': str(self.id), - # 'conference': str(self.conference_id) if self.conference else None, - 'created': self.created, - 'pretix_order': str(self.pretix_order_id) if self.pretix_order else None, - 'text': self.text, - # 'data': self.data - } diff --git a/src/db_config.py b/src/db_config.py deleted file mode 100644 index bb46833..0000000 --- a/src/db_config.py +++ /dev/null @@ -1,30 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -import os - -import dotenv - -current_file_dir = os.path.dirname(os.path.abspath(__file__)) - -try: - dotenv.load_dotenv(current_file_dir + "/../.env") -except Exceptio as e: - pass - -DB_CONFIG = { - "connections": { - "default": f"postgres://" - f"{os.getenv('DB_USERNAME')}:{os.getenv('DB_PASSWORD')}@" - f"{os.getenv('DB_HOST')}:{os.getenv('DB_PORT')}/{os.getenv('DB_NAME')}" - }, - "apps": { - "models": { - "models": ["conferences.models" , "aerich.models"], - "default_connection": "default", - } - } -} - -import pprint -pprint.pprint(DB_CONFIG) \ No newline at end of file diff --git a/src/main.py b/src/main.py deleted file mode 100644 index 9f63ae4..0000000 --- a/src/main.py +++ /dev/null @@ -1,28 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -import dotenv -import importlib -from shared.setup_logger import setup_redis_logger, setup_file_logger - -from app import get_app - -app = get_app() - -def import_modules(svcs): - dotenv.load_dotenv() - setup_redis_logger() - - for svc in svcs: - svc_name = svc.split('.')[0] - setup_file_logger(svc_name) - importlib.reload(importlib.import_module(svc)) - - - -import_modules(['conferences.api']) - -if __name__ == "__main__": - import uvicorn - - uvicorn.run(get_app(), host="localhost", port=8000) diff --git a/src/migrations/models/0_20231105181722_init.py b/src/migrations/models/0_20231105181722_init.py deleted file mode 100644 index eeced40..0000000 --- a/src/migrations/models/0_20231105181722_init.py +++ /dev/null @@ -1,146 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -from tortoise import BaseDBAsyncClient - - -async def upgrade(db: BaseDBAsyncClient) -> str: - return """ - CREATE TABLE IF NOT EXISTS "conferences" ( - "id" UUID NOT NULL PRIMARY KEY, - "name" TEXT NOT NULL, - "acronym" TEXT, - "created" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "last_updated" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "source_uri" TEXT -); -CREATE TABLE IF NOT EXISTS "conferences_lecturers" ( - "id" UUID NOT NULL PRIMARY KEY, - "slug" VARCHAR(255) NOT NULL, - "external_id" VARCHAR(255) NOT NULL, - "display_name" TEXT NOT NULL, - "first_name" TEXT NOT NULL, - "last_name" TEXT NOT NULL, - "email" TEXT, - "thumbnail_url" TEXT, - "bio" TEXT, - "organization" TEXT, - "social_networks" JSONB, - "conference_id" UUID NOT NULL REFERENCES "conferences" ("id") ON DELETE CASCADE -); -CREATE INDEX IF NOT EXISTS "idx_conferences_slug_4860af" ON "conferences_lecturers" ("slug"); -CREATE INDEX IF NOT EXISTS "idx_conferences_externa_b43bc9" ON "conferences_lecturers" ("external_id"); -CREATE TABLE IF NOT EXISTS "conferences_entrances" ( - "id" UUID NOT NULL PRIMARY KEY, - "name" TEXT NOT NULL, - "conference_id" UUID NOT NULL REFERENCES "conferences" ("id") ON DELETE CASCADE -); -CREATE TABLE IF NOT EXISTS "conferences_locations" ( - "id" UUID NOT NULL PRIMARY KEY, - "name" TEXT NOT NULL, - "slug" TEXT NOT NULL, - "conference_id" UUID NOT NULL REFERENCES "conferences" ("id") ON DELETE CASCADE -); -CREATE TABLE IF NOT EXISTS "conferences_pretix_orders" ( - "id" UUID NOT NULL PRIMARY KEY, - "id_pretix_order" VARCHAR(32) NOT NULL, - "first_name" TEXT NOT NULL, - "last_name" TEXT, - "organization" TEXT, - "email" TEXT, - "secret" TEXT NOT NULL, - "secret_per_sub_event" JSONB, - "push_notification_token" VARCHAR(64), - "registered_in_open_con_app" BOOL, - "registered_from_device_type" VARCHAR(32), - "nr_printed_labels" INT NOT NULL DEFAULT 0, - "conference_id" UUID NOT NULL REFERENCES "conferences" ("id") ON DELETE CASCADE, - CONSTRAINT "uid_conferences_id_pret_f96b97" UNIQUE ("id_pretix_order", "conference_id") -); -CREATE INDEX IF NOT EXISTS "idx_conferences_id_pret_9ce4b0" ON "conferences_pretix_orders" ("id_pretix_order"); -CREATE INDEX IF NOT EXISTS "idx_conferences_registe_7734f1" ON "conferences_pretix_orders" ("registered_from_device_type"); -CREATE TABLE IF NOT EXISTS "conferences_pretix_qr_scans" ( - "id" UUID NOT NULL PRIMARY KEY, - "created" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "pretix_secret" TEXT NOT NULL, - "label_print_confirmed" BOOL NOT NULL DEFAULT False, - "label_printed" TIMESTAMPTZ, - "pretix_order_id" UUID REFERENCES "conferences_pretix_orders" ("id") ON DELETE CASCADE -); -CREATE TABLE IF NOT EXISTS "conferences_push_notification_queue" ( - "id" UUID NOT NULL PRIMARY KEY, - "created" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "sent" TIMESTAMPTZ, - "attempt" INT NOT NULL DEFAULT 0, - "last_response" TEXT, - "subject" TEXT NOT NULL, - "message" TEXT NOT NULL, - "pretix_order_id" UUID NOT NULL REFERENCES "conferences_pretix_orders" ("id") ON DELETE CASCADE -); -CREATE TABLE IF NOT EXISTS "conferences_rooms" ( - "id" UUID NOT NULL PRIMARY KEY, - "name" TEXT NOT NULL, - "slug" TEXT NOT NULL, - "conference_id" UUID NOT NULL REFERENCES "conferences" ("id") ON DELETE CASCADE, - "location_id" UUID NOT NULL REFERENCES "conferences_locations" ("id") ON DELETE CASCADE -); -CREATE TABLE IF NOT EXISTS "conferences_tracks" ( - "id" UUID NOT NULL PRIMARY KEY, - "name" TEXT NOT NULL, - "slug" TEXT NOT NULL, - "color" TEXT NOT NULL, - "order" INT NOT NULL, - "conference_id" UUID NOT NULL REFERENCES "conferences" ("id") ON DELETE CASCADE -); -CREATE TABLE IF NOT EXISTS "conferences_event_sessions" ( - "id" UUID NOT NULL PRIMARY KEY, - "unique_id" VARCHAR(255) NOT NULL, - "title" TEXT NOT NULL, - "duration" INT, - "abstract" TEXT, - "description" TEXT, - "start_date" TIMESTAMPTZ NOT NULL, - "end_date" TIMESTAMPTZ NOT NULL, - "conference_id" UUID NOT NULL REFERENCES "conferences" ("id") ON DELETE CASCADE, - "room_id" UUID NOT NULL REFERENCES "conferences_rooms" ("id") ON DELETE CASCADE, - "track_id" UUID NOT NULL REFERENCES "conferences_tracks" ("id") ON DELETE CASCADE, - CONSTRAINT "uid_conferences_unique__0ced27" UNIQUE ("unique_id", "conference_id") -); -CREATE TABLE IF NOT EXISTS "conferences_bookmarks" ( - "id" UUID NOT NULL PRIMARY KEY, - "created" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "event_session_id" UUID NOT NULL REFERENCES "conferences_event_sessions" ("id") ON DELETE CASCADE, - "pretix_order_id" UUID NOT NULL REFERENCES "conferences_pretix_orders" ("id") ON DELETE CASCADE, - CONSTRAINT "uid_conferences_pretix__d82808" UNIQUE ("pretix_order_id", "event_session_id") -); -CREATE TABLE IF NOT EXISTS "conferences_stars" ( - "id" UUID NOT NULL PRIMARY KEY, - "created" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "stars" INT NOT NULL, - "event_session_id" UUID NOT NULL REFERENCES "conferences_event_sessions" ("id") ON DELETE CASCADE, - "pretix_order_id" UUID NOT NULL REFERENCES "conferences_pretix_orders" ("id") ON DELETE CASCADE, - CONSTRAINT "uid_conferences_pretix__b745a6" UNIQUE ("pretix_order_id", "event_session_id") -); -CREATE TABLE IF NOT EXISTS "conferences_starred_sessions" ( - "id" UUID NOT NULL PRIMARY KEY, - "nr_votes" INT NOT NULL, - "total_stars" INT NOT NULL, - "avg_stars" DECIMAL(3,2) NOT NULL, - "event_session_id" UUID NOT NULL UNIQUE REFERENCES "conferences_event_sessions" ("id") ON DELETE CASCADE -); -CREATE INDEX IF NOT EXISTS "idx_conferences_event_s_dd527c" ON "conferences_starred_sessions" ("event_session_id"); -CREATE TABLE IF NOT EXISTS "aerich" ( - "id" SERIAL NOT NULL PRIMARY KEY, - "version" VARCHAR(255) NOT NULL, - "app" VARCHAR(100) NOT NULL, - "content" JSONB NOT NULL -); -CREATE TABLE IF NOT EXISTS "conferences_lecturers_conferences_event_sessions" ( - "conferences_lecturers_id" UUID NOT NULL REFERENCES "conferences_lecturers" ("id") ON DELETE CASCADE, - "eventsession_id" UUID NOT NULL REFERENCES "conferences_event_sessions" ("id") ON DELETE CASCADE -);""" - - -async def downgrade(db: BaseDBAsyncClient) -> str: - return """ - """ diff --git a/src/migrations/models/1_20231105232211_update.py b/src/migrations/models/1_20231105232211_update.py deleted file mode 100644 index 9a5476a..0000000 --- a/src/migrations/models/1_20231105232211_update.py +++ /dev/null @@ -1,16 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -from tortoise import BaseDBAsyncClient - - -async def upgrade(db: BaseDBAsyncClient) -> str: - return """ - ALTER TABLE "conferences_event_sessions" ADD "rateable" BOOL NOT NULL DEFAULT True; - ALTER TABLE "conferences_event_sessions" ADD "bookmarkable" BOOL NOT NULL DEFAULT True;""" - - -async def downgrade(db: BaseDBAsyncClient) -> str: - return """ - ALTER TABLE "conferences_event_sessions" DROP COLUMN "rateable"; - ALTER TABLE "conferences_event_sessions" DROP COLUMN "bookmarkable";""" diff --git a/src/migrations/models/2_20231107215420_update.py b/src/migrations/models/2_20231107215420_update.py deleted file mode 100644 index c36e7c1..0000000 --- a/src/migrations/models/2_20231107215420_update.py +++ /dev/null @@ -1,14 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -from tortoise import BaseDBAsyncClient - - -async def upgrade(db: BaseDBAsyncClient) -> str: - return """ - ALTER TABLE "conferences" ADD "source_document_checksum" VARCHAR(128);""" - - -async def downgrade(db: BaseDBAsyncClient) -> str: - return """ - ALTER TABLE "conferences" DROP COLUMN "source_document_checksum";""" diff --git a/src/migrations/models/3_20231108175131_update.py b/src/migrations/models/3_20231108175131_update.py deleted file mode 100644 index d864c9c..0000000 --- a/src/migrations/models/3_20231108175131_update.py +++ /dev/null @@ -1,23 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -from tortoise import BaseDBAsyncClient - - -async def upgrade(db: BaseDBAsyncClient) -> str: - return """ - CREATE TABLE IF NOT EXISTS "conferences_flows" ( - "id" UUID NOT NULL PRIMARY KEY, - "created" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "text" TEXT, - "data" JSONB, - "conference_id" UUID REFERENCES "conferences" ("id") ON DELETE CASCADE, - "pretix_order_id" UUID REFERENCES "conferences_pretix_orders" ("id") ON DELETE CASCADE -); -CREATE INDEX IF NOT EXISTS "idx_conferences_confere_a4c04b" ON "conferences_flows" ("conference_id"); -CREATE INDEX IF NOT EXISTS "idx_conferences_pretix__050ab5" ON "conferences_flows" ("pretix_order_id");""" - - -async def downgrade(db: BaseDBAsyncClient) -> str: - return """ - DROP TABLE IF EXISTS "conferences_flows";""" diff --git a/src/migrations/models/4_20231109165830_update.py b/src/migrations/models/4_20231109165830_update.py deleted file mode 100644 index d93da24..0000000 --- a/src/migrations/models/4_20231109165830_update.py +++ /dev/null @@ -1,14 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -from tortoise import BaseDBAsyncClient - - -async def upgrade(db: BaseDBAsyncClient) -> str: - return """ - ALTER TABLE "conferences_event_sessions" ADD "notification5min_sent" BOOL;""" - - -async def downgrade(db: BaseDBAsyncClient) -> str: - return """ - ALTER TABLE "conferences_event_sessions" DROP COLUMN "notification5min_sent";""" diff --git a/src/migrations/models/5_20231109214614_update.py b/src/migrations/models/5_20231109214614_update.py deleted file mode 100644 index ef3f5c8..0000000 --- a/src/migrations/models/5_20231109214614_update.py +++ /dev/null @@ -1,14 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -from tortoise import BaseDBAsyncClient - - -async def upgrade(db: BaseDBAsyncClient) -> str: - return """ - ALTER TABLE "conferences_event_sessions" ADD "str_start_date_local" VARCHAR(20);""" - - -async def downgrade(db: BaseDBAsyncClient) -> str: - return """ - ALTER TABLE "conferences_event_sessions" DROP COLUMN "str_start_date_local";""" diff --git a/src/migrations/models/6_20231109214845_update.py b/src/migrations/models/6_20231109214845_update.py deleted file mode 100644 index ddbd243..0000000 --- a/src/migrations/models/6_20231109214845_update.py +++ /dev/null @@ -1,14 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -from tortoise import BaseDBAsyncClient - - -async def upgrade(db: BaseDBAsyncClient) -> str: - return """ - ALTER TABLE "conferences_event_sessions" RENAME COLUMN "str_start_date_local" TO "str_start_time";""" - - -async def downgrade(db: BaseDBAsyncClient) -> str: - return """ - ALTER TABLE "conferences_event_sessions" RENAME COLUMN "str_start_time" TO "str_start_date_local";""" diff --git a/src/migrations/models/7_20231109222307_update.py b/src/migrations/models/7_20231109222307_update.py deleted file mode 100644 index 86c1538..0000000 --- a/src/migrations/models/7_20231109222307_update.py +++ /dev/null @@ -1,14 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -from tortoise import BaseDBAsyncClient - - -async def upgrade(db: BaseDBAsyncClient) -> str: - return """ - ALTER TABLE "conferences_pretix_orders" ADD "created" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP;""" - - -async def downgrade(db: BaseDBAsyncClient) -> str: - return """ - ALTER TABLE "conferences_pretix_orders" DROP COLUMN "created";""" diff --git a/src/migrations/models/8_20231109224215_update.py b/src/migrations/models/8_20231109224215_update.py deleted file mode 100644 index e93880a..0000000 --- a/src/migrations/models/8_20231109224215_update.py +++ /dev/null @@ -1,23 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -from tortoise import BaseDBAsyncClient - - -async def upgrade(db: BaseDBAsyncClient) -> str: - return """ - ALTER TABLE "conferences_pretix_orders" ALTER COLUMN "organization" TYPE VARCHAR(255) USING "organization"::VARCHAR(255); - ALTER TABLE "conferences_pretix_orders" ALTER COLUMN "first_name" DROP NOT NULL; - ALTER TABLE "conferences_pretix_orders" ALTER COLUMN "first_name" TYPE VARCHAR(255) USING "first_name"::VARCHAR(255); - ALTER TABLE "conferences_pretix_orders" ALTER COLUMN "last_name" TYPE VARCHAR(255) USING "last_name"::VARCHAR(255); - ALTER TABLE "conferences_pretix_orders" ALTER COLUMN "email" TYPE VARCHAR(255) USING "email"::VARCHAR(255); - """ - - -async def downgrade(db: BaseDBAsyncClient) -> str: - return """ - ALTER TABLE "conferences_pretix_orders" ALTER COLUMN "organization" TYPE TEXT USING "organization"::TEXT; - ALTER TABLE "conferences_pretix_orders" ALTER COLUMN "first_name" TYPE TEXT USING "first_name"::TEXT; - ALTER TABLE "conferences_pretix_orders" ALTER COLUMN "first_name" SET NOT NULL; - ALTER TABLE "conferences_pretix_orders" ALTER COLUMN "last_name" TYPE TEXT USING "last_name"::TEXT; - ALTER TABLE "conferences_pretix_orders" ALTER COLUMN "email" TYPE TEXT USING "email"::TEXT;""" diff --git a/src/pyproject.toml b/src/pyproject.toml deleted file mode 100644 index e3f31c6..0000000 --- a/src/pyproject.toml +++ /dev/null @@ -1,4 +0,0 @@ -[tool.aerich] -tortoise_orm = "db_config.DB_CONFIG" -location = "./migrations" -src_folder = "./." diff --git a/src/scripts/qrgen.py b/src/scripts/qrgen.py deleted file mode 100644 index e90e9ce..0000000 --- a/src/scripts/qrgen.py +++ /dev/null @@ -1,47 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -from PIL import Image, ImageDraw, ImageFont # Corrected import statement -import PIL - -import qrcode - -l = {"LANE1":"5a25539b-b8f2-4b9d-ad7e-d607bb248835", - "LANE2":"e4041668-8199-48c5-bb00-0b4e7042f479", - "LANE3":"6aa3dbb8-9140-4f0c-8da2-e7c02d855d6b", - "LANE4":"71619b8e-f9f1-4537-a33d-0f69f117af6b", - "LANE5":"b22cce38-b33b-44a2-8f1d-8bc4ebe1e3d3", - "LANE6":"f5a33c2a-2112-497f-a781-71a2a6dc471d", - "LANE-DC":"b5b574fc-a854-4666-82c7-8b22877bf000" - } - -# Define the UUID - -for luid in l: - - uid = l[luid] - - qr = qrcode.QRCode( - version=1, - error_correction=qrcode.constants.ERROR_CORRECT_L, - box_size=10, - border=4, - ) - - qr.add_data(uid) - qr.make(fit=True) - - img = PIL.Image.new("1",(370,450),255) - - img_qr = qr.make_image(fill_color="black", back_color="white") - - img_draw = PIL.ImageDraw.Draw(img) - - font = ImageFont.truetype("./font.ttf", 64) - - img.paste(img_qr, (0,0)) - - img_draw.text((370/2-95,360), luid, fill='black', font=font, ) - - - img.save(f"uuid_{luid}.png") diff --git a/src/shared/__init__.py b/src/shared/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/shared/ex.py b/src/shared/ex.py deleted file mode 100644 index 2ea3198..0000000 --- a/src/shared/ex.py +++ /dev/null @@ -1,22 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -import fastapi.exceptions - - -class AppException(Exception): - - def __init__(self, id_message, message=None, data=None, status_code=400): - super(AppException, self).__init__(id_message) - self.id_message = id_message - self.message = message - self.data = data - self.status_code = status_code - - def to_dict(self): - return { - 'id_message': self.id_message, - 'message': self.message, - 'data': self.data, - 'status_code': self.status_code - } diff --git a/src/shared/setup_logger.py b/src/shared/setup_logger.py deleted file mode 100644 index d70807c..0000000 --- a/src/shared/setup_logger.py +++ /dev/null @@ -1,47 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -import os -import redis -import logging - - -class RedisHandler(logging.Handler): - def __init__(self, redis_client, redis_list_key): - super().__init__() - self.redis_client = redis_client - self.redis_list_key = redis_list_key - - def emit(self, record): - log_entry = self.format(record) - self.redis_client.rpush(self.redis_list_key, log_entry) - - -def setup_redis_logger(): - # Configure the logger - logger = logging.getLogger('redis_logger') - logger.setLevel(logging.INFO) - - redis_server = os.getenv('REDIS_SERVER', 'localhost') - - redis_client = redis.Redis(host=redis_server, port=6379, db=0) - - # Create the Redis handler and set a formatter - redis_handler = RedisHandler(redis_client, 'log_list') - # formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') - formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s ||| %(message)s') - redis_handler.setFormatter(formatter) - - # Add the Redis handler to the logger - logger.addHandler(redis_handler) - - -def setup_file_logger(service: str): - logger = logging.getLogger(f'{service}_logger') - logger.setLevel(logging.INFO) - - handler = logging.FileHandler(f'/var/log/opencon/{service}.log') - formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - XXX - %(message)s') - - handler.setFormatter(formatter) - logger.addHandler(handler) diff --git a/src/shared/utils.py b/src/shared/utils.py deleted file mode 100644 index f4122d5..0000000 --- a/src/shared/utils.py +++ /dev/null @@ -1,27 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -import hashlib -import json - - -def calculate_md5_checksum(file_path): - md5_hash = hashlib.md5() - with open(file_path, "rb") as f: - # Read and update hash string value in blocks of 4K - for byte_block in iter(lambda: f.read(4096), b""): - md5_hash.update(byte_block) - return md5_hash.hexdigest() - - -def calculate_md5_checksum_for_string(string): - md5_hash = hashlib.md5() - md5_hash.update(string.encode('utf-8')) - return md5_hash.hexdigest() - - -def calculate_md5_checksum_for_dict(d: dict): - serialized_dict = json.dumps(d, sort_keys=True).encode('utf-8') - md5_hash = hashlib.md5() - md5_hash.update(serialized_dict) - return md5_hash.hexdigest() diff --git a/src/tests/assets/fake_attendees.json b/src/tests/assets/fake_attendees.json deleted file mode 100644 index bb40cde..0000000 --- a/src/tests/assets/fake_attendees.json +++ /dev/null @@ -1,2682 +0,0 @@ -[ - { - "first_name": "Yvonne", - "last_name": "Mueller", - "organization": "Campbell and Sons", - "email": "vperez@example.org", - "pretix_order": "B5AC3", - "has_app": true - }, - { - "first_name": "Lindsay", - "last_name": "Berg", - "organization": "Golden Ltd", - "email": "fshelton@example.com", - "pretix_order": "ED9C0", - "has_app": false - }, - { - "first_name": "Mindy", - "last_name": "Scott", - "organization": "Kelly, Ruiz and Carey", - "email": "billy74@example.net", - "pretix_order": "AE704", - "has_app": false - }, - { - "first_name": "James", - "last_name": "White", - "organization": "Brooks Group", - "email": "halleugene@example.com", - "pretix_order": "C923D", - "has_app": false - }, - { - "first_name": "Jennifer", - "last_name": "Gonzalez", - "organization": "Holden and Sons", - "email": "rojaskristin@example.com", - "pretix_order": "E0E69", - "has_app": true - }, - { - "first_name": "Paul", - "last_name": "Cross", - "organization": "King, Campbell and Smith", - "email": "allenbrittney@example.com", - "pretix_order": "B4A0B", - "has_app": true - }, - { - "first_name": "Margaret", - "last_name": "Mcgrath", - "organization": "Jones, Fisher and Torres", - "email": "brady87@example.com", - "pretix_order": "C2E52", - "has_app": true - }, - { - "first_name": "Lisa", - "last_name": "Banks", - "organization": "Smith, Curry and Patterson", - "email": "schmittemily@example.com", - "pretix_order": "29ACC", - "has_app": true - }, - { - "first_name": "Peggy", - "last_name": "Larsen", - "organization": "Valenzuela-Ortiz", - "email": "hsosa@example.org", - "pretix_order": "F8D20", - "has_app": true - }, - { - "first_name": "Luis", - "last_name": "Barnes", - "organization": "Richardson Ltd", - "email": "carl01@example.org", - "pretix_order": "C6E3B", - "has_app": true - }, - { - "first_name": "Susan", - "last_name": "Miller", - "organization": "Morgan-Avila", - "email": "ycoffey@example.com", - "pretix_order": "0A193", - "has_app": false - }, - { - "first_name": "Matthew", - "last_name": "Wilcox", - "organization": "Franco-Jones", - "email": "lauragreen@example.net", - "pretix_order": "656C2", - "has_app": false - }, - { - "first_name": "Dan", - "last_name": "Simmons", - "organization": "Haley PLC", - "email": "carolswanson@example.com", - "pretix_order": "D5978", - "has_app": false - }, - { - "first_name": "Derek", - "last_name": "Park", - "organization": "Rogers, Grant and Williams", - "email": "josephholmes@example.org", - "pretix_order": "AA039", - "has_app": false - }, - { - "first_name": "Crystal", - "last_name": "Anderson", - "organization": "Mcdonald PLC", - "email": "petersenjeremy@example.com", - "pretix_order": "84802", - "has_app": true - }, - { - "first_name": "Dale", - "last_name": "Mcconnell", - "organization": "Barry Ltd", - "email": "lisa93@example.net", - "pretix_order": "333DB", - "has_app": false - }, - { - "first_name": "Thomas", - "last_name": "Jackson", - "organization": "Rose, Kim and Wagner", - "email": "luisrowe@example.org", - "pretix_order": "4E450", - "has_app": true - }, - { - "first_name": "Evelyn", - "last_name": "Fitzgerald", - "organization": "Brown, Williams and Wright", - "email": "bryangibson@example.com", - "pretix_order": "D85BA", - "has_app": true - }, - { - "first_name": "Shirley", - "last_name": "Wilson", - "organization": "Rice-Olson", - "email": "adamsanthony@example.org", - "pretix_order": "73075", - "has_app": false - }, - { - "first_name": "Ashley", - "last_name": "Evans", - "organization": "Smith, West and Bryan", - "email": "bsmith@example.com", - "pretix_order": "05B50", - "has_app": true - }, - { - "first_name": "Michele", - "last_name": "Anderson", - "organization": "Zhang Group", - "email": "jill93@example.com", - "pretix_order": "91665", - "has_app": true - }, - { - "first_name": "Stephanie", - "last_name": "Wilson", - "organization": "Liu and Sons", - "email": "umorgan@example.net", - "pretix_order": "D6C01", - "has_app": true - }, - { - "first_name": "Marie", - "last_name": "Smith", - "organization": "Lopez-Farmer", - "email": "kathleenclark@example.com", - "pretix_order": "5F9E0", - "has_app": false - }, - { - "first_name": "Christopher", - "last_name": "Warner", - "organization": "Shelton, Nelson and Alvarez", - "email": "wilsonjustin@example.org", - "pretix_order": "C4BDE", - "has_app": false - }, - { - "first_name": "Kyle", - "last_name": "Castro", - "organization": "Jackson Ltd", - "email": "obonilla@example.net", - "pretix_order": "4B01A", - "has_app": true - }, - { - "first_name": "Cheryl", - "last_name": "Jones", - "organization": "Campos-Lee", - "email": "tylersmith@example.com", - "pretix_order": "0E03F", - "has_app": true - }, - { - "first_name": "John", - "last_name": "Dean", - "organization": "Rice-Johnson", - "email": "danielzuniga@example.com", - "pretix_order": "297E0", - "has_app": true - }, - { - "first_name": "Brittany", - "last_name": "Mccormick", - "organization": "Mason-Harrell", - "email": "castillocolleen@example.net", - "pretix_order": "3078D", - "has_app": false - }, - { - "first_name": "David", - "last_name": "Richardson", - "organization": "Gutierrez Group", - "email": "foxjames@example.com", - "pretix_order": "D79B0", - "has_app": true - }, - { - "first_name": "Karen", - "last_name": "Bush", - "organization": "Ramirez-Gonzalez", - "email": "cmay@example.net", - "pretix_order": "16044", - "has_app": true - }, - { - "first_name": "Jonathan", - "last_name": "Carter", - "organization": "Gonzalez, Miller and Thomas", - "email": "eberry@example.com", - "pretix_order": "FC9A8", - "has_app": false - }, - { - "first_name": "Mary", - "last_name": "Long", - "organization": "Castro Ltd", - "email": "jasmin22@example.com", - "pretix_order": "9B96E", - "has_app": false - }, - { - "first_name": "Jennifer", - "last_name": "Johnson", - "organization": "Jennings and Sons", - "email": "richardcox@example.org", - "pretix_order": "19774", - "has_app": true - }, - { - "first_name": "Lisa", - "last_name": "Mcgrath", - "organization": "Shelton PLC", - "email": "smithsandra@example.org", - "pretix_order": "EEAB0", - "has_app": true - }, - { - "first_name": "Jacqueline", - "last_name": "Cook", - "organization": "Hudson Group", - "email": "myersmichelle@example.net", - "pretix_order": "4BBDF", - "has_app": false - }, - { - "first_name": "Jason", - "last_name": "Cox", - "organization": "Miranda, Thomas and Jackson", - "email": "slee@example.net", - "pretix_order": "2C33F", - "has_app": true - }, - { - "first_name": "Julie", - "last_name": "Alexander", - "organization": "Duke, Miller and Nichols", - "email": "stacy85@example.com", - "pretix_order": "ADC46", - "has_app": false - }, - { - "first_name": "Mark", - "last_name": "Collins", - "organization": "Coleman-Williams", - "email": "matthew17@example.org", - "pretix_order": "C1B6C", - "has_app": false - }, - { - "first_name": "Jacob", - "last_name": "Davis", - "organization": "Blair and Sons", - "email": "larrymiller@example.com", - "pretix_order": "18885", - "has_app": true - }, - { - "first_name": "Pamela", - "last_name": "Johnson", - "organization": "Day-Martinez", - "email": "hammondmark@example.net", - "pretix_order": "62299", - "has_app": true - }, - { - "first_name": "Kimberly", - "last_name": "Lawson", - "organization": "Hernandez-Wilson", - "email": "johnathan93@example.org", - "pretix_order": "A2CA5", - "has_app": true - }, - { - "first_name": "Nicholas", - "last_name": "Meyer", - "organization": "Owens, Young and Bush", - "email": "jamiepowers@example.org", - "pretix_order": "77E95", - "has_app": true - }, - { - "first_name": "Jillian", - "last_name": "Martin", - "organization": "Klein-Petersen", - "email": "stefanieramos@example.com", - "pretix_order": "AF7DC", - "has_app": false - }, - { - "first_name": "Scott", - "last_name": "Martinez", - "organization": "Frazier Ltd", - "email": "jessica93@example.org", - "pretix_order": "E9A57", - "has_app": false - }, - { - "first_name": "Beth", - "last_name": "Shannon", - "organization": "Holloway-Wells", - "email": "dfletcher@example.org", - "pretix_order": "D7C01", - "has_app": false - }, - { - "first_name": "Matthew", - "last_name": "Savage", - "organization": "Salas-Gonzalez", - "email": "bcarpenter@example.net", - "pretix_order": "11E2C", - "has_app": false - }, - { - "first_name": "Victoria", - "last_name": "Hunt", - "organization": "Wong LLC", - "email": "lori20@example.net", - "pretix_order": "E5FFF", - "has_app": false - }, - { - "first_name": "Mary", - "last_name": "Martinez", - "organization": "Villanueva, Harris and Frey", - "email": "brittany77@example.com", - "pretix_order": "14BBC", - "has_app": true - }, - { - "first_name": "Jennifer", - "last_name": "Johnson", - "organization": "Flores-Williams", - "email": "frazierrebecca@example.org", - "pretix_order": "40D8B", - "has_app": true - }, - { - "first_name": "Brandon", - "last_name": "Brock", - "organization": "Gonzales-Daniel", - "email": "peterwilliams@example.org", - "pretix_order": "71069", - "has_app": false - }, - { - "first_name": "Sandra", - "last_name": "Reynolds", - "organization": "Turner, Johnson and Davis", - "email": "richard42@example.org", - "pretix_order": "A0567", - "has_app": true - }, - { - "first_name": "James", - "last_name": "Jackson", - "organization": "Ford Inc", - "email": "ronaldharris@example.net", - "pretix_order": "A3479", - "has_app": false - }, - { - "first_name": "Sheila", - "last_name": "Miranda", - "organization": "Hawkins-Lewis", - "email": "johnjones@example.com", - "pretix_order": "8CB23", - "has_app": false - }, - { - "first_name": "Mary", - "last_name": "Spence", - "organization": "Smith, Johnson and Edwards", - "email": "zmayo@example.com", - "pretix_order": "6DFD0", - "has_app": true - }, - { - "first_name": "Kathleen", - "last_name": "Malone", - "organization": "Lozano, Moore and Hickman", - "email": "janetcase@example.org", - "pretix_order": "93FD0", - "has_app": false - }, - { - "first_name": "Thomas", - "last_name": "Bailey", - "organization": "Cole Group", - "email": "craigjames@example.org", - "pretix_order": "B8CDF", - "has_app": true - }, - { - "first_name": "Harold", - "last_name": "May", - "organization": "Davis Ltd", - "email": "gary38@example.net", - "pretix_order": "065B5", - "has_app": true - }, - { - "first_name": "Patrick", - "last_name": "Johnson", - "organization": "Myers-Simpson", - "email": "kramerryan@example.com", - "pretix_order": "1077A", - "has_app": true - }, - { - "first_name": "Neil", - "last_name": "Bennett", - "organization": "Jimenez Group", - "email": "twatson@example.com", - "pretix_order": "0FC27", - "has_app": false - }, - { - "first_name": "Kathryn", - "last_name": "Blair", - "organization": "Morrison-Molina", - "email": "ashleymccullough@example.com", - "pretix_order": "81BCE", - "has_app": true - }, - { - "first_name": "Jonathan", - "last_name": "Crawford", - "organization": "Waller-Thomas", - "email": "josephalison@example.com", - "pretix_order": "4374D", - "has_app": true - }, - { - "first_name": "Justin", - "last_name": "Ryan", - "organization": "Pacheco, Short and Schroeder", - "email": "watkinschristopher@example.org", - "pretix_order": "1E060", - "has_app": true - }, - { - "first_name": "Wyatt", - "last_name": "Parrish", - "organization": "Allen-Roberts", - "email": "ztodd@example.net", - "pretix_order": "7CB11", - "has_app": true - }, - { - "first_name": "Jared", - "last_name": "Rios", - "organization": "Cabrera, Griffin and Rogers", - "email": "erin92@example.com", - "pretix_order": "1DA49", - "has_app": true - }, - { - "first_name": "Victoria", - "last_name": "Burns", - "organization": "Morgan, Jones and Snyder", - "email": "jonathanparsons@example.org", - "pretix_order": "019CB", - "has_app": false - }, - { - "first_name": "Tiffany", - "last_name": "Mason", - "organization": "Luna, Day and Donaldson", - "email": "jennifer01@example.com", - "pretix_order": "2F5A0", - "has_app": false - }, - { - "first_name": "Andrea", - "last_name": "Spencer", - "organization": "Long-Hudson", - "email": "ehodges@example.org", - "pretix_order": "C6C9E", - "has_app": true - }, - { - "first_name": "Brianna", - "last_name": "Johnson", - "organization": "Miller-Rodriguez", - "email": "stacywillis@example.net", - "pretix_order": "E367F", - "has_app": true - }, - { - "first_name": "Holly", - "last_name": "Diaz", - "organization": "Fields-Poole", - "email": "hernandezsarah@example.com", - "pretix_order": "0097C", - "has_app": false - }, - { - "first_name": "David", - "last_name": "Lopez", - "organization": "Alexander Ltd", - "email": "michael19@example.net", - "pretix_order": "6E6DB", - "has_app": false - }, - { - "first_name": "Kelly", - "last_name": "Powell", - "organization": "Turner and Sons", - "email": "echristensen@example.org", - "pretix_order": "4BD2A", - "has_app": false - }, - { - "first_name": "Cameron", - "last_name": "Sherman", - "organization": "Cisneros Inc", - "email": "michael38@example.org", - "pretix_order": "FC430", - "has_app": true - }, - { - "first_name": "Patricia", - "last_name": "Jones", - "organization": "Walker-Harris", - "email": "michael07@example.net", - "pretix_order": "9D9F3", - "has_app": false - }, - { - "first_name": "Michael", - "last_name": "Gutierrez", - "organization": "Johnson-Serrano", - "email": "fhiggins@example.com", - "pretix_order": "0456A", - "has_app": false - }, - { - "first_name": "Alicia", - "last_name": "Pugh", - "organization": "Johnson-Morrison", - "email": "uparker@example.com", - "pretix_order": "F6253", - "has_app": false - }, - { - "first_name": "Paige", - "last_name": "Wright", - "organization": "Jones Inc", - "email": "marilynjackson@example.org", - "pretix_order": "2D563", - "has_app": false - }, - { - "first_name": "Monica", - "last_name": "Pope", - "organization": "Morgan Ltd", - "email": "adam33@example.org", - "pretix_order": "B036D", - "has_app": true - }, - { - "first_name": "Ryan", - "last_name": "Randall", - "organization": "Wiley, Long and Jensen", - "email": "xholmes@example.net", - "pretix_order": "EF953", - "has_app": true - }, - { - "first_name": "Gregory", - "last_name": "White", - "organization": "Smith-Patrick", - "email": "philiptaylor@example.net", - "pretix_order": "39049", - "has_app": true - }, - { - "first_name": "Mark", - "last_name": "Morales", - "organization": "Lopez, Norris and Harris", - "email": "hurstvalerie@example.com", - "pretix_order": "C8D79", - "has_app": false - }, - { - "first_name": "Robert", - "last_name": "Greene", - "organization": "Brown Inc", - "email": "kcollins@example.net", - "pretix_order": "FF7E6", - "has_app": true - }, - { - "first_name": "Suzanne", - "last_name": "Rojas", - "organization": "Vaughn Group", - "email": "gclayton@example.net", - "pretix_order": "9A845", - "has_app": false - }, - { - "first_name": "Jasmine", - "last_name": "Patel", - "organization": "Rios-Carpenter", - "email": "tammyjones@example.net", - "pretix_order": "9F161", - "has_app": false - }, - { - "first_name": "Jessica", - "last_name": "Russell", - "organization": "Olsen LLC", - "email": "rebecca28@example.org", - "pretix_order": "09B72", - "has_app": false - }, - { - "first_name": "Adam", - "last_name": "Walker", - "organization": "Wu Group", - "email": "mlawrence@example.net", - "pretix_order": "927F4", - "has_app": true - }, - { - "first_name": "Charles", - "last_name": "Williams", - "organization": "Stephens-Townsend", - "email": "dixonmichael@example.org", - "pretix_order": "6F19F", - "has_app": true - }, - { - "first_name": "Ashley", - "last_name": "Morris", - "organization": "Evans, Hughes and Lopez", - "email": "georgepitts@example.com", - "pretix_order": "DD80D", - "has_app": true - }, - { - "first_name": "Jennifer", - "last_name": "Johnson", - "organization": "Guerrero-Nelson", - "email": "susannovak@example.com", - "pretix_order": "B06CE", - "has_app": false - }, - { - "first_name": "Elizabeth", - "last_name": "Gomez", - "organization": "Walters-Wade", - "email": "wchristian@example.net", - "pretix_order": "4B773", - "has_app": true - }, - { - "first_name": "Peggy", - "last_name": "Allison", - "organization": "Flores Inc", - "email": "william10@example.org", - "pretix_order": "A7080", - "has_app": false - }, - { - "first_name": "Leslie", - "last_name": "Miller", - "organization": "Harris, Torres and Payne", - "email": "liujamie@example.com", - "pretix_order": "E7B15", - "has_app": true - }, - { - "first_name": "Michelle", - "last_name": "Goodman", - "organization": "Hopkins Ltd", - "email": "johngilmore@example.com", - "pretix_order": "FD8DB", - "has_app": false - }, - { - "first_name": "Paul", - "last_name": "Fitzgerald", - "organization": "Page Group", - "email": "garciakevin@example.com", - "pretix_order": "FBDA8", - "has_app": true - }, - { - "first_name": "Julie", - "last_name": "Johnson", - "organization": "Taylor, Thompson and Gomez", - "email": "michelekim@example.org", - "pretix_order": "30C3E", - "has_app": true - }, - { - "first_name": "Walter", - "last_name": "Ball", - "organization": "Soto, Lopez and Rhodes", - "email": "campbelldebra@example.org", - "pretix_order": "0E7EA", - "has_app": true - }, - { - "first_name": "Michelle", - "last_name": "Sanford", - "organization": "Watson, Harrison and Gilbert", - "email": "xrobinson@example.com", - "pretix_order": "C1026", - "has_app": true - }, - { - "first_name": "Heather", - "last_name": "Williams", - "organization": "Robinson PLC", - "email": "sray@example.net", - "pretix_order": "C3F64", - "has_app": false - }, - { - "first_name": "Derrick", - "last_name": "Ellison", - "organization": "Mullen, Coffey and Carrillo", - "email": "matthew81@example.org", - "pretix_order": "B14C7", - "has_app": false - }, - { - "first_name": "Donna", - "last_name": "Yates", - "organization": "Nguyen-Nelson", - "email": "kevinklein@example.org", - "pretix_order": "6C6C0", - "has_app": false - }, - { - "first_name": "Martin", - "last_name": "Mcclure", - "organization": "Miller, Palmer and Ball", - "email": "davischristopher@example.org", - "pretix_order": "B7612", - "has_app": false - }, - { - "first_name": "Douglas", - "last_name": "Evans", - "organization": "Bolton LLC", - "email": "vrivera@example.com", - "pretix_order": "0D775", - "has_app": false - }, - { - "first_name": "Lauren", - "last_name": "Gray", - "organization": "Harris PLC", - "email": "pottssteven@example.com", - "pretix_order": "11CEF", - "has_app": false - }, - { - "first_name": "Timothy", - "last_name": "Mitchell", - "organization": "Bolton, Yoder and Miller", - "email": "nstevenson@example.org", - "pretix_order": "846FD", - "has_app": true - }, - { - "first_name": "Margaret", - "last_name": "Mendoza", - "organization": "Peterson-Lewis", - "email": "adamsmall@example.net", - "pretix_order": "5C05A", - "has_app": false - }, - { - "first_name": "David", - "last_name": "Clark", - "organization": "Chavez-Reed", - "email": "arobinson@example.org", - "pretix_order": "7AA65", - "has_app": true - }, - { - "first_name": "Kathryn", - "last_name": "Bailey", - "organization": "Payne Ltd", - "email": "dawsoncalvin@example.org", - "pretix_order": "B6C44", - "has_app": true - }, - { - "first_name": "Shawn", - "last_name": "Hernandez", - "organization": "Hernandez LLC", - "email": "agallagher@example.org", - "pretix_order": "8C9C3", - "has_app": false - }, - { - "first_name": "Michael", - "last_name": "Clark", - "organization": "Adams-Obrien", - "email": "waterschristopher@example.org", - "pretix_order": "95F41", - "has_app": true - }, - { - "first_name": "Brian", - "last_name": "Rice", - "organization": "Allen, Solomon and Gomez", - "email": "brent36@example.net", - "pretix_order": "E6555", - "has_app": false - }, - { - "first_name": "Ryan", - "last_name": "Moreno", - "organization": "Gilbert-Cole", - "email": "yrodriguez@example.org", - "pretix_order": "A9381", - "has_app": false - }, - { - "first_name": "Leslie", - "last_name": "Morris", - "organization": "Mitchell, Brown and Wade", - "email": "piercejames@example.net", - "pretix_order": "BD7F2", - "has_app": false - }, - { - "first_name": "Anthony", - "last_name": "Holland", - "organization": "Marshall, Gutierrez and Davidson", - "email": "fletcherlindsey@example.com", - "pretix_order": "5E9BA", - "has_app": true - }, - { - "first_name": "Ashley", - "last_name": "Brown", - "organization": "French, Perez and Evans", - "email": "richardsmith@example.com", - "pretix_order": "E31A6", - "has_app": false - }, - { - "first_name": "Adrian", - "last_name": "Mckinney", - "organization": "Moon Inc", - "email": "cartervalerie@example.net", - "pretix_order": "A8B11", - "has_app": true - }, - { - "first_name": "Ralph", - "last_name": "Garcia", - "organization": "Vega LLC", - "email": "nicholas25@example.net", - "pretix_order": "DC390", - "has_app": true - }, - { - "first_name": "Kimberly", - "last_name": "Craig", - "organization": "Carpenter, Krause and Daniel", - "email": "grios@example.org", - "pretix_order": "B9865", - "has_app": true - }, - { - "first_name": "Martin", - "last_name": "Fischer", - "organization": "Pena-Wilson", - "email": "josebailey@example.org", - "pretix_order": "30C52", - "has_app": true - }, - { - "first_name": "Ryan", - "last_name": "Matthews", - "organization": "Mclaughlin Inc", - "email": "lawrence58@example.net", - "pretix_order": "9D61D", - "has_app": false - }, - { - "first_name": "Rachel", - "last_name": "Sanders", - "organization": "Ryan-Smith", - "email": "coreyhess@example.org", - "pretix_order": "ADB51", - "has_app": false - }, - { - "first_name": "Robert", - "last_name": "Weaver", - "organization": "Smith, Glenn and Roberts", - "email": "wernerjennifer@example.net", - "pretix_order": "8E490", - "has_app": true - }, - { - "first_name": "Douglas", - "last_name": "Williams", - "organization": "West LLC", - "email": "iperry@example.com", - "pretix_order": "CEF9A", - "has_app": false - }, - { - "first_name": "Nicole", - "last_name": "Morgan", - "organization": "Scott-Wheeler", - "email": "vanessacoleman@example.com", - "pretix_order": "1F908", - "has_app": true - }, - { - "first_name": "Kimberly", - "last_name": "Schultz", - "organization": "Lee-Taylor", - "email": "makayla13@example.com", - "pretix_order": "4CFC2", - "has_app": false - }, - { - "first_name": "Grace", - "last_name": "Allen", - "organization": "Aguilar-Sanders", - "email": "opowell@example.net", - "pretix_order": "47FD7", - "has_app": true - }, - { - "first_name": "Tammy", - "last_name": "Sheppard", - "organization": "Graham-Rice", - "email": "brent65@example.net", - "pretix_order": "524EF", - "has_app": false - }, - { - "first_name": "Nancy", - "last_name": "Heath", - "organization": "Wilkinson Inc", - "email": "dillonangela@example.net", - "pretix_order": "8A0FC", - "has_app": true - }, - { - "first_name": "Johnny", - "last_name": "Bullock", - "organization": "Phillips PLC", - "email": "perkinsdavid@example.org", - "pretix_order": "F2D53", - "has_app": false - }, - { - "first_name": "Jennifer", - "last_name": "Morales", - "organization": "Williams Ltd", - "email": "christopher62@example.com", - "pretix_order": "30077", - "has_app": false - }, - { - "first_name": "Julie", - "last_name": "Walker", - "organization": "Olson PLC", - "email": "jenniferwilliams@example.net", - "pretix_order": "33DA9", - "has_app": false - }, - { - "first_name": "Brandon", - "last_name": "White", - "organization": "Richardson, Cisneros and Griffith", - "email": "joseph19@example.com", - "pretix_order": "E3D48", - "has_app": false - }, - { - "first_name": "Renee", - "last_name": "Mccarthy", - "organization": "Garcia, Bolton and Lane", - "email": "mark93@example.net", - "pretix_order": "12B9B", - "has_app": false - }, - { - "first_name": "Cynthia", - "last_name": "Lee", - "organization": "Bruce-Mason", - "email": "esalazar@example.org", - "pretix_order": "1906A", - "has_app": true - }, - { - "first_name": "Ann", - "last_name": "Pierce", - "organization": "Lee and Sons", - "email": "jameswalker@example.org", - "pretix_order": "6C85A", - "has_app": true - }, - { - "first_name": "Lori", - "last_name": "Vazquez", - "organization": "Landry LLC", - "email": "kayla51@example.org", - "pretix_order": "E9A3C", - "has_app": true - }, - { - "first_name": "John", - "last_name": "Chambers", - "organization": "Davis Group", - "email": "bscott@example.org", - "pretix_order": "1E389", - "has_app": false - }, - { - "first_name": "Joanna", - "last_name": "Ray", - "organization": "Macias Inc", - "email": "whitejennifer@example.net", - "pretix_order": "2FD1A", - "has_app": true - }, - { - "first_name": "Jeffrey", - "last_name": "Coffey", - "organization": "Luna-Holmes", - "email": "jonathan51@example.org", - "pretix_order": "A5BEB", - "has_app": true - }, - { - "first_name": "Jessica", - "last_name": "Santiago", - "organization": "Miller Inc", - "email": "jamesmullins@example.net", - "pretix_order": "BDC7C", - "has_app": true - }, - { - "first_name": "Kimberly", - "last_name": "Stephens", - "organization": "Rogers LLC", - "email": "brandonraymond@example.net", - "pretix_order": "CE15A", - "has_app": false - }, - { - "first_name": "Alyssa", - "last_name": "Jackson", - "organization": "West Ltd", - "email": "caitlinmiller@example.net", - "pretix_order": "36381", - "has_app": true - }, - { - "first_name": "Crystal", - "last_name": "Moreno", - "organization": "Morris-Shelton", - "email": "deborahrios@example.net", - "pretix_order": "0E81B", - "has_app": false - }, - { - "first_name": "James", - "last_name": "Butler", - "organization": "Richardson, Hamilton and Bell", - "email": "mariaschultz@example.org", - "pretix_order": "A73DC", - "has_app": true - }, - { - "first_name": "Shawn", - "last_name": "Ellison", - "organization": "Anderson Inc", - "email": "smithvicki@example.org", - "pretix_order": "0F53C", - "has_app": true - }, - { - "first_name": "Thomas", - "last_name": "Mays", - "organization": "Smith-Chambers", - "email": "justin01@example.com", - "pretix_order": "76F56", - "has_app": true - }, - { - "first_name": "Michael", - "last_name": "Miller", - "organization": "Castro Inc", - "email": "gregoryherrera@example.net", - "pretix_order": "DF5E6", - "has_app": false - }, - { - "first_name": "George", - "last_name": "Long", - "organization": "Howell, Meyer and Hernandez", - "email": "ychurch@example.org", - "pretix_order": "F4D51", - "has_app": true - }, - { - "first_name": "Todd", - "last_name": "Conner", - "organization": "Willis-White", - "email": "dakotawatson@example.net", - "pretix_order": "B5627", - "has_app": false - }, - { - "first_name": "Karen", - "last_name": "Rowland", - "organization": "Garcia, Keller and Baker", - "email": "yrodriguez@example.com", - "pretix_order": "DEB61", - "has_app": true - }, - { - "first_name": "Elizabeth", - "last_name": "Crawford", - "organization": "Burton-Bowman", - "email": "aaron48@example.org", - "pretix_order": "2B5EC", - "has_app": false - }, - { - "first_name": "James", - "last_name": "Stein", - "organization": "Mitchell-Lee", - "email": "jonathan50@example.org", - "pretix_order": "F556B", - "has_app": true - }, - { - "first_name": "Justin", - "last_name": "Kline", - "organization": "Smith, Austin and Henderson", - "email": "maddoxlaurie@example.net", - "pretix_order": "3FDE7", - "has_app": false - }, - { - "first_name": "Wendy", - "last_name": "Proctor", - "organization": "Webster and Sons", - "email": "hernandezfrank@example.net", - "pretix_order": "6355D", - "has_app": false - }, - { - "first_name": "Kristen", - "last_name": "Jackson", - "organization": "Gordon, Taylor and Duran", - "email": "raymondkyle@example.org", - "pretix_order": "51E9E", - "has_app": false - }, - { - "first_name": "Harold", - "last_name": "Reyes", - "organization": "Hayes PLC", - "email": "annajohnson@example.com", - "pretix_order": "892AC", - "has_app": false - }, - { - "first_name": "Joanne", - "last_name": "Rodriguez", - "organization": "Herrera Ltd", - "email": "ipeterson@example.org", - "pretix_order": "4F486", - "has_app": true - }, - { - "first_name": "Shannon", - "last_name": "Mcdaniel", - "organization": "Mccann-Nelson", - "email": "morganjose@example.net", - "pretix_order": "17B86", - "has_app": true - }, - { - "first_name": "Nicholas", - "last_name": "Kline", - "organization": "Hoffman, Mccarthy and Dixon", - "email": "echandler@example.org", - "pretix_order": "4B326", - "has_app": false - }, - { - "first_name": "Justin", - "last_name": "Cain", - "organization": "Walker, Conrad and Hampton", - "email": "whorton@example.net", - "pretix_order": "B1211", - "has_app": true - }, - { - "first_name": "Andrew", - "last_name": "Adams", - "organization": "Stewart-Campbell", - "email": "ifriedman@example.org", - "pretix_order": "C6864", - "has_app": true - }, - { - "first_name": "Nicholas", - "last_name": "Pruitt", - "organization": "Graves-Johnson", - "email": "ybennett@example.com", - "pretix_order": "55646", - "has_app": false - }, - { - "first_name": "Debra", - "last_name": "Snow", - "organization": "Howell, Schmidt and Lewis", - "email": "andrew51@example.org", - "pretix_order": "882F4", - "has_app": false - }, - { - "first_name": "Robert", - "last_name": "Graves", - "organization": "Oneill, Deleon and Wilson", - "email": "christophercollins@example.org", - "pretix_order": "7993F", - "has_app": true - }, - { - "first_name": "Donald", - "last_name": "Peters", - "organization": "Bell Ltd", - "email": "caleb59@example.com", - "pretix_order": "6949E", - "has_app": false - }, - { - "first_name": "James", - "last_name": "Williams", - "organization": "Cole, Norman and Kramer", - "email": "marywebster@example.net", - "pretix_order": "79D32", - "has_app": true - }, - { - "first_name": "Mary", - "last_name": "Thompson", - "organization": "Tapia, Robertson and Greer", - "email": "adam10@example.org", - "pretix_order": "65E9C", - "has_app": false - }, - { - "first_name": "Patricia", - "last_name": "Short", - "organization": "Lopez Inc", - "email": "khanjoseph@example.org", - "pretix_order": "208D6", - "has_app": true - }, - { - "first_name": "Jennifer", - "last_name": "Case", - "organization": "Rhodes Inc", - "email": "gomezstephanie@example.org", - "pretix_order": "FEAF8", - "has_app": false - }, - { - "first_name": "William", - "last_name": "Rosales", - "organization": "Cole-Brown", - "email": "alishafry@example.com", - "pretix_order": "33980", - "has_app": false - }, - { - "first_name": "Heather", - "last_name": "Watkins", - "organization": "Hernandez, King and Braun", - "email": "madisonjohnson@example.com", - "pretix_order": "591C7", - "has_app": false - }, - { - "first_name": "Aaron", - "last_name": "Potts", - "organization": "Avery-Johnson", - "email": "jennifer96@example.com", - "pretix_order": "B2511", - "has_app": true - }, - { - "first_name": "Karina", - "last_name": "Boone", - "organization": "Grant Inc", - "email": "ashley66@example.net", - "pretix_order": "8E479", - "has_app": true - }, - { - "first_name": "Kevin", - "last_name": "Butler", - "organization": "Smith, Copeland and Robles", - "email": "michellemiller@example.com", - "pretix_order": "69AE1", - "has_app": false - }, - { - "first_name": "Justin", - "last_name": "Becker", - "organization": "Moreno-Perez", - "email": "xmoran@example.com", - "pretix_order": "420B9", - "has_app": false - }, - { - "first_name": "Terri", - "last_name": "Briggs", - "organization": "Thomas LLC", - "email": "andrew92@example.net", - "pretix_order": "684A7", - "has_app": false - }, - { - "first_name": "Sheri", - "last_name": "Soto", - "organization": "Sanchez PLC", - "email": "gwest@example.org", - "pretix_order": "6BD50", - "has_app": true - }, - { - "first_name": "Monica", - "last_name": "Prince", - "organization": "Reynolds-Miller", - "email": "vdunlap@example.com", - "pretix_order": "9256B", - "has_app": false - }, - { - "first_name": "Stephanie", - "last_name": "Sosa", - "organization": "Stokes, Petersen and Bentley", - "email": "pdurham@example.org", - "pretix_order": "CF360", - "has_app": true - }, - { - "first_name": "Dakota", - "last_name": "Lewis", - "organization": "Johnson, Lara and Sawyer", - "email": "debbiereed@example.net", - "pretix_order": "14A28", - "has_app": true - }, - { - "first_name": "Kelsey", - "last_name": "Hall", - "organization": "Walker LLC", - "email": "armstrongtony@example.com", - "pretix_order": "0F026", - "has_app": true - }, - { - "first_name": "Rebecca", - "last_name": "Koch", - "organization": "Anderson-Brown", - "email": "huntmarcus@example.com", - "pretix_order": "FEF22", - "has_app": false - }, - { - "first_name": "Laura", - "last_name": "Vazquez", - "organization": "Murray-Chandler", - "email": "michael69@example.com", - "pretix_order": "19418", - "has_app": false - }, - { - "first_name": "Jennifer", - "last_name": "Anderson", - "organization": "Munoz-Paul", - "email": "veronicacarr@example.com", - "pretix_order": "ACF19", - "has_app": true - }, - { - "first_name": "Frederick", - "last_name": "Hall", - "organization": "Smith PLC", - "email": "bsmith@example.org", - "pretix_order": "136B1", - "has_app": true - }, - { - "first_name": "Shannon", - "last_name": "Haley", - "organization": "Cunningham-Casey", - "email": "james55@example.com", - "pretix_order": "48E31", - "has_app": true - }, - { - "first_name": "Kayla", - "last_name": "Johnson", - "organization": "Larsen, Holden and Oneill", - "email": "bjones@example.com", - "pretix_order": "53E91", - "has_app": false - }, - { - "first_name": "Dalton", - "last_name": "Jones", - "organization": "Thompson, Richardson and Sanchez", - "email": "vglass@example.com", - "pretix_order": "96192", - "has_app": false - }, - { - "first_name": "Carl", - "last_name": "Turner", - "organization": "Perry-Salazar", - "email": "zacharyhamilton@example.com", - "pretix_order": "5F316", - "has_app": true - }, - { - "first_name": "Melinda", - "last_name": "Scott", - "organization": "Johnson, Marks and Diaz", - "email": "cnavarro@example.com", - "pretix_order": "0AE7A", - "has_app": true - }, - { - "first_name": "Juan", - "last_name": "Morrison", - "organization": "Holt LLC", - "email": "vjohnston@example.com", - "pretix_order": "D903D", - "has_app": true - }, - { - "first_name": "Jessica", - "last_name": "Carr", - "organization": "Mckay Inc", - "email": "sarah34@example.com", - "pretix_order": "3F49C", - "has_app": false - }, - { - "first_name": "Jay", - "last_name": "Green", - "organization": "Cortez, Flores and Bowman", - "email": "joshua12@example.org", - "pretix_order": "30AA5", - "has_app": false - }, - { - "first_name": "Gina", - "last_name": "Gordon", - "organization": "Maynard Ltd", - "email": "emilywhitney@example.com", - "pretix_order": "5DAE2", - "has_app": false - }, - { - "first_name": "Jennifer", - "last_name": "Juarez", - "organization": "Mullins and Sons", - "email": "oscott@example.org", - "pretix_order": "F8A79", - "has_app": false - }, - { - "first_name": "Carlos", - "last_name": "Heath", - "organization": "Ortiz Group", - "email": "johnsonmegan@example.com", - "pretix_order": "137C1", - "has_app": true - }, - { - "first_name": "Susan", - "last_name": "Little", - "organization": "Osborn PLC", - "email": "veronicabeck@example.com", - "pretix_order": "E61A1", - "has_app": false - }, - { - "first_name": "Jeremy", - "last_name": "Newman", - "organization": "Johnson, Moore and Barr", - "email": "jacobvincent@example.net", - "pretix_order": "314E6", - "has_app": false - }, - { - "first_name": "Brenda", - "last_name": "Shaffer", - "organization": "Brooks-Rubio", - "email": "xrussell@example.com", - "pretix_order": "E9505", - "has_app": false - }, - { - "first_name": "George", - "last_name": "Carr", - "organization": "Martin-Joseph", - "email": "francis52@example.com", - "pretix_order": "3AEC2", - "has_app": true - }, - { - "first_name": "Renee", - "last_name": "Coleman", - "organization": "Patel, Arnold and Mathis", - "email": "vmejia@example.com", - "pretix_order": "B1E45", - "has_app": false - }, - { - "first_name": "Travis", - "last_name": "Newton", - "organization": "Reyes Inc", - "email": "janet48@example.com", - "pretix_order": "E27F7", - "has_app": true - }, - { - "first_name": "Amy", - "last_name": "Winters", - "organization": "Allen LLC", - "email": "matthewjohnson@example.com", - "pretix_order": "1DA51", - "has_app": false - }, - { - "first_name": "Aaron", - "last_name": "Mcdonald", - "organization": "Roberts-Black", - "email": "meyerbrittany@example.com", - "pretix_order": "73AFA", - "has_app": true - }, - { - "first_name": "Heather", - "last_name": "Little", - "organization": "Erickson, Shaw and Craig", - "email": "tvalenzuela@example.org", - "pretix_order": "7FD21", - "has_app": false - }, - { - "first_name": "Zachary", - "last_name": "Burton", - "organization": "Zimmerman Group", - "email": "laurie79@example.org", - "pretix_order": "C0816", - "has_app": true - }, - { - "first_name": "Alexis", - "last_name": "Love", - "organization": "Hayes Group", - "email": "jacqueline98@example.com", - "pretix_order": "E798B", - "has_app": true - }, - { - "first_name": "Patricia", - "last_name": "Roberts", - "organization": "Underwood Group", - "email": "mooreluis@example.net", - "pretix_order": "92BA0", - "has_app": false - }, - { - "first_name": "Sandra", - "last_name": "Delgado", - "organization": "Brown PLC", - "email": "whitewesley@example.com", - "pretix_order": "6D95F", - "has_app": false - }, - { - "first_name": "Jeffrey", - "last_name": "Freeman", - "organization": "Smith, Cooper and Barnes", - "email": "warmstrong@example.org", - "pretix_order": "AB153", - "has_app": true - }, - { - "first_name": "Savannah", - "last_name": "Johnson", - "organization": "Fisher LLC", - "email": "katelynhoffman@example.net", - "pretix_order": "6E5D6", - "has_app": false - }, - { - "first_name": "Dennis", - "last_name": "Rogers", - "organization": "Anderson PLC", - "email": "johnhines@example.org", - "pretix_order": "FE246", - "has_app": false - }, - { - "first_name": "Michael", - "last_name": "Skinner", - "organization": "Hebert, Smith and Powers", - "email": "david56@example.net", - "pretix_order": "C6F20", - "has_app": false - }, - { - "first_name": "Billy", - "last_name": "Soto", - "organization": "Ward LLC", - "email": "millerjordan@example.org", - "pretix_order": "52911", - "has_app": false - }, - { - "first_name": "Laurie", - "last_name": "Hoffman", - "organization": "Lopez PLC", - "email": "bennettjoshua@example.com", - "pretix_order": "E3C7C", - "has_app": false - }, - { - "first_name": "Joshua", - "last_name": "Gonzalez", - "organization": "Black Group", - "email": "mmiller@example.net", - "pretix_order": "8F68F", - "has_app": true - }, - { - "first_name": "James", - "last_name": "Benton", - "organization": "York, Harrison and Brooks", - "email": "patelcolleen@example.net", - "pretix_order": "CF32A", - "has_app": true - }, - { - "first_name": "Erin", - "last_name": "Williams", - "organization": "Schultz and Sons", - "email": "eoliver@example.org", - "pretix_order": "317EB", - "has_app": true - }, - { - "first_name": "Amber", - "last_name": "Goodwin", - "organization": "Allison-Mahoney", - "email": "briannewman@example.org", - "pretix_order": "947A2", - "has_app": true - }, - { - "first_name": "Robert", - "last_name": "Rodriguez", - "organization": "Smith-Taylor", - "email": "sandra92@example.net", - "pretix_order": "09742", - "has_app": true - }, - { - "first_name": "Duane", - "last_name": "Knox", - "organization": "Decker LLC", - "email": "jenkinslisa@example.net", - "pretix_order": "3082C", - "has_app": true - }, - { - "first_name": "Amber", - "last_name": "Butler", - "organization": "Ayers-Contreras", - "email": "robertjackson@example.net", - "pretix_order": "4AE18", - "has_app": true - }, - { - "first_name": "Melissa", - "last_name": "Hernandez", - "organization": "Melton-Cook", - "email": "carolyn99@example.org", - "pretix_order": "66B3F", - "has_app": false - }, - { - "first_name": "Steven", - "last_name": "Heath", - "organization": "Rivas, Shepherd and Hurst", - "email": "hernandezdanny@example.com", - "pretix_order": "8310D", - "has_app": true - }, - { - "first_name": "Kathryn", - "last_name": "Ward", - "organization": "Galvan, Carter and Smith", - "email": "martinezashley@example.net", - "pretix_order": "12698", - "has_app": true - }, - { - "first_name": "Alexandria", - "last_name": "Tate", - "organization": "Obrien Ltd", - "email": "nelsonadam@example.org", - "pretix_order": "E3927", - "has_app": false - }, - { - "first_name": "Wayne", - "last_name": "Thomas", - "organization": "Salazar-Preston", - "email": "william88@example.org", - "pretix_order": "E3440", - "has_app": false - }, - { - "first_name": "Sara", - "last_name": "Young", - "organization": "Arroyo, Norman and Casey", - "email": "bonnie99@example.org", - "pretix_order": "62930", - "has_app": false - }, - { - "first_name": "Wendy", - "last_name": "Hood", - "organization": "Flores Ltd", - "email": "andrewcummings@example.org", - "pretix_order": "02371", - "has_app": false - }, - { - "first_name": "Rachel", - "last_name": "Morales", - "organization": "Wilson Group", - "email": "jeromegrant@example.org", - "pretix_order": "71E16", - "has_app": true - }, - { - "first_name": "Shannon", - "last_name": "Richards", - "organization": "Mccormick, Hunt and Rodgers", - "email": "christophergreen@example.com", - "pretix_order": "7FD8C", - "has_app": true - }, - { - "first_name": "Robert", - "last_name": "Scott", - "organization": "Stein Ltd", - "email": "faulknerrandy@example.com", - "pretix_order": "70600", - "has_app": false - }, - { - "first_name": "Joshua", - "last_name": "Montgomery", - "organization": "Nguyen-Johnson", - "email": "camachodiane@example.org", - "pretix_order": "08CFD", - "has_app": false - }, - { - "first_name": "Cindy", - "last_name": "Ramirez", - "organization": "Chavez LLC", - "email": "vangcharles@example.com", - "pretix_order": "12020", - "has_app": true - }, - { - "first_name": "Sarah", - "last_name": "Taylor", - "organization": "Neal Ltd", - "email": "lcampbell@example.com", - "pretix_order": "F3B0D", - "has_app": true - }, - { - "first_name": "Jimmy", - "last_name": "Tucker", - "organization": "Clark, Nguyen and Lee", - "email": "arthur84@example.org", - "pretix_order": "9FBB3", - "has_app": true - }, - { - "first_name": "Bryan", - "last_name": "Chapman", - "organization": "Johnson-Diaz", - "email": "jacobgraham@example.com", - "pretix_order": "8DA2C", - "has_app": false - }, - { - "first_name": "William", - "last_name": "Bailey", - "organization": "Tucker-Harris", - "email": "patelrenee@example.org", - "pretix_order": "25BDB", - "has_app": false - }, - { - "first_name": "Tina", - "last_name": "Vincent", - "organization": "Henderson Inc", - "email": "glenda21@example.net", - "pretix_order": "0D07F", - "has_app": false - }, - { - "first_name": "Joanna", - "last_name": "Wilson", - "organization": "Reed, Gray and Baldwin", - "email": "schaefermichael@example.net", - "pretix_order": "DE84A", - "has_app": false - }, - { - "first_name": "Wyatt", - "last_name": "Stevenson", - "organization": "Hogan, Townsend and Miller", - "email": "andrew00@example.com", - "pretix_order": "39D32", - "has_app": false - }, - { - "first_name": "Philip", - "last_name": "Crawford", - "organization": "Frederick PLC", - "email": "abarr@example.net", - "pretix_order": "56080", - "has_app": false - }, - { - "first_name": "Richard", - "last_name": "Hoffman", - "organization": "Jackson, Hudson and Hinton", - "email": "jmorris@example.com", - "pretix_order": "A9E73", - "has_app": true - }, - { - "first_name": "Erin", - "last_name": "Stephens", - "organization": "Trevino, Henderson and Mata", - "email": "sjohnson@example.com", - "pretix_order": "D2556", - "has_app": true - }, - { - "first_name": "Curtis", - "last_name": "Powell", - "organization": "Pham, Alvarez and Miller", - "email": "boothsabrina@example.com", - "pretix_order": "C6537", - "has_app": true - }, - { - "first_name": "Katrina", - "last_name": "Torres", - "organization": "Patterson PLC", - "email": "michelle41@example.com", - "pretix_order": "0A092", - "has_app": true - }, - { - "first_name": "Yolanda", - "last_name": "Ford", - "organization": "Stone, Barton and Hodges", - "email": "xfleming@example.net", - "pretix_order": "A271C", - "has_app": true - }, - { - "first_name": "Derek", - "last_name": "Thompson", - "organization": "Chang Group", - "email": "fmoore@example.net", - "pretix_order": "28321", - "has_app": true - }, - { - "first_name": "Kayla", - "last_name": "Cooper", - "organization": "Miller-Obrien", - "email": "adamjohnson@example.net", - "pretix_order": "C5F49", - "has_app": false - }, - { - "first_name": "Christopher", - "last_name": "Lopez", - "organization": "Goodman, Ferguson and Andrews", - "email": "joshuamarshall@example.net", - "pretix_order": "1146F", - "has_app": true - }, - { - "first_name": "Robert", - "last_name": "Nunez", - "organization": "Johnson-Thompson", - "email": "ritterdeborah@example.com", - "pretix_order": "52427", - "has_app": false - }, - { - "first_name": "Stephanie", - "last_name": "Vasquez", - "organization": "Gonzales, Morrow and Moore", - "email": "keith07@example.com", - "pretix_order": "12E22", - "has_app": true - }, - { - "first_name": "Brandy", - "last_name": "Bass", - "organization": "Oneill LLC", - "email": "qmiles@example.net", - "pretix_order": "F1B46", - "has_app": true - }, - { - "first_name": "Adrienne", - "last_name": "Adams", - "organization": "Cox Group", - "email": "stephen67@example.org", - "pretix_order": "A40F5", - "has_app": true - }, - { - "first_name": "Bradley", - "last_name": "Ryan", - "organization": "Mathis-Martin", - "email": "coryfitzgerald@example.org", - "pretix_order": "D8866", - "has_app": true - }, - { - "first_name": "Melissa", - "last_name": "Powell", - "organization": "Farmer LLC", - "email": "ujuarez@example.org", - "pretix_order": "41CEA", - "has_app": true - }, - { - "first_name": "Sabrina", - "last_name": "Ford", - "organization": "Burton Group", - "email": "alexbarrett@example.com", - "pretix_order": "0F651", - "has_app": true - }, - { - "first_name": "Kim", - "last_name": "Wright", - "organization": "Montgomery LLC", - "email": "davisdavid@example.org", - "pretix_order": "1971D", - "has_app": false - }, - { - "first_name": "Melanie", - "last_name": "Smith", - "organization": "Cunningham-Sims", - "email": "jeffreyritter@example.com", - "pretix_order": "FEE75", - "has_app": true - }, - { - "first_name": "Gregory", - "last_name": "Dyer", - "organization": "Nguyen, Weaver and Osborn", - "email": "cookjustin@example.org", - "pretix_order": "A0C77", - "has_app": false - }, - { - "first_name": "Kevin", - "last_name": "Conley", - "organization": "Phillips, Ramos and Martinez", - "email": "connor57@example.net", - "pretix_order": "3A268", - "has_app": true - }, - { - "first_name": "Michael", - "last_name": "Petty", - "organization": "Barber, Marshall and Henry", - "email": "brandon12@example.net", - "pretix_order": "944D4", - "has_app": true - }, - { - "first_name": "Mark", - "last_name": "Mendez", - "organization": "Cooper Inc", - "email": "qparker@example.net", - "pretix_order": "20BE0", - "has_app": false - }, - { - "first_name": "Brittany", - "last_name": "Mitchell", - "organization": "Thomas Group", - "email": "bmoore@example.org", - "pretix_order": "B89DC", - "has_app": false - }, - { - "first_name": "Teresa", - "last_name": "Lawson", - "organization": "Castillo-Cantrell", - "email": "johncrawford@example.net", - "pretix_order": "0175D", - "has_app": true - }, - { - "first_name": "Michael", - "last_name": "Gomez", - "organization": "Peters, Rodriguez and Anderson", - "email": "cynthiaolsen@example.com", - "pretix_order": "2E63C", - "has_app": false - }, - { - "first_name": "Jacob", - "last_name": "Fisher", - "organization": "Williams-Flores", - "email": "yanderson@example.com", - "pretix_order": "3ADFA", - "has_app": false - }, - { - "first_name": "Angela", - "last_name": "Simpson", - "organization": "Lynch and Sons", - "email": "danielleblanc@example.com", - "pretix_order": "77EE9", - "has_app": false - }, - { - "first_name": "Melissa", - "last_name": "May", - "organization": "Martinez, Perkins and Pearson", - "email": "williamhall@example.org", - "pretix_order": "E0127", - "has_app": false - }, - { - "first_name": "Michael", - "last_name": "Holt", - "organization": "Snyder-Howard", - "email": "stevencastillo@example.com", - "pretix_order": "AEDBB", - "has_app": true - }, - { - "first_name": "Nicholas", - "last_name": "Hatfield", - "organization": "Jackson-Nelson", - "email": "reesechristina@example.net", - "pretix_order": "CF401", - "has_app": false - }, - { - "first_name": "Joseph", - "last_name": "Matthews", - "organization": "Young Ltd", - "email": "marco02@example.org", - "pretix_order": "8C1D0", - "has_app": false - }, - { - "first_name": "John", - "last_name": "Gomez", - "organization": "King, Osborne and Parker", - "email": "matthewwashington@example.net", - "pretix_order": "DDE41", - "has_app": false - }, - { - "first_name": "Desiree", - "last_name": "Davis", - "organization": "Russell, Crane and Barber", - "email": "shelby82@example.net", - "pretix_order": "E8BEB", - "has_app": false - }, - { - "first_name": "Trevor", - "last_name": "Mills", - "organization": "Carpenter-Willis", - "email": "taylormaldonado@example.com", - "pretix_order": "A4897", - "has_app": true - }, - { - "first_name": "John", - "last_name": "Bond", - "organization": "Smith-Johnson", - "email": "fdecker@example.org", - "pretix_order": "F7CA1", - "has_app": false - }, - { - "first_name": "Christopher", - "last_name": "Hudson", - "organization": "Flynn Inc", - "email": "terri13@example.net", - "pretix_order": "6BDAF", - "has_app": true - }, - { - "first_name": "Randall", - "last_name": "Thompson", - "organization": "Liu, Glenn and Fernandez", - "email": "gregory12@example.net", - "pretix_order": "093F1", - "has_app": true - }, - { - "first_name": "Nicole", - "last_name": "Navarro", - "organization": "Lewis, Cain and Henderson", - "email": "scott86@example.net", - "pretix_order": "46923", - "has_app": true - }, - { - "first_name": "Lindsey", - "last_name": "Burgess", - "organization": "Rivera LLC", - "email": "willie66@example.org", - "pretix_order": "D23A7", - "has_app": false - }, - { - "first_name": "Cody", - "last_name": "Garcia", - "organization": "Robbins Inc", - "email": "brandoncraig@example.net", - "pretix_order": "EC20A", - "has_app": true - }, - { - "first_name": "Robert", - "last_name": "White", - "organization": "Mcguire, Moses and Johnson", - "email": "ashley85@example.com", - "pretix_order": "B8945", - "has_app": true - }, - { - "first_name": "Lauren", - "last_name": "Holland", - "organization": "Melendez LLC", - "email": "nross@example.com", - "pretix_order": "AB620", - "has_app": true - }, - { - "first_name": "Shannon", - "last_name": "Harrington", - "organization": "King-Aguirre", - "email": "smorrison@example.org", - "pretix_order": "14776", - "has_app": true - }, - { - "first_name": "Dawn", - "last_name": "Tyler", - "organization": "Franklin-Pacheco", - "email": "greenkeith@example.com", - "pretix_order": "9410B", - "has_app": true - }, - { - "first_name": "Meghan", - "last_name": "Johnson", - "organization": "Becker Group", - "email": "kristina41@example.com", - "pretix_order": "32C7F", - "has_app": false - }, - { - "first_name": "Diana", - "last_name": "Hammond", - "organization": "Young PLC", - "email": "rodriguezdaniel@example.net", - "pretix_order": "4717F", - "has_app": true - }, - { - "first_name": "Robert", - "last_name": "Porter", - "organization": "Hamilton PLC", - "email": "williamstonya@example.com", - "pretix_order": "DDFC0", - "has_app": false - }, - { - "first_name": "Cory", - "last_name": "Carter", - "organization": "Bates, Smith and Harris", - "email": "mcleanamanda@example.net", - "pretix_order": "95463", - "has_app": false - }, - { - "first_name": "Jacob", - "last_name": "Hale", - "organization": "Johnson Group", - "email": "lauren99@example.com", - "pretix_order": "5ADFD", - "has_app": false - }, - { - "first_name": "Michael", - "last_name": "Hall", - "organization": "Oliver and Sons", - "email": "munozcharles@example.com", - "pretix_order": "004D0", - "has_app": false - }, - { - "first_name": "Sandra", - "last_name": "Henderson", - "organization": "Henderson-Foster", - "email": "natalie37@example.net", - "pretix_order": "A5E3D", - "has_app": true - }, - { - "first_name": "Kristen", - "last_name": "Henderson", - "organization": "Beltran, Bruce and Hernandez", - "email": "buchananangela@example.org", - "pretix_order": "5ED60", - "has_app": true - }, - { - "first_name": "Linda", - "last_name": "Hall", - "organization": "Simon, Davis and Casey", - "email": "harringtonkaren@example.org", - "pretix_order": "52727", - "has_app": true - }, - { - "first_name": "Christopher", - "last_name": "Mora", - "organization": "Martin Group", - "email": "lowethomas@example.net", - "pretix_order": "CA0D1", - "has_app": false - }, - { - "first_name": "Donna", - "last_name": "Winters", - "organization": "Adams Group", - "email": "alexstanley@example.net", - "pretix_order": "B81A1", - "has_app": false - }, - { - "first_name": "Roberto", - "last_name": "Rodriguez", - "organization": "Robinson, Hall and Martin", - "email": "stephaniegreen@example.com", - "pretix_order": "612C4", - "has_app": true - }, - { - "first_name": "Anthony", - "last_name": "Alexander", - "organization": "Cox, Campbell and Esparza", - "email": "pwalker@example.com", - "pretix_order": "7FA26", - "has_app": true - }, - { - "first_name": "Sara", - "last_name": "Finley", - "organization": "Lopez, Bradley and Rivera", - "email": "carlosparker@example.com", - "pretix_order": "7F67E", - "has_app": true - }, - { - "first_name": "Andres", - "last_name": "Valencia", - "organization": "Wilson-Mcintyre", - "email": "osteele@example.org", - "pretix_order": "8972C", - "has_app": true - }, - { - "first_name": "Kelsey", - "last_name": "Patel", - "organization": "Edwards and Sons", - "email": "crystalsims@example.net", - "pretix_order": "F426D", - "has_app": false - }, - { - "first_name": "Brent", - "last_name": "Smith", - "organization": "Leonard Inc", - "email": "beverly75@example.com", - "pretix_order": "04F15", - "has_app": true - }, - { - "first_name": "Elizabeth", - "last_name": "Williams", - "organization": "Tucker and Sons", - "email": "sbarajas@example.org", - "pretix_order": "F5359", - "has_app": true - }, - { - "first_name": "Nicholas", - "last_name": "Swanson", - "organization": "Gutierrez-Bates", - "email": "rpage@example.com", - "pretix_order": "A5987", - "has_app": true - }, - { - "first_name": "James", - "last_name": "White", - "organization": "Peck, Lopez and Gilbert", - "email": "juliasteele@example.com", - "pretix_order": "34A8C", - "has_app": false - }, - { - "first_name": "Shawn", - "last_name": "Nguyen", - "organization": "Hopkins-Young", - "email": "jose98@example.com", - "pretix_order": "59C80", - "has_app": true - }, - { - "first_name": "Jessica", - "last_name": "Smith", - "organization": "Mullen, Peters and Parker", - "email": "cody27@example.org", - "pretix_order": "30D6A", - "has_app": false - }, - { - "first_name": "Audrey", - "last_name": "Mason", - "organization": "Morales-Contreras", - "email": "stephanie76@example.org", - "pretix_order": "D76EA", - "has_app": false - }, - { - "first_name": "Donna", - "last_name": "Carter", - "organization": "Richards PLC", - "email": "zbrown@example.com", - "pretix_order": "94BF8", - "has_app": true - }, - { - "first_name": "Timothy", - "last_name": "Zimmerman", - "organization": "Lindsey-Martinez", - "email": "weeksjames@example.org", - "pretix_order": "71BE8", - "has_app": true - }, - { - "first_name": "Jennifer", - "last_name": "Hicks", - "organization": "Greene, Hill and Jones", - "email": "bennettrebecca@example.org", - "pretix_order": "4C2DB", - "has_app": false - }, - { - "first_name": "Mark", - "last_name": "Graves", - "organization": "Lee, Brown and Swanson", - "email": "griffinchristopher@example.net", - "pretix_order": "F59A4", - "has_app": true - }, - { - "first_name": "Lee", - "last_name": "Gonzalez", - "organization": "Thomas-Gonzalez", - "email": "raycalhoun@example.net", - "pretix_order": "59AB0", - "has_app": false - }, - { - "first_name": "Valerie", - "last_name": "Aguilar", - "organization": "Thomas and Sons", - "email": "mlove@example.org", - "pretix_order": "6E2D1", - "has_app": true - }, - { - "first_name": "Dennis", - "last_name": "Brewer", - "organization": "Santiago, Henderson and Malone", - "email": "janerodriguez@example.org", - "pretix_order": "A1D79", - "has_app": true - }, - { - "first_name": "Jerry", - "last_name": "Simpson", - "organization": "Nichols, Diaz and Mccoy", - "email": "marc69@example.net", - "pretix_order": "FD793", - "has_app": true - }, - { - "first_name": "John", - "last_name": "Potter", - "organization": "Martin Ltd", - "email": "josefrazier@example.org", - "pretix_order": "2ED75", - "has_app": false - }, - { - "first_name": "Andrew", - "last_name": "Perry", - "organization": "Wilson, Smith and Rivers", - "email": "suzanne79@example.com", - "pretix_order": "3700E", - "has_app": true - }, - { - "first_name": "Cameron", - "last_name": "Martinez", - "organization": "Rodriguez-Blankenship", - "email": "lisa30@example.com", - "pretix_order": "A8700", - "has_app": true - }, - { - "first_name": "Michael", - "last_name": "Larson", - "organization": "Gregory Inc", - "email": "ebarnett@example.com", - "pretix_order": "12E5C", - "has_app": false - }, - { - "first_name": "Nancy", - "last_name": "Obrien", - "organization": "Carter-Gray", - "email": "tony95@example.org", - "pretix_order": "43480", - "has_app": true - }, - { - "first_name": "Brian", - "last_name": "Kim", - "organization": "Phillips Group", - "email": "melissa01@example.org", - "pretix_order": "BCD52", - "has_app": false - }, - { - "first_name": "Jason", - "last_name": "Fernandez", - "organization": "Vaughn-Vance", - "email": "lucas16@example.org", - "pretix_order": "E8434", - "has_app": true - }, - { - "first_name": "Carl", - "last_name": "Cook", - "organization": "Lawrence-Murray", - "email": "dean21@example.net", - "pretix_order": "3511C", - "has_app": false - }, - { - "first_name": "Michael", - "last_name": "Beard", - "organization": "Fields and Sons", - "email": "marypadilla@example.com", - "pretix_order": "B1A43", - "has_app": true - }, - { - "first_name": "Robert", - "last_name": "Kelley", - "organization": "Sullivan and Sons", - "email": "james85@example.com", - "pretix_order": "69C9A", - "has_app": true - }, - { - "first_name": "Andrew", - "last_name": "Brown", - "organization": "Marquez-Banks", - "email": "zjoseph@example.org", - "pretix_order": "6E4EF", - "has_app": false - }, - { - "first_name": "Elizabeth", - "last_name": "Jenkins", - "organization": "Richard, Knight and Roach", - "email": "michael23@example.com", - "pretix_order": "69391", - "has_app": false - }, - { - "first_name": "Isaiah", - "last_name": "Flores", - "organization": "Cantu-Rowland", - "email": "johnsonanthony@example.net", - "pretix_order": "90390", - "has_app": true - }, - { - "first_name": "Jonathan", - "last_name": "Fletcher", - "organization": "Fox-Owens", - "email": "kristenmartin@example.net", - "pretix_order": "AFCCE", - "has_app": false - }, - { - "first_name": "Martha", - "last_name": "Solomon", - "organization": "Davis Inc", - "email": "davidsilva@example.net", - "pretix_order": "2D133", - "has_app": true - }, - { - "first_name": "Matthew", - "last_name": "Powell", - "organization": "Gonzalez Group", - "email": "judith51@example.org", - "pretix_order": "47C42", - "has_app": false - }, - { - "first_name": "Hannah", - "last_name": "Smith", - "organization": "Walters-Wilson", - "email": "cynthianixon@example.net", - "pretix_order": "78E69", - "has_app": true - }, - { - "first_name": "Jason", - "last_name": "Smith", - "organization": "Bennett Group", - "email": "valentinerita@example.com", - "pretix_order": "1755E", - "has_app": true - }, - { - "first_name": "Dawn", - "last_name": "Eaton", - "organization": "Velasquez-Moss", - "email": "jenniferweber@example.net", - "pretix_order": "EC17B", - "has_app": false - }, - { - "first_name": "Carlos", - "last_name": "Butler", - "organization": "Crawford Inc", - "email": "yyoung@example.org", - "pretix_order": "54769", - "has_app": true - }, - { - "first_name": "Sean", - "last_name": "Webster", - "organization": "Torres and Sons", - "email": "yerickson@example.com", - "pretix_order": "C54D1", - "has_app": true - } -] \ No newline at end of file diff --git a/src/tests/assets/sfs2023streaming.yaml b/src/tests/assets/sfs2023streaming.yaml deleted file mode 100644 index 71c229e..0000000 --- a/src/tests/assets/sfs2023streaming.yaml +++ /dev/null @@ -1,15 +0,0 @@ -Main track: https://www.youtube.com/live/pGB4IRIEOTA?si=YMjmXNOneReYwl86 -Artificial Intelligence track: https://www.youtube.com/live/a3Z99yOEBeE?si=w0lZi35XHBs-Ifwb -Community track: https://www.youtube.com/live/m8AMmQrwPAQ?si=HAxXi2zida3HfzpT -Cybersecurity track: https://www.youtube.com/live/dyckcGuKMig?si=WzyZN1xNAuNj_XIP -Developers track: https://www.youtube.com/live/PoaUQyaQVJE?si=aGZD9Js0MMvVScv9 -Legal track: https://www.youtube.com/live/QvwZW5urLEM?si=liltKJU92_13usuj -OW2 track: https://www.youtube.com/live/m8AMmQrwPAQ?si=HAxXi2zida3HfzpT -Public Money Public Code & Open Data track: https://www.youtube.com/live/RDxExYDZ-qo?si=QoEsWZrl29j564iv -Data4SmartHealth: https://www.youtube.com/live/qcAhs07jits?si=pWLF-3JeJvGB_neW -ZOOOM project track: https://www.youtube.com/live/0gOWmZ1Yvlc?si=e0XCplDci5wSQvQR -Open Data & Open Hardware track: https://www.youtube.com/live/qejn68tzrd0?si=2PRfjevKpnpHmUEJ -Side Event - Hackathon: https://sfscon.it -Side Event - School Reading: https://sfscon.it -Closing - with a Tale of Software, Skateboards, and Raspberry Ice Cream: https://sfscon.it -Side Event - FSFE - Italian community meeting: https://www.youtube.com/live/YdqEpBv5J9Y?si=xtr0zGotO8nwP8xR diff --git a/src/tests/assets/sfscon2023.xml b/src/tests/assets/sfscon2023.xml deleted file mode 100644 index 7d9b5bb..0000000 --- a/src/tests/assets/sfscon2023.xml +++ /dev/null @@ -1,2023 +0,0 @@ - - - - sfscon-2023 - SFSCON 2023 - - - Main track - Artificial Intelligence track - Community track - Cybersecurity track - Developers track - Legal track - OW2 track - Public Money Public Code & Open Data track - Data4SmartHealth - ZOOOM project track - Open Data & Open Hardware track - Side Event - Hackathon - Side Event - School Reading - Closing - with a Tale of Software, Skateboards, and Raspberry Ice Cream - Side Event - FSFE - Italian community meeting - - - - - 08:30 - 00:30 - Check-in - - Main track - Main track - Main track,Main track - - - 18:40 - 00:30 - Closing of the first day - - SFSCON - SFSCON - SFSCON - - - - - 09:00 - 00:30 - Opening SFSCON 2023 - - <p>Opening SFSCON 2023</p> - - Main track - Main track - Main track,Main track - - Vincent Mauroit - - - - 09:30 - 00:30 - Coming soon - - Main track - Main track - Main track,Main track - - - 10:00 - 00:30 - Coming soon - - Main track - Main track - Main track,Main track - - - 10:30 - 00:30 - What the AI revolution means for Open Source, Open Tech and Open Societies - - <p>In the last year we saw the rise of AI systems like ChatGPT, Stable Diffusion, Dall-E and others. Large Language Models like GPT are enabling a lot of new innovative features and products which will revolutionise the world.<br /> -But this large autoregressive language models come with a lot of challenges that can have negative effects on the Open Source and Open Tech community. For example it’s unclear if in the future everyone will have access to the same ML models and training data. Can students, startups and open source people build innovative new products using AI in the same way the open source communities build Open Code and Open Tech. How can we make sure that the AI system are not discriminating underrepresented minorities? What is the energy consumption and CO2 emissions of this new big AI systems?<br /> -This talk will discuss the current fascinating trends in AI, the challenges and some possible solution. It will also cover the current Open Source AI features in Nextcloud and our Ethical AI framework.</p> - - Main track - Main track - Main track,Main track - - Frank Karlitschek - - - - 11:00 - 00:20 - European SFS Award 2023 - - <p>The award is given to a person who contributed to the introduction of the culture of Free Software.</p> - - SFSCON - SFSCON - SFSCON - - - 11:20 - 00:20 - The First Year of Eclipse Software Defined Vehicle: a successful “code first” approach - - <p>The most notable impact of using SW in the automotive domain is the decrease in fatalities as ADAS functions are more widely employed. On the other hand, SW complexity has seen an almost exponential growth reaching about 100 million lines of code.<br /> -Hardly any organization can tackle this challenge alone.</p> -<p>The Eclipse Software Defined Vehicle (SDV) Working Group ’s mission is to foster collaboration across industries to create an open technology platform for the software defined vehicle of the future. The working group community driven by its 40 member organization has chosen a “code first” approach to facilitate more agile and faster time-to-market software development.<br /> -After its formation about a year ago, the SDV WG has onboarded about 20 open source projects and is working on integrating several projects together to create “blueprints”. The frameworks emerging from these initial blueprints show the potential and benefits of utilizing different projects as components to build broader solutions to address more complex problems</p> -<p>This contribution introduces the SDV WG and Community, as well as its projects and capabilities.</p> - - Main track - Main track - Main track,Main track - - Sara Gallian - - - - 11:40 - 00:20 - Pyccel: write Python code, get Fortran speed - - <p>Imagine writing a pure Python library which can achieve the performance of Fortran or C/C++.<br /> -To this end we have developed Pyccel, which translates Python code to either Fortran or C, and makes the generated code callable from Python. The generated Fortran or C code is not only fast, but also human-readable; hence it can easily be profiled and optimized for the target machine.<br /> -Pyccel has a focus on high-performance computing applications, where the efficient usage of the available hardware resources is fundamental.<br /> -To this end it provides type annotations, function decorators, and OpenMP pragmas.<br /> -Pyccel is easy to use, is almost completely written in Python, and compares favourably against other Python accelerators.</p> - - Main track - Main track - Main track,Main track - - Emily Bourne - Yaman Güçlü - - - - 12:00 - 00:20 - Flaky tests – how to deal with them - - <p>Every QA/QE professional has encountered a flaky test at least once in their career. It may be a small, harmless bug that can be fixed in an instant, or it may take months to identify and fix it. This can be very costly and take a toll on your reputation and budget.</p> -<p>Don&#8217;t you want to know why flaky tests exist, how to identify them at an earlier stage, or even avoid them?</p> -<p>Join the investigation and we will figure it out together with you to find out the origins and roots of common flaky tests; to explore real cases and their solutions; to learn good practices.</p> - - Main track - Main track - Main track,Main track - - Juri Solovjov - - - - 12:20 - 00:20 - Psydac: a Python IGA library for large-scale simulations - - Ease of use and high performance in the open-source Python ecosystem - Ease of use and high performance in the open-source Python ecosystem - <p>Psydac is an open source library for isogeometric analysis (IGA), that is, a finite element method which uses the same basis functions of a CAD model (B-splines and NURBS).<br /> -It has been developed at the Max Planck Institute for Plasma Physics, with the goal of exploring advanced numerical methods for electromagnetism, magneto-hydro-dynamics, and plasma kinetics. It is completely written in Python, uses only open-source libraries, and can run large parallel simulations on high-performance computing facilities. It employs a domain specific language, automatic code generation, a transpiler, MPI communication, OpenMP multithreading, and parallel I/O. In this talk we explore the library architecture and its overall design philosophy, which can be applied to other domains.</p> - - Main track - Main track - Main track,Main track - - Yaman Güçlü - - - - 12:40 - 00:20 - The incredible machine: when automation backfires - - The hidden costs of automation - The hidden costs of automation - <p>Ever wanted to apply CI/CD principles and run tests for every change?<br /> -But it is too complex to set up the test environment, and launch the tests with all the updated parameters, solution? Automation!<br /> -Release your software implies a countless number of complicated steps, what solution? Automation!<br /> -So automation sometimes seems to be the solution, you automate some complex procedure and call the day.</p> -<p>But automation of a process sometimes can only hide the real problem and only delay the moment when you have to address the technical debt, and sometimes the automation can even also act as an amplifier of the technical debt.</p> -<p>Based on the experience matured on the field, this talk will be shown the hidden traps of automation, the drawbacks, and the lessons learned.</p> - - Main track - Main track - Main track,Main track - - Matteo Valentini - - - - 13:00 - 00:20 - Write High Performance Clients for RabbitMQ - - <p>In this talk, I will share our experience with writing clients for the RabbitMQ stream queues.<br /> -The RabbitMQ stream queues have been designed with performance as a major goal. So the clients have to be performant.<br /> -We will see how we increased the throughput and/or reduced the latency.<br /> -.NET and Go clients will be taken as examples. We will go through some real production code.</p> - - Main track - Main track - Main track,Main track - - Gabriele Santomaggio - - - - 13:20 - 00:20 - Ithaca: the Clean and Hexagonal Architectural Island - - An introduction to Clean and Hexagonal Architecture principles - An introduction to Clean and Hexagonal Architecture principles - <p>Get ready to sail from the Scylla and Charybdis&#8217;s shores of 3-layered architecture to the safe Ithaca refreshing shores of Clean and Hexagonal Architecture! Brace yourself as we surf from zero to Ulysses (a hero!), leaving behind monstrous code and embracing cleanliness and modularity. No more Odysseys; protect your source code navigation through Clean and Hexagonal Architecture principles!</p> - - Main track - Main track - Main track,Main track - - Luca Guadagnini - - - - 13:40 - 04:20 - Accessibility improvements for Uyuni - - <p>Uyuni is a powerful open source configuration and infrastructure management tool used by many organisations worldwide.<br /> -However, its current state presents accessibility challenges for people with disabilities. Its user interface relies heavily on visual elements, making it difficult for visually impaired users to navigate and access its features.</p> -<p>The presentation will dive into the ongoing work to increase Uyuni&#8217;s accessibility following the Web Content Accessibility Guidelines (WCAG).</p> -<p>Apart from focusing on the specific work for Uyuni, during the presentation, the participants will be also introduced to best practices for designing accessible WebUI and easy tools to be use during the software development.</p> - - Main track - Main track - Main track,Main track - - Marina Latini - - - - 14:00 - 00:20 - squash the flakes! - - how to minimize the impact of flaky tests - how to minimize the impact of flaky tests - <p>Flakes aka tests that don’t behave deterministically, i.e. they fail sometimes and pass sometimes, are an ever recurring problem in software development. This is especially the sad reality when running e2e tests where a lot of components are involved. There are various reasons why a test can be flaky, however the impact can be as fatal as CI being loaded beyond capacity causing overly long feedback cycles or even users losing trust in CI itself.</p> -<p>We want to remove flakes as fast as possible to minimize the number of retests required. This leads to shorter time to merge, reduces CI user frustration, improves trust in CI, while at the same time it decreases the overall load for the CI system.</p> -<p>We start by generating a report of tests that have failed at least once inside a merged PR, meaning that in the end all tests have succeeded, thus flaky tests have been run inside CI. We then look at the report to separate flakes from real issues and forward the flakes to dev teams.</p> -<p>As a result retest numbers have gone down significantly over the last year.</p> -<p>After attending the session the user will have an idea of what our flake process is, how we exercise it and what the actual outcomes are.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Daniel Hiller - - - - 14:20 - 00:20 - A comparison of Open Source FaaS technologies - - <p>As the demand for serverless computing continues to grow, the availability and choice of open source Function as a Service (FaaS) technologies are expanding rapidly. In this talk, we will present our experience in using some of the most popular open source FaaS platforms, compare them and discussing their features and characteristics.</p> -<p>The session will begin with an introduction to serverless computing and the key concepts behind FaaS. Throughout the talk, we will analyze various aspects such as ease of deployment, architecture, specific features, etc. We will examine real-world use cases and share insights on the strengths and limitations of each platform, allowing attendees to make informed decisions when choosing the right FaaS technology for their projects.</p> -<p>By the end of this session, attendees will have a better understanding of the open source FaaS landscape from our experience in production usage.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Andrea Avancini - Michele Santuari - Alberto Sillitti - - - - 14:40 - 00:20 - Coming soon - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - - 15:00 - 00:20 - F-Droid – The place for your FOSS Apps - - Why you should submit your FOSS Android App to F-Droid - Why you should submit your FOSS Android App to F-Droid - <p>On F-Droid you can find thousands of FOSS apps and games for Android. F-Droid brings you visibility in the FOSS community that will provide great feedback, open issues and eventually contribute to your FOSS project.<br /> -This presentation is about my personal experience with my games Ball2Box, Pocket Broomball and Sn4ke published on F-Droid. I will show you what F-Droid is, how it works and the steps needed to submit your project.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Simon Dalvai - - - - 15:20 - 00:20 - Coming soon - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - - 15:40 - 00:20 - Don’t let microservices kill you! - - A few ideas on architecting for the journey, not for the destination - A few ideas on architecting for the journey, not for the destination - <p>Microservices is a trend, and for a reason: it’s an architecture style that enables many desirable qualities on the systems that adopt it. By being distributed, it allows using the right technology stack for each capability, at the same time it eases the evolution of each fine-grained part of the system. But it comes with a price and offers significant risks, in particular related to larger portions of the architecture, and also the management of the entire infrastructure. Those costs and risks are the biggest challenges for a new system, when it adopts microservices from the start. But, on the other hand, starting with a monolith might require a big effort to migrate towards microservices in the future. Is that a check-mate?</p> -<p>Definitely not! Don’t let microservices kill you! In this talk, we’re going to see some ideas about architecting the system focusing on the journey. After all, we spend most of the time maintaining and evolving the system, than actually leaving it running “stably”. Also, by seeing how to start something new, we’re actually going to discuss the best architecture practices for any given time of the project.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - João Francisco Lino Daniel - - - - 16:00 - 00:20 - Automating git for development on large distributed teams - - A tour on aggressive use of git branching with automation for distributed cooperation - A tour on aggressive use of git branching with automation for distributed cooperation - <p>Contributing to large open source projects is not always a fast or smooth sailing process, and is often stalled simply due to the necessary human factor.</p> -<p>Contributions are rarely accepted quickly or as-is, and it&#8217;s not uncommon to rework each submission extensively by splitting the proposed change into separated fixes and features, into smaller incremental changes where each is tested independently or sometimes perform complete rewrites.</p> -<p>When the vetting of each submission can require weeks, contributors often feel blocked by the need to wait for their own or peer&#8217;s changes.</p> -<p>To cope in these scenarios, we present a few git branching and automation strategies that allow efficient wait-free development of interconnected changes, even across community members, in a truly distributed fashion.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Yuri D’Elia - - - - 16:20 - 00:20 - Kubernetes for IoT - - How kubernetes can help you quickly and automatically test and deploy new services - How kubernetes can help you quickly and automatically test and deploy new services - <p>While Kubernetes is primarily associated with managing cloud-native applications and microservices, it can also play a role in IoT deployments. Here are a few reasons why Kubernetes is relevant in the context of IoT:</p> -<p>1 Scalability: IoT systems often involve a large number of devices generating massive amounts of data. Kubernetes provides automatic scaling capabilities, allowing IoT applications to scale horizontally by adding or removing instances based on demand. This helps manage the increasing workload efficiently.</p> -<p>2 Resilience and High Availability: IoT applications require high availability to ensure uninterrupted operations. Kubernetes offers features like load balancing, fault tolerance, and self-healing capabilities. It can automatically restart failed containers or replace them with healthy instances, ensuring that IoT services remain available and resilient.</p> -<p>3 Resource Optimization: IoT deployments typically involve a mix of hardware devices with varying capabilities. Kubernetes can optimize resource utilization by efficiently distributing workloads across devices. It allows you to define resource constraints and priorities, ensuring that devices with higher capabilities handle more demanding tasks.</p> -<p>4 Service Discovery and Load Balancing: In an IoT ecosystem, devices and services need to discover and communicate with each other. Kubernetes provides built-in service discovery mechanisms, such as DNS-based service discovery and load balancing, allowing devices to locate and interact with services dynamically.</p> -<p>5 Security and Updates: Security is a crucial aspect of IoT systems, and Kubernetes helps in managing security at scale. It provides features like role-based access control (RBAC), network policies, and secret management to enforce security measures across IoT deployments. Additionally, Kubernetes facilitates rolling updates, allowing for seamless updates and patches without downtime.</p> -<p>6 Flexibility and Portability: Kubernetes abstracts the underlying infrastructure, enabling IoT applications to be deployed consistently across different environments, whether it&#8217;s on-premises, in the cloud, or at the edge. This flexibility allows organizations to migrate or distribute their IoT workloads as needed, making it easier to adopt hybrid or multi-cloud strategies</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Andrea Alfonsi - - - - 16:40 - 00:20 - Pitfalls and Mistakes When Dealing With Non-Functional Requirements - - <p>Non-functional requirements are essential to define the software architecture, and if they are not identified and handled correctly, the impact can be huge. This talk will present some common mistakes when handling non-functional requirements. It starts talking about the ones defined at the beginning of the project with a false certainty, which can become an even worst problem if they are never revised. Then, we will pass through the client that always wants the complete package and talk about the ones that are only remembered when some user complains. Of course, the talk does not forget about those that try to treat those very different non-functional requirements in exactly the same way. In the end, it will be presented some practices that can be used to avoid these problems.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Eduardo Guerra - - - - 17:00 - 00:20 - CrudIt: an opensource framework that makes developers autonomous - - Discover the low-code framework that accelerate app development - Discover the low-code framework that accelerate app development - <p>Nowadays application implementation requires a lot of different competencies that make it impossible for a single person to build an entire application. This led to the need for a big multi-competencies team and increasing in communication issues during the project. But what if we could implement an application without the need of implementing a backend? CrudIt does exactly that. CrudiIt is an open-source framework that enables a small team or a single front-end developer to create small SaaS applications without any knowledge of backend, cloud and sysadmin needs.<br /> -During the event, we will see how to implement a simple SaaS service using Crudit and how to use the framework to accelerate application development.<br /> -Moreover, we will discuss how to host a CrudIt application without any sysadmin competencies in the cloud, using free services.<br /> -This talk will unveil how, thanks to this powerful low-code framework, it is possible to save data without writing a line of code, even if you are working in complex, multitenant scenarios.<br /> -The talk will explain also how the framework is born, how it works internally and promote the opensource philosophy that brings to this library.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Daniele Fontani - Daniele Ciulli - - - - 17:20 - 00:20 - The Entando Marketplace - - Fueling the Capability Economy through FOSS Contributions and Empowering Community-driven Innovation - Fueling the Capability Economy through FOSS Contributions and Empowering Community-driven Innovation - <p>The Entando Platform, an open source Application Composition Platform (ACP), is transforming cloud-native application development. With a component-based approach, organizations harness the power of Entando to effortlessly create and consume reusable components, fostering collaboration and driving productivity.</p> -<p>At the heart of this transformation lies the Entando Marketplace. Entando Marketplace and the Entando Platform provides FOOS communities with a platform to collaborate, showcase their projects, access resources, and streamline development processes.</p> -<p>We delve into the principles and benefits of composable practices, which enable developers to build modular, scalable, and adaptable applications.</p> -<p>Furthermore, we highlight the essential role of the Entando Marketplace as a catalyst for the capability economy. FOSS contributors are empowered to share their expertise and contribute to the growing collection of reusable components, unlocking new possibilities for innovation and collaboration.</p> -<p>Join us to discover how the Entando Community fosters collaboration and embraces composable practices, paving the way for a vibrant FOSS ecosystem. Together, we can cultivate a community-driven capability economy that thrives on shared knowledge and collective innovation.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Emanuele Cerroni - - - - 17:40 - 00:20 - Improving developer experience in Open Source Projects - - How to ease contribution and management of your next big idea - How to ease contribution and management of your next big idea - <p>What makes an open-source project successful? How hard is it to add external people to an open project?<br /> -We at Nethesis have open source in our core with more than 400 public repositories that hold all of our company code. With the upcoming release of NethServer, we’re facing the excruciating question: how do we make it more appealing for developers?<br /> -Follow me in the changes we want to make to our processes to ease development and contributions, using big projects as examples and how even you can make a difference in the smallest of all codebases.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Tommaso Bailetti - - - - 18:00 - 00:30 - CLOSING with a Tale of Software, Skateboards, and Raspberry Ice Cream - - SFSCON - SFSCON - SFSCON - - Matthias Kirschner - - - - - - 10:30 - 01:30 - Ada & Zangemann - - Side Event - School Reading - Side Event - School Reading - Side Event,School Reading - - - 12:00 - 00:30 - Closing of Ada & Zangemann reading - - Side Event - School Reading - Side Event - School Reading - Side Event,School Reading - - - 14:00 - 00:20 - Welcome Data4SmartHealth 2023 - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Floriano Zini - Chiara Ghidini - Andrea Gasparella - - - - 14:20 - 01:00 - AI Algorithms for Digital Therapeutics - - <p>Digital therapeutics tackle diverse medical conditions, and AI algorithms, encompassing machine learning, natural language processing, and computer vision, are central to their success. They enable personalized, data-driven treatments, improving patient outcomes while potentially reducing healthcare costs. This talk explores AI&#8217;s pivotal role in digital therapeutics, where software interventions are reshaping healthcare.</p> - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Gianluigi Greco - - - - 15:20 - 00:20 - Software testing for remote proof of concept studies of digital therapies - - From the definition of a proof of concept study to the development and testing of the required technical infrastructure - From the definition of a proof of concept study to the development and testing of the required technical infrastructure - <p>Digital therapies are evidence-based therapeutic interventions that use software to prevent, manage, or treat a medical disorder or disease.<br /> -Not only they require carefully planned clinical studies, but they require also a suitable technical infrastructure not to lose or compromise relevant information. Consequently, careful software testing and monitoring is necessary to ensure that the technical infrastructure is working correctly during the study.</p> -<p>In this talk we will describe the entire process used for the analysis of the effectiveness of Nearine, a digital therapy for the management of depressive symptoms based on interoceptive stimulation through vibrations applied on the wrist.<br /> -We will start with the description of the remote proof of concept study used for the assessment of the effectiveness and potential adverse effects. After that, the technical infrastructure necessary for the study will be outlined.<br /> -Finally we will show how the usage of CatchSolve for software testing has decreased the risk of potential loss of information during the study.</p> -<p>The talk is the result of a joint collaboration between CatchSolve, software testing startup based in NOI Techpark, and Nearine, a new digital health and neurotechnology startup based in Bolzano.</p> - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Chiara Masci - Davide Montesin - - - - 15:40 - 00:20 - Gimme! Gimme! Gimme! (Some good algorithms) - - Wearable hackers meet e-health experts to make a first class open source Android app - Wearable hackers meet e-health experts to make a first class open source Android app - <p>Gadgetbridge, a free and open source project, has existed since 2015 to allow wearable device customers to use their hardware without being tied to the online services of the manufacturers.</p> -<p>The small but very focused and capable technical community working on the basic functionalities such as retrieving the various data from the wearables (detected activities, sleep, pulse per minute, peripheral oxygen saturation, &#8230;) lacks the expertise on specialised algorithms that could help to perform advanced analysis/diagnostics.</p> -<p>The goal of this talk is to explore a potential collaboration between our communities: Gadgetbridge provides local-only support for an extensive list of wearable devices and a community of engineers and privacy minded users, Data4SmartHealth might contribute advanced algorithms and AI on edge devices.</p> - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Daniele Gobbetti - - - - 16:00 - 00:20 - Home4Me – IoT and AI at service of disability - - An example of how the technology can help disabled people at home. - An example of how the technology can help disabled people at home. - <p>Home4Me is an innovative social project that tries to help disabled people at home (and not only at home).<br /> -The projects tries to keep in mind concrete problems that a person with disabilities lives at home and try to resolve them using IoT ad-hoc devices and a backend to access to the power of Cognitive and AI services.</p> -<p>On the market there are already IoT solutions, but expensive and not customizable to the needed of the disable person: here is where Home4Me want to be a possible solution.</p> - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Luca Nardelli - - - - 16:20 - 00:20 - Discussion on the first round of talks - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Chiara Masci - Davide Montesin - Daniele Gobbetti - Luca Nardelli - - - - 16:40 - 00:20 - Machine learning driven simulation of protein folding atomistic trajectories - - <p>The folding of proteins is an important biological process that determines the structure, role and functionality of proteins. It is often studied by molecular dynamics (MD) simulations, in order to obtain the folding trajectory of all the atoms in the system.<br /> -To date, pure MD simulations require huge computational resources and are still unable to access the timescales of folding processes that have biological relevance.<br /> -In my work, I am exploiting machine learning techniques and one recent AI milestone, Deepmind&#8217;s Alphafold, in order to create an advanced algorithm able to explore the folding trajectories within short computational times. It becomes possible to extract atomistic conformations from the folding pathways, and identify folding intermediates and long-lived states.<br /> -This method can be used to facilitate the identification of biologically relevant protein conformations, later to be used for pharmacological targeting or biophysical studies.</p> - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Alan Ianeselli - - - - 17:00 - 00:20 - Data-driven knowledge discovery from Brain Imaging of Alzheimer’s disease patients - - Artificial Intelligence to support the diagnosis of neurodegenerative disorders - Artificial Intelligence to support the diagnosis of neurodegenerative disorders - <p>Alzheimer’s disease (AD) is a chronic neurodegenerative disease which is largely responsible for dementia in around 6% of the population aged 65 and above. The availability of human brain data generated by imaging techniques, such as Magnetic Resonance Imaging, have resulted in a growing interest in data-driven approaches for the diagnosis of neurological disorders and for the identification of new biomarkers. The knowledge discovery process typically involves complex data workflows that combine pre-processing techniques, statistical methods, machine learning algorithms, post-processing and visualisation techniques. This talk presents specific research efforts in this direction, promising results, open issues and challenges.</p> - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Giuseppe Di Fatta - - - - 17:20 - 00:20 - Management of large genomic data with free software - - <p>The suite of free software tools created within the OpenCB (Open Computational Biology &#8211; https://github.com/opencb) initiative makes possible to efficiently manage large genomic databases.</p> -<p>These tools are not widely used, since there is quite a steep learning curve for their adoption, thanks to the complexity of the software stack, but they may be really cost-effective for hospitals, research institutions etcetera.</p> -<p>The objective of the talk is showing the potential of the OpenCB suite, the information to start using it and the advantages for the end users. BioDec is currently deploying a large OpenCGA installation for the Genetic Unit of one of the main Italian Hospitals, where data in the order of the hundreds of TBs will be managed and analyzed by bioinformaticians.</p> - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Michele Finelli - - - - 17:40 - 00:20 - Discussion on second round of talks and closing - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Alan Ianeselli - Giuseppe Di Fatta - Michele Finelli - - - - - - 11:20 - 00:20 - Self-hosted, Open Source Large Language Models (LLMs) - - What are the most promising projects and how good are they? - What are the most promising projects and how good are they? - <p>In recent years different groups have used the transformer architecture (a deep learning model) to train neural networks using large quantities of text. With the increase in compute power these models have grown to billions or even hundred of billions of parameters. As the model size grew, noteworthy abilities emerged. Such as the ability to generate text showing surprising reasoning skills to the point that the leading models can now successfully take college-level exams.</p> -<p>Currently some of the best and most famous models are proprietary and released to the public as a service. However a large Open Source community has emerged that tries to train and fine tune free models that can be used self-hosted. This is a challenging task due to problems with potential copyright issues with the training text, the large computational cost of the training itself and the supervised fine tuning step to adapt the model to its final use case.</p> -<p>In this talk I will give an overview on what the most promising projects in this space are and how they compare to the proprietary state-of-the-art models of the large players.</p> - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - Chris Mair - - - - 11:40 - 00:20 - Nextcloud – how to keep up with the fast moving IT world - - Artificial Intelligence within Nextcloud - Artificial Intelligence within Nextcloud - <p>At Nextcloud we believe that in order to achieve digital sovereignty we always need to stretch the boundaries. If new technologies and new ways of working come up, we work hard to enable our users to enjoy the same functionality without giving up control over their data and computing.</p> -<p>Over the last few months we saw a lot of innovation in the area of artificial intelligence which might change our way of working to a large extend. At Nextcloud we are happy that we can already provide the first features in this areas to our users. Unfortunately not all features work completely on-premise as of today. That&#8217;s why we introduced a &#8220;Ethical AI Rating&#8221; which provides transparency to the user and let them decide what to use today, while we are working hard to base more and more of this features on Free Software and on-premise solutions.</p> -<p>The talk will present Nextcloud&#8217;s AI-features, the Ethical AI Rating and how we try to approach innovations in a fast moving IT world, in order to bring similar functionality to the Free Software community.</p> - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - Björn Schießle - - - - 12:00 - 00:20 - From Novices to Innovators: Exploring the Possibilities with Free and Open Source AI Tools - - <p>Join me as we explore the world of free and open-source AI tools, empowering individuals and organizations to unleash their creativity and take their innovation to the next level.</p> -<p>Discover how some AI players are democratizing access to cutting-edge technologies and leveling the playing field, e.g. StabilityAI, etc. We will delve into the benefits and opportunities offered by some free and open-source AI tools, exploring their capabilities, potential applications, and the impact they can have on your projects.</p> -<p>Whether you&#8217;re a practitioner or just starting your AI journey, this talk is your gateway to discovering an exciting plethora of free and open-source AI tools, and how they can empower you to stay ahead of the curve in the modern era.</p> - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - Anjan Karmakar - - - - 12:20 - 00:20 - Optimizing Software Performance with Inductive Logic Programming: A Novel Approach - - <p>Concurrent execution of tasks can significantly improve its performance and efficiency. However, identifying which tasks can be executed concurrently and which tasks need to be executed sequentially can be a challenging task. In this talk, I propose using Inductive Logic Programming (ILP) to create a dynamic dependency graph for a given program. The graph can be used to identify which tasks can be executed concurrently and which tasks need to be executed sequentially. I demonstrate the effectiveness of this approach by applying it to a sample program and comparing its performance with a version that does not utilize concurrent execution. This talk presents a novel approach to creating a dynamic dependency graph for programs and highlights the potential benefits of using ILP for optimizing the performance of complex software systems.</p> - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - Enrico Zanardo - - - - 12:40 - 00:20 - Democratizing Language and Vision Technology - - A Retrieval-based Approach for Open Vocabulary Image Classification - A Retrieval-based Approach for Open Vocabulary Image Classification - <p>The advancement in language and vision models (LLM) has seen remarkable progress in recent years. However, the training of these large-scale models poses challenges in terms of time and computational resources, particularly with regards to deep learning models that require powerful GPUs. This has created a significant gap between Big Tech companies, who possess substantial resources to train LLM models, and academia, which often lacks the necessary means to contribute significantly in this field.</p> -<p>To address this issue, we propose an innovative open vocabulary framework called CaSED (Category Search from External Databases). Unlike traditional LLM models, CaSED does not rely on extensive training. Instead, it leverages retrieval techniques from an image-text knowledge base to classify or tag images automatically. By utilizing existing knowledge bases rather than requiring extensive training, CaSED eliminates the need for large computational resources.</p> -<p>In this talk, we will show the potential of low-budget approaches in the context of Language and Vision.</p> - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - Paolo Rota - - - - 13:00 - 00:20 - Web Search, fresh and local - - Deploying the PeARS search engine in regional communities - Deploying the PeARS search engine in regional communities - <p>It is widely believed that Web search engines require immense resources to operate, making it impossible for small communities to build alternatives to the dominant players. The PeARS project (https://pearsproject.org/) aims at changing the status quo by providing open-source search tools that can be used by anyone, anywhere. To achieve this, our team designs algorithms that run on entry-level hardware, using both traditional and cutting-edge machine learning techniques.</p> -<p>This talk will focus on a specific use case for PeARS, showing how the framework can easily be deployed to provide regional search solutions: for instance for local governments, small business communities, or minority speaker groups. We will see how the system can be trained and populated on a home computer in a few clicks and how it can be tailored to the specific community it is addressed to.</p> -<p>The project has received funding from the European Union under the Next Generation Internet programme.</p> - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - Aurelie Herbelot - - - - 13:20 - 00:20 - Image Generation with Diffusion Models - - How computers imagine our world - How computers imagine our world - <p>Recent machine learning developments saw a breakthrough in generating images. So-called Diffusion Models can create photo-realistic images from noise. With the help of an input text (prompt) we can guide the generation and produce matching images.</p> -<p>This technology opened new doors for creating digital art, modifying existing images, and creating stunning visual experiences. In the talk, we will find out how these algorithms work, introduce Stable Diffusion (a concrete implementation), and find out what its use cases are. We will see how text can be used to generate matching outputs but also take a look at more experimental features such as creating images from edges, outlines, or depth maps.</p> -<p>We will mainly focus on the open source text-to-image model Stable Diffusion, which has set new standards in image generation. With it also comes an active community that keeps it open source and accessible for everyone.</p> - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - Markus Pobitzer - - - - 13:40 - 04:20 - Coming soon - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - - 14:00 - 00:20 - The History of, and Path forward for, Copyleft and the GPL - - Copyleft, Software, Freedom, & You: Better Understanding Through History - Copyleft, Software, Freedom, & You: Better Understanding Through History - <p>Copyleft licensing has been the primary strategy of the FOSS community to guarantee users&#8217; rights to copy, share, modify, redistribute reinstall modified versions of their software. In our earliest days, we naïvely thought that the GPL would work like magic pixie dust; we&#8217;d sprinkle it on our code, and our code would remain free as in freedom.</p> -<p>The reality check that we&#8217;ve received over the last 35 years has been painful on this issue. Nevertheless, those who forget the past are condemned to repeat it.</p> -<p>This talk will not only discuss the primary past GPL enforcement efforts around the world, but also provide a whirlwind tour of how copyleft came to work how it does and discuss ideas and suggestions of future strategies in copyleft that, informed by this history, are our best hope for software freedom.</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Karen Sandler - - - - 14:20 - 00:20 - Reproducible Builds – the first 10 years - - an overview about reproducible builds, the past, the presence and the future - an overview about reproducible builds, the past, the presence and the future - <p>In this talk Holger Levsen will give an overview about reproducible builds, the past, the presence and the future. How it started with a small BoF at DebConf13 (and before), how it grew from being a Debian effort to something many projects work on together, until in 2021 it was mentioned in an executive order of the president of the United States. And of course the talk will not end there but rather outline where we are today and where we still need to be going, until we&#8217;ll all be running 100% reproducible software, verified by many.</p> -<p>And while Holger&#8217;s day to day work and this talk will have a Debian focus, reproducible builds in other project will be featured and not be left behind as Holger has been involved in Reproducible Builds since 2014 and has been working on reproducing Arch Linux, coreboot, Fedora, FreeBSD, NetBSD, OpenWrt and others. Other important software projects will also be covered and last not least Holger will also explain why you&#8217;ll want verifiable SBOMs and not just SBOMs.</p> -<p>So what is this talk about exactly again? &#8220;A build is reproducible if given the same source code, build environment and build instructions, any party can recreate bit-by-bit identical copies of all specified artifacts.&#8221;<br /> -(https://reproducible-builds.org/docs/definition)</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Holger Levsen - - - - 14:40 - 00:20 - AI Law & Ethics for sustainability corporate governance - - <p>In the era of AI, EU regulators struggle in definying a level playfield for the fruitful development of technology and utmost protection of fundamental rights and freedoms of individuals. The so-called AI Act is going to be approved by the end of 2023 and should come into force after a 2-year grace period. In any case most of the provision will be strongly risk-based and accountability oriented. In this fragmented and complex scenario, it is extremely interesting to observe how the use of AI law and AI ethics can serve the purposes of sustainability corporate governance, fostering innovation AND preserving fundamental rights and freedoms in a measurable and viable manner, having rights entering into business logics and decisions.</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Federico Sartore - - - - 15:00 - 00:20 - Windows and Office “tax” refund - - The right to install any software on any device and various cases about the refund of pre-installed software - The right to install any software on any device and various cases about the refund of pre-installed software - <p>Some manufacturers try to force to use the preinstalled software on the PC you acquire, sometimes also claiming that alternative software will not work properly.</p> -<p>On 2018 Luca purchases a Lenovo Tablet/PC and, since it comes with Microsoft Windows pre-installed, he requested the refund to Lenovo, but Lenovo denied to refund Luca. A court case was initiated, and Lenovo was condemned to pay a punitive damages of 20&#8217;000 euros for its abusive behaviour.</p> -<p>After this &#8220;historic&#8221; case, some other refund were request to other companies, such as HP, Dell, Microsoft, Acer, and again to Lenovo. Each OEM tried to deny the refund, with various reasons such as contractual clauses contained in the sale contract or in the same license agreement, or the need to delete the Product Key stored in the MSDM BIOS ACPI table and therefore they require to send the PC to their laboratories. These reasons have no valid legal basis, because – at least in Italy – the license agreement is a contract totally unrelated to the sale contract, so a third party may not impose any action on your material good, and the license agreement has remained without causal and economic justification, because not accepted and missed to be concluded.</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Luca Bonissi - - - - 15:20 - 00:20 - How do you really do GPL enforcement? - - aka Bringing software right-to-repair to the masses - aka Bringing software right-to-repair to the masses - <p>Enforcing the General Public License (GPL) to bring real software freedom to people can be very challenging in practice, but many of the steps in the process are straight-forward. As the only organization enforcing the GPL for Linux, Software Freedom Conservancy (SFC) receives a huge quantity of GPL violation reports, and needs to triage each one as the beginning of our process. The next step is called the &#8220;CCS check&#8221; (complete corresponding source check), a crucial but barely known activity that determines whether some candidate source code actually corresponds to the device/binaries that the candidate was provided for. We will discuss the CCS check in detail, providing examples and tips for doing your own checks.</p> -<p>Lastly, we&#8217;ll cover the offer check, something everyone can do to help in SFC&#8217;s efforts to bring real software right-to-repair to every device running Linux. Whether you want to check offers for source code, review a CCS candidate, or go even further with additional GPL enforcement work of your own, this talk will set you up for success.</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Denver Gingerich - - - - 15:40 - 00:20 - KYCS ‒ Know Your Code Sources (and let it be known) - - How Cyber Resilience Act is going to change FOSS forever and what can we do about it? - How Cyber Resilience Act is going to change FOSS forever and what can we do about it? - <p>CRA at the time of submission is still in a draft status, but it is relatively clear that it will impose a duty to make the software safer if and when it is distributed on the market as a final product.</p> -<p>Part of the safety requirements includes the obligation to collect and keep available for inspection a list of software components obtained from third parties, that is their provenance, and the insecurities obtained through mainly CVE scanning. Incidentally there is an obligation to support and provide security patches after the product is placed on the market (hint, open source rulez).</p> -<p>Open Source Software is not exempted per se, the current discussion is where the final burden and responsibility of complying, if at all, lies. In any case, whatever the outcome of such discussion is, open source projects should strive to ease up CRA compliance for their downstream adopters, if they want to keep them. We will concentrate on how open source projects that aim at being considered in an industry supply chain (including that of software industry) should strive to make the supply chain&#8217;s life easier, building on our experience with Eclipse Oniro and the toolchain and processes we have devised for it.</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Carlo Piana - Alberto Pianon - - - - 16:00 - 00:20 - Continuos compliance @ Linaro - - Linaro's open source innovation engine on steroids thanks to production grade and long term sustainability attributes. - Linaro's open source innovation engine on steroids thanks to production grade and long term sustainability attributes. - <p>Continuous compliance is rooted into Linaro&#8217;s everyday activities, whether the target is kernel development, a SOC Yocto SDK, an SDV, or consumer electronics project. Open source is at the center of today&#8217;s software innovation, ubiquitous across products and services and, as such open source needs to evolve from a mere innovation into a production-grade engine. Linaro, one of the leading linux kernel contributors, is perfectly positioned to support our customers and the entire open source community throughout this transition. This talk will showcase Linaro&#8217;s continuous compliance and production-grade processes, artifacts, and best practices and shed some light on what&#8217;s happening under the hood of one of the world leading open source organizations and contributors.</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Davide Ricci - - - - 16:20 - 01:40 - The current state of SBOMs and SPDX - - Updates for 2023 - Updates for 2023 - <p>Software Bill of Materials (SBOMs) are rapidly becoming increasingly important in the software supply chain. Software Package Data Exchange (SPDX) is a freely available ISO standard that defines the way of communicating information about software components. It includes, but is not limited to, metadata such as name and version, but also licensing and security information.</p> -<p>In this talk, we will present the latest updates from the ever-changing landscape of SBOMs and SPDX, focusing in real-world use cases. Familiarity with the concepts will not be assumed, as they will be briefly explained.</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Alexios Zavras - - - - 16:40 - 00:20 - ZOOOM Project track introduction - - Introduction to the ZOOOM project and presentation of the next-day activity - Introduction to the ZOOOM project and presentation of the next-day activity - <p>The ZOOOM Track aims to disseminate the findings of the ZOOOM project and show the intersection between legal and business aspects in IP management and value creation/capture in innovation ecosystems based on open-source software (and beyond).<br /> -In this talk the ZOOOM consortium will present the first results of the project discussed in the following talks and the activity for the second day workshop of the SFSCon.</p> - - ZOOOM project track - ZOOOM project track - ZOOOM project track - https://www.sfscon.it/tracks/zooom-project-track-2023/ - - Stefano Menegazzi - Alessandro Rossi - Amalia de Götzen - Andy Peruccon - - - - 17:00 - 00:20 - The ZOOOM Framework: Legal aspects of FOSS and beyond - - <p>License compliance efforts for software projects involve not only legal-oriented actions, but also governance elements such as organizational processes and community management. The larger the community or the organization working collectively, the more complex a compliance program for software projects may become. Free Software licenses being direct licensing models are easier to comply with in comparison to proprietary licenses. This talk will give an overview of the Free Software licensing compliance practices, including initiatives such as REUSE for streamlining copyright and license information for software projects.</p> - - ZOOOM project track - ZOOOM project track - ZOOOM project track - https://www.sfscon.it/tracks/zooom-project-track-2023/ - - Niharika Singhal - - - - 17:20 - 00:20 - The ZOOOM Framework: Business Aspects of FOSS and Beyond - - <p>Companies can engage in the 3Os in many ways and for different reasons. In many cases, strategic and competitive advantages are at the core of a company’s decisions, but in other cases, motivations can involve social and ethical considerations such as reciprocity, altruism, and democratization of knowledge. In this talk, we outline the main business-related motivations identified by the ZOOOM project for using and contributing to FOSS. Among them: pursuing competitive advantage, reduction of development costs, technological innovation, access to knowledge or assets, and interoperability. Based on the interviews conducted by the ZOOOM partners, we also discuss major challenges and risks that businesses leveraging the 3Os must navigate.</p> - - ZOOOM project track - ZOOOM project track - ZOOOM project track - https://www.sfscon.it/tracks/zooom-project-track-2023/ - - Seckin Celik - Davide Serpico - - - - 17:40 - 00:20 - The ZOOOM Framework: An Ecosystemic Perspective - - <p>In this talk, we analyse the ecosystem trend in the context of the 3Os, particularly FOSS. Based on the existing literature and data from ZOOOM interviews, we explore the potential roles that companies can play in open-source ecosystems, their interactions with the other players of the ecosystem, and their awareness about the impact that systemic elements have on their business. Most companies recognize the advantages of being embedded in ecosystems where the creation of new knowledge is facilitated by joint research work, collaboration, and expertise sharing. However, companies identify themselves into specific roles depending on their strategy, main business, network structures, and communities. Finally, we outline a multilevel framework of how business and innovation ecosystems complement each other in the realm of the 3Os.</p> - - ZOOOM project track - ZOOOM project track - ZOOOM project track - https://www.sfscon.it/tracks/zooom-project-track-2023/ - - Davide Serpico - Seckin Celik - - - - - - 11:20 - 00:20 - Community tidbits - - How to keep free software projects happy and healthy - How to keep free software projects happy and healthy - <p>Open source communities, when they have reached a certain size, face their very own set of challenges.</p> -<p>In the virtual world, timezones, language barriers and dealing with many e-mails can become a burden. In the real world, the organization of travels to project meetings, the planning of annual conferences in an easy to reach location, and even the shipment of gadgets around the globe turn out to be quite demanding.</p> -<p>While free software projects might have the same diversity and outreach as large organizations, they often have not the same resources at hand as established corporations. They need to be a bit more creative &#8211; but luckily, that&#8217;s in their DNA!</p> -<p>In the spirit of sharing knowledge openly, this talk intends to give some real-life examples of challenges your community may face, unexpected situations you might run into and how to solve them &#8211; sometimes in unconventional ways.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Florian Effenberger - - - - 11:40 - 00:20 - Transforming South Tyrol’s Economy: Empowering Tourism and Agriculture through Decentralized Applications (dApps) - - <p>The implementation of decentralized applications (dApps) holds immense potential for transforming two of the key economic sectors of South Tyrol: tourism and agriculture.</p> -<p>In the tourism industry, dApps can revolutionize the way services are offered and transactions are processed. By utilizing smart contracts and blockchain technology, dApps can enable transparent and secure processes for booking accommodations, tours, and activities. This ensures that tourists have direct access to reliable information-, while it eliminates the need for intermediaries, and reduces costs. Moreover, dApps can facilitate decentralized reviews and ratings, empowering visitors to make informed decisions based on authentic feedback from fellow travelers, i.e., fake reviews can be eliminated. This fosters trust and enhances the overall tourist experience.</p> -<p>In the agriculture sector, dApps can address key challenges faced by farmers and consumers alike. For example by implementing blockchain-based supply chain solutions, dApps can ensure traceability and transparency in the production, processing, and distribution of agricultural products. This allows consumers to verify the origin and quality of the products they purchase, promoting trust and supporting local producers. Additionally, dApps can facilitate direct farmer-to-consumer interactions through decentralized marketplaces, eliminating unnecessary middlemen and enabling fair and efficient transactions. This empowers farmers by providing them with a direct and secure channel to sell their products while offering consumers access to fresh and locally sourced goods.</p> -<p>By embracing decentralized applications, South Tyrol can unlock new opportunities for its tourism and agriculture sectors. These applications not only enhance efficiency and reduce costs but also increase customer trust, promote sustainability, and support the local economy. As a result, dApps have the potential to shape a thriving ecosystem that benefits both businesses and consumers in South Tyrol&#8217;s key industries.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Max Oberperfler - - - - 12:00 - 00:20 - Beyond Google & Apple duopoly - - FOSS alternatives for digital mobility - FOSS alternatives for digital mobility - <p>StatsCounter tell us that in May &#8217;23 the market share for the smartphones is split in this way: Android/Google 67.56%, iOS/Apple 31.6%. Which means the remaining is less that 1%. Today we are speaking about that 1%: available alternatives, future outlook and most important why we have to care of about that 1%. Spoiler: because a study of the University of Edinburgh and the Trinity College Dublin published in Q4/2021 proves what all we know &#8211; our smartphones leak our data constantly.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Roberto Foglietta - - - - 12:20 - 00:20 - Combatting E-Waste’s Environmental Harm With Free Software - - <p>Electronic waste, or e-waste, refers to discarded information and communications technology equipment such as laptops, smartphones, and large and small household appliances. In 2015, Achim Steiner of the UN Environment Programme (UNEP) described &#8220;an unprecedented tsunami of electronic waste rolling out over the world&#8221;. In 2016, 44.7 million tonnes of e-waste were generated, equivalent to 4500 Eiffel Towers. In 2019, the World Economic Forum determined e-waste to be the fastest growing waste stream in the world. In 2022, the amount of e-waste hit 59.4 million tonnes, a 33% increase since 2016. Given the economic, and not the technical logic driving the digital economy, devices are rendered obsolete before their time and the pile of e-waste continues to grow.</p> -<p>E-waste is the source of significant environmental harm. Production, transportation, and end-of-life treatment accounts for 80+% of a device&#8217;s carbon footprint over its operating life. Extracting rare earth metals consumes copious amounts of energy; moreover, mining is typically done in the Global South under miserable social conditions. The end-of-life treatment of e-waste means those same devices return to the Global South, resulting in toxic pollution entering the environment and harming workers.</p> -<p>Today, most devices have chips which need software to keep them running. Thus, software plays a crucial role in preventing e-waste: software determines a hardware&#8217;s minimum working requirements, and for how long a device remains safely in use. For most users, environmental harm driven by software has largely remained overlooked … let alone that we can already do something about it with Free Software.</p> -<p>In this talk I will provide a brief overview of the environmental harm from e-waste driven by software, and I will link the inherent values that come with a Free Software license to sustainable software design. By enabling full user autonomy and removing artificial vendor dependencies, Free Software means electronic devices that are otherwise unsupported by manufacturers remain in use. Lightweight and up-to-date software, free from bloat and energy-consuming ads, allows aging, less-powerful hardware to keep running and stay out of the waste bin. Software freedom means hardware freedom, and that means we are able to combat the environmental harm caused by e-waste with Free Software today.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Joseph P. De Veaugh-Geiss - - - - 12:40 - 00:20 - Building an Awesome Product by Creating a Community Around It - - How to effectively engage with your user community - How to effectively engage with your user community - <p>In today’s competitive market, it has become crucial to build a thriving community of developers and users around your product. Gone are the days when code alone could make a product successful; the human element now plays a pivotal role. This community becomes the face and representation of your project to the outside world. Having worked on our Open Source project for over 8 years, I have accumulated a wealth of proven strategies for attracting contributors, training newcomers, and expanding the user base. In my presentation, I will explain how to effectively engage with your user community in order to achieve the following objectives: collect feedback, share use cases, contribute to documentation, identify bugs and collaboratively develop code<br /> -Because improving your product goes beyond just writing code; it involves nurturing a strong community of people.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Alessio Fattorini - - - - 13:00 - 00:20 - Sustainability of Open Source Software and Potentials in Developing Countries - - <p>Although developing countries hold a lot of potential in software development and research, the licensing cost of commercial software, platforms, and online services serve as a hindrance in their widespread adoption. Open source software can be a very useful and viable solution in this regard. On one hand it can fill up the need for less costly software alternatives. On the other hand, it can reduce the adoption of pirated versions of commercial software by individuals and groups to make up for the cost factor. Furthermore, with more adoption of open source software in the developing countries, it will also encourage and engage more programmers from the developing countries to maintain the open source software and to contribute to it, adding to the sustainability of various open source projects and thus benefiting open source software development beyond borders. The speaker, who has the experience of working in both the developing countries as well as here in Alto-Adige/Sud-Tirol region, will share insights on this topic from both of these diverse perspectives.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Abid Munir Bajwa - - - - 13:20 - 00:20 - Sharing the power of appreciation: Celebrating ‘I Love Free Software Day’ - - <p>In the realm of Free Software, expressing gratitude towards Free Software contributors often goes unnoticed. The &#8220;I Love Free Software Day&#8221; (https://ilovefs.org) provides a platform for individuals and organisations to do exactly this, showing appreciation. But it is crucial to recognize that our appreciation for Free Software should extend far beyond this single day. This talk highlights the significance of the &#8220;I Love Free Software Day&#8221; as a platform for expressing support, love, and gratitude towards the developers and contributors who make Free Software possible.</p> -<p>Throughout the presentation, we will showcase memorable moments and successful initiatives from past celebrations, demonstrating the collective efforts to acknowledge and honor the impact of Free Software. We will discuss ideas and strategies for making the upcoming &#8220;I Love Free Software Day&#8221; even more remarkable.</p> -<p>However, it is essential to emphasize that our expressions of love and support for Free Software should not be limited to just one day. While the &#8220;I Love Free Software Day&#8221; serves as a catalyst for celebration, it should inspire us to continue demonstrating our gratitude throughout the year. We will explore ways to incorporate ongoing appreciation into our daily lives, such as contributing to Free Software projects, advocating for their importance, and recognizing the efforts of developers and contributors regularly also in a financial way.</p> -<p>By extending our appreciation beyond a single day, we can cultivate a culture of continuous support for Free Software. We invite everyone interested in Free Software to join us in this endeavor, as we strive to create an environment where gratitude and acknowledgment become integral parts of our interactions within the Free Software community.</p> -<p>Let us embrace the &#8220;I Love Free Software Day&#8221; (https://ilovefs.org) as a starting point, a reminder of the significance of Free Software, and a call to action to express our love and support throughout the year. Together, we can build a community that values and appreciates the tireless efforts of Free Software developers and contributors, making a lasting impact on the future of software freedom.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Bonnie Mehring - - - - 13:40 - 01:40 - MindsHub no-profit - - Makers, programmers, enthusiasts with a focus on education - Makers, programmers, enthusiasts with a focus on education - <p>MindsHub is a no profit association from Ala (near Trento), which provides a space for enthusiasts to develop skills and ideas in informatics, electronics, robotics and 3D printing: https://mindshub.it/.<br /> -Everything started back in 2016, when we organized CoderDojo Vallagarina to introduce young boys and girls to programming. The association has since grown to have multiple running projects, and over 20 active members, aging 12 years old and up. We meet once a week to learn from each other and bring the activities forward.<br /> -We created an autonomous farming robot (featured at Maker Faire Rome among the best 10 projects), we delved into online security with schools, we developed a FOSS app to report and collect garbage, we spoke to Samantha Cristoforetti on the ISS, &#8230;</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Fabio Giovanazzi - Alessio Zeni - - - - 14:00 - 00:20 - RIOS (Rete Italiana Open Source) presents latest updates on the OSPO Alliance and the Good Governance Initiative. - - <p>The Good Governance Initiative (GGI) proposes a methodological framework to assess open-source awareness, compliance and governance in any kind of organizations, helping them to structure and improve the use of FOSS towards an OSPO. This presentation will highlight the main progresses and new features achieved since last year, such as the translation of the GGI Good Governance in five languages, the recent Success Stories presented in the OnRamp meeting series, and many more. Stefano Pampaloni, vice-president of the Italian Open Source Network, will present the latest developments, elaborating on the RIOS Network&#8217;s contribution to the project.</p> - - OW2 track - OW2 track - OW2 track - https://www.sfscon.it/tracks/ow2-track-2023/ - - Valentina Del Prete - Stefano Pampaloni - - - - 14:20 - 00:20 - The CORD-19 Topic Visualizer - - Exploring the evolution of research topics during the COVID-19 pandemic - Exploring the evolution of research topics during the COVID-19 pandemic - <p>The COVID-19 pandemic reshaped research across various fields, producing an unprecedented flood of articles. In response, several open-access corpora were created; among them, the COVID-19 Open Research Dataset (CORD-19) collected over a million articles in 2.5 years.</p> -<p>In this presentation, we introduce the CORD-19 Topic Visualizer (CORToViz), a method and tool for exploring CORD-19&#8217;s scientific abstracts. It uses a stack of modern open source technologies to cluster articles and mine temporal topics. CORToViz has an interactive dashboard for quick topic visualization, time series tracking, and statistical testing.</p> -<p>We will show the results extracted with CORToViz, which allowed us to visualize and tell in a synthetic way what happened to react against COVID-19, comparing it with the key moments of the pandemic. The high adaptability of our approach suits any textual document corpus, and it lends itself easily to exploring new challenging fields of research, such as climate change.</p> -<p>CORToViz represents the first prototype of a series, which we aim to develop within the NGI Search Program, under the TETYS project (Topics Evolution That You See), aiming to build the next-generation Web topics explorer.</p> - - OW2 track - OW2 track - OW2 track - https://www.sfscon.it/tracks/ow2-track-2023/ - - Francesco Invernici - - - - 14:40 - 00:20 - Can AI counteract Health-related Fake News? - - HeReFaNMi (Health-Related Fake News Mitigation): an open-source project to counteract health-related misinformation - HeReFaNMi (Health-Related Fake News Mitigation): an open-source project to counteract health-related misinformation - <p>HeReFaNMi (Health-Related Fake News Mitigation) is an NGI-Search-funded project to give back trustworthiness to the Internet community by tackling fake news spread. Other than the well-known cyber threats, several factors have been undermining the Internet search experience lately. One of the pandemic&#8217;s lessons learned concerns the health-related fake news spread over websites and social media networks. Some nefarious effects came as a non-negligible hesitancy towards national healthcare systems&#8217; guidelines. Since then, several AI-powered solutions have been developed to counteract fake news circulation using supervised and unsupervised learning. The task is challenging due to the need for continuous updating upon introducing new scientific findings. The so-called data drift and catastrophic forgetting also affect the effectiveness of AI-powered classification methods.<br /> -LLMs (Large Language Models) have recently made their way through the AI landscape by delivering unprecedented performances over text analytics, mining, question and answering systems, and text generation. However, LLMs suffer from Hallucination, meaning they can elaborate contents that are unreliable as a source of truth even when fine-tuned on scientifically sound datasets.</p> - - OW2 track - OW2 track - OW2 track - https://www.sfscon.it/tracks/ow2-track-2023/ - - Alessandro Bruno - - - - 15:00 - 03:00 - Coming soon - - OW2 track - OW2 track - OW2 track - https://www.sfscon.it/tracks/ow2-track-2023/ - - - 15:20 - 00:20 - Videobooks - - Augmenting the Reading Experience with Synchronous Reading and Listening - Augmenting the Reading Experience with Synchronous Reading and Listening - <p>Recent open source libraries apply machine learning for forced alignment of speech and text and make it possible to produce text that is synchronized to audio in various languages. This makes it possible to produce a new type of reading experience: the videobook! This contribution talks about a pilot project that aims to produce videobooks based on hundreds of audiobooks and texts that are already in the public domain (such as librivox and the gutenberg project). Possible applications in the educational domain are discussed: such as language learning, accessibility and e-learning applications</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Michael Schlauch - - - - 15:40 - 00:20 - Can we sustain Software Freedom in the mobile world? - - <p>Laptops and servers are running Linux based free software just fine these days. But what about the small and powerful devices in our pockets that we carry everywhere?</p> -<p>Can we achieve the same level of freedom and choice on smart phones? Can we make that usable for everyone?</p> -<p>This talk gives a short overview about the current state of Linux on mobile devices.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Nicole Faerber - Guido Günther - - - - 16:00 - 00:20 - Process Analysis Tools 4 Public Utility - - <p>Background: Process Mining is a growing technology in recent years that consists of integrating specific process mining tools with management software systems to analyze process data and provide feedback on process efficiency, potential bottlenecks, and resource utilization in a production and business context.</p> -<p>Aim: The aim of this presentation is to showcase open source process mining tools, and how these could be integrated with other publicly available software in order to help make meaningful decisions driven by real data. This could be applied to any business context, including non-profit organizations and services to the public and community.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Martina Burlando - - - - 16:20 - 00:20 - TOGETHER IS BETTER - - Can competitors work together with open source ? - Can competitors work together with open source ? - <p>When community and Open source mindset are part of a company culture, it becomes easy to plan and project new products (even with potential competitors). In an open source project, all or part of the produced material is made publicly available for others to use, under certain conditions. The mistery of the &#8220;unpaid programmer&#8221; disappears when corporations see benefits coming from other members in the project and even fear of &#8220;loosing control&#8221; is balanced with continuous feedbacks from developers and users. This is the story of a new project&#8230;</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Nicola Filippini - - - - 16:40 - 00:20 - BIM2FEM: From Building Information Modeling to Finite Element Analysis - - An open-source-based workflow - An open-source-based workflow - <p>The construction industry currently lacks automated open-source-based workflows for thermal and structural analysis of buildings. The Finite Element Method (FEM) represents the state-of-the-art approach for structural and thermal analysis in construction engineering. With the recent increase in computing power, complex models can now be analyzed within a feasible amount of time. However, the integration of FEM into Building Information Modeling (BIM) workflows remains an active area of research. While some commercial software provides interfaces and plug-ins for BIM-integrated finite element analysis, their capabilities are limited and their use is restricted to the corresponding commercial software. Customizable open-source-based approaches exist, but they lack consistent and robust workflows. A consistent data flow of material properties and boundary conditions is essential but remains a challenging task that has not yet been sufficiently addressed. Fraunhofer Italia has developed a workflow based on the open IFC-standard and open-source FEM software packages, which has been tested and validated through the creation of a software prototype. This talk will introduce the developed workflow and demonstrate the prototype’s functionalities through selected use-cases.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Julius Emig - - - - 17:00 - 00:20 - Open Tracing Tools: Overview and Comparison - - <p>Open Tracing Tools are software tools that enable the monitoring, debugging, and optimization of distributed software architectures. They provide a way to trace and understand the flow of requests and data through various components of a distributed system.</p> -<p>In the last months, the authors conducted a study to select and compare 30 tracing tools using a systematic literature review approach. They analysed the open source licence, features, architecture, the collected data, interoperability, but also the popularity, benefits, and issues of each tool, using topic modelling and sentiment analysis. The results offer a systematic comparison of the selected tracing tools.</p> -<p>We&#8217;ll say it in advance: there is one perfect tool that is better than all the others but this talk will present a) a brief overview of what open tracing tools are and the OpenTelemetry standard, b) the process followed in the study and c) the obtained results. For those that want to read the entire report, here it is: https://arxiv.org/abs/2207.06875.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Andrea Janes - Xiaozhou Li - Valentina Lenarduzzi - - - - 17:20 - 00:20 - Providing and Receiving Feedback in Open Source - - <p>For open-source developers, user feedback provides a direct line between both parties, offering valuable insights. That&#8217;s at least how the theory goes In reality, the feedback is often skewed, and the minority of negative loudmouths sometimes overshadows the silent majority of satisfied and grateful users. Needless to say, this doesn&#8217;t do any favors to open-source developers.</p> -<p>Is there a way to improve the situation? Join this session and learn how you, as an open-source developer, can deal with feedback and other challenges unique to the open-source development model.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Dan Čermák - - - - 17:40 - 00:20 - Shaping the future with Data - - How Data can become the most valuable asset for a business/ company - How Data can become the most valuable asset for a business/ company - <p>How to launch, build and scale a business with DATA.<br /> -Support any decision making process<br /> -Become a value for people<br /> -Can help in the change management</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Zemourda Aissaoui - - - - - - 11:20 - 00:20 - Decoding the Corporate Maze - - Empowering Exposure Assessment through Open Software and OSINT - Empowering Exposure Assessment through Open Software and OSINT - <p>Embark on a remarkable expedition as we delve into the realm of Exposure Assessment. Unlocking its wonders, we will navigate this captivating process exclusively utilizing Open Software and OSINT. With a mere glimpse into a company&#8217;s domain, we will traverse the intricate labyrinth of their infrastructure, diligently seeking a potential access point into their corporate system.</p> - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - Francesco Pavanello - - - - 11:40 - 00:20 - Predict security attacks in FOSS - - Why you want it and how to do it - Why you want it and how to do it - <p>FOSS is here to stay, displacing malevolent privative counterparts—great!<br /> -FOSS exposes bugs to be found and fixed by the community—great!<br /> -FOSS shows security issues than can be exploited by attackers—gr..what?<br /> -In the last decades, source code transparency has made the job of black-hat hackers increasingly easy. We now have security websites exposing vulnerabilities and even exploits online—and despite good practices like responsible disclosure, it is the sheer amount of (external) code what makes everyone ultimately vulnerable. In plain words, nobody&#8217;s safe.</p> -<p>From that base, this talk puts forward the need for a concept of *probability of future exploits*. This is crucial for project management, but also at developer level, to see the risks of not upgrading (or yes upgrading!) a dependency. We show how this probability can, and must, be computed from a project&#8217;s dependency tree, in a manner that only the use of FOSS can allow. We also show that the development history of the project and its dependencies is key to getting useful results.</p> -<p>Finally, we merge the dependency tree and development history of a project into a white-box model, which we use to estimate the probability of future exploits. We show how to do it for the Java-Maven environment, for which we can use the FOSS tool &#8216;FIG&#8217;. FIG, written in C++ and released under GPLv3, was designed for statistical estimations and can compute the probability of attacks in complex scenarios like the ones at hand.</p> - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - Carlos Esteban Budde - - - - 12:00 - 00:20 - Software freedom primer on Self Sovereign Identity - - Let's stop feeding the surveillance economy - Let's stop feeding the surveillance economy - <p>The federated identity ecosystem is one of the key mechanisms by which the platform and surveillance economy has grown into today&#8217;s shape, mostly on the shoulders of a vast number of Open Source contributions. Self Sovereign Identity is a privacy, freedom, control first approach to managing identity in a decentralised and secure way. In his talk, Georg Greve will provide a primer into SSI, how it works, and share insights from developing the SSI stack within the Eclipse Cross Federation Services Components, formerly Gaia-X Federation Services.</p> - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - Georg Greve - - - - 12:20 - 00:20 - Opensource to help increase organizations Cybersecurity posture - - Cybersecurity is a compulsory, tough and expensive task for all organizations - Cybersecurity is a compulsory, tough and expensive task for all organizations - <p>Cybersecurity is a compulsory, tough and expensive task for all organizations, private and public, large , medium and small.<br /> -No one can ignore it anymore, and building a viable Cybersecurity strategy is a complex task that needs to balance budget, keeping up with attacker technologies, available skills and a plethora of expensive tools on the market.<br /> -Let&#8217;s discus s on how available Opensource solutions may greatly help ours organizations to be more effective in implementing their Cybersecurity posture, while optimizing available budget.</p> - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - Carlo Falciola - - - - 12:40 - 00:20 - Technical leverage analysis in the Python ecosystem: lessons learned - - <p>[Context:] Technical leverage is the ratio between dependencies (other people&#8217;s code) and own codes of a software package. It has been shown to be useful to characterize the Java ecosystem and there are also studies on the NPM ecosystem available. [Objective:] By using this metric we aim to analyze the Python ecosystem, how it evolves, and how secure it is, as a developer would perceive it when deciding to adopt or update (or not) a library. [Method:] We collect a dataset of the top 600 Python packages (corresponding to 21,205 versions) and used a number of innovative approaches for its analysis including the use of a two-part statistical model to deal with excess zeros, a mathematical closed formulation to estimate vulnerabilities that we confirm with bootstrapping on the actual dataset. [Results:] Small Python package versions have a median technical leverage of 6.9x their own code, while bigger package versions rely on dependencies code a tenth of their own (median leverage of 0.1). In terms of evolution, Python packages tend to have stable technical leverage through their evolution (once highly leveraged, always leveraged). On security, the chance of getting a safe package version when choosing a package is actually better than previous research has shown based on the ratio of safe package versions in the ecosystem. [Conclusions:] Python packages ship a lot of other people&#8217;s code and tend to keep doing so. However, developers will have a good chance to choose a safe package version.</p> - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - Ranindya Paramitha - - - - 13:00 - 00:20 - MBBS: A Multimodal Behavioral Biometric Scheme for Smartphone User Authentication - - <p>In this presentation, we present MBBS, a tetra-model behavioral biometric-based authentication scheme designed specifically for smartphones. MBBS utilizes four distinct modalities to authenticate users: touchscreen swiping patterns, taps on &#8220;text-independent&#8221; 8-digit numbers, name writing on the touchscreen, and micro-movements of the hand during the entry process. To enhance overall accuracy and security, MBBS incorporates a state-of-the-art Generative Adversarial Network (GAN) powered data augmentation architecture. This innovative approach allows us to demonstrate the effectiveness of MBBS using both real user samples and augmented samples, consisting of a combination of &#8220;real&#8221; and &#8220;GAN-generated&#8221; data, on an actual Android device. One of the key advantages of MBBS is its high usability, as it eliminates the need for users to remember any secret information. Instead, it leverages users&#8217; familiarity with natural processes, thereby increasing accuracy in real-time by employing GAN technology, all without requiring a large sample size from users. We will also present preliminary results from our performance, security, and usability analysis, which showcase a positive opinion regarding the effectiveness of our developed authentication mechanism.</p> - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - Attaullah Buriro - - - - 13:20 - 00:20 - Recommending security fixes for weak open-source code with AI - - <p>Technical debt is a metaphor that describes not-quite-right code introduced for short-term needs. The effort to refactor it increases if it remains for a long in the software. When developers are aware of it and admit it in source code comments, the debt is called Self-Admitted Technical Debt (SATD). Thus, SATD indicates weak code that developers are aware of. The question is whether they are aware that this code may be vulnerable to attacks. This presentation will illustrate how artificial intelligence can be employed to recommend security fixes for vulnerabilities to developers.</p> - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - Jorge Melegati - Moritz Mock - Barbara Russo - - - - 13:40 - 04:20 - Coming soon - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - - 14:00 - 00:20 - Free Software and AI in Europe - - How Europe regulates AI and Free Software - How Europe regulates AI and Free Software - <p>In this talk, I will present the latest developments in EU legislation and activities on AI and what role Free Software plays in this.</p> -<p>The European Union&#8217;s AI Act is the first comprehensive set of regulations for the artificial intelligence. Also Free Software plays a role in this regulation. I will shed light on the upcoming rules and evaluate what this means for Free Software, AI but also other upcoming regulations.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Alexander Sander - - - - 14:20 - 00:20 - Why Do We Need A Next Generation Internet? - - Improving the Internet as a platform, one Free Software at a time - Improving the Internet as a platform, one Free Software at a time - <p>The Internet today forms the backbone of the digitisation of our society and economy. As connectivity increases, the boundaries between the real and digital world get increasingly blurred. However, there has been an erosion of trust in the Internet following revelations about the exploitation of personal data, large-scale cybersecurity and data breaches, and growing awareness of the proliferation and impacts of online disinformation.</p> -<p>What can be done to improve the Internet as a platform for future generations? What initiatives are currently in place to build key technological blocks of an Internet that supports human-centric values, such as privacy, security, and inclusion, while reflecting the values and norms all citizens should enjoy in Europe?</p> -<p>This talk will explore why the current state of the internet must be re-imagined and re-engineered in order to support healthy societies, the existing European Commission initiative to work towards doing so, and the role of Free Software in accomplishing these goals.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Gabriel Ku Wei Bin - - - - 14:40 - 00:20 - Interoperable Europe Act: A real game changer? - - <p>Interoperability is a core element of the ongoing digitalisation of Europe. With the Interoperable Europe Act, the EU is aiming to create a dedicated legal framework for interoperability and to enhance cross-border digital public services across the European Union. This talk will give an overview of the state of play of this proposed regulation in the ongoing EU legislative process, some of its flaws, and the important role that Free Software and its community can play in it.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Lina Ceballos - - - - 15:00 - 00:20 - The Brand-New Version of IGis Maps - - The “swiss knife” developed and used in South Tyrol for the integrated management of Geo Referenced data and related information - The “swiss knife” developed and used in South Tyrol for the integrated management of Geo Referenced data and related information - <p>2023 saw the launch, after a long and well-structured revision and development process, all based on a fruitful collaboration between several departments of the Autonomous Province of Bolzano, most of the township in South Tyrol, Informatica Alto Adige (SIAG &#8211; Technical partner) and the Consortium of Municipalities of the Province of Bolzano, of the new version of the integrated geographic data management system IGis Maps. In use for years in South Tyrol, has in the Consortium one of its most enthusiastic contributors and supporters.</p> -<p>The very first version was released about eight years ago and its implementation was based on the idea of creating a multi-purpose GIS management system that could support different types of users, that was highly customizable, and, above all, that could be widely shared among the various management entities, both public and private, present within our territory.</p> -<p>After years of use and ad-hoc developments, we can finally present the new version of the IGis Maps system, which incorporates all the technical and technological improvements we realized the system needed.</p> -<p>It was not just a major update together with new functionalities combined inside the previous software structure, but a true re-engineering that led, among other things, to a new and more efficient user interface, a major advancement regarding the internal security, an optimization and improvement of the entire editing section as well as an optimization of the section regarding the automatic geo-processes.</p> -<p>A mobile version is currently under development to better support any field activities, for which a very powerful option will be included, the possibility of creating special work sessions in off-line mode so as to be able to operate even in areas without a proper cellular line network coverage.</p> -<p>Other very important peculiarities concern that the system is developed using a totally free software code and infrastructure, that a detailed documentation has been produced to ensure sustainability to any further future evolution, even in case of technical partner turnover, and finally, that by taking advantage of the high standards and levels of security access can be guaranteed to any type of user. From professional users, through dedicated access and qualifications or, using the ordinary SPID, to the private citizen.</p> -<p>We will show examples of how different types of users and stakeholders now permanently use the system for the management of a variety of tasks related to their activities, and how it was possible to customize IGis Maps to create visualization and data management contexts that best meet their needs.</p> -<p>We will also present a related project concerning the updating and the correction of the new technical basal cartography, built upon the new Basic Core specification, achieved through the automatic conversion implemented by the SIAG team starting from the previous National Core cartography. With the new IGis Maps it was possible to create an advanced editing and management environment that allow both experienced and less advanced users to interact with this important new informative layer to fill all those gaps and errors that are more than normal to discover following an important automatic translation action such as the one carried out for the Basic Core project.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Edoardo Scepi - - - - 15:20 - 00:20 - Let’s monitor implementation of Free Software Policies! - - How to sharpen the demand for public code across Europe and monitor progress with TEDective - How to sharpen the demand for public code across Europe and monitor progress with TEDective - <p>For six years, the Free Software Foundation Europe has been calling with a broad alliance for publicly funded software to be published as Free Software. This initiative has become a great success: Our demand &#8220;Public Money? Public Code!&#8221; has found its way into government strategy papers, party programs, as well as coalition treaties, and is being discussed in public administrations across Europe.</p> -<p>At the same time, we see less progress than expected and vendor lock ins remain a crucial issue. Digital sovereignty is redefined bypassing Free Software. There is openwashing in publicly funded companies, and government projects in favour of Free Software remain empty words. Public statistics on the procurement of Free Software are largely unavailable.</p> -<p>It is therefore no longer enough to promote the idea of &#8220;Public Money? Public Code!&#8221;. We as the Free Software community should be even more vigilant than before – continuing to praise small steps in the right direction, but pointing out and criticising omissions and lack of implementation. We should become more like watchdogs.</p> -<p>In the talk we will look at some examples of lack of implementation of Free Software policies. We will discuss how we, as civil society, can identify such shortcomings and how to deal with them. We will present our initiative TEDective – a free-software solution that makes European public procurement data explorable for non-experts, aiming to provide you with a powerful tool to keep an eye on real progress towards &#8220;Public Money? Public Code!&#8221; across Europe.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Johannes Näder - Linus Sehn - - - - 15:40 - 00:20 - GovStack project a univeral E-Government - - <p>GovStack aims to break down the barriers to building sustainable digital infrastructure and help governments create human-centered digital services that empower individuals and improve well-being.</p> -<p>In 2015, world leaders agreed to 17 Global Goals for Sustainable Development to achieve a better world by 2030. Many of these goals rely on governments’ ability to deliver services to people. We know that digital technology can facilitate broader access and build more inclusive and resilient societies. Plus, digital government services can foster economic growth and promote trust in government institutions.</p> -<p>GovStack is helping governments simplify the digital transformation process and reduce the cost, time, and resources required to create digital platforms and services.</p> -<p>Our approach is based on the SDG Digital Investment Framework, to help countries make smarter and more strategic decisions in their ICT investments.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Oleksii Danyliuk - - - - 16:00 - 00:20 - Empowering Insights: Unveiling the latest innovations in KNOWAGE for BI and Data Visualization - - <p>KNOWAGE is the open source analytics and business intelligence suite made in Italy. KNOWAGE aims to provide company and organizations with analytical capabilities to exploit data to increase their efficiency and sustainability. Also thanks to the open source community support, the suite is constantly evolving combining the reliability of the most popular business intelligence solutions with the security and the transparency guaranteed by open source.<br /> -This talk will show the last year advancements and new features towards a more mobile, accessible and user-friendly product, focusing on the newly rewritten dashboarding tool.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Davide Vernassa - - - - 16:20 - 00:20 - KNOWAGE and AICS for 2030 agenda SDG goals monitoring - - Visualizing international open data to enhance sustainable development - Visualizing international open data to enhance sustainable development - <p>AICS is the Italian Agency for Development Cooperation that started operating in 2016 with the ambition of aligning Italy with the main European and international partners in the commitment to development. KNOWAGE Labs are developing for AICS a platform that is probably unique in the world and will allow both the Agency and the public to access all the major indicators on the UN Sustainable Development Goals provided by international sources (World Bank, WTO, ILO..) and easily compare them. The solution will allow analysis to start from 3 different touch points: the infographic of SDG goals, the advanced search criteria, and the virtual assistant. Then, a customized dashboard will be provided to the user, allowing to further expand the analysis by interacting with charts, maps, tables, etc. This talk will show the state of art of the solution, highlighting objectives and expected results of the project, but also the new developments of KNOWAGE related to AI.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Marco Cortella - - - - 16:40 - 00:20 - European regulators cast their eyes on maturing OSS communities - - <p>As open source software becomes the foundation to build digital products, to run the backbones of ICT infrastructure and to ensure digital sovereignty and cyber resilience, both the technology as well as the communities that develop it inevitably move into the focus of regulators. The European Union is advancing a number of policy initiatives that regulate liability, cyber security, data handling and AI applications in digital products, among others. This is a challenge for the still quite decentralised and globally operating open source community. How could the open source community participate in legislative processes, and what may be the potential impacts of the upcoming regulation on the open source development process and community dynamics?</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Mirko Boehm - - - - 17:00 - 00:20 - How IoT and AI are revolutionizing Mass Customization - - <p>This lightning talk will explore the transformative potential of integrating Internet of Things (IoT) and Artificial Intelligence (AI) in Mass Customization (MC). There is a significant collective impact of these technologies on businesses, enabling the delivery of personalized products and exceptional customer experiences. Besides giving an overview of MC and the potential ways of integrating IoT and AI, the focus will be on the process of real-time data collection and facilitation of the customization process by IoT on one hand, and on the role of AI in data analysis and generation of personalized recommendations on the other hand. By presenting real-world case studies to demonstrate the practical implementation of IoT and AI in providing customized products and seamless customer experiences, attendees will gain insights into the future of customization and learn actionable strategies to effectively leverage IoT and AI.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Thomas Aichner - - - - 17:20 - 00:20 - Smart Werke Meran - - Smart City 100% Open Source - Smart City 100% Open Source - <p>Since 2020 Stadtwerke Meran have realized 5 Use cases:<br /> -&#8211; Control of the control cabinets of public lighting.<br /> -&#8211; Optimizing the service on Wast Press container.<br /> -&#8211; Bike Boxes<br /> -&#8211; Just Nature Project , temperature measuring over Lorawan<br /> -&#8211; Smart Lighting , communication with single light points over Lorwan.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Stefan Mutschlechner - - - - 17:40 - 00:20 - Monitoring the fleet of Sasa with free software - - Is it possibile to monitor a fleet of 400 buses using free software ? - Is it possibile to monitor a fleet of 400 buses using free software ? - <p>The public transport in South Tyrol is going through a huge transformation: new investments, many new green vehicles and a brand new software. Transition will take time and how do we develop a fleet monitoring system to use during the transition without spending a fortune ? maybe with free software!</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Marco Pavanelli - - - - - - 13:00 - 00:30 - NOI Hackathon SFSCON Edition - - Side Event - Hackathon - Side Event - Hackathon - Side Event,Hackathon - - - - - - - 08:30 - 00:30 - Starting of the second day - - SFSCON - SFSCON - SFSCON - - - 13:00 - 00:30 - Closing of the SFSCON 2023 - - SFSCON - SFSCON - SFSCON - - - - - 08:30 - 00:50 - Welcome Coffee - - SFSCON - SFSCON - SFSCON - - - - - 09:20 - 00:20 - How can Blockchain technologies incorporate AI solutions for a safer and efficient Open Data ecosystem. - - <p>The transition from Web 2.0 to Web 3.0 has fueled the need for a secure and decentralized cloud storage solution for digital assets. Web 2.0 was characterized by centralized platforms where user data was under the control of companies. In contrast, Web 3.0 aims to empower individuals and foster a decentralized web that supports and benefits the Free Software and Open Data Communities.</p> -<p>Blockchain technologies facilitate seamless collaboration and interoperability among diverse stakeholders in the Free Software and Open Data communities. Developers can establish open and transparent ecosystems where data can be shared, verified, and integrated across multiple platforms.</p> -<p>Beez, with its own blockchain infrastructure, offers a secure and transparent platform for digital asset exchanges, bolstering transaction integrity and trust. By distributing data across a network of nodes, Beez ensures security and mitigates the risk of single points of failure. Users retain control over their data, safeguard their privacy, and can take advantage of the incentive mechanisms offered by blockchain networks.<br /> -During our presentation, we will explore the role of AI within Beez&#8217;s ecosystem, facilitating accelerated data processing, correlation, and intelligent automation. AI unlocks valuable insights from blockchain data, and we will touch upon the use of Inductive Logic Programming (ILP) to enhance programming performance.</p> -<p>The integration of Blockchain and AI technologies holds great potential for advancing the safety and efficiency of the Open Data ecosystem. By combining decentralized data storage, trust-building mechanisms, and intelligent data processing, Beez is paving the way for a more secure, transparent, and user-centric digital landscape.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Marianna d'Atri - Enrico Zanardo - - - - 09:40 - 00:20 - Real-time aeroplane tracking and the Open Data Hub - - Using the Open Data Hub as real-time data backbone - Using the Open Data Hub as real-time data backbone - <p>Tracking aeroplanes in real time with Open Source Software is possible. Aircrafts must continuously send their current flight parameters to air traffic controllers on the ground and to other aircrafts. This generates a lot of data, especially when planes are being tracked by multiple sensors.<br /> -The Open Data Hub on the other hand offers a great backbone for data storing and processing, where the correct datasets have to be identified and filtered. After all transformation on the data is done, it will be exposed via API to be further used by a web application.<br /> -Bringing together sensor generated data, the Open Data Hub and custom web applications, is a showcase on how the Open Data Hub can be used as a service: OaaS.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Martin Rabanser - - - - 10:00 - 00:20 - Embracing CI/CD workflows for building ETL pipelines - - how we will gather and monitor multi-source spatially-interpolated meteorological parameters in near-real time - how we will gather and monitor multi-source spatially-interpolated meteorological parameters in near-real time - <p>Up-to date measurements of surface meteorological variables are essential to monitor weather conditions, their spatio-temporal variability and the potential effects on a wide range of sectors and applications. Moreover, when included in continuous records of long historical observations spanning several decades, they become essential for assessing long-term climate variability and change locally and on a regional level.</p> -<p>Automated pipelines capable of retrieving and processing near-real time meteorological data satisfy the primary prerequisites towards the development and advancement of effective and operational climate services.</p> -<p>With a public and operational near real-time monitoring web platform in mind, we present automated pipelines to collect and process up-to-date daily temperature and precipitation records for Trentino South Tyrol (Italy) and surrounding areas, and to derive their spatially interpolated fields at sub-km scale. Our pipelines are composed by multiple steps including data download, sanity checks, reconstruction of missing daily records, integration into the historical archive, spatial interpolation and publication onto online FAIR catalogues as (openEO) “datacubes”. The different APIs, data formats and structure across the various data sources, and the need to merge the data onto harmonized meteorological layers, make this a typical case of the so-called Extract, Transform and Load (ETL) pipelines, and, in order to follow the principles of data reproducibility and Open Science, we embraced open-source automated workflow management through GitLab’s Continuous Integration / Continuous Development (CI/CD) capabilities.</p> -<p>CI/CD workflows greatly help the management of the relatively complex graphs of tasks required for our climate application, ensuring seamless orchestration with thorough flow monitoring, application logs, transactions rollbacks, and exception handling in general. Native pipeline-oriented software development also fosters a clean separation of roles among the tasks, and a more modular architecture. This effectively reduces barriers to collaborative development and paves the way for robust operational climate services for researchers and decision makers in the face of the changing climate.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Elena Maines - - - - 10:20 - 00:20 - Free Software and Open Science - - <p>The Open Science movement aims to increase the transparency, reproducibility and inclusiveness of academic research. One of its central goals is therefore to make research outputs broadly available, e.g., manuscripts (Open Access) or research data (Open Data). While software/code created in the course of scientific research is a key artifact of scientific research that is clear distinct from the latter two, it has until recently not received the same attention as manuscripts or data, although it follows its own set of paradigms.</p> -<p>In this talk I will present an overview on how the core concepts of Free Software and the FAIR (findable, accessible, interoperable, reuseable) Principles intersect, what this means for managing code as research output and recent initiatives on the European level that will provide support for these issues.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Christian Busse - - - - 10:40 - 00:20 - MLOps with Kubernetes: unleash the power of the ecosystem! - - <p>Kubernetes is a popular open-source software, today&#8217;s de-facto open standard, to run production workloads. Innovation in the ecosystem thrives with multiple projects that enrich the platform&#8217;s core. Machine Learning Operations (MLOps) is part of the same effort to bring automation into Kubernetes for ML pipelines.</p> -<p>This session aims to explore the Kubernetes-native tools available such as Tekton, Argo CD, Kubeflow, and OpenDataHub, to apply DevOps and GitOps principles in AI/ML contexts.</p> -<p>By the end of the session, attendees will have a clear understanding on how to automate and simplify the iterative process of integrating ML models into software development processes, production rollout, monitoring, retraining, and redeployment for continued prediction accuracy with open source tools.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Natale Vinto - - - - 11:00 - 00:20 - Achieving FAIRness with EDP-portal - - DOI and citation improvements in metadata of EDP-portal - DOI and citation improvements in metadata of EDP-portal - <p>EDP-portal is the access point to the Environmental Data Platform of Eurac Research since 2021 to achieve FAIRness of our datasets. It allows to publish data and metadata and provides APIs and web services for data access. In the last 2 years the EDP improved the findability and accessibility of the data collected throughout the curation of metadata that was improved with the DOI registration for datasets. The result is a higher metadata quality where the final user can easily find how to properly cite datasets with a persistent identifier. The portal itself and main data repositories are registered in FAIR-sharing portal with their own DOI. The SW components of the EDP are totally based on open source projects.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Andrea Vianello - - - - 11:20 - 00:20 - SMODEX – a Python package for understanding the evolution of soil moisture anomalies - - <p>The complexity of agricultural droughts requires a consistent, reliable, and systematic method for monitoring and reporting. Amongst the various indices used to monitor this phenomenon, the soil moisture anomaly has been proven to be a more reliable predictor. However, the datasets required for computing this index are often large and computationally demanding. To address this challenge, we have developed SMODEX, a Python package that enables scalable, fast, and open-source standard-compliant computation and visualization of soil moisture anomalies.</p> -<p>SMODEX simplifies the computation and visualization of time-series for soil moisture and soil moisture anomalies from high-dimensional climate datasets. It allows for quick and easy parallelization of the computation on a daily, weekly, and monthly timescale. Additionally, SMODEX implements a straightforward workflow for automating the use of FAIR (Findable, Accessible, Interoperable, and Reusable) principles in producing and sharing outputs by leveraging the open source STAC API. The package is extendible and provides information on how to contribute to the project, test suites, test coverage, and a use case for the South Tyrol region, all provided in the package repository. In the future, additional agricultural drought indices and indicators would be included to serve to even larger community of researchers, policy makers, and individual users.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Rufai Omowunmi Balogun - - - - 11:40 - 00:20 - Why open digital infrastructure matters - - hardware & software infrastructure for Europe - hardware & software infrastructure for Europe - <p>Software freedom can be defined in many ways but in legal terms it is squarely defined by a set of approved FSF and OSI software licenses. Yet everyone realizes that beyond these licenses the goal of software freedom and digital sovereignty cannot be achieved without the ability to master and create hardware components and systems &#8211; and beyond that, to rely on open digital infrastructure (servers, datacenters, and resources) . This talk will present the challenges around these topics and what we, collectively in Europe already do and can do to ensure our independence and our freedoms.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Charles-H. Schulz - - - - 12:00 - 00:20 - Intelligent Decision Support System for traceability system of MOAH & MOSH olive oil contaminants - - What we are doing, what we will do! - What we are doing, what we will do! - <p>MOSH and MOAH are the abbreviation of two groups of chemical compounds found in mineral oils. “MOSH” stands for Mineral Oil Saturated Hydrocarbons. MOAH stands for Mineral Oil Aromatic Hydrocarbons. Both of them are under European deeply evaluation because there are two food contaminants. According to the current state of scientific knowledge, there is no sufficient toxicological evidence to prove a health risk to humans from saturated mineral oil fractions (MOSH). Meanwhile, MOAH are suspected to be carcinogenic (especially PAH-like compounds with 3-7 ring systems), therefore their levels in food should be reduced according to the ALARA-principle (as low as reasonably achievable). Gruppo FOS with CNR ( MOSH and MOAH are the abbreviation of two groups of chemical compounds found in mineral oils. “MOSH” stands for Mineral Oil Saturated Hydrocarbons. MOAH stands for Mineral Oil Aromatic Hydrocarbons. Both of them are under European deeply evaluation because there are two food contaminants. According to the current state of scientific knowledge, there is no sufficient toxicological evidence to prove a health risk to humans from saturated mineral oil fractions (MOSH). Meanwhile, MOAH are suspected to be carcinogenic (especially PAH-like compounds with 3-7 ring systems), therefore their levels in food should be reduced according to the ALARA-principle (as low as reasonably achievable). Gruppo FOS with CNR (Consiglio Nazionale delle Ricerche), Santagata 1907 and Enginius are searching the system for finding and trace their presence in the virgin and extra virgin olive oils by using open fingerprints methods, open hardware and open source blockchain and AI technologies.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Giovanni Giannotta - - - - 12:20 - 00:20 - The Future of Connectivity, Open Internet and Human Rights - - Making telecommunications more democratic with Free Software - Making telecommunications more democratic with Free Software - <p>We are becoming more and more dependent on the Internet for our work, education, communication, personal relations and entertainment. Our digital devices conquered an unprecedented level of importance in our life.</p> -<p>However, we are facing a loss of control over our smartphones, tablets and other devices for internet connection. It&#8217;s time to resolve monopolies and re-establish democratic control over the technology we most depend upon.</p> -<p>This talk will present the challenges end-users are facing to get more control over their devices and how Free Software is key for a consumer re-empowerement.</p> -<p>The talk will present real-life examples of policy demands against gatekeepers on digital markets, such as the struggle for Router Freedom in the last years and how Device Neutrality can serve as an important instrument for pushing forward end-user-oriented digital policies.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Lucas Lasota - - - - 12:40 - 00:20 - From the design to reality is here the Community Open Hardware PowerPC Notebook - - In 2014 hobbists dream it, now thanks to donors, volunteers and collaborations becomes reality - In 2014 hobbists dream it, now thanks to donors, volunteers and collaborations becomes reality - <p>The Open Hardware PowerPC Notebook designed around GNU/Linux will be showed at NOI Techpark. We had presented here its motherboard design in 2018. We will updates regarding last developments for u-boot AMD video drivers, re-design of heat pipes, and CE test certification process. We will give future availability milestones of this notebook and details regarding the GNU/Linux distributions or other OS that could runs on it.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Roberto Innocenti - - - - - - 09:20 - 01:00 - ZOOOM Toolkit Interactive Workshop - - <p>This workshop will focus on examining the ZOOOM toolkit, which provides valuable tools and material regarding open licence innovation around the topic of Open Data, Software and Hardware. Particularly, we will present the overall interface and user experience with the hope of collecting valuable feedback from participants and identifying potential improvements in both the structure and the functions of specific supporting tools. The involvement of the participants will be instrumental in gathering cutting-edge and up-to-date knowledge regarding current tools and resources that can contribute to the creation of an all-inclusive knowledge repository on open licence innovation.</p> -<p><b>REGISTRATION NEEDED AT: </b><a href="https://pretix.eu/noi-digital/sfscon23/3980546/">https://pretix.eu/noi-digital/sfscon23/3980546/</a></p> - - ZOOOM project track - ZOOOM project track - ZOOOM project track - https://www.sfscon.it/tracks/zooom-project-track-2023/ - - Amalia de Götzen - Andy Peruccon - Ronald Chenu Abente Acosta - - - - 10:20 - 00:30 - Closing ZOOOM Toolkit Interactive Workshop - - ZOOOM project track - ZOOOM project track - ZOOOM project track - https://www.sfscon.it/tracks/zooom-project-track-2023/ - - - - - 09:20 - 03:40 - The future of Free Software in Italy - - Side Event - FSFE - Italian community meeting - Side Event - FSFE - Italian community meeting - Side Event,FSFE,Italian community meeting - https://www.sfscon.it/tracks/fsfe-italian-community-meeting/ - - Marta Andreoli - - - - - - 17:00 - 00:30 - Winner proclamation and closing of the NOI Hackathon SFSCON Edition - - Side Event - Hackathon - Side Event - Hackathon - Side Event,Hackathon - - - - diff --git a/src/tests/assets/sfscon2023_event1day1_0830.xml b/src/tests/assets/sfscon2023_event1day1_0830.xml deleted file mode 100644 index 7d9b5bb..0000000 --- a/src/tests/assets/sfscon2023_event1day1_0830.xml +++ /dev/null @@ -1,2023 +0,0 @@ - - - - sfscon-2023 - SFSCON 2023 - - - Main track - Artificial Intelligence track - Community track - Cybersecurity track - Developers track - Legal track - OW2 track - Public Money Public Code & Open Data track - Data4SmartHealth - ZOOOM project track - Open Data & Open Hardware track - Side Event - Hackathon - Side Event - School Reading - Closing - with a Tale of Software, Skateboards, and Raspberry Ice Cream - Side Event - FSFE - Italian community meeting - - - - - 08:30 - 00:30 - Check-in - - Main track - Main track - Main track,Main track - - - 18:40 - 00:30 - Closing of the first day - - SFSCON - SFSCON - SFSCON - - - - - 09:00 - 00:30 - Opening SFSCON 2023 - - <p>Opening SFSCON 2023</p> - - Main track - Main track - Main track,Main track - - Vincent Mauroit - - - - 09:30 - 00:30 - Coming soon - - Main track - Main track - Main track,Main track - - - 10:00 - 00:30 - Coming soon - - Main track - Main track - Main track,Main track - - - 10:30 - 00:30 - What the AI revolution means for Open Source, Open Tech and Open Societies - - <p>In the last year we saw the rise of AI systems like ChatGPT, Stable Diffusion, Dall-E and others. Large Language Models like GPT are enabling a lot of new innovative features and products which will revolutionise the world.<br /> -But this large autoregressive language models come with a lot of challenges that can have negative effects on the Open Source and Open Tech community. For example it’s unclear if in the future everyone will have access to the same ML models and training data. Can students, startups and open source people build innovative new products using AI in the same way the open source communities build Open Code and Open Tech. How can we make sure that the AI system are not discriminating underrepresented minorities? What is the energy consumption and CO2 emissions of this new big AI systems?<br /> -This talk will discuss the current fascinating trends in AI, the challenges and some possible solution. It will also cover the current Open Source AI features in Nextcloud and our Ethical AI framework.</p> - - Main track - Main track - Main track,Main track - - Frank Karlitschek - - - - 11:00 - 00:20 - European SFS Award 2023 - - <p>The award is given to a person who contributed to the introduction of the culture of Free Software.</p> - - SFSCON - SFSCON - SFSCON - - - 11:20 - 00:20 - The First Year of Eclipse Software Defined Vehicle: a successful “code first” approach - - <p>The most notable impact of using SW in the automotive domain is the decrease in fatalities as ADAS functions are more widely employed. On the other hand, SW complexity has seen an almost exponential growth reaching about 100 million lines of code.<br /> -Hardly any organization can tackle this challenge alone.</p> -<p>The Eclipse Software Defined Vehicle (SDV) Working Group ’s mission is to foster collaboration across industries to create an open technology platform for the software defined vehicle of the future. The working group community driven by its 40 member organization has chosen a “code first” approach to facilitate more agile and faster time-to-market software development.<br /> -After its formation about a year ago, the SDV WG has onboarded about 20 open source projects and is working on integrating several projects together to create “blueprints”. The frameworks emerging from these initial blueprints show the potential and benefits of utilizing different projects as components to build broader solutions to address more complex problems</p> -<p>This contribution introduces the SDV WG and Community, as well as its projects and capabilities.</p> - - Main track - Main track - Main track,Main track - - Sara Gallian - - - - 11:40 - 00:20 - Pyccel: write Python code, get Fortran speed - - <p>Imagine writing a pure Python library which can achieve the performance of Fortran or C/C++.<br /> -To this end we have developed Pyccel, which translates Python code to either Fortran or C, and makes the generated code callable from Python. The generated Fortran or C code is not only fast, but also human-readable; hence it can easily be profiled and optimized for the target machine.<br /> -Pyccel has a focus on high-performance computing applications, where the efficient usage of the available hardware resources is fundamental.<br /> -To this end it provides type annotations, function decorators, and OpenMP pragmas.<br /> -Pyccel is easy to use, is almost completely written in Python, and compares favourably against other Python accelerators.</p> - - Main track - Main track - Main track,Main track - - Emily Bourne - Yaman Güçlü - - - - 12:00 - 00:20 - Flaky tests – how to deal with them - - <p>Every QA/QE professional has encountered a flaky test at least once in their career. It may be a small, harmless bug that can be fixed in an instant, or it may take months to identify and fix it. This can be very costly and take a toll on your reputation and budget.</p> -<p>Don&#8217;t you want to know why flaky tests exist, how to identify them at an earlier stage, or even avoid them?</p> -<p>Join the investigation and we will figure it out together with you to find out the origins and roots of common flaky tests; to explore real cases and their solutions; to learn good practices.</p> - - Main track - Main track - Main track,Main track - - Juri Solovjov - - - - 12:20 - 00:20 - Psydac: a Python IGA library for large-scale simulations - - Ease of use and high performance in the open-source Python ecosystem - Ease of use and high performance in the open-source Python ecosystem - <p>Psydac is an open source library for isogeometric analysis (IGA), that is, a finite element method which uses the same basis functions of a CAD model (B-splines and NURBS).<br /> -It has been developed at the Max Planck Institute for Plasma Physics, with the goal of exploring advanced numerical methods for electromagnetism, magneto-hydro-dynamics, and plasma kinetics. It is completely written in Python, uses only open-source libraries, and can run large parallel simulations on high-performance computing facilities. It employs a domain specific language, automatic code generation, a transpiler, MPI communication, OpenMP multithreading, and parallel I/O. In this talk we explore the library architecture and its overall design philosophy, which can be applied to other domains.</p> - - Main track - Main track - Main track,Main track - - Yaman Güçlü - - - - 12:40 - 00:20 - The incredible machine: when automation backfires - - The hidden costs of automation - The hidden costs of automation - <p>Ever wanted to apply CI/CD principles and run tests for every change?<br /> -But it is too complex to set up the test environment, and launch the tests with all the updated parameters, solution? Automation!<br /> -Release your software implies a countless number of complicated steps, what solution? Automation!<br /> -So automation sometimes seems to be the solution, you automate some complex procedure and call the day.</p> -<p>But automation of a process sometimes can only hide the real problem and only delay the moment when you have to address the technical debt, and sometimes the automation can even also act as an amplifier of the technical debt.</p> -<p>Based on the experience matured on the field, this talk will be shown the hidden traps of automation, the drawbacks, and the lessons learned.</p> - - Main track - Main track - Main track,Main track - - Matteo Valentini - - - - 13:00 - 00:20 - Write High Performance Clients for RabbitMQ - - <p>In this talk, I will share our experience with writing clients for the RabbitMQ stream queues.<br /> -The RabbitMQ stream queues have been designed with performance as a major goal. So the clients have to be performant.<br /> -We will see how we increased the throughput and/or reduced the latency.<br /> -.NET and Go clients will be taken as examples. We will go through some real production code.</p> - - Main track - Main track - Main track,Main track - - Gabriele Santomaggio - - - - 13:20 - 00:20 - Ithaca: the Clean and Hexagonal Architectural Island - - An introduction to Clean and Hexagonal Architecture principles - An introduction to Clean and Hexagonal Architecture principles - <p>Get ready to sail from the Scylla and Charybdis&#8217;s shores of 3-layered architecture to the safe Ithaca refreshing shores of Clean and Hexagonal Architecture! Brace yourself as we surf from zero to Ulysses (a hero!), leaving behind monstrous code and embracing cleanliness and modularity. No more Odysseys; protect your source code navigation through Clean and Hexagonal Architecture principles!</p> - - Main track - Main track - Main track,Main track - - Luca Guadagnini - - - - 13:40 - 04:20 - Accessibility improvements for Uyuni - - <p>Uyuni is a powerful open source configuration and infrastructure management tool used by many organisations worldwide.<br /> -However, its current state presents accessibility challenges for people with disabilities. Its user interface relies heavily on visual elements, making it difficult for visually impaired users to navigate and access its features.</p> -<p>The presentation will dive into the ongoing work to increase Uyuni&#8217;s accessibility following the Web Content Accessibility Guidelines (WCAG).</p> -<p>Apart from focusing on the specific work for Uyuni, during the presentation, the participants will be also introduced to best practices for designing accessible WebUI and easy tools to be use during the software development.</p> - - Main track - Main track - Main track,Main track - - Marina Latini - - - - 14:00 - 00:20 - squash the flakes! - - how to minimize the impact of flaky tests - how to minimize the impact of flaky tests - <p>Flakes aka tests that don’t behave deterministically, i.e. they fail sometimes and pass sometimes, are an ever recurring problem in software development. This is especially the sad reality when running e2e tests where a lot of components are involved. There are various reasons why a test can be flaky, however the impact can be as fatal as CI being loaded beyond capacity causing overly long feedback cycles or even users losing trust in CI itself.</p> -<p>We want to remove flakes as fast as possible to minimize the number of retests required. This leads to shorter time to merge, reduces CI user frustration, improves trust in CI, while at the same time it decreases the overall load for the CI system.</p> -<p>We start by generating a report of tests that have failed at least once inside a merged PR, meaning that in the end all tests have succeeded, thus flaky tests have been run inside CI. We then look at the report to separate flakes from real issues and forward the flakes to dev teams.</p> -<p>As a result retest numbers have gone down significantly over the last year.</p> -<p>After attending the session the user will have an idea of what our flake process is, how we exercise it and what the actual outcomes are.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Daniel Hiller - - - - 14:20 - 00:20 - A comparison of Open Source FaaS technologies - - <p>As the demand for serverless computing continues to grow, the availability and choice of open source Function as a Service (FaaS) technologies are expanding rapidly. In this talk, we will present our experience in using some of the most popular open source FaaS platforms, compare them and discussing their features and characteristics.</p> -<p>The session will begin with an introduction to serverless computing and the key concepts behind FaaS. Throughout the talk, we will analyze various aspects such as ease of deployment, architecture, specific features, etc. We will examine real-world use cases and share insights on the strengths and limitations of each platform, allowing attendees to make informed decisions when choosing the right FaaS technology for their projects.</p> -<p>By the end of this session, attendees will have a better understanding of the open source FaaS landscape from our experience in production usage.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Andrea Avancini - Michele Santuari - Alberto Sillitti - - - - 14:40 - 00:20 - Coming soon - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - - 15:00 - 00:20 - F-Droid – The place for your FOSS Apps - - Why you should submit your FOSS Android App to F-Droid - Why you should submit your FOSS Android App to F-Droid - <p>On F-Droid you can find thousands of FOSS apps and games for Android. F-Droid brings you visibility in the FOSS community that will provide great feedback, open issues and eventually contribute to your FOSS project.<br /> -This presentation is about my personal experience with my games Ball2Box, Pocket Broomball and Sn4ke published on F-Droid. I will show you what F-Droid is, how it works and the steps needed to submit your project.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Simon Dalvai - - - - 15:20 - 00:20 - Coming soon - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - - 15:40 - 00:20 - Don’t let microservices kill you! - - A few ideas on architecting for the journey, not for the destination - A few ideas on architecting for the journey, not for the destination - <p>Microservices is a trend, and for a reason: it’s an architecture style that enables many desirable qualities on the systems that adopt it. By being distributed, it allows using the right technology stack for each capability, at the same time it eases the evolution of each fine-grained part of the system. But it comes with a price and offers significant risks, in particular related to larger portions of the architecture, and also the management of the entire infrastructure. Those costs and risks are the biggest challenges for a new system, when it adopts microservices from the start. But, on the other hand, starting with a monolith might require a big effort to migrate towards microservices in the future. Is that a check-mate?</p> -<p>Definitely not! Don’t let microservices kill you! In this talk, we’re going to see some ideas about architecting the system focusing on the journey. After all, we spend most of the time maintaining and evolving the system, than actually leaving it running “stably”. Also, by seeing how to start something new, we’re actually going to discuss the best architecture practices for any given time of the project.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - João Francisco Lino Daniel - - - - 16:00 - 00:20 - Automating git for development on large distributed teams - - A tour on aggressive use of git branching with automation for distributed cooperation - A tour on aggressive use of git branching with automation for distributed cooperation - <p>Contributing to large open source projects is not always a fast or smooth sailing process, and is often stalled simply due to the necessary human factor.</p> -<p>Contributions are rarely accepted quickly or as-is, and it&#8217;s not uncommon to rework each submission extensively by splitting the proposed change into separated fixes and features, into smaller incremental changes where each is tested independently or sometimes perform complete rewrites.</p> -<p>When the vetting of each submission can require weeks, contributors often feel blocked by the need to wait for their own or peer&#8217;s changes.</p> -<p>To cope in these scenarios, we present a few git branching and automation strategies that allow efficient wait-free development of interconnected changes, even across community members, in a truly distributed fashion.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Yuri D’Elia - - - - 16:20 - 00:20 - Kubernetes for IoT - - How kubernetes can help you quickly and automatically test and deploy new services - How kubernetes can help you quickly and automatically test and deploy new services - <p>While Kubernetes is primarily associated with managing cloud-native applications and microservices, it can also play a role in IoT deployments. Here are a few reasons why Kubernetes is relevant in the context of IoT:</p> -<p>1 Scalability: IoT systems often involve a large number of devices generating massive amounts of data. Kubernetes provides automatic scaling capabilities, allowing IoT applications to scale horizontally by adding or removing instances based on demand. This helps manage the increasing workload efficiently.</p> -<p>2 Resilience and High Availability: IoT applications require high availability to ensure uninterrupted operations. Kubernetes offers features like load balancing, fault tolerance, and self-healing capabilities. It can automatically restart failed containers or replace them with healthy instances, ensuring that IoT services remain available and resilient.</p> -<p>3 Resource Optimization: IoT deployments typically involve a mix of hardware devices with varying capabilities. Kubernetes can optimize resource utilization by efficiently distributing workloads across devices. It allows you to define resource constraints and priorities, ensuring that devices with higher capabilities handle more demanding tasks.</p> -<p>4 Service Discovery and Load Balancing: In an IoT ecosystem, devices and services need to discover and communicate with each other. Kubernetes provides built-in service discovery mechanisms, such as DNS-based service discovery and load balancing, allowing devices to locate and interact with services dynamically.</p> -<p>5 Security and Updates: Security is a crucial aspect of IoT systems, and Kubernetes helps in managing security at scale. It provides features like role-based access control (RBAC), network policies, and secret management to enforce security measures across IoT deployments. Additionally, Kubernetes facilitates rolling updates, allowing for seamless updates and patches without downtime.</p> -<p>6 Flexibility and Portability: Kubernetes abstracts the underlying infrastructure, enabling IoT applications to be deployed consistently across different environments, whether it&#8217;s on-premises, in the cloud, or at the edge. This flexibility allows organizations to migrate or distribute their IoT workloads as needed, making it easier to adopt hybrid or multi-cloud strategies</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Andrea Alfonsi - - - - 16:40 - 00:20 - Pitfalls and Mistakes When Dealing With Non-Functional Requirements - - <p>Non-functional requirements are essential to define the software architecture, and if they are not identified and handled correctly, the impact can be huge. This talk will present some common mistakes when handling non-functional requirements. It starts talking about the ones defined at the beginning of the project with a false certainty, which can become an even worst problem if they are never revised. Then, we will pass through the client that always wants the complete package and talk about the ones that are only remembered when some user complains. Of course, the talk does not forget about those that try to treat those very different non-functional requirements in exactly the same way. In the end, it will be presented some practices that can be used to avoid these problems.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Eduardo Guerra - - - - 17:00 - 00:20 - CrudIt: an opensource framework that makes developers autonomous - - Discover the low-code framework that accelerate app development - Discover the low-code framework that accelerate app development - <p>Nowadays application implementation requires a lot of different competencies that make it impossible for a single person to build an entire application. This led to the need for a big multi-competencies team and increasing in communication issues during the project. But what if we could implement an application without the need of implementing a backend? CrudIt does exactly that. CrudiIt is an open-source framework that enables a small team or a single front-end developer to create small SaaS applications without any knowledge of backend, cloud and sysadmin needs.<br /> -During the event, we will see how to implement a simple SaaS service using Crudit and how to use the framework to accelerate application development.<br /> -Moreover, we will discuss how to host a CrudIt application without any sysadmin competencies in the cloud, using free services.<br /> -This talk will unveil how, thanks to this powerful low-code framework, it is possible to save data without writing a line of code, even if you are working in complex, multitenant scenarios.<br /> -The talk will explain also how the framework is born, how it works internally and promote the opensource philosophy that brings to this library.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Daniele Fontani - Daniele Ciulli - - - - 17:20 - 00:20 - The Entando Marketplace - - Fueling the Capability Economy through FOSS Contributions and Empowering Community-driven Innovation - Fueling the Capability Economy through FOSS Contributions and Empowering Community-driven Innovation - <p>The Entando Platform, an open source Application Composition Platform (ACP), is transforming cloud-native application development. With a component-based approach, organizations harness the power of Entando to effortlessly create and consume reusable components, fostering collaboration and driving productivity.</p> -<p>At the heart of this transformation lies the Entando Marketplace. Entando Marketplace and the Entando Platform provides FOOS communities with a platform to collaborate, showcase their projects, access resources, and streamline development processes.</p> -<p>We delve into the principles and benefits of composable practices, which enable developers to build modular, scalable, and adaptable applications.</p> -<p>Furthermore, we highlight the essential role of the Entando Marketplace as a catalyst for the capability economy. FOSS contributors are empowered to share their expertise and contribute to the growing collection of reusable components, unlocking new possibilities for innovation and collaboration.</p> -<p>Join us to discover how the Entando Community fosters collaboration and embraces composable practices, paving the way for a vibrant FOSS ecosystem. Together, we can cultivate a community-driven capability economy that thrives on shared knowledge and collective innovation.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Emanuele Cerroni - - - - 17:40 - 00:20 - Improving developer experience in Open Source Projects - - How to ease contribution and management of your next big idea - How to ease contribution and management of your next big idea - <p>What makes an open-source project successful? How hard is it to add external people to an open project?<br /> -We at Nethesis have open source in our core with more than 400 public repositories that hold all of our company code. With the upcoming release of NethServer, we’re facing the excruciating question: how do we make it more appealing for developers?<br /> -Follow me in the changes we want to make to our processes to ease development and contributions, using big projects as examples and how even you can make a difference in the smallest of all codebases.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Tommaso Bailetti - - - - 18:00 - 00:30 - CLOSING with a Tale of Software, Skateboards, and Raspberry Ice Cream - - SFSCON - SFSCON - SFSCON - - Matthias Kirschner - - - - - - 10:30 - 01:30 - Ada & Zangemann - - Side Event - School Reading - Side Event - School Reading - Side Event,School Reading - - - 12:00 - 00:30 - Closing of Ada & Zangemann reading - - Side Event - School Reading - Side Event - School Reading - Side Event,School Reading - - - 14:00 - 00:20 - Welcome Data4SmartHealth 2023 - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Floriano Zini - Chiara Ghidini - Andrea Gasparella - - - - 14:20 - 01:00 - AI Algorithms for Digital Therapeutics - - <p>Digital therapeutics tackle diverse medical conditions, and AI algorithms, encompassing machine learning, natural language processing, and computer vision, are central to their success. They enable personalized, data-driven treatments, improving patient outcomes while potentially reducing healthcare costs. This talk explores AI&#8217;s pivotal role in digital therapeutics, where software interventions are reshaping healthcare.</p> - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Gianluigi Greco - - - - 15:20 - 00:20 - Software testing for remote proof of concept studies of digital therapies - - From the definition of a proof of concept study to the development and testing of the required technical infrastructure - From the definition of a proof of concept study to the development and testing of the required technical infrastructure - <p>Digital therapies are evidence-based therapeutic interventions that use software to prevent, manage, or treat a medical disorder or disease.<br /> -Not only they require carefully planned clinical studies, but they require also a suitable technical infrastructure not to lose or compromise relevant information. Consequently, careful software testing and monitoring is necessary to ensure that the technical infrastructure is working correctly during the study.</p> -<p>In this talk we will describe the entire process used for the analysis of the effectiveness of Nearine, a digital therapy for the management of depressive symptoms based on interoceptive stimulation through vibrations applied on the wrist.<br /> -We will start with the description of the remote proof of concept study used for the assessment of the effectiveness and potential adverse effects. After that, the technical infrastructure necessary for the study will be outlined.<br /> -Finally we will show how the usage of CatchSolve for software testing has decreased the risk of potential loss of information during the study.</p> -<p>The talk is the result of a joint collaboration between CatchSolve, software testing startup based in NOI Techpark, and Nearine, a new digital health and neurotechnology startup based in Bolzano.</p> - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Chiara Masci - Davide Montesin - - - - 15:40 - 00:20 - Gimme! Gimme! Gimme! (Some good algorithms) - - Wearable hackers meet e-health experts to make a first class open source Android app - Wearable hackers meet e-health experts to make a first class open source Android app - <p>Gadgetbridge, a free and open source project, has existed since 2015 to allow wearable device customers to use their hardware without being tied to the online services of the manufacturers.</p> -<p>The small but very focused and capable technical community working on the basic functionalities such as retrieving the various data from the wearables (detected activities, sleep, pulse per minute, peripheral oxygen saturation, &#8230;) lacks the expertise on specialised algorithms that could help to perform advanced analysis/diagnostics.</p> -<p>The goal of this talk is to explore a potential collaboration between our communities: Gadgetbridge provides local-only support for an extensive list of wearable devices and a community of engineers and privacy minded users, Data4SmartHealth might contribute advanced algorithms and AI on edge devices.</p> - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Daniele Gobbetti - - - - 16:00 - 00:20 - Home4Me – IoT and AI at service of disability - - An example of how the technology can help disabled people at home. - An example of how the technology can help disabled people at home. - <p>Home4Me is an innovative social project that tries to help disabled people at home (and not only at home).<br /> -The projects tries to keep in mind concrete problems that a person with disabilities lives at home and try to resolve them using IoT ad-hoc devices and a backend to access to the power of Cognitive and AI services.</p> -<p>On the market there are already IoT solutions, but expensive and not customizable to the needed of the disable person: here is where Home4Me want to be a possible solution.</p> - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Luca Nardelli - - - - 16:20 - 00:20 - Discussion on the first round of talks - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Chiara Masci - Davide Montesin - Daniele Gobbetti - Luca Nardelli - - - - 16:40 - 00:20 - Machine learning driven simulation of protein folding atomistic trajectories - - <p>The folding of proteins is an important biological process that determines the structure, role and functionality of proteins. It is often studied by molecular dynamics (MD) simulations, in order to obtain the folding trajectory of all the atoms in the system.<br /> -To date, pure MD simulations require huge computational resources and are still unable to access the timescales of folding processes that have biological relevance.<br /> -In my work, I am exploiting machine learning techniques and one recent AI milestone, Deepmind&#8217;s Alphafold, in order to create an advanced algorithm able to explore the folding trajectories within short computational times. It becomes possible to extract atomistic conformations from the folding pathways, and identify folding intermediates and long-lived states.<br /> -This method can be used to facilitate the identification of biologically relevant protein conformations, later to be used for pharmacological targeting or biophysical studies.</p> - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Alan Ianeselli - - - - 17:00 - 00:20 - Data-driven knowledge discovery from Brain Imaging of Alzheimer’s disease patients - - Artificial Intelligence to support the diagnosis of neurodegenerative disorders - Artificial Intelligence to support the diagnosis of neurodegenerative disorders - <p>Alzheimer’s disease (AD) is a chronic neurodegenerative disease which is largely responsible for dementia in around 6% of the population aged 65 and above. The availability of human brain data generated by imaging techniques, such as Magnetic Resonance Imaging, have resulted in a growing interest in data-driven approaches for the diagnosis of neurological disorders and for the identification of new biomarkers. The knowledge discovery process typically involves complex data workflows that combine pre-processing techniques, statistical methods, machine learning algorithms, post-processing and visualisation techniques. This talk presents specific research efforts in this direction, promising results, open issues and challenges.</p> - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Giuseppe Di Fatta - - - - 17:20 - 00:20 - Management of large genomic data with free software - - <p>The suite of free software tools created within the OpenCB (Open Computational Biology &#8211; https://github.com/opencb) initiative makes possible to efficiently manage large genomic databases.</p> -<p>These tools are not widely used, since there is quite a steep learning curve for their adoption, thanks to the complexity of the software stack, but they may be really cost-effective for hospitals, research institutions etcetera.</p> -<p>The objective of the talk is showing the potential of the OpenCB suite, the information to start using it and the advantages for the end users. BioDec is currently deploying a large OpenCGA installation for the Genetic Unit of one of the main Italian Hospitals, where data in the order of the hundreds of TBs will be managed and analyzed by bioinformaticians.</p> - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Michele Finelli - - - - 17:40 - 00:20 - Discussion on second round of talks and closing - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Alan Ianeselli - Giuseppe Di Fatta - Michele Finelli - - - - - - 11:20 - 00:20 - Self-hosted, Open Source Large Language Models (LLMs) - - What are the most promising projects and how good are they? - What are the most promising projects and how good are they? - <p>In recent years different groups have used the transformer architecture (a deep learning model) to train neural networks using large quantities of text. With the increase in compute power these models have grown to billions or even hundred of billions of parameters. As the model size grew, noteworthy abilities emerged. Such as the ability to generate text showing surprising reasoning skills to the point that the leading models can now successfully take college-level exams.</p> -<p>Currently some of the best and most famous models are proprietary and released to the public as a service. However a large Open Source community has emerged that tries to train and fine tune free models that can be used self-hosted. This is a challenging task due to problems with potential copyright issues with the training text, the large computational cost of the training itself and the supervised fine tuning step to adapt the model to its final use case.</p> -<p>In this talk I will give an overview on what the most promising projects in this space are and how they compare to the proprietary state-of-the-art models of the large players.</p> - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - Chris Mair - - - - 11:40 - 00:20 - Nextcloud – how to keep up with the fast moving IT world - - Artificial Intelligence within Nextcloud - Artificial Intelligence within Nextcloud - <p>At Nextcloud we believe that in order to achieve digital sovereignty we always need to stretch the boundaries. If new technologies and new ways of working come up, we work hard to enable our users to enjoy the same functionality without giving up control over their data and computing.</p> -<p>Over the last few months we saw a lot of innovation in the area of artificial intelligence which might change our way of working to a large extend. At Nextcloud we are happy that we can already provide the first features in this areas to our users. Unfortunately not all features work completely on-premise as of today. That&#8217;s why we introduced a &#8220;Ethical AI Rating&#8221; which provides transparency to the user and let them decide what to use today, while we are working hard to base more and more of this features on Free Software and on-premise solutions.</p> -<p>The talk will present Nextcloud&#8217;s AI-features, the Ethical AI Rating and how we try to approach innovations in a fast moving IT world, in order to bring similar functionality to the Free Software community.</p> - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - Björn Schießle - - - - 12:00 - 00:20 - From Novices to Innovators: Exploring the Possibilities with Free and Open Source AI Tools - - <p>Join me as we explore the world of free and open-source AI tools, empowering individuals and organizations to unleash their creativity and take their innovation to the next level.</p> -<p>Discover how some AI players are democratizing access to cutting-edge technologies and leveling the playing field, e.g. StabilityAI, etc. We will delve into the benefits and opportunities offered by some free and open-source AI tools, exploring their capabilities, potential applications, and the impact they can have on your projects.</p> -<p>Whether you&#8217;re a practitioner or just starting your AI journey, this talk is your gateway to discovering an exciting plethora of free and open-source AI tools, and how they can empower you to stay ahead of the curve in the modern era.</p> - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - Anjan Karmakar - - - - 12:20 - 00:20 - Optimizing Software Performance with Inductive Logic Programming: A Novel Approach - - <p>Concurrent execution of tasks can significantly improve its performance and efficiency. However, identifying which tasks can be executed concurrently and which tasks need to be executed sequentially can be a challenging task. In this talk, I propose using Inductive Logic Programming (ILP) to create a dynamic dependency graph for a given program. The graph can be used to identify which tasks can be executed concurrently and which tasks need to be executed sequentially. I demonstrate the effectiveness of this approach by applying it to a sample program and comparing its performance with a version that does not utilize concurrent execution. This talk presents a novel approach to creating a dynamic dependency graph for programs and highlights the potential benefits of using ILP for optimizing the performance of complex software systems.</p> - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - Enrico Zanardo - - - - 12:40 - 00:20 - Democratizing Language and Vision Technology - - A Retrieval-based Approach for Open Vocabulary Image Classification - A Retrieval-based Approach for Open Vocabulary Image Classification - <p>The advancement in language and vision models (LLM) has seen remarkable progress in recent years. However, the training of these large-scale models poses challenges in terms of time and computational resources, particularly with regards to deep learning models that require powerful GPUs. This has created a significant gap between Big Tech companies, who possess substantial resources to train LLM models, and academia, which often lacks the necessary means to contribute significantly in this field.</p> -<p>To address this issue, we propose an innovative open vocabulary framework called CaSED (Category Search from External Databases). Unlike traditional LLM models, CaSED does not rely on extensive training. Instead, it leverages retrieval techniques from an image-text knowledge base to classify or tag images automatically. By utilizing existing knowledge bases rather than requiring extensive training, CaSED eliminates the need for large computational resources.</p> -<p>In this talk, we will show the potential of low-budget approaches in the context of Language and Vision.</p> - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - Paolo Rota - - - - 13:00 - 00:20 - Web Search, fresh and local - - Deploying the PeARS search engine in regional communities - Deploying the PeARS search engine in regional communities - <p>It is widely believed that Web search engines require immense resources to operate, making it impossible for small communities to build alternatives to the dominant players. The PeARS project (https://pearsproject.org/) aims at changing the status quo by providing open-source search tools that can be used by anyone, anywhere. To achieve this, our team designs algorithms that run on entry-level hardware, using both traditional and cutting-edge machine learning techniques.</p> -<p>This talk will focus on a specific use case for PeARS, showing how the framework can easily be deployed to provide regional search solutions: for instance for local governments, small business communities, or minority speaker groups. We will see how the system can be trained and populated on a home computer in a few clicks and how it can be tailored to the specific community it is addressed to.</p> -<p>The project has received funding from the European Union under the Next Generation Internet programme.</p> - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - Aurelie Herbelot - - - - 13:20 - 00:20 - Image Generation with Diffusion Models - - How computers imagine our world - How computers imagine our world - <p>Recent machine learning developments saw a breakthrough in generating images. So-called Diffusion Models can create photo-realistic images from noise. With the help of an input text (prompt) we can guide the generation and produce matching images.</p> -<p>This technology opened new doors for creating digital art, modifying existing images, and creating stunning visual experiences. In the talk, we will find out how these algorithms work, introduce Stable Diffusion (a concrete implementation), and find out what its use cases are. We will see how text can be used to generate matching outputs but also take a look at more experimental features such as creating images from edges, outlines, or depth maps.</p> -<p>We will mainly focus on the open source text-to-image model Stable Diffusion, which has set new standards in image generation. With it also comes an active community that keeps it open source and accessible for everyone.</p> - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - Markus Pobitzer - - - - 13:40 - 04:20 - Coming soon - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - - 14:00 - 00:20 - The History of, and Path forward for, Copyleft and the GPL - - Copyleft, Software, Freedom, & You: Better Understanding Through History - Copyleft, Software, Freedom, & You: Better Understanding Through History - <p>Copyleft licensing has been the primary strategy of the FOSS community to guarantee users&#8217; rights to copy, share, modify, redistribute reinstall modified versions of their software. In our earliest days, we naïvely thought that the GPL would work like magic pixie dust; we&#8217;d sprinkle it on our code, and our code would remain free as in freedom.</p> -<p>The reality check that we&#8217;ve received over the last 35 years has been painful on this issue. Nevertheless, those who forget the past are condemned to repeat it.</p> -<p>This talk will not only discuss the primary past GPL enforcement efforts around the world, but also provide a whirlwind tour of how copyleft came to work how it does and discuss ideas and suggestions of future strategies in copyleft that, informed by this history, are our best hope for software freedom.</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Karen Sandler - - - - 14:20 - 00:20 - Reproducible Builds – the first 10 years - - an overview about reproducible builds, the past, the presence and the future - an overview about reproducible builds, the past, the presence and the future - <p>In this talk Holger Levsen will give an overview about reproducible builds, the past, the presence and the future. How it started with a small BoF at DebConf13 (and before), how it grew from being a Debian effort to something many projects work on together, until in 2021 it was mentioned in an executive order of the president of the United States. And of course the talk will not end there but rather outline where we are today and where we still need to be going, until we&#8217;ll all be running 100% reproducible software, verified by many.</p> -<p>And while Holger&#8217;s day to day work and this talk will have a Debian focus, reproducible builds in other project will be featured and not be left behind as Holger has been involved in Reproducible Builds since 2014 and has been working on reproducing Arch Linux, coreboot, Fedora, FreeBSD, NetBSD, OpenWrt and others. Other important software projects will also be covered and last not least Holger will also explain why you&#8217;ll want verifiable SBOMs and not just SBOMs.</p> -<p>So what is this talk about exactly again? &#8220;A build is reproducible if given the same source code, build environment and build instructions, any party can recreate bit-by-bit identical copies of all specified artifacts.&#8221;<br /> -(https://reproducible-builds.org/docs/definition)</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Holger Levsen - - - - 14:40 - 00:20 - AI Law & Ethics for sustainability corporate governance - - <p>In the era of AI, EU regulators struggle in definying a level playfield for the fruitful development of technology and utmost protection of fundamental rights and freedoms of individuals. The so-called AI Act is going to be approved by the end of 2023 and should come into force after a 2-year grace period. In any case most of the provision will be strongly risk-based and accountability oriented. In this fragmented and complex scenario, it is extremely interesting to observe how the use of AI law and AI ethics can serve the purposes of sustainability corporate governance, fostering innovation AND preserving fundamental rights and freedoms in a measurable and viable manner, having rights entering into business logics and decisions.</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Federico Sartore - - - - 15:00 - 00:20 - Windows and Office “tax” refund - - The right to install any software on any device and various cases about the refund of pre-installed software - The right to install any software on any device and various cases about the refund of pre-installed software - <p>Some manufacturers try to force to use the preinstalled software on the PC you acquire, sometimes also claiming that alternative software will not work properly.</p> -<p>On 2018 Luca purchases a Lenovo Tablet/PC and, since it comes with Microsoft Windows pre-installed, he requested the refund to Lenovo, but Lenovo denied to refund Luca. A court case was initiated, and Lenovo was condemned to pay a punitive damages of 20&#8217;000 euros for its abusive behaviour.</p> -<p>After this &#8220;historic&#8221; case, some other refund were request to other companies, such as HP, Dell, Microsoft, Acer, and again to Lenovo. Each OEM tried to deny the refund, with various reasons such as contractual clauses contained in the sale contract or in the same license agreement, or the need to delete the Product Key stored in the MSDM BIOS ACPI table and therefore they require to send the PC to their laboratories. These reasons have no valid legal basis, because – at least in Italy – the license agreement is a contract totally unrelated to the sale contract, so a third party may not impose any action on your material good, and the license agreement has remained without causal and economic justification, because not accepted and missed to be concluded.</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Luca Bonissi - - - - 15:20 - 00:20 - How do you really do GPL enforcement? - - aka Bringing software right-to-repair to the masses - aka Bringing software right-to-repair to the masses - <p>Enforcing the General Public License (GPL) to bring real software freedom to people can be very challenging in practice, but many of the steps in the process are straight-forward. As the only organization enforcing the GPL for Linux, Software Freedom Conservancy (SFC) receives a huge quantity of GPL violation reports, and needs to triage each one as the beginning of our process. The next step is called the &#8220;CCS check&#8221; (complete corresponding source check), a crucial but barely known activity that determines whether some candidate source code actually corresponds to the device/binaries that the candidate was provided for. We will discuss the CCS check in detail, providing examples and tips for doing your own checks.</p> -<p>Lastly, we&#8217;ll cover the offer check, something everyone can do to help in SFC&#8217;s efforts to bring real software right-to-repair to every device running Linux. Whether you want to check offers for source code, review a CCS candidate, or go even further with additional GPL enforcement work of your own, this talk will set you up for success.</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Denver Gingerich - - - - 15:40 - 00:20 - KYCS ‒ Know Your Code Sources (and let it be known) - - How Cyber Resilience Act is going to change FOSS forever and what can we do about it? - How Cyber Resilience Act is going to change FOSS forever and what can we do about it? - <p>CRA at the time of submission is still in a draft status, but it is relatively clear that it will impose a duty to make the software safer if and when it is distributed on the market as a final product.</p> -<p>Part of the safety requirements includes the obligation to collect and keep available for inspection a list of software components obtained from third parties, that is their provenance, and the insecurities obtained through mainly CVE scanning. Incidentally there is an obligation to support and provide security patches after the product is placed on the market (hint, open source rulez).</p> -<p>Open Source Software is not exempted per se, the current discussion is where the final burden and responsibility of complying, if at all, lies. In any case, whatever the outcome of such discussion is, open source projects should strive to ease up CRA compliance for their downstream adopters, if they want to keep them. We will concentrate on how open source projects that aim at being considered in an industry supply chain (including that of software industry) should strive to make the supply chain&#8217;s life easier, building on our experience with Eclipse Oniro and the toolchain and processes we have devised for it.</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Carlo Piana - Alberto Pianon - - - - 16:00 - 00:20 - Continuos compliance @ Linaro - - Linaro's open source innovation engine on steroids thanks to production grade and long term sustainability attributes. - Linaro's open source innovation engine on steroids thanks to production grade and long term sustainability attributes. - <p>Continuous compliance is rooted into Linaro&#8217;s everyday activities, whether the target is kernel development, a SOC Yocto SDK, an SDV, or consumer electronics project. Open source is at the center of today&#8217;s software innovation, ubiquitous across products and services and, as such open source needs to evolve from a mere innovation into a production-grade engine. Linaro, one of the leading linux kernel contributors, is perfectly positioned to support our customers and the entire open source community throughout this transition. This talk will showcase Linaro&#8217;s continuous compliance and production-grade processes, artifacts, and best practices and shed some light on what&#8217;s happening under the hood of one of the world leading open source organizations and contributors.</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Davide Ricci - - - - 16:20 - 01:40 - The current state of SBOMs and SPDX - - Updates for 2023 - Updates for 2023 - <p>Software Bill of Materials (SBOMs) are rapidly becoming increasingly important in the software supply chain. Software Package Data Exchange (SPDX) is a freely available ISO standard that defines the way of communicating information about software components. It includes, but is not limited to, metadata such as name and version, but also licensing and security information.</p> -<p>In this talk, we will present the latest updates from the ever-changing landscape of SBOMs and SPDX, focusing in real-world use cases. Familiarity with the concepts will not be assumed, as they will be briefly explained.</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Alexios Zavras - - - - 16:40 - 00:20 - ZOOOM Project track introduction - - Introduction to the ZOOOM project and presentation of the next-day activity - Introduction to the ZOOOM project and presentation of the next-day activity - <p>The ZOOOM Track aims to disseminate the findings of the ZOOOM project and show the intersection between legal and business aspects in IP management and value creation/capture in innovation ecosystems based on open-source software (and beyond).<br /> -In this talk the ZOOOM consortium will present the first results of the project discussed in the following talks and the activity for the second day workshop of the SFSCon.</p> - - ZOOOM project track - ZOOOM project track - ZOOOM project track - https://www.sfscon.it/tracks/zooom-project-track-2023/ - - Stefano Menegazzi - Alessandro Rossi - Amalia de Götzen - Andy Peruccon - - - - 17:00 - 00:20 - The ZOOOM Framework: Legal aspects of FOSS and beyond - - <p>License compliance efforts for software projects involve not only legal-oriented actions, but also governance elements such as organizational processes and community management. The larger the community or the organization working collectively, the more complex a compliance program for software projects may become. Free Software licenses being direct licensing models are easier to comply with in comparison to proprietary licenses. This talk will give an overview of the Free Software licensing compliance practices, including initiatives such as REUSE for streamlining copyright and license information for software projects.</p> - - ZOOOM project track - ZOOOM project track - ZOOOM project track - https://www.sfscon.it/tracks/zooom-project-track-2023/ - - Niharika Singhal - - - - 17:20 - 00:20 - The ZOOOM Framework: Business Aspects of FOSS and Beyond - - <p>Companies can engage in the 3Os in many ways and for different reasons. In many cases, strategic and competitive advantages are at the core of a company’s decisions, but in other cases, motivations can involve social and ethical considerations such as reciprocity, altruism, and democratization of knowledge. In this talk, we outline the main business-related motivations identified by the ZOOOM project for using and contributing to FOSS. Among them: pursuing competitive advantage, reduction of development costs, technological innovation, access to knowledge or assets, and interoperability. Based on the interviews conducted by the ZOOOM partners, we also discuss major challenges and risks that businesses leveraging the 3Os must navigate.</p> - - ZOOOM project track - ZOOOM project track - ZOOOM project track - https://www.sfscon.it/tracks/zooom-project-track-2023/ - - Seckin Celik - Davide Serpico - - - - 17:40 - 00:20 - The ZOOOM Framework: An Ecosystemic Perspective - - <p>In this talk, we analyse the ecosystem trend in the context of the 3Os, particularly FOSS. Based on the existing literature and data from ZOOOM interviews, we explore the potential roles that companies can play in open-source ecosystems, their interactions with the other players of the ecosystem, and their awareness about the impact that systemic elements have on their business. Most companies recognize the advantages of being embedded in ecosystems where the creation of new knowledge is facilitated by joint research work, collaboration, and expertise sharing. However, companies identify themselves into specific roles depending on their strategy, main business, network structures, and communities. Finally, we outline a multilevel framework of how business and innovation ecosystems complement each other in the realm of the 3Os.</p> - - ZOOOM project track - ZOOOM project track - ZOOOM project track - https://www.sfscon.it/tracks/zooom-project-track-2023/ - - Davide Serpico - Seckin Celik - - - - - - 11:20 - 00:20 - Community tidbits - - How to keep free software projects happy and healthy - How to keep free software projects happy and healthy - <p>Open source communities, when they have reached a certain size, face their very own set of challenges.</p> -<p>In the virtual world, timezones, language barriers and dealing with many e-mails can become a burden. In the real world, the organization of travels to project meetings, the planning of annual conferences in an easy to reach location, and even the shipment of gadgets around the globe turn out to be quite demanding.</p> -<p>While free software projects might have the same diversity and outreach as large organizations, they often have not the same resources at hand as established corporations. They need to be a bit more creative &#8211; but luckily, that&#8217;s in their DNA!</p> -<p>In the spirit of sharing knowledge openly, this talk intends to give some real-life examples of challenges your community may face, unexpected situations you might run into and how to solve them &#8211; sometimes in unconventional ways.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Florian Effenberger - - - - 11:40 - 00:20 - Transforming South Tyrol’s Economy: Empowering Tourism and Agriculture through Decentralized Applications (dApps) - - <p>The implementation of decentralized applications (dApps) holds immense potential for transforming two of the key economic sectors of South Tyrol: tourism and agriculture.</p> -<p>In the tourism industry, dApps can revolutionize the way services are offered and transactions are processed. By utilizing smart contracts and blockchain technology, dApps can enable transparent and secure processes for booking accommodations, tours, and activities. This ensures that tourists have direct access to reliable information-, while it eliminates the need for intermediaries, and reduces costs. Moreover, dApps can facilitate decentralized reviews and ratings, empowering visitors to make informed decisions based on authentic feedback from fellow travelers, i.e., fake reviews can be eliminated. This fosters trust and enhances the overall tourist experience.</p> -<p>In the agriculture sector, dApps can address key challenges faced by farmers and consumers alike. For example by implementing blockchain-based supply chain solutions, dApps can ensure traceability and transparency in the production, processing, and distribution of agricultural products. This allows consumers to verify the origin and quality of the products they purchase, promoting trust and supporting local producers. Additionally, dApps can facilitate direct farmer-to-consumer interactions through decentralized marketplaces, eliminating unnecessary middlemen and enabling fair and efficient transactions. This empowers farmers by providing them with a direct and secure channel to sell their products while offering consumers access to fresh and locally sourced goods.</p> -<p>By embracing decentralized applications, South Tyrol can unlock new opportunities for its tourism and agriculture sectors. These applications not only enhance efficiency and reduce costs but also increase customer trust, promote sustainability, and support the local economy. As a result, dApps have the potential to shape a thriving ecosystem that benefits both businesses and consumers in South Tyrol&#8217;s key industries.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Max Oberperfler - - - - 12:00 - 00:20 - Beyond Google & Apple duopoly - - FOSS alternatives for digital mobility - FOSS alternatives for digital mobility - <p>StatsCounter tell us that in May &#8217;23 the market share for the smartphones is split in this way: Android/Google 67.56%, iOS/Apple 31.6%. Which means the remaining is less that 1%. Today we are speaking about that 1%: available alternatives, future outlook and most important why we have to care of about that 1%. Spoiler: because a study of the University of Edinburgh and the Trinity College Dublin published in Q4/2021 proves what all we know &#8211; our smartphones leak our data constantly.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Roberto Foglietta - - - - 12:20 - 00:20 - Combatting E-Waste’s Environmental Harm With Free Software - - <p>Electronic waste, or e-waste, refers to discarded information and communications technology equipment such as laptops, smartphones, and large and small household appliances. In 2015, Achim Steiner of the UN Environment Programme (UNEP) described &#8220;an unprecedented tsunami of electronic waste rolling out over the world&#8221;. In 2016, 44.7 million tonnes of e-waste were generated, equivalent to 4500 Eiffel Towers. In 2019, the World Economic Forum determined e-waste to be the fastest growing waste stream in the world. In 2022, the amount of e-waste hit 59.4 million tonnes, a 33% increase since 2016. Given the economic, and not the technical logic driving the digital economy, devices are rendered obsolete before their time and the pile of e-waste continues to grow.</p> -<p>E-waste is the source of significant environmental harm. Production, transportation, and end-of-life treatment accounts for 80+% of a device&#8217;s carbon footprint over its operating life. Extracting rare earth metals consumes copious amounts of energy; moreover, mining is typically done in the Global South under miserable social conditions. The end-of-life treatment of e-waste means those same devices return to the Global South, resulting in toxic pollution entering the environment and harming workers.</p> -<p>Today, most devices have chips which need software to keep them running. Thus, software plays a crucial role in preventing e-waste: software determines a hardware&#8217;s minimum working requirements, and for how long a device remains safely in use. For most users, environmental harm driven by software has largely remained overlooked … let alone that we can already do something about it with Free Software.</p> -<p>In this talk I will provide a brief overview of the environmental harm from e-waste driven by software, and I will link the inherent values that come with a Free Software license to sustainable software design. By enabling full user autonomy and removing artificial vendor dependencies, Free Software means electronic devices that are otherwise unsupported by manufacturers remain in use. Lightweight and up-to-date software, free from bloat and energy-consuming ads, allows aging, less-powerful hardware to keep running and stay out of the waste bin. Software freedom means hardware freedom, and that means we are able to combat the environmental harm caused by e-waste with Free Software today.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Joseph P. De Veaugh-Geiss - - - - 12:40 - 00:20 - Building an Awesome Product by Creating a Community Around It - - How to effectively engage with your user community - How to effectively engage with your user community - <p>In today’s competitive market, it has become crucial to build a thriving community of developers and users around your product. Gone are the days when code alone could make a product successful; the human element now plays a pivotal role. This community becomes the face and representation of your project to the outside world. Having worked on our Open Source project for over 8 years, I have accumulated a wealth of proven strategies for attracting contributors, training newcomers, and expanding the user base. In my presentation, I will explain how to effectively engage with your user community in order to achieve the following objectives: collect feedback, share use cases, contribute to documentation, identify bugs and collaboratively develop code<br /> -Because improving your product goes beyond just writing code; it involves nurturing a strong community of people.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Alessio Fattorini - - - - 13:00 - 00:20 - Sustainability of Open Source Software and Potentials in Developing Countries - - <p>Although developing countries hold a lot of potential in software development and research, the licensing cost of commercial software, platforms, and online services serve as a hindrance in their widespread adoption. Open source software can be a very useful and viable solution in this regard. On one hand it can fill up the need for less costly software alternatives. On the other hand, it can reduce the adoption of pirated versions of commercial software by individuals and groups to make up for the cost factor. Furthermore, with more adoption of open source software in the developing countries, it will also encourage and engage more programmers from the developing countries to maintain the open source software and to contribute to it, adding to the sustainability of various open source projects and thus benefiting open source software development beyond borders. The speaker, who has the experience of working in both the developing countries as well as here in Alto-Adige/Sud-Tirol region, will share insights on this topic from both of these diverse perspectives.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Abid Munir Bajwa - - - - 13:20 - 00:20 - Sharing the power of appreciation: Celebrating ‘I Love Free Software Day’ - - <p>In the realm of Free Software, expressing gratitude towards Free Software contributors often goes unnoticed. The &#8220;I Love Free Software Day&#8221; (https://ilovefs.org) provides a platform for individuals and organisations to do exactly this, showing appreciation. But it is crucial to recognize that our appreciation for Free Software should extend far beyond this single day. This talk highlights the significance of the &#8220;I Love Free Software Day&#8221; as a platform for expressing support, love, and gratitude towards the developers and contributors who make Free Software possible.</p> -<p>Throughout the presentation, we will showcase memorable moments and successful initiatives from past celebrations, demonstrating the collective efforts to acknowledge and honor the impact of Free Software. We will discuss ideas and strategies for making the upcoming &#8220;I Love Free Software Day&#8221; even more remarkable.</p> -<p>However, it is essential to emphasize that our expressions of love and support for Free Software should not be limited to just one day. While the &#8220;I Love Free Software Day&#8221; serves as a catalyst for celebration, it should inspire us to continue demonstrating our gratitude throughout the year. We will explore ways to incorporate ongoing appreciation into our daily lives, such as contributing to Free Software projects, advocating for their importance, and recognizing the efforts of developers and contributors regularly also in a financial way.</p> -<p>By extending our appreciation beyond a single day, we can cultivate a culture of continuous support for Free Software. We invite everyone interested in Free Software to join us in this endeavor, as we strive to create an environment where gratitude and acknowledgment become integral parts of our interactions within the Free Software community.</p> -<p>Let us embrace the &#8220;I Love Free Software Day&#8221; (https://ilovefs.org) as a starting point, a reminder of the significance of Free Software, and a call to action to express our love and support throughout the year. Together, we can build a community that values and appreciates the tireless efforts of Free Software developers and contributors, making a lasting impact on the future of software freedom.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Bonnie Mehring - - - - 13:40 - 01:40 - MindsHub no-profit - - Makers, programmers, enthusiasts with a focus on education - Makers, programmers, enthusiasts with a focus on education - <p>MindsHub is a no profit association from Ala (near Trento), which provides a space for enthusiasts to develop skills and ideas in informatics, electronics, robotics and 3D printing: https://mindshub.it/.<br /> -Everything started back in 2016, when we organized CoderDojo Vallagarina to introduce young boys and girls to programming. The association has since grown to have multiple running projects, and over 20 active members, aging 12 years old and up. We meet once a week to learn from each other and bring the activities forward.<br /> -We created an autonomous farming robot (featured at Maker Faire Rome among the best 10 projects), we delved into online security with schools, we developed a FOSS app to report and collect garbage, we spoke to Samantha Cristoforetti on the ISS, &#8230;</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Fabio Giovanazzi - Alessio Zeni - - - - 14:00 - 00:20 - RIOS (Rete Italiana Open Source) presents latest updates on the OSPO Alliance and the Good Governance Initiative. - - <p>The Good Governance Initiative (GGI) proposes a methodological framework to assess open-source awareness, compliance and governance in any kind of organizations, helping them to structure and improve the use of FOSS towards an OSPO. This presentation will highlight the main progresses and new features achieved since last year, such as the translation of the GGI Good Governance in five languages, the recent Success Stories presented in the OnRamp meeting series, and many more. Stefano Pampaloni, vice-president of the Italian Open Source Network, will present the latest developments, elaborating on the RIOS Network&#8217;s contribution to the project.</p> - - OW2 track - OW2 track - OW2 track - https://www.sfscon.it/tracks/ow2-track-2023/ - - Valentina Del Prete - Stefano Pampaloni - - - - 14:20 - 00:20 - The CORD-19 Topic Visualizer - - Exploring the evolution of research topics during the COVID-19 pandemic - Exploring the evolution of research topics during the COVID-19 pandemic - <p>The COVID-19 pandemic reshaped research across various fields, producing an unprecedented flood of articles. In response, several open-access corpora were created; among them, the COVID-19 Open Research Dataset (CORD-19) collected over a million articles in 2.5 years.</p> -<p>In this presentation, we introduce the CORD-19 Topic Visualizer (CORToViz), a method and tool for exploring CORD-19&#8217;s scientific abstracts. It uses a stack of modern open source technologies to cluster articles and mine temporal topics. CORToViz has an interactive dashboard for quick topic visualization, time series tracking, and statistical testing.</p> -<p>We will show the results extracted with CORToViz, which allowed us to visualize and tell in a synthetic way what happened to react against COVID-19, comparing it with the key moments of the pandemic. The high adaptability of our approach suits any textual document corpus, and it lends itself easily to exploring new challenging fields of research, such as climate change.</p> -<p>CORToViz represents the first prototype of a series, which we aim to develop within the NGI Search Program, under the TETYS project (Topics Evolution That You See), aiming to build the next-generation Web topics explorer.</p> - - OW2 track - OW2 track - OW2 track - https://www.sfscon.it/tracks/ow2-track-2023/ - - Francesco Invernici - - - - 14:40 - 00:20 - Can AI counteract Health-related Fake News? - - HeReFaNMi (Health-Related Fake News Mitigation): an open-source project to counteract health-related misinformation - HeReFaNMi (Health-Related Fake News Mitigation): an open-source project to counteract health-related misinformation - <p>HeReFaNMi (Health-Related Fake News Mitigation) is an NGI-Search-funded project to give back trustworthiness to the Internet community by tackling fake news spread. Other than the well-known cyber threats, several factors have been undermining the Internet search experience lately. One of the pandemic&#8217;s lessons learned concerns the health-related fake news spread over websites and social media networks. Some nefarious effects came as a non-negligible hesitancy towards national healthcare systems&#8217; guidelines. Since then, several AI-powered solutions have been developed to counteract fake news circulation using supervised and unsupervised learning. The task is challenging due to the need for continuous updating upon introducing new scientific findings. The so-called data drift and catastrophic forgetting also affect the effectiveness of AI-powered classification methods.<br /> -LLMs (Large Language Models) have recently made their way through the AI landscape by delivering unprecedented performances over text analytics, mining, question and answering systems, and text generation. However, LLMs suffer from Hallucination, meaning they can elaborate contents that are unreliable as a source of truth even when fine-tuned on scientifically sound datasets.</p> - - OW2 track - OW2 track - OW2 track - https://www.sfscon.it/tracks/ow2-track-2023/ - - Alessandro Bruno - - - - 15:00 - 03:00 - Coming soon - - OW2 track - OW2 track - OW2 track - https://www.sfscon.it/tracks/ow2-track-2023/ - - - 15:20 - 00:20 - Videobooks - - Augmenting the Reading Experience with Synchronous Reading and Listening - Augmenting the Reading Experience with Synchronous Reading and Listening - <p>Recent open source libraries apply machine learning for forced alignment of speech and text and make it possible to produce text that is synchronized to audio in various languages. This makes it possible to produce a new type of reading experience: the videobook! This contribution talks about a pilot project that aims to produce videobooks based on hundreds of audiobooks and texts that are already in the public domain (such as librivox and the gutenberg project). Possible applications in the educational domain are discussed: such as language learning, accessibility and e-learning applications</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Michael Schlauch - - - - 15:40 - 00:20 - Can we sustain Software Freedom in the mobile world? - - <p>Laptops and servers are running Linux based free software just fine these days. But what about the small and powerful devices in our pockets that we carry everywhere?</p> -<p>Can we achieve the same level of freedom and choice on smart phones? Can we make that usable for everyone?</p> -<p>This talk gives a short overview about the current state of Linux on mobile devices.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Nicole Faerber - Guido Günther - - - - 16:00 - 00:20 - Process Analysis Tools 4 Public Utility - - <p>Background: Process Mining is a growing technology in recent years that consists of integrating specific process mining tools with management software systems to analyze process data and provide feedback on process efficiency, potential bottlenecks, and resource utilization in a production and business context.</p> -<p>Aim: The aim of this presentation is to showcase open source process mining tools, and how these could be integrated with other publicly available software in order to help make meaningful decisions driven by real data. This could be applied to any business context, including non-profit organizations and services to the public and community.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Martina Burlando - - - - 16:20 - 00:20 - TOGETHER IS BETTER - - Can competitors work together with open source ? - Can competitors work together with open source ? - <p>When community and Open source mindset are part of a company culture, it becomes easy to plan and project new products (even with potential competitors). In an open source project, all or part of the produced material is made publicly available for others to use, under certain conditions. The mistery of the &#8220;unpaid programmer&#8221; disappears when corporations see benefits coming from other members in the project and even fear of &#8220;loosing control&#8221; is balanced with continuous feedbacks from developers and users. This is the story of a new project&#8230;</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Nicola Filippini - - - - 16:40 - 00:20 - BIM2FEM: From Building Information Modeling to Finite Element Analysis - - An open-source-based workflow - An open-source-based workflow - <p>The construction industry currently lacks automated open-source-based workflows for thermal and structural analysis of buildings. The Finite Element Method (FEM) represents the state-of-the-art approach for structural and thermal analysis in construction engineering. With the recent increase in computing power, complex models can now be analyzed within a feasible amount of time. However, the integration of FEM into Building Information Modeling (BIM) workflows remains an active area of research. While some commercial software provides interfaces and plug-ins for BIM-integrated finite element analysis, their capabilities are limited and their use is restricted to the corresponding commercial software. Customizable open-source-based approaches exist, but they lack consistent and robust workflows. A consistent data flow of material properties and boundary conditions is essential but remains a challenging task that has not yet been sufficiently addressed. Fraunhofer Italia has developed a workflow based on the open IFC-standard and open-source FEM software packages, which has been tested and validated through the creation of a software prototype. This talk will introduce the developed workflow and demonstrate the prototype’s functionalities through selected use-cases.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Julius Emig - - - - 17:00 - 00:20 - Open Tracing Tools: Overview and Comparison - - <p>Open Tracing Tools are software tools that enable the monitoring, debugging, and optimization of distributed software architectures. They provide a way to trace and understand the flow of requests and data through various components of a distributed system.</p> -<p>In the last months, the authors conducted a study to select and compare 30 tracing tools using a systematic literature review approach. They analysed the open source licence, features, architecture, the collected data, interoperability, but also the popularity, benefits, and issues of each tool, using topic modelling and sentiment analysis. The results offer a systematic comparison of the selected tracing tools.</p> -<p>We&#8217;ll say it in advance: there is one perfect tool that is better than all the others but this talk will present a) a brief overview of what open tracing tools are and the OpenTelemetry standard, b) the process followed in the study and c) the obtained results. For those that want to read the entire report, here it is: https://arxiv.org/abs/2207.06875.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Andrea Janes - Xiaozhou Li - Valentina Lenarduzzi - - - - 17:20 - 00:20 - Providing and Receiving Feedback in Open Source - - <p>For open-source developers, user feedback provides a direct line between both parties, offering valuable insights. That&#8217;s at least how the theory goes In reality, the feedback is often skewed, and the minority of negative loudmouths sometimes overshadows the silent majority of satisfied and grateful users. Needless to say, this doesn&#8217;t do any favors to open-source developers.</p> -<p>Is there a way to improve the situation? Join this session and learn how you, as an open-source developer, can deal with feedback and other challenges unique to the open-source development model.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Dan Čermák - - - - 17:40 - 00:20 - Shaping the future with Data - - How Data can become the most valuable asset for a business/ company - How Data can become the most valuable asset for a business/ company - <p>How to launch, build and scale a business with DATA.<br /> -Support any decision making process<br /> -Become a value for people<br /> -Can help in the change management</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Zemourda Aissaoui - - - - - - 11:20 - 00:20 - Decoding the Corporate Maze - - Empowering Exposure Assessment through Open Software and OSINT - Empowering Exposure Assessment through Open Software and OSINT - <p>Embark on a remarkable expedition as we delve into the realm of Exposure Assessment. Unlocking its wonders, we will navigate this captivating process exclusively utilizing Open Software and OSINT. With a mere glimpse into a company&#8217;s domain, we will traverse the intricate labyrinth of their infrastructure, diligently seeking a potential access point into their corporate system.</p> - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - Francesco Pavanello - - - - 11:40 - 00:20 - Predict security attacks in FOSS - - Why you want it and how to do it - Why you want it and how to do it - <p>FOSS is here to stay, displacing malevolent privative counterparts—great!<br /> -FOSS exposes bugs to be found and fixed by the community—great!<br /> -FOSS shows security issues than can be exploited by attackers—gr..what?<br /> -In the last decades, source code transparency has made the job of black-hat hackers increasingly easy. We now have security websites exposing vulnerabilities and even exploits online—and despite good practices like responsible disclosure, it is the sheer amount of (external) code what makes everyone ultimately vulnerable. In plain words, nobody&#8217;s safe.</p> -<p>From that base, this talk puts forward the need for a concept of *probability of future exploits*. This is crucial for project management, but also at developer level, to see the risks of not upgrading (or yes upgrading!) a dependency. We show how this probability can, and must, be computed from a project&#8217;s dependency tree, in a manner that only the use of FOSS can allow. We also show that the development history of the project and its dependencies is key to getting useful results.</p> -<p>Finally, we merge the dependency tree and development history of a project into a white-box model, which we use to estimate the probability of future exploits. We show how to do it for the Java-Maven environment, for which we can use the FOSS tool &#8216;FIG&#8217;. FIG, written in C++ and released under GPLv3, was designed for statistical estimations and can compute the probability of attacks in complex scenarios like the ones at hand.</p> - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - Carlos Esteban Budde - - - - 12:00 - 00:20 - Software freedom primer on Self Sovereign Identity - - Let's stop feeding the surveillance economy - Let's stop feeding the surveillance economy - <p>The federated identity ecosystem is one of the key mechanisms by which the platform and surveillance economy has grown into today&#8217;s shape, mostly on the shoulders of a vast number of Open Source contributions. Self Sovereign Identity is a privacy, freedom, control first approach to managing identity in a decentralised and secure way. In his talk, Georg Greve will provide a primer into SSI, how it works, and share insights from developing the SSI stack within the Eclipse Cross Federation Services Components, formerly Gaia-X Federation Services.</p> - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - Georg Greve - - - - 12:20 - 00:20 - Opensource to help increase organizations Cybersecurity posture - - Cybersecurity is a compulsory, tough and expensive task for all organizations - Cybersecurity is a compulsory, tough and expensive task for all organizations - <p>Cybersecurity is a compulsory, tough and expensive task for all organizations, private and public, large , medium and small.<br /> -No one can ignore it anymore, and building a viable Cybersecurity strategy is a complex task that needs to balance budget, keeping up with attacker technologies, available skills and a plethora of expensive tools on the market.<br /> -Let&#8217;s discus s on how available Opensource solutions may greatly help ours organizations to be more effective in implementing their Cybersecurity posture, while optimizing available budget.</p> - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - Carlo Falciola - - - - 12:40 - 00:20 - Technical leverage analysis in the Python ecosystem: lessons learned - - <p>[Context:] Technical leverage is the ratio between dependencies (other people&#8217;s code) and own codes of a software package. It has been shown to be useful to characterize the Java ecosystem and there are also studies on the NPM ecosystem available. [Objective:] By using this metric we aim to analyze the Python ecosystem, how it evolves, and how secure it is, as a developer would perceive it when deciding to adopt or update (or not) a library. [Method:] We collect a dataset of the top 600 Python packages (corresponding to 21,205 versions) and used a number of innovative approaches for its analysis including the use of a two-part statistical model to deal with excess zeros, a mathematical closed formulation to estimate vulnerabilities that we confirm with bootstrapping on the actual dataset. [Results:] Small Python package versions have a median technical leverage of 6.9x their own code, while bigger package versions rely on dependencies code a tenth of their own (median leverage of 0.1). In terms of evolution, Python packages tend to have stable technical leverage through their evolution (once highly leveraged, always leveraged). On security, the chance of getting a safe package version when choosing a package is actually better than previous research has shown based on the ratio of safe package versions in the ecosystem. [Conclusions:] Python packages ship a lot of other people&#8217;s code and tend to keep doing so. However, developers will have a good chance to choose a safe package version.</p> - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - Ranindya Paramitha - - - - 13:00 - 00:20 - MBBS: A Multimodal Behavioral Biometric Scheme for Smartphone User Authentication - - <p>In this presentation, we present MBBS, a tetra-model behavioral biometric-based authentication scheme designed specifically for smartphones. MBBS utilizes four distinct modalities to authenticate users: touchscreen swiping patterns, taps on &#8220;text-independent&#8221; 8-digit numbers, name writing on the touchscreen, and micro-movements of the hand during the entry process. To enhance overall accuracy and security, MBBS incorporates a state-of-the-art Generative Adversarial Network (GAN) powered data augmentation architecture. This innovative approach allows us to demonstrate the effectiveness of MBBS using both real user samples and augmented samples, consisting of a combination of &#8220;real&#8221; and &#8220;GAN-generated&#8221; data, on an actual Android device. One of the key advantages of MBBS is its high usability, as it eliminates the need for users to remember any secret information. Instead, it leverages users&#8217; familiarity with natural processes, thereby increasing accuracy in real-time by employing GAN technology, all without requiring a large sample size from users. We will also present preliminary results from our performance, security, and usability analysis, which showcase a positive opinion regarding the effectiveness of our developed authentication mechanism.</p> - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - Attaullah Buriro - - - - 13:20 - 00:20 - Recommending security fixes for weak open-source code with AI - - <p>Technical debt is a metaphor that describes not-quite-right code introduced for short-term needs. The effort to refactor it increases if it remains for a long in the software. When developers are aware of it and admit it in source code comments, the debt is called Self-Admitted Technical Debt (SATD). Thus, SATD indicates weak code that developers are aware of. The question is whether they are aware that this code may be vulnerable to attacks. This presentation will illustrate how artificial intelligence can be employed to recommend security fixes for vulnerabilities to developers.</p> - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - Jorge Melegati - Moritz Mock - Barbara Russo - - - - 13:40 - 04:20 - Coming soon - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - - 14:00 - 00:20 - Free Software and AI in Europe - - How Europe regulates AI and Free Software - How Europe regulates AI and Free Software - <p>In this talk, I will present the latest developments in EU legislation and activities on AI and what role Free Software plays in this.</p> -<p>The European Union&#8217;s AI Act is the first comprehensive set of regulations for the artificial intelligence. Also Free Software plays a role in this regulation. I will shed light on the upcoming rules and evaluate what this means for Free Software, AI but also other upcoming regulations.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Alexander Sander - - - - 14:20 - 00:20 - Why Do We Need A Next Generation Internet? - - Improving the Internet as a platform, one Free Software at a time - Improving the Internet as a platform, one Free Software at a time - <p>The Internet today forms the backbone of the digitisation of our society and economy. As connectivity increases, the boundaries between the real and digital world get increasingly blurred. However, there has been an erosion of trust in the Internet following revelations about the exploitation of personal data, large-scale cybersecurity and data breaches, and growing awareness of the proliferation and impacts of online disinformation.</p> -<p>What can be done to improve the Internet as a platform for future generations? What initiatives are currently in place to build key technological blocks of an Internet that supports human-centric values, such as privacy, security, and inclusion, while reflecting the values and norms all citizens should enjoy in Europe?</p> -<p>This talk will explore why the current state of the internet must be re-imagined and re-engineered in order to support healthy societies, the existing European Commission initiative to work towards doing so, and the role of Free Software in accomplishing these goals.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Gabriel Ku Wei Bin - - - - 14:40 - 00:20 - Interoperable Europe Act: A real game changer? - - <p>Interoperability is a core element of the ongoing digitalisation of Europe. With the Interoperable Europe Act, the EU is aiming to create a dedicated legal framework for interoperability and to enhance cross-border digital public services across the European Union. This talk will give an overview of the state of play of this proposed regulation in the ongoing EU legislative process, some of its flaws, and the important role that Free Software and its community can play in it.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Lina Ceballos - - - - 15:00 - 00:20 - The Brand-New Version of IGis Maps - - The “swiss knife” developed and used in South Tyrol for the integrated management of Geo Referenced data and related information - The “swiss knife” developed and used in South Tyrol for the integrated management of Geo Referenced data and related information - <p>2023 saw the launch, after a long and well-structured revision and development process, all based on a fruitful collaboration between several departments of the Autonomous Province of Bolzano, most of the township in South Tyrol, Informatica Alto Adige (SIAG &#8211; Technical partner) and the Consortium of Municipalities of the Province of Bolzano, of the new version of the integrated geographic data management system IGis Maps. In use for years in South Tyrol, has in the Consortium one of its most enthusiastic contributors and supporters.</p> -<p>The very first version was released about eight years ago and its implementation was based on the idea of creating a multi-purpose GIS management system that could support different types of users, that was highly customizable, and, above all, that could be widely shared among the various management entities, both public and private, present within our territory.</p> -<p>After years of use and ad-hoc developments, we can finally present the new version of the IGis Maps system, which incorporates all the technical and technological improvements we realized the system needed.</p> -<p>It was not just a major update together with new functionalities combined inside the previous software structure, but a true re-engineering that led, among other things, to a new and more efficient user interface, a major advancement regarding the internal security, an optimization and improvement of the entire editing section as well as an optimization of the section regarding the automatic geo-processes.</p> -<p>A mobile version is currently under development to better support any field activities, for which a very powerful option will be included, the possibility of creating special work sessions in off-line mode so as to be able to operate even in areas without a proper cellular line network coverage.</p> -<p>Other very important peculiarities concern that the system is developed using a totally free software code and infrastructure, that a detailed documentation has been produced to ensure sustainability to any further future evolution, even in case of technical partner turnover, and finally, that by taking advantage of the high standards and levels of security access can be guaranteed to any type of user. From professional users, through dedicated access and qualifications or, using the ordinary SPID, to the private citizen.</p> -<p>We will show examples of how different types of users and stakeholders now permanently use the system for the management of a variety of tasks related to their activities, and how it was possible to customize IGis Maps to create visualization and data management contexts that best meet their needs.</p> -<p>We will also present a related project concerning the updating and the correction of the new technical basal cartography, built upon the new Basic Core specification, achieved through the automatic conversion implemented by the SIAG team starting from the previous National Core cartography. With the new IGis Maps it was possible to create an advanced editing and management environment that allow both experienced and less advanced users to interact with this important new informative layer to fill all those gaps and errors that are more than normal to discover following an important automatic translation action such as the one carried out for the Basic Core project.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Edoardo Scepi - - - - 15:20 - 00:20 - Let’s monitor implementation of Free Software Policies! - - How to sharpen the demand for public code across Europe and monitor progress with TEDective - How to sharpen the demand for public code across Europe and monitor progress with TEDective - <p>For six years, the Free Software Foundation Europe has been calling with a broad alliance for publicly funded software to be published as Free Software. This initiative has become a great success: Our demand &#8220;Public Money? Public Code!&#8221; has found its way into government strategy papers, party programs, as well as coalition treaties, and is being discussed in public administrations across Europe.</p> -<p>At the same time, we see less progress than expected and vendor lock ins remain a crucial issue. Digital sovereignty is redefined bypassing Free Software. There is openwashing in publicly funded companies, and government projects in favour of Free Software remain empty words. Public statistics on the procurement of Free Software are largely unavailable.</p> -<p>It is therefore no longer enough to promote the idea of &#8220;Public Money? Public Code!&#8221;. We as the Free Software community should be even more vigilant than before – continuing to praise small steps in the right direction, but pointing out and criticising omissions and lack of implementation. We should become more like watchdogs.</p> -<p>In the talk we will look at some examples of lack of implementation of Free Software policies. We will discuss how we, as civil society, can identify such shortcomings and how to deal with them. We will present our initiative TEDective – a free-software solution that makes European public procurement data explorable for non-experts, aiming to provide you with a powerful tool to keep an eye on real progress towards &#8220;Public Money? Public Code!&#8221; across Europe.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Johannes Näder - Linus Sehn - - - - 15:40 - 00:20 - GovStack project a univeral E-Government - - <p>GovStack aims to break down the barriers to building sustainable digital infrastructure and help governments create human-centered digital services that empower individuals and improve well-being.</p> -<p>In 2015, world leaders agreed to 17 Global Goals for Sustainable Development to achieve a better world by 2030. Many of these goals rely on governments’ ability to deliver services to people. We know that digital technology can facilitate broader access and build more inclusive and resilient societies. Plus, digital government services can foster economic growth and promote trust in government institutions.</p> -<p>GovStack is helping governments simplify the digital transformation process and reduce the cost, time, and resources required to create digital platforms and services.</p> -<p>Our approach is based on the SDG Digital Investment Framework, to help countries make smarter and more strategic decisions in their ICT investments.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Oleksii Danyliuk - - - - 16:00 - 00:20 - Empowering Insights: Unveiling the latest innovations in KNOWAGE for BI and Data Visualization - - <p>KNOWAGE is the open source analytics and business intelligence suite made in Italy. KNOWAGE aims to provide company and organizations with analytical capabilities to exploit data to increase their efficiency and sustainability. Also thanks to the open source community support, the suite is constantly evolving combining the reliability of the most popular business intelligence solutions with the security and the transparency guaranteed by open source.<br /> -This talk will show the last year advancements and new features towards a more mobile, accessible and user-friendly product, focusing on the newly rewritten dashboarding tool.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Davide Vernassa - - - - 16:20 - 00:20 - KNOWAGE and AICS for 2030 agenda SDG goals monitoring - - Visualizing international open data to enhance sustainable development - Visualizing international open data to enhance sustainable development - <p>AICS is the Italian Agency for Development Cooperation that started operating in 2016 with the ambition of aligning Italy with the main European and international partners in the commitment to development. KNOWAGE Labs are developing for AICS a platform that is probably unique in the world and will allow both the Agency and the public to access all the major indicators on the UN Sustainable Development Goals provided by international sources (World Bank, WTO, ILO..) and easily compare them. The solution will allow analysis to start from 3 different touch points: the infographic of SDG goals, the advanced search criteria, and the virtual assistant. Then, a customized dashboard will be provided to the user, allowing to further expand the analysis by interacting with charts, maps, tables, etc. This talk will show the state of art of the solution, highlighting objectives and expected results of the project, but also the new developments of KNOWAGE related to AI.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Marco Cortella - - - - 16:40 - 00:20 - European regulators cast their eyes on maturing OSS communities - - <p>As open source software becomes the foundation to build digital products, to run the backbones of ICT infrastructure and to ensure digital sovereignty and cyber resilience, both the technology as well as the communities that develop it inevitably move into the focus of regulators. The European Union is advancing a number of policy initiatives that regulate liability, cyber security, data handling and AI applications in digital products, among others. This is a challenge for the still quite decentralised and globally operating open source community. How could the open source community participate in legislative processes, and what may be the potential impacts of the upcoming regulation on the open source development process and community dynamics?</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Mirko Boehm - - - - 17:00 - 00:20 - How IoT and AI are revolutionizing Mass Customization - - <p>This lightning talk will explore the transformative potential of integrating Internet of Things (IoT) and Artificial Intelligence (AI) in Mass Customization (MC). There is a significant collective impact of these technologies on businesses, enabling the delivery of personalized products and exceptional customer experiences. Besides giving an overview of MC and the potential ways of integrating IoT and AI, the focus will be on the process of real-time data collection and facilitation of the customization process by IoT on one hand, and on the role of AI in data analysis and generation of personalized recommendations on the other hand. By presenting real-world case studies to demonstrate the practical implementation of IoT and AI in providing customized products and seamless customer experiences, attendees will gain insights into the future of customization and learn actionable strategies to effectively leverage IoT and AI.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Thomas Aichner - - - - 17:20 - 00:20 - Smart Werke Meran - - Smart City 100% Open Source - Smart City 100% Open Source - <p>Since 2020 Stadtwerke Meran have realized 5 Use cases:<br /> -&#8211; Control of the control cabinets of public lighting.<br /> -&#8211; Optimizing the service on Wast Press container.<br /> -&#8211; Bike Boxes<br /> -&#8211; Just Nature Project , temperature measuring over Lorawan<br /> -&#8211; Smart Lighting , communication with single light points over Lorwan.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Stefan Mutschlechner - - - - 17:40 - 00:20 - Monitoring the fleet of Sasa with free software - - Is it possibile to monitor a fleet of 400 buses using free software ? - Is it possibile to monitor a fleet of 400 buses using free software ? - <p>The public transport in South Tyrol is going through a huge transformation: new investments, many new green vehicles and a brand new software. Transition will take time and how do we develop a fleet monitoring system to use during the transition without spending a fortune ? maybe with free software!</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Marco Pavanelli - - - - - - 13:00 - 00:30 - NOI Hackathon SFSCON Edition - - Side Event - Hackathon - Side Event - Hackathon - Side Event,Hackathon - - - - - - - 08:30 - 00:30 - Starting of the second day - - SFSCON - SFSCON - SFSCON - - - 13:00 - 00:30 - Closing of the SFSCON 2023 - - SFSCON - SFSCON - SFSCON - - - - - 08:30 - 00:50 - Welcome Coffee - - SFSCON - SFSCON - SFSCON - - - - - 09:20 - 00:20 - How can Blockchain technologies incorporate AI solutions for a safer and efficient Open Data ecosystem. - - <p>The transition from Web 2.0 to Web 3.0 has fueled the need for a secure and decentralized cloud storage solution for digital assets. Web 2.0 was characterized by centralized platforms where user data was under the control of companies. In contrast, Web 3.0 aims to empower individuals and foster a decentralized web that supports and benefits the Free Software and Open Data Communities.</p> -<p>Blockchain technologies facilitate seamless collaboration and interoperability among diverse stakeholders in the Free Software and Open Data communities. Developers can establish open and transparent ecosystems where data can be shared, verified, and integrated across multiple platforms.</p> -<p>Beez, with its own blockchain infrastructure, offers a secure and transparent platform for digital asset exchanges, bolstering transaction integrity and trust. By distributing data across a network of nodes, Beez ensures security and mitigates the risk of single points of failure. Users retain control over their data, safeguard their privacy, and can take advantage of the incentive mechanisms offered by blockchain networks.<br /> -During our presentation, we will explore the role of AI within Beez&#8217;s ecosystem, facilitating accelerated data processing, correlation, and intelligent automation. AI unlocks valuable insights from blockchain data, and we will touch upon the use of Inductive Logic Programming (ILP) to enhance programming performance.</p> -<p>The integration of Blockchain and AI technologies holds great potential for advancing the safety and efficiency of the Open Data ecosystem. By combining decentralized data storage, trust-building mechanisms, and intelligent data processing, Beez is paving the way for a more secure, transparent, and user-centric digital landscape.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Marianna d'Atri - Enrico Zanardo - - - - 09:40 - 00:20 - Real-time aeroplane tracking and the Open Data Hub - - Using the Open Data Hub as real-time data backbone - Using the Open Data Hub as real-time data backbone - <p>Tracking aeroplanes in real time with Open Source Software is possible. Aircrafts must continuously send their current flight parameters to air traffic controllers on the ground and to other aircrafts. This generates a lot of data, especially when planes are being tracked by multiple sensors.<br /> -The Open Data Hub on the other hand offers a great backbone for data storing and processing, where the correct datasets have to be identified and filtered. After all transformation on the data is done, it will be exposed via API to be further used by a web application.<br /> -Bringing together sensor generated data, the Open Data Hub and custom web applications, is a showcase on how the Open Data Hub can be used as a service: OaaS.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Martin Rabanser - - - - 10:00 - 00:20 - Embracing CI/CD workflows for building ETL pipelines - - how we will gather and monitor multi-source spatially-interpolated meteorological parameters in near-real time - how we will gather and monitor multi-source spatially-interpolated meteorological parameters in near-real time - <p>Up-to date measurements of surface meteorological variables are essential to monitor weather conditions, their spatio-temporal variability and the potential effects on a wide range of sectors and applications. Moreover, when included in continuous records of long historical observations spanning several decades, they become essential for assessing long-term climate variability and change locally and on a regional level.</p> -<p>Automated pipelines capable of retrieving and processing near-real time meteorological data satisfy the primary prerequisites towards the development and advancement of effective and operational climate services.</p> -<p>With a public and operational near real-time monitoring web platform in mind, we present automated pipelines to collect and process up-to-date daily temperature and precipitation records for Trentino South Tyrol (Italy) and surrounding areas, and to derive their spatially interpolated fields at sub-km scale. Our pipelines are composed by multiple steps including data download, sanity checks, reconstruction of missing daily records, integration into the historical archive, spatial interpolation and publication onto online FAIR catalogues as (openEO) “datacubes”. The different APIs, data formats and structure across the various data sources, and the need to merge the data onto harmonized meteorological layers, make this a typical case of the so-called Extract, Transform and Load (ETL) pipelines, and, in order to follow the principles of data reproducibility and Open Science, we embraced open-source automated workflow management through GitLab’s Continuous Integration / Continuous Development (CI/CD) capabilities.</p> -<p>CI/CD workflows greatly help the management of the relatively complex graphs of tasks required for our climate application, ensuring seamless orchestration with thorough flow monitoring, application logs, transactions rollbacks, and exception handling in general. Native pipeline-oriented software development also fosters a clean separation of roles among the tasks, and a more modular architecture. This effectively reduces barriers to collaborative development and paves the way for robust operational climate services for researchers and decision makers in the face of the changing climate.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Elena Maines - - - - 10:20 - 00:20 - Free Software and Open Science - - <p>The Open Science movement aims to increase the transparency, reproducibility and inclusiveness of academic research. One of its central goals is therefore to make research outputs broadly available, e.g., manuscripts (Open Access) or research data (Open Data). While software/code created in the course of scientific research is a key artifact of scientific research that is clear distinct from the latter two, it has until recently not received the same attention as manuscripts or data, although it follows its own set of paradigms.</p> -<p>In this talk I will present an overview on how the core concepts of Free Software and the FAIR (findable, accessible, interoperable, reuseable) Principles intersect, what this means for managing code as research output and recent initiatives on the European level that will provide support for these issues.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Christian Busse - - - - 10:40 - 00:20 - MLOps with Kubernetes: unleash the power of the ecosystem! - - <p>Kubernetes is a popular open-source software, today&#8217;s de-facto open standard, to run production workloads. Innovation in the ecosystem thrives with multiple projects that enrich the platform&#8217;s core. Machine Learning Operations (MLOps) is part of the same effort to bring automation into Kubernetes for ML pipelines.</p> -<p>This session aims to explore the Kubernetes-native tools available such as Tekton, Argo CD, Kubeflow, and OpenDataHub, to apply DevOps and GitOps principles in AI/ML contexts.</p> -<p>By the end of the session, attendees will have a clear understanding on how to automate and simplify the iterative process of integrating ML models into software development processes, production rollout, monitoring, retraining, and redeployment for continued prediction accuracy with open source tools.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Natale Vinto - - - - 11:00 - 00:20 - Achieving FAIRness with EDP-portal - - DOI and citation improvements in metadata of EDP-portal - DOI and citation improvements in metadata of EDP-portal - <p>EDP-portal is the access point to the Environmental Data Platform of Eurac Research since 2021 to achieve FAIRness of our datasets. It allows to publish data and metadata and provides APIs and web services for data access. In the last 2 years the EDP improved the findability and accessibility of the data collected throughout the curation of metadata that was improved with the DOI registration for datasets. The result is a higher metadata quality where the final user can easily find how to properly cite datasets with a persistent identifier. The portal itself and main data repositories are registered in FAIR-sharing portal with their own DOI. The SW components of the EDP are totally based on open source projects.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Andrea Vianello - - - - 11:20 - 00:20 - SMODEX – a Python package for understanding the evolution of soil moisture anomalies - - <p>The complexity of agricultural droughts requires a consistent, reliable, and systematic method for monitoring and reporting. Amongst the various indices used to monitor this phenomenon, the soil moisture anomaly has been proven to be a more reliable predictor. However, the datasets required for computing this index are often large and computationally demanding. To address this challenge, we have developed SMODEX, a Python package that enables scalable, fast, and open-source standard-compliant computation and visualization of soil moisture anomalies.</p> -<p>SMODEX simplifies the computation and visualization of time-series for soil moisture and soil moisture anomalies from high-dimensional climate datasets. It allows for quick and easy parallelization of the computation on a daily, weekly, and monthly timescale. Additionally, SMODEX implements a straightforward workflow for automating the use of FAIR (Findable, Accessible, Interoperable, and Reusable) principles in producing and sharing outputs by leveraging the open source STAC API. The package is extendible and provides information on how to contribute to the project, test suites, test coverage, and a use case for the South Tyrol region, all provided in the package repository. In the future, additional agricultural drought indices and indicators would be included to serve to even larger community of researchers, policy makers, and individual users.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Rufai Omowunmi Balogun - - - - 11:40 - 00:20 - Why open digital infrastructure matters - - hardware & software infrastructure for Europe - hardware & software infrastructure for Europe - <p>Software freedom can be defined in many ways but in legal terms it is squarely defined by a set of approved FSF and OSI software licenses. Yet everyone realizes that beyond these licenses the goal of software freedom and digital sovereignty cannot be achieved without the ability to master and create hardware components and systems &#8211; and beyond that, to rely on open digital infrastructure (servers, datacenters, and resources) . This talk will present the challenges around these topics and what we, collectively in Europe already do and can do to ensure our independence and our freedoms.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Charles-H. Schulz - - - - 12:00 - 00:20 - Intelligent Decision Support System for traceability system of MOAH & MOSH olive oil contaminants - - What we are doing, what we will do! - What we are doing, what we will do! - <p>MOSH and MOAH are the abbreviation of two groups of chemical compounds found in mineral oils. “MOSH” stands for Mineral Oil Saturated Hydrocarbons. MOAH stands for Mineral Oil Aromatic Hydrocarbons. Both of them are under European deeply evaluation because there are two food contaminants. According to the current state of scientific knowledge, there is no sufficient toxicological evidence to prove a health risk to humans from saturated mineral oil fractions (MOSH). Meanwhile, MOAH are suspected to be carcinogenic (especially PAH-like compounds with 3-7 ring systems), therefore their levels in food should be reduced according to the ALARA-principle (as low as reasonably achievable). Gruppo FOS with CNR ( MOSH and MOAH are the abbreviation of two groups of chemical compounds found in mineral oils. “MOSH” stands for Mineral Oil Saturated Hydrocarbons. MOAH stands for Mineral Oil Aromatic Hydrocarbons. Both of them are under European deeply evaluation because there are two food contaminants. According to the current state of scientific knowledge, there is no sufficient toxicological evidence to prove a health risk to humans from saturated mineral oil fractions (MOSH). Meanwhile, MOAH are suspected to be carcinogenic (especially PAH-like compounds with 3-7 ring systems), therefore their levels in food should be reduced according to the ALARA-principle (as low as reasonably achievable). Gruppo FOS with CNR (Consiglio Nazionale delle Ricerche), Santagata 1907 and Enginius are searching the system for finding and trace their presence in the virgin and extra virgin olive oils by using open fingerprints methods, open hardware and open source blockchain and AI technologies.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Giovanni Giannotta - - - - 12:20 - 00:20 - The Future of Connectivity, Open Internet and Human Rights - - Making telecommunications more democratic with Free Software - Making telecommunications more democratic with Free Software - <p>We are becoming more and more dependent on the Internet for our work, education, communication, personal relations and entertainment. Our digital devices conquered an unprecedented level of importance in our life.</p> -<p>However, we are facing a loss of control over our smartphones, tablets and other devices for internet connection. It&#8217;s time to resolve monopolies and re-establish democratic control over the technology we most depend upon.</p> -<p>This talk will present the challenges end-users are facing to get more control over their devices and how Free Software is key for a consumer re-empowerement.</p> -<p>The talk will present real-life examples of policy demands against gatekeepers on digital markets, such as the struggle for Router Freedom in the last years and how Device Neutrality can serve as an important instrument for pushing forward end-user-oriented digital policies.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Lucas Lasota - - - - 12:40 - 00:20 - From the design to reality is here the Community Open Hardware PowerPC Notebook - - In 2014 hobbists dream it, now thanks to donors, volunteers and collaborations becomes reality - In 2014 hobbists dream it, now thanks to donors, volunteers and collaborations becomes reality - <p>The Open Hardware PowerPC Notebook designed around GNU/Linux will be showed at NOI Techpark. We had presented here its motherboard design in 2018. We will updates regarding last developments for u-boot AMD video drivers, re-design of heat pipes, and CE test certification process. We will give future availability milestones of this notebook and details regarding the GNU/Linux distributions or other OS that could runs on it.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Roberto Innocenti - - - - - - 09:20 - 01:00 - ZOOOM Toolkit Interactive Workshop - - <p>This workshop will focus on examining the ZOOOM toolkit, which provides valuable tools and material regarding open licence innovation around the topic of Open Data, Software and Hardware. Particularly, we will present the overall interface and user experience with the hope of collecting valuable feedback from participants and identifying potential improvements in both the structure and the functions of specific supporting tools. The involvement of the participants will be instrumental in gathering cutting-edge and up-to-date knowledge regarding current tools and resources that can contribute to the creation of an all-inclusive knowledge repository on open licence innovation.</p> -<p><b>REGISTRATION NEEDED AT: </b><a href="https://pretix.eu/noi-digital/sfscon23/3980546/">https://pretix.eu/noi-digital/sfscon23/3980546/</a></p> - - ZOOOM project track - ZOOOM project track - ZOOOM project track - https://www.sfscon.it/tracks/zooom-project-track-2023/ - - Amalia de Götzen - Andy Peruccon - Ronald Chenu Abente Acosta - - - - 10:20 - 00:30 - Closing ZOOOM Toolkit Interactive Workshop - - ZOOOM project track - ZOOOM project track - ZOOOM project track - https://www.sfscon.it/tracks/zooom-project-track-2023/ - - - - - 09:20 - 03:40 - The future of Free Software in Italy - - Side Event - FSFE - Italian community meeting - Side Event - FSFE - Italian community meeting - Side Event,FSFE,Italian community meeting - https://www.sfscon.it/tracks/fsfe-italian-community-meeting/ - - Marta Andreoli - - - - - - 17:00 - 00:30 - Winner proclamation and closing of the NOI Hackathon SFSCON Edition - - Side Event - Hackathon - Side Event - Hackathon - Side Event,Hackathon - - - - diff --git a/src/tests/assets/sfscon2023_event1day1_0835.xml b/src/tests/assets/sfscon2023_event1day1_0835.xml deleted file mode 100644 index 2f6dd17..0000000 --- a/src/tests/assets/sfscon2023_event1day1_0835.xml +++ /dev/null @@ -1,2023 +0,0 @@ - - - - sfscon-2023 - SFSCON 2023 - - - Main track - Artificial Intelligence track - Community track - Cybersecurity track - Developers track - Legal track - OW2 track - Public Money Public Code & Open Data track - Data4SmartHealth - ZOOOM project track - Open Data & Open Hardware track - Side Event - Hackathon - Side Event - School Reading - Closing - with a Tale of Software, Skateboards, and Raspberry Ice Cream - Side Event - FSFE - Italian community meeting - - - - - 18:40 - 00:30 - Closing of the first day - - SFSCON - SFSCON - SFSCON - - - - - 09:00 - 00:30 - Opening SFSCON 2023 - - <p>Opening SFSCON 2023</p> - - Main track - Main track - Main track,Main track - - Vincent Mauroit - - - - 09:30 - 00:30 - Coming soon - - Main track - Main track - Main track,Main track - - - 10:00 - 00:30 - Coming soon - - Main track - Main track - Main track,Main track - - - 10:30 - 00:30 - What the AI revolution means for Open Source, Open Tech and Open Societies - - <p>In the last year we saw the rise of AI systems like ChatGPT, Stable Diffusion, Dall-E and others. Large Language Models like GPT are enabling a lot of new innovative features and products which will revolutionise the world.<br /> -But this large autoregressive language models come with a lot of challenges that can have negative effects on the Open Source and Open Tech community. For example it’s unclear if in the future everyone will have access to the same ML models and training data. Can students, startups and open source people build innovative new products using AI in the same way the open source communities build Open Code and Open Tech. How can we make sure that the AI system are not discriminating underrepresented minorities? What is the energy consumption and CO2 emissions of this new big AI systems?<br /> -This talk will discuss the current fascinating trends in AI, the challenges and some possible solution. It will also cover the current Open Source AI features in Nextcloud and our Ethical AI framework.</p> - - Main track - Main track - Main track,Main track - - Frank Karlitschek - - - - 11:00 - 00:20 - European SFS Award 2023 - - <p>The award is given to a person who contributed to the introduction of the culture of Free Software.</p> - - SFSCON - SFSCON - SFSCON - - - 11:20 - 00:20 - The First Year of Eclipse Software Defined Vehicle: a successful “code first” approach - - <p>The most notable impact of using SW in the automotive domain is the decrease in fatalities as ADAS functions are more widely employed. On the other hand, SW complexity has seen an almost exponential growth reaching about 100 million lines of code.<br /> -Hardly any organization can tackle this challenge alone.</p> -<p>The Eclipse Software Defined Vehicle (SDV) Working Group ’s mission is to foster collaboration across industries to create an open technology platform for the software defined vehicle of the future. The working group community driven by its 40 member organization has chosen a “code first” approach to facilitate more agile and faster time-to-market software development.<br /> -After its formation about a year ago, the SDV WG has onboarded about 20 open source projects and is working on integrating several projects together to create “blueprints”. The frameworks emerging from these initial blueprints show the potential and benefits of utilizing different projects as components to build broader solutions to address more complex problems</p> -<p>This contribution introduces the SDV WG and Community, as well as its projects and capabilities.</p> - - Main track - Main track - Main track,Main track - - Sara Gallian - - - - 11:40 - 00:20 - Pyccel: write Python code, get Fortran speed - - <p>Imagine writing a pure Python library which can achieve the performance of Fortran or C/C++.<br /> -To this end we have developed Pyccel, which translates Python code to either Fortran or C, and makes the generated code callable from Python. The generated Fortran or C code is not only fast, but also human-readable; hence it can easily be profiled and optimized for the target machine.<br /> -Pyccel has a focus on high-performance computing applications, where the efficient usage of the available hardware resources is fundamental.<br /> -To this end it provides type annotations, function decorators, and OpenMP pragmas.<br /> -Pyccel is easy to use, is almost completely written in Python, and compares favourably against other Python accelerators.</p> - - Main track - Main track - Main track,Main track - - Emily Bourne - Yaman Güçlü - - - - 12:00 - 00:20 - Flaky tests – how to deal with them - - <p>Every QA/QE professional has encountered a flaky test at least once in their career. It may be a small, harmless bug that can be fixed in an instant, or it may take months to identify and fix it. This can be very costly and take a toll on your reputation and budget.</p> -<p>Don&#8217;t you want to know why flaky tests exist, how to identify them at an earlier stage, or even avoid them?</p> -<p>Join the investigation and we will figure it out together with you to find out the origins and roots of common flaky tests; to explore real cases and their solutions; to learn good practices.</p> - - Main track - Main track - Main track,Main track - - Juri Solovjov - - - - 12:20 - 00:20 - Psydac: a Python IGA library for large-scale simulations - - Ease of use and high performance in the open-source Python ecosystem - Ease of use and high performance in the open-source Python ecosystem - <p>Psydac is an open source library for isogeometric analysis (IGA), that is, a finite element method which uses the same basis functions of a CAD model (B-splines and NURBS).<br /> -It has been developed at the Max Planck Institute for Plasma Physics, with the goal of exploring advanced numerical methods for electromagnetism, magneto-hydro-dynamics, and plasma kinetics. It is completely written in Python, uses only open-source libraries, and can run large parallel simulations on high-performance computing facilities. It employs a domain specific language, automatic code generation, a transpiler, MPI communication, OpenMP multithreading, and parallel I/O. In this talk we explore the library architecture and its overall design philosophy, which can be applied to other domains.</p> - - Main track - Main track - Main track,Main track - - Yaman Güçlü - - - - 12:40 - 00:20 - The incredible machine: when automation backfires - - The hidden costs of automation - The hidden costs of automation - <p>Ever wanted to apply CI/CD principles and run tests for every change?<br /> -But it is too complex to set up the test environment, and launch the tests with all the updated parameters, solution? Automation!<br /> -Release your software implies a countless number of complicated steps, what solution? Automation!<br /> -So automation sometimes seems to be the solution, you automate some complex procedure and call the day.</p> -<p>But automation of a process sometimes can only hide the real problem and only delay the moment when you have to address the technical debt, and sometimes the automation can even also act as an amplifier of the technical debt.</p> -<p>Based on the experience matured on the field, this talk will be shown the hidden traps of automation, the drawbacks, and the lessons learned.</p> - - Main track - Main track - Main track,Main track - - Matteo Valentini - - - - 13:00 - 00:20 - Write High Performance Clients for RabbitMQ - - <p>In this talk, I will share our experience with writing clients for the RabbitMQ stream queues.<br /> -The RabbitMQ stream queues have been designed with performance as a major goal. So the clients have to be performant.<br /> -We will see how we increased the throughput and/or reduced the latency.<br /> -.NET and Go clients will be taken as examples. We will go through some real production code.</p> - - Main track - Main track - Main track,Main track - - Gabriele Santomaggio - - - - 13:20 - 00:20 - Ithaca: the Clean and Hexagonal Architectural Island - - An introduction to Clean and Hexagonal Architecture principles - An introduction to Clean and Hexagonal Architecture principles - <p>Get ready to sail from the Scylla and Charybdis&#8217;s shores of 3-layered architecture to the safe Ithaca refreshing shores of Clean and Hexagonal Architecture! Brace yourself as we surf from zero to Ulysses (a hero!), leaving behind monstrous code and embracing cleanliness and modularity. No more Odysseys; protect your source code navigation through Clean and Hexagonal Architecture principles!</p> - - Main track - Main track - Main track,Main track - - Luca Guadagnini - - - - 13:40 - 04:20 - Accessibility improvements for Uyuni - - <p>Uyuni is a powerful open source configuration and infrastructure management tool used by many organisations worldwide.<br /> -However, its current state presents accessibility challenges for people with disabilities. Its user interface relies heavily on visual elements, making it difficult for visually impaired users to navigate and access its features.</p> -<p>The presentation will dive into the ongoing work to increase Uyuni&#8217;s accessibility following the Web Content Accessibility Guidelines (WCAG).</p> -<p>Apart from focusing on the specific work for Uyuni, during the presentation, the participants will be also introduced to best practices for designing accessible WebUI and easy tools to be use during the software development.</p> - - Main track - Main track - Main track,Main track - - Marina Latini - - - - 14:00 - 00:20 - squash the flakes! - - how to minimize the impact of flaky tests - how to minimize the impact of flaky tests - <p>Flakes aka tests that don’t behave deterministically, i.e. they fail sometimes and pass sometimes, are an ever recurring problem in software development. This is especially the sad reality when running e2e tests where a lot of components are involved. There are various reasons why a test can be flaky, however the impact can be as fatal as CI being loaded beyond capacity causing overly long feedback cycles or even users losing trust in CI itself.</p> -<p>We want to remove flakes as fast as possible to minimize the number of retests required. This leads to shorter time to merge, reduces CI user frustration, improves trust in CI, while at the same time it decreases the overall load for the CI system.</p> -<p>We start by generating a report of tests that have failed at least once inside a merged PR, meaning that in the end all tests have succeeded, thus flaky tests have been run inside CI. We then look at the report to separate flakes from real issues and forward the flakes to dev teams.</p> -<p>As a result retest numbers have gone down significantly over the last year.</p> -<p>After attending the session the user will have an idea of what our flake process is, how we exercise it and what the actual outcomes are.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Daniel Hiller - - - - 14:20 - 00:20 - A comparison of Open Source FaaS technologies - - <p>As the demand for serverless computing continues to grow, the availability and choice of open source Function as a Service (FaaS) technologies are expanding rapidly. In this talk, we will present our experience in using some of the most popular open source FaaS platforms, compare them and discussing their features and characteristics.</p> -<p>The session will begin with an introduction to serverless computing and the key concepts behind FaaS. Throughout the talk, we will analyze various aspects such as ease of deployment, architecture, specific features, etc. We will examine real-world use cases and share insights on the strengths and limitations of each platform, allowing attendees to make informed decisions when choosing the right FaaS technology for their projects.</p> -<p>By the end of this session, attendees will have a better understanding of the open source FaaS landscape from our experience in production usage.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Andrea Avancini - Michele Santuari - Alberto Sillitti - - - - 14:40 - 00:20 - Coming soon - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - - 15:00 - 00:20 - F-Droid – The place for your FOSS Apps - - Why you should submit your FOSS Android App to F-Droid - Why you should submit your FOSS Android App to F-Droid - <p>On F-Droid you can find thousands of FOSS apps and games for Android. F-Droid brings you visibility in the FOSS community that will provide great feedback, open issues and eventually contribute to your FOSS project.<br /> -This presentation is about my personal experience with my games Ball2Box, Pocket Broomball and Sn4ke published on F-Droid. I will show you what F-Droid is, how it works and the steps needed to submit your project.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Simon Dalvai - - - - 15:20 - 00:20 - Coming soon - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - - 15:40 - 00:20 - Don’t let microservices kill you! - - A few ideas on architecting for the journey, not for the destination - A few ideas on architecting for the journey, not for the destination - <p>Microservices is a trend, and for a reason: it’s an architecture style that enables many desirable qualities on the systems that adopt it. By being distributed, it allows using the right technology stack for each capability, at the same time it eases the evolution of each fine-grained part of the system. But it comes with a price and offers significant risks, in particular related to larger portions of the architecture, and also the management of the entire infrastructure. Those costs and risks are the biggest challenges for a new system, when it adopts microservices from the start. But, on the other hand, starting with a monolith might require a big effort to migrate towards microservices in the future. Is that a check-mate?</p> -<p>Definitely not! Don’t let microservices kill you! In this talk, we’re going to see some ideas about architecting the system focusing on the journey. After all, we spend most of the time maintaining and evolving the system, than actually leaving it running “stably”. Also, by seeing how to start something new, we’re actually going to discuss the best architecture practices for any given time of the project.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - João Francisco Lino Daniel - - - - 16:00 - 00:20 - Automating git for development on large distributed teams - - A tour on aggressive use of git branching with automation for distributed cooperation - A tour on aggressive use of git branching with automation for distributed cooperation - <p>Contributing to large open source projects is not always a fast or smooth sailing process, and is often stalled simply due to the necessary human factor.</p> -<p>Contributions are rarely accepted quickly or as-is, and it&#8217;s not uncommon to rework each submission extensively by splitting the proposed change into separated fixes and features, into smaller incremental changes where each is tested independently or sometimes perform complete rewrites.</p> -<p>When the vetting of each submission can require weeks, contributors often feel blocked by the need to wait for their own or peer&#8217;s changes.</p> -<p>To cope in these scenarios, we present a few git branching and automation strategies that allow efficient wait-free development of interconnected changes, even across community members, in a truly distributed fashion.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Yuri D’Elia - - - - 16:20 - 00:20 - Kubernetes for IoT - - How kubernetes can help you quickly and automatically test and deploy new services - How kubernetes can help you quickly and automatically test and deploy new services - <p>While Kubernetes is primarily associated with managing cloud-native applications and microservices, it can also play a role in IoT deployments. Here are a few reasons why Kubernetes is relevant in the context of IoT:</p> -<p>1 Scalability: IoT systems often involve a large number of devices generating massive amounts of data. Kubernetes provides automatic scaling capabilities, allowing IoT applications to scale horizontally by adding or removing instances based on demand. This helps manage the increasing workload efficiently.</p> -<p>2 Resilience and High Availability: IoT applications require high availability to ensure uninterrupted operations. Kubernetes offers features like load balancing, fault tolerance, and self-healing capabilities. It can automatically restart failed containers or replace them with healthy instances, ensuring that IoT services remain available and resilient.</p> -<p>3 Resource Optimization: IoT deployments typically involve a mix of hardware devices with varying capabilities. Kubernetes can optimize resource utilization by efficiently distributing workloads across devices. It allows you to define resource constraints and priorities, ensuring that devices with higher capabilities handle more demanding tasks.</p> -<p>4 Service Discovery and Load Balancing: In an IoT ecosystem, devices and services need to discover and communicate with each other. Kubernetes provides built-in service discovery mechanisms, such as DNS-based service discovery and load balancing, allowing devices to locate and interact with services dynamically.</p> -<p>5 Security and Updates: Security is a crucial aspect of IoT systems, and Kubernetes helps in managing security at scale. It provides features like role-based access control (RBAC), network policies, and secret management to enforce security measures across IoT deployments. Additionally, Kubernetes facilitates rolling updates, allowing for seamless updates and patches without downtime.</p> -<p>6 Flexibility and Portability: Kubernetes abstracts the underlying infrastructure, enabling IoT applications to be deployed consistently across different environments, whether it&#8217;s on-premises, in the cloud, or at the edge. This flexibility allows organizations to migrate or distribute their IoT workloads as needed, making it easier to adopt hybrid or multi-cloud strategies</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Andrea Alfonsi - - - - 16:40 - 00:20 - Pitfalls and Mistakes When Dealing With Non-Functional Requirements - - <p>Non-functional requirements are essential to define the software architecture, and if they are not identified and handled correctly, the impact can be huge. This talk will present some common mistakes when handling non-functional requirements. It starts talking about the ones defined at the beginning of the project with a false certainty, which can become an even worst problem if they are never revised. Then, we will pass through the client that always wants the complete package and talk about the ones that are only remembered when some user complains. Of course, the talk does not forget about those that try to treat those very different non-functional requirements in exactly the same way. In the end, it will be presented some practices that can be used to avoid these problems.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Eduardo Guerra - - - - 17:00 - 00:20 - CrudIt: an opensource framework that makes developers autonomous - - Discover the low-code framework that accelerate app development - Discover the low-code framework that accelerate app development - <p>Nowadays application implementation requires a lot of different competencies that make it impossible for a single person to build an entire application. This led to the need for a big multi-competencies team and increasing in communication issues during the project. But what if we could implement an application without the need of implementing a backend? CrudIt does exactly that. CrudiIt is an open-source framework that enables a small team or a single front-end developer to create small SaaS applications without any knowledge of backend, cloud and sysadmin needs.<br /> -During the event, we will see how to implement a simple SaaS service using Crudit and how to use the framework to accelerate application development.<br /> -Moreover, we will discuss how to host a CrudIt application without any sysadmin competencies in the cloud, using free services.<br /> -This talk will unveil how, thanks to this powerful low-code framework, it is possible to save data without writing a line of code, even if you are working in complex, multitenant scenarios.<br /> -The talk will explain also how the framework is born, how it works internally and promote the opensource philosophy that brings to this library.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Daniele Fontani - Daniele Ciulli - - - - 17:20 - 00:20 - The Entando Marketplace - - Fueling the Capability Economy through FOSS Contributions and Empowering Community-driven Innovation - Fueling the Capability Economy through FOSS Contributions and Empowering Community-driven Innovation - <p>The Entando Platform, an open source Application Composition Platform (ACP), is transforming cloud-native application development. With a component-based approach, organizations harness the power of Entando to effortlessly create and consume reusable components, fostering collaboration and driving productivity.</p> -<p>At the heart of this transformation lies the Entando Marketplace. Entando Marketplace and the Entando Platform provides FOOS communities with a platform to collaborate, showcase their projects, access resources, and streamline development processes.</p> -<p>We delve into the principles and benefits of composable practices, which enable developers to build modular, scalable, and adaptable applications.</p> -<p>Furthermore, we highlight the essential role of the Entando Marketplace as a catalyst for the capability economy. FOSS contributors are empowered to share their expertise and contribute to the growing collection of reusable components, unlocking new possibilities for innovation and collaboration.</p> -<p>Join us to discover how the Entando Community fosters collaboration and embraces composable practices, paving the way for a vibrant FOSS ecosystem. Together, we can cultivate a community-driven capability economy that thrives on shared knowledge and collective innovation.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Emanuele Cerroni - - - - 17:40 - 00:20 - Improving developer experience in Open Source Projects - - How to ease contribution and management of your next big idea - How to ease contribution and management of your next big idea - <p>What makes an open-source project successful? How hard is it to add external people to an open project?<br /> -We at Nethesis have open source in our core with more than 400 public repositories that hold all of our company code. With the upcoming release of NethServer, we’re facing the excruciating question: how do we make it more appealing for developers?<br /> -Follow me in the changes we want to make to our processes to ease development and contributions, using big projects as examples and how even you can make a difference in the smallest of all codebases.</p> - - Developers track - Developers track - Developers track - https://www.sfscon.it/tracks/developers-track-2023/ - - Tommaso Bailetti - - - - 18:00 - 00:30 - CLOSING with a Tale of Software, Skateboards, and Raspberry Ice Cream - - SFSCON - SFSCON - SFSCON - - Matthias Kirschner - - - - - - 10:30 - 01:30 - Ada & Zangemann - - Side Event - School Reading - Side Event - School Reading - Side Event,School Reading - - - 12:00 - 00:30 - Closing of Ada & Zangemann reading - - Side Event - School Reading - Side Event - School Reading - Side Event,School Reading - - - 14:00 - 00:20 - Welcome Data4SmartHealth 2023 - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Floriano Zini - Chiara Ghidini - Andrea Gasparella - - - - 14:20 - 01:00 - AI Algorithms for Digital Therapeutics - - <p>Digital therapeutics tackle diverse medical conditions, and AI algorithms, encompassing machine learning, natural language processing, and computer vision, are central to their success. They enable personalized, data-driven treatments, improving patient outcomes while potentially reducing healthcare costs. This talk explores AI&#8217;s pivotal role in digital therapeutics, where software interventions are reshaping healthcare.</p> - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Gianluigi Greco - - - - 15:20 - 00:20 - Software testing for remote proof of concept studies of digital therapies - - From the definition of a proof of concept study to the development and testing of the required technical infrastructure - From the definition of a proof of concept study to the development and testing of the required technical infrastructure - <p>Digital therapies are evidence-based therapeutic interventions that use software to prevent, manage, or treat a medical disorder or disease.<br /> -Not only they require carefully planned clinical studies, but they require also a suitable technical infrastructure not to lose or compromise relevant information. Consequently, careful software testing and monitoring is necessary to ensure that the technical infrastructure is working correctly during the study.</p> -<p>In this talk we will describe the entire process used for the analysis of the effectiveness of Nearine, a digital therapy for the management of depressive symptoms based on interoceptive stimulation through vibrations applied on the wrist.<br /> -We will start with the description of the remote proof of concept study used for the assessment of the effectiveness and potential adverse effects. After that, the technical infrastructure necessary for the study will be outlined.<br /> -Finally we will show how the usage of CatchSolve for software testing has decreased the risk of potential loss of information during the study.</p> -<p>The talk is the result of a joint collaboration between CatchSolve, software testing startup based in NOI Techpark, and Nearine, a new digital health and neurotechnology startup based in Bolzano.</p> - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Chiara Masci - Davide Montesin - - - - 15:40 - 00:20 - Gimme! Gimme! Gimme! (Some good algorithms) - - Wearable hackers meet e-health experts to make a first class open source Android app - Wearable hackers meet e-health experts to make a first class open source Android app - <p>Gadgetbridge, a free and open source project, has existed since 2015 to allow wearable device customers to use their hardware without being tied to the online services of the manufacturers.</p> -<p>The small but very focused and capable technical community working on the basic functionalities such as retrieving the various data from the wearables (detected activities, sleep, pulse per minute, peripheral oxygen saturation, &#8230;) lacks the expertise on specialised algorithms that could help to perform advanced analysis/diagnostics.</p> -<p>The goal of this talk is to explore a potential collaboration between our communities: Gadgetbridge provides local-only support for an extensive list of wearable devices and a community of engineers and privacy minded users, Data4SmartHealth might contribute advanced algorithms and AI on edge devices.</p> - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Daniele Gobbetti - - - - 16:00 - 00:20 - Home4Me – IoT and AI at service of disability - - An example of how the technology can help disabled people at home. - An example of how the technology can help disabled people at home. - <p>Home4Me is an innovative social project that tries to help disabled people at home (and not only at home).<br /> -The projects tries to keep in mind concrete problems that a person with disabilities lives at home and try to resolve them using IoT ad-hoc devices and a backend to access to the power of Cognitive and AI services.</p> -<p>On the market there are already IoT solutions, but expensive and not customizable to the needed of the disable person: here is where Home4Me want to be a possible solution.</p> - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Luca Nardelli - - - - 16:20 - 00:20 - Discussion on the first round of talks - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Chiara Masci - Davide Montesin - Daniele Gobbetti - Luca Nardelli - - - - 16:40 - 00:20 - Machine learning driven simulation of protein folding atomistic trajectories - - <p>The folding of proteins is an important biological process that determines the structure, role and functionality of proteins. It is often studied by molecular dynamics (MD) simulations, in order to obtain the folding trajectory of all the atoms in the system.<br /> -To date, pure MD simulations require huge computational resources and are still unable to access the timescales of folding processes that have biological relevance.<br /> -In my work, I am exploiting machine learning techniques and one recent AI milestone, Deepmind&#8217;s Alphafold, in order to create an advanced algorithm able to explore the folding trajectories within short computational times. It becomes possible to extract atomistic conformations from the folding pathways, and identify folding intermediates and long-lived states.<br /> -This method can be used to facilitate the identification of biologically relevant protein conformations, later to be used for pharmacological targeting or biophysical studies.</p> - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Alan Ianeselli - - - - 17:00 - 00:20 - Data-driven knowledge discovery from Brain Imaging of Alzheimer’s disease patients - - Artificial Intelligence to support the diagnosis of neurodegenerative disorders - Artificial Intelligence to support the diagnosis of neurodegenerative disorders - <p>Alzheimer’s disease (AD) is a chronic neurodegenerative disease which is largely responsible for dementia in around 6% of the population aged 65 and above. The availability of human brain data generated by imaging techniques, such as Magnetic Resonance Imaging, have resulted in a growing interest in data-driven approaches for the diagnosis of neurological disorders and for the identification of new biomarkers. The knowledge discovery process typically involves complex data workflows that combine pre-processing techniques, statistical methods, machine learning algorithms, post-processing and visualisation techniques. This talk presents specific research efforts in this direction, promising results, open issues and challenges.</p> - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Giuseppe Di Fatta - - - - 17:20 - 00:20 - Management of large genomic data with free software - - <p>The suite of free software tools created within the OpenCB (Open Computational Biology &#8211; https://github.com/opencb) initiative makes possible to efficiently manage large genomic databases.</p> -<p>These tools are not widely used, since there is quite a steep learning curve for their adoption, thanks to the complexity of the software stack, but they may be really cost-effective for hospitals, research institutions etcetera.</p> -<p>The objective of the talk is showing the potential of the OpenCB suite, the information to start using it and the advantages for the end users. BioDec is currently deploying a large OpenCGA installation for the Genetic Unit of one of the main Italian Hospitals, where data in the order of the hundreds of TBs will be managed and analyzed by bioinformaticians.</p> - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Michele Finelli - - - - 17:40 - 00:20 - Discussion on second round of talks and closing - - Data4SmartHealth - Data4SmartHealth - Data4SmartHealth - https://www.sfscon.it/tracks/data4smarthealth/ - - Alan Ianeselli - Giuseppe Di Fatta - Michele Finelli - - - - - - 11:20 - 00:20 - Self-hosted, Open Source Large Language Models (LLMs) - - What are the most promising projects and how good are they? - What are the most promising projects and how good are they? - <p>In recent years different groups have used the transformer architecture (a deep learning model) to train neural networks using large quantities of text. With the increase in compute power these models have grown to billions or even hundred of billions of parameters. As the model size grew, noteworthy abilities emerged. Such as the ability to generate text showing surprising reasoning skills to the point that the leading models can now successfully take college-level exams.</p> -<p>Currently some of the best and most famous models are proprietary and released to the public as a service. However a large Open Source community has emerged that tries to train and fine tune free models that can be used self-hosted. This is a challenging task due to problems with potential copyright issues with the training text, the large computational cost of the training itself and the supervised fine tuning step to adapt the model to its final use case.</p> -<p>In this talk I will give an overview on what the most promising projects in this space are and how they compare to the proprietary state-of-the-art models of the large players.</p> - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - Chris Mair - - - - 11:40 - 00:20 - Nextcloud – how to keep up with the fast moving IT world - - Artificial Intelligence within Nextcloud - Artificial Intelligence within Nextcloud - <p>At Nextcloud we believe that in order to achieve digital sovereignty we always need to stretch the boundaries. If new technologies and new ways of working come up, we work hard to enable our users to enjoy the same functionality without giving up control over their data and computing.</p> -<p>Over the last few months we saw a lot of innovation in the area of artificial intelligence which might change our way of working to a large extend. At Nextcloud we are happy that we can already provide the first features in this areas to our users. Unfortunately not all features work completely on-premise as of today. That&#8217;s why we introduced a &#8220;Ethical AI Rating&#8221; which provides transparency to the user and let them decide what to use today, while we are working hard to base more and more of this features on Free Software and on-premise solutions.</p> -<p>The talk will present Nextcloud&#8217;s AI-features, the Ethical AI Rating and how we try to approach innovations in a fast moving IT world, in order to bring similar functionality to the Free Software community.</p> - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - Björn Schießle - - - - 12:00 - 00:20 - From Novices to Innovators: Exploring the Possibilities with Free and Open Source AI Tools - - <p>Join me as we explore the world of free and open-source AI tools, empowering individuals and organizations to unleash their creativity and take their innovation to the next level.</p> -<p>Discover how some AI players are democratizing access to cutting-edge technologies and leveling the playing field, e.g. StabilityAI, etc. We will delve into the benefits and opportunities offered by some free and open-source AI tools, exploring their capabilities, potential applications, and the impact they can have on your projects.</p> -<p>Whether you&#8217;re a practitioner or just starting your AI journey, this talk is your gateway to discovering an exciting plethora of free and open-source AI tools, and how they can empower you to stay ahead of the curve in the modern era.</p> - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - Anjan Karmakar - - - - 12:20 - 00:20 - Optimizing Software Performance with Inductive Logic Programming: A Novel Approach - - <p>Concurrent execution of tasks can significantly improve its performance and efficiency. However, identifying which tasks can be executed concurrently and which tasks need to be executed sequentially can be a challenging task. In this talk, I propose using Inductive Logic Programming (ILP) to create a dynamic dependency graph for a given program. The graph can be used to identify which tasks can be executed concurrently and which tasks need to be executed sequentially. I demonstrate the effectiveness of this approach by applying it to a sample program and comparing its performance with a version that does not utilize concurrent execution. This talk presents a novel approach to creating a dynamic dependency graph for programs and highlights the potential benefits of using ILP for optimizing the performance of complex software systems.</p> - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - Enrico Zanardo - - - - 12:40 - 00:20 - Democratizing Language and Vision Technology - - A Retrieval-based Approach for Open Vocabulary Image Classification - A Retrieval-based Approach for Open Vocabulary Image Classification - <p>The advancement in language and vision models (LLM) has seen remarkable progress in recent years. However, the training of these large-scale models poses challenges in terms of time and computational resources, particularly with regards to deep learning models that require powerful GPUs. This has created a significant gap between Big Tech companies, who possess substantial resources to train LLM models, and academia, which often lacks the necessary means to contribute significantly in this field.</p> -<p>To address this issue, we propose an innovative open vocabulary framework called CaSED (Category Search from External Databases). Unlike traditional LLM models, CaSED does not rely on extensive training. Instead, it leverages retrieval techniques from an image-text knowledge base to classify or tag images automatically. By utilizing existing knowledge bases rather than requiring extensive training, CaSED eliminates the need for large computational resources.</p> -<p>In this talk, we will show the potential of low-budget approaches in the context of Language and Vision.</p> - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - Paolo Rota - - - - 13:00 - 00:20 - Web Search, fresh and local - - Deploying the PeARS search engine in regional communities - Deploying the PeARS search engine in regional communities - <p>It is widely believed that Web search engines require immense resources to operate, making it impossible for small communities to build alternatives to the dominant players. The PeARS project (https://pearsproject.org/) aims at changing the status quo by providing open-source search tools that can be used by anyone, anywhere. To achieve this, our team designs algorithms that run on entry-level hardware, using both traditional and cutting-edge machine learning techniques.</p> -<p>This talk will focus on a specific use case for PeARS, showing how the framework can easily be deployed to provide regional search solutions: for instance for local governments, small business communities, or minority speaker groups. We will see how the system can be trained and populated on a home computer in a few clicks and how it can be tailored to the specific community it is addressed to.</p> -<p>The project has received funding from the European Union under the Next Generation Internet programme.</p> - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - Aurelie Herbelot - - - - 13:20 - 00:20 - Image Generation with Diffusion Models - - How computers imagine our world - How computers imagine our world - <p>Recent machine learning developments saw a breakthrough in generating images. So-called Diffusion Models can create photo-realistic images from noise. With the help of an input text (prompt) we can guide the generation and produce matching images.</p> -<p>This technology opened new doors for creating digital art, modifying existing images, and creating stunning visual experiences. In the talk, we will find out how these algorithms work, introduce Stable Diffusion (a concrete implementation), and find out what its use cases are. We will see how text can be used to generate matching outputs but also take a look at more experimental features such as creating images from edges, outlines, or depth maps.</p> -<p>We will mainly focus on the open source text-to-image model Stable Diffusion, which has set new standards in image generation. With it also comes an active community that keeps it open source and accessible for everyone.</p> - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - Markus Pobitzer - - - - 13:40 - 04:20 - Coming soon - - Artificial Intelligence track - Artificial Intelligence track - Artificial Intelligence track - https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ - - - 14:00 - 00:20 - The History of, and Path forward for, Copyleft and the GPL - - Copyleft, Software, Freedom, & You: Better Understanding Through History - Copyleft, Software, Freedom, & You: Better Understanding Through History - <p>Copyleft licensing has been the primary strategy of the FOSS community to guarantee users&#8217; rights to copy, share, modify, redistribute reinstall modified versions of their software. In our earliest days, we naïvely thought that the GPL would work like magic pixie dust; we&#8217;d sprinkle it on our code, and our code would remain free as in freedom.</p> -<p>The reality check that we&#8217;ve received over the last 35 years has been painful on this issue. Nevertheless, those who forget the past are condemned to repeat it.</p> -<p>This talk will not only discuss the primary past GPL enforcement efforts around the world, but also provide a whirlwind tour of how copyleft came to work how it does and discuss ideas and suggestions of future strategies in copyleft that, informed by this history, are our best hope for software freedom.</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Karen Sandler - - - - 14:20 - 00:20 - Reproducible Builds – the first 10 years - - an overview about reproducible builds, the past, the presence and the future - an overview about reproducible builds, the past, the presence and the future - <p>In this talk Holger Levsen will give an overview about reproducible builds, the past, the presence and the future. How it started with a small BoF at DebConf13 (and before), how it grew from being a Debian effort to something many projects work on together, until in 2021 it was mentioned in an executive order of the president of the United States. And of course the talk will not end there but rather outline where we are today and where we still need to be going, until we&#8217;ll all be running 100% reproducible software, verified by many.</p> -<p>And while Holger&#8217;s day to day work and this talk will have a Debian focus, reproducible builds in other project will be featured and not be left behind as Holger has been involved in Reproducible Builds since 2014 and has been working on reproducing Arch Linux, coreboot, Fedora, FreeBSD, NetBSD, OpenWrt and others. Other important software projects will also be covered and last not least Holger will also explain why you&#8217;ll want verifiable SBOMs and not just SBOMs.</p> -<p>So what is this talk about exactly again? &#8220;A build is reproducible if given the same source code, build environment and build instructions, any party can recreate bit-by-bit identical copies of all specified artifacts.&#8221;<br /> -(https://reproducible-builds.org/docs/definition)</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Holger Levsen - - - - 14:40 - 00:20 - AI Law & Ethics for sustainability corporate governance - - <p>In the era of AI, EU regulators struggle in definying a level playfield for the fruitful development of technology and utmost protection of fundamental rights and freedoms of individuals. The so-called AI Act is going to be approved by the end of 2023 and should come into force after a 2-year grace period. In any case most of the provision will be strongly risk-based and accountability oriented. In this fragmented and complex scenario, it is extremely interesting to observe how the use of AI law and AI ethics can serve the purposes of sustainability corporate governance, fostering innovation AND preserving fundamental rights and freedoms in a measurable and viable manner, having rights entering into business logics and decisions.</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Federico Sartore - - - - 15:00 - 00:20 - Windows and Office “tax” refund - - The right to install any software on any device and various cases about the refund of pre-installed software - The right to install any software on any device and various cases about the refund of pre-installed software - <p>Some manufacturers try to force to use the preinstalled software on the PC you acquire, sometimes also claiming that alternative software will not work properly.</p> -<p>On 2018 Luca purchases a Lenovo Tablet/PC and, since it comes with Microsoft Windows pre-installed, he requested the refund to Lenovo, but Lenovo denied to refund Luca. A court case was initiated, and Lenovo was condemned to pay a punitive damages of 20&#8217;000 euros for its abusive behaviour.</p> -<p>After this &#8220;historic&#8221; case, some other refund were request to other companies, such as HP, Dell, Microsoft, Acer, and again to Lenovo. Each OEM tried to deny the refund, with various reasons such as contractual clauses contained in the sale contract or in the same license agreement, or the need to delete the Product Key stored in the MSDM BIOS ACPI table and therefore they require to send the PC to their laboratories. These reasons have no valid legal basis, because – at least in Italy – the license agreement is a contract totally unrelated to the sale contract, so a third party may not impose any action on your material good, and the license agreement has remained without causal and economic justification, because not accepted and missed to be concluded.</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Luca Bonissi - - - - 15:20 - 00:20 - How do you really do GPL enforcement? - - aka Bringing software right-to-repair to the masses - aka Bringing software right-to-repair to the masses - <p>Enforcing the General Public License (GPL) to bring real software freedom to people can be very challenging in practice, but many of the steps in the process are straight-forward. As the only organization enforcing the GPL for Linux, Software Freedom Conservancy (SFC) receives a huge quantity of GPL violation reports, and needs to triage each one as the beginning of our process. The next step is called the &#8220;CCS check&#8221; (complete corresponding source check), a crucial but barely known activity that determines whether some candidate source code actually corresponds to the device/binaries that the candidate was provided for. We will discuss the CCS check in detail, providing examples and tips for doing your own checks.</p> -<p>Lastly, we&#8217;ll cover the offer check, something everyone can do to help in SFC&#8217;s efforts to bring real software right-to-repair to every device running Linux. Whether you want to check offers for source code, review a CCS candidate, or go even further with additional GPL enforcement work of your own, this talk will set you up for success.</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Denver Gingerich - - - - 15:40 - 00:20 - KYCS ‒ Know Your Code Sources (and let it be known) - - How Cyber Resilience Act is going to change FOSS forever and what can we do about it? - How Cyber Resilience Act is going to change FOSS forever and what can we do about it? - <p>CRA at the time of submission is still in a draft status, but it is relatively clear that it will impose a duty to make the software safer if and when it is distributed on the market as a final product.</p> -<p>Part of the safety requirements includes the obligation to collect and keep available for inspection a list of software components obtained from third parties, that is their provenance, and the insecurities obtained through mainly CVE scanning. Incidentally there is an obligation to support and provide security patches after the product is placed on the market (hint, open source rulez).</p> -<p>Open Source Software is not exempted per se, the current discussion is where the final burden and responsibility of complying, if at all, lies. In any case, whatever the outcome of such discussion is, open source projects should strive to ease up CRA compliance for their downstream adopters, if they want to keep them. We will concentrate on how open source projects that aim at being considered in an industry supply chain (including that of software industry) should strive to make the supply chain&#8217;s life easier, building on our experience with Eclipse Oniro and the toolchain and processes we have devised for it.</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Carlo Piana - Alberto Pianon - - - - 16:00 - 00:20 - Continuos compliance @ Linaro - - Linaro's open source innovation engine on steroids thanks to production grade and long term sustainability attributes. - Linaro's open source innovation engine on steroids thanks to production grade and long term sustainability attributes. - <p>Continuous compliance is rooted into Linaro&#8217;s everyday activities, whether the target is kernel development, a SOC Yocto SDK, an SDV, or consumer electronics project. Open source is at the center of today&#8217;s software innovation, ubiquitous across products and services and, as such open source needs to evolve from a mere innovation into a production-grade engine. Linaro, one of the leading linux kernel contributors, is perfectly positioned to support our customers and the entire open source community throughout this transition. This talk will showcase Linaro&#8217;s continuous compliance and production-grade processes, artifacts, and best practices and shed some light on what&#8217;s happening under the hood of one of the world leading open source organizations and contributors.</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Davide Ricci - - - - 16:20 - 01:40 - The current state of SBOMs and SPDX - - Updates for 2023 - Updates for 2023 - <p>Software Bill of Materials (SBOMs) are rapidly becoming increasingly important in the software supply chain. Software Package Data Exchange (SPDX) is a freely available ISO standard that defines the way of communicating information about software components. It includes, but is not limited to, metadata such as name and version, but also licensing and security information.</p> -<p>In this talk, we will present the latest updates from the ever-changing landscape of SBOMs and SPDX, focusing in real-world use cases. Familiarity with the concepts will not be assumed, as they will be briefly explained.</p> - - Legal track - Legal track - Legal track - https://www.sfscon.it/tracks/legal-track-2023/ - - Alexios Zavras - - - - 16:40 - 00:20 - ZOOOM Project track introduction - - Introduction to the ZOOOM project and presentation of the next-day activity - Introduction to the ZOOOM project and presentation of the next-day activity - <p>The ZOOOM Track aims to disseminate the findings of the ZOOOM project and show the intersection between legal and business aspects in IP management and value creation/capture in innovation ecosystems based on open-source software (and beyond).<br /> -In this talk the ZOOOM consortium will present the first results of the project discussed in the following talks and the activity for the second day workshop of the SFSCon.</p> - - ZOOOM project track - ZOOOM project track - ZOOOM project track - https://www.sfscon.it/tracks/zooom-project-track-2023/ - - Stefano Menegazzi - Alessandro Rossi - Amalia de Götzen - Andy Peruccon - - - - 17:00 - 00:20 - The ZOOOM Framework: Legal aspects of FOSS and beyond - - <p>License compliance efforts for software projects involve not only legal-oriented actions, but also governance elements such as organizational processes and community management. The larger the community or the organization working collectively, the more complex a compliance program for software projects may become. Free Software licenses being direct licensing models are easier to comply with in comparison to proprietary licenses. This talk will give an overview of the Free Software licensing compliance practices, including initiatives such as REUSE for streamlining copyright and license information for software projects.</p> - - ZOOOM project track - ZOOOM project track - ZOOOM project track - https://www.sfscon.it/tracks/zooom-project-track-2023/ - - Niharika Singhal - - - - 17:20 - 00:20 - The ZOOOM Framework: Business Aspects of FOSS and Beyond - - <p>Companies can engage in the 3Os in many ways and for different reasons. In many cases, strategic and competitive advantages are at the core of a company’s decisions, but in other cases, motivations can involve social and ethical considerations such as reciprocity, altruism, and democratization of knowledge. In this talk, we outline the main business-related motivations identified by the ZOOOM project for using and contributing to FOSS. Among them: pursuing competitive advantage, reduction of development costs, technological innovation, access to knowledge or assets, and interoperability. Based on the interviews conducted by the ZOOOM partners, we also discuss major challenges and risks that businesses leveraging the 3Os must navigate.</p> - - ZOOOM project track - ZOOOM project track - ZOOOM project track - https://www.sfscon.it/tracks/zooom-project-track-2023/ - - Seckin Celik - Davide Serpico - - - - 17:40 - 00:20 - The ZOOOM Framework: An Ecosystemic Perspective - - <p>In this talk, we analyse the ecosystem trend in the context of the 3Os, particularly FOSS. Based on the existing literature and data from ZOOOM interviews, we explore the potential roles that companies can play in open-source ecosystems, their interactions with the other players of the ecosystem, and their awareness about the impact that systemic elements have on their business. Most companies recognize the advantages of being embedded in ecosystems where the creation of new knowledge is facilitated by joint research work, collaboration, and expertise sharing. However, companies identify themselves into specific roles depending on their strategy, main business, network structures, and communities. Finally, we outline a multilevel framework of how business and innovation ecosystems complement each other in the realm of the 3Os.</p> - - ZOOOM project track - ZOOOM project track - ZOOOM project track - https://www.sfscon.it/tracks/zooom-project-track-2023/ - - Davide Serpico - Seckin Celik - - - - - - 11:20 - 00:20 - Community tidbits - - How to keep free software projects happy and healthy - How to keep free software projects happy and healthy - <p>Open source communities, when they have reached a certain size, face their very own set of challenges.</p> -<p>In the virtual world, timezones, language barriers and dealing with many e-mails can become a burden. In the real world, the organization of travels to project meetings, the planning of annual conferences in an easy to reach location, and even the shipment of gadgets around the globe turn out to be quite demanding.</p> -<p>While free software projects might have the same diversity and outreach as large organizations, they often have not the same resources at hand as established corporations. They need to be a bit more creative &#8211; but luckily, that&#8217;s in their DNA!</p> -<p>In the spirit of sharing knowledge openly, this talk intends to give some real-life examples of challenges your community may face, unexpected situations you might run into and how to solve them &#8211; sometimes in unconventional ways.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Florian Effenberger - - - - 11:40 - 00:20 - Transforming South Tyrol’s Economy: Empowering Tourism and Agriculture through Decentralized Applications (dApps) - - <p>The implementation of decentralized applications (dApps) holds immense potential for transforming two of the key economic sectors of South Tyrol: tourism and agriculture.</p> -<p>In the tourism industry, dApps can revolutionize the way services are offered and transactions are processed. By utilizing smart contracts and blockchain technology, dApps can enable transparent and secure processes for booking accommodations, tours, and activities. This ensures that tourists have direct access to reliable information-, while it eliminates the need for intermediaries, and reduces costs. Moreover, dApps can facilitate decentralized reviews and ratings, empowering visitors to make informed decisions based on authentic feedback from fellow travelers, i.e., fake reviews can be eliminated. This fosters trust and enhances the overall tourist experience.</p> -<p>In the agriculture sector, dApps can address key challenges faced by farmers and consumers alike. For example by implementing blockchain-based supply chain solutions, dApps can ensure traceability and transparency in the production, processing, and distribution of agricultural products. This allows consumers to verify the origin and quality of the products they purchase, promoting trust and supporting local producers. Additionally, dApps can facilitate direct farmer-to-consumer interactions through decentralized marketplaces, eliminating unnecessary middlemen and enabling fair and efficient transactions. This empowers farmers by providing them with a direct and secure channel to sell their products while offering consumers access to fresh and locally sourced goods.</p> -<p>By embracing decentralized applications, South Tyrol can unlock new opportunities for its tourism and agriculture sectors. These applications not only enhance efficiency and reduce costs but also increase customer trust, promote sustainability, and support the local economy. As a result, dApps have the potential to shape a thriving ecosystem that benefits both businesses and consumers in South Tyrol&#8217;s key industries.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Max Oberperfler - - - - 12:00 - 00:20 - Beyond Google & Apple duopoly - - FOSS alternatives for digital mobility - FOSS alternatives for digital mobility - <p>StatsCounter tell us that in May &#8217;23 the market share for the smartphones is split in this way: Android/Google 67.56%, iOS/Apple 31.6%. Which means the remaining is less that 1%. Today we are speaking about that 1%: available alternatives, future outlook and most important why we have to care of about that 1%. Spoiler: because a study of the University of Edinburgh and the Trinity College Dublin published in Q4/2021 proves what all we know &#8211; our smartphones leak our data constantly.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Roberto Foglietta - - - - 12:20 - 00:20 - Combatting E-Waste’s Environmental Harm With Free Software - - <p>Electronic waste, or e-waste, refers to discarded information and communications technology equipment such as laptops, smartphones, and large and small household appliances. In 2015, Achim Steiner of the UN Environment Programme (UNEP) described &#8220;an unprecedented tsunami of electronic waste rolling out over the world&#8221;. In 2016, 44.7 million tonnes of e-waste were generated, equivalent to 4500 Eiffel Towers. In 2019, the World Economic Forum determined e-waste to be the fastest growing waste stream in the world. In 2022, the amount of e-waste hit 59.4 million tonnes, a 33% increase since 2016. Given the economic, and not the technical logic driving the digital economy, devices are rendered obsolete before their time and the pile of e-waste continues to grow.</p> -<p>E-waste is the source of significant environmental harm. Production, transportation, and end-of-life treatment accounts for 80+% of a device&#8217;s carbon footprint over its operating life. Extracting rare earth metals consumes copious amounts of energy; moreover, mining is typically done in the Global South under miserable social conditions. The end-of-life treatment of e-waste means those same devices return to the Global South, resulting in toxic pollution entering the environment and harming workers.</p> -<p>Today, most devices have chips which need software to keep them running. Thus, software plays a crucial role in preventing e-waste: software determines a hardware&#8217;s minimum working requirements, and for how long a device remains safely in use. For most users, environmental harm driven by software has largely remained overlooked … let alone that we can already do something about it with Free Software.</p> -<p>In this talk I will provide a brief overview of the environmental harm from e-waste driven by software, and I will link the inherent values that come with a Free Software license to sustainable software design. By enabling full user autonomy and removing artificial vendor dependencies, Free Software means electronic devices that are otherwise unsupported by manufacturers remain in use. Lightweight and up-to-date software, free from bloat and energy-consuming ads, allows aging, less-powerful hardware to keep running and stay out of the waste bin. Software freedom means hardware freedom, and that means we are able to combat the environmental harm caused by e-waste with Free Software today.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Joseph P. De Veaugh-Geiss - - - - 12:40 - 00:20 - Building an Awesome Product by Creating a Community Around It - - How to effectively engage with your user community - How to effectively engage with your user community - <p>In today’s competitive market, it has become crucial to build a thriving community of developers and users around your product. Gone are the days when code alone could make a product successful; the human element now plays a pivotal role. This community becomes the face and representation of your project to the outside world. Having worked on our Open Source project for over 8 years, I have accumulated a wealth of proven strategies for attracting contributors, training newcomers, and expanding the user base. In my presentation, I will explain how to effectively engage with your user community in order to achieve the following objectives: collect feedback, share use cases, contribute to documentation, identify bugs and collaboratively develop code<br /> -Because improving your product goes beyond just writing code; it involves nurturing a strong community of people.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Alessio Fattorini - - - - 13:00 - 00:20 - Sustainability of Open Source Software and Potentials in Developing Countries - - <p>Although developing countries hold a lot of potential in software development and research, the licensing cost of commercial software, platforms, and online services serve as a hindrance in their widespread adoption. Open source software can be a very useful and viable solution in this regard. On one hand it can fill up the need for less costly software alternatives. On the other hand, it can reduce the adoption of pirated versions of commercial software by individuals and groups to make up for the cost factor. Furthermore, with more adoption of open source software in the developing countries, it will also encourage and engage more programmers from the developing countries to maintain the open source software and to contribute to it, adding to the sustainability of various open source projects and thus benefiting open source software development beyond borders. The speaker, who has the experience of working in both the developing countries as well as here in Alto-Adige/Sud-Tirol region, will share insights on this topic from both of these diverse perspectives.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Abid Munir Bajwa - - - - 13:20 - 00:20 - Sharing the power of appreciation: Celebrating ‘I Love Free Software Day’ - - <p>In the realm of Free Software, expressing gratitude towards Free Software contributors often goes unnoticed. The &#8220;I Love Free Software Day&#8221; (https://ilovefs.org) provides a platform for individuals and organisations to do exactly this, showing appreciation. But it is crucial to recognize that our appreciation for Free Software should extend far beyond this single day. This talk highlights the significance of the &#8220;I Love Free Software Day&#8221; as a platform for expressing support, love, and gratitude towards the developers and contributors who make Free Software possible.</p> -<p>Throughout the presentation, we will showcase memorable moments and successful initiatives from past celebrations, demonstrating the collective efforts to acknowledge and honor the impact of Free Software. We will discuss ideas and strategies for making the upcoming &#8220;I Love Free Software Day&#8221; even more remarkable.</p> -<p>However, it is essential to emphasize that our expressions of love and support for Free Software should not be limited to just one day. While the &#8220;I Love Free Software Day&#8221; serves as a catalyst for celebration, it should inspire us to continue demonstrating our gratitude throughout the year. We will explore ways to incorporate ongoing appreciation into our daily lives, such as contributing to Free Software projects, advocating for their importance, and recognizing the efforts of developers and contributors regularly also in a financial way.</p> -<p>By extending our appreciation beyond a single day, we can cultivate a culture of continuous support for Free Software. We invite everyone interested in Free Software to join us in this endeavor, as we strive to create an environment where gratitude and acknowledgment become integral parts of our interactions within the Free Software community.</p> -<p>Let us embrace the &#8220;I Love Free Software Day&#8221; (https://ilovefs.org) as a starting point, a reminder of the significance of Free Software, and a call to action to express our love and support throughout the year. Together, we can build a community that values and appreciates the tireless efforts of Free Software developers and contributors, making a lasting impact on the future of software freedom.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Bonnie Mehring - - - - 13:40 - 01:40 - MindsHub no-profit - - Makers, programmers, enthusiasts with a focus on education - Makers, programmers, enthusiasts with a focus on education - <p>MindsHub is a no profit association from Ala (near Trento), which provides a space for enthusiasts to develop skills and ideas in informatics, electronics, robotics and 3D printing: https://mindshub.it/.<br /> -Everything started back in 2016, when we organized CoderDojo Vallagarina to introduce young boys and girls to programming. The association has since grown to have multiple running projects, and over 20 active members, aging 12 years old and up. We meet once a week to learn from each other and bring the activities forward.<br /> -We created an autonomous farming robot (featured at Maker Faire Rome among the best 10 projects), we delved into online security with schools, we developed a FOSS app to report and collect garbage, we spoke to Samantha Cristoforetti on the ISS, &#8230;</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Fabio Giovanazzi - Alessio Zeni - - - - 14:00 - 00:20 - RIOS (Rete Italiana Open Source) presents latest updates on the OSPO Alliance and the Good Governance Initiative. - - <p>The Good Governance Initiative (GGI) proposes a methodological framework to assess open-source awareness, compliance and governance in any kind of organizations, helping them to structure and improve the use of FOSS towards an OSPO. This presentation will highlight the main progresses and new features achieved since last year, such as the translation of the GGI Good Governance in five languages, the recent Success Stories presented in the OnRamp meeting series, and many more. Stefano Pampaloni, vice-president of the Italian Open Source Network, will present the latest developments, elaborating on the RIOS Network&#8217;s contribution to the project.</p> - - OW2 track - OW2 track - OW2 track - https://www.sfscon.it/tracks/ow2-track-2023/ - - Valentina Del Prete - Stefano Pampaloni - - - - 14:20 - 00:20 - The CORD-19 Topic Visualizer - - Exploring the evolution of research topics during the COVID-19 pandemic - Exploring the evolution of research topics during the COVID-19 pandemic - <p>The COVID-19 pandemic reshaped research across various fields, producing an unprecedented flood of articles. In response, several open-access corpora were created; among them, the COVID-19 Open Research Dataset (CORD-19) collected over a million articles in 2.5 years.</p> -<p>In this presentation, we introduce the CORD-19 Topic Visualizer (CORToViz), a method and tool for exploring CORD-19&#8217;s scientific abstracts. It uses a stack of modern open source technologies to cluster articles and mine temporal topics. CORToViz has an interactive dashboard for quick topic visualization, time series tracking, and statistical testing.</p> -<p>We will show the results extracted with CORToViz, which allowed us to visualize and tell in a synthetic way what happened to react against COVID-19, comparing it with the key moments of the pandemic. The high adaptability of our approach suits any textual document corpus, and it lends itself easily to exploring new challenging fields of research, such as climate change.</p> -<p>CORToViz represents the first prototype of a series, which we aim to develop within the NGI Search Program, under the TETYS project (Topics Evolution That You See), aiming to build the next-generation Web topics explorer.</p> - - OW2 track - OW2 track - OW2 track - https://www.sfscon.it/tracks/ow2-track-2023/ - - Francesco Invernici - - - - 14:40 - 00:20 - Can AI counteract Health-related Fake News? - - HeReFaNMi (Health-Related Fake News Mitigation): an open-source project to counteract health-related misinformation - HeReFaNMi (Health-Related Fake News Mitigation): an open-source project to counteract health-related misinformation - <p>HeReFaNMi (Health-Related Fake News Mitigation) is an NGI-Search-funded project to give back trustworthiness to the Internet community by tackling fake news spread. Other than the well-known cyber threats, several factors have been undermining the Internet search experience lately. One of the pandemic&#8217;s lessons learned concerns the health-related fake news spread over websites and social media networks. Some nefarious effects came as a non-negligible hesitancy towards national healthcare systems&#8217; guidelines. Since then, several AI-powered solutions have been developed to counteract fake news circulation using supervised and unsupervised learning. The task is challenging due to the need for continuous updating upon introducing new scientific findings. The so-called data drift and catastrophic forgetting also affect the effectiveness of AI-powered classification methods.<br /> -LLMs (Large Language Models) have recently made their way through the AI landscape by delivering unprecedented performances over text analytics, mining, question and answering systems, and text generation. However, LLMs suffer from Hallucination, meaning they can elaborate contents that are unreliable as a source of truth even when fine-tuned on scientifically sound datasets.</p> - - OW2 track - OW2 track - OW2 track - https://www.sfscon.it/tracks/ow2-track-2023/ - - Alessandro Bruno - - - - 15:00 - 03:00 - Coming soon - - OW2 track - OW2 track - OW2 track - https://www.sfscon.it/tracks/ow2-track-2023/ - - - 15:20 - 00:20 - Videobooks - - Augmenting the Reading Experience with Synchronous Reading and Listening - Augmenting the Reading Experience with Synchronous Reading and Listening - <p>Recent open source libraries apply machine learning for forced alignment of speech and text and make it possible to produce text that is synchronized to audio in various languages. This makes it possible to produce a new type of reading experience: the videobook! This contribution talks about a pilot project that aims to produce videobooks based on hundreds of audiobooks and texts that are already in the public domain (such as librivox and the gutenberg project). Possible applications in the educational domain are discussed: such as language learning, accessibility and e-learning applications</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Michael Schlauch - - - - 15:40 - 00:20 - Can we sustain Software Freedom in the mobile world? - - <p>Laptops and servers are running Linux based free software just fine these days. But what about the small and powerful devices in our pockets that we carry everywhere?</p> -<p>Can we achieve the same level of freedom and choice on smart phones? Can we make that usable for everyone?</p> -<p>This talk gives a short overview about the current state of Linux on mobile devices.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Nicole Faerber - Guido Günther - - - - 16:00 - 00:20 - Process Analysis Tools 4 Public Utility - - <p>Background: Process Mining is a growing technology in recent years that consists of integrating specific process mining tools with management software systems to analyze process data and provide feedback on process efficiency, potential bottlenecks, and resource utilization in a production and business context.</p> -<p>Aim: The aim of this presentation is to showcase open source process mining tools, and how these could be integrated with other publicly available software in order to help make meaningful decisions driven by real data. This could be applied to any business context, including non-profit organizations and services to the public and community.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Martina Burlando - - - - 16:20 - 00:20 - TOGETHER IS BETTER - - Can competitors work together with open source ? - Can competitors work together with open source ? - <p>When community and Open source mindset are part of a company culture, it becomes easy to plan and project new products (even with potential competitors). In an open source project, all or part of the produced material is made publicly available for others to use, under certain conditions. The mistery of the &#8220;unpaid programmer&#8221; disappears when corporations see benefits coming from other members in the project and even fear of &#8220;loosing control&#8221; is balanced with continuous feedbacks from developers and users. This is the story of a new project&#8230;</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Nicola Filippini - - - - 16:40 - 00:20 - BIM2FEM: From Building Information Modeling to Finite Element Analysis - - An open-source-based workflow - An open-source-based workflow - <p>The construction industry currently lacks automated open-source-based workflows for thermal and structural analysis of buildings. The Finite Element Method (FEM) represents the state-of-the-art approach for structural and thermal analysis in construction engineering. With the recent increase in computing power, complex models can now be analyzed within a feasible amount of time. However, the integration of FEM into Building Information Modeling (BIM) workflows remains an active area of research. While some commercial software provides interfaces and plug-ins for BIM-integrated finite element analysis, their capabilities are limited and their use is restricted to the corresponding commercial software. Customizable open-source-based approaches exist, but they lack consistent and robust workflows. A consistent data flow of material properties and boundary conditions is essential but remains a challenging task that has not yet been sufficiently addressed. Fraunhofer Italia has developed a workflow based on the open IFC-standard and open-source FEM software packages, which has been tested and validated through the creation of a software prototype. This talk will introduce the developed workflow and demonstrate the prototype’s functionalities through selected use-cases.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Julius Emig - - - - 17:00 - 00:20 - Open Tracing Tools: Overview and Comparison - - <p>Open Tracing Tools are software tools that enable the monitoring, debugging, and optimization of distributed software architectures. They provide a way to trace and understand the flow of requests and data through various components of a distributed system.</p> -<p>In the last months, the authors conducted a study to select and compare 30 tracing tools using a systematic literature review approach. They analysed the open source licence, features, architecture, the collected data, interoperability, but also the popularity, benefits, and issues of each tool, using topic modelling and sentiment analysis. The results offer a systematic comparison of the selected tracing tools.</p> -<p>We&#8217;ll say it in advance: there is one perfect tool that is better than all the others but this talk will present a) a brief overview of what open tracing tools are and the OpenTelemetry standard, b) the process followed in the study and c) the obtained results. For those that want to read the entire report, here it is: https://arxiv.org/abs/2207.06875.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Andrea Janes - Xiaozhou Li - Valentina Lenarduzzi - - - - 17:20 - 00:20 - Providing and Receiving Feedback in Open Source - - <p>For open-source developers, user feedback provides a direct line between both parties, offering valuable insights. That&#8217;s at least how the theory goes In reality, the feedback is often skewed, and the minority of negative loudmouths sometimes overshadows the silent majority of satisfied and grateful users. Needless to say, this doesn&#8217;t do any favors to open-source developers.</p> -<p>Is there a way to improve the situation? Join this session and learn how you, as an open-source developer, can deal with feedback and other challenges unique to the open-source development model.</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Dan Čermák - - - - 17:40 - 00:20 - Shaping the future with Data - - How Data can become the most valuable asset for a business/ company - How Data can become the most valuable asset for a business/ company - <p>How to launch, build and scale a business with DATA.<br /> -Support any decision making process<br /> -Become a value for people<br /> -Can help in the change management</p> - - Community track - Community track - Community track - https://www.sfscon.it/tracks/community-track-2023/ - - Zemourda Aissaoui - - - - - - 11:20 - 00:20 - Decoding the Corporate Maze - - Empowering Exposure Assessment through Open Software and OSINT - Empowering Exposure Assessment through Open Software and OSINT - <p>Embark on a remarkable expedition as we delve into the realm of Exposure Assessment. Unlocking its wonders, we will navigate this captivating process exclusively utilizing Open Software and OSINT. With a mere glimpse into a company&#8217;s domain, we will traverse the intricate labyrinth of their infrastructure, diligently seeking a potential access point into their corporate system.</p> - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - Francesco Pavanello - - - - 11:40 - 00:20 - Predict security attacks in FOSS - - Why you want it and how to do it - Why you want it and how to do it - <p>FOSS is here to stay, displacing malevolent privative counterparts—great!<br /> -FOSS exposes bugs to be found and fixed by the community—great!<br /> -FOSS shows security issues than can be exploited by attackers—gr..what?<br /> -In the last decades, source code transparency has made the job of black-hat hackers increasingly easy. We now have security websites exposing vulnerabilities and even exploits online—and despite good practices like responsible disclosure, it is the sheer amount of (external) code what makes everyone ultimately vulnerable. In plain words, nobody&#8217;s safe.</p> -<p>From that base, this talk puts forward the need for a concept of *probability of future exploits*. This is crucial for project management, but also at developer level, to see the risks of not upgrading (or yes upgrading!) a dependency. We show how this probability can, and must, be computed from a project&#8217;s dependency tree, in a manner that only the use of FOSS can allow. We also show that the development history of the project and its dependencies is key to getting useful results.</p> -<p>Finally, we merge the dependency tree and development history of a project into a white-box model, which we use to estimate the probability of future exploits. We show how to do it for the Java-Maven environment, for which we can use the FOSS tool &#8216;FIG&#8217;. FIG, written in C++ and released under GPLv3, was designed for statistical estimations and can compute the probability of attacks in complex scenarios like the ones at hand.</p> - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - Carlos Esteban Budde - - - - 12:00 - 00:20 - Software freedom primer on Self Sovereign Identity - - Let's stop feeding the surveillance economy - Let's stop feeding the surveillance economy - <p>The federated identity ecosystem is one of the key mechanisms by which the platform and surveillance economy has grown into today&#8217;s shape, mostly on the shoulders of a vast number of Open Source contributions. Self Sovereign Identity is a privacy, freedom, control first approach to managing identity in a decentralised and secure way. In his talk, Georg Greve will provide a primer into SSI, how it works, and share insights from developing the SSI stack within the Eclipse Cross Federation Services Components, formerly Gaia-X Federation Services.</p> - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - Georg Greve - - - - 12:20 - 00:20 - Opensource to help increase organizations Cybersecurity posture - - Cybersecurity is a compulsory, tough and expensive task for all organizations - Cybersecurity is a compulsory, tough and expensive task for all organizations - <p>Cybersecurity is a compulsory, tough and expensive task for all organizations, private and public, large , medium and small.<br /> -No one can ignore it anymore, and building a viable Cybersecurity strategy is a complex task that needs to balance budget, keeping up with attacker technologies, available skills and a plethora of expensive tools on the market.<br /> -Let&#8217;s discus s on how available Opensource solutions may greatly help ours organizations to be more effective in implementing their Cybersecurity posture, while optimizing available budget.</p> - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - Carlo Falciola - - - - 12:40 - 00:20 - Technical leverage analysis in the Python ecosystem: lessons learned - - <p>[Context:] Technical leverage is the ratio between dependencies (other people&#8217;s code) and own codes of a software package. It has been shown to be useful to characterize the Java ecosystem and there are also studies on the NPM ecosystem available. [Objective:] By using this metric we aim to analyze the Python ecosystem, how it evolves, and how secure it is, as a developer would perceive it when deciding to adopt or update (or not) a library. [Method:] We collect a dataset of the top 600 Python packages (corresponding to 21,205 versions) and used a number of innovative approaches for its analysis including the use of a two-part statistical model to deal with excess zeros, a mathematical closed formulation to estimate vulnerabilities that we confirm with bootstrapping on the actual dataset. [Results:] Small Python package versions have a median technical leverage of 6.9x their own code, while bigger package versions rely on dependencies code a tenth of their own (median leverage of 0.1). In terms of evolution, Python packages tend to have stable technical leverage through their evolution (once highly leveraged, always leveraged). On security, the chance of getting a safe package version when choosing a package is actually better than previous research has shown based on the ratio of safe package versions in the ecosystem. [Conclusions:] Python packages ship a lot of other people&#8217;s code and tend to keep doing so. However, developers will have a good chance to choose a safe package version.</p> - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - Ranindya Paramitha - - - - 13:00 - 00:20 - MBBS: A Multimodal Behavioral Biometric Scheme for Smartphone User Authentication - - <p>In this presentation, we present MBBS, a tetra-model behavioral biometric-based authentication scheme designed specifically for smartphones. MBBS utilizes four distinct modalities to authenticate users: touchscreen swiping patterns, taps on &#8220;text-independent&#8221; 8-digit numbers, name writing on the touchscreen, and micro-movements of the hand during the entry process. To enhance overall accuracy and security, MBBS incorporates a state-of-the-art Generative Adversarial Network (GAN) powered data augmentation architecture. This innovative approach allows us to demonstrate the effectiveness of MBBS using both real user samples and augmented samples, consisting of a combination of &#8220;real&#8221; and &#8220;GAN-generated&#8221; data, on an actual Android device. One of the key advantages of MBBS is its high usability, as it eliminates the need for users to remember any secret information. Instead, it leverages users&#8217; familiarity with natural processes, thereby increasing accuracy in real-time by employing GAN technology, all without requiring a large sample size from users. We will also present preliminary results from our performance, security, and usability analysis, which showcase a positive opinion regarding the effectiveness of our developed authentication mechanism.</p> - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - Attaullah Buriro - - - - 13:20 - 00:20 - Recommending security fixes for weak open-source code with AI - - <p>Technical debt is a metaphor that describes not-quite-right code introduced for short-term needs. The effort to refactor it increases if it remains for a long in the software. When developers are aware of it and admit it in source code comments, the debt is called Self-Admitted Technical Debt (SATD). Thus, SATD indicates weak code that developers are aware of. The question is whether they are aware that this code may be vulnerable to attacks. This presentation will illustrate how artificial intelligence can be employed to recommend security fixes for vulnerabilities to developers.</p> - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - Jorge Melegati - Moritz Mock - Barbara Russo - - - - 13:40 - 04:20 - Coming soon - - Cybersecurity track - Cybersecurity track - Cybersecurity track - https://www.sfscon.it/tracks/cybersecurity-track-2023/ - - - 14:00 - 00:20 - Free Software and AI in Europe - - How Europe regulates AI and Free Software - How Europe regulates AI and Free Software - <p>In this talk, I will present the latest developments in EU legislation and activities on AI and what role Free Software plays in this.</p> -<p>The European Union&#8217;s AI Act is the first comprehensive set of regulations for the artificial intelligence. Also Free Software plays a role in this regulation. I will shed light on the upcoming rules and evaluate what this means for Free Software, AI but also other upcoming regulations.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Alexander Sander - - - - 14:20 - 00:20 - Why Do We Need A Next Generation Internet? - - Improving the Internet as a platform, one Free Software at a time - Improving the Internet as a platform, one Free Software at a time - <p>The Internet today forms the backbone of the digitisation of our society and economy. As connectivity increases, the boundaries between the real and digital world get increasingly blurred. However, there has been an erosion of trust in the Internet following revelations about the exploitation of personal data, large-scale cybersecurity and data breaches, and growing awareness of the proliferation and impacts of online disinformation.</p> -<p>What can be done to improve the Internet as a platform for future generations? What initiatives are currently in place to build key technological blocks of an Internet that supports human-centric values, such as privacy, security, and inclusion, while reflecting the values and norms all citizens should enjoy in Europe?</p> -<p>This talk will explore why the current state of the internet must be re-imagined and re-engineered in order to support healthy societies, the existing European Commission initiative to work towards doing so, and the role of Free Software in accomplishing these goals.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Gabriel Ku Wei Bin - - - - 14:40 - 00:20 - Interoperable Europe Act: A real game changer? - - <p>Interoperability is a core element of the ongoing digitalisation of Europe. With the Interoperable Europe Act, the EU is aiming to create a dedicated legal framework for interoperability and to enhance cross-border digital public services across the European Union. This talk will give an overview of the state of play of this proposed regulation in the ongoing EU legislative process, some of its flaws, and the important role that Free Software and its community can play in it.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Lina Ceballos - - - - 15:00 - 00:20 - The Brand-New Version of IGis Maps - - The “swiss knife” developed and used in South Tyrol for the integrated management of Geo Referenced data and related information - The “swiss knife” developed and used in South Tyrol for the integrated management of Geo Referenced data and related information - <p>2023 saw the launch, after a long and well-structured revision and development process, all based on a fruitful collaboration between several departments of the Autonomous Province of Bolzano, most of the township in South Tyrol, Informatica Alto Adige (SIAG &#8211; Technical partner) and the Consortium of Municipalities of the Province of Bolzano, of the new version of the integrated geographic data management system IGis Maps. In use for years in South Tyrol, has in the Consortium one of its most enthusiastic contributors and supporters.</p> -<p>The very first version was released about eight years ago and its implementation was based on the idea of creating a multi-purpose GIS management system that could support different types of users, that was highly customizable, and, above all, that could be widely shared among the various management entities, both public and private, present within our territory.</p> -<p>After years of use and ad-hoc developments, we can finally present the new version of the IGis Maps system, which incorporates all the technical and technological improvements we realized the system needed.</p> -<p>It was not just a major update together with new functionalities combined inside the previous software structure, but a true re-engineering that led, among other things, to a new and more efficient user interface, a major advancement regarding the internal security, an optimization and improvement of the entire editing section as well as an optimization of the section regarding the automatic geo-processes.</p> -<p>A mobile version is currently under development to better support any field activities, for which a very powerful option will be included, the possibility of creating special work sessions in off-line mode so as to be able to operate even in areas without a proper cellular line network coverage.</p> -<p>Other very important peculiarities concern that the system is developed using a totally free software code and infrastructure, that a detailed documentation has been produced to ensure sustainability to any further future evolution, even in case of technical partner turnover, and finally, that by taking advantage of the high standards and levels of security access can be guaranteed to any type of user. From professional users, through dedicated access and qualifications or, using the ordinary SPID, to the private citizen.</p> -<p>We will show examples of how different types of users and stakeholders now permanently use the system for the management of a variety of tasks related to their activities, and how it was possible to customize IGis Maps to create visualization and data management contexts that best meet their needs.</p> -<p>We will also present a related project concerning the updating and the correction of the new technical basal cartography, built upon the new Basic Core specification, achieved through the automatic conversion implemented by the SIAG team starting from the previous National Core cartography. With the new IGis Maps it was possible to create an advanced editing and management environment that allow both experienced and less advanced users to interact with this important new informative layer to fill all those gaps and errors that are more than normal to discover following an important automatic translation action such as the one carried out for the Basic Core project.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Edoardo Scepi - - - - 15:20 - 00:20 - Let’s monitor implementation of Free Software Policies! - - How to sharpen the demand for public code across Europe and monitor progress with TEDective - How to sharpen the demand for public code across Europe and monitor progress with TEDective - <p>For six years, the Free Software Foundation Europe has been calling with a broad alliance for publicly funded software to be published as Free Software. This initiative has become a great success: Our demand &#8220;Public Money? Public Code!&#8221; has found its way into government strategy papers, party programs, as well as coalition treaties, and is being discussed in public administrations across Europe.</p> -<p>At the same time, we see less progress than expected and vendor lock ins remain a crucial issue. Digital sovereignty is redefined bypassing Free Software. There is openwashing in publicly funded companies, and government projects in favour of Free Software remain empty words. Public statistics on the procurement of Free Software are largely unavailable.</p> -<p>It is therefore no longer enough to promote the idea of &#8220;Public Money? Public Code!&#8221;. We as the Free Software community should be even more vigilant than before – continuing to praise small steps in the right direction, but pointing out and criticising omissions and lack of implementation. We should become more like watchdogs.</p> -<p>In the talk we will look at some examples of lack of implementation of Free Software policies. We will discuss how we, as civil society, can identify such shortcomings and how to deal with them. We will present our initiative TEDective – a free-software solution that makes European public procurement data explorable for non-experts, aiming to provide you with a powerful tool to keep an eye on real progress towards &#8220;Public Money? Public Code!&#8221; across Europe.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Johannes Näder - Linus Sehn - - - - 15:40 - 00:20 - GovStack project a univeral E-Government - - <p>GovStack aims to break down the barriers to building sustainable digital infrastructure and help governments create human-centered digital services that empower individuals and improve well-being.</p> -<p>In 2015, world leaders agreed to 17 Global Goals for Sustainable Development to achieve a better world by 2030. Many of these goals rely on governments’ ability to deliver services to people. We know that digital technology can facilitate broader access and build more inclusive and resilient societies. Plus, digital government services can foster economic growth and promote trust in government institutions.</p> -<p>GovStack is helping governments simplify the digital transformation process and reduce the cost, time, and resources required to create digital platforms and services.</p> -<p>Our approach is based on the SDG Digital Investment Framework, to help countries make smarter and more strategic decisions in their ICT investments.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Oleksii Danyliuk - - - - 16:00 - 00:20 - Empowering Insights: Unveiling the latest innovations in KNOWAGE for BI and Data Visualization - - <p>KNOWAGE is the open source analytics and business intelligence suite made in Italy. KNOWAGE aims to provide company and organizations with analytical capabilities to exploit data to increase their efficiency and sustainability. Also thanks to the open source community support, the suite is constantly evolving combining the reliability of the most popular business intelligence solutions with the security and the transparency guaranteed by open source.<br /> -This talk will show the last year advancements and new features towards a more mobile, accessible and user-friendly product, focusing on the newly rewritten dashboarding tool.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Davide Vernassa - - - - 16:20 - 00:20 - KNOWAGE and AICS for 2030 agenda SDG goals monitoring - - Visualizing international open data to enhance sustainable development - Visualizing international open data to enhance sustainable development - <p>AICS is the Italian Agency for Development Cooperation that started operating in 2016 with the ambition of aligning Italy with the main European and international partners in the commitment to development. KNOWAGE Labs are developing for AICS a platform that is probably unique in the world and will allow both the Agency and the public to access all the major indicators on the UN Sustainable Development Goals provided by international sources (World Bank, WTO, ILO..) and easily compare them. The solution will allow analysis to start from 3 different touch points: the infographic of SDG goals, the advanced search criteria, and the virtual assistant. Then, a customized dashboard will be provided to the user, allowing to further expand the analysis by interacting with charts, maps, tables, etc. This talk will show the state of art of the solution, highlighting objectives and expected results of the project, but also the new developments of KNOWAGE related to AI.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Marco Cortella - - - - 16:40 - 00:20 - European regulators cast their eyes on maturing OSS communities - - <p>As open source software becomes the foundation to build digital products, to run the backbones of ICT infrastructure and to ensure digital sovereignty and cyber resilience, both the technology as well as the communities that develop it inevitably move into the focus of regulators. The European Union is advancing a number of policy initiatives that regulate liability, cyber security, data handling and AI applications in digital products, among others. This is a challenge for the still quite decentralised and globally operating open source community. How could the open source community participate in legislative processes, and what may be the potential impacts of the upcoming regulation on the open source development process and community dynamics?</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Mirko Boehm - - - - 17:00 - 00:20 - How IoT and AI are revolutionizing Mass Customization - - <p>This lightning talk will explore the transformative potential of integrating Internet of Things (IoT) and Artificial Intelligence (AI) in Mass Customization (MC). There is a significant collective impact of these technologies on businesses, enabling the delivery of personalized products and exceptional customer experiences. Besides giving an overview of MC and the potential ways of integrating IoT and AI, the focus will be on the process of real-time data collection and facilitation of the customization process by IoT on one hand, and on the role of AI in data analysis and generation of personalized recommendations on the other hand. By presenting real-world case studies to demonstrate the practical implementation of IoT and AI in providing customized products and seamless customer experiences, attendees will gain insights into the future of customization and learn actionable strategies to effectively leverage IoT and AI.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Thomas Aichner - - - - 17:20 - 00:20 - Smart Werke Meran - - Smart City 100% Open Source - Smart City 100% Open Source - <p>Since 2020 Stadtwerke Meran have realized 5 Use cases:<br /> -&#8211; Control of the control cabinets of public lighting.<br /> -&#8211; Optimizing the service on Wast Press container.<br /> -&#8211; Bike Boxes<br /> -&#8211; Just Nature Project , temperature measuring over Lorawan<br /> -&#8211; Smart Lighting , communication with single light points over Lorwan.</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Stefan Mutschlechner - - - - 17:40 - 00:20 - Monitoring the fleet of Sasa with free software - - Is it possibile to monitor a fleet of 400 buses using free software ? - Is it possibile to monitor a fleet of 400 buses using free software ? - <p>The public transport in South Tyrol is going through a huge transformation: new investments, many new green vehicles and a brand new software. Transition will take time and how do we develop a fleet monitoring system to use during the transition without spending a fortune ? maybe with free software!</p> - - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - Public Money Public Code & Open Data track - https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ - - Marco Pavanelli - - - - - - 13:00 - 00:30 - NOI Hackathon SFSCON Edition - - Side Event - Hackathon - Side Event - Hackathon - Side Event,Hackathon - - - - - - - 08:30 - 00:30 - Starting of the second day - - SFSCON - SFSCON - SFSCON - - - 08:35 - 00:30 - Check-in - - Main track - Main track - Main track,Main track - - - 13:00 - 00:30 - Closing of the SFSCON 2023 - - SFSCON - SFSCON - SFSCON - - - - - 08:30 - 00:50 - Welcome Coffee - - SFSCON - SFSCON - SFSCON - - - - - 09:20 - 00:20 - How can Blockchain technologies incorporate AI solutions for a safer and efficient Open Data ecosystem. - - <p>The transition from Web 2.0 to Web 3.0 has fueled the need for a secure and decentralized cloud storage solution for digital assets. Web 2.0 was characterized by centralized platforms where user data was under the control of companies. In contrast, Web 3.0 aims to empower individuals and foster a decentralized web that supports and benefits the Free Software and Open Data Communities.</p> -<p>Blockchain technologies facilitate seamless collaboration and interoperability among diverse stakeholders in the Free Software and Open Data communities. Developers can establish open and transparent ecosystems where data can be shared, verified, and integrated across multiple platforms.</p> -<p>Beez, with its own blockchain infrastructure, offers a secure and transparent platform for digital asset exchanges, bolstering transaction integrity and trust. By distributing data across a network of nodes, Beez ensures security and mitigates the risk of single points of failure. Users retain control over their data, safeguard their privacy, and can take advantage of the incentive mechanisms offered by blockchain networks.<br /> -During our presentation, we will explore the role of AI within Beez&#8217;s ecosystem, facilitating accelerated data processing, correlation, and intelligent automation. AI unlocks valuable insights from blockchain data, and we will touch upon the use of Inductive Logic Programming (ILP) to enhance programming performance.</p> -<p>The integration of Blockchain and AI technologies holds great potential for advancing the safety and efficiency of the Open Data ecosystem. By combining decentralized data storage, trust-building mechanisms, and intelligent data processing, Beez is paving the way for a more secure, transparent, and user-centric digital landscape.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Marianna d'Atri - Enrico Zanardo - - - - 09:40 - 00:20 - Real-time aeroplane tracking and the Open Data Hub - - Using the Open Data Hub as real-time data backbone - Using the Open Data Hub as real-time data backbone - <p>Tracking aeroplanes in real time with Open Source Software is possible. Aircrafts must continuously send their current flight parameters to air traffic controllers on the ground and to other aircrafts. This generates a lot of data, especially when planes are being tracked by multiple sensors.<br /> -The Open Data Hub on the other hand offers a great backbone for data storing and processing, where the correct datasets have to be identified and filtered. After all transformation on the data is done, it will be exposed via API to be further used by a web application.<br /> -Bringing together sensor generated data, the Open Data Hub and custom web applications, is a showcase on how the Open Data Hub can be used as a service: OaaS.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Martin Rabanser - - - - 10:00 - 00:20 - Embracing CI/CD workflows for building ETL pipelines - - how we will gather and monitor multi-source spatially-interpolated meteorological parameters in near-real time - how we will gather and monitor multi-source spatially-interpolated meteorological parameters in near-real time - <p>Up-to date measurements of surface meteorological variables are essential to monitor weather conditions, their spatio-temporal variability and the potential effects on a wide range of sectors and applications. Moreover, when included in continuous records of long historical observations spanning several decades, they become essential for assessing long-term climate variability and change locally and on a regional level.</p> -<p>Automated pipelines capable of retrieving and processing near-real time meteorological data satisfy the primary prerequisites towards the development and advancement of effective and operational climate services.</p> -<p>With a public and operational near real-time monitoring web platform in mind, we present automated pipelines to collect and process up-to-date daily temperature and precipitation records for Trentino South Tyrol (Italy) and surrounding areas, and to derive their spatially interpolated fields at sub-km scale. Our pipelines are composed by multiple steps including data download, sanity checks, reconstruction of missing daily records, integration into the historical archive, spatial interpolation and publication onto online FAIR catalogues as (openEO) “datacubes”. The different APIs, data formats and structure across the various data sources, and the need to merge the data onto harmonized meteorological layers, make this a typical case of the so-called Extract, Transform and Load (ETL) pipelines, and, in order to follow the principles of data reproducibility and Open Science, we embraced open-source automated workflow management through GitLab’s Continuous Integration / Continuous Development (CI/CD) capabilities.</p> -<p>CI/CD workflows greatly help the management of the relatively complex graphs of tasks required for our climate application, ensuring seamless orchestration with thorough flow monitoring, application logs, transactions rollbacks, and exception handling in general. Native pipeline-oriented software development also fosters a clean separation of roles among the tasks, and a more modular architecture. This effectively reduces barriers to collaborative development and paves the way for robust operational climate services for researchers and decision makers in the face of the changing climate.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Elena Maines - - - - 10:20 - 00:20 - Free Software and Open Science - - <p>The Open Science movement aims to increase the transparency, reproducibility and inclusiveness of academic research. One of its central goals is therefore to make research outputs broadly available, e.g., manuscripts (Open Access) or research data (Open Data). While software/code created in the course of scientific research is a key artifact of scientific research that is clear distinct from the latter two, it has until recently not received the same attention as manuscripts or data, although it follows its own set of paradigms.</p> -<p>In this talk I will present an overview on how the core concepts of Free Software and the FAIR (findable, accessible, interoperable, reuseable) Principles intersect, what this means for managing code as research output and recent initiatives on the European level that will provide support for these issues.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Christian Busse - - - - 10:40 - 00:20 - MLOps with Kubernetes: unleash the power of the ecosystem! - - <p>Kubernetes is a popular open-source software, today&#8217;s de-facto open standard, to run production workloads. Innovation in the ecosystem thrives with multiple projects that enrich the platform&#8217;s core. Machine Learning Operations (MLOps) is part of the same effort to bring automation into Kubernetes for ML pipelines.</p> -<p>This session aims to explore the Kubernetes-native tools available such as Tekton, Argo CD, Kubeflow, and OpenDataHub, to apply DevOps and GitOps principles in AI/ML contexts.</p> -<p>By the end of the session, attendees will have a clear understanding on how to automate and simplify the iterative process of integrating ML models into software development processes, production rollout, monitoring, retraining, and redeployment for continued prediction accuracy with open source tools.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Natale Vinto - - - - 11:00 - 00:20 - Achieving FAIRness with EDP-portal - - DOI and citation improvements in metadata of EDP-portal - DOI and citation improvements in metadata of EDP-portal - <p>EDP-portal is the access point to the Environmental Data Platform of Eurac Research since 2021 to achieve FAIRness of our datasets. It allows to publish data and metadata and provides APIs and web services for data access. In the last 2 years the EDP improved the findability and accessibility of the data collected throughout the curation of metadata that was improved with the DOI registration for datasets. The result is a higher metadata quality where the final user can easily find how to properly cite datasets with a persistent identifier. The portal itself and main data repositories are registered in FAIR-sharing portal with their own DOI. The SW components of the EDP are totally based on open source projects.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Andrea Vianello - - - - 11:20 - 00:20 - SMODEX – a Python package for understanding the evolution of soil moisture anomalies - - <p>The complexity of agricultural droughts requires a consistent, reliable, and systematic method for monitoring and reporting. Amongst the various indices used to monitor this phenomenon, the soil moisture anomaly has been proven to be a more reliable predictor. However, the datasets required for computing this index are often large and computationally demanding. To address this challenge, we have developed SMODEX, a Python package that enables scalable, fast, and open-source standard-compliant computation and visualization of soil moisture anomalies.</p> -<p>SMODEX simplifies the computation and visualization of time-series for soil moisture and soil moisture anomalies from high-dimensional climate datasets. It allows for quick and easy parallelization of the computation on a daily, weekly, and monthly timescale. Additionally, SMODEX implements a straightforward workflow for automating the use of FAIR (Findable, Accessible, Interoperable, and Reusable) principles in producing and sharing outputs by leveraging the open source STAC API. The package is extendible and provides information on how to contribute to the project, test suites, test coverage, and a use case for the South Tyrol region, all provided in the package repository. In the future, additional agricultural drought indices and indicators would be included to serve to even larger community of researchers, policy makers, and individual users.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Rufai Omowunmi Balogun - - - - 11:40 - 00:20 - Why open digital infrastructure matters - - hardware & software infrastructure for Europe - hardware & software infrastructure for Europe - <p>Software freedom can be defined in many ways but in legal terms it is squarely defined by a set of approved FSF and OSI software licenses. Yet everyone realizes that beyond these licenses the goal of software freedom and digital sovereignty cannot be achieved without the ability to master and create hardware components and systems &#8211; and beyond that, to rely on open digital infrastructure (servers, datacenters, and resources) . This talk will present the challenges around these topics and what we, collectively in Europe already do and can do to ensure our independence and our freedoms.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Charles-H. Schulz - - - - 12:00 - 00:20 - Intelligent Decision Support System for traceability system of MOAH & MOSH olive oil contaminants - - What we are doing, what we will do! - What we are doing, what we will do! - <p>MOSH and MOAH are the abbreviation of two groups of chemical compounds found in mineral oils. “MOSH” stands for Mineral Oil Saturated Hydrocarbons. MOAH stands for Mineral Oil Aromatic Hydrocarbons. Both of them are under European deeply evaluation because there are two food contaminants. According to the current state of scientific knowledge, there is no sufficient toxicological evidence to prove a health risk to humans from saturated mineral oil fractions (MOSH). Meanwhile, MOAH are suspected to be carcinogenic (especially PAH-like compounds with 3-7 ring systems), therefore their levels in food should be reduced according to the ALARA-principle (as low as reasonably achievable). Gruppo FOS with CNR ( MOSH and MOAH are the abbreviation of two groups of chemical compounds found in mineral oils. “MOSH” stands for Mineral Oil Saturated Hydrocarbons. MOAH stands for Mineral Oil Aromatic Hydrocarbons. Both of them are under European deeply evaluation because there are two food contaminants. According to the current state of scientific knowledge, there is no sufficient toxicological evidence to prove a health risk to humans from saturated mineral oil fractions (MOSH). Meanwhile, MOAH are suspected to be carcinogenic (especially PAH-like compounds with 3-7 ring systems), therefore their levels in food should be reduced according to the ALARA-principle (as low as reasonably achievable). Gruppo FOS with CNR (Consiglio Nazionale delle Ricerche), Santagata 1907 and Enginius are searching the system for finding and trace their presence in the virgin and extra virgin olive oils by using open fingerprints methods, open hardware and open source blockchain and AI technologies.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Giovanni Giannotta - - - - 12:20 - 00:20 - The Future of Connectivity, Open Internet and Human Rights - - Making telecommunications more democratic with Free Software - Making telecommunications more democratic with Free Software - <p>We are becoming more and more dependent on the Internet for our work, education, communication, personal relations and entertainment. Our digital devices conquered an unprecedented level of importance in our life.</p> -<p>However, we are facing a loss of control over our smartphones, tablets and other devices for internet connection. It&#8217;s time to resolve monopolies and re-establish democratic control over the technology we most depend upon.</p> -<p>This talk will present the challenges end-users are facing to get more control over their devices and how Free Software is key for a consumer re-empowerement.</p> -<p>The talk will present real-life examples of policy demands against gatekeepers on digital markets, such as the struggle for Router Freedom in the last years and how Device Neutrality can serve as an important instrument for pushing forward end-user-oriented digital policies.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Lucas Lasota - - - - 12:40 - 00:20 - From the design to reality is here the Community Open Hardware PowerPC Notebook - - In 2014 hobbists dream it, now thanks to donors, volunteers and collaborations becomes reality - In 2014 hobbists dream it, now thanks to donors, volunteers and collaborations becomes reality - <p>The Open Hardware PowerPC Notebook designed around GNU/Linux will be showed at NOI Techpark. We had presented here its motherboard design in 2018. We will updates regarding last developments for u-boot AMD video drivers, re-design of heat pipes, and CE test certification process. We will give future availability milestones of this notebook and details regarding the GNU/Linux distributions or other OS that could runs on it.</p> - - Open Data & Open Hardware track - Open Data & Open Hardware track - Open Data & Open Hardware track - https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ - - Roberto Innocenti - - - - - - 09:20 - 01:00 - ZOOOM Toolkit Interactive Workshop - - <p>This workshop will focus on examining the ZOOOM toolkit, which provides valuable tools and material regarding open licence innovation around the topic of Open Data, Software and Hardware. Particularly, we will present the overall interface and user experience with the hope of collecting valuable feedback from participants and identifying potential improvements in both the structure and the functions of specific supporting tools. The involvement of the participants will be instrumental in gathering cutting-edge and up-to-date knowledge regarding current tools and resources that can contribute to the creation of an all-inclusive knowledge repository on open licence innovation.</p> -<p><b>REGISTRATION NEEDED AT: </b><a href="https://pretix.eu/noi-digital/sfscon23/3980546/">https://pretix.eu/noi-digital/sfscon23/3980546/</a></p> - - ZOOOM project track - ZOOOM project track - ZOOOM project track - https://www.sfscon.it/tracks/zooom-project-track-2023/ - - Amalia de Götzen - Andy Peruccon - Ronald Chenu Abente Acosta - - - - 10:20 - 00:30 - Closing ZOOOM Toolkit Interactive Workshop - - ZOOOM project track - ZOOOM project track - ZOOOM project track - https://www.sfscon.it/tracks/zooom-project-track-2023/ - - - - - 09:20 - 03:40 - The future of Free Software in Italy - - Side Event - FSFE - Italian community meeting - Side Event - FSFE - Italian community meeting - Side Event,FSFE,Italian community meeting - https://www.sfscon.it/tracks/fsfe-italian-community-meeting/ - - Marta Andreoli - - - - - - 17:00 - 00:30 - Winner proclamation and closing of the NOI Hackathon SFSCON Edition - - Side Event - Hackathon - Side Event - Hackathon - Side Event,Hackathon - - - - diff --git a/src/tests/assets/sfscon2023sponsors.yaml b/src/tests/assets/sfscon2023sponsors.yaml deleted file mode 100644 index 0139850..0000000 --- a/src/tests/assets/sfscon2023sponsors.yaml +++ /dev/null @@ -1,169 +0,0 @@ -- id: ac2fefd3-3664-4e67-a0ff-76daffe05a47 - name: Eclipse Foundation - acronym: eclipse - sponsor_type: main - logo_url: https://m.opencon.dev/static/ECLIPSE_BNnew.png - url: https://www.eclipse.org/ - width: 282px - height: 91px -- id: 44701ce9-af97-4819-8852-30e12fb96066 - name: Gruppo Fos - acronym: gruppo-fos - sponsor_type: main - logo_url: https://m.opencon.dev/static/GRUPPOFOS_BNnew.png - url: https://www.gruppofos.it/ - width: 282px - height: 102px -- id: 219de8c8-7f80-49e2-b101-aa8e9e498db4 - acronym: red-hat - name: Red Hat - sponsor_type: main - logo_url: https://m.opencon.dev/static/red-hat.png - url: https://www.redhat.com/en - width: 284px - height: 86px -- id: 4dad81f6-e1e2-478e-9406-80b5987204dc - acronym: telmekom - name: Telmekom - sponsor_type: main - logo_url: https://m.opencon.dev/static/TELMEKOM_BNnew.png - url: http://www.telmekom.net/ - width: 284px - height: 86px -- id: 5f1e9ccc-cf71-441e-81e0-c40dc34a677e - acronym: vates - name: Vates - sponsor_type: normal - logo_url: https://m.opencon.dev/static/VATES_BNnew.png - url: https://vates.fr/ - width: 180px - height: 53.43px -- id: 127d0b97-87fd-454e-822e-77fb7367ce28 - name: ITSERVICENET - acronym: it-service-net - logo_url: https://m.opencon.dev/static/itservicenet.png - url: https://www.itservicenet.net/ - sponsor_type: normal - width: 180px - height: 71.16px -- id: e68950c1-eda9-48c8-8fc4-5ef987228ce2 - acronym: madeinchima - name: Made In Chima - logo_url: https://m.opencon.dev/static/MADEINCIMA_BNnew.png - url: https://www.madeincima.it/ - sponsor_type: normal - width: 128px - height: 70px -- id: 184da88c-f090-4cf9-958c-22b84c0fe8d4 - acronym: '1006' - name: 1006 Org - logo_url: https://m.opencon.dev/static/1006org_logonew.png - url: https://www.1006.org/ - sponsor_type: normal - width: 101px - height: 20px -- id: 101c39b0-24ab-474b-a747-459a6a61660d - acronym: catchsolve - name: Catchsolve - logo_url: https://m.opencon.dev/static/CATCHSOLVE_BNnew.png - url: https://www.catch-solve.tech/ - sponsor_type: normal - width: 128px - height: 32px -- id: f542abc0-c94b-4459-82ed-9acf814fefae - acronym: endian - name: Endian - logo_url: https://m.opencon.dev/static/ENDIAN_BNnew.png - url: https://www.endian.com/ - sponsor_type: normal - width: 90px - height: 22.28px -- id: e9c0d83a-26f5-4ed0-8162-09ab28c2ddda - acronym: peer - name: Peer - logo_url: https://m.opencon.dev/static/Peer_BNnew.png - url: https://www.peer.biz/de/ - sponsor_type: normal - width: 80px - height: 30.66px -- id: 2244636e-19ad-4edd-b537-da40368a904e - acronym: fosslife - name: Foss Life - logo_url: https://m.opencon.dev/static/FossLife_BNnew.png - url: https://fosslife.org/ - sponsor_type: normal - width: 40px - height: 50.91px -- id: f6e8cf35-60aa-4fc7-aed2-1af091147d3a - acronym: fsfe - name: Fsfe - logo_url: https://m.opencon.dev/static/FSFE_BNnew.png - url: https://fsfe.org/ - sponsor_type: normal - width: 70px - height: 38px -- id: 05646adf-f9a0-47d8-8030-5a682ca8708b - acronym: linux-magazine - name: Linux - logo_url: https://m.opencon.dev/static/LinuxMagazine_BNnew.png - url: https://www.linux-magazine.com/ - sponsor_type: normal - width: 60px - height: 27px -- id: 2de671e5-ceaa-4306-a685-24921c3a14f5 - acronym: lugbz - name: Lugbz - logo_url: https://m.opencon.dev/static/LUGBZ_BNnew.png - url: https://www.lugbz.org/ - sponsor_type: normal - width: 36px - height: 42px -- id: 691dff4f-8b91-4993-acd3-2e73352348c2 - acronym: ow2 - name: Ow2 - logo_url: https://m.opencon.dev/static/OW2_BNnew.png - url: https://www.ow2.org/ - sponsor_type: normal - width: 50px - height: 13px -- id: 329152e4-bffd-4f9e-b6ca-edc0d11bc7dc - acronym: speckand.tech - name: Speck & Tech - logo_url: https://m.opencon.dev/static/SpeckTech_BNnew.png - url: https://speckand.tech/ - sponsor_type: normal - width: 36px - height: 46px -- id: de0cd141-12a3-4e8d-90e5-b04f222f5582 - acronym: stickermule - name: Sticker Mule - logo_url: https://m.opencon.dev/static/Stickermule_BNnew.png - url: >- - https://www.stickermule.com/it/uses/laptop-stickers?utm_source=sponsorship&utm_medium=referral&utm_campaign=SFSCon21 - sponsor_type: normal - width: 64px - height: 39px -- id: 0508427b-41c9-43fb-b209-b3673761ea6f - acronym: unibz - name: Unibz - logo_url: https://m.opencon.dev/static/UNIBZ_BNnew.png - url: https://www.unibz.it/ - sponsor_type: normal - width: 46px - height: 36px -- id: 2dee2644-8373-4dc2-a397-73ac14c0dbc0 - acronym: wud - name: Wud - logo_url: https://m.opencon.dev/static/WUD.png - url: https://wud-bz.it/ - sponsor_type: normal - width: 46px - height: 36px -- id: 4589f65b-bf88-4575-a6d1-069a63956439 - acronym: zooom - name: Zooom - logo_url: https://m.opencon.dev/static/ZOOOM.png - url: https://zooom4u.eu/ - sponsor_type: normal - width: 92px - height: 64px diff --git a/src/tests/base_test_classes.py b/src/tests/base_test_classes.py deleted file mode 100644 index 4d21d80..0000000 --- a/src/tests/base_test_classes.py +++ /dev/null @@ -1,105 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -import os -import pytest -import dotenv -import logging -import psycopg2 -import importlib -from tortoise import Tortoise -from abc import ABC, abstractmethod - -from app import startup_event, shutdown_event, get_app - -logging.disable(logging.CRITICAL) -dotenv.load_dotenv() -os.environ["TEST_MODE"] = "true" - - -class BaseAPITest(ABC): - app = None - - def import_modules(self, svcs): - for svc in svcs: - importlib.reload(importlib.import_module(svc)) - - self.app = get_app() - - @abstractmethod - async def setup(self): - ... - - @pytest.fixture(autouse=True, scope="function") - async def setup_fixture(self): - await startup_event() - try: - await self.setup() - except Exception as e: - raise - try: - yield - except Exception as e: - raise - - await shutdown_event() - - -class BaseTest: - - @pytest.fixture(autouse=True) - async def automatic_fixture(self): - await self.async_setup() - yield - await self.async_teardown() - - @staticmethod - async def helper_drop(test_db): - - terminate_sessions_sql = f""" - SELECT pg_terminate_backend(pg_stat_activity.pid) - FROM pg_stat_activity - WHERE pg_stat_activity.datname = '{test_db}' - AND pid <> pg_backend_pid(); - """ - - conn = psycopg2.connect(user=os.getenv('DB_USERNAME'), password=os.getenv('DB_PASSWORD'), database='template1', host='localhost') - conn.autocommit = True - - cur = conn.cursor() - cur.execute(terminate_sessions_sql) - - try: - cur.execute(f"DROP DATABASE IF EXISTS {test_db}") - cur.execute(f"CREATE DATABASE {test_db}") - cur.close() - conn.close() - except Exception as e: - raise - - @staticmethod - async def async_setup(): - test_pfx = 'test_' - test_db_name = f"{test_pfx}{os.getenv('DB_NAME')}" - try: - await BaseTest.helper_drop(test_db_name) - except Exception as e: - pass - try: - await Tortoise.init( - db_url=f"postgres://{os.getenv('DB_USERNAME')}:{os.getenv('DB_PASSWORD')}@{os.getenv('DB_HOST')}:{os.getenv('DB_PORT')}/{test_db_name}", - modules={"models": ["conferences.models"]}, - use_tz=True, - timezone='CET', - ) - except Exception as e: - raise - - try: - await Tortoise.generate_schemas() - except Exception as e: - raise - - @staticmethod - async def async_teardown(): - await Tortoise.close_connections() diff --git a/src/tests/pytest.ini b/src/tests/pytest.ini deleted file mode 100644 index d280de0..0000000 --- a/src/tests/pytest.ini +++ /dev/null @@ -1,2 +0,0 @@ -[pytest] -asyncio_mode = auto \ No newline at end of file diff --git a/src/tests/test_api.py b/src/tests/test_api.py deleted file mode 100644 index 5e30e8d..0000000 --- a/src/tests/test_api.py +++ /dev/null @@ -1,491 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -import os -import pprint -import uuid -import json - -import dotenv -import logging -from httpx import AsyncClient -from base_test_classes import BaseAPITest - -os.environ["TEST_MODE"] = "true" - -dotenv.load_dotenv() - -logging.disable(logging.CRITICAL) - - -def get_local_xml_content(): - try: - with open(f'{os.path.dirname(os.path.realpath(__file__))}/assets/sfscon2023.xml', 'r') as f: - return f.read() - except Exception as e: - raise - - -class TestAPIBasic(BaseAPITest): - - async def setup(self): - self.import_modules(['src.conferences.api']) - - async def test_get_all_conferences_expect_nothing_to_be_returned(self): - async with AsyncClient(app=self.app, base_url="http://test") as ac: - x = await ac.get('/openapi.json') - assert x.status_code == 200 - response = await ac.get("/api/conferences") - assert response.status_code == 200 - assert [] == response.json() - - async def test_create_conference_online_conent(self): - async with AsyncClient(app=self.app, base_url="http://test") as ac: - response = await ac.post("/api/conferences", json={"default": True}) - - async def test_create_conference(self): - async with AsyncClient(app=self.app, base_url="http://test") as ac: - response = await ac.post("/api/conferences", json={'xml_content': get_local_xml_content(), 'default': False}) - - assert response.status_code == 200 - assert 'id' in response.json() - - async def test_create_and_fetch_conference(self): - async with AsyncClient(app=self.app, base_url="http://test") as ac: - response = await ac.post("/api/conferences", json={'xml_content': get_local_xml_content(), 'default': False}) - - assert response.status_code == 200 - assert 'id' in response.json() - - id_conference = response.json()['id'] - - async with AsyncClient(app=self.app, base_url="http://test") as ac: - response = await ac.get(f"/api/conferences/{id_conference}") - - assert response.status_code == 200 - assert response.json()['conference']['acronym'] == 'sfscon-2023' - - async def test_register_pretix_user(self): - async with AsyncClient(app=self.app, base_url="http://test") as ac: - response = await ac.post("/api/conferences", json={'xml_content': get_local_xml_content(), 'default': False}) - - assert response.status_code == 200 - assert 'id' in response.json() - - id_conference = response.json()['id'] - - async with AsyncClient(app=self.app, base_url="http://test") as ac: - response = await ac.get(f"/api/conferences/{id_conference}") - - assert response.status_code == 200 - assert response.json()['conference']['acronym'] == 'sfscon-2023' - - async with AsyncClient(app=self.app, base_url="http://test") as ac: - response = await ac.post(f"/api/conferences/{id_conference}/pretix", - json={'order': 'DRXSG', - 'pushToken': 'ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]'} - ) - assert 'id' in response.json() - assert 'token' in response.json() - assert 'created' in response.json() and response.json()['created'] is True - - async def test_non_authorized_me(self): - async with AsyncClient(app=self.app, base_url="http://test") as ac: - result = await ac.get(f"/api/tenants/me") - - assert result.status_code == 403 - assert result.json() == {'detail': 'UNAUTHORIZED'} - - -class TestDashboard(BaseAPITest): - - async def setup(self): - self.import_modules(['src.conferences.api']) - - async def test_dashboard(self): - async with AsyncClient(app=self.app, base_url="http://test") as ac: - x = await ac.get('/openapi.json') - assert x.status_code == 200 - - response = await ac.get(f"/api/conferences/sfscon-2023/dashboard") - assert response.status_code == 200 - - async def test_attendees(self): - async with AsyncClient(app=self.app, base_url="http://test") as ac: - response = await ac.get(f"/api/conferences/sfscon-2023/attendees") - assert response.status_code == 200 - - async def test_sessions(self): - async with AsyncClient(app=self.app, base_url="http://test") as ac: - response = await ac.post("/api/conferences", json={'xml_content': get_local_xml_content(), 'default': False}) - - async with AsyncClient(app=self.app, base_url="http://test") as ac: - response = await ac.get(f"/api/conferences/sfscon-2023/sessions") - assert response.status_code == 200 - - -class TestAPIWithConferenceAndRegisteredUser(BaseAPITest): - - async def setup(self): - self.import_modules(['src.conferences.api']) - - async with AsyncClient(app=self.app, base_url="http://test") as ac: - response = await ac.post("/api/conferences", json={'xml_content': get_local_xml_content(), 'default': False}) - - assert response.status_code == 200 - assert 'id' in response.json() - - self.id_conference = response.json()['id'] - - async with AsyncClient(app=self.app, base_url="http://test") as ac: - response = await ac.get(f"/api/conferences/{self.id_conference}") - - assert response.status_code == 200 - assert response.json()['conference']['acronym'] == 'sfscon-2023' - - async with AsyncClient(app=self.app, base_url="http://test") as ac: - response = await ac.post(f"/api/conferences/{self.id_conference}/pretix", - json={'order': 'DRXSG', - 'pushToken': 'ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]'} - ) - assert 'id' in response.json() - assert 'token' in response.json() - assert 'created' in response.json() and response.json()['created'] is True - - self.token = response.json()['token'] - - async with AsyncClient(app=self.app, base_url="http://test") as ac: - result = await ac.get(f"/api/tenants/me", - headers={"Authorization": f"Bearer {self.token}"}) - - assert result.status_code == 200 - assert result.json() == {'id': result.json()['id'], 'data': {'organization': 'Digital Cube DOO', 'pretix_order': 'DRXSG'}, 'email': 'ivo@digitalcube.rs', 'first_name': 'Ivo', - 'last_name': 'Kovačević'} - - async def test_get_conference_csv(self): - async with AsyncClient(app=self.app, base_url="http://test") as ac: - response = await ac.get(f"/api/conferences/sfscon-2023/talks.csv") - assert response.status_code == 200 - - response = await ac.get(f"/api/conferences/sfscon-2023/attendees.csv") - assert response.status_code == 200 - ... - - async def test_push_flow(self): - async with AsyncClient(app=self.app, base_url="http://test") as ac: - result = await ac.post(f"/api/flows", - json={'conference_id': self.id_conference, - 'pretix_order_id': 'DRXSG', - 'text': 'some text'}, - headers={"X-Api-Key": f"{os.getenv('PRINTER_X_API_KEY')}"}) - ... - - async def test_rate_event(self): - - async with AsyncClient(app=self.app, base_url="http://test") as ac: - serialized = await ac.get(f"/api/conferences/{self.id_conference}") - - id_session = serialized.json()['conference']['idx']['ordered_sessions_by_days']['2023-11-10'][5] - - assert id_session is not None - - result = await ac.post(f"/api/conferences/sessions/{id_session}/rate", - json={'rate': 5}, - headers={"Authorization": f"Bearer {self.token}"}) - - assert result.status_code == 200 - assert result.json()['avg'] == 5.0 - - async def test_bookmark_event(self): - - async with AsyncClient(app=self.app, base_url="http://test") as ac: - serialized = await ac.get(f"/api/conferences/{self.id_conference}") - - result = await ac.get(f"/api/conferences/{self.id_conference}/bookmarks", - headers={"Authorization": f"Bearer {self.token}"}) - - assert result.json() == [] - - id_session = serialized.json()['conference']['idx']['ordered_sessions_by_days']['2023-11-10'][5] - - assert id_session is not None - - result = await ac.post(f"/api/conferences/sessions/{id_session}/toggle-bookmark", - headers={"Authorization": f"Bearer {self.token}"}) - - assert result.status_code == 200 - assert result.json()['bookmarked'] is True - - result = await ac.get(f"/api/conferences/{self.id_conference}/bookmarks", - headers={"Authorization": f"Bearer {self.token}"}) - - assert result.json() == [id_session] - - result = await ac.post(f"/api/conferences/sessions/{id_session}/toggle-bookmark", - headers={"Authorization": f"Bearer {self.token}"}) - - assert result.status_code == 200 - assert result.json()['bookmarked'] is False - - result = await ac.get(f"/api/conferences/{self.id_conference}/bookmarks", - headers={"Authorization": f"Bearer {self.token}"}) - - assert result.json() == [] - - async def test_bookmark_non_existing_event(self): - - async with AsyncClient(app=self.app, base_url="http://test") as ac: - id_session = uuid.uuid4() - exp = None - try: - await ac.post(f"/api/conferences/sessions/{id_session}/toggle-bookmark", - headers={"Authorization": f"Bearer {self.token}"}) - except Exception as e: - exp = e - - assert str(exp) == 'EVENT_SESSION_NOT_FOUND' - - # - async def test_push_notification(self): - async with AsyncClient(app=self.app, base_url="http://test") as ac: - res = await ac.post(f'/api/conferences/pretix_orders/DRXSG/test_push_notification', - json={'subject': 'test', 'message': 'test123'}) - assert res.status_code == 200 - - async def test_register_printer(self): - - lanes = os.getenv('CHECKIN_LANES', None) - assert lanes is not None - - lanes = json.loads(lanes) - lane1 = lanes['LANE-DC'] - printer_x_api_key = os.getenv('PRINTER_X_API_KEY', None) - - async with AsyncClient(app=self.app, base_url="http://test") as ac: - res = await ac.post(f'/api/printers/register/{lane1}', - headers={'X-Api-Key': printer_x_api_key, - 'Content-Type': 'application/json'}) - - assert res.status_code == 200 - - async def test_scan_pretix_qr_code(self): - - printer_response_payload = ''' - { - "count": 1, - "next": null, - "previous": null, - "results": [ - { - "id": 23879610, - "order": "DRXSG", - "positionid": 1, - "item": 405843, - "variation": null, - "price": "0.00", - "attendee_name": "Ivo Kovačević", - "attendee_name_parts": { - "_scheme": "given_family", - "given_name": "Ivo", - "family_name": "Kovačević" - }, - "company": "Digital Cube DOO", - "street": null, - "zipcode": null, - "city": null, - "country": null, - "state": null, - "attendee_email": "ivo@digitalcube.rs", - "voucher": null, - "tax_rate": "0.00", - "tax_value": "0.00", - "secret": "d8cpm24fyuv2nn73zasrzgbcynfcfxd3", - "addon_to": null, - "subevent": 3973986, - "checkins": [ - { - "id": 19727648, - "datetime": "2023-10-13T15:36:41.601865+02:00", - "list": 313919, - "auto_checked_in": false, - "gate": null, - "device": null, - "type": "entry" - } - ], - "downloads": [ - { - "output": "pdf", - "url": "https://pretix.eu/api/v1/organizers/noi-digital/events/sfscon23/orderpositions/23879610/download/pdf/" - }, - { - "output": "passbook", - "url": "https://pretix.eu/api/v1/organizers/noi-digital/events/sfscon23/orderpositions/23879610/download/passbook/" - } - ], - "answers": [ - { - "question": 97901, - "answer": "NO", - "question_identifier": "8DG7LBJE", - "options": [ - 161406 - ], - "option_identifiers": [ - "88MRLUL8" - ] - } - ], - "tax_rule": null, - "pseudonymization_id": "MB7BUEJKLR", - "seat": null, - "require_attention": false, - "order__status": "p", - "valid_from": null, - "valid_until": null, - "blocked": null - } - ] - } - ''' - - lanes = os.getenv('CHECKIN_LANES', None) - assert lanes is not None - - lanes = json.loads(lanes) - lane1 = lanes['LANE1'] - printer_x_api_key = os.getenv('PRINTER_X_API_KEY', None) - - printer_response_payload = json.loads(printer_response_payload) - secret = printer_response_payload['results'][0]['secret'] - - async with AsyncClient(app=self.app, base_url="http://test") as ac: - res = await ac.post(f'/api/conferences/{self.id_conference}/scans/lanes/{lane1}/{secret}', - headers={'X-Api-Key': printer_x_api_key, - 'Content-Type': 'application/json'}, - json={'pretix_response': printer_response_payload}) - - assert res.status_code == 200 - ... - - - # - async def test_5minutes_notification_test_only_mode(self): - async with AsyncClient(app=self.app, base_url="http://test") as ac: - res = await ac.post(f'/api/conferences/sfscon2023/notify-5-minutes-before-start', - json={'now_time': '2023-10-11 08:26:00', - 'test_only': True}) - - assert res.status_code == 200 - assert 'enqueued_messages' in res.json() and res.json()['enqueued_messages'] == 0 - assert 'test_only' in res.json() and res.json()['test_only'] is True - # assert res.json() == {'enqueued_messages': 0, 'test_only': True} # no sessions in next 5 minutes - - serialized = await ac.get(f"/api/conferences/{self.id_conference}") - - serialized = serialized.json() - id_session = None - for ie in serialized['conference']['idx']['ordered_sessions_by_days']['2023-11-10']: - e = serialized['conference']['db']['sessions'][ie] - if e['unique_id'] == '2023day1event1': - id_session = e['id'] - break - - assert id_session - - res = await ac.post(f"/api/conferences/sessions/{id_session}/toggle-bookmark", - headers={"Authorization": f"Bearer {self.token}"}) - - assert res.status_code == 200 - assert res.json() == {'bookmarked': True} - - res = await ac.post(f'/api/conferences/sfscon2023/notify-5-minutes-before-start', - json={'now_time': '2023-11-10 08:26:00'}) - assert res.status_code == 200 - # assert res.json() == {'enqueued_messages': 1, 'test_only': True, - # 'log': ['Ivo Kovačević (Digital Cube DOO): Check-in start at 08:30'] - # } - - -class TestAdminLogin(BaseAPITest): - - async def setup(self): - self.import_modules(['src.conferences.api']) - - async def test_scan(self): - async with AsyncClient(app=self.app, base_url="http://test") as ac: - res = await ac.post(f'/api/conferences/scan', - json={'id_target': str(uuid.uuid4()), 'id_location': 'e4041668-8199-48c5-bb00-0b4e7042f479'}) - - assert res.status_code == 200 - print(res.json()) - - # - async def deprecated_test_get_attendees(self): - async with AsyncClient(app=self.app, base_url="http://test") as ac: - res = await ac.post(f"/api/tenants/sessions", - json={'username': os.getenv('ADMIN_USERNAME'), - 'password': 'xyz'}) - - assert res.status_code == 403 - assert res.json() == {'detail': 'UNAUTHORIZED'} - - res = await ac.post(f"/api/tenants/sessions", - json={'username': os.getenv('ADMIN_USERNAME'), - 'password': os.getenv('ADMIN_PASSWORD')}) - - assert res.status_code == 200 - assert 'token' in res.json() - - token = res.json()['token'] - - res = await ac.get(f'/api/tenants/me', - headers={"Authorization": f"Bearer {token}"}) - - assert res.status_code == 200 - assert res.json()['first_name'] == os.getenv('ADMIN_USERNAME') - - res = await ac.get(f'/api/conferences/sfs2023/attendees?page=2&per_page=3&search=', - headers={"Authorization": f"Bearer {token}"}) - - assert res.status_code == 200 - - assert res.json()['summary'] == {"total_items": 335, - "total_pages": 112, - "page": 2, - "per_page": 3, - "previous_page": 1, - "next_page": 3 - } - - assert res.json()['header'] == [{'name': 'First Name', 'key': 'first_name', 'width': '100px'}, {'name': 'Last Name', 'key': 'last_name', 'width': '100px'}, - {'name': 'Organization', 'key': 'organization', 'width': '100px'}, {'name': 'Email', 'key': 'email', 'width': '100px'}, - {'name': 'Pretix Order', 'key': 'pretix_order', 'width': '100px'}, {'name': 'Has SFSCON app', 'key': 'has_app', 'width': '100px'}] - assert len(res.json()['data']) == 3 - - res = await ac.get(f'/api/conferences/sfs2023/attendees?page=2&per_page=3&search=@example.net', - headers={"Authorization": f"Bearer {token}"}) - - assert res.status_code == 200 - assert res.json()['summary'] == {"total_items": 97, - "total_pages": 33, - "page": 2, - "per_page": 3, - "previous_page": 1, - "next_page": 3 - } - # print(json.dumps(res.json()['data'], indent=4)) - # print(json.dumps(res.json()['summary'], indent=4)) - - return - res = await ac.post(f"/api/tenants/sessions", - json={'username': os.getenv('LANE_USERNAME_PREFIX', 'lane') + '1', - 'password': os.getenv('LANE_USER_PASSWORD')}) - assert res.status_code == 200 - token = res.json()['token'] - - res = await ac.get(f'/api/tenants/me', headers={"Authorization": f"Bearer {token}"}) - - assert res.status_code == 200 - - ... diff --git a/src/tests/test_conference_controller.py b/src/tests/test_conference_controller.py deleted file mode 100644 index 139a677..0000000 --- a/src/tests/test_conference_controller.py +++ /dev/null @@ -1,551 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -import os -import json -import pytest -import logging -from unittest.mock import patch, AsyncMock, Mock - -import conferences.models -from base_test_classes import BaseTest -import datetime - -logging.disable(logging.CRITICAL) - -os.environ["TEST_MODE"] = "true" - -current_file_dir = os.path.dirname(os.path.realpath(__file__)) - - -async def ivo_bookmarks_event1(conference: conferences.models.Conference): - try: - with patch('conferences.controller.fetch_order_from_prefix', new_callable=AsyncMock) as fetch_order_from_prefix: - fetch_order_from_prefix.return_value = {'results': [ - {'order': 'DRXSG', 'attendee_name': 'Igor Jeremic', - 'attendee_name_parts': {'given_name': 'Ivo', 'family_name': 'Kovacevic'}, - 'company': 'DigitalCUBE', - 'subevent': '123', - 'secret': '8stuwespjgtaxwecjgkvtfmycbvupq3r', - 'attendee_email': 'ivo@digitalcube.rs'}]} - res = await conferences.controller.register_pretix_order(conference, 'DRXSG', push_notification_token='ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]') - - except Exception as e: - raise - - token = res['token'] - ivo = conferences.controller.decode_token(token) - - import conferences.models as models - db_ivo = await models.PretixOrder.filter(id_pretix_order=ivo['pretix_order_id']).get_or_none() - - ... - - from conferences.controller import toggle_bookmark_event_session, opencon_serialize - try: - cfr = await opencon_serialize(conference) - except Exception as e: - raise - - ide_e = None - for e in cfr['conference']['db']['sessions']: - s = cfr['conference']['db']['sessions'][e] - if s['unique_id'] == '2023day1event1': - ide_e = e - break - - assert ide_e is not None - - res = await toggle_bookmark_event_session(ivo['pretix_order_id'], event_session_id=ide_e) - assert res['bookmarked'] - - return ide_e, db_ivo - - -class TestXMLProcessing(BaseTest): - - @pytest.mark.asyncio - async def test_fetch_xml_content(self): - from conferences.controller import fetch_xml_content - content = await fetch_xml_content() - assert content is not None - - from conferences.controller import add_conference - res = await add_conference(content, source_uri=os.getenv("XML_URL", None)) - conference = res['conference'] - assert conference is not None - - from conferences.controller import add_conference - res = await add_conference(content, source_uri=os.getenv("XML_URL", None)) - conference = res['conference'] - assert conference is not None - - @pytest.mark.asyncio - async def test_read_xml(self): - from conferences.controller import read_xml_file, opencon_serialize - content = await read_xml_file(current_file_dir + '/assets/sfscon2023.xml') - assert content is not None - - from conferences.controller import add_conference - res = await add_conference(content, source_uri='file://test.xml') - conference = res['conference'] - - from conferences.controller import get_conference - conference2 = await get_conference(conference.id) - - assert conference.id == conference2.id - - serialized = await opencon_serialize(conference2) - - assert serialized is not None - - print(json.dumps(serialized, indent=1)) - - @pytest.mark.asyncio - async def test_add_conference_2_times_using_same_resource(self): - from conferences.controller import read_xml_file - from conferences.controller import add_conference, find_event_by_unique_id, send_changes_to_bookmakers - - content = await read_xml_file(fname=f'{current_file_dir}/assets/sfscon2023_event1day1_0830.xml') - assert content is not None - res = await add_conference(content, source_uri='file://test.xml') - event = await find_event_by_unique_id(res['conference'], '2023day1event1') - # print('\nbefore', event.id, event.start_date, event.end_date, event.unique_id) - - assert res['created'] - assert not res['changes'] - - # await self.ivo_bookmarks_event1() - # await ivo_bookmarks_event1(_self=self) - conference = await conferences.controller.get_conference_by_acronym('sfscon2023') - conference = await conferences.controller.get_conference(conference.id) - - await ivo_bookmarks_event1(conference) - - content = await read_xml_file(fname=f'{current_file_dir}/assets/sfscon2023_event1day1_0835.xml') - assert content is not None - res = await add_conference(content, source_uri='file://test.xml') - # event2 = await find_event_by_unique_id(res['conference'], '2023day1event1') - # # print('after ', event2.id, event2.start_date, event2.end_date, event2.unique_id) - # - # assert not res['created'] - # assert res['changes'] - # assert json.loads(json.dumps(res['changes'], default=lambda x: str(x))) == { - # str(event.id): { - # "old_start_timestamp": "2023-11-10 08:30:00+01:00", - # "new_start_timestamp": "2023-11-11 08:35:00+01:00" - # } - # } - # - # - # res = await send_changes_to_bookmakers(res['conference'], res['changes'], test=True) - # - # import pprint - # pprint.pprint(res) - ... - - @pytest.mark.asyncio - async def test_register_users_on_both_days(self): - from conferences.controller import register_pretix_order, db_add_conference, decode_token, fetch_pretix_order - conference = await db_add_conference('test conference', 'test', source_uri='test://test') - - res = await register_pretix_order(conference, 'XCGU9', push_notification_token='ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]') - - assert res['created'] - assert 'token' in res - - decoded = decode_token(res['token']) - assert 'pretix_order_id' in decoded - assert decoded['pretix_order_id'] == 'XCGU9' - - @pytest.mark.asyncio - async def test_register_via_pretix(self): - from conferences.controller import register_pretix_order, db_add_conference, decode_token, fetch_pretix_order - conference = await db_add_conference('test conference', 'test', source_uri='test://test') - - res = await register_pretix_order(conference, 'PHRJM', push_notification_token='ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]') - - assert res['created'] - assert 'token' in res - - decoded = decode_token(res['token']) - - assert 'pretix_order_id' in decoded - assert decoded['pretix_order_id'] == 'PHRJM' - - res = await fetch_pretix_order(conference, 'PHRJM') - - assert res.first_name == 'Igor' - assert res.last_name == 'Jeremic' - assert res.email == 'igor@digitalcube.rs' - assert res.push_notification_token == 'ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]' - - res = await register_pretix_order(conference, 'PHRJM') - - assert not res['created'] - assert 'token' in res - - res = await fetch_pretix_order(conference, 'PHRJM') - - assert res.first_name == 'Igor' - assert res.last_name == 'Jeremic' - assert res.email == 'igor@digitalcube.rs' - assert not res.push_notification_token - - @pytest.mark.asyncio - async def test_download_xml(self): - from conferences.controller import fetch_xml_content - content = await fetch_xml_content() - assert content is not None - - from conferences.controller import add_conference - res = await add_conference(content, source_uri='file://test.xml') - conference = res['conference'] - assert conference is not None - - -class TestRegisteredUser(BaseTest): - - async def async_setup(self): - await super().async_setup() - - from conferences.controller import read_xml_file - content = await read_xml_file(current_file_dir + '/assets/sfscon2023.xml') - assert content is not None - - from conferences.controller import add_conference - res = await add_conference(content, source_uri='file://test.xml') - conference = res['conference'] - - from conferences.controller import get_conference - self.conference = await get_conference(conference.id) - - async def test_get_csv(self): - from conferences.controller import get_conference_by_acronym, get_csv_talks - - conference = await get_conference_by_acronym(self.conference.acronym) - - csv_file = await get_csv_talks(conference.acronym) - - assert csv_file.startswith('/tmp/') - assert csv_file.endswith('.csv') - - @pytest.mark.asyncio - async def test_add_stars(self): - from conferences.controller import get_conference, get_stars - - import conferences.controller as controller - - with patch('conferences.controller.fetch_order_from_prefix', new_callable=AsyncMock) as fetch_order_from_prefix: - fetch_order_from_prefix.return_value = {'results': [ - {'order': 'PHRJM', 'attendee_name': 'Igor Jeremic', - 'attendee_name_parts': {'given_name': 'Igor', 'family_name': 'Jeremic'}, - 'company': 'DigitalCUBE', - 'subevent': '123', - 'secret': '8stuwespjgtaxwecjgkvtfmycbvupq3r', - 'attendee_email': 'igor@digitalcube.rs'}]} - - res = await controller.register_pretix_order(self.conference, 'PHRJM', push_notification_token='ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]') - - token = res['token'] - igor = controller.decode_token(token) - - assert 'pretix_order_id' in igor - assert igor['pretix_order_id'] == 'PHRJM' - - with patch('conferences.controller.fetch_order_from_prefix', new_callable=AsyncMock) as fetch_order_from_prefix: - fetch_order_from_prefix.return_value = {'results': [ - {'order': 'DRXSG', 'attendee_name': 'Igor Jeremic', - 'attendee_name_parts': {'given_name': 'Ivo', 'family_name': 'Kovacevic'}, - 'company': 'DigitalCUBE', - 'subevent': '123', - 'secret': '8stuwespjgtaxwecjgkvtfmycbvupq3r', - 'attendee_email': 'ivo@digitalcube.rs'}]} - res = await controller.register_pretix_order(self.conference, 'DRXSG', push_notification_token='ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]') - - token = res['token'] - ivo = controller.decode_token(token) - - assert 'pretix_order_id' in ivo - assert ivo['pretix_order_id'] == 'DRXSG' - - from conferences.controller import add_stars, opencon_serialize - - cfr = await opencon_serialize(self.conference) - - assert cfr['conference_avg_rating'] == {'rates_by_session': {}} # no votes yet - - event3_session_id = cfr['conference']['idx']['ordered_sessions_by_days']['2023-11-10'][2] - - # igor votes first - res = await add_stars('PHRJM', event3_session_id, 5) - assert res == {'avg': 5.0, 'nr': 1, 'my_rate': 5} - - # check ratings in serialized conference - self.conference = await get_conference(self.conference.id) - cfr = await opencon_serialize(self.conference) - assert cfr['conference_avg_rating'] == {'rates_by_session': {str(event3_session_id): [5, 1]}} - - # ivo votes second - res = await add_stars('DRXSG', event3_session_id, 2) - assert res == {'avg': round((5.0 + 2.0) / 2, 2), 'nr': 2, 'my_rate': 2} - - # ivor votes again with different vote - res = await add_stars('DRXSG', event3_session_id, 5) - assert res == {'avg': round((5.0 + 5.0) / 2, 2), 'nr': 2, 'my_rate': 5} - - # mitar votes - - with patch('conferences.controller.fetch_order_from_prefix', new_callable=AsyncMock) as fetch_order_from_prefix: - fetch_order_from_prefix.return_value = {'results': [ - {'order': 'DCN73', 'attendee_name': 'Mitar Spasic', - 'attendee_name_parts': {'given_name': 'Mitar', 'family_name': 'Spasic'}, - 'company': 'DigitalCUBE', - 'subevent': '123', - 'secret': '8stuwespjgtaxwecjgkvtfmycbvupq3r', - 'attendee_email': 'mitar@digitalcube.rs'}]} - res = await controller.register_pretix_order(self.conference, 'DCN73', push_notification_token='ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]') - - token = res['token'] - - mitar = controller.decode_token(token) - - assert 'pretix_order_id' in mitar - assert mitar['pretix_order_id'] == 'DCN73' - - # mitar correct his vote from 5 to 1 - res = await add_stars('DCN73', event3_session_id, 1) - assert res == {'avg': round((5.0 + 5.0 + 1.0) / 3, 2), 'nr': 3, 'my_rate': 1} - - res = await get_stars('DCN73', event3_session_id) - assert res == {'avg': round((5.0 + 5.0 + 1.0) / 3, 2), 'nr': 3, 'my_rate': 1} - - res = await add_stars('DCN73', event3_session_id, 2) - assert res == {'avg': round((5.0 + 5.0 + 2.0) / 3, 2), 'nr': 3, 'my_rate': 2} - - res = await get_stars('DCN73', event3_session_id) - assert res == {'avg': round((5.0 + 5.0 + 2.0) / 3, 2), 'nr': 3, 'my_rate': 2} - - res = await add_stars('DCN73', event3_session_id, 3) - assert res == {'avg': round((5.0 + 5.0 + 3.0) / 3, 2), 'nr': 3, 'my_rate': 3} - - res = await get_stars('DCN73', event3_session_id) - assert res == {'avg': round((5.0 + 5.0 + 3.0) / 3, 2), 'nr': 3, 'my_rate': 3} - - res = await add_stars('DCN73', event3_session_id, 4) - assert res == {'avg': round((5.0 + 5.0 + 4.0) / 3, 2), 'nr': 3, 'my_rate': 4} - - res = await add_stars('DCN73', event3_session_id, 5) - assert res == {'avg': round((5.0 + 5.0 + 5.0) / 3, 2), 'nr': 3, 'my_rate': 5} - - # check ratings in serialized conference - self.conference = await get_conference(self.conference.id) - cfr = await opencon_serialize(self.conference) - assert cfr['conference_avg_rating'] == {'rates_by_session': {str(event3_session_id): [5, 3]}} - - @pytest.mark.asyncio - async def test_bookmark_event_session(self): - from conferences.controller import register_pretix_order, decode_token, my_bookmarks - res = await register_pretix_order(self.conference, 'PHRJM', push_notification_token='ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]') - token = res['token'] - decoded = decode_token(token) - assert 'pretix_order_id' in decoded - assert decoded['pretix_order_id'] == 'PHRJM' - - from conferences.controller import toggle_bookmark_event_session, opencon_serialize - - cfr = await opencon_serialize(self.conference) - event_session_id = cfr['conference']['idx']['ordered_sessions_by_days']['2023-11-10'][0] - event2_session_id = cfr['conference']['idx']['ordered_sessions_by_days']['2023-11-10'][1] - event3_session_id = cfr['conference']['idx']['ordered_sessions_by_days']['2023-11-10'][2] - - res = await toggle_bookmark_event_session(decoded['pretix_order_id'], event_session_id=event_session_id) - assert res['bookmarked'] - - res = await toggle_bookmark_event_session(decoded['pretix_order_id'], event_session_id=event_session_id) - assert not res['bookmarked'] - - res = await toggle_bookmark_event_session(decoded['pretix_order_id'], event_session_id=event_session_id) - assert res['bookmarked'] - res = await toggle_bookmark_event_session(decoded['pretix_order_id'], event_session_id=event2_session_id) - assert res['bookmarked'] - res = await toggle_bookmark_event_session(decoded['pretix_order_id'], event_session_id=event3_session_id) - assert res['bookmarked'] - - assert {event_session_id, event2_session_id, event3_session_id} == await my_bookmarks(decoded['pretix_order_id']) - - res = await toggle_bookmark_event_session(decoded['pretix_order_id'], event_session_id=event2_session_id) - assert not res['bookmarked'] - - assert {event_session_id, event3_session_id} == await my_bookmarks(decoded['pretix_order_id']) - - @pytest.mark.asyncio - async def test_change_starting_date_for_bookmarked_session(self): - - from conferences.controller import register_pretix_order, decode_token, my_bookmarks, read_xml_file, send_changes_to_bookmakers, find_event_by_unique_id - await register_pretix_order(self.conference, 'PHRJM', push_notification_token='ExponentPushToken[IGOR]') - await register_pretix_order(self.conference, 'DRXSG', push_notification_token='ExponentPushToken[IVO]') - - from conferences.controller import toggle_bookmark_event_session, opencon_serialize - - cfr = await opencon_serialize(self.conference) - event_session_id = cfr['conference']['idx']['ordered_sessions_by_days']['2023-11-10'][0] - - res = await toggle_bookmark_event_session('PHRJM', event_session_id=event_session_id) - assert res['bookmarked'] - res = await toggle_bookmark_event_session('DRXSG', event_session_id=event_session_id) - assert res['bookmarked'] - - content = await read_xml_file(current_file_dir + '/assets/sfscon2023_event1day1_0835.xml') - assert content is not None - - from conferences.controller import add_conference - res = await add_conference(content, source_uri='file://test.xml') - - conference = res['conference'] - assert not res['created'] - assert res['changes'] - - event = await find_event_by_unique_id(res['conference'], '2023day1event1') - - assert json.loads(json.dumps(res['changes'], default=lambda x: str(x))) == { - str(event.id): { - "old_start_timestamp": "2023-11-10 08:30:00+01:00", - "new_start_timestamp": "2023-11-11 08:35:00+01:00" - } - } - - res = await send_changes_to_bookmakers(res['conference'], res['changes']) - - import pprint - print('\n') - pprint.pprint(res) - # - # return - - assert res['nr_enqueued'] == 2 - - @pytest.mark.asyncio - async def test_send_notifications_5_minute_before_start_integral(self): - - from conferences.controller import send_notifications_5_minute_before_start - - res = await send_notifications_5_minute_before_start(conference=self.conference, - now_time=datetime.datetime(2023, 11, 10, 8, 26, 0, )) - - # assert res == {'enqueued_messages': 0, 'test_only': False} - - await ivo_bookmarks_event1(conference=self.conference) - - res = await send_notifications_5_minute_before_start(conference=self.conference, - now_time=datetime.datetime(2023, 11, 10, 8, 26, 0, )) - - # assert res == {'enqueued_messages': 1, 'test_only': False} - - # again same time / expecting 0 - - res = await send_notifications_5_minute_before_start(conference=self.conference, - now_time=datetime.datetime(2023, 11, 10, 8, 26, 0, )) - - # assert res == {'enqueued_messages': 0, 'test_only': False} - - # async def ivo_bookmarks_event1(self, conference): - # - # with patch('conferences.controller.fetch_order_from_prefix', new_callable=AsyncMock) as fetch_order_from_prefix: - # fetch_order_from_prefix.return_value = {'results': [ - # {'order': 'DRXSG', 'attendee_name': 'Igor Jeremic', - # 'attendee_name_parts': {'given_name': 'Ivo', 'family_name': 'Kovacevic'}, - # 'company': 'DigitalCUBE', - # 'subevent': '123', - # 'secret': '8stuwespjgtaxwecjgkvtfmycbvupq3r', - # 'attendee_email': 'ivo@digitalcube.rs'}]} - # res = await conferences.controller.register_pretix_order(conference, 'DRXSG', push_notification_token='ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]') - # - # token = res['token'] - # ivo = conferences.controller.decode_token(token) - # - # import conferences.models as models - # db_ivo = await models.PretixOrder.filter(id_pretix_order=ivo['pretix_order_id']).get_or_none() - # - # ... - # - # from conferences.controller import toggle_bookmark_event_session, opencon_serialize - # cfr = await opencon_serialize(conference) - # - # ide_e = None - # for e in cfr['conference']['db']['sessions']: - # s = cfr['conference']['db']['sessions'][e] - # if s['unique_id'] == '2023day1event1': - # ide_e = e - # break - # - # assert ide_e is not None - # - # res = await toggle_bookmark_event_session(ivo['pretix_order_id'], event_session_id=ide_e) - # assert res['bookmarked'] - # - # return ide_e, db_ivo - - @pytest.mark.asyncio - async def test_send_notifications_5_minute_before_start(self): - import conferences.controller - import tortoise.timezone - - # let see what we have 9 hours before start - n = await conferences.controller.extract_all_session_event_which_starts_in_next_5_minutes(self.conference, - now=tortoise.timezone.make_aware(datetime.datetime(2023, 11, 10, 0, 0, 0, ))) - # assert n == {'ids': {}, 'human_readable': {}} - print(n) - - # let see what we have 5 minutes before start - n = await conferences.controller.extract_all_session_event_which_starts_in_next_5_minutes(self.conference, - now=tortoise.timezone.make_aware(datetime.datetime(2023, 11, 10, 8, 26, 0, ))) - - assert n['human_readable'] == {'Check-in': {'start_at': '2023-11-10 08:30:00+01:00', 'start_in': '4:00 minutes', 'to_notify': []}} - - try: - ide_e, db_ivo = await ivo_bookmarks_event1(conference=self.conference) - except Exception as e: - raise - - res = await conferences.controller.extract_all_session_event_which_starts_in_next_5_minutes(self.conference, - now=tortoise.timezone.make_aware(datetime.datetime(2023, 11, 10, 8, 26, 0, ))) - - assert 'human_readable' in res - assert res['human_readable'] == {'Check-in': {'start_at': '2023-11-10 08:30:00+01:00', - 'start_in': '4:00 minutes', - 'to_notify': ['ivo@digitalcube.rs']}} - - ids = res['ids'] - - res = await conferences.controller.enqueue_5minute_before_notifications(self.conference, ids) - - # assert res == {'enqueued_messages': 1, 'test_only': False} - - res = await conferences.controller.enqueue_5minute_before_notifications(self.conference, ids) - - # assert res == {'enqueued_messages': 0, 'test_only': False} - - -class TestPrinter(TestRegisteredUser): - - async def test(self): - from conferences.controller import get_conference, get_stars - - import conferences.controller as controller - - lanes = os.getenv('CHECKIN_LANES', None) - assert lanes is not None - - lanes = json.loads(lanes) - lane1 = lanes['LANE1'] - - res = await controller.pretix_qrcode_scanned(self.conference.id, - 'secret', - lane1, 'PHRJM') - - # token = res['token'] - # igor = controller.decode_token(token) - # - # assert 'pretix_order_id' in igor - # assert igor['pretix_order_id'] == 'PHRJM' diff --git a/src/workers/push_notifications.py b/src/workers/push_notifications.py deleted file mode 100644 index e633ba4..0000000 --- a/src/workers/push_notifications.py +++ /dev/null @@ -1,90 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Digital CUBE - -import os -import json -import redis -import httpx -import dotenv -import logging -import asyncio - -dotenv.load_dotenv() - - -def setup_logger(logger_name): - current_file_dir = os.path.dirname(os.path.abspath(__file__)) - - logger = logging.getLogger(logger_name) - logger.setLevel(logging.DEBUG) # Set the log level - - # Create handlers - f_handler = logging.FileHandler(f'var/log/opencon/{logger_name}.log') - f_handler.setLevel(logging.DEBUG) # Set the log level for the file handler - - c_handler = logging.StreamHandler() - c_handler.setLevel(logging.DEBUG) # Set the minimum log level for the console handler - - # Create formatters and add it to handlers - f_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s | %(message)s') - f_handler.setFormatter(f_format) - - c_format = logging.Formatter('%(message)s') - c_handler.setFormatter(c_format) - - # Add handlers to the logger - logger.addHandler(f_handler) - logger.addHandler(c_handler) - - # Now, you can write to the log using the custom logger - logger.debug('Logging Initialized') - - return logging.getLogger(logger_name) - - -async def send_notification(item): - log = logging.getLogger('push_notifications') - print("ITEM", item) - try: - json_igor = { - "to": "ExponentPushToken[BCzMMxFrELJNXBLHHGia5T]", - "title": item['subject'], - "body": item['message'] - } - - async with httpx.AsyncClient() as client: - res = await client.post('https://exp.host/--/api/v2/push/send', json=json_igor) - - print(res.json()) - - except Exception as e: - log.critical(f"Error sending push notification: {e}") - - -async def read_redis_queue(queue_name): - redis_host = os.getenv('REDIS_SERVER') - redis_client = redis.Redis(host=redis_host, port=6379, db=0) - - log = logging.getLogger('push_notifications') - log.info("Worker started") - - while True: - res = redis_client.blpop(queue_name.encode('utf-8'), 60 * 5) - if not res: - print('.') - continue - - queue, item = res - - item = item.decode('utf-8') - - item = json.loads(item) - - print(item) - await send_notification(item) - - -if __name__ == "__main__": - setup_logger('push_notifications') - queue_name = "opencon_push_notification" - asyncio.run(read_redis_queue(queue_name)) From 7b530a9662f293edaeee5369f4a338b0f595f5d1 Mon Sep 17 00:00:00 2001 From: Igor Jeremic Date: Wed, 30 Oct 2024 23:42:31 +0100 Subject: [PATCH 2/4] failsafe on amazon --- .env.docker.example | 1 + .env.example | 14 + .gitignore | 13 + LICENSE | 674 +++ LICENSES/CC0-1.0.txt | 121 + LICENSES/GPL-3.0-or-later.txt | 232 ++ README.md | 85 + REUSE.toml | 16 + aws.credentials.example | 4 + calls.http | 68 + config/nginx.admin.config | 37 + config/nginx.admin.config.sample | 41 + config/nginx.global.config.sample | 37 + docker-compose.yaml | 72 + infrastructure/ansible/ansible.cfg | 4 + infrastructure/ansible/deploy.yml | 19 + infrastructure/ansible/hosts | 5 + infrastructure/ansible/requirements.yml | 2 + infrastructure/ansible/roles/.gitignore | 2 + infrastructure/docker-compose.build.yml | 7 + infrastructure/docker-compose.run.yml | 64 + infrastructure/docker/Dockerfile | 27 + infrastructure/docker/Dockerfile.webserver | 35 + requirements.txt | 48 + src/__init__.py | 0 src/app.py | 103 + src/conferences/__init__.py | 2 + src/conferences/api/__init__.py | 4 + src/conferences/api/sfs.py | 233 ++ src/conferences/controller/__init__.py | 4 + src/conferences/controller/conference.py | 1140 +++++ src/conferences/models/__init__.py | 4 + src/conferences/models/conferences.py | 241 ++ src/db_config.py | 31 + src/main.py | 32 + src/pyproject.toml | 4 + src/scripts/update-conf.py | 110 + src/shared/__init__.py | 0 src/shared/ex.py | 22 + src/shared/redis_client.py | 138 + src/shared/setup_logger.py | 48 + src/shared/utils.py | 27 + src/tests/assets/fake_attendees.json | 2682 ++++++++++++ src/tests/assets/sfs2023streaming.yaml | 13 + src/tests/assets/sfs2024.10.14.json | 3660 +++++++++++++++++ src/tests/assets/sfs2024streaming.yaml | 38 + src/tests/assets/sfscon2023.xml | 2023 +++++++++ .../assets/sfscon2023_event1day1_0830.xml | 2023 +++++++++ .../assets/sfscon2023_event1day1_0835.xml | 2023 +++++++++ src/tests/assets/sfscon2023sponsors.yaml | 169 + src/tests/assets/sfscon2024-m.xml | 2248 ++++++++++ ...on2024.1st_session_moved_for_5_minutes.xml | 2248 ++++++++++ .../assets/sfscon2024.session-removed.xml | 2231 ++++++++++ src/tests/assets/sfscon2024.xml | 2248 ++++++++++ src/tests/assets/sfscon2024sponsors.yaml | 224 + src/tests/base_test_classes.py | 106 + src/tests/pytest.ini | 2 + src/tests/test_api_2024.py | 652 +++ src/workers/push_notifications.py | 106 + start.sh | 13 + static/1006.png | Bin 0 -> 5166 bytes static/1006org_logo.png | Bin 0 -> 2299 bytes static/ALLOTROPIA_BN.png | Bin 0 -> 3784 bytes static/CATCHSOLVE_BN.png | Bin 0 -> 3739 bytes static/CHRISTIAN_GAPP_BN.png | Bin 0 -> 5938 bytes static/ECOSTEER_BN.png | Bin 0 -> 1544 bytes static/EDIH_NOI_BN.png | Bin 0 -> 1351 bytes static/ENDIAN_BN.png | Bin 0 -> 2617 bytes static/FSFE_BN.png | Bin 0 -> 2668 bytes static/GRUPPOFOS_BN.png | Bin 0 -> 14742 bytes static/LUGBZ_BN.png | Bin 0 -> 2510 bytes static/LinuxMagazine_BN.png | Bin 0 -> 1559 bytes static/MADEINCIMA_BN.png | Bin 0 -> 7041 bytes static/MNOI_BN.png | Bin 0 -> 1663 bytes static/OW2_BN.png | Bin 0 -> 1228 bytes static/OpenSource-JobHub_BN.png | Bin 0 -> 1366 bytes static/Peer_BN.png | Bin 0 -> 1680 bytes static/QBUS_BN.png | Bin 0 -> 1546 bytes static/RMB_BN.png | Bin 0 -> 1534 bytes static/SHETECH_BN.png | Bin 0 -> 2019 bytes static/STUDIOHUG_BN.png | Bin 0 -> 1156 bytes static/SYMPHONIE_BN.png | Bin 0 -> 5450 bytes static/SpeckTech_BN.png | Bin 0 -> 1857 bytes static/Stickermule_BN.png | Bin 0 -> 2228 bytes static/TELMEKOM_BN.png | Bin 0 -> 8144 bytes static/UNIBZ_BN.png | Bin 0 -> 954 bytes static/VATES_BN.png | Bin 0 -> 7159 bytes static/WUD_BN.png | Bin 0 -> 1079 bytes static/ZIRKONZAHN_BN.png | Bin 0 -> 6713 bytes static/catch-solve.png | Bin 0 -> 4756 bytes static/endian_logo.png | Bin 0 -> 4746 bytes static/fos.png | Bin 0 -> 10351 bytes static/fsfe.png | Bin 0 -> 6238 bytes static/huawei.png | Bin 0 -> 10605 bytes static/iota.png | Bin 0 -> 16198 bytes static/lugbz.png | Bin 0 -> 25667 bytes static/made-in-cima.png | Bin 0 -> 9360 bytes static/old_index.html | 1 + static/ow2.png | Bin 0 -> 4779 bytes static/peer.png | Bin 0 -> 3745 bytes static/progress-group.png | Bin 0 -> 120915 bytes static/qbus.png | Bin 0 -> 4183 bytes static/redhat.png | Bin 0 -> 6747 bytes static/regis.png | Bin 0 -> 9127 bytes static/simedia.png | Bin 0 -> 6705 bytes static/sticker-mule.png | Bin 0 -> 46931 bytes static/telmekom.png | Bin 0 -> 21149 bytes 107 files changed, 26481 insertions(+) create mode 100644 .env.docker.example create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 LICENSES/CC0-1.0.txt create mode 100644 LICENSES/GPL-3.0-or-later.txt create mode 100644 README.md create mode 100644 REUSE.toml create mode 100644 aws.credentials.example create mode 100644 calls.http create mode 100644 config/nginx.admin.config create mode 100644 config/nginx.admin.config.sample create mode 100644 config/nginx.global.config.sample create mode 100644 docker-compose.yaml create mode 100644 infrastructure/ansible/ansible.cfg create mode 100644 infrastructure/ansible/deploy.yml create mode 100644 infrastructure/ansible/hosts create mode 100644 infrastructure/ansible/requirements.yml create mode 100644 infrastructure/ansible/roles/.gitignore create mode 100644 infrastructure/docker-compose.build.yml create mode 100644 infrastructure/docker-compose.run.yml create mode 100644 infrastructure/docker/Dockerfile create mode 100644 infrastructure/docker/Dockerfile.webserver create mode 100644 requirements.txt create mode 100644 src/__init__.py create mode 100644 src/app.py create mode 100644 src/conferences/__init__.py create mode 100644 src/conferences/api/__init__.py create mode 100644 src/conferences/api/sfs.py create mode 100644 src/conferences/controller/__init__.py create mode 100644 src/conferences/controller/conference.py create mode 100644 src/conferences/models/__init__.py create mode 100644 src/conferences/models/conferences.py create mode 100644 src/db_config.py create mode 100644 src/main.py create mode 100644 src/pyproject.toml create mode 100755 src/scripts/update-conf.py create mode 100644 src/shared/__init__.py create mode 100644 src/shared/ex.py create mode 100644 src/shared/redis_client.py create mode 100644 src/shared/setup_logger.py create mode 100644 src/shared/utils.py create mode 100644 src/tests/assets/fake_attendees.json create mode 100644 src/tests/assets/sfs2023streaming.yaml create mode 100644 src/tests/assets/sfs2024.10.14.json create mode 100644 src/tests/assets/sfs2024streaming.yaml create mode 100644 src/tests/assets/sfscon2023.xml create mode 100644 src/tests/assets/sfscon2023_event1day1_0830.xml create mode 100644 src/tests/assets/sfscon2023_event1day1_0835.xml create mode 100644 src/tests/assets/sfscon2023sponsors.yaml create mode 100644 src/tests/assets/sfscon2024-m.xml create mode 100644 src/tests/assets/sfscon2024.1st_session_moved_for_5_minutes.xml create mode 100644 src/tests/assets/sfscon2024.session-removed.xml create mode 100644 src/tests/assets/sfscon2024.xml create mode 100644 src/tests/assets/sfscon2024sponsors.yaml create mode 100644 src/tests/base_test_classes.py create mode 100644 src/tests/pytest.ini create mode 100644 src/tests/test_api_2024.py create mode 100644 src/workers/push_notifications.py create mode 100755 start.sh create mode 100644 static/1006.png create mode 100644 static/1006org_logo.png create mode 100644 static/ALLOTROPIA_BN.png create mode 100644 static/CATCHSOLVE_BN.png create mode 100644 static/CHRISTIAN_GAPP_BN.png create mode 100644 static/ECOSTEER_BN.png create mode 100644 static/EDIH_NOI_BN.png create mode 100644 static/ENDIAN_BN.png create mode 100644 static/FSFE_BN.png create mode 100644 static/GRUPPOFOS_BN.png create mode 100644 static/LUGBZ_BN.png create mode 100644 static/LinuxMagazine_BN.png create mode 100644 static/MADEINCIMA_BN.png create mode 100644 static/MNOI_BN.png create mode 100644 static/OW2_BN.png create mode 100644 static/OpenSource-JobHub_BN.png create mode 100644 static/Peer_BN.png create mode 100644 static/QBUS_BN.png create mode 100644 static/RMB_BN.png create mode 100644 static/SHETECH_BN.png create mode 100644 static/STUDIOHUG_BN.png create mode 100644 static/SYMPHONIE_BN.png create mode 100644 static/SpeckTech_BN.png create mode 100644 static/Stickermule_BN.png create mode 100644 static/TELMEKOM_BN.png create mode 100644 static/UNIBZ_BN.png create mode 100644 static/VATES_BN.png create mode 100644 static/WUD_BN.png create mode 100644 static/ZIRKONZAHN_BN.png create mode 100644 static/catch-solve.png create mode 100644 static/endian_logo.png create mode 100644 static/fos.png create mode 100644 static/fsfe.png create mode 100644 static/huawei.png create mode 100644 static/iota.png create mode 100644 static/lugbz.png create mode 100644 static/made-in-cima.png create mode 100644 static/old_index.html create mode 100644 static/ow2.png create mode 100644 static/peer.png create mode 100644 static/progress-group.png create mode 100644 static/qbus.png create mode 100644 static/redhat.png create mode 100644 static/regis.png create mode 100644 static/simedia.png create mode 100644 static/sticker-mule.png create mode 100644 static/telmekom.png diff --git a/.env.docker.example b/.env.docker.example new file mode 100644 index 0000000..1078872 --- /dev/null +++ b/.env.docker.example @@ -0,0 +1 @@ +DB_HOST=host.docker.internal diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..72c1bff --- /dev/null +++ b/.env.example @@ -0,0 +1,14 @@ +DB_HOST=localhost #host.docker.internal +DB_USERNAME=sfscon +DB_PASSWORD=sfscon +DB_NAME=sfscon +DB_PORT=5432 + +JWT_SECRET_KEY=__SET_ANYTHING_FOR_ENCODING_JWT__ + +XML_URL="https://www.sfscon.it/?calendar=2024&format=xml" + +REDIS_SERVER=redis + +ADMIN_USERNAME=admin +ADMIN_PASSWORD=123 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f60ec23 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +aliases.sh +.mypy_cache +.env +.env.docker +*.pyc +.venv +.idea +*~ +__pycache__ +.pytest_cache +TODO.txt +restore/ +aws.credentials diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/LICENSES/CC0-1.0.txt b/LICENSES/CC0-1.0.txt new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/LICENSES/CC0-1.0.txt @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/LICENSES/GPL-3.0-or-later.txt b/LICENSES/GPL-3.0-or-later.txt new file mode 100644 index 0000000..f6cdd22 --- /dev/null +++ b/LICENSES/GPL-3.0-or-later.txt @@ -0,0 +1,232 @@ +GNU GENERAL PUBLIC LICENSE +Version 3, 29 June 2007 + +Copyright © 2007 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +Preamble + +The GNU General Public License is a free, copyleft license for software and other kinds of works. + +The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. + +For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + +Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. + +Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. + +Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and modification follow. + +TERMS AND CONDITIONS + +0. Definitions. + +“This License” refers to version 3 of the GNU General Public License. + +“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. + +“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. + +To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. + +A “covered work” means either the unmodified Program or a work based on the Program. + +To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. + +To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. + +An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. + +1. Source Code. +The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work. + +A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. + +The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. + +The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same work. + +2. Basic Permissions. +All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. + +3. Protecting Users' Legal Rights From Anti-Circumvention Law. +No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. + +When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. + +4. Conveying Verbatim Copies. +You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. + +5. Conveying Modified Source Versions. +You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. + + c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. + +A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. + +6. Conveying Non-Source Forms. +You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: + + a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. + + d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. + +A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. + +“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. + +If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). + +The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. + +Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. + +7. Additional Terms. +“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or authors of the material; or + + e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. + +All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. + +8. Termination. +You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). + +However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. + +Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. + +Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. + +9. Acceptance Not Required for Having Copies. +You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. + +10. Automatic Licensing of Downstream Recipients. +Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. + +An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. + +11. Patents. +A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”. + +A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. + +In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. + +If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. + +A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. + +12. No Surrender of Others' Freedom. +If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. + +13. Use with the GNU Affero General Public License. +Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. + +14. Revised Versions of this License. +The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. + +Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. + +15. Disclaimer of Warranty. +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. Limitation of Liability. +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +17. Interpretation of Sections 15 and 16. +If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + +If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”. + +You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . + +The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . diff --git a/README.md b/README.md new file mode 100644 index 0000000..1455ba9 --- /dev/null +++ b/README.md @@ -0,0 +1,85 @@ +# opencon + +### + + +### Requirements + +the following software is requirement on your server to be able to run this +app + +- nginx +- docker +- docker compose +- postgresql 14+ + +### Changes introduced/removed in this release: + +- Added anonymous users +- Removed Pretixx integration +- Removed access control module + +### Installation + +- checkout this repository +- run docker compose build +- setup .env file (from .env.example) +- setup .env.docker from .env.docker.example (this file contains different database location, by default, but anything else can be overridden) +- setup global nginx (see configuration file in config/nginx.global.conf.sample +- run docker compose build +- run docker compose up -d + +currently and by default, the database has been setup on host machine +visible from docker containers on host.docker.internal + +this is defined at the top of .env and .env.docker files as + +``` +DB_HOST=localhost +DB_USERNAME=opencon_user # or any other your username +DB_PASSWORD=__your_password__ +DB_NAME=opencon_db # or any other database name +DB_PORT=5432 +``` +and +``` +DB_HOST=host.docker.internal +``` + +create database __db_name__ with read/write/create_tables privilege for +__your_user__ + +as postgres admin + +``` +create role opencon_user with login createdb password '123'; +``` + +as opencon_user + +``` +psql -U opencon_user template1 +create database opencon_db +``` + +### Bootstrap + +- run docker compose up -d + +from your browser open target url and login with username/password defined +in .env + +ADMIN_USERNAME=__your_admin_username__ +ADMIN_PASSWORD=__your_admin_password__ + +click to sync button to sync initial content from sfscon.it + +### Program Data + +When the project is started, the database is empty. The program will automatically create the necessary tables. + +Conference data is pulled from the sfscon.it API via crontab in the conferences container every 5 minutes. + +Therefore, the content will be available to users within 5 minutes or on request through the admin panel. + + diff --git a/REUSE.toml b/REUSE.toml new file mode 100644 index 0000000..2a648ce --- /dev/null +++ b/REUSE.toml @@ -0,0 +1,16 @@ +version = 1 +SPDX-PackageName = "OpenCON" +SPDX-PackageSupplier = "DigitalCUBE " +SPDX-PackageDownloadLocation = "https://m.opencon.dev/" + +[[annotations]] +path = [".env.docker.example", "start.sh", "src/tests/**", "src/shared/**", "config/**", "REUSE.toml", "static/**", ".gitignore", "**.sample", ".env.sample", "docker-compose.yaml", "src/**.yaml", "src/**.xml", "src/docker/**", "README.md", "requirements.txt", "src/pyproject.toml", "src/tests/assets/fake_attendees.json", "src/tests/pytest.ini", "src/migrations/models/**"] +precedence = "aggregate" +SPDX-FileCopyrightText = "2023 DigitalCUBE " +SPDX-License-Identifier = "GPL-3.0-or-later" + +[[annotations]] +path = [".github/**", "infrastructure/**", ".gitignore", ".env.example", "calls.http"] +precedence = "aggregate" +SPDX-FileCopyrightText = "(c) NOI Techpark " +SPDX-License-Identifier = "CC0-1.0" diff --git a/aws.credentials.example b/aws.credentials.example new file mode 100644 index 0000000..6af0612 --- /dev/null +++ b/aws.credentials.example @@ -0,0 +1,4 @@ +[default] +aws_access_key_id=__KEY_ID__ +aws_secret_access_key=__ACCESS_KEY__ +region=eu-central-1 diff --git a/calls.http b/calls.http new file mode 100644 index 0000000..010ee1a --- /dev/null +++ b/calls.http @@ -0,0 +1,68 @@ +##### VSCODE / REST Client https://marketplace.visualstudio.com/items?itemName=humao.rest-client +# Create a .env file and set the corresponding variables +# See all $dotenv fields below + +@endpoint=https://pretix.eu/api/v1/ +@token={{$dotenv PRETIX_TOKEN}} + + +######################### +# organizers/ +######################### + +### +GET {{endpoint}}/organizers/ +Host: pretix.eu +Authorization: Token {{token}} + +######################### +# events +######################### + +GET {{endpoint}}/organizers/noi-digital/events +Host: pretix.eu +Authorization: Token {{token}} + +######################### +# checkin list +######################### + +GET {{endpoint}}/organizers/noi-digital/events/sfscon23/checkinlists +Host: pretix.eu +Authorization: Token {{token}} + +######################### +# checkin list status +######################### + +GET {{endpoint}}/organizers/noi-digital/events/sfscon23/checkinlists/313919/status +Host: pretix.eu +Authorization: Token {{token}} + +######################### +# create conf checkin list status +######################### + +@api=http://localhost:8000 + +GET {{api}}/openapi.json +Content-Type: application/json + +######################### +# create conf checkin list status +######################### + +POST {{api}}/api/conferences +Content-Type: application/json + +{ + "default": "True", + "force": "True" +} + +######################### +# get conferences +######################### + +GET {{api}}/api/conferences +Content-Type: application/json diff --git a/config/nginx.admin.config b/config/nginx.admin.config new file mode 100644 index 0000000..3f772eb --- /dev/null +++ b/config/nginx.admin.config @@ -0,0 +1,37 @@ + +upstream upstream_conferences { ip_hash; server conferences:8000 max_fails=3 fail_timeout=300s; } + + +server { + root /web/admin; + + listen 80 default; + server_name _; + + client_max_body_size 20M; + + location / { + index index.html; + try_files $uri $uri/ /index.html; + } + + location /api { + proxy_pass http://upstream_conferences; + proxy_redirect off; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $remote_addr; + + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_read_timeout 3600s; + } + + + proxy_buffering off; + + rewrite ^/api/(.*)$ /api/$1 break; + rewrite ^/(.*)$ /$1 break; + +} diff --git a/config/nginx.admin.config.sample b/config/nginx.admin.config.sample new file mode 100644 index 0000000..e08d9a5 --- /dev/null +++ b/config/nginx.admin.config.sample @@ -0,0 +1,41 @@ + +upstream upstream_conferences { ip_hash; server conferences:8000 max_fails=3 fail_timeout=300s; } + + +server { + root /web/admin; + + server_name webadmin.app.sfscon.testingmachine.eu app.sfscon.it; + + client_max_body_size 20M; + + location / { + index index.html; + try_files $uri $uri/ /index.html; + } + + location /static { + root /home/digital/app/impresaone; + } + + location /api { + proxy_pass http://upstream_conferences; + proxy_redirect off; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $remote_addr; + + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_read_timeout 3600s; + } + + + proxy_buffering off; + + rewrite ^/api/(.*)$ /api/$1 break; + rewrite ^/(.*)$ /$1 break; + + listen 80; +} diff --git a/config/nginx.global.config.sample b/config/nginx.global.config.sample new file mode 100644 index 0000000..188a048 --- /dev/null +++ b/config/nginx.global.config.sample @@ -0,0 +1,37 @@ +upstream ups1 { ip_hash; server localhost:8001 max_fails=3 fail_timeout=600s; } + +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} + +server { + listen 80; + + index index.html; + + server_name dev.opencon.dev; + + client_max_body_size 100M; + proxy_connect_timeout 600; + proxy_send_timeout 600; + proxy_read_timeout 600; + send_timeout 600; + + location / { + proxy_pass http://ups1; + proxy_redirect off; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $remote_addr; + + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_read_timeout 3600s; + proxy_set_header X-Forwarded-Proto $scheme; + } + + proxy_buffering off; +} + diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..fa20b2e --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,72 @@ +services: + + webserver: + image: nginx + + build: + context: . + dockerfile: infrastructure/docker/Dockerfile.webserver + + depends_on: + - conferences + - push_notifications + + ports: + - 8080:80 + + + conferences: + + build: + context: . + dockerfile: infrastructure/docker/Dockerfile + + env_file: + - .env + - .env.docker + + volumes: + - opencon-logs:/var/log/opencon + +# - ./src/scripts/update-conf.py:/scripts/update-conf.py + + healthcheck: + test: curl --fail http://localhost:8000/openapi.json || exit 1 + interval: 5s + retries: 3 + start_period: 5s + timeout: 5s + + extra_hosts: + - "host.docker.internal:host-gateway" + + depends_on: + redis: + condition: service_started + + push_notifications: + + build: + context: . + dockerfile: infrastructure/docker/Dockerfile + command: python workers/push_notifications.py + env_file: + - .env + volumes: + - ./src/workers:/workers + - opencon-logs:/var/log/opencon + + depends_on: + redis: + condition: service_started + + redis: + command: redis-server + hostname: redis + image: redis:alpine + labels: + NAME: redis + + +volumes: + opencon-logs: diff --git a/infrastructure/ansible/ansible.cfg b/infrastructure/ansible/ansible.cfg new file mode 100644 index 0000000..bec5ce0 --- /dev/null +++ b/infrastructure/ansible/ansible.cfg @@ -0,0 +1,4 @@ +[defaults] +inventory = ./hosts +roles_path = ./roles +retry_files_enabled = False diff --git a/infrastructure/ansible/deploy.yml b/infrastructure/ansible/deploy.yml new file mode 100644 index 0000000..c01d4fe --- /dev/null +++ b/infrastructure/ansible/deploy.yml @@ -0,0 +1,19 @@ +--- +- hosts: all + vars: + ansible_python_interpreter: /usr/bin/python3 + tasks: + - name: Login to GitHub Container Registry + ansible.builtin.shell: + cmd: echo "{{ docker_password }}" | docker login "{{ docker_host }}" --username "{{ docker_username }}" --password-stdin + - name: Execute Docker deployment + ansible.builtin.include_role: + name: ansible-docker-deployment + vars: + docker_deployment_project_name: '{{ project_name }}' + docker_deployment_release_name: '{{ release_name }}' + docker_deployment_release_files: + - local: ../docker-compose.run.yml + remote: docker-compose.yml + - local: ../../.env + remote: .env diff --git a/infrastructure/ansible/hosts b/infrastructure/ansible/hosts new file mode 100644 index 0000000..94e8d78 --- /dev/null +++ b/infrastructure/ansible/hosts @@ -0,0 +1,5 @@ +[test] +docker03.testingmachine.eu ansible_user='noi-techpark-bot' ansible_ssh_common_args='-o StrictHostKeyChecking=no' + +[prod] +docker03.opendatahub.com ansible_user='noi-techpark-bot' ansible_ssh_common_args='-o StrictHostKeyChecking=no' diff --git a/infrastructure/ansible/requirements.yml b/infrastructure/ansible/requirements.yml new file mode 100644 index 0000000..cb9e81b --- /dev/null +++ b/infrastructure/ansible/requirements.yml @@ -0,0 +1,2 @@ +- src: git+https://github.com/noi-techpark/ansible-docker-deployment.git + version: "2.0" diff --git a/infrastructure/ansible/roles/.gitignore b/infrastructure/ansible/roles/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/infrastructure/ansible/roles/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/infrastructure/docker-compose.build.yml b/infrastructure/docker-compose.build.yml new file mode 100644 index 0000000..5421236 --- /dev/null +++ b/infrastructure/docker-compose.build.yml @@ -0,0 +1,7 @@ +services: + + app: + image: ${DOCKER_IMAGE}:${DOCKER_TAG} + build: + context: ../ + dockerfile: infrastructure/docker/Dockerfile diff --git a/infrastructure/docker-compose.run.yml b/infrastructure/docker-compose.run.yml new file mode 100644 index 0000000..8a43af8 --- /dev/null +++ b/infrastructure/docker-compose.run.yml @@ -0,0 +1,64 @@ +services: + + conferences: + image: ${DOCKER_IMAGE}:${DOCKER_TAG} + command: uvicorn main:app --host 0.0.0.0 --reload # sleep 9999999999 + env_file: + - .env + ports: + - "${SERVER_PORT_CONFERENCES}:8000" + volumes: + - opencon-logs:/var/log/opencon + healthcheck: + test: curl --fail http://localhost:8000/openapi.json || exit 1 + interval: 30s + retries: 3 + timeout: 10s + depends_on: + redis: + condition: service_started + postgres: + condition: service_started + + push_notifications: + image: ${DOCKER_IMAGE}:${DOCKER_TAG} + command: python workers/push_notifications.py + env_file: + - .env + ports: + - "${SERVER_PORT_PUSH_NOTIFICATIONS}:8080" + volumes: + - opencon-logs:/var/log/opencon + depends_on: + redis: + condition: service_started + postgres: + condition: service_started + conferences: + condition: service_healthy + + postgres: + image: "postgres:14-alpine" + environment: + POSTGRES_DB: ${DB_NAME} + POSTGRES_USER: ${DB_USERNAME} + POSTGRES_PASSWORD: ${DB_PASSWORD} + hostname: postgres + volumes: + - postgres-data:/var/lib/postgresql/data + ports: + - 5432:5432 + + redis: + command: redis-server + hostname: redis + image: redis:alpine + labels: + NAME: redis + ports: + - 6379:6379 + +volumes: + opencon-logs: + postgres-data: + diff --git a/infrastructure/docker/Dockerfile b/infrastructure/docker/Dockerfile new file mode 100644 index 0000000..40eede7 --- /dev/null +++ b/infrastructure/docker/Dockerfile @@ -0,0 +1,27 @@ +FROM python:3.12.7 + +ENV PYTHONUNBUFFERED 1 + +WORKDIR / + +COPY src . + +RUN apt update + +RUN apt install -y joe vim redis postgresql-client cron + + +RUN pip install --upgrade pip +RUN pip install wheel + +COPY requirements.txt ./requirements.txt +RUN pip install -r requirements.txt + +COPY start.sh /start.sh +RUN chmod +x /start.sh + +COPY ./src/scripts /scripts + +COPY ./aws.credentials /root/.aws/credentials + +CMD ["./start.sh"] \ No newline at end of file diff --git a/infrastructure/docker/Dockerfile.webserver b/infrastructure/docker/Dockerfile.webserver new file mode 100644 index 0000000..d7f1b5a --- /dev/null +++ b/infrastructure/docker/Dockerfile.webserver @@ -0,0 +1,35 @@ +FROM node:latest AS build + +WORKDIR /app + + +# TODO: REMOVE THIS + +RUN git clone https://github.com/digital-cube/sfscon2024-admin.git + + + +# TODO: UNCOMMENT THIS +# RUN git clone https://github.com/noi-techpark/it.sfscon.app.webadmin.git sfscon2024-admin + + + + +WORKDIR /app/sfscon2024-admin + +RUN npm install + +RUN npm run build + + + +FROM nginx:alpine + +WORKDIR /web/admin + +COPY ./config/nginx.admin.config /etc/nginx/conf.d/default.conf + +COPY --from=build /app/sfscon2024-admin/dist/sfscon-admin/browser /web/admin + +EXPOSE 80 + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..d796e1d --- /dev/null +++ b/requirements.txt @@ -0,0 +1,48 @@ +aerich==0.7.2 +aioredis==2.0.1 +aiosqlite==0.17.0 +annotated-types==0.6.0 +anyio==3.7.1 +async-timeout==4.0.3 +asyncpg==0.28.0 +beautifulsoup4==4.12.2 +certifi==2023.7.22 +click==8.1.7 +databases==0.8.0 +dictdiffer==0.9.0 +Faker==19.13.0 +fastapi==0.104.0 +h11==0.14.0 +httpcore==0.18.0 +httpx==0.25.0 +idna==3.4 +iniconfig==2.0.0 +iso8601==1.1.0 +packaging==23.2 +Pillow==10.1.0 +pluggy==1.3.0 +psycopg2-binary==2.9.9 +pydantic==2.4.2 +pydantic_core==2.10.1 +PyJWT==2.8.0 +pypika-tortoise==0.1.6 +pytest==7.4.3 +pytest-asyncio==0.21.1 +python-dateutil==2.8.2 +python-dotenv==1.0.0 +python-slugify==8.0.1 +pytz==2023.3.post1 +PyYAML==6.0.1 +redis==5.0.1 +six==1.16.0 +sniffio==1.3.0 +soupsieve==2.5 +SQLAlchemy==1.4.49 +starlette==0.27.0 +text-unidecode==1.3 +tomlkit==0.12.1 +tortoise-orm==0.20.0 +typing_extensions==4.8.0 +uvicorn==0.23.2 +xmltodict==0.13.0 +boto3==1.35.45 diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/app.py b/src/app.py new file mode 100644 index 0000000..408bafb --- /dev/null +++ b/src/app.py @@ -0,0 +1,103 @@ +# SPDX-License-Identifier: GPL-3.0-or-later +# SPDX-FileCopyrightText: 2023 Digital CUBE + +import logging +import os +import uuid +from contextlib import asynccontextmanager + +import psycopg2 +from dotenv import load_dotenv +from fastapi import Depends, FastAPI +from tortoise import Tortoise + +load_dotenv() + +from db_config import DB_CONFIG + +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger(__name__) + + +@asynccontextmanager +async def lifespan(app: FastAPI): + await startup_event() + yield + await shutdown_event() + + +async def startup_event(): + logger.info("Starting up...") + + test_mode = os.getenv("TEST_MODE", "false").lower() == "true" + + test_mode_pfx = 'test_' if test_mode else '' + + db_name = f"{test_mode_pfx}{os.getenv('DB_NAME')}" + + db_url = f"postgres://{os.getenv('DB_USERNAME')}:{os.getenv('DB_PASSWORD')}@{os.getenv('DB_HOST')}:{os.getenv('DB_PORT')}/{db_name}" + + if test_mode: + terminate_sessions_sql = f""" + SELECT pg_terminate_backend(pg_stat_activity.pid) + FROM pg_stat_activity + WHERE pg_stat_activity.datname = '{db_name}' + AND pid <> pg_backend_pid(); + """ + + conn = psycopg2.connect(user=os.getenv('DB_USERNAME'), password=os.getenv('DB_PASSWORD'), database='template1', host=os.getenv('DB_HOST')) + + conn.autocommit = True + + cur = conn.cursor() + + # Terminate active sessions + cur.execute(terminate_sessions_sql) + + cur.execute(f'DROP DATABASE IF EXISTS {db_name}') + + # Create a new database + cur.execute(f'CREATE DATABASE {db_name}') + + cur.close() + conn.close() + + # Initialize Tortoise ORM + await Tortoise.init( + db_url=db_url, + modules={"models": ["conferences.models"]} # Assuming models.py is in the same directory + ) + + # Generate the database schema + try: + await Tortoise.generate_schemas() + except Exception as e: + raise + ... + + # if os.getenv('TEST_MODE', 'false').lower() == 'true': + # yield + # await Tortoise.close_connections() + + +async def test_dependency_startup(): + if os.getenv('TEST_MODE', 'false').lower() == 'true': + await startup_event() + yield + await shutdown_event() + else: + yield + + +async def shutdown_event(): + logger.info("Shutting down...") + await Tortoise.close_connections() + + +def get_app(): + if not hasattr(get_app, 'app'): + get_app.app = FastAPI(lifespan=lifespan) + + return get_app.app + +# app = get_app() diff --git a/src/conferences/__init__.py b/src/conferences/__init__.py new file mode 100644 index 0000000..a30aa4f --- /dev/null +++ b/src/conferences/__init__.py @@ -0,0 +1,2 @@ +# SPDX-License-Identifier: GPL-3.0-or-later +# SPDX-FileCopyrightText: 2023 Digital CUBE diff --git a/src/conferences/api/__init__.py b/src/conferences/api/__init__.py new file mode 100644 index 0000000..eda74b9 --- /dev/null +++ b/src/conferences/api/__init__.py @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: GPL-3.0-or-later +# SPDX-FileCopyrightText: 2023 Digital CUBE + +from .sfs import * diff --git a/src/conferences/api/sfs.py b/src/conferences/api/sfs.py new file mode 100644 index 0000000..604800e --- /dev/null +++ b/src/conferences/api/sfs.py @@ -0,0 +1,233 @@ +# SPDX-License-Identifier: GPL-3.0-or-later +# SPDX-FileCopyrightText: 2023 Digital CUBE +import datetime +import os +import uuid +from typing import Optional, Union + +import jwt +import pydantic +from fastapi import HTTPException, Query, Request +from fastapi.middleware.cors import CORSMiddleware + +import conferences.controller as controller +import conferences.models as models +from app import get_app +from conferences.controller import ConferenceImportRequestResponse + +app = get_app() + +from fastapi import Depends +from fastapi.security import OAuth2PasswordBearer + + +class PushNotificationRequest(pydantic.BaseModel): + push_notification_token: Optional[Union[None, str]] = Query(default=None) + +async def verify_admin_token(token): + try: + JWT_SECRET_KEY = os.getenv('JWT_SECRET_KEY') + decoded = jwt.decode(token, JWT_SECRET_KEY, algorithms=['HS256']) + if decoded and 'username' in decoded and decoded['username'] == 'admin': + return decoded + + raise HTTPException(status_code=401, detail={"code": "INVALID_TOKEN", "message": "Invalid token"}) + except Exception as e: + raise HTTPException(status_code=401, detail={"code": "INVALID_TOKEN", "message": "Invalid token"}) + +async def verify_token(token): + try: + JWT_SECRET_KEY = os.getenv('JWT_SECRET_KEY') + decoded = jwt.decode(token, JWT_SECRET_KEY, algorithms=['HS256']) + + user = await controller.get_user(decoded['id_user']) + if not user: + raise HTTPException(status_code=401, + detail={"code": "INVALID_TOKEN", "message": "Invalid token, user not found"}) + + return decoded + except Exception as e: + raise HTTPException(status_code=401, detail={"code": "INVALID_TOKEN", "message": "Invalid token"}) + + + + +oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/api/authorize") + +oauth2_scheme_admin = OAuth2PasswordBearer(tokenUrl="/api/admin/login") + +origins = ["*"] + +app.add_middleware( + CORSMiddleware, + allow_origins=origins, +) + + +@app.get('/api/authorize') +async def create_authorization(push_notification_token: Optional[str] = Query(default=None)): + JWT_SECRET_KEY = os.getenv('JWT_SECRET_KEY', 'secret') + + id_user = await controller.authorize_user(push_notification_token) + + payload = { + 'id_user': id_user, + 'exp': datetime.datetime.utcnow() + datetime.timedelta(days=2 * 365), + } + + encoded_jwt = jwt.encode(payload, JWT_SECRET_KEY, algorithm='HS256') + + return {'token': encoded_jwt} + + +@app.post('/api/authorize') +async def create_authorization_post(): + JWT_SECRET_KEY = os.getenv('JWT_SECRET_KEY', 'secret') + + id_user = await controller.authorize_user() + + payload = { + 'id_user': id_user, + 'exp': datetime.datetime.utcnow() + datetime.timedelta(days=2 * 365), + } + + encoded_jwt = jwt.encode(payload, JWT_SECRET_KEY, algorithm='HS256') + + return {'token': encoded_jwt} + + +@app.post('/api/notification-token') +async def store_notification_token(request: PushNotificationRequest, token: str = Depends(oauth2_scheme)): + decoded = await verify_token(token) + user = await controller.get_user(decoded['id_user']) + user.push_notification_token = request.push_notification_token + await user.save() + + +@app.get('/api/me') +async def get_me(token: str = Depends(oauth2_scheme)): + return await verify_token(token) + + +class ImportConferenceRequest(pydantic.BaseModel): + # use_local_xml: Optional[Union[bool, None]] = False + use_local_xml: Optional[bool] = False + local_xml_fname: Optional[str] = 'sfscon2024.xml' + group_notifications_by_user: Optional[bool] = True + +@app.post('/api/admin/import-xml', response_model=ConferenceImportRequestResponse,) +async def admin_import_conference_xml_api( request: ImportConferenceRequest = None, token: str = Depends(oauth2_scheme_admin)): + await verify_admin_token(token) + + if request is None: + request = ImportConferenceRequest() + + return await controller.do_import_xml(request) + + + +@app.post('/api/import-xml', response_model=ConferenceImportRequestResponse, ) +async def import_conference_xml_api(_request: Request, request: ImportConferenceRequest = None): + + if _request.client.host not in ('localhost', '127.0.0.1', '::1'): + raise HTTPException(status_code=401, detail={"code": "INVALID_HOST", "message": "Invalid host"}) + + if request is None: + request = ImportConferenceRequest() + + return await controller.do_import_xml(request) + + + +@app.get('/api/conference') +async def get_current_conference(last_updated: Optional[str] = Query(default=None), + token: str = Depends(oauth2_scheme)): + # return verify_token(token) + + decoded = await verify_token(token) + return await controller.opencon_serialize_anonymous(decoded['id_user'], await controller.get_current_conference(), + last_updated=last_updated) + + +@app.get('/api/conference/static') +async def get_current_conference_static(_request: Request): + if _request.client.host not in ('localhost', '127.0.0.1', '::1'): + raise HTTPException(status_code=401, detail={"code": "INVALID_HOST", "message": "Invalid host"}) + + return await controller.opencon_serialize_static(await controller.get_current_conference()) + + + +class RateRequest(pydantic.BaseModel): + rating: int + + +@app.post('/api/sessions/{id_session}/rate') +async def rate_session(id_session: uuid.UUID, request: RateRequest, token: str = Depends(oauth2_scheme)): + decoded = await verify_token(token) + return await controller.rate_session(id_user=decoded['id_user'], id_session=id_session, rate=request.rating) + + +@app.post('/api/sessions/{id_session}/bookmarks/toggle') +async def toggle_bookmark_for_session(id_session: uuid.UUID, token: str = Depends(oauth2_scheme)): + decoded = await verify_token(token) + return await controller.bookmark_session(id_user=decoded['id_user'], id_session=id_session) + + +class AdminLoginRequest(pydantic.BaseModel): + username: str + password: str + + +@app.post('/api/admin/login') +async def login_admin(request: AdminLoginRequest): + if (request.username, request.password) != (os.getenv('ADMIN_USERNAME'), os.getenv('ADMIN_PASSWORD')): + raise HTTPException(status_code=401, + detail={"code": "INVALID_ADMIN_USERNAME_OR_PASSWORD", + "message": "Invalid admin username or password"}) + + JWT_SECRET_KEY = os.getenv('JWT_SECRET_KEY', 'secret') + + payload = { + 'username': 'admin', + 'exp': datetime.datetime.utcnow() + datetime.timedelta(days=2), + } + + encoded_jwt = jwt.encode(payload, JWT_SECRET_KEY, algorithm='HS256') + + return {'token': encoded_jwt} + + +@app.get('/api/admin/dashboard') +async def get_dashboard(): + return await controller.get_dashboard() + +@app.get('/api/admin/users') +async def get_users_with_bookmarks( + csv: Optional[bool] = False, + order_field: Optional[str] = None, + order_direction: Optional[models.SortOrder] = None, + token: str = Depends(oauth2_scheme_admin)): + await verify_admin_token(token) + if csv: + return await controller.csv_users() + + return {'data': await controller.get_all_anonymous_users_with_bookmarked_sessions(order_field, order_direction)} + + +@app.get('/api/admin/sessions') +async def get_sessions_by_rate( + csv: Optional[bool] = False, + order_field: Optional[str] = None, + order_direction: Optional[models.SortOrder] = None, + token: str = Depends(oauth2_scheme_admin)): + await verify_admin_token(token) + if csv: + return await controller.csv_sessions() + return {'data': await controller.get_sessions_by_rate(order_field, order_direction)} + + +@app.get('/api/admin/summary') +async def get_event_summary(token: str = Depends(oauth2_scheme_admin)): + await verify_admin_token(token) + return await controller.get_event_summary() \ No newline at end of file diff --git a/src/conferences/controller/__init__.py b/src/conferences/controller/__init__.py new file mode 100644 index 0000000..0e06b93 --- /dev/null +++ b/src/conferences/controller/__init__.py @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: GPL-3.0-or-later +# SPDX-FileCopyrightText: 2023 Digital CUBE + +from .conference import * diff --git a/src/conferences/controller/conference.py b/src/conferences/controller/conference.py new file mode 100644 index 0000000..febd111 --- /dev/null +++ b/src/conferences/controller/conference.py @@ -0,0 +1,1140 @@ +# SPDX-License-Identifier: GPL-3.0-or-later +# SPDX-FileCopyrightText: 2023 Digital CUBE +import csv +import datetime +import io +import json +import logging +import os +import random +import re +import uuid +from typing import Optional + +import httpx +import pydantic +import redis +import slugify +import tortoise.timezone +import xmltodict +import yaml +from fastapi import HTTPException, status +from fastapi.responses import StreamingResponse + +import conferences.models as models +import shared.ex as ex + +log = logging.getLogger('conference_logger') +current_file_dir = os.path.dirname(os.path.abspath(__file__)) + +rlog = logging.getLogger('redis_logger') +from tortoise.functions import Avg, Count + + +class ConferenceImportRequestResponse(pydantic.BaseModel): + id: str + created: bool + changes: dict + + +async def db_add_conference(name, acronym, source_uri): + try: + conference = await models.Conference.create(name=name, acronym=acronym, source_uri=source_uri) + await models.Location.create(name='Noi Tech Park', slug='noi', conference=conference, ) + + except Exception as e: + log.critical(f'Error adding conference {name} {acronym} {source_uri} :: {str(e)}') + raise + + try: + entrances = os.getenv("CHECKIN_LANES", None) + if entrances: + entrances = json.loads(entrances) + + for entrance in entrances: + await models.Entrance.create(name=entrance, id=entrances[entrance], conference=conference, ) + + except Exception as e: + log.critical(f'Error parsing ENTRANCES :: {str(e)}') + raise + + return conference + + +async def read_xml_file(fname='sfscon2023.xml'): + with open(fname, 'r') as f: + content = xmltodict.parse(f.read(), encoding='utf-8') + return content['schedule'] + + +async def db_add_or_update_tracks(conference, content_tracks): + order = 0 + + tracks_by_name = {} + cvt = {'#text': 'name', '@color': 'color'} + + for track in content_tracks['track']: + order += 1 + defaults = {'conference': conference, 'order': order, 'color': 'black'} + + # TODO: Remove this after Luka fix it in XML + + if track == 'Main track - Main track': + track = 'Main track' + + if type(track) == str: + defaults['name'] = track + else: + for k, v in track.items(): + if k in cvt: + defaults[cvt[k]] = v + + defaults['slug'] = slugify.slugify(defaults['name']) + + try: + db_track = await models.Track.filter(conference=conference, name=defaults['name']).first() + if not db_track: + db_track = await models.Track.create(**defaults) + else: + await db_track.update_from_dict(defaults) + + except Exception as e: + log.critical(f'Error adding track {defaults["name"]} :: {str(e)}') + raise + + tracks_by_name[db_track.name] = db_track + + if 'SFSCON' not in tracks_by_name: + db_track = await models.Track.filter(conference=conference, name='SFSCON').get_or_none() + if not db_track: + db_track = await models.Track.create( + **{'conference': conference, 'order': -1, 'name': f'SFSCON', 'slug': f'sfscon', 'color': 'black'}) + + tracks_by_name['SFSCON'] = db_track + + return tracks_by_name + + +async def convert_xml_to_dict(xml_text): + content = xmltodict.parse(xml_text, encoding='utf-8') + return content['schedule'] + + +def remove_html(text): + # return text + + if not text: + return None + + for t in ('
', '
', '
', '

', '

'): + text = text.replace(t, '\n') + + for t in ('', ''): + if t in text: + text = text.replace(t, '|Text style={styles.bold}|') + + for t in ('', ''): + if t in text: + text = text.replace(t, '|Text style={styles.italic}|') + + for t in ('', '', '', ''): + if t in text: + text = text.replace(t, '|/Text|') + + # Define a regular expression pattern to match HTML tags + pattern = re.compile('<.*?>') + + # Use the pattern to remove all HTML tags + clean_text = re.sub(pattern, '', text) + + clean_text = clean_text.replace('|Text style={styles.bold}|', '') + clean_text = clean_text.replace('|Text style={styles.italic}|', '') + clean_text = clean_text.replace('|/Text|', '') + # Remove any extra whitespace + clean_text = ' '.join(clean_text.split()) + + return clean_text + + +async def fetch_xml_content(use_local_xml=False, local_xml_fname='sfscon2024.xml'): + if use_local_xml: + current_file_folder = os.path.dirname(os.path.realpath(__file__)) + if use_local_xml: + with open(current_file_folder + f'/../../tests/assets/{local_xml_fname}', 'r') as f: + return await convert_xml_to_dict(f.read()) + + XML_URL = os.getenv("XML_URL", None) + + if not XML_URL: + raise ex.AppException('XML_URL_NOT_SET', 'XML_URL not set') + + async with httpx.AsyncClient() as client: + try: + res = await client.get(XML_URL) + + if res.status_code != 200: + raise ex.AppException('ERROR_FETCHING_XML', XML_URL) + + # for debugging purposes + with open('/tmp/last_saved_xml.xml', 'wt') as f: + f.write(res.text) + + dict_content = await convert_xml_to_dict(res.text) + with open('/tmp/last_saved_json.json', 'wt') as f: + f.write(json.dumps(dict_content, ensure_ascii=False, indent=1)) + + return dict_content + except Exception as e: + log.critical(f'Error fetching XML from {XML_URL} :: {str(e)}') + raise + + +async def add_sessions(conference, content, tracks_by_name): + db_location = await models.Location.filter(conference=conference, slug='noi').get_or_none() + + changes = {} + + await models.ConferenceLecturer.filter(conference=conference).delete() + + def get_or_raise(key, obj): + + if key == '@unique_id' and not '@unique_id' in obj: + return None + + return obj[key] + + # # TODO: Ubi ovo kad srede unique - id obrisi od 143-145 linije + # if key == '@unique_id': + # # if key not in obj: + # return obj['@id'] + # + # if key not in obj: + # raise HTTPException(status_code=status.HTTP_406_NOT_ACCEPTABLE, + # detail=f"{key.upper()}_NOT_FOUND") + # return obj[key] + + # test for duplicated unique_id + + events_by_unique_id = {} + + all_uids = set() + for day in content['day']: + + for room in day['room']: + room_event = room['event'] + if type(room_event) == dict: + room_event = [room_event] + for event in room_event: + if type(event) != dict: + continue + unique_id = get_or_raise('@unique_id', event) + if not unique_id: + continue + + if unique_id in all_uids: + continue + + all_uids.add(unique_id) + + if unique_id == '2023day1event5': + ... + if unique_id in events_by_unique_id: + raise HTTPException(status_code=status.HTTP_406_NOT_ACCEPTABLE, + detail={"code": f"EVENT_UNIQUE_ID_ALREADY_EXISTS", + "message": f"Event {unique_id} already exists"}) + + events_by_unique_id[unique_id] = unique_id + + all_uids = set() + + current_sessions_by_unique_id = { + s.unique_id: s for s in + await models.EventSession.filter(conference=conference).all()} + + sessions_in_this_xml_by_unique_id = {} + + for day in content['day']: + + date = day.get('@date', None) + if not date: + raise HTTPException(status_code=status.HTTP_406_NOT_ACCEPTABLE, + detail={"code": "DAY_DATE_NOT_VALID", "message": "Day date is not valid"}) + + room_by_name = {} + + for room in day['room']: + + room_name = room.get('@name', None) + + if not room_name: + raise HTTPException(status_code=status.HTTP_406_NOT_ACCEPTABLE, + detail={"code": "ROOM_NAME_NOT_VALID", "message": "Room name is not valid"}) + + room_slug = slugify.slugify(room_name) + + db_room = await models.Room.filter(conference=conference, + location=db_location, + slug=room_slug).first() + + if not db_room: + db_room = await models.Room.create(conference=conference, + location=db_location, + name=room_name, slug=room_slug) + + if db_room.name not in room_by_name: + room_by_name[db_room.name] = db_room + + room_event = room['event'] + if type(room_event) == dict: + room_event = [room_event] + for event in room_event: + + # try: + # if event['@id'] == '654a0e4cbd1d807a6ed7109ee6dc4ddb16ef4048a852e': + # print("\nFIND FSFE\n") + # except Exception as e: + # ... + # else: + # ... + # print(event['title']) + + if type(event) != dict: + continue + unique_id = get_or_raise('@unique_id', event) + if not unique_id: + continue + + if unique_id in all_uids: + continue + + all_uids.add(unique_id) + + title = get_or_raise('title', event) + try: + url = get_or_raise('url', event) + except Exception as e: + url = None + + slug = slugify.slugify(title) + track_name = event.get('track', None) + if type(track_name) == dict: + track_name = track_name['#text'] + + # TODO: Remove this after Luka fix it in XML + + if track_name in ('SFSCON - Main track', 'Main track - Main track'): + track_name = 'SFSCON' # 'Main track' + + track = tracks_by_name[track_name] if track_name and track_name in tracks_by_name else None + # event_type = event.get('@type', None) + event_start = event.get('start', None) + description = event.get('description', None) + abstract = event.get('abstract', None) + + # no_bookmark = event.get('@bookmark', False) + can_bookmark = event.get('@bookmark', "0") == "1" + can_rate = event.get('@rating', "0") == "1" + + if not can_bookmark: + ... + else: + ... + + if event_start and len(event_start) == 5: + event_start = datetime.datetime(year=int(date[0:4]), + month=int(date[5:7]), + day=int(date[8:10]), + hour=int(event_start[0:2]), + minute=int(event_start[3:5])) + else: + event_start = None + + event_duration = event.get('duration', None) + if event_duration and len(event_duration) == 5: + event_duration = int(event_duration[0:2]) * 60 * 60 + int(event_duration[3:5]) * 60 + else: + event_duration = None + + try: + track_name = track.name + room_name = db_room.name + + if room_name == 'Seminar 2': + event_start += datetime.timedelta(milliseconds=1) + if room_name == 'Seminar 3': + event_start += datetime.timedelta(milliseconds=2) + if room_name == 'Seminar 4': + event_start += datetime.timedelta(milliseconds=3) + if room_name.startswith('Auditorium'): + event_start += datetime.timedelta(milliseconds=4) + + db_event = await models.EventSession.filter(conference=conference, unique_id=unique_id).first() + # print("db_event", db_event) + if unique_id == '2023day1event5': + ... + + str_start_time = event_start.strftime('%Y-%m-%d %H:%M:%S') if event_start else None + + if not db_event: + db_event = await models.EventSession.create(conference=conference, + title=title, + url=url, + abstract=abstract, + description=remove_html(description), + unique_id=unique_id, + bookmarkable=can_bookmark, + rateable=can_rate, + track=track, + room=db_room, + str_start_time=str_start_time, + start_date=event_start, + duration=event_duration, + end_date=event_start + datetime.timedelta( + seconds=event_duration) if event_start and event_duration else None, + ) + + sessions_in_this_xml_by_unique_id[unique_id] = db_event + + # await models.StarredSession.create(event_session=db_event, + # nr_votes=0, + # total_stars=0, + # avg_stars=0) + else: + + event_start = tortoise.timezone.make_aware(event_start) + if event_start != db_event.start_date: + changes[str(db_event.id)] = {'old_start_timestamp': db_event.start_date, + 'new_start_timestamp': event_start} + + await db_event.update_from_dict({'title': title, 'abstract': abstract, + 'description': description, + 'unique_id': unique_id, + 'bookmarkable': can_bookmark, + 'rateable': can_rate, + 'track': track, + 'duration': event_duration, + 'db_room': db_room, + 'str_start_time': str_start_time, + 'start_date': event_start, + 'end_date': event_start + datetime.timedelta( + seconds=event_duration) if event_start and event_duration else None}) + + await db_event.save() + + sessions_in_this_xml_by_unique_id[unique_id] = db_event + + except Exception as e: + log.critical(f'Error adding event {title} :: {str(e)}') + raise + + persons = event.get('persons', []) + + if persons: + persons = persons['person'] + + if type(persons) == dict: + persons = [persons] + + event_persons = [] + + for person in persons: + + try: + db_person = await models.ConferenceLecturer.filter(conference=conference, + external_id=person['@id']).get_or_none() + except Exception as e: + log.critical(f'Error adding person {person["#text"]} :: {str(e)}') + raise + + display_name = person['#text'] + # bio = person.get('@bio', None) + + bio = models.ConferenceLecturer.fix_bio(person.get('@bio', None)) + + pid = person.get('@id', None) + organization = person.get('@organization', None) + thumbnail_url = person.get('@thumbnail', None) + first_name = display_name.split(' ')[0].capitalize() + last_name = ' '.join(display_name.split(' ')[1:]).capitalize() + social_networks = person.get('@socials', None) + social_networks = json.loads(social_networks) if social_networks else [] + + if not db_person: + try: + db_person = await models.ConferenceLecturer.create(conference=conference, + external_id=pid, + bio=remove_html(bio), + social_networks=social_networks, + first_name=first_name, + last_name=last_name, + display_name=display_name, + thumbnail_url=thumbnail_url, + slug=slugify.slugify(display_name), + organization=organization, + ) + except Exception as e: + log.critical(f'Error adding person {person["#text"]} :: {str(e)}') + raise + else: + await db_person.update_from_dict({'bio': remove_html(bio), + 'social_networks': social_networks, + 'first_name': first_name, + 'last_name': last_name, + 'display_name': display_name, + 'thumbnail_url': thumbnail_url, + 'slug': slugify.slugify(display_name), + 'organization': organization, + }) + + await db_person.save() + + event_persons.append(db_person) + + if event_persons: + await db_event.fetch_related('lecturers') + await db_event.lecturers.add(*event_persons) + + current_uid_keys = set(current_sessions_by_unique_id.keys()) + event_session_uid_keys = set(sessions_in_this_xml_by_unique_id.keys()) + + to_delete = None + + if current_uid_keys and current_uid_keys != event_session_uid_keys: + to_delete = current_uid_keys - event_session_uid_keys + for ide in to_delete: + e = current_sessions_by_unique_id[ide] + changes[str(e.id)] = {'old_start_timestamp': e.start_date, 'new_start_timestamp': None} + + # removing will be later, after sending notifications + + return changes, to_delete + + +async def send_changes_to_bookmakers(changes, group_4_user=True): + log.info('-' * 100) + log.info("send_changes_to_bookmakers") + + changed_sessions = changes.keys() + # all_anonymous_bookmarks = await models.AnonymousBookmark.filter(session_id__in=changed_sessions).all() + + notification2token = {} + + from html import unescape + def clean_text(text): + # Unescape any HTML entities (like –) + text = unescape(text) + + # Remove special characters (adjust regex pattern as needed) + cleaned_text = re.sub(r'[^\w\s.,:;!?-]', '', text) + + return cleaned_text + + from shared.redis_client import RedisClientHandler + redis_client = RedisClientHandler.get_redis_client() + # with redis.Redis(host=os.getenv('REDIS_SERVER'), port=6379, db=0) as r: + + if True: + + q = models.EventSession.filter(id__in=changed_sessions) + for session in await q: + print("S1", session.id) + log.info(f"S1 {session.id}") + + q = models.EventSession.filter(id__in=changed_sessions, + anonymous_bookmarks__user__push_notification_token__isnull=False + ).prefetch_related('anonymous_bookmarks', + 'room', + 'anonymous_bookmarks__user' + ).distinct() + + s = q.sql() + + log.info("X") + + notify_users = {} + for session in await q: + + log.info('-' * 100) + log.info(f"Session {session.id}") + + for bookmarks4session in session.anonymous_bookmarks: + + # log.info(f" bookmarks4session {bookmarks4session}") + + _from = changes[str(session.id)]['old_start_timestamp'].strftime('%m.%d. %H:%M') + _to = changes[str(session.id)]['new_start_timestamp'].strftime('%m.%d. %H:%M') if \ + changes[str(session.id)]['new_start_timestamp'] else None + + if changes[str(session.id)]['new_start_timestamp'] and changes[str(session.id)][ + 'old_start_timestamp'].date() == changes[str(session.id)][ + 'new_start_timestamp'].date(): + _from = changes[str(session.id)]['old_start_timestamp'].strftime('%H:%M') + _to = changes[str(session.id)]['new_start_timestamp'].strftime('%H:%M') + + if not _to: + notification = "Session '" + clean_text(session.title) + "' has been cancelled" + else: + notification = "Session '" + clean_text( + session.title) + "' has been rescheduled from " + _from + " to " + _to + f' in room {session.room.name}' + + if bookmarks4session.user.push_notification_token not in notification2token: + notification2token[bookmarks4session.user.push_notification_token] = [] + notification2token[bookmarks4session.user.push_notification_token].append(notification) + + if not group_4_user: + pn_payload = {'id': bookmarks4session.user.push_notification_token, + 'expo_push_notification_token': bookmarks4session.user.push_notification_token, + 'subject': "Event rescheduled", + 'message': notification, + 'data': { + 'command': 'SESSION_START_CHANGED', + 'session_id': str(session.id), + 'value': changes[str(session.id)]['new_start_timestamp'].strftime( + '%Y-%m-%d %H:%M:%S') + } + } + + log.info(f"SENDING PUSH NOTIFICATION TO {bookmarks4session.user.push_notification_token}") + redis_client.push_message('opencon_push_notification', pn_payload) + + else: + if bookmarks4session.user_id not in notify_users: + notify_users[bookmarks4session.user_id] = { + 'token': bookmarks4session.user.push_notification_token, 'sessions': set()} + notify_users[bookmarks4session.user_id]['sessions'].add(bookmarks4session.session_id) + + if group_4_user and notify_users: + for id_user in notify_users: + pn_payload = {'id': notify_users[id_user]['token'], + 'expo_push_notification_token': notify_users[id_user]['token'], + 'subject': "Event rescheduled" if len( + notify_users[id_user]['sessions']) == 1 else "Events rescheduled", + 'message': "Some of your bookmarked events have been rescheduled", + 'data': { + 'command': 'OPEN_BOOKMARKS', + } + } + log.info(f"SENDING PUSH NOTIFICATION TO {notify_users[id_user]['token']}") + redis_client.push_message('opencon_push_notification', pn_payload) + + +async def add_conference(content: dict, source_uri: str, force: bool = False, group_notifications_by_user=True): + conference = await models.Conference.filter(source_uri=source_uri).get_or_none() + + created = False + if not conference: + created = True + conference = await db_add_conference(content['conference']['title'], + content['conference']['acronym'], + source_uri=source_uri + ) + + import shared.utils as utils + checksum = utils.calculate_md5_checksum_for_dict(content) + + if not force and conference.source_document_checksum == checksum: + return {'conference': conference, + 'created': False, + 'changes': {}, + 'checksum_matches': True, + } + else: + conference.source_document_checksum = checksum + await conference.save() + + content_tracks = content.get('tracks', []) + + tracks_by_name = await db_add_or_update_tracks(conference, content_tracks) + try: + changes, to_delete = await add_sessions(conference, content, tracks_by_name) + except Exception as e: + raise + + if created: + changes = {} + + changes_updated = None + if changes: + changes_updated = await send_changes_to_bookmakers(changes, group_4_user=group_notifications_by_user) + + if to_delete: + await models.EventSession.filter(unique_id__in=to_delete).delete() + + return {'conference': conference, + 'created': created, + 'checksum_matches': False, + 'changes': changes, + 'changes_updated': changes_updated + } + + +async def get_conference_sessions(conference_acronym): + conference = await models.Conference.filter(acronym=conference_acronym).get_or_none() + if not conference: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, + detail={"code": "CONFERENCE_NOT_FOUND", "message": "conference not found"}) + + conference = await get_conference(conference.id) + serialized = await opencon_serialize(conference) + + sessions = [] + + bookmark_per_event = {} + for bpe in await models.Bookmark.filter(pretix_order__conference=conference).prefetch_related('pretix_order').all(): + if str(bpe.event_session_id) not in bookmark_per_event: + bookmark_per_event[str(bpe.event_session_id)] = 0 + bookmark_per_event[str(bpe.event_session_id)] += 1 + + rate_per_event = {} + for rpe in await models.StarredSession.filter(event_session__conference=conference).prefetch_related( + 'event_session').all(): + rate_per_event[str(rpe.event_session_id)] = rpe.total_stars / rpe.nr_votes if rpe.nr_votes else ' ' + + for day in serialized['conference']['idx']['ordered_sessions_by_days']: + for id_session in serialized['conference']['idx']['ordered_sessions_by_days'][day]: + session = serialized['conference']['db']['sessions'][id_session] + + sessions.append({ + 'event': session['title'], + 'speakers': ', '.join( + [serialized['conference']['db']['lecturers'][id_lecturer]['display_name'] for id_lecturer in + session['id_lecturers']]), + 'date': session['date'], + 'bookmarks': bookmark_per_event[str(id_session)] if id_session in bookmark_per_event else 0, + 'rating': rate_per_event[str(id_session)] if str(id_session) in rate_per_event else ' ' + + # 'bookmarks': random.randint(0, 100), + # 'rating': round(random.randint(0, 500) / 100, 2) + }) + + return {'header': [ + {'name': 'Event', 'key': 'event', 'width': '100px'}, + {'name': 'Speakers', 'key': 'speakers', 'width': '100px'}, + {'name': 'Date', 'key': 'date', 'width': '100px'}, + {'name': 'Bookmarks', 'key': 'bookmarks', 'width': '100px'}, + {'name': 'Rating', 'key': 'rating', 'width': '100px'}, + ], 'data': sessions} + + +async def find_event_by_unique_id(conferece, unique_id): + return await models.EventSession.filter(conference=conferece, unique_id=unique_id).get_or_none() + + +async def get_all_conferences(): + try: + + logger = logging.getLogger('redis_logger') + logger.info('This is a test log message') + + x = [conference.serialize() for conference in await models.Conference.all()] + return x + except Exception as e: + log.critical(f'Error getting all conferences :: {str(e)}') + raise + + +async def get_pretix_order(conference: models.Conference, id_pretix_order: str): + try: + return await models.PretixOrder.filter(conference=conference, id_pretix_order=id_pretix_order).get_or_none() + except Exception as e: + log.critical(f'Error getting pretix order {id_pretix_order} :: {str(e)}') + raise + + +async def get_dashboard(): + return { + 'total_users': 33, + 'total_bookmarks': 34, + 'total_ratings': 35, + } + + +async def csv_users(): + conference = await get_current_conference() + if not conference: + raise HTTPException(status_code=404, detail={"code": "CONFERENCE_NOT_FOUND", "message": "Conference not found"}) + + all_users = await models.UserAnonymous.all().prefetch_related('bookmarks', 'bookmarks__session', 'rates') + + output = io.StringIO() + writer = csv.writer(output) + writer.writerow(['ID', 'Bookmarks', 'Number of ratings', 'Registered']) + + for user in all_users: + id = user.id + bookmarks = len(user.bookmarks) + nr_ratings = len(user.rates) + register_at = user.created.strftime('%Y-%m-%d %H:%M:%S') + + writer.writerow([id, bookmarks, nr_ratings, register_at]) + + output.seek(0) + + filename = f"sfs2024_anonymous_users_on_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.csv" + + return StreamingResponse( + iter([output.getvalue()]), + media_type="text/csv", + headers={ + 'Content-Disposition': f'attachment; filename="{filename}"' + } + ) + + +async def get_all_anonymous_users_with_bookmarked_sessions(order_field: Optional[str] = None, + order_direction: Optional[models.SortOrder] = None): + conference = await get_current_conference() + if not conference: + raise HTTPException(status_code=404, detail={"code": "CONFERENCE_NOT_FOUND", "message": "Conference not found"}) + + all_users = await models.UserAnonymous.all().prefetch_related('bookmarks', 'bookmarks__session', 'rates') + + users_data = [ + { + 'id': user.id, + 'bookmarks': len([b.session.title for b in user.bookmarks]), + 'nr_ratings': len(user.rates), + 'register_at': str(user.created) + } + for user in all_users + ] + + # Apply sorting if specified + if order_field and order_direction: + reverse = order_direction == models.SortOrder.DESCENDING + if order_field == 'register_at': + users_data.sort(key=lambda x: x['register_at'], reverse=reverse) + elif order_field in ['bookmarks', 'nr_ratings']: + users_data.sort(key=lambda x: x[order_field], reverse=reverse) + + return users_data + + +async def csv_sessions(): + conference = await get_current_conference() + if not conference: + raise HTTPException(status_code=404, detail={"code": "CONFERENCE_NOT_FOUND", "message": "Conference not found"}) + + all_sessions = await models.EventSession.filter(conference=conference).prefetch_related('anonymous_rates', + 'lecturers', + 'anonymous_bookmarks').all() + + output = io.StringIO() + writer = csv.writer(output) + writer.writerow(['Title', 'Speakers', 'Bookmarks', 'Rates', 'Avg rate']) + + for session in all_sessions: + title = session.title + speakers = ', '.join([lecturer.display_name for lecturer in session.lecturers]) + bookmarks = len(session.anonymous_bookmarks) + rates = len(session.anonymous_rates) + avg_rate = sum([r.rate for r in session.anonymous_rates]) / len( + session.anonymous_rates) if session.anonymous_rates else None + + writer.writerow([title, speakers, bookmarks, rates, avg_rate]) + + output.seek(0) + + filename = f"sfs2024_sessions_on_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.csv" + + return StreamingResponse( + iter([output.getvalue()]), + media_type="text/csv", + headers={ + 'Content-Disposition': f'attachment; filename="{filename}"' + } + ) + + +async def get_sessions_by_rate(order_field: Optional[str] = None, order_direction: Optional[models.SortOrder] = None): + conference = await get_current_conference() + if not conference: + raise HTTPException(status_code=404, detail={"code": "CONFERENCE_NOT_FOUND", "message": "Conference not found"}) + + # Fetch all sessions related to the current conference + all_sessions = await models.EventSession.filter( + conference=conference + ).prefetch_related('anonymous_rates', 'lecturers', 'anonymous_bookmarks').all() + + # Prepare session data + sessions_data = [ + { + 'title': session.title, + 'bookmarks': len(session.anonymous_bookmarks), + 'speakers': ', '.join([lecturer.display_name for lecturer in session.lecturers]), + 'rates': len(session.anonymous_rates), + 'avg_rate': sum(r.rate for r in session.anonymous_rates) / len( + session.anonymous_rates) if session.anonymous_rates else None + } + for session in all_sessions + ] + + # Apply sorting if specified + if order_field and order_direction: + reverse = order_direction == models.SortOrder.DESCENDING + + # Sorting for different fields + if order_field == 'avg_rate': + rated_sessions = [s for s in sessions_data if s['avg_rate'] is not None] + unrated_sessions = [s for s in sessions_data if s['avg_rate'] is None] + + rated_sessions.sort(key=lambda x: -x['avg_rate'], reverse=reverse) + + sessions_data = rated_sessions + unrated_sessions + elif order_field == 'bookmarks': + sessions_data.sort( + key=lambda x: (x['bookmarks'] is None, -x['bookmarks'] if x['bookmarks'] is not None else 0), + reverse=reverse) + elif order_field == 'rates': + sessions_data.sort(key=lambda x: (x['rates'] is None, -x['rates'] if x['rates'] is not None else 0), + reverse=reverse) + + return sessions_data + + +async def get_event_summary(): + conference = await get_current_conference() + if not conference: + raise HTTPException(status_code=404, detail={"code": "CONFERENCE_NOT_FOUND", "message": "Conference not found"}) + + all_users = await models.UserAnonymous.all() + all_sessions = await models.EventSession.filter(conference=conference).all() + all_bookmarks = await models.AnonymousBookmark.filter(session__conference=conference).all() + all_rates = await models.AnonymousRate.filter(session__conference=conference).all() + + return { + 'all_users': len(all_users), + 'total_sessions': len(all_sessions), + 'total_bookmarks': len(all_bookmarks), + 'total_rates': len(all_rates) + } + + +async def get_current_conference(): + conference = await models.Conference.filter().prefetch_related('tracks', + 'locations', + 'event_sessions', + 'event_sessions__track', + 'event_sessions__room', + # 'event_sessions__room__location', + 'event_sessions__lecturers', + 'rooms', + # 'rooms__location', + 'lecturers', + 'lecturers__event_sessions', + # 'event_sessions__starred_session', + + 'event_sessions__anonymous_bookmarks', + 'event_sessions__anonymous_rates', + + ).order_by('-created').first() + + if not conference: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, + detail={"code": "CONFERENCE_NOT_FOUND", "message": "conference not found"}) + return conference + + +# +# async def get_conference(id_conference: uuid.UUID): +# conference = await models.Conference.filter(id=id_conference).prefetch_related('tracks', +# 'locations', +# 'event_sessions', +# 'event_sessions__track', +# 'event_sessions__room', +# # 'event_sessions__room__location', +# 'event_sessions__lecturers', +# 'rooms', +# # 'rooms__location', +# 'lecturers', +# 'lecturers__event_sessions', +# # 'event_sessions__starred_session', +# +# 'event_sessions__anonymous_bookmarks', +# 'event_sessions__anonymous_rates', +# +# ).get_or_none() +# +# return conference + + +async def authorize_user(push_notification_token: str = None): + # log.info(f"AUTHORIZING NEW ANONYMOUS USER push_notification_token={push_notification_token}") + anonymous = models.UserAnonymous() # push_notification_token=push_notification_token) + await anonymous.save() + return str(anonymous.id) + + +async def get_user(id_user: uuid.UUID): + return await models.UserAnonymous.filter(id=id_user).get_or_none() + + +async def bookmark_session(id_user, id_session): + user = await models.UserAnonymous.filter(id=id_user).get_or_none() + if not user: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, + detail={"code": "USER_NOT_FOUND", "message": "user not found"}) + + session = await models.EventSession.filter(id=id_session).get_or_none() + if not session: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, + detail={"code": "SESSION_NOT_FOUND", "message": "session not found"}) + + try: + current_bookmark = await models.AnonymousBookmark.filter(user=user, session=session).get_or_none() + except Exception as e: + raise + + if not current_bookmark: + await models.AnonymousBookmark.create(user=user, session=session) + return {'bookmarked': True} + else: + await current_bookmark.delete() + return {'bookmarked': False} + + +def now(): + return datetime.datetime.now() + + +async def rate_session(id_user, id_session, rate): + if rate < 1 or rate > 5: + raise HTTPException(status_code=status.HTTP_406_NOT_ACCEPTABLE, + detail={"code": "RATE_NOT_VALID", "message": "rate not valid, use number between 1 and 5"}) + + user = await models.UserAnonymous.filter(id=id_user).get_or_none() + if not user: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, + detail={"code": "USER_NOT_FOUND", "message": "user not found"}) + + session = await models.EventSession.filter(id=id_session).get_or_none() + if not session: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, + detail={"code": "SESSION_NOT_FOUND", "message": "session not found"}) + + if not session.rateable: + raise HTTPException(status_code=status.HTTP_406_NOT_ACCEPTABLE, + detail={"code": "SESSION_IS_NOT_RATEABLE", "message": "session is not rateable"}) + + session_start_datetime_str = f'{session.start_date}' + + s_now = str(now()) + if str(now())[:19] <= session_start_datetime_str[:19]: + raise HTTPException(status_code=status.HTTP_406_NOT_ACCEPTABLE, + detail={"code": "CAN_NOT_RATE_SESSION_IN_FUTURE", + "message": "Rating is only possible after the talk has started."}) + + try: + current_rate = await models.AnonymousRate.filter(user=user, session=session).get_or_none() + except Exception as e: + raise + + if not current_rate: + await models.AnonymousRate.create(user=user, session=session, rate=rate) + else: + if current_rate.rate != rate: + await current_rate.update_from_dict({'rate': rate}) + await current_rate.save() + + all_rates = await models.AnonymousRate.filter(session=session).all() + avg_rate = sum([rate.rate for rate in all_rates]) / len(all_rates) if all_rates else 0 + + return {'avg_rate': avg_rate, + 'total_rates': len(all_rates), + } + + +async def do_import_xml(request): + content = await fetch_xml_content(request.use_local_xml, request.local_xml_fname) + XML_URL = os.getenv("XML_URL", None) + + try: + res = await add_conference(content, XML_URL, force=True, + group_notifications_by_user=request.group_notifications_by_user) + except Exception as e: + raise + conference = res['conference'] + + return ConferenceImportRequestResponse(id=str(conference.id), created=res['created'], changes=res['changes']) + + +async def opencon_serialize_static(conference): + return await opencon_serialize_anonymous(None, conference) + + +async def opencon_serialize_anonymous(user_id, conference, last_updated=None): + next_try_in_ms = 3000000 + db_last_updated = str(tortoise.timezone.make_naive(conference.last_updated)) + + conference_avg_rating = {'rates_by_session': {}, + 'my_rate_by_session': {} + } + for session in conference.event_sessions: + if session.anonymous_rates: + all_rates_for_session = [r.rate for r in session.anonymous_rates] + if all_rates_for_session: + conference_avg_rating['rates_by_session'][str(session.id)] = [ + sum(all_rates_for_session) / len(all_rates_for_session), + len(all_rates_for_session)] # [session.anonymous_rates.avg_stars, + # session.anonymous_rates.nr_votes] + + if user_id: + user = await models.UserAnonymous.filter(id=user_id).prefetch_related('bookmarks', 'rates').get_or_none() + bookmarks = [bookmark.session_id for bookmark in user.bookmarks] + conference_avg_rating['my_rate_by_session'] = {str(rate.session_id): rate.rate for rate in user.rates} + else: + bookmarks = [] + + if last_updated and last_updated >= db_last_updated: + return {'last_updated': db_last_updated, + 'ratings': conference_avg_rating, + 'bookmarks': bookmarks, + 'next_try_in_ms': next_try_in_ms, + 'conference': None + } + + db = {} + idx = {} + + with open(current_file_dir + '/../../tests/assets/sfs2024streaming.yaml', 'r') as f: + streaming_links = yaml.load(f, yaml.Loader) + + idx['ordered_sponsors'] = [] + + db['tracks'] = {str(track.id): track.serialize() for track in conference.tracks} + db['locations'] = {str(location.id): location.serialize() for location in conference.locations} + db['rooms'] = {str(room.id): room.serialize() for room in conference.rooms} + db['sessions'] = {str(session.id): session.serialize(streaming_links) for session in conference.event_sessions} + db['lecturers'] = {str(lecturer.id): lecturer.serialize() for lecturer in conference.lecturers} + db['sponsors'] = {} + + days = set() + for s in db['sessions'].values(): + days.add(s['date']) + + idx['ordered_lecturers_by_display_name'] = [l['id'] for l in + sorted(db['lecturers'].values(), key=lambda x: x['display_name'])] + idx['ordered_sessions_by_days'] = {d: [s['id'] for s in db['sessions'].values() if s['date'] == d] for d in + sorted(list(days))} + idx['ordered_sessions_by_tracks'] = {t: [s['id'] for s in db['sessions'].values() if s['id_track'] == t] for t in + db['tracks'].keys()} + idx['days'] = sorted(list(days)) + + with open(current_file_dir + '/../../tests/assets/sfscon2024sponsors.yaml', 'r') as f: + db['sponsors'] = yaml.load(f, yaml.Loader) + + re_ordered_lecturers = {} + for l in idx['ordered_lecturers_by_display_name']: + re_ordered_lecturers[l] = db['lecturers'][l] + + db['lecturers'] = re_ordered_lecturers + + return {'last_updated': db_last_updated, + 'ratings': conference_avg_rating, + 'next_try_in_ms': next_try_in_ms, + 'bookmarks': bookmarks, + 'conference': {'acronym': str(conference.acronym), + 'db': db, + 'idx': idx + } + } diff --git a/src/conferences/models/__init__.py b/src/conferences/models/__init__.py new file mode 100644 index 0000000..fe875c8 --- /dev/null +++ b/src/conferences/models/__init__.py @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: GPL-3.0-or-later +# SPDX-FileCopyrightText: 2023 Digital CUBE + +from .conferences import * diff --git a/src/conferences/models/conferences.py b/src/conferences/models/conferences.py new file mode 100644 index 0000000..8a8babe --- /dev/null +++ b/src/conferences/models/conferences.py @@ -0,0 +1,241 @@ +# SPDX-License-Identifier: GPL-3.0-or-later +# SPDX-FileCopyrightText: 2023 Digital CUBE + +from enum import Enum +from typing import Dict + +import bs4 +from tortoise import fields +from tortoise.models import Model + + +class UserAnonymous(Model): + class Meta: + table = "conferences_users_anonymous" + + id = fields.UUIDField(pk=True) + created = fields.DatetimeField(auto_now_add=True) + push_notification_token = fields.CharField(max_length=64, null=True) + + +class AnonymousBookmark(Model): + class Meta: + table = "conferences_anonymous_bookmarks" + unique_together = (('user', 'session'),) + + id = fields.UUIDField(pk=True) + user = fields.ForeignKeyField('models.UserAnonymous', related_name='bookmarks') + session = fields.ForeignKeyField('models.EventSession', related_name='anonymous_bookmarks') + + +class AnonymousRate(Model): + class Meta: + table = "conferences_anonymous_rates" + unique_together = (('user', 'session'),) + + id = fields.UUIDField(pk=True) + user = fields.ForeignKeyField('models.UserAnonymous', related_name='rates') + session = fields.ForeignKeyField('models.EventSession', related_name='anonymous_rates') + + rate = fields.IntField() + + +class Conference(Model): + class Meta: + table = "conferences" + + id = fields.UUIDField(pk=True) + name = fields.TextField() + # start_date = fields.DateField() + # end_date = fields.DateField() + acronym = fields.TextField(null=True) + + tracks = fields.ReverseRelation['Track'] + event_sessions = fields.ReverseRelation['EventSession'] + locations = fields.ReverseRelation['Location'] + + created = fields.DatetimeField(auto_now_add=True) + last_updated = fields.DatetimeField(auto_now=True) + + source_uri = fields.TextField(null=True) + source_document_checksum = fields.CharField(max_length=128, null=True) + + def serialize(self): + return { + 'id': str(self.id), + 'name': self.name, + 'acronym': self.acronym, + } + + +class Track(Model): + class Meta: + table = "conferences_tracks" + + id = fields.UUIDField(pk=True) + name = fields.TextField() + slug = fields.TextField() + color = fields.TextField() + order = fields.IntField() + conference = fields.ForeignKeyField('models.Conference', related_name='tracks') + + def serialize(self): + return {'name': self.name, + 'color': self.color + } + + +class Location(Model): + class Meta: + table = "conferences_locations" + + id = fields.UUIDField(pk=True) + name = fields.TextField() + slug = fields.TextField() + conference = fields.ForeignKeyField('models.Conference', related_name='locations') + + def serialize(self): + return {'name': self.name, + 'slug': self.slug} + + +class Room(Model): + class Meta: + table = "conferences_rooms" + + id = fields.UUIDField(pk=True) + name = fields.TextField() + slug = fields.TextField() + conference = fields.ForeignKeyField('models.Conference', related_name='rooms') + location = fields.ForeignKeyField('models.Location', related_name='rooms') + + def serialize(self): + return {'name': self.name, + 'slug': self.slug, + "location": str(self.location_id) + } + + +class EventSession(Model): + class Meta: + table = "conferences_event_sessions" + unique_together = (('unique_id', 'conference'),) + ordering = ['start_date'] + + id = fields.UUIDField(pk=True) + unique_id = fields.CharField(max_length=255) + title = fields.TextField() + duration = fields.IntField(null=True) + abstract = fields.TextField(null=True) + description = fields.TextField(null=True) + + url = fields.TextField(null=True) + + bookmarkable = fields.BooleanField(default=True) + rateable = fields.BooleanField(default=True) + + start_date = fields.DatetimeField() + end_date = fields.DatetimeField() + + str_start_time = fields.CharField(max_length=20, null=True) + + track = fields.ForeignKeyField('models.Track', related_name='event_sessions') + room = fields.ForeignKeyField('models.Room', related_name='event_sessions') + conference = fields.ForeignKeyField('models.Conference', related_name='event_sessions') + lecturers = fields.ManyToManyRelation['ConferenceLecturer'] + bookmarks = fields.ReverseRelation['Bookmark'] + + notification5min_sent = fields.BooleanField(default=None, null=True) + + def serialize(self, streaming_links: Dict[str, str] = None): + # import tortoise.timezone + + try: + day = '2' if self.start_date.strftime("%Y-%m-%d") == '2024-11-09' else '1' + + streaming_link = streaming_links[f'{day}-{self.track.name}'] \ + if streaming_links and self.track and f'{day}-{self.track.name}' in streaming_links else None + except Exception as e: + streaming_link = None + + return { + 'id': str(self.id), + 'unique_id': self.unique_id, + 'share_link': self.url, + "date": self.start_date.strftime("%Y-%m-%d"), + "start": self.start_date.strftime("%Y-%m-%d %H:%M:%S"), + "duration": self.duration, + "title": self.title, + "abstract": self.abstract, + "description": self.description, + "bookmarkable": self.bookmarkable, + "can_share": True, + "can_ask_question": True, + "rateable": self.rateable, + "id_track": str(self.track_id), + "id_room": str(self.room_id), + "id_location": "TODO", + "id_lecturers": [str(l.id) for l in self.lecturers], + "stream_link": streaming_link + } + + +class ConferenceLecturer(Model): + class Meta: + table = "conferences_lecturers" + + id = fields.UUIDField(pk=True) + slug = fields.CharField(max_length=255, null=False, index=True) + external_id = fields.CharField(max_length=255, index=True) + display_name = fields.TextField() + first_name = fields.TextField() + last_name = fields.TextField() + email = fields.TextField(null=True) + thumbnail_url = fields.TextField(null=True) + bio = fields.TextField(null=True) + organization = fields.TextField(null=True) + social_networks = fields.JSONField(null=True) + conference = fields.ForeignKeyField('models.Conference', related_name='lecturers') + event_sessions = fields.ManyToManyField('models.EventSession', related_name='lecturers') + + @staticmethod + def fix_bio(bio): + if not bio: + return '' + + bio = bio.replace("\\r\\n", "\n") + bio = bio.encode().decode('unicode_escape') # PRESERVE unicode + + soup = bs4.BeautifulSoup(bio, features="html.parser") + bio = soup.get_text() + bio = bio.strip('"') + bio = bio.replace('\n', '

') + bio = bio.replace('<\\/p>', '') + + return bio + + def serialize(self): + return { + "id": str(self.id), + "share_link": f"https://www.sfscon.it/speakers/{self.slug}/", + "company_name": self.organization, + "display_name": self.display_name, + "first_name": self.first_name, + "last_name": self.last_name, + "profile_picture": self.thumbnail_url, + "bio": self.bio, + "social_networks": self.social_networks, + "sessions": [str(s.id) for s in self.event_sessions] if self.event_sessions else []} + + +class SortOrder(str, Enum): + ASCENDING = "ascend" + DESCENDING = "descend" + +class Entrance(Model): + class Meta: + table = "conferences_entrances" + + id = fields.UUIDField(pk=True) + name = fields.TextField() + conference = fields.ForeignKeyField('models.Conference') diff --git a/src/db_config.py b/src/db_config.py new file mode 100644 index 0000000..0a2df08 --- /dev/null +++ b/src/db_config.py @@ -0,0 +1,31 @@ +# SPDX-License-Identifier: GPL-3.0-or-later +# SPDX-FileCopyrightText: 2023 Digital CUBE + +import os + +import dotenv + +current_file_dir = os.path.dirname(os.path.abspath(__file__)) + +try: + dotenv.load_dotenv(current_file_dir + "/../.env") +except Exceptio as e: + pass + +DB_CONFIG = { + "connections": { + "default": f"postgres://" + f"{os.getenv('DB_USERNAME')}:{os.getenv('DB_PASSWORD')}@" + f"{os.getenv('DB_HOST')}:{os.getenv('DB_PORT')}/{os.getenv('DB_NAME')}" + }, + "apps": { + "models": { + "models": ["conferences.models" , "aerich.models"], + "default_connection": "default", + } + } +} + +import pprint + +pprint.pprint(DB_CONFIG) diff --git a/src/main.py b/src/main.py new file mode 100644 index 0000000..c8a9cbb --- /dev/null +++ b/src/main.py @@ -0,0 +1,32 @@ +# SPDX-License-Identifier: GPL-3.0-or-later +# SPDX-FileCopyrightText: 2023 Digital CUBE + +import importlib +import logging + +import dotenv + +from app import get_app +from shared.setup_logger import setup_file_logger, setup_redis_logger + +app = get_app() + +def import_modules(svcs): + dotenv.load_dotenv() + setup_redis_logger() + + for svc in svcs: + svc_name = svc.split('.')[0] +# setup_file_logger(svc_name) + importlib.reload(importlib.import_module(svc)) + + + +import_modules(['conferences.api']) + +if __name__ == "__main__": + import uvicorn + setup_file_logger('conference') + log = logging.getLogger('conference_logger') + log.info("STARTING") + uvicorn.run(get_app(), host="0.0.0.0", port=8000) diff --git a/src/pyproject.toml b/src/pyproject.toml new file mode 100644 index 0000000..e3f31c6 --- /dev/null +++ b/src/pyproject.toml @@ -0,0 +1,4 @@ +[tool.aerich] +tortoise_orm = "db_config.DB_CONFIG" +location = "./migrations" +src_folder = "./." diff --git a/src/scripts/update-conf.py b/src/scripts/update-conf.py new file mode 100755 index 0000000..20403a4 --- /dev/null +++ b/src/scripts/update-conf.py @@ -0,0 +1,110 @@ +#!/usr/local/bin/python + +import json +import httpx +import asyncio +import os +import boto3 +from botocore.exceptions import ClientError + + +def list_buckets(): + s3_resource = boto3.resource("s3") + for bucket in s3_resource.buckets.all(): + print(f"\t{bucket.name}") + +def list_files_in_a_bucket(bucket_name): + s3_resource = boto3.resource("s3") + bucket = s3_resource.Bucket(bucket_name) + for obj in bucket.objects.all(): + print(f"\t{obj.key}") + + +def upload_file(file_name, bucket, object_name=None): + """Upload a file to an S3 bucket + + :param file_name: File to upload + :param bucket: Bucket to upload to + :param object_name: S3 object name. If not specified then file_name is used + :return: True if file was uploaded, else False + """ + + # If S3 object_name was not specified, use file_name + if object_name is None: + object_name = os.path.basename(file_name) + + # Upload the file + s3_client = boto3.client('s3') + try: + response = s3_client.upload_file(file_name, bucket, object_name, ExtraArgs={'ACL':'public-read','ContentType': 'application/json'}) + except ClientError as e: + print('ERROR', e) + return False + return True + + +def download_file_from_bucket(object_name, bucket, result_file_name): + + # Download the file + s3_client = boto3.client('s3') + try: + with open(result_file_name, 'wb') as f: + response = s3_client.download_fileobj(bucket, object_name, f) + except ClientError as e: + print('ERROR', e) + return False + return True + + + + + +async def import_xml(): + url = 'http://localhost:8000/api/import-xml' + + async with httpx.AsyncClient() as client: + try: + response = await client.post(url, data='') + response.raise_for_status() + + return response.json() + + except httpx.HTTPStatusError as e: + print(f"HTTP error: {e.response.status_code} - {e.response.text}") + except httpx.RequestError as e: + print(f"error sending request: {e}") + +async def get_static_conference(): + url = "http://localhost:8000/api/conference/static" + async with httpx.AsyncClient() as client: + response = await client.get(url) + + response.raise_for_status() + + res = response.json() + with open('sfscon2024.json','wt') as f: + f.write(json.dumps(res)) + + send_to_s3('sfscon2024.json') + + +def send_to_s3(fname): + list_buckets() + list_files_in_a_bucket('sfscon') + + upload_file(fname, 'sfscon') + + list_files_in_a_bucket('sfscon') + download_file_from_bucket(fname, 'sfscon', 'downloaded.sfs2024.json') + + +async def main(): + + res = await import_xml() + if res and 'changes' in res and res['changes']: + await get_static_conference() + + print(res) + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/src/shared/__init__.py b/src/shared/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/shared/ex.py b/src/shared/ex.py new file mode 100644 index 0000000..2ea3198 --- /dev/null +++ b/src/shared/ex.py @@ -0,0 +1,22 @@ +# SPDX-License-Identifier: GPL-3.0-or-later +# SPDX-FileCopyrightText: 2023 Digital CUBE + +import fastapi.exceptions + + +class AppException(Exception): + + def __init__(self, id_message, message=None, data=None, status_code=400): + super(AppException, self).__init__(id_message) + self.id_message = id_message + self.message = message + self.data = data + self.status_code = status_code + + def to_dict(self): + return { + 'id_message': self.id_message, + 'message': self.message, + 'data': self.data, + 'status_code': self.status_code + } diff --git a/src/shared/redis_client.py b/src/shared/redis_client.py new file mode 100644 index 0000000..5df08c1 --- /dev/null +++ b/src/shared/redis_client.py @@ -0,0 +1,138 @@ +import json +import os +from typing import Any, List, Optional + +import redis + + +class RedisClientHandler: + def __init__(self, redis_instance: Optional[redis.Redis] = None, port: int = 6379, db: int = 0): + """ + Initialize the Redis client. + + :param port: Redis server port + :param db: Redis database number + """ + if redis_instance: + self.redis_client = redis_instance + else: + + #TODO: ... + + # host = "localhost" if os.getenv('V4INSTALLATION', "localhost") not in ('docker', 'docker-monolith') else 'redis' + host = os.getenv('REDIS_SERVER') + self.redis_client = redis.Redis(host=host, port=port, db=db) + + @staticmethod + def get_redis_client(redis_instance: Optional[redis.Redis] = None, port: int = 6379, db: int = 0) -> 'RedisClientHandler': + return RedisClientHandler(redis_instance, port, db) + + def push_message(self, queue_name: str, message: Any) -> bool: + """ + Push a message to a specified Redis queue. + + :param queue_name: Name of the queue + :param message: Message to be pushed (will be JSON serialized) + :return: True if successful, False otherwise + """ + try: + serialized_message = json.dumps(message, default=str) + self.redis_client.rpush(queue_name, serialized_message) + return True + except Exception as e: + print(f"Error pushing message to queue {queue_name}: {e}") + raise Exception("FAILED TO SEND REDIS MESSAGE") + + def read_message(self, queue_name: str, timeout: int = 0) -> Optional[Any]: + """ + Read a message from a specified Redis queue. + + :param queue_name: Name of the queue + :param timeout: Time to wait for a message (0 means indefinite) + :return: Deserialized message if available, None otherwise + """ + try: + # BRPOP returns a tuple (queue_name, message) + result = self.redis_client.brpop([queue_name], timeout) + if result: + message = result[1] # Get the message part + return json.loads(message) + return None + except Exception as e: + print(f"Error reading message from queue {queue_name}: {e}") + raise Exception("FAILED TO READ REDIS MESSAGE FROM QUEUE") + + def get_queue_length(self, queue_name: str) -> int: + """ + Get the current length of a queue. + + :param queue_name: Name of the queue + :return: Length of the queue + """ + return self.redis_client.llen(queue_name) + + def clear_queue(self, queue_name: str) -> bool: + """ + Clear all messages from a queue. + + :param queue_name: Name of the queue + :return: True if successful, False otherwise + """ + try: + self.redis_client.delete(queue_name) + return True + except Exception as e: + print(f"Error clearing queue {queue_name}: {e}") + raise Exception("FAILED TO CLEAR REDIS QUEUE") + + def get_all_messages(self, queue_name: str) -> List[Any]: + """ + Get all messages from a queue without removing them. + + :param queue_name: Name of the queue + :return: List of all messages in the queue + """ + try: + messages = self.redis_client.lrange(queue_name, 0, -1) + return [json.loads(message) for message in messages] + except Exception as e: + print(f"Error getting all messages from queue {queue_name}: {e}") + return [] + + +# Usage example +if __name__ == "__main__": + import dotenv + + dotenv.load_dotenv() + redis_handler = RedisClientHandler() + redis_handler.clear_queue("telegram_send_message") + message1 = redis_handler.read_message("telegram_send_message") + message1 = redis_handler.read_message("telegram_send_message") + message1 = redis_handler.read_message("telegram_send_message") + message1 = redis_handler.read_message("telegram_send_message") + message1 = redis_handler.read_message("telegram_send_message") + message1 = redis_handler.read_message("telegram_send_message") + message1 = redis_handler.read_message("telegram_send_message") + message1 = redis_handler.read_message("telegram_send_message") + + # Push messages + redis_handler.push_message("my_queue", {"key": "value1"}) + redis_handler.push_message("my_queue", {"key": "value2"}) + + # Read messages + message1 = redis_handler.read_message("my_queue") + message2 = redis_handler.read_message("my_queue") + + print(f"Read messages: {message1}, {message2}") + + # Get queue length + length = redis_handler.get_queue_length("my_queue") + print(f"Queue length: {length}") + + # Get all messages without removing them + all_messages = redis_handler.get_all_messages("my_queue") + print(f"All messages: {all_messages}") + + # Clear the queue + redis_handler.clear_queue("my_queue") diff --git a/src/shared/setup_logger.py b/src/shared/setup_logger.py new file mode 100644 index 0000000..e471c9f --- /dev/null +++ b/src/shared/setup_logger.py @@ -0,0 +1,48 @@ +# SPDX-License-Identifier: GPL-3.0-or-later +# SPDX-FileCopyrightText: 2023 Digital CUBE + +import logging +import os + +import redis + + +class RedisHandler(logging.Handler): + def __init__(self, redis_client, redis_list_key): + super().__init__() + self.redis_client = redis_client + self.redis_list_key = redis_list_key + + def emit(self, record): + log_entry = self.format(record) + self.redis_client.rpush(self.redis_list_key, log_entry) + + +def setup_redis_logger(): + # Configure the logger + logger = logging.getLogger('redis_logger') + logger.setLevel(logging.INFO) + + redis_server = os.getenv('REDIS_SERVER', 'localhost') + + redis_client = redis.Redis(host=redis_server, port=6379, db=0) + + # Create the Redis handler and set a formatter + redis_handler = RedisHandler(redis_client, 'log_list') + # formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') + formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s ||| %(message)s') + redis_handler.setFormatter(formatter) + + # Add the Redis handler to the logger + logger.addHandler(redis_handler) + + +def setup_file_logger(service: str): + logger = logging.getLogger(f'{service}_logger') + logger.setLevel(logging.INFO) + + handler = logging.FileHandler(f'/var/log/opencon/svc_{service}.log') + formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - XXX - %(message)s') + + handler.setFormatter(formatter) + logger.addHandler(handler) diff --git a/src/shared/utils.py b/src/shared/utils.py new file mode 100644 index 0000000..f4122d5 --- /dev/null +++ b/src/shared/utils.py @@ -0,0 +1,27 @@ +# SPDX-License-Identifier: GPL-3.0-or-later +# SPDX-FileCopyrightText: 2023 Digital CUBE + +import hashlib +import json + + +def calculate_md5_checksum(file_path): + md5_hash = hashlib.md5() + with open(file_path, "rb") as f: + # Read and update hash string value in blocks of 4K + for byte_block in iter(lambda: f.read(4096), b""): + md5_hash.update(byte_block) + return md5_hash.hexdigest() + + +def calculate_md5_checksum_for_string(string): + md5_hash = hashlib.md5() + md5_hash.update(string.encode('utf-8')) + return md5_hash.hexdigest() + + +def calculate_md5_checksum_for_dict(d: dict): + serialized_dict = json.dumps(d, sort_keys=True).encode('utf-8') + md5_hash = hashlib.md5() + md5_hash.update(serialized_dict) + return md5_hash.hexdigest() diff --git a/src/tests/assets/fake_attendees.json b/src/tests/assets/fake_attendees.json new file mode 100644 index 0000000..bb40cde --- /dev/null +++ b/src/tests/assets/fake_attendees.json @@ -0,0 +1,2682 @@ +[ + { + "first_name": "Yvonne", + "last_name": "Mueller", + "organization": "Campbell and Sons", + "email": "vperez@example.org", + "pretix_order": "B5AC3", + "has_app": true + }, + { + "first_name": "Lindsay", + "last_name": "Berg", + "organization": "Golden Ltd", + "email": "fshelton@example.com", + "pretix_order": "ED9C0", + "has_app": false + }, + { + "first_name": "Mindy", + "last_name": "Scott", + "organization": "Kelly, Ruiz and Carey", + "email": "billy74@example.net", + "pretix_order": "AE704", + "has_app": false + }, + { + "first_name": "James", + "last_name": "White", + "organization": "Brooks Group", + "email": "halleugene@example.com", + "pretix_order": "C923D", + "has_app": false + }, + { + "first_name": "Jennifer", + "last_name": "Gonzalez", + "organization": "Holden and Sons", + "email": "rojaskristin@example.com", + "pretix_order": "E0E69", + "has_app": true + }, + { + "first_name": "Paul", + "last_name": "Cross", + "organization": "King, Campbell and Smith", + "email": "allenbrittney@example.com", + "pretix_order": "B4A0B", + "has_app": true + }, + { + "first_name": "Margaret", + "last_name": "Mcgrath", + "organization": "Jones, Fisher and Torres", + "email": "brady87@example.com", + "pretix_order": "C2E52", + "has_app": true + }, + { + "first_name": "Lisa", + "last_name": "Banks", + "organization": "Smith, Curry and Patterson", + "email": "schmittemily@example.com", + "pretix_order": "29ACC", + "has_app": true + }, + { + "first_name": "Peggy", + "last_name": "Larsen", + "organization": "Valenzuela-Ortiz", + "email": "hsosa@example.org", + "pretix_order": "F8D20", + "has_app": true + }, + { + "first_name": "Luis", + "last_name": "Barnes", + "organization": "Richardson Ltd", + "email": "carl01@example.org", + "pretix_order": "C6E3B", + "has_app": true + }, + { + "first_name": "Susan", + "last_name": "Miller", + "organization": "Morgan-Avila", + "email": "ycoffey@example.com", + "pretix_order": "0A193", + "has_app": false + }, + { + "first_name": "Matthew", + "last_name": "Wilcox", + "organization": "Franco-Jones", + "email": "lauragreen@example.net", + "pretix_order": "656C2", + "has_app": false + }, + { + "first_name": "Dan", + "last_name": "Simmons", + "organization": "Haley PLC", + "email": "carolswanson@example.com", + "pretix_order": "D5978", + "has_app": false + }, + { + "first_name": "Derek", + "last_name": "Park", + "organization": "Rogers, Grant and Williams", + "email": "josephholmes@example.org", + "pretix_order": "AA039", + "has_app": false + }, + { + "first_name": "Crystal", + "last_name": "Anderson", + "organization": "Mcdonald PLC", + "email": "petersenjeremy@example.com", + "pretix_order": "84802", + "has_app": true + }, + { + "first_name": "Dale", + "last_name": "Mcconnell", + "organization": "Barry Ltd", + "email": "lisa93@example.net", + "pretix_order": "333DB", + "has_app": false + }, + { + "first_name": "Thomas", + "last_name": "Jackson", + "organization": "Rose, Kim and Wagner", + "email": "luisrowe@example.org", + "pretix_order": "4E450", + "has_app": true + }, + { + "first_name": "Evelyn", + "last_name": "Fitzgerald", + "organization": "Brown, Williams and Wright", + "email": "bryangibson@example.com", + "pretix_order": "D85BA", + "has_app": true + }, + { + "first_name": "Shirley", + "last_name": "Wilson", + "organization": "Rice-Olson", + "email": "adamsanthony@example.org", + "pretix_order": "73075", + "has_app": false + }, + { + "first_name": "Ashley", + "last_name": "Evans", + "organization": "Smith, West and Bryan", + "email": "bsmith@example.com", + "pretix_order": "05B50", + "has_app": true + }, + { + "first_name": "Michele", + "last_name": "Anderson", + "organization": "Zhang Group", + "email": "jill93@example.com", + "pretix_order": "91665", + "has_app": true + }, + { + "first_name": "Stephanie", + "last_name": "Wilson", + "organization": "Liu and Sons", + "email": "umorgan@example.net", + "pretix_order": "D6C01", + "has_app": true + }, + { + "first_name": "Marie", + "last_name": "Smith", + "organization": "Lopez-Farmer", + "email": "kathleenclark@example.com", + "pretix_order": "5F9E0", + "has_app": false + }, + { + "first_name": "Christopher", + "last_name": "Warner", + "organization": "Shelton, Nelson and Alvarez", + "email": "wilsonjustin@example.org", + "pretix_order": "C4BDE", + "has_app": false + }, + { + "first_name": "Kyle", + "last_name": "Castro", + "organization": "Jackson Ltd", + "email": "obonilla@example.net", + "pretix_order": "4B01A", + "has_app": true + }, + { + "first_name": "Cheryl", + "last_name": "Jones", + "organization": "Campos-Lee", + "email": "tylersmith@example.com", + "pretix_order": "0E03F", + "has_app": true + }, + { + "first_name": "John", + "last_name": "Dean", + "organization": "Rice-Johnson", + "email": "danielzuniga@example.com", + "pretix_order": "297E0", + "has_app": true + }, + { + "first_name": "Brittany", + "last_name": "Mccormick", + "organization": "Mason-Harrell", + "email": "castillocolleen@example.net", + "pretix_order": "3078D", + "has_app": false + }, + { + "first_name": "David", + "last_name": "Richardson", + "organization": "Gutierrez Group", + "email": "foxjames@example.com", + "pretix_order": "D79B0", + "has_app": true + }, + { + "first_name": "Karen", + "last_name": "Bush", + "organization": "Ramirez-Gonzalez", + "email": "cmay@example.net", + "pretix_order": "16044", + "has_app": true + }, + { + "first_name": "Jonathan", + "last_name": "Carter", + "organization": "Gonzalez, Miller and Thomas", + "email": "eberry@example.com", + "pretix_order": "FC9A8", + "has_app": false + }, + { + "first_name": "Mary", + "last_name": "Long", + "organization": "Castro Ltd", + "email": "jasmin22@example.com", + "pretix_order": "9B96E", + "has_app": false + }, + { + "first_name": "Jennifer", + "last_name": "Johnson", + "organization": "Jennings and Sons", + "email": "richardcox@example.org", + "pretix_order": "19774", + "has_app": true + }, + { + "first_name": "Lisa", + "last_name": "Mcgrath", + "organization": "Shelton PLC", + "email": "smithsandra@example.org", + "pretix_order": "EEAB0", + "has_app": true + }, + { + "first_name": "Jacqueline", + "last_name": "Cook", + "organization": "Hudson Group", + "email": "myersmichelle@example.net", + "pretix_order": "4BBDF", + "has_app": false + }, + { + "first_name": "Jason", + "last_name": "Cox", + "organization": "Miranda, Thomas and Jackson", + "email": "slee@example.net", + "pretix_order": "2C33F", + "has_app": true + }, + { + "first_name": "Julie", + "last_name": "Alexander", + "organization": "Duke, Miller and Nichols", + "email": "stacy85@example.com", + "pretix_order": "ADC46", + "has_app": false + }, + { + "first_name": "Mark", + "last_name": "Collins", + "organization": "Coleman-Williams", + "email": "matthew17@example.org", + "pretix_order": "C1B6C", + "has_app": false + }, + { + "first_name": "Jacob", + "last_name": "Davis", + "organization": "Blair and Sons", + "email": "larrymiller@example.com", + "pretix_order": "18885", + "has_app": true + }, + { + "first_name": "Pamela", + "last_name": "Johnson", + "organization": "Day-Martinez", + "email": "hammondmark@example.net", + "pretix_order": "62299", + "has_app": true + }, + { + "first_name": "Kimberly", + "last_name": "Lawson", + "organization": "Hernandez-Wilson", + "email": "johnathan93@example.org", + "pretix_order": "A2CA5", + "has_app": true + }, + { + "first_name": "Nicholas", + "last_name": "Meyer", + "organization": "Owens, Young and Bush", + "email": "jamiepowers@example.org", + "pretix_order": "77E95", + "has_app": true + }, + { + "first_name": "Jillian", + "last_name": "Martin", + "organization": "Klein-Petersen", + "email": "stefanieramos@example.com", + "pretix_order": "AF7DC", + "has_app": false + }, + { + "first_name": "Scott", + "last_name": "Martinez", + "organization": "Frazier Ltd", + "email": "jessica93@example.org", + "pretix_order": "E9A57", + "has_app": false + }, + { + "first_name": "Beth", + "last_name": "Shannon", + "organization": "Holloway-Wells", + "email": "dfletcher@example.org", + "pretix_order": "D7C01", + "has_app": false + }, + { + "first_name": "Matthew", + "last_name": "Savage", + "organization": "Salas-Gonzalez", + "email": "bcarpenter@example.net", + "pretix_order": "11E2C", + "has_app": false + }, + { + "first_name": "Victoria", + "last_name": "Hunt", + "organization": "Wong LLC", + "email": "lori20@example.net", + "pretix_order": "E5FFF", + "has_app": false + }, + { + "first_name": "Mary", + "last_name": "Martinez", + "organization": "Villanueva, Harris and Frey", + "email": "brittany77@example.com", + "pretix_order": "14BBC", + "has_app": true + }, + { + "first_name": "Jennifer", + "last_name": "Johnson", + "organization": "Flores-Williams", + "email": "frazierrebecca@example.org", + "pretix_order": "40D8B", + "has_app": true + }, + { + "first_name": "Brandon", + "last_name": "Brock", + "organization": "Gonzales-Daniel", + "email": "peterwilliams@example.org", + "pretix_order": "71069", + "has_app": false + }, + { + "first_name": "Sandra", + "last_name": "Reynolds", + "organization": "Turner, Johnson and Davis", + "email": "richard42@example.org", + "pretix_order": "A0567", + "has_app": true + }, + { + "first_name": "James", + "last_name": "Jackson", + "organization": "Ford Inc", + "email": "ronaldharris@example.net", + "pretix_order": "A3479", + "has_app": false + }, + { + "first_name": "Sheila", + "last_name": "Miranda", + "organization": "Hawkins-Lewis", + "email": "johnjones@example.com", + "pretix_order": "8CB23", + "has_app": false + }, + { + "first_name": "Mary", + "last_name": "Spence", + "organization": "Smith, Johnson and Edwards", + "email": "zmayo@example.com", + "pretix_order": "6DFD0", + "has_app": true + }, + { + "first_name": "Kathleen", + "last_name": "Malone", + "organization": "Lozano, Moore and Hickman", + "email": "janetcase@example.org", + "pretix_order": "93FD0", + "has_app": false + }, + { + "first_name": "Thomas", + "last_name": "Bailey", + "organization": "Cole Group", + "email": "craigjames@example.org", + "pretix_order": "B8CDF", + "has_app": true + }, + { + "first_name": "Harold", + "last_name": "May", + "organization": "Davis Ltd", + "email": "gary38@example.net", + "pretix_order": "065B5", + "has_app": true + }, + { + "first_name": "Patrick", + "last_name": "Johnson", + "organization": "Myers-Simpson", + "email": "kramerryan@example.com", + "pretix_order": "1077A", + "has_app": true + }, + { + "first_name": "Neil", + "last_name": "Bennett", + "organization": "Jimenez Group", + "email": "twatson@example.com", + "pretix_order": "0FC27", + "has_app": false + }, + { + "first_name": "Kathryn", + "last_name": "Blair", + "organization": "Morrison-Molina", + "email": "ashleymccullough@example.com", + "pretix_order": "81BCE", + "has_app": true + }, + { + "first_name": "Jonathan", + "last_name": "Crawford", + "organization": "Waller-Thomas", + "email": "josephalison@example.com", + "pretix_order": "4374D", + "has_app": true + }, + { + "first_name": "Justin", + "last_name": "Ryan", + "organization": "Pacheco, Short and Schroeder", + "email": "watkinschristopher@example.org", + "pretix_order": "1E060", + "has_app": true + }, + { + "first_name": "Wyatt", + "last_name": "Parrish", + "organization": "Allen-Roberts", + "email": "ztodd@example.net", + "pretix_order": "7CB11", + "has_app": true + }, + { + "first_name": "Jared", + "last_name": "Rios", + "organization": "Cabrera, Griffin and Rogers", + "email": "erin92@example.com", + "pretix_order": "1DA49", + "has_app": true + }, + { + "first_name": "Victoria", + "last_name": "Burns", + "organization": "Morgan, Jones and Snyder", + "email": "jonathanparsons@example.org", + "pretix_order": "019CB", + "has_app": false + }, + { + "first_name": "Tiffany", + "last_name": "Mason", + "organization": "Luna, Day and Donaldson", + "email": "jennifer01@example.com", + "pretix_order": "2F5A0", + "has_app": false + }, + { + "first_name": "Andrea", + "last_name": "Spencer", + "organization": "Long-Hudson", + "email": "ehodges@example.org", + "pretix_order": "C6C9E", + "has_app": true + }, + { + "first_name": "Brianna", + "last_name": "Johnson", + "organization": "Miller-Rodriguez", + "email": "stacywillis@example.net", + "pretix_order": "E367F", + "has_app": true + }, + { + "first_name": "Holly", + "last_name": "Diaz", + "organization": "Fields-Poole", + "email": "hernandezsarah@example.com", + "pretix_order": "0097C", + "has_app": false + }, + { + "first_name": "David", + "last_name": "Lopez", + "organization": "Alexander Ltd", + "email": "michael19@example.net", + "pretix_order": "6E6DB", + "has_app": false + }, + { + "first_name": "Kelly", + "last_name": "Powell", + "organization": "Turner and Sons", + "email": "echristensen@example.org", + "pretix_order": "4BD2A", + "has_app": false + }, + { + "first_name": "Cameron", + "last_name": "Sherman", + "organization": "Cisneros Inc", + "email": "michael38@example.org", + "pretix_order": "FC430", + "has_app": true + }, + { + "first_name": "Patricia", + "last_name": "Jones", + "organization": "Walker-Harris", + "email": "michael07@example.net", + "pretix_order": "9D9F3", + "has_app": false + }, + { + "first_name": "Michael", + "last_name": "Gutierrez", + "organization": "Johnson-Serrano", + "email": "fhiggins@example.com", + "pretix_order": "0456A", + "has_app": false + }, + { + "first_name": "Alicia", + "last_name": "Pugh", + "organization": "Johnson-Morrison", + "email": "uparker@example.com", + "pretix_order": "F6253", + "has_app": false + }, + { + "first_name": "Paige", + "last_name": "Wright", + "organization": "Jones Inc", + "email": "marilynjackson@example.org", + "pretix_order": "2D563", + "has_app": false + }, + { + "first_name": "Monica", + "last_name": "Pope", + "organization": "Morgan Ltd", + "email": "adam33@example.org", + "pretix_order": "B036D", + "has_app": true + }, + { + "first_name": "Ryan", + "last_name": "Randall", + "organization": "Wiley, Long and Jensen", + "email": "xholmes@example.net", + "pretix_order": "EF953", + "has_app": true + }, + { + "first_name": "Gregory", + "last_name": "White", + "organization": "Smith-Patrick", + "email": "philiptaylor@example.net", + "pretix_order": "39049", + "has_app": true + }, + { + "first_name": "Mark", + "last_name": "Morales", + "organization": "Lopez, Norris and Harris", + "email": "hurstvalerie@example.com", + "pretix_order": "C8D79", + "has_app": false + }, + { + "first_name": "Robert", + "last_name": "Greene", + "organization": "Brown Inc", + "email": "kcollins@example.net", + "pretix_order": "FF7E6", + "has_app": true + }, + { + "first_name": "Suzanne", + "last_name": "Rojas", + "organization": "Vaughn Group", + "email": "gclayton@example.net", + "pretix_order": "9A845", + "has_app": false + }, + { + "first_name": "Jasmine", + "last_name": "Patel", + "organization": "Rios-Carpenter", + "email": "tammyjones@example.net", + "pretix_order": "9F161", + "has_app": false + }, + { + "first_name": "Jessica", + "last_name": "Russell", + "organization": "Olsen LLC", + "email": "rebecca28@example.org", + "pretix_order": "09B72", + "has_app": false + }, + { + "first_name": "Adam", + "last_name": "Walker", + "organization": "Wu Group", + "email": "mlawrence@example.net", + "pretix_order": "927F4", + "has_app": true + }, + { + "first_name": "Charles", + "last_name": "Williams", + "organization": "Stephens-Townsend", + "email": "dixonmichael@example.org", + "pretix_order": "6F19F", + "has_app": true + }, + { + "first_name": "Ashley", + "last_name": "Morris", + "organization": "Evans, Hughes and Lopez", + "email": "georgepitts@example.com", + "pretix_order": "DD80D", + "has_app": true + }, + { + "first_name": "Jennifer", + "last_name": "Johnson", + "organization": "Guerrero-Nelson", + "email": "susannovak@example.com", + "pretix_order": "B06CE", + "has_app": false + }, + { + "first_name": "Elizabeth", + "last_name": "Gomez", + "organization": "Walters-Wade", + "email": "wchristian@example.net", + "pretix_order": "4B773", + "has_app": true + }, + { + "first_name": "Peggy", + "last_name": "Allison", + "organization": "Flores Inc", + "email": "william10@example.org", + "pretix_order": "A7080", + "has_app": false + }, + { + "first_name": "Leslie", + "last_name": "Miller", + "organization": "Harris, Torres and Payne", + "email": "liujamie@example.com", + "pretix_order": "E7B15", + "has_app": true + }, + { + "first_name": "Michelle", + "last_name": "Goodman", + "organization": "Hopkins Ltd", + "email": "johngilmore@example.com", + "pretix_order": "FD8DB", + "has_app": false + }, + { + "first_name": "Paul", + "last_name": "Fitzgerald", + "organization": "Page Group", + "email": "garciakevin@example.com", + "pretix_order": "FBDA8", + "has_app": true + }, + { + "first_name": "Julie", + "last_name": "Johnson", + "organization": "Taylor, Thompson and Gomez", + "email": "michelekim@example.org", + "pretix_order": "30C3E", + "has_app": true + }, + { + "first_name": "Walter", + "last_name": "Ball", + "organization": "Soto, Lopez and Rhodes", + "email": "campbelldebra@example.org", + "pretix_order": "0E7EA", + "has_app": true + }, + { + "first_name": "Michelle", + "last_name": "Sanford", + "organization": "Watson, Harrison and Gilbert", + "email": "xrobinson@example.com", + "pretix_order": "C1026", + "has_app": true + }, + { + "first_name": "Heather", + "last_name": "Williams", + "organization": "Robinson PLC", + "email": "sray@example.net", + "pretix_order": "C3F64", + "has_app": false + }, + { + "first_name": "Derrick", + "last_name": "Ellison", + "organization": "Mullen, Coffey and Carrillo", + "email": "matthew81@example.org", + "pretix_order": "B14C7", + "has_app": false + }, + { + "first_name": "Donna", + "last_name": "Yates", + "organization": "Nguyen-Nelson", + "email": "kevinklein@example.org", + "pretix_order": "6C6C0", + "has_app": false + }, + { + "first_name": "Martin", + "last_name": "Mcclure", + "organization": "Miller, Palmer and Ball", + "email": "davischristopher@example.org", + "pretix_order": "B7612", + "has_app": false + }, + { + "first_name": "Douglas", + "last_name": "Evans", + "organization": "Bolton LLC", + "email": "vrivera@example.com", + "pretix_order": "0D775", + "has_app": false + }, + { + "first_name": "Lauren", + "last_name": "Gray", + "organization": "Harris PLC", + "email": "pottssteven@example.com", + "pretix_order": "11CEF", + "has_app": false + }, + { + "first_name": "Timothy", + "last_name": "Mitchell", + "organization": "Bolton, Yoder and Miller", + "email": "nstevenson@example.org", + "pretix_order": "846FD", + "has_app": true + }, + { + "first_name": "Margaret", + "last_name": "Mendoza", + "organization": "Peterson-Lewis", + "email": "adamsmall@example.net", + "pretix_order": "5C05A", + "has_app": false + }, + { + "first_name": "David", + "last_name": "Clark", + "organization": "Chavez-Reed", + "email": "arobinson@example.org", + "pretix_order": "7AA65", + "has_app": true + }, + { + "first_name": "Kathryn", + "last_name": "Bailey", + "organization": "Payne Ltd", + "email": "dawsoncalvin@example.org", + "pretix_order": "B6C44", + "has_app": true + }, + { + "first_name": "Shawn", + "last_name": "Hernandez", + "organization": "Hernandez LLC", + "email": "agallagher@example.org", + "pretix_order": "8C9C3", + "has_app": false + }, + { + "first_name": "Michael", + "last_name": "Clark", + "organization": "Adams-Obrien", + "email": "waterschristopher@example.org", + "pretix_order": "95F41", + "has_app": true + }, + { + "first_name": "Brian", + "last_name": "Rice", + "organization": "Allen, Solomon and Gomez", + "email": "brent36@example.net", + "pretix_order": "E6555", + "has_app": false + }, + { + "first_name": "Ryan", + "last_name": "Moreno", + "organization": "Gilbert-Cole", + "email": "yrodriguez@example.org", + "pretix_order": "A9381", + "has_app": false + }, + { + "first_name": "Leslie", + "last_name": "Morris", + "organization": "Mitchell, Brown and Wade", + "email": "piercejames@example.net", + "pretix_order": "BD7F2", + "has_app": false + }, + { + "first_name": "Anthony", + "last_name": "Holland", + "organization": "Marshall, Gutierrez and Davidson", + "email": "fletcherlindsey@example.com", + "pretix_order": "5E9BA", + "has_app": true + }, + { + "first_name": "Ashley", + "last_name": "Brown", + "organization": "French, Perez and Evans", + "email": "richardsmith@example.com", + "pretix_order": "E31A6", + "has_app": false + }, + { + "first_name": "Adrian", + "last_name": "Mckinney", + "organization": "Moon Inc", + "email": "cartervalerie@example.net", + "pretix_order": "A8B11", + "has_app": true + }, + { + "first_name": "Ralph", + "last_name": "Garcia", + "organization": "Vega LLC", + "email": "nicholas25@example.net", + "pretix_order": "DC390", + "has_app": true + }, + { + "first_name": "Kimberly", + "last_name": "Craig", + "organization": "Carpenter, Krause and Daniel", + "email": "grios@example.org", + "pretix_order": "B9865", + "has_app": true + }, + { + "first_name": "Martin", + "last_name": "Fischer", + "organization": "Pena-Wilson", + "email": "josebailey@example.org", + "pretix_order": "30C52", + "has_app": true + }, + { + "first_name": "Ryan", + "last_name": "Matthews", + "organization": "Mclaughlin Inc", + "email": "lawrence58@example.net", + "pretix_order": "9D61D", + "has_app": false + }, + { + "first_name": "Rachel", + "last_name": "Sanders", + "organization": "Ryan-Smith", + "email": "coreyhess@example.org", + "pretix_order": "ADB51", + "has_app": false + }, + { + "first_name": "Robert", + "last_name": "Weaver", + "organization": "Smith, Glenn and Roberts", + "email": "wernerjennifer@example.net", + "pretix_order": "8E490", + "has_app": true + }, + { + "first_name": "Douglas", + "last_name": "Williams", + "organization": "West LLC", + "email": "iperry@example.com", + "pretix_order": "CEF9A", + "has_app": false + }, + { + "first_name": "Nicole", + "last_name": "Morgan", + "organization": "Scott-Wheeler", + "email": "vanessacoleman@example.com", + "pretix_order": "1F908", + "has_app": true + }, + { + "first_name": "Kimberly", + "last_name": "Schultz", + "organization": "Lee-Taylor", + "email": "makayla13@example.com", + "pretix_order": "4CFC2", + "has_app": false + }, + { + "first_name": "Grace", + "last_name": "Allen", + "organization": "Aguilar-Sanders", + "email": "opowell@example.net", + "pretix_order": "47FD7", + "has_app": true + }, + { + "first_name": "Tammy", + "last_name": "Sheppard", + "organization": "Graham-Rice", + "email": "brent65@example.net", + "pretix_order": "524EF", + "has_app": false + }, + { + "first_name": "Nancy", + "last_name": "Heath", + "organization": "Wilkinson Inc", + "email": "dillonangela@example.net", + "pretix_order": "8A0FC", + "has_app": true + }, + { + "first_name": "Johnny", + "last_name": "Bullock", + "organization": "Phillips PLC", + "email": "perkinsdavid@example.org", + "pretix_order": "F2D53", + "has_app": false + }, + { + "first_name": "Jennifer", + "last_name": "Morales", + "organization": "Williams Ltd", + "email": "christopher62@example.com", + "pretix_order": "30077", + "has_app": false + }, + { + "first_name": "Julie", + "last_name": "Walker", + "organization": "Olson PLC", + "email": "jenniferwilliams@example.net", + "pretix_order": "33DA9", + "has_app": false + }, + { + "first_name": "Brandon", + "last_name": "White", + "organization": "Richardson, Cisneros and Griffith", + "email": "joseph19@example.com", + "pretix_order": "E3D48", + "has_app": false + }, + { + "first_name": "Renee", + "last_name": "Mccarthy", + "organization": "Garcia, Bolton and Lane", + "email": "mark93@example.net", + "pretix_order": "12B9B", + "has_app": false + }, + { + "first_name": "Cynthia", + "last_name": "Lee", + "organization": "Bruce-Mason", + "email": "esalazar@example.org", + "pretix_order": "1906A", + "has_app": true + }, + { + "first_name": "Ann", + "last_name": "Pierce", + "organization": "Lee and Sons", + "email": "jameswalker@example.org", + "pretix_order": "6C85A", + "has_app": true + }, + { + "first_name": "Lori", + "last_name": "Vazquez", + "organization": "Landry LLC", + "email": "kayla51@example.org", + "pretix_order": "E9A3C", + "has_app": true + }, + { + "first_name": "John", + "last_name": "Chambers", + "organization": "Davis Group", + "email": "bscott@example.org", + "pretix_order": "1E389", + "has_app": false + }, + { + "first_name": "Joanna", + "last_name": "Ray", + "organization": "Macias Inc", + "email": "whitejennifer@example.net", + "pretix_order": "2FD1A", + "has_app": true + }, + { + "first_name": "Jeffrey", + "last_name": "Coffey", + "organization": "Luna-Holmes", + "email": "jonathan51@example.org", + "pretix_order": "A5BEB", + "has_app": true + }, + { + "first_name": "Jessica", + "last_name": "Santiago", + "organization": "Miller Inc", + "email": "jamesmullins@example.net", + "pretix_order": "BDC7C", + "has_app": true + }, + { + "first_name": "Kimberly", + "last_name": "Stephens", + "organization": "Rogers LLC", + "email": "brandonraymond@example.net", + "pretix_order": "CE15A", + "has_app": false + }, + { + "first_name": "Alyssa", + "last_name": "Jackson", + "organization": "West Ltd", + "email": "caitlinmiller@example.net", + "pretix_order": "36381", + "has_app": true + }, + { + "first_name": "Crystal", + "last_name": "Moreno", + "organization": "Morris-Shelton", + "email": "deborahrios@example.net", + "pretix_order": "0E81B", + "has_app": false + }, + { + "first_name": "James", + "last_name": "Butler", + "organization": "Richardson, Hamilton and Bell", + "email": "mariaschultz@example.org", + "pretix_order": "A73DC", + "has_app": true + }, + { + "first_name": "Shawn", + "last_name": "Ellison", + "organization": "Anderson Inc", + "email": "smithvicki@example.org", + "pretix_order": "0F53C", + "has_app": true + }, + { + "first_name": "Thomas", + "last_name": "Mays", + "organization": "Smith-Chambers", + "email": "justin01@example.com", + "pretix_order": "76F56", + "has_app": true + }, + { + "first_name": "Michael", + "last_name": "Miller", + "organization": "Castro Inc", + "email": "gregoryherrera@example.net", + "pretix_order": "DF5E6", + "has_app": false + }, + { + "first_name": "George", + "last_name": "Long", + "organization": "Howell, Meyer and Hernandez", + "email": "ychurch@example.org", + "pretix_order": "F4D51", + "has_app": true + }, + { + "first_name": "Todd", + "last_name": "Conner", + "organization": "Willis-White", + "email": "dakotawatson@example.net", + "pretix_order": "B5627", + "has_app": false + }, + { + "first_name": "Karen", + "last_name": "Rowland", + "organization": "Garcia, Keller and Baker", + "email": "yrodriguez@example.com", + "pretix_order": "DEB61", + "has_app": true + }, + { + "first_name": "Elizabeth", + "last_name": "Crawford", + "organization": "Burton-Bowman", + "email": "aaron48@example.org", + "pretix_order": "2B5EC", + "has_app": false + }, + { + "first_name": "James", + "last_name": "Stein", + "organization": "Mitchell-Lee", + "email": "jonathan50@example.org", + "pretix_order": "F556B", + "has_app": true + }, + { + "first_name": "Justin", + "last_name": "Kline", + "organization": "Smith, Austin and Henderson", + "email": "maddoxlaurie@example.net", + "pretix_order": "3FDE7", + "has_app": false + }, + { + "first_name": "Wendy", + "last_name": "Proctor", + "organization": "Webster and Sons", + "email": "hernandezfrank@example.net", + "pretix_order": "6355D", + "has_app": false + }, + { + "first_name": "Kristen", + "last_name": "Jackson", + "organization": "Gordon, Taylor and Duran", + "email": "raymondkyle@example.org", + "pretix_order": "51E9E", + "has_app": false + }, + { + "first_name": "Harold", + "last_name": "Reyes", + "organization": "Hayes PLC", + "email": "annajohnson@example.com", + "pretix_order": "892AC", + "has_app": false + }, + { + "first_name": "Joanne", + "last_name": "Rodriguez", + "organization": "Herrera Ltd", + "email": "ipeterson@example.org", + "pretix_order": "4F486", + "has_app": true + }, + { + "first_name": "Shannon", + "last_name": "Mcdaniel", + "organization": "Mccann-Nelson", + "email": "morganjose@example.net", + "pretix_order": "17B86", + "has_app": true + }, + { + "first_name": "Nicholas", + "last_name": "Kline", + "organization": "Hoffman, Mccarthy and Dixon", + "email": "echandler@example.org", + "pretix_order": "4B326", + "has_app": false + }, + { + "first_name": "Justin", + "last_name": "Cain", + "organization": "Walker, Conrad and Hampton", + "email": "whorton@example.net", + "pretix_order": "B1211", + "has_app": true + }, + { + "first_name": "Andrew", + "last_name": "Adams", + "organization": "Stewart-Campbell", + "email": "ifriedman@example.org", + "pretix_order": "C6864", + "has_app": true + }, + { + "first_name": "Nicholas", + "last_name": "Pruitt", + "organization": "Graves-Johnson", + "email": "ybennett@example.com", + "pretix_order": "55646", + "has_app": false + }, + { + "first_name": "Debra", + "last_name": "Snow", + "organization": "Howell, Schmidt and Lewis", + "email": "andrew51@example.org", + "pretix_order": "882F4", + "has_app": false + }, + { + "first_name": "Robert", + "last_name": "Graves", + "organization": "Oneill, Deleon and Wilson", + "email": "christophercollins@example.org", + "pretix_order": "7993F", + "has_app": true + }, + { + "first_name": "Donald", + "last_name": "Peters", + "organization": "Bell Ltd", + "email": "caleb59@example.com", + "pretix_order": "6949E", + "has_app": false + }, + { + "first_name": "James", + "last_name": "Williams", + "organization": "Cole, Norman and Kramer", + "email": "marywebster@example.net", + "pretix_order": "79D32", + "has_app": true + }, + { + "first_name": "Mary", + "last_name": "Thompson", + "organization": "Tapia, Robertson and Greer", + "email": "adam10@example.org", + "pretix_order": "65E9C", + "has_app": false + }, + { + "first_name": "Patricia", + "last_name": "Short", + "organization": "Lopez Inc", + "email": "khanjoseph@example.org", + "pretix_order": "208D6", + "has_app": true + }, + { + "first_name": "Jennifer", + "last_name": "Case", + "organization": "Rhodes Inc", + "email": "gomezstephanie@example.org", + "pretix_order": "FEAF8", + "has_app": false + }, + { + "first_name": "William", + "last_name": "Rosales", + "organization": "Cole-Brown", + "email": "alishafry@example.com", + "pretix_order": "33980", + "has_app": false + }, + { + "first_name": "Heather", + "last_name": "Watkins", + "organization": "Hernandez, King and Braun", + "email": "madisonjohnson@example.com", + "pretix_order": "591C7", + "has_app": false + }, + { + "first_name": "Aaron", + "last_name": "Potts", + "organization": "Avery-Johnson", + "email": "jennifer96@example.com", + "pretix_order": "B2511", + "has_app": true + }, + { + "first_name": "Karina", + "last_name": "Boone", + "organization": "Grant Inc", + "email": "ashley66@example.net", + "pretix_order": "8E479", + "has_app": true + }, + { + "first_name": "Kevin", + "last_name": "Butler", + "organization": "Smith, Copeland and Robles", + "email": "michellemiller@example.com", + "pretix_order": "69AE1", + "has_app": false + }, + { + "first_name": "Justin", + "last_name": "Becker", + "organization": "Moreno-Perez", + "email": "xmoran@example.com", + "pretix_order": "420B9", + "has_app": false + }, + { + "first_name": "Terri", + "last_name": "Briggs", + "organization": "Thomas LLC", + "email": "andrew92@example.net", + "pretix_order": "684A7", + "has_app": false + }, + { + "first_name": "Sheri", + "last_name": "Soto", + "organization": "Sanchez PLC", + "email": "gwest@example.org", + "pretix_order": "6BD50", + "has_app": true + }, + { + "first_name": "Monica", + "last_name": "Prince", + "organization": "Reynolds-Miller", + "email": "vdunlap@example.com", + "pretix_order": "9256B", + "has_app": false + }, + { + "first_name": "Stephanie", + "last_name": "Sosa", + "organization": "Stokes, Petersen and Bentley", + "email": "pdurham@example.org", + "pretix_order": "CF360", + "has_app": true + }, + { + "first_name": "Dakota", + "last_name": "Lewis", + "organization": "Johnson, Lara and Sawyer", + "email": "debbiereed@example.net", + "pretix_order": "14A28", + "has_app": true + }, + { + "first_name": "Kelsey", + "last_name": "Hall", + "organization": "Walker LLC", + "email": "armstrongtony@example.com", + "pretix_order": "0F026", + "has_app": true + }, + { + "first_name": "Rebecca", + "last_name": "Koch", + "organization": "Anderson-Brown", + "email": "huntmarcus@example.com", + "pretix_order": "FEF22", + "has_app": false + }, + { + "first_name": "Laura", + "last_name": "Vazquez", + "organization": "Murray-Chandler", + "email": "michael69@example.com", + "pretix_order": "19418", + "has_app": false + }, + { + "first_name": "Jennifer", + "last_name": "Anderson", + "organization": "Munoz-Paul", + "email": "veronicacarr@example.com", + "pretix_order": "ACF19", + "has_app": true + }, + { + "first_name": "Frederick", + "last_name": "Hall", + "organization": "Smith PLC", + "email": "bsmith@example.org", + "pretix_order": "136B1", + "has_app": true + }, + { + "first_name": "Shannon", + "last_name": "Haley", + "organization": "Cunningham-Casey", + "email": "james55@example.com", + "pretix_order": "48E31", + "has_app": true + }, + { + "first_name": "Kayla", + "last_name": "Johnson", + "organization": "Larsen, Holden and Oneill", + "email": "bjones@example.com", + "pretix_order": "53E91", + "has_app": false + }, + { + "first_name": "Dalton", + "last_name": "Jones", + "organization": "Thompson, Richardson and Sanchez", + "email": "vglass@example.com", + "pretix_order": "96192", + "has_app": false + }, + { + "first_name": "Carl", + "last_name": "Turner", + "organization": "Perry-Salazar", + "email": "zacharyhamilton@example.com", + "pretix_order": "5F316", + "has_app": true + }, + { + "first_name": "Melinda", + "last_name": "Scott", + "organization": "Johnson, Marks and Diaz", + "email": "cnavarro@example.com", + "pretix_order": "0AE7A", + "has_app": true + }, + { + "first_name": "Juan", + "last_name": "Morrison", + "organization": "Holt LLC", + "email": "vjohnston@example.com", + "pretix_order": "D903D", + "has_app": true + }, + { + "first_name": "Jessica", + "last_name": "Carr", + "organization": "Mckay Inc", + "email": "sarah34@example.com", + "pretix_order": "3F49C", + "has_app": false + }, + { + "first_name": "Jay", + "last_name": "Green", + "organization": "Cortez, Flores and Bowman", + "email": "joshua12@example.org", + "pretix_order": "30AA5", + "has_app": false + }, + { + "first_name": "Gina", + "last_name": "Gordon", + "organization": "Maynard Ltd", + "email": "emilywhitney@example.com", + "pretix_order": "5DAE2", + "has_app": false + }, + { + "first_name": "Jennifer", + "last_name": "Juarez", + "organization": "Mullins and Sons", + "email": "oscott@example.org", + "pretix_order": "F8A79", + "has_app": false + }, + { + "first_name": "Carlos", + "last_name": "Heath", + "organization": "Ortiz Group", + "email": "johnsonmegan@example.com", + "pretix_order": "137C1", + "has_app": true + }, + { + "first_name": "Susan", + "last_name": "Little", + "organization": "Osborn PLC", + "email": "veronicabeck@example.com", + "pretix_order": "E61A1", + "has_app": false + }, + { + "first_name": "Jeremy", + "last_name": "Newman", + "organization": "Johnson, Moore and Barr", + "email": "jacobvincent@example.net", + "pretix_order": "314E6", + "has_app": false + }, + { + "first_name": "Brenda", + "last_name": "Shaffer", + "organization": "Brooks-Rubio", + "email": "xrussell@example.com", + "pretix_order": "E9505", + "has_app": false + }, + { + "first_name": "George", + "last_name": "Carr", + "organization": "Martin-Joseph", + "email": "francis52@example.com", + "pretix_order": "3AEC2", + "has_app": true + }, + { + "first_name": "Renee", + "last_name": "Coleman", + "organization": "Patel, Arnold and Mathis", + "email": "vmejia@example.com", + "pretix_order": "B1E45", + "has_app": false + }, + { + "first_name": "Travis", + "last_name": "Newton", + "organization": "Reyes Inc", + "email": "janet48@example.com", + "pretix_order": "E27F7", + "has_app": true + }, + { + "first_name": "Amy", + "last_name": "Winters", + "organization": "Allen LLC", + "email": "matthewjohnson@example.com", + "pretix_order": "1DA51", + "has_app": false + }, + { + "first_name": "Aaron", + "last_name": "Mcdonald", + "organization": "Roberts-Black", + "email": "meyerbrittany@example.com", + "pretix_order": "73AFA", + "has_app": true + }, + { + "first_name": "Heather", + "last_name": "Little", + "organization": "Erickson, Shaw and Craig", + "email": "tvalenzuela@example.org", + "pretix_order": "7FD21", + "has_app": false + }, + { + "first_name": "Zachary", + "last_name": "Burton", + "organization": "Zimmerman Group", + "email": "laurie79@example.org", + "pretix_order": "C0816", + "has_app": true + }, + { + "first_name": "Alexis", + "last_name": "Love", + "organization": "Hayes Group", + "email": "jacqueline98@example.com", + "pretix_order": "E798B", + "has_app": true + }, + { + "first_name": "Patricia", + "last_name": "Roberts", + "organization": "Underwood Group", + "email": "mooreluis@example.net", + "pretix_order": "92BA0", + "has_app": false + }, + { + "first_name": "Sandra", + "last_name": "Delgado", + "organization": "Brown PLC", + "email": "whitewesley@example.com", + "pretix_order": "6D95F", + "has_app": false + }, + { + "first_name": "Jeffrey", + "last_name": "Freeman", + "organization": "Smith, Cooper and Barnes", + "email": "warmstrong@example.org", + "pretix_order": "AB153", + "has_app": true + }, + { + "first_name": "Savannah", + "last_name": "Johnson", + "organization": "Fisher LLC", + "email": "katelynhoffman@example.net", + "pretix_order": "6E5D6", + "has_app": false + }, + { + "first_name": "Dennis", + "last_name": "Rogers", + "organization": "Anderson PLC", + "email": "johnhines@example.org", + "pretix_order": "FE246", + "has_app": false + }, + { + "first_name": "Michael", + "last_name": "Skinner", + "organization": "Hebert, Smith and Powers", + "email": "david56@example.net", + "pretix_order": "C6F20", + "has_app": false + }, + { + "first_name": "Billy", + "last_name": "Soto", + "organization": "Ward LLC", + "email": "millerjordan@example.org", + "pretix_order": "52911", + "has_app": false + }, + { + "first_name": "Laurie", + "last_name": "Hoffman", + "organization": "Lopez PLC", + "email": "bennettjoshua@example.com", + "pretix_order": "E3C7C", + "has_app": false + }, + { + "first_name": "Joshua", + "last_name": "Gonzalez", + "organization": "Black Group", + "email": "mmiller@example.net", + "pretix_order": "8F68F", + "has_app": true + }, + { + "first_name": "James", + "last_name": "Benton", + "organization": "York, Harrison and Brooks", + "email": "patelcolleen@example.net", + "pretix_order": "CF32A", + "has_app": true + }, + { + "first_name": "Erin", + "last_name": "Williams", + "organization": "Schultz and Sons", + "email": "eoliver@example.org", + "pretix_order": "317EB", + "has_app": true + }, + { + "first_name": "Amber", + "last_name": "Goodwin", + "organization": "Allison-Mahoney", + "email": "briannewman@example.org", + "pretix_order": "947A2", + "has_app": true + }, + { + "first_name": "Robert", + "last_name": "Rodriguez", + "organization": "Smith-Taylor", + "email": "sandra92@example.net", + "pretix_order": "09742", + "has_app": true + }, + { + "first_name": "Duane", + "last_name": "Knox", + "organization": "Decker LLC", + "email": "jenkinslisa@example.net", + "pretix_order": "3082C", + "has_app": true + }, + { + "first_name": "Amber", + "last_name": "Butler", + "organization": "Ayers-Contreras", + "email": "robertjackson@example.net", + "pretix_order": "4AE18", + "has_app": true + }, + { + "first_name": "Melissa", + "last_name": "Hernandez", + "organization": "Melton-Cook", + "email": "carolyn99@example.org", + "pretix_order": "66B3F", + "has_app": false + }, + { + "first_name": "Steven", + "last_name": "Heath", + "organization": "Rivas, Shepherd and Hurst", + "email": "hernandezdanny@example.com", + "pretix_order": "8310D", + "has_app": true + }, + { + "first_name": "Kathryn", + "last_name": "Ward", + "organization": "Galvan, Carter and Smith", + "email": "martinezashley@example.net", + "pretix_order": "12698", + "has_app": true + }, + { + "first_name": "Alexandria", + "last_name": "Tate", + "organization": "Obrien Ltd", + "email": "nelsonadam@example.org", + "pretix_order": "E3927", + "has_app": false + }, + { + "first_name": "Wayne", + "last_name": "Thomas", + "organization": "Salazar-Preston", + "email": "william88@example.org", + "pretix_order": "E3440", + "has_app": false + }, + { + "first_name": "Sara", + "last_name": "Young", + "organization": "Arroyo, Norman and Casey", + "email": "bonnie99@example.org", + "pretix_order": "62930", + "has_app": false + }, + { + "first_name": "Wendy", + "last_name": "Hood", + "organization": "Flores Ltd", + "email": "andrewcummings@example.org", + "pretix_order": "02371", + "has_app": false + }, + { + "first_name": "Rachel", + "last_name": "Morales", + "organization": "Wilson Group", + "email": "jeromegrant@example.org", + "pretix_order": "71E16", + "has_app": true + }, + { + "first_name": "Shannon", + "last_name": "Richards", + "organization": "Mccormick, Hunt and Rodgers", + "email": "christophergreen@example.com", + "pretix_order": "7FD8C", + "has_app": true + }, + { + "first_name": "Robert", + "last_name": "Scott", + "organization": "Stein Ltd", + "email": "faulknerrandy@example.com", + "pretix_order": "70600", + "has_app": false + }, + { + "first_name": "Joshua", + "last_name": "Montgomery", + "organization": "Nguyen-Johnson", + "email": "camachodiane@example.org", + "pretix_order": "08CFD", + "has_app": false + }, + { + "first_name": "Cindy", + "last_name": "Ramirez", + "organization": "Chavez LLC", + "email": "vangcharles@example.com", + "pretix_order": "12020", + "has_app": true + }, + { + "first_name": "Sarah", + "last_name": "Taylor", + "organization": "Neal Ltd", + "email": "lcampbell@example.com", + "pretix_order": "F3B0D", + "has_app": true + }, + { + "first_name": "Jimmy", + "last_name": "Tucker", + "organization": "Clark, Nguyen and Lee", + "email": "arthur84@example.org", + "pretix_order": "9FBB3", + "has_app": true + }, + { + "first_name": "Bryan", + "last_name": "Chapman", + "organization": "Johnson-Diaz", + "email": "jacobgraham@example.com", + "pretix_order": "8DA2C", + "has_app": false + }, + { + "first_name": "William", + "last_name": "Bailey", + "organization": "Tucker-Harris", + "email": "patelrenee@example.org", + "pretix_order": "25BDB", + "has_app": false + }, + { + "first_name": "Tina", + "last_name": "Vincent", + "organization": "Henderson Inc", + "email": "glenda21@example.net", + "pretix_order": "0D07F", + "has_app": false + }, + { + "first_name": "Joanna", + "last_name": "Wilson", + "organization": "Reed, Gray and Baldwin", + "email": "schaefermichael@example.net", + "pretix_order": "DE84A", + "has_app": false + }, + { + "first_name": "Wyatt", + "last_name": "Stevenson", + "organization": "Hogan, Townsend and Miller", + "email": "andrew00@example.com", + "pretix_order": "39D32", + "has_app": false + }, + { + "first_name": "Philip", + "last_name": "Crawford", + "organization": "Frederick PLC", + "email": "abarr@example.net", + "pretix_order": "56080", + "has_app": false + }, + { + "first_name": "Richard", + "last_name": "Hoffman", + "organization": "Jackson, Hudson and Hinton", + "email": "jmorris@example.com", + "pretix_order": "A9E73", + "has_app": true + }, + { + "first_name": "Erin", + "last_name": "Stephens", + "organization": "Trevino, Henderson and Mata", + "email": "sjohnson@example.com", + "pretix_order": "D2556", + "has_app": true + }, + { + "first_name": "Curtis", + "last_name": "Powell", + "organization": "Pham, Alvarez and Miller", + "email": "boothsabrina@example.com", + "pretix_order": "C6537", + "has_app": true + }, + { + "first_name": "Katrina", + "last_name": "Torres", + "organization": "Patterson PLC", + "email": "michelle41@example.com", + "pretix_order": "0A092", + "has_app": true + }, + { + "first_name": "Yolanda", + "last_name": "Ford", + "organization": "Stone, Barton and Hodges", + "email": "xfleming@example.net", + "pretix_order": "A271C", + "has_app": true + }, + { + "first_name": "Derek", + "last_name": "Thompson", + "organization": "Chang Group", + "email": "fmoore@example.net", + "pretix_order": "28321", + "has_app": true + }, + { + "first_name": "Kayla", + "last_name": "Cooper", + "organization": "Miller-Obrien", + "email": "adamjohnson@example.net", + "pretix_order": "C5F49", + "has_app": false + }, + { + "first_name": "Christopher", + "last_name": "Lopez", + "organization": "Goodman, Ferguson and Andrews", + "email": "joshuamarshall@example.net", + "pretix_order": "1146F", + "has_app": true + }, + { + "first_name": "Robert", + "last_name": "Nunez", + "organization": "Johnson-Thompson", + "email": "ritterdeborah@example.com", + "pretix_order": "52427", + "has_app": false + }, + { + "first_name": "Stephanie", + "last_name": "Vasquez", + "organization": "Gonzales, Morrow and Moore", + "email": "keith07@example.com", + "pretix_order": "12E22", + "has_app": true + }, + { + "first_name": "Brandy", + "last_name": "Bass", + "organization": "Oneill LLC", + "email": "qmiles@example.net", + "pretix_order": "F1B46", + "has_app": true + }, + { + "first_name": "Adrienne", + "last_name": "Adams", + "organization": "Cox Group", + "email": "stephen67@example.org", + "pretix_order": "A40F5", + "has_app": true + }, + { + "first_name": "Bradley", + "last_name": "Ryan", + "organization": "Mathis-Martin", + "email": "coryfitzgerald@example.org", + "pretix_order": "D8866", + "has_app": true + }, + { + "first_name": "Melissa", + "last_name": "Powell", + "organization": "Farmer LLC", + "email": "ujuarez@example.org", + "pretix_order": "41CEA", + "has_app": true + }, + { + "first_name": "Sabrina", + "last_name": "Ford", + "organization": "Burton Group", + "email": "alexbarrett@example.com", + "pretix_order": "0F651", + "has_app": true + }, + { + "first_name": "Kim", + "last_name": "Wright", + "organization": "Montgomery LLC", + "email": "davisdavid@example.org", + "pretix_order": "1971D", + "has_app": false + }, + { + "first_name": "Melanie", + "last_name": "Smith", + "organization": "Cunningham-Sims", + "email": "jeffreyritter@example.com", + "pretix_order": "FEE75", + "has_app": true + }, + { + "first_name": "Gregory", + "last_name": "Dyer", + "organization": "Nguyen, Weaver and Osborn", + "email": "cookjustin@example.org", + "pretix_order": "A0C77", + "has_app": false + }, + { + "first_name": "Kevin", + "last_name": "Conley", + "organization": "Phillips, Ramos and Martinez", + "email": "connor57@example.net", + "pretix_order": "3A268", + "has_app": true + }, + { + "first_name": "Michael", + "last_name": "Petty", + "organization": "Barber, Marshall and Henry", + "email": "brandon12@example.net", + "pretix_order": "944D4", + "has_app": true + }, + { + "first_name": "Mark", + "last_name": "Mendez", + "organization": "Cooper Inc", + "email": "qparker@example.net", + "pretix_order": "20BE0", + "has_app": false + }, + { + "first_name": "Brittany", + "last_name": "Mitchell", + "organization": "Thomas Group", + "email": "bmoore@example.org", + "pretix_order": "B89DC", + "has_app": false + }, + { + "first_name": "Teresa", + "last_name": "Lawson", + "organization": "Castillo-Cantrell", + "email": "johncrawford@example.net", + "pretix_order": "0175D", + "has_app": true + }, + { + "first_name": "Michael", + "last_name": "Gomez", + "organization": "Peters, Rodriguez and Anderson", + "email": "cynthiaolsen@example.com", + "pretix_order": "2E63C", + "has_app": false + }, + { + "first_name": "Jacob", + "last_name": "Fisher", + "organization": "Williams-Flores", + "email": "yanderson@example.com", + "pretix_order": "3ADFA", + "has_app": false + }, + { + "first_name": "Angela", + "last_name": "Simpson", + "organization": "Lynch and Sons", + "email": "danielleblanc@example.com", + "pretix_order": "77EE9", + "has_app": false + }, + { + "first_name": "Melissa", + "last_name": "May", + "organization": "Martinez, Perkins and Pearson", + "email": "williamhall@example.org", + "pretix_order": "E0127", + "has_app": false + }, + { + "first_name": "Michael", + "last_name": "Holt", + "organization": "Snyder-Howard", + "email": "stevencastillo@example.com", + "pretix_order": "AEDBB", + "has_app": true + }, + { + "first_name": "Nicholas", + "last_name": "Hatfield", + "organization": "Jackson-Nelson", + "email": "reesechristina@example.net", + "pretix_order": "CF401", + "has_app": false + }, + { + "first_name": "Joseph", + "last_name": "Matthews", + "organization": "Young Ltd", + "email": "marco02@example.org", + "pretix_order": "8C1D0", + "has_app": false + }, + { + "first_name": "John", + "last_name": "Gomez", + "organization": "King, Osborne and Parker", + "email": "matthewwashington@example.net", + "pretix_order": "DDE41", + "has_app": false + }, + { + "first_name": "Desiree", + "last_name": "Davis", + "organization": "Russell, Crane and Barber", + "email": "shelby82@example.net", + "pretix_order": "E8BEB", + "has_app": false + }, + { + "first_name": "Trevor", + "last_name": "Mills", + "organization": "Carpenter-Willis", + "email": "taylormaldonado@example.com", + "pretix_order": "A4897", + "has_app": true + }, + { + "first_name": "John", + "last_name": "Bond", + "organization": "Smith-Johnson", + "email": "fdecker@example.org", + "pretix_order": "F7CA1", + "has_app": false + }, + { + "first_name": "Christopher", + "last_name": "Hudson", + "organization": "Flynn Inc", + "email": "terri13@example.net", + "pretix_order": "6BDAF", + "has_app": true + }, + { + "first_name": "Randall", + "last_name": "Thompson", + "organization": "Liu, Glenn and Fernandez", + "email": "gregory12@example.net", + "pretix_order": "093F1", + "has_app": true + }, + { + "first_name": "Nicole", + "last_name": "Navarro", + "organization": "Lewis, Cain and Henderson", + "email": "scott86@example.net", + "pretix_order": "46923", + "has_app": true + }, + { + "first_name": "Lindsey", + "last_name": "Burgess", + "organization": "Rivera LLC", + "email": "willie66@example.org", + "pretix_order": "D23A7", + "has_app": false + }, + { + "first_name": "Cody", + "last_name": "Garcia", + "organization": "Robbins Inc", + "email": "brandoncraig@example.net", + "pretix_order": "EC20A", + "has_app": true + }, + { + "first_name": "Robert", + "last_name": "White", + "organization": "Mcguire, Moses and Johnson", + "email": "ashley85@example.com", + "pretix_order": "B8945", + "has_app": true + }, + { + "first_name": "Lauren", + "last_name": "Holland", + "organization": "Melendez LLC", + "email": "nross@example.com", + "pretix_order": "AB620", + "has_app": true + }, + { + "first_name": "Shannon", + "last_name": "Harrington", + "organization": "King-Aguirre", + "email": "smorrison@example.org", + "pretix_order": "14776", + "has_app": true + }, + { + "first_name": "Dawn", + "last_name": "Tyler", + "organization": "Franklin-Pacheco", + "email": "greenkeith@example.com", + "pretix_order": "9410B", + "has_app": true + }, + { + "first_name": "Meghan", + "last_name": "Johnson", + "organization": "Becker Group", + "email": "kristina41@example.com", + "pretix_order": "32C7F", + "has_app": false + }, + { + "first_name": "Diana", + "last_name": "Hammond", + "organization": "Young PLC", + "email": "rodriguezdaniel@example.net", + "pretix_order": "4717F", + "has_app": true + }, + { + "first_name": "Robert", + "last_name": "Porter", + "organization": "Hamilton PLC", + "email": "williamstonya@example.com", + "pretix_order": "DDFC0", + "has_app": false + }, + { + "first_name": "Cory", + "last_name": "Carter", + "organization": "Bates, Smith and Harris", + "email": "mcleanamanda@example.net", + "pretix_order": "95463", + "has_app": false + }, + { + "first_name": "Jacob", + "last_name": "Hale", + "organization": "Johnson Group", + "email": "lauren99@example.com", + "pretix_order": "5ADFD", + "has_app": false + }, + { + "first_name": "Michael", + "last_name": "Hall", + "organization": "Oliver and Sons", + "email": "munozcharles@example.com", + "pretix_order": "004D0", + "has_app": false + }, + { + "first_name": "Sandra", + "last_name": "Henderson", + "organization": "Henderson-Foster", + "email": "natalie37@example.net", + "pretix_order": "A5E3D", + "has_app": true + }, + { + "first_name": "Kristen", + "last_name": "Henderson", + "organization": "Beltran, Bruce and Hernandez", + "email": "buchananangela@example.org", + "pretix_order": "5ED60", + "has_app": true + }, + { + "first_name": "Linda", + "last_name": "Hall", + "organization": "Simon, Davis and Casey", + "email": "harringtonkaren@example.org", + "pretix_order": "52727", + "has_app": true + }, + { + "first_name": "Christopher", + "last_name": "Mora", + "organization": "Martin Group", + "email": "lowethomas@example.net", + "pretix_order": "CA0D1", + "has_app": false + }, + { + "first_name": "Donna", + "last_name": "Winters", + "organization": "Adams Group", + "email": "alexstanley@example.net", + "pretix_order": "B81A1", + "has_app": false + }, + { + "first_name": "Roberto", + "last_name": "Rodriguez", + "organization": "Robinson, Hall and Martin", + "email": "stephaniegreen@example.com", + "pretix_order": "612C4", + "has_app": true + }, + { + "first_name": "Anthony", + "last_name": "Alexander", + "organization": "Cox, Campbell and Esparza", + "email": "pwalker@example.com", + "pretix_order": "7FA26", + "has_app": true + }, + { + "first_name": "Sara", + "last_name": "Finley", + "organization": "Lopez, Bradley and Rivera", + "email": "carlosparker@example.com", + "pretix_order": "7F67E", + "has_app": true + }, + { + "first_name": "Andres", + "last_name": "Valencia", + "organization": "Wilson-Mcintyre", + "email": "osteele@example.org", + "pretix_order": "8972C", + "has_app": true + }, + { + "first_name": "Kelsey", + "last_name": "Patel", + "organization": "Edwards and Sons", + "email": "crystalsims@example.net", + "pretix_order": "F426D", + "has_app": false + }, + { + "first_name": "Brent", + "last_name": "Smith", + "organization": "Leonard Inc", + "email": "beverly75@example.com", + "pretix_order": "04F15", + "has_app": true + }, + { + "first_name": "Elizabeth", + "last_name": "Williams", + "organization": "Tucker and Sons", + "email": "sbarajas@example.org", + "pretix_order": "F5359", + "has_app": true + }, + { + "first_name": "Nicholas", + "last_name": "Swanson", + "organization": "Gutierrez-Bates", + "email": "rpage@example.com", + "pretix_order": "A5987", + "has_app": true + }, + { + "first_name": "James", + "last_name": "White", + "organization": "Peck, Lopez and Gilbert", + "email": "juliasteele@example.com", + "pretix_order": "34A8C", + "has_app": false + }, + { + "first_name": "Shawn", + "last_name": "Nguyen", + "organization": "Hopkins-Young", + "email": "jose98@example.com", + "pretix_order": "59C80", + "has_app": true + }, + { + "first_name": "Jessica", + "last_name": "Smith", + "organization": "Mullen, Peters and Parker", + "email": "cody27@example.org", + "pretix_order": "30D6A", + "has_app": false + }, + { + "first_name": "Audrey", + "last_name": "Mason", + "organization": "Morales-Contreras", + "email": "stephanie76@example.org", + "pretix_order": "D76EA", + "has_app": false + }, + { + "first_name": "Donna", + "last_name": "Carter", + "organization": "Richards PLC", + "email": "zbrown@example.com", + "pretix_order": "94BF8", + "has_app": true + }, + { + "first_name": "Timothy", + "last_name": "Zimmerman", + "organization": "Lindsey-Martinez", + "email": "weeksjames@example.org", + "pretix_order": "71BE8", + "has_app": true + }, + { + "first_name": "Jennifer", + "last_name": "Hicks", + "organization": "Greene, Hill and Jones", + "email": "bennettrebecca@example.org", + "pretix_order": "4C2DB", + "has_app": false + }, + { + "first_name": "Mark", + "last_name": "Graves", + "organization": "Lee, Brown and Swanson", + "email": "griffinchristopher@example.net", + "pretix_order": "F59A4", + "has_app": true + }, + { + "first_name": "Lee", + "last_name": "Gonzalez", + "organization": "Thomas-Gonzalez", + "email": "raycalhoun@example.net", + "pretix_order": "59AB0", + "has_app": false + }, + { + "first_name": "Valerie", + "last_name": "Aguilar", + "organization": "Thomas and Sons", + "email": "mlove@example.org", + "pretix_order": "6E2D1", + "has_app": true + }, + { + "first_name": "Dennis", + "last_name": "Brewer", + "organization": "Santiago, Henderson and Malone", + "email": "janerodriguez@example.org", + "pretix_order": "A1D79", + "has_app": true + }, + { + "first_name": "Jerry", + "last_name": "Simpson", + "organization": "Nichols, Diaz and Mccoy", + "email": "marc69@example.net", + "pretix_order": "FD793", + "has_app": true + }, + { + "first_name": "John", + "last_name": "Potter", + "organization": "Martin Ltd", + "email": "josefrazier@example.org", + "pretix_order": "2ED75", + "has_app": false + }, + { + "first_name": "Andrew", + "last_name": "Perry", + "organization": "Wilson, Smith and Rivers", + "email": "suzanne79@example.com", + "pretix_order": "3700E", + "has_app": true + }, + { + "first_name": "Cameron", + "last_name": "Martinez", + "organization": "Rodriguez-Blankenship", + "email": "lisa30@example.com", + "pretix_order": "A8700", + "has_app": true + }, + { + "first_name": "Michael", + "last_name": "Larson", + "organization": "Gregory Inc", + "email": "ebarnett@example.com", + "pretix_order": "12E5C", + "has_app": false + }, + { + "first_name": "Nancy", + "last_name": "Obrien", + "organization": "Carter-Gray", + "email": "tony95@example.org", + "pretix_order": "43480", + "has_app": true + }, + { + "first_name": "Brian", + "last_name": "Kim", + "organization": "Phillips Group", + "email": "melissa01@example.org", + "pretix_order": "BCD52", + "has_app": false + }, + { + "first_name": "Jason", + "last_name": "Fernandez", + "organization": "Vaughn-Vance", + "email": "lucas16@example.org", + "pretix_order": "E8434", + "has_app": true + }, + { + "first_name": "Carl", + "last_name": "Cook", + "organization": "Lawrence-Murray", + "email": "dean21@example.net", + "pretix_order": "3511C", + "has_app": false + }, + { + "first_name": "Michael", + "last_name": "Beard", + "organization": "Fields and Sons", + "email": "marypadilla@example.com", + "pretix_order": "B1A43", + "has_app": true + }, + { + "first_name": "Robert", + "last_name": "Kelley", + "organization": "Sullivan and Sons", + "email": "james85@example.com", + "pretix_order": "69C9A", + "has_app": true + }, + { + "first_name": "Andrew", + "last_name": "Brown", + "organization": "Marquez-Banks", + "email": "zjoseph@example.org", + "pretix_order": "6E4EF", + "has_app": false + }, + { + "first_name": "Elizabeth", + "last_name": "Jenkins", + "organization": "Richard, Knight and Roach", + "email": "michael23@example.com", + "pretix_order": "69391", + "has_app": false + }, + { + "first_name": "Isaiah", + "last_name": "Flores", + "organization": "Cantu-Rowland", + "email": "johnsonanthony@example.net", + "pretix_order": "90390", + "has_app": true + }, + { + "first_name": "Jonathan", + "last_name": "Fletcher", + "organization": "Fox-Owens", + "email": "kristenmartin@example.net", + "pretix_order": "AFCCE", + "has_app": false + }, + { + "first_name": "Martha", + "last_name": "Solomon", + "organization": "Davis Inc", + "email": "davidsilva@example.net", + "pretix_order": "2D133", + "has_app": true + }, + { + "first_name": "Matthew", + "last_name": "Powell", + "organization": "Gonzalez Group", + "email": "judith51@example.org", + "pretix_order": "47C42", + "has_app": false + }, + { + "first_name": "Hannah", + "last_name": "Smith", + "organization": "Walters-Wilson", + "email": "cynthianixon@example.net", + "pretix_order": "78E69", + "has_app": true + }, + { + "first_name": "Jason", + "last_name": "Smith", + "organization": "Bennett Group", + "email": "valentinerita@example.com", + "pretix_order": "1755E", + "has_app": true + }, + { + "first_name": "Dawn", + "last_name": "Eaton", + "organization": "Velasquez-Moss", + "email": "jenniferweber@example.net", + "pretix_order": "EC17B", + "has_app": false + }, + { + "first_name": "Carlos", + "last_name": "Butler", + "organization": "Crawford Inc", + "email": "yyoung@example.org", + "pretix_order": "54769", + "has_app": true + }, + { + "first_name": "Sean", + "last_name": "Webster", + "organization": "Torres and Sons", + "email": "yerickson@example.com", + "pretix_order": "C54D1", + "has_app": true + } +] \ No newline at end of file diff --git a/src/tests/assets/sfs2023streaming.yaml b/src/tests/assets/sfs2023streaming.yaml new file mode 100644 index 0000000..b43c57c --- /dev/null +++ b/src/tests/assets/sfs2023streaming.yaml @@ -0,0 +1,13 @@ +Main Track: Seminar https://maps.sfscon.it/l/sem1/ +Ethics, Policy, Legal & Economics: Seminar 1 - https://maps.sfscon.it/l/sem1/ +Data Spaces: Seminar 2 - https://maps.sfscon.it/l/sem2/ +Open Hardware: Seminar 3 - https://maps.sfscon.it/l/sem3/ +Developers: Seminar 4 - https://maps.sfscon.it/l/sem4/ +Crane Hall BOF meetings: Crane Hall - https://maps.sfscon.it/l/kranhalle/ +Community Building: Friday - Seminar 2 - https://maps.sfscon.it/l/sem2/ +DevOps: Seminar 3 - https://maps.sfscon.it/l/sem3/ +Cybersecurity: Seminar 3 - https://maps.sfscon.it/l/sem3/ +OW2: Seminar 4 - https://maps.sfscon.it/l/sem4/ +Women* in tech: Seminar 2 - https://maps.sfscon.it/l/sem2/ +FSFE Italian Community Meeting: Seminar 3 - https://maps.sfscon.it/l/sem3/ +Fediverse: Seminar 2 - https://maps.sfscon.it/l/sem2/ \ No newline at end of file diff --git a/src/tests/assets/sfs2024.10.14.json b/src/tests/assets/sfs2024.10.14.json new file mode 100644 index 0000000..2c84c38 --- /dev/null +++ b/src/tests/assets/sfs2024.10.14.json @@ -0,0 +1,3660 @@ +{ + "conference": { + "acronym": "sfscon-2024", + "title": "SFSCON 2024" + }, + "tracks": { + "track": [ + { + "@color": "#25a2ea", + "#text": "Ethics, Policy, Legal & Economics" + }, + { + "@color": "#49a834", + "#text": "Data Spaces" + }, + { + "@color": "#c62ecc", + "#text": "Open Hardware" + }, + { + "@color": "#c48c2d", + "#text": "Developers" + }, + { + "@color": "#6b6b6b", + "#text": "Community Building" + }, + { + "@color": "#d31d4e", + "#text": "Cybersecurity" + }, + { + "@color": "#34ad16", + "#text": "Fediverse" + }, + { + "@color": "#aa2727", + "#text": "DevOps" + }, + { + "@color": "#a8a8a8", + "#text": "Side Event - Hackathon" + }, + { + "@color": "#a8a8a8", + "#text": "Side Event - School Reading" + }, + { + "@color": "#a8a8a8", + "#text": "Side Event - MiniNOI x SFSCON" + }, + { + "@color": "#b7d631", + "#text": "OW2" + }, + { + "@color": "#f427c8", + "#text": "Side Event - Women* in tech" + }, + { + "@color": "#1e73be", + "#text": "Side Event - Crane Hall BOF meetings" + }, + { + "@color": "#49e547", + "#text": "Side Event - FSFE - Italian community meeting" + } + ] + }, + "day": [ + { + "@date": "2024-11-08", + "room": [ + { + "@name": "NOI Techpark", + "event": { + "@id": "670d1b59a3c5cbef13fe69044b9f040f25623a9417923", + "@unique_id": "2024day1event98", + "@bookmark": "0", + "@rating": "0", + "start": "08:30", + "duration": "00:30", + "title": "Check-in SFSCON 2024", + "language": null, + "track": "SFSCON - Main track", + "category": "SFSCON - Main track", + "type": "SFSCON,Main track", + "bookmark": "0", + "rating": "0" + } + }, + { + "@name": "Seminar 1", + "event": [ + { + "@id": "670d1b59a4603ca90b84f7d36580a42b9819cd6de35f2", + "@unique_id": "2024day1event91", + "@bookmark": "1", + "@rating": "1", + "start": "09:00", + "duration": "00:10", + "title": "Welcome SFSCON 2024", + "url": "https://www.sfscon.it/talks/welcome-sfscon-2024/", + "language": null, + "track": "SFSCON - Main track", + "category": "SFSCON - Main track", + "type": "SFSCON,Main track", + "persons": { + "person": { + "@id": "4704", + "@organization": "NOI Techpark", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2017/07/Patrick_Ohnewein.png", + "@socials": "[{\"twitter\":\"https:\\/\\/twitter.com\\/ohnewein\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/ohnewein\\/\"}]", + "@bio": "\"Team leader of project managers with specialization in the coordination of various European Research & Development Projects in the field of SMART Tourism, SMART Mobility, SMART Energy and SMART Food. He and his team promote a strategy for innovation build on top of Open Data, Open Standards and Free Open Source Software.\\r\\nHonorary dedicated to the build-up of a Free Software community in South Tyrol since the mid of the 90ties, co-founder of the Linux User Group Bozen-Bolzano-Bulsan (http:\\/\\/lugbz.org\\/<\\/a>), organizes the annual South Tyrol Free Software Conference (http:\\/\\/sfscon.it<\\/a>). Involved as IT-expert in various work-groups and committees for Free Software and for the IT-Community, member of the core team of the Free Software Foundation Europe (http:\\/\\/fsfe.org\\/about\\/team.html<\\/a>), Patrick Ohnewein formerly worked for many years as software developer and multiplier in the software area.\"", + "@url": "https://www.sfscon.it/speakers/patrick-ohnewein/", + "#text": "Patrick Ohnewein" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59a4be132bfb0474f9b283501bcf120cbcdf225", + "@unique_id": "2024day1event1", + "@bookmark": "1", + "@rating": "1", + "start": "09:10", + "duration": "00:05", + "title": "Opening SFSCON 2024", + "url": "https://www.sfscon.it/talks/opening-sfscon-2024/", + "language": null, + "description": "

Opening SFSCON 2024

", + "track": "SFSCON - Main track", + "category": "SFSCON - Main track", + "type": "SFSCON,Main track", + "persons": { + "person": { + "@id": "7351", + "@organization": "Autonomous Province of Bolzano/Bozen – South Tyrol (Italy)", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/10/Philipp_Achammer.jpg", + "@bio": "\"Councilor for German Education and Culture, for the Promotion of Education, Cultural Assets, Innovation, Research, Universities and Museums\"", + "@url": "https://www.sfscon.it/speakers/philipp-achammer/", + "#text": "Philipp Achammer" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59a518e21f7e43aed7a1ef851f4f6a9b4b5e898", + "@unique_id": "2024day1event92", + "@bookmark": "1", + "@rating": "1", + "start": "09:15", + "duration": "00:05", + "title": "Greetings from NOI", + "url": "https://www.sfscon.it/talks/greetings-from-noi/", + "language": null, + "track": "SFSCON - Main track", + "category": "SFSCON - Main track", + "type": "SFSCON,Main track", + "persons": { + "person": { + "@id": "5660", + "@organization": "NOI Techpark", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2021/11/Vincent-Mauroit2.jpg", + "@bio": "\"Vincent Mauroit was born and raised in the Flemish jewel town of Ghent in Belgium and holds an academic Master of Science degree in electromechanical engineering from the University of Ghent and an Executive MBA in general management from the University of Mannheim and the ESSEC Business School in Paris. Vincent is a management and leadership professional with hands-on experience in the areas of driving product innovation, managing operations, quality management, identifying sales opportunities, leading teams, and developing strategies that achieve optimum growth and revenue. He lead the Innovation, product management and advanced development activities of a renowned German automotive Tier1 supplier where he was responsible for the innovation management process and the business development of new products for several car manufacturers including BMW, Daimler, VW\\/Audi, Porsche and car manufacturers in the US (Ford, GM, Tesla, etc\\u2026) and China (BYD, FAW, NIO, etc\\u2026) and he is also a mentor and co-founder of several start-up companies. Vincent has an overall passion for innovation and especially for technological innovations which contribute to a better and more sustainable world and have the potential to make major\\u00a0contributions\\u00a0in solving the big challenges the world is currently facing.\"", + "@url": "https://www.sfscon.it/speakers/vincent-mauroit/", + "#text": "Vincent Mauroit" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59a570158c628a74d3e2883d21e673b4d97a96f", + "@unique_id": "2024day1event93", + "@bookmark": "1", + "@rating": "1", + "start": "09:20", + "duration": "00:05", + "title": "Greetings from Gruppo FOS", + "url": "https://www.sfscon.it/talks/greetings-from-gruppo-fos/", + "language": null, + "track": "SFSCON - Main track", + "category": "SFSCON - Main track", + "type": "SFSCON,Main track", + "persons": { + "person": { + "@id": "4536", + "@organization": "FOS Spa", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2019/08/Giorgio_Allasia.png", + "@bio": "\"Master Degree in Electronic Engineering - 30 years of professional experience.\\r\\nIn FOS Spa since 2005, Giorgio Allasia is currently COO of a Business Unit employing more than 30 people covering the following areas:\\r\\n\\u2022 Engineering and Technology Transfer\\r\\n\\u2022 Research and Development (National and International)\\r\\n\\u2022 Value-added services\\r\\n\\r\\nMain fields of experience:\\r\\n\\u2022 definition of the guidelines and objectives for the development of R&D and Engineering activities\\r\\n\\u2022 managing the work of the BU team to achieve the business and budget objectives of the Business Unit\\r\\n\\u2022 develop Technology Transfer activities at national and international level\\r\\n\\r\\nAdditional roles:\\r\\n\\u2022 Member of the Technical and Scientific Committee of the Start4.0 Competence Center\\r\\n\\u2022 Member of the Technical and Scientific Committee of DIH Liguria\\r\\n\\u2022 Member of the Board of Directors of 3 Business Networks created within the SIIT \\u2013 District of Integrated Intelligent Systems based in Genoa\"", + "@url": "https://www.sfscon.it/speakers/giorgio-allasia/", + "#text": "Giorgio Allasia" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59a5c883309bce0c20e6b5f0a987ca277b8b7b0", + "@unique_id": "2024day1event94", + "@bookmark": "1", + "@rating": "1", + "start": "09:25", + "duration": "00:05", + "title": "Greetings from Telmekom", + "url": "https://www.sfscon.it/talks/greetings-from-telmekom/", + "language": null, + "track": "SFSCON - Main track", + "category": "SFSCON - Main track", + "type": "SFSCON,Main track", + "persons": { + "person": { + "@id": "7358", + "@organization": "Telmekom", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/10/Sergio_Vemic.jpg", + "@url": "https://www.sfscon.it/speakers/sergio-vemic/", + "#text": "Sergio Vemic" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59a611e3b7709c738d05fd184e877e3e3448941", + "@unique_id": "2024day1event2", + "@bookmark": "0", + "@rating": "0", + "start": "09:30", + "duration": "00:30", + "title": "Keynote speaker – coming soon", + "language": null, + "track": "SFSCON - Main track", + "category": "SFSCON - Main track", + "type": "SFSCON,Main track", + "bookmark": "0", + "rating": "0" + }, + { + "@id": "670d1b59a65eeddd03cc1e1da0b09d345507de5819ae7", + "@unique_id": "2024day1event3", + "@bookmark": "0", + "@rating": "0", + "start": "10:00", + "duration": "00:15", + "title": "European SFS Award 2024", + "language": null, + "abstract": "Free Software Foundation Europe (FSFE) and Linux User Group Bozen-Bolzano-Bulsan assign the “European SFS Award”", + "subtitle": "Free Software Foundation Europe (FSFE) and Linux User Group Bozen-Bolzano-Bulsan assign the “European SFS Award”", + "description": "

The award is given to a person who contributed to the introduction of the culture of Free Software.

", + "track": "SFSCON - Main track", + "category": "SFSCON - Main track", + "type": "SFSCON,Main track", + "bookmark": "0", + "rating": "0" + }, + { + "@id": "670d1b59a6aac602400012808810c5aa8b639452fc242", + "@unique_id": "2024day1event89", + "@bookmark": "0", + "@rating": "0", + "start": "10:15", + "duration": "00:15", + "title": "SFS Award 2024", + "language": null, + "abstract": "Linux User Group Bozen-Bolzano-Bulsan assigns the “South Tyrol Free Software Award”", + "subtitle": "Linux User Group Bozen-Bolzano-Bulsan assigns the “South Tyrol Free Software Award”", + "description": "

Every year the Linux User Group Bozen-Bolzano-Bulsan assigns the “South Tyrol Free Software Award” (SFS Award). The award is given to a person who contributed to the introduction of the culture of Free Software in the Province of Bolzano.

", + "track": "SFSCON - Main track", + "category": "SFSCON - Main track", + "type": "SFSCON,Main track", + "bookmark": "0", + "rating": "0" + }, + { + "@id": "670d1b59a756bfc97ec1c1cbe3e99cafaa34579ed18e4", + "@unique_id": "2024day1event95", + "@bookmark": "1", + "@rating": "1", + "start": "10:30", + "duration": "00:10", + "title": "AlmaLinux in brief", + "url": "https://www.sfscon.it/talks/almalinux-in-brief/", + "language": null, + "description": "

In this quick chat, benny will summarize 20 years of context and 4 years of growth in just 10 minutes by highlighting the major points that brought AlmaLinux to the world, how the project has adjusted for each challenge along the way, and what they’re planning next.

", + "track": "SFSCON - Main track", + "category": "SFSCON - Main track", + "type": "SFSCON,Main track", + "persons": { + "person": { + "@id": "7344", + "@organization": "AlmaLinux OS Foundation", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/10/benny_Vasquez_670ab8727de09670abede00c79.jpeg", + "@socials": "[{\"mastodon\":\"https:\\/\\/social.linux.pizza\\/@benny\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/bennyvasquez\\/\"},{\"twitter\":\"https:\\/\\/twitter.com\\/bennyvasquez\"}]", + "@bio": "\"benny is currently the Chair of the AlmaLinux OS Foundation, has a long history in business and community building, and a long and idealistic love of open source.\"", + "@url": "https://www.sfscon.it/speakers/benny-vasquez/", + "#text": "benny Vasquez" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59a7a673b7709c738d05fd184e877e3e3448941", + "@unique_id": "2024day1event4", + "@bookmark": "0", + "@rating": "0", + "start": "10:40", + "duration": "00:20", + "title": "Keynote speaker – coming soon", + "language": null, + "track": "SFSCON - Main track", + "category": "SFSCON - Main track", + "type": "SFSCON,Main track", + "bookmark": "0", + "rating": "0" + }, + { + "@id": "670d1b59a805b91261e6acff65b5273307ce314f6d6b3", + "@unique_id": "2024day1event5", + "@bookmark": "1", + "@rating": "1", + "start": "11:00", + "duration": "00:15", + "title": "Let’s all get over the CRA!", + "url": "https://www.sfscon.it/talks/lets-all-get-over-the-cra/", + "language": null, + "abstract": "how I stopped worrying about the consequences of the CRA for Open Source innovation in Europe and moved to something else", + "subtitle": "how I stopped worrying about the consequences of the CRA for Open Source innovation in Europe and moved to something else", + "description": "

The adoption of the CRA (Cyber Resilience Act) has caused some real anxiety among the FOSS ecosystem. Even in its amended form, many questions remain opened and debated, and more to the point, a lot of uncertainty still surrounds it, not just at the level of its general architecture but also at the implementation level.
\nIt is perhaps fair to mention that the CRA itself does not exist in a void and is building on already existing regulations and ideas. However, it should be explained how the CRA itself was not born inside the institutions of the European Union but is an almost pure product of governmental cyber security circles and agencies. Because of that, the digital ecosystem at large is at pain understanding some of its logic. This talk will start with what we know and what we can infer from the CRA, and how it fits within the general regulatory framework of the European Union. We will thus clarify the following points:

\n

– what does the CRA mean in terms of software security assessment and certification – and how that plays a key role in understanding what the CRA is and what it is not
\n– CRA within the European regulatory framework
\n– CRA implementation: the bad, the ugly, and the unknown

\n

We will then discuss what the concerns are for the FOSS communities. Most notably:

\n

– barriers of entry for Free Software companies, esp. the small and medium ones
\n– legal inability to develop Free and Open Source Software
\n– what will Free and Open Source software foundations do in edge cases and what are they expected to bring in terms of guidance to the companies contributing to their projects

\n

It will then discuss how we can best prepare for it, and make some suggestions on how to solve FOSS specific challenges related to CRA. In particular the talk will explore the following possibilities:

\n

– evolving the role or cross project security teams
\n-promoting best practices in development (CI CD, code auditability) turning the CRA against proprietary software practices
\n– Pooling security audits
\n– Better release management

\n

Last but not least, this talk will discuss the economics behind the CRA and why this may not end up being less of a problem than we think.

", + "track": { + "@color": "#25a2ea", + "#text": "Ethics, Policy, Legal & Economics" + }, + "category": "Ethics, Policy, Legal & Economics", + "type": "Ethics, Policy, Legal & Economics", + "track-url": "https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/", + "persons": { + "person": { + "@id": "4899", + "@organization": "Vates - Xen Project", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/form-speakers/charles-h-schulz-b2685f4ed2dd00e01f75cbae14a2d6dc.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/www.vates.fr\"},{\"twitter\":\"https:\\/\\/www.twitter.com\\/ch_s\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/charlesschulz\"}]", + "@bio": "\"Charles-H. is a French technologist and a Free Software and Open Standards advocate. A long-time contributor to free and open source projects and co-founder of the Document Foundation and LibreOffice, he is considered a renowned expert promoting the adoption of the OpenDocument Format standard. A former director of the OASIS Consortium, he has engaged in various digital public policy debates at the European level. After 6 years working in national security and cybersecurity for the French government, Charles is now in charge of the strategy and partnerships for Vates, a French open source virtualization software vendor.\"", + "@url": "https://www.sfscon.it/speakers/charles-h-schulz/", + "#text": "Charles-H. Schulz" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59a9cedacbbb27690a11ddf87dce9d0c911eaeb", + "@bookmark": "1", + "@rating": "1", + "start": "11:20", + "duration": "00:15", + "title": "Ensuring fair behavior among Autonomous Vehicles", + "url": null, + "language": null, + "description": "

The rapid evolution of autonomous systems is leading to the formation of Autonomous Ecosystems, complex networks of machines with their own governance challenges. A good example of such ecosystem could be a city with Autonomous Vehicles. A key issue in these ecosystems is to ensure that machines behave fairly towards each other. This talk proposes a novel interdisciplinary approach by utilizing blockchain technology to monetize fairness. By creating fairness tokens, the fair behavior of machines becomes a quantifiable, incentivized metric. Fair behavior can be rewarded with these tokens, which can also be used to purchase fairness within the ecosystem. This approach not only encourages equitable machine interactions but also offers a self-regulating mechanism for the maintenance and governance of these ecosystems.

", + "track": { + "@color": "#25a2ea", + "#text": "Ethics, Policy, Legal & Economics" + }, + "category": "Ethics, Policy, Legal & Economics", + "type": "Ethics, Policy, Legal & Economics", + "track-url": "https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/", + "persons": { + "person": [ + { + "@id": "6945", + "@organization": "Masaryk University", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/David_Halasz_666b11632696e666c529f5d6de.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/www.skateman.eu\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/skateman\\/\"},{\"twitter\":\"https:\\/\\/twitter.com\\/halaszdavid\"}]", + "@bio": "\"I am a Pincipal Software Engineer and Team Lead at Red Hat, working on security compliance as a service. Outside of my working hours I am a researcher at Masaryk University, focusing on trust-based adaptive safety in Autonomous Ecosystems. In any free time that is left, I like playing table tennis, build stuff with my 3D printer(s) or travel around the world.\"", + "@url": "https://www.sfscon.it/?post_type=speaker&p=6945", + "#text": "David Halasz" + }, + { + "@id": "6946", + "@organization": "Masaryk University", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Dasa_Kusnirakova_666b28ba10ba3666c53812c6ba.jpeg", + "@bio": "\"PhD candidate at Masaryk University, Brno, Czechia. My research area centers around the Governance of Smart Dynamic Ecosystems using Trust Management and Ethical Considerations.\"", + "@url": "https://www.sfscon.it/?post_type=speaker&p=6946", + "#text": "Dasa Kusnirakova" + } + ] + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59ab3440ee6770ffb385ea9dbc7c387691214ef", + "@unique_id": "2024day1event13", + "@bookmark": "1", + "@rating": "1", + "start": "11:40", + "duration": "00:15", + "title": "CRA & PLD Liability rules and Software Freedom", + "url": "https://www.sfscon.it/talks/cra-pld-liability-rules-and-software-freedom/", + "language": null, + "description": "

With CRA and PLD liability rules for software have been introduced with a broad exception for Free Software. After long and intense debates individual developers and non for profit work are safeguarded. I will shed light on those new rules.

\n

Already at an early stage, the FSFE argued in a hearing in the EU Parliament, for the inclusion of clear and precise exemptions for Free Software development in the legislation and for liability to be transferred to those who significantly financially benefit from it on the market.

\n

In the future, individual developers and non-profit development of Free Software will be exempt from the CRA and the PLD. Nevertheless, the wording in both the regulations are different and a standardisation processes and guidelines are still being drawn up.

\n

In this talk I will discuss what this new regulation means for software freedom in future and what happens at this stage and how to be involved in implementation.

", + "track": { + "@color": "#25a2ea", + "#text": "Ethics, Policy, Legal & Economics" + }, + "category": "Ethics, Policy, Legal & Economics", + "type": "Ethics, Policy, Legal & Economics", + "track-url": "https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/", + "persons": { + "person": { + "@id": "4360", + "@organization": "FSFE - Free Software Foundation Europe", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2018/10/Alexander_Sander.jpg", + "@socials": "[{\"site\":\"https:\\/\\/fsfe.org\\/about\\/sander\\/sander.de.html\"},{\"twitter\":\"https:\\/\\/twitter.com\\/lexelas\"}]", + "@bio": "\"Alexander has studied politics in Marburg and later has been an MEP Assistant in Brussels for three years and the General Manager of Digitale Gesellschaft e.V. in Berlin for four years. Furthermore he is the founder of NoPNR!, a campaign against the retention of travel data.\\r\\nHe is also a Member of the Advisory Board of the ZMI Gie\\u00dfen and the Initiative gegen Total\\u00fcberwachung.\"", + "@url": "https://www.sfscon.it/speakers/alexander-sander/", + "#text": "Alexander Sander" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59ac8bef45238c6497fc0f80ba0d1ac911a7c4a", + "@unique_id": "2024day1event17", + "@bookmark": "1", + "@rating": "1", + "start": "12:00", + "duration": "00:15", + "title": "Cyber Resilience Act, already too late to comply?", + "url": "https://www.sfscon.it/talks/cyber-resilience-act-already-too-late-to-comply/", + "language": null, + "abstract": "Compliance is dead, long live compliance", + "subtitle": "Compliance is dead, long live compliance", + "description": "

If you are taking your decisions now for complying with all the requirements of CRA, you might be too late to find adequate external resources to comply , although — at submission time — it is not yet in force. So what are you gonna do? Being open source would help only to a certain point, if you monetize the software. Some guidance tips for Open Source projects and businesses.

", + "track": { + "@color": "#25a2ea", + "#text": "Ethics, Policy, Legal & Economics" + }, + "category": "Ethics, Policy, Legal & Economics", + "type": "Ethics, Policy, Legal & Economics", + "track-url": "https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/", + "persons": { + "person": [ + { + "@id": "776", + "@organization": "Array", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Carlo_Piana_6489f71d13e89667a95e8d1a6b.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/array.eu\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/carlopiana\\/\"},{\"twitter\":\"https:\\/\\/twitter.com\\/carlopiana\"}]", + "@bio": "\"Chair of the Open Source Initiative (OSI) and member of the Board, founding partner at Array. A long standing Free and open source software advocate, Carlo is a lawyer in private practice in Milano, Italy. His practice covers almost exclusively IT law with an emphasis on software licensing, antitrust, procurement, service agreements, contracts and privacy. Former General Counsel to the Free Software Foundation Europe, he has been involved in a decade-long litigation in Europe on protocols and antitrust laws in one of the largest cases ever. Editor of the Journal of Law, Technology, & Society (formerly, International Free and Open Source Software Law Review), he is member of the IP & OS advisory group of the United Nations Technology Innovation Laboratories and a partner of OpenChain in Europe.\\r\\nMember of the Steering Committee of the Eclipse Oniro Working Group.\"", + "@url": "https://www.sfscon.it/speakers/carlo-piana/", + "#text": "Carlo Piana" + }, + { + "@id": "5051", + "@organization": "Array", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2020/09/alberto_pianon.jpg", + "@bio": "\"A long standing activist and user of Free and Open Source Software, Alberto is a qualified lawyer in private practice in Vicenza, Italy. His practice covers intellectual property, cyberlaw and copyright law, with a particular focus on open source licensing and compliance, especially in the embedded\\/IoT field. He is member of the Legal Network of the FSFE and partner of OpenChain in Europe together with Carlo Piana (Array). Supporter of FSFE's Free Your Android initiative and advocate of private cloud and self-hosting solutions. Used to read (and sometimes write) code in Python, PHP, JS, shell scripting, Java, C.\"", + "@url": "https://www.sfscon.it/speakers/alberto-pianon/", + "#text": "Alberto Pianon" + } + ] + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59ae4e98fcfbca80a3f045ac26e0563377f0df9", + "@unique_id": "2024day1event21", + "@bookmark": "1", + "@rating": "1", + "start": "12:20", + "duration": "00:15", + "title": "AI no-code for marketing", + "url": "https://www.sfscon.it/talks/ai-no-code-for-marketing/", + "language": null, + "abstract": "How artificial intelligence can really help create a marketing strategy", + "subtitle": "How artificial intelligence can really help create a marketing strategy", + "description": "

The process of creating a Marketing strategy and the subsequent steps of drafting editorial calendars, selecting channels, designing, and publishing advertising campaigns, is a complex journey.
\nMarketers have always dedicated a lot of time and resources to creating the most effective strategy for a brand’s success and translating it into concrete actions.
\nToday, is it possible to use artificial intelligence as a tangible support for the development of the strategic, technical, and operational assets necessary to create a successful marketing plan?
\nLet’s discover ATENA together, a methodology and an easy process through which you can simplify, accelerate, and enhance the quality of your marketing strategy, thanks to the practical support of AI.

", + "track": { + "@color": "#25a2ea", + "#text": "Ethics, Policy, Legal & Economics" + }, + "category": "Ethics, Policy, Legal & Economics", + "type": "Ethics, Policy, Legal & Economics", + "track-url": "https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/", + "persons": { + "person": { + "@id": "7285", + "@organization": "Symphonie Prime", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/10/Alessandro_Agnati_66fe94937b26366fe990f979b7.jpeg", + "@bio": "\"I am a Senior Executive and digital passionate with 20+ years of experience in international contexts, with a solid background in digital strategy, business development, team management, digital marketing, creativity and brand engagement.\\r\\n\\r\\nDuring my career in the world of digital agencies, I led teams with vertical skills in user experience design, branding, digital advertising, web and mobile development, always focused on creating successful experiences for customers, quality projects and results, and timely delivery.\\r\\n\\r\\nI strongly believe that combining creativity and innovative technologies is the best way to create unique experiences and engagement for customers, always focusing on people's needs and their relationship with the real world.\\r\\n\\r\\nI strive every day on creating an inclusive and collaborative work environment, where people can feel comfortable and bring out their best qualities to achieve personal satisfaction and professional goals.\"", + "@url": "https://www.sfscon.it/speakers/alessandro-agnati/", + "#text": "Alessandro Agnati" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b018f72987e25c60caa8d41e9367c54d1b22f", + "@unique_id": "2024day1event25", + "@bookmark": "1", + "@rating": "1", + "start": "12:40", + "duration": "00:15", + "title": "For the Right of General Purpose Computers", + "url": "https://www.sfscon.it/talks/for-the-right-of-general-purpose-computers/", + "language": null, + "abstract": "Breaking lock-ins over devices with Free Software", + "subtitle": "Breaking lock-ins over devices with Free Software", + "description": "

Our smartphones, tablets, laptops, and other connected devices are general purpose computers. That means we can potentially run any software we want to make full use of the hardware. This potential is fostered by Free Software.

\n

However, device manufacturers, vendors, and internet platforms have been restricting software freedom by exercising their monopolistic control over end-user equipment. This power is used over key features and components of devices such as operating systems, browsers, and app stores.

\n

Basic freedoms such as installing and uninstalling software are being unfairly limited by these companies, commonly referred to as “gatekeepers”, because of their monopolistic control over devices.

\n

As a concrete example, this talk will present the policy and legal work of FSFE in denouncing the detrimental commercial practices of a worldwide known gatekeeper: Apple.

\n

Apple’s monopolistic power over its devices is detrimental to Free Software and a high risk for the right of general purpose computers. The company’s “notarization”, its barriers to software freedom and lack of interoperability are highly negative to Free Software.

\n

In conclusion, this talk will present Device Neutrality as a policy solution to enable end-users to bypass gatekeepers in order to run Free Software independently of the control exercised by hardware manufacturers, vendors, and platforms. Device Neutrality can enable end–users to regain control over their devices.

", + "track": { + "@color": "#25a2ea", + "#text": "Ethics, Policy, Legal & Economics" + }, + "category": "Ethics, Policy, Legal & Economics", + "type": "Ethics, Policy, Legal & Economics", + "track-url": "https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/", + "persons": { + "person": { + "@id": "4709", + "@organization": "FSFE - Free Software Foundation Europe", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2019/10/Lucas_Lasota.png", + "@socials": "[{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/lucas-lasota\\/\"}]", + "@bio": "\"Lucas Lasota is an international legal counsel with background in Contract and Technology Law. In Brazil and Russia he was practising the field of e-commerce, transfer of technology, telecommunications and arbitration. Over the years he got experience in the academic sector as well, achieving a Master and PhD in law. For him Free Software is a precondition for a safe, neutral and healthy digital environment. At the FSFE, he has been dealing with FOSS legal aspects, helping people to maintain control over technology.\"", + "@url": "https://www.sfscon.it/speakers/lucas-lasota/", + "#text": "Lucas Lasota" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b1ef35ba70f023718184001ba50fca03670d6", + "@unique_id": "2024day1event29", + "@bookmark": "1", + "@rating": "1", + "start": "13:00", + "duration": "00:15", + "title": "25 Years of Copyleft Enforcement: The Road Ahead for Defending Software Rights", + "url": "https://www.sfscon.it/talks/25-years-of-copyleft-enforcement-the-road-ahead-for-defending-software-rights/", + "language": null, + "description": "

In 1999, I worked my first GPL enforcement matter: a large storage had made proprietary modifications to GNU tar and failed to release the complete, corresponding source code to its customers. In early 2000, I did my first “CCS check” (complete, corresponding sourcecode check) — wherein one attempts to build the “CCS candidate” provided by the vendor to investigate whether the CCS candidate is actually complete, and whether it corresponds to the binaries that were distributed.

\n

In those days, violations of copyleft licenses were rare, and once uncovered, companies eventually corrected their behavior. Yet, even then, it took years of work to convince the company to comply. And often, by the time compliance was achieved, a new generation of the product was released.

\n

25 years later, we face the same problems with nearly every vendor.
\nAlmost every product on the market today contains Linux, BusyBox, the GNU C Library, GNU Bash, and dozen other packages licensed under the GPL and/or LGPL. Almost none of these companies, even if an offer for source code is made, provide CCS.

\n

This talk will look both to the past and future as we investigate software rights and freedoms of the average consumer, and how we reached this difficult situation. Attendees can learn the history of copyleft and its enforcement, and leave with an understanding of how much work remains and what individuals can do to make a real impact on the rights of users under copyleft.

", + "track": { + "@color": "#25a2ea", + "#text": "Ethics, Policy, Legal & Economics" + }, + "category": "Ethics, Policy, Legal & Economics", + "type": "Ethics, Policy, Legal & Economics", + "track-url": "https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/", + "persons": { + "person": { + "@id": "6385", + "@organization": "Software Freedom Conservancy", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2023/06/Bradley_Kuhn_649e2b82f09ef649f346522a1c.jpeg", + "@bio": "\"Bradley M. Kuhn is the Policy Fellow and Hacker-in-Residence at Software Freedom Conservancy (SFC). Kuhn began his work in the software freedom movement as a volunteer in 1992, as an early adopter of Linux-based systems and contributor to various FOSS projects, including Perl. He worked during the 1990s as a system administrator and software developer for various companies, and taught AP Computer Science at Walnut Hills High School in Cincinnati. Kuhn\\u2019s non-profit career began in 2000, when he was hired by the Free Software Foundation (FSF). As FSF\\u2019s Executive Director from 2001\\u20132005, Kuhn led FSF\\u2019s GPL enforcement, launched its Associate Member program, and invented the Affero GPL. Kuhn began as SFC\\u2019s primary volunteer from 2006\\u20132010, and became its first staff person in 2011. Kuhn's work at SFC focuses on enforcement of the GPL agreements, FOSS licensing policy, and non-profit infrastructural solutions for FOSS. Kuhn holds a summa cum laude B.S. in Computer Science from Loyola University in Maryland, and an M.S. in Computer Science from the University of Cincinnati. Kuhn\\u2019s Master\\u2019s thesis discussed methods for dynamic interoperability of Free Software programming languages. Kuhn received the Open Source Award in 2012, and the Award for the Advancement of Free Software in 2021 \\u2014 both in recognition for his lifelong policy work on copyleft licensing and its enforcement.\"", + "@url": "https://www.sfscon.it/speakers/bradley-kuhn/", + "#text": "Bradley Kuhn" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b36b97c9ca8a4d757cfd6acacd15f203d3629", + "@unique_id": "2024day1event33", + "@bookmark": "1", + "@rating": "1", + "start": "13:20", + "duration": "00:15", + "title": "SPDXv3: Advancing Transparency in Software", + "url": "https://www.sfscon.it/talks/spdxv3-advancing-transparency-in-software/", + "language": null, + "abstract": "A newly released standard for complete information", + "subtitle": "A newly released standard for complete information", + "description": "

SBOMs are a crucial tool for understanding the composition of software, which is particularly important in the context of managing security risks and licensing compliance. Recent regulatory efforts from, among others, the US and the EU, explicitly move towards requiring SBOM for each software delivery.
\nSPDX (System Package Data Exchange) is a freely available ISO standard that provides a set of specifications for communicating SBOM information. It offers a common format for companies and organizations to share important data accurately and efficiently.

\n

This presentation will delve into the details of the newly released version of SPDX, providing a comprehensive understanding of their importance in the software industry.

", + "track": { + "@color": "#25a2ea", + "#text": "Ethics, Policy, Legal & Economics" + }, + "category": "Ethics, Policy, Legal & Economics", + "type": "Ethics, Policy, Legal & Economics", + "track-url": "https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/", + "persons": { + "person": { + "@id": "4781", + "@organization": "Intel Corp.", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2019/11/Alexios_Zavras-1.jpg", + "@bio": "\"Alexios Zavras (zvr) is the Senior Open Source Compliance Engineer of Intel Corp. He has been involved with Free and Open Source Software since 1983, and is an evangelist for all things Open. Besides his duties in Intel, he is an active participant in a number of industry-wide efforts around compliance issues, like SPDX and OpenChain. He has presented in a number of national and international conferences, including Linux Foundation events like Open Source Leadership Summit and Open Source Summit, FOSDEM, CopyleftConf, academic conferences, etc.\\r\\n\\r\\nHe has a PhD in Computer Science after having studied Electrical Engineering and Computer Science in Greece and the United States.\"", + "@url": "https://www.sfscon.it/speakers/alexios-zavras/", + "#text": "Alexios Zavras" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b4ec2bcacd2a9c7dcd448844bb32e1f941734", + "@unique_id": "2024day1event37", + "@bookmark": "1", + "@rating": "1", + "start": "13:40", + "duration": "00:15", + "title": "(re)classifying FOSS licenses", + "url": "https://www.sfscon.it/talks/reclassifying-foss-licenses/", + "language": null, + "abstract": "New strategy for classifying licenses in a better way", + "subtitle": "New strategy for classifying licenses in a better way", + "description": "

There are many efforts trying to classify licenses, for different use cases such as checking compatibility or for complying with the license terms. Most of these efforts seem to, explicitly or implicitly, have a certain use case in mind.

\n

This project sets out to:
\nConsider provisioning case – how is the software provided to your user (e.g. binary distribution, SaaS, Web UI)
\nConsider use case – how is the software used (e.g. compiler, library)
\nTrust model – why should you trust the contributor of a classification or you should be able to exclude a contributor’s work etc
\nIdentify and generalize FOSS license clauses
\nIdentify and generalize when a clauses is triggered
\nDetermine how clauses are compatible with each other (a license clause matrix)
\nIdentify the clauses and triggers for each license

\n

Keeping track of how 100 licenses are compatible with each other will result in a matrix with 10 000 (100 x 100) values. This is hard to maintain. Extending to 200 licenses requires 40 000 values. By instead looking at the license clauses we will end up with a much smaller problem, assuming we identify 20-30 of them, which will result in a matrix of 400-900 values. This is big, but maintainable. Adding a new license will not increase the size of the (license clause) matrix, which means that our approach scales much better. From the license definitions and license clause matrix we can compile a license compatibility matrix (for fast compatibility lookup).

\n

This project sets out to provide to users:
\nA license obligation checklist for each provisioning case – for making compliance checks easy
\nA license compatibility matrix for each provisioning case – for fast compatibility lookup

\n

All data and source code will be released under FOSS licenses.

", + "track": { + "@color": "#25a2ea", + "#text": "Ethics, Policy, Legal & Economics" + }, + "category": "Ethics, Policy, Legal & Economics", + "type": "Ethics, Policy, Legal & Economics", + "track-url": "https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/", + "persons": { + "person": { + "@id": "962", + "@organization": "Software Compliance Academy & Sandklef GNU Labs", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2013/10/Henrik_Sandklef.jpg", + "@bio": "\"Henrik has been engaged, in various roles, in the Free and Open Source communitity for some 20 years. He has long experience in telecom, embedded and atuomotive industry as well as teaching at universities but now works only with FOSS.\"", + "@url": "https://www.sfscon.it/speakers/henrik-sandklef/", + "#text": "Henrik Sandklef" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b6b019cc331da4fa85549da2f8e1f08c0e157", + "@unique_id": "2024day1event41", + "@bookmark": "1", + "@rating": "1", + "start": "14:00", + "duration": "00:15", + "title": "Lessons from the EU’s Next Generation Internet Initiatives", + "url": "https://www.sfscon.it/talks/lessons-from-the-eus-next-generation-internet-initiatives/", + "language": null, + "abstract": "What We've Learnt From Looking At 500 Free Software Projects", + "subtitle": "What We've Learnt From Looking At 500 Free Software Projects", + "description": "

The FSFE is a consortium member of the EU’s Next Generation Internet initiatives (https://fsfe.org/activities/ngi/ngi.en.html). As part of our work there over the past 6 years, we have looked at hundreds of participating Free Software projects, to assist them with their legal and licensing questions, as well as to help them become REUSE compliant.

\n

This talk will speak about some simple trends in Free Software legal and licensing that we’ve observed over the years in independent Free Software projects and their developers, and how these affect aspects of the Free Software ecosystem.

", + "track": { + "@color": "#25a2ea", + "#text": "Ethics, Policy, Legal & Economics" + }, + "category": "Ethics, Policy, Legal & Economics", + "type": "Ethics, Policy, Legal & Economics", + "track-url": "https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/", + "persons": { + "person": { + "@id": "6064", + "@organization": "FSFE - Free Software Foundation Europe", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/form-speakers/gabriel-ku-wei-bin-f07d5b2b1edff04bfbca76cbfca2ec46.jpeg", + "@bio": "\"Gabriel Ku Wei Bin is a Legal Programme Manager at the Free Software Foundation Europe. Originally from Singapore, Gabriel is a former human rights and constitutional law researcher, as well as a former commercial lawyer. At the FSFE, Gabriel manages the FSFE\\u2019s legal projects, including its involvement in a number of European Commission funded projects and FSFE\\u2019s Legal Network of lawyers around the world involved in Free Software.\"", + "@url": "https://www.sfscon.it/speakers/gabriel-ku-wei-bin/", + "#text": "Gabriel Ku Wei Bin" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b820f887827b8689859e87cfad9eceedf5f28", + "@unique_id": "2024day1event45", + "@bookmark": "1", + "@rating": "1", + "start": "14:20", + "duration": "00:15", + "title": "The ZOOOM project: final results and future outlooks", + "url": "https://www.sfscon.it/talks/the-zooom-project-final-results-and-future-outlooks/", + "language": null, + "description": "

The ZOOOM project, concluding in Sept 2024, aimed to raise awareness about the role of open licenses (open source software, open hardware, and open data – 3Os) in intellectual property valorization. In this talk, we’ll summarize key results, share recommendations for businesses leveraging 3Os, and demonstrate tools developed to aid knowledge generators and supporting organizations in navigating the legal and business implications of 3Os. Additionally, we’ll discuss the future of ZOOOM and its potential impact on the industry and research.

", + "track": { + "@color": "#25a2ea", + "#text": "Ethics, Policy, Legal & Economics" + }, + "category": "Ethics, Policy, Legal & Economics", + "type": "Ethics, Policy, Legal & Economics", + "track-url": "https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/", + "persons": { + "person": { + "@id": "6981", + "@organization": "Fondazione Hub Innovazione Trentino", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Elisa_Morganti_66754f545a83a667553c87549e.jpeg", + "@socials": "[{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/elisa-morganti\\/\"}]", + "@bio": "\"Elisa Morganti, PhD, is a forward-thinking professional specializing in innovation and technology transfer. With expertise in bproject management, she contributes in driving research and innovation by facilitating technology transfer, fostering startup growth, and advancing research projects. As leader of the ZOOOM Project, she builds impactful collaborations and transforms ideas into tangible results. Her background includes a PhD in ICT and research in microfluidics and microsystems. Since 2013, she has managed research and innovation projects, focusing on knowledge transfer, and obtained the Project Manager qualification from ISIPM in 2018. Her experience includes preparing and managing European projects, innovation practices and links creation\"", + "@url": "https://www.sfscon.it/speakers/elisa-morganti/", + "#text": "Elisa Morganti" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b99099a666e3e43560c7fadd01a1c71f7d2c2", + "@unique_id": "2024day1event49", + "@bookmark": "1", + "@rating": "1", + "start": "14:40", + "duration": "00:15", + "title": "AI Law & Ethics: developing responsible AI systems", + "url": "https://www.sfscon.it/talks/ai-law-ethics-developing-responsible-ai-systems/", + "language": null, + "description": "

The aim of this talk is to explore AI law and ethics in developing responsible AI systems. It covers the forthcoming AI Act and EU regulations, focusing on accountability, risk management, and privacy-by-design. Through use cases, it shows how developers can ensure AI transparency, fairness, and compliance, balancing innovation with ethics. Attendees will gain insights for creating sustainable, ethical AI solutions.

", + "track": { + "@color": "#25a2ea", + "#text": "Ethics, Policy, Legal & Economics" + }, + "category": "Ethics, Policy, Legal & Economics", + "type": "Ethics, Policy, Legal & Economics", + "track-url": "https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/", + "persons": { + "person": [ + { + "@id": "5341", + "@organization": "PANETTA Studio Legale", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2021/09/Federico-Sartore.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/www.panetta.net\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/federico-sartore-85b1ab136\\/\"}]", + "@bio": "\"Partner at PANETTA Law Firm, CIPP\\/E, is a lawyer specialized in the field of IT and Technology Law, in particular with regard to Privacy & Data Protection aspects. Other main areas of activity consist in Cybersecurity, e-Identification and trust services, as well as technological development of undertakings. He regularly assists important national companies and multinational groups in structuring and managing complex personal data flows and architectures, advanced marketing and profiling programs, implementation of Big Data and Artificial Intelligence technologies, smart environments projects, biometrics data used for facilitative purposes. He also actively participated in specific projects in banking and finance, biomedical, media, prize draws and competitions and telecommunications. Associate and then Senior Associate of Panetta, Federico cooperates with the LawTech research group of Trento University and attends as speaker conferences and seminars on European Data Protection Law and legal issues of Big Data technologies. He currently provides his contribution to several law reviews and journals. He graduated with the thesis \\u201cBig Data: Privacy and Intellectual Property in a comparative perspective\\u201d. The thesis granted him the 1st price for the call IEEE Smart Cities Trento 2015.\"", + "@url": "https://www.sfscon.it/speakers/federico-sartore/", + "#text": "Federico Sartore" + }, + { + "@id": "7276", + "@organization": "Panetta Consulting Group - DEXAI", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/10/Francesco_Vadori_66fe4f642ee2366fe7b121c5bc.jpeg", + "@bio": "\"Francesco is an expert in criminal law, artificial intelligence, project management, and the socio-legal implications of new technologies, he plays a key role in developing and optimizing internal processes at Panetta Group. His focus extends to artificial intelligence and cybersecurity, and since 2023, he has been collaborating with DEXAI.\\r\\n\\r\\nIn addition to supporting management in the operations of Panetta Consulting\\u2019s affiliated companies and the development of the group's digital products, he collaborates with major multinational groups in the development and management of complex personal data flows and architectures, as well as technologies based on artificial intelligence and big data analytics.\\r\\n\\r\\nOver the years he has presented three research projects: the first on the application of complex systems theory to develop a scientific definition of law; the second on the development of AI-based systems for calculating the effectiveness of a legal system; and the third on robotics and the adoption of "tokku zones" for the revival of underdeveloped areas.\\r\\n\\r\\nHe loves music, cinema, gaming, sports, and is deeply fascinated by robotics, aerospace, and artificial intelligence.\"", + "@url": "https://www.sfscon.it/speakers/francesco-vadori/", + "#text": "Francesco Vadori" + } + ] + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59baf9af0e92818e9032f40ce86324132f1286f", + "@unique_id": "2024day1event53", + "@bookmark": "1", + "@rating": "1", + "start": "15:00", + "duration": "00:15", + "title": "Impact and Innovation: The Crucial Role of OSPOs in Shaping a More Sustainable Capitalism", + "url": "https://www.sfscon.it/talks/impact-and-innovation-the-crucial-role-of-ospos-in-shaping-a-more-sustainable-capitalism/", + "language": null, + "description": "

In an era where sustainability and responsible innovation are not just valued but expected, Open Source Program Offices (OSPOs) stand at the forefront of a transformative wave that merges open innovation with sustainable business practices. This session explores the pivotal role of OSPOs in fostering open innovation environments that not only drive technological advancement but also align with the principles of impact-oriented capitalism

\n

We will delve into how OSPOs can leverage open source ecosystems to catalyze change within their organizations, promoting not just compliance and security but also environmental, social, and governance (ESG) goals. Through case studies and practical insights, attendees will learn how integrating OSPO strategies with corporate sustainability objectives can create a powerful synergy that propels companies toward a more ethical and profitable future.

", + "track": { + "@color": "#25a2ea", + "#text": "Ethics, Policy, Legal & Economics" + }, + "category": "Ethics, Policy, Legal & Economics", + "type": "Ethics, Policy, Legal & Economics", + "track-url": "https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/", + "persons": { + "person": { + "@id": "4062", + "@organization": "Seacom Srl", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2017/10/Stefano_Pampaloni.jpg", + "@socials": "[{\"site\":\"http:\\/\\/www.seacom.it\\/\"}]", + "@bio": "\"He has created its first Internet Service Provider in 1995, implementing the entire infrastructure for delivering services through Open Source software. Over the years he founded several \\\"Internet Company\\\" including a telephone company. Thanks to these experiences he has gained a wealth of technical and managerial knowledge, especially in the field of communication and collaboration systems on IP networks. Since 2005 he has been a director of Seacom srl, who has become a distributor for Zimbra Italy and one of Europe's most accredited companies for the implementation of this solution in a few years. As an ever-convincing free software supporter, it has a pragmatic vision of OS software-related business models that best combine the benefits of collaborative development with the needs in Business scope.\"", + "@url": "https://www.sfscon.it/speakers/stefano-pampaloni/", + "#text": "Stefano Pampaloni" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59bc5c59fab1d32f25c7ee965881e6e3c478e35", + "@unique_id": "2024day1event57", + "@bookmark": "1", + "@rating": "1", + "start": "15:20", + "duration": "00:15", + "title": "From Personalized to Programmed", + "url": "https://www.sfscon.it/talks/from-personalized-to-programmed/", + "language": null, + "abstract": "The Dilemma of AI Customization", + "subtitle": "The Dilemma of AI Customization", + "description": "

When considering the core values of mass customization, such as individual expression, fun in co-creating, and creativity, AI may introduce disadvantages, potentially leading to the homogenization of experiences. This lightning talk aims to explore the potential risks and drawbacks of utilizing AI in mass customization, highlighting the tension between leveraging technology for customization and preserving the unique human elements that form the foundation of personalized experiences. Could the reliance on algorithms diminish the consumer’s role in the creative process? If so, it might challenge the essence of what makes mass customization truly unique and innovative.

", + "track": { + "@color": "#25a2ea", + "#text": "Ethics, Policy, Legal & Economics" + }, + "category": "Ethics, Policy, Legal & Economics", + "type": "Ethics, Policy, Legal & Economics", + "track-url": "https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/", + "persons": { + "person": { + "@id": "6376", + "@organization": "South Tyrol Business School", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2023/06/Thomas_Aichner_649dfb2c80e4c649dfc11df940.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/www.business-school.bz\\/\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/aichner\\/\"}]", + "@bio": "\"Prof. Dr. Thomas Aichner currently serves as the Scientific Director of South Tyrol Business School. Before taking on this position, he spent three years as Assistant Professor at Alfaisal University in Riyadh, and two years as Associate Professor at John Cabot University in Rome. He holds a joint PhD in Management Engineering from the University of Padova and a Dr. rer. pol. in Business Administration with a focus on Marketing from Berlin\\u2019s ESCP Business School, with the special mention of Doctor Europaeus. His research is primarily focused on country of origin, mass customization, digital management, and artificial intelligence.\"", + "@url": "https://www.sfscon.it/speakers/thomas-aichner/", + "#text": "Thomas Aichner" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59bdbb943402cda919397682bc66902b6081c7e", + "@unique_id": "2024day1event61", + "@bookmark": "1", + "@rating": "1", + "start": "15:40", + "duration": "00:15", + "title": "Fostering Innovation in IT Businesses through Open Source Software Involvement", + "url": "https://www.sfscon.it/talks/fostering-innovation-in-it-businesses-through-open-source-software-involvement/", + "language": null, + "description": "

All IT companies depend on free and open source software to some extent. Once they reach a certain size, they spontaneously become supporters of the projects on which they base their business. This happens because of first order consequences: my business depends on it, if I help it strive, my business will benefit.
\nIn this talk, we will address the second-order consequences of software engineers interacting with open source projects, and show why dedicating internal resources to this activity is an effective strategy for enabling the discovery of new or modified (software) entities, which is the prerequisite for innovation.
\nThe benefits are visible for companies of any size, even if their business does not depend on a specific project to which they could contribute: compelling arguments will be presented to motivate business owners to encourage their IT staff to engage in open source activities (and to developers to convince their bosses).

", + "track": { + "@color": "#25a2ea", + "#text": "Ethics, Policy, Legal & Economics" + }, + "category": "Ethics, Policy, Legal & Economics", + "type": "Ethics, Policy, Legal & Economics", + "track-url": "https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/", + "persons": { + "person": { + "@id": "889", + "@organization": "Freelancer", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2013/10/Daniele_Gobbetti_col.jpg", + "@socials": "[{\"site\":\"https:\\/\\/danielegobbetti.it\\/\"}]", + "@bio": "\"Daniele Gobbetti is a freelancer who works with small and medium-sized IT companies to help them manage complex technical projects. He's an information engineer with several years of experience in CTO and CEO roles.\\r\\nA passionate open source developer and curious person, he's happy to be called a hacker. He is an active member of the Gadgetbridge core development team and co-ordinated the project response to a DMCA complaint.\"", + "@url": "https://www.sfscon.it/speakers/daniele-gobbetti/", + "#text": "Daniele Gobbetti" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59bf1b14e7550db263ff8a4c2618502fcc85f1b", + "@unique_id": "2024day1event65", + "@bookmark": "1", + "@rating": "1", + "start": "16:00", + "duration": "00:15", + "title": "Tackling Openwashers, Freeloaders and Cuckoos", + "url": "https://www.sfscon.it/talks/tackling-openwashers-freeloaders-and-cuckoos/", + "language": null, + "abstract": "How to safeguard the Free Software market against unfair competition", + "subtitle": "How to safeguard the Free Software market against unfair competition", + "description": "

Companies that produce and sell Free Software face a problem: some competitors use unethical and destructive means to compete, making their products cheaper and winning bids. This kind of market behaviour is increasingly becoming a problem for Free Software producers.

\n

Destructive practices include marketing proprietary software under the guise of being Free Software, whether by using free/open wording, by introducing new licences that falsely appear to be free, or by imposing additional barriers that make it more difficult to use the freedoms offered by Free Software.

\n

Other competitors sell Free Software products without contributing to their development and maintenance, profiting from the work of others but giving nothing back to the community. This allows them to offer low prices while raising the costs of maintenance for the original manufacturers. For some players, there seems to be no limit to their creativity when it comes to undercutting competitors and winning bids.

\n

The Free Software Foundation Europe has been analysing these and other problematic market practices over the last few years. In this talk we will take a closer look at them and show why they harm Free Software manufacturers and the Free Software ecosystem. We will then discuss ways to limit the success of such practices.

", + "track": { + "@color": "#25a2ea", + "#text": "Ethics, Policy, Legal & Economics" + }, + "category": "Ethics, Policy, Legal & Economics", + "type": "Ethics, Policy, Legal & Economics", + "track-url": "https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/", + "persons": { + "person": { + "@id": "6622", + "@organization": "FSFE - Free Software Foundation Europe ", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2023/10/Johannes_Naeder.png", + "@bio": "\"Johannes N\\u00e4der works with the Free Software Foundation Europe, contributing to the Public Money? Public Code! framework.\\r\\nJohannes holds a M.A. in Literature and History and is part of the Free Software Foundation Europe's policy team. He researched and published a book on Open Access and free licensing in the scientific community. Johannes has worked as a net politics referent for several Members of Parliament with a focus on digital freedom, privacy and Free Software. He is also experienced in historical-political education. At FSFE, he contributes to the Public Money? Public Code! framework as Senior Policy Project Manager.\"", + "@url": "https://www.sfscon.it/speakers/johannes-nader/", + "#text": "Johannes Näder" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c0770d7a063acca1f818bd281920b63f64cee", + "@unique_id": "2024day1event69", + "@bookmark": "1", + "@rating": "1", + "start": "16:20", + "duration": "00:15", + "title": "Web Accessibility is actually well-forgotten old", + "url": "https://www.sfscon.it/talks/web-accessibility-is-actually-well-forgotten-old/", + "language": null, + "description": "

Trends are cyclical, even in the tech world. A few years ago, everyone was talking about D&I in the workplace. This season, web accessibility absolutely occupies the first lines of code. How is it shown? Let’s talk about it – many do not understand how to implement it in their project.

\n

First, relax. This is a really complex topic that requires not only a well-created website, but also communication with real users who cannot fully use the Internet, for example, without a screen reader.

\n

A checklist that will convince you to try implementing WA into your application:

\n

◦ What can be adapted for WA?
\n◦ How is WA testing done?
\n◦ How to use AI in WA?

\n

If we haven’t convinced you, then look at WA from the point of view of strengthening your personal brand in the market.

", + "track": { + "@color": "#25a2ea", + "#text": "Ethics, Policy, Legal & Economics" + }, + "category": "Ethics, Policy, Legal & Economics", + "type": "Ethics, Policy, Legal & Economics", + "track-url": "https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/", + "persons": { + "person": [ + { + "@id": "6937", + "@organization": "Selfemployment", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Sofia_Etingof_66646aeec895466646fdd93dce.jpeg", + "@bio": "\"My name is Sofia. I have a bachelor's degree in sociology.\\r\\n\\r\\nI have been researching D&I for more than five years, worked in various social projects in Moscow, as a content manager on Instagram and a journalist:\\r\\n\\r\\n\\u2043 conducted interviews with top managers of large companies on the topic of supporting women in the workplace. For example, Boiron, L'Or\\u00e9al, Cartier, Philip Morris International.\\r\\n\\r\\n\\u2043 helped in organising one of the largest forums about women, Woman Who Matters\\r\\n\\r\\n\\u2043 helped organise a children's lecture on the topics of inclusivity, tolerance and equality for children at Kidzania as part of the first diversity and inclusion association in Russia.\"", + "@url": "https://www.sfscon.it/speakers/sofia-etingof/", + "#text": "Sofia Etingof" + }, + { + "@id": "5797", + "@organization": "Red Hat", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/form-speakers/juri-solovjov-99470f10372f7fce2d8b7a2c1bb75a79.jpeg", + "@socials": "[{\"facebook\":\"https:\\/\\/www.facebook.com\\/juras08\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/juri-solovjov\\/\"}]", + "@bio": "\"

ISTQB certified Software Quality Engineer with 4 years experience at Red Hat<\\/p>\\r\\nPreviously worked as a Front-End Developer\\r\\n\\r\\nOriginally came from Estonia, currently located in Brno, Czechia.\\r\\n\\r\\nStudied Telecommunications and Telecommunication Services at Tallinn University of Technology\"", + "@url": "https://www.sfscon.it/speakers/juri-solovjov/", + "#text": "Juri Solovjov" + } + ] + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c1d5ceac7e61662a2fdc5880356a97fe5a3ad", + "@unique_id": "2024day1event73", + "@bookmark": "1", + "@rating": "1", + "start": "16:40", + "duration": "00:15", + "title": "LibreOffice as JavaScript idiomatic WebWidget + Library", + "url": "https://www.sfscon.it/talks/libreoffice-as-javascript-idiomatic-webwidget-library/", + "language": null, + "abstract": "Making LibreOffice a native part of the web, using FOSS for highly customizable office document handling in the browser, based on WASM.", + "subtitle": "Making LibreOffice a native part of the web, using FOSS for highly customizable office document handling in the browser, based on WASM.", + "description": "

LibreOffice can be highly integrated into desktop and server applications and we wanted to make this also possible for web apps. Running fully client side with Web Assembly, LibreOffice can now be used and customized by a JavaScript idiomatic API, becoming an easy usable component for web development. With this Free Software opens the door to a completely different approach for bringing office document handling into the browser, then from what’s known from Google Docs and Co.. Use cases may be the integration of widgets with rich text documents, including classic desktop macros, into browser based applications or enabling JavaScript to interact live with values in spreadsheets. But LibreOffice can also work as background WASM library, converting documents from and to all supported formats like ODF (ODT, …), MS formats (DocX, XlsX, Doc, …), PDF or HTML, while applying custom conversion filters for things like macro sanitization.

", + "track": { + "@color": "#25a2ea", + "#text": "Ethics, Policy, Legal & Economics" + }, + "category": "Ethics, Policy, Legal & Economics", + "type": "Ethics, Policy, Legal & Economics", + "track-url": "https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/", + "persons": { + "person": { + "@id": "7047", + "@organization": "allotropia software GmbH", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Moritz_Duge_667ed46099254667ed5fa8b6dc.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/blog.allotropia.de\\/\"},{\"mastodon\":\"https:\\/\\/norden.social\\/@kolAflash\\/\"},{\"twitter\":\"https:\\/\\/twitter.com\\/AllotropiaEN\"}]", + "@bio": "\"Moritz is working at Allotropia as Senior Developer & Relations Lead for ZetaOffice-JS, to bring LibreOffice into web development. Free Software communities, hacker culture & conferences have been a part of his life since 20+ years and he has an extensive history of DevOps and multilingual programming experience. He likes to use his favorite rock solid Debian GNU\\/Linux to do everything from running webservers to development to gaming, including SuperTuxKart ;-) And as a student researcher in Hamburg he build multicast technology on OpenWRT. Also he's worked many years with all kinds of FOSS as Leading Developer & Technical Product Manager for IT security solutions, so he also has a strong focus towards keeping systems safe.\"", + "@url": "https://www.sfscon.it/speakers/moritz-duge/", + "#text": "Moritz Duge" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c3393b866dee417ceabc9040eb559b34ff325", + "@unique_id": "2024day1event77", + "@bookmark": "1", + "@rating": "1", + "start": "17:00", + "duration": "00:15", + "title": "Using software tools and AI to audit e-commerce food regulations", + "url": "https://www.sfscon.it/talks/using-software-tools-and-ai-to-audit-e-commerce-food-regulations/", + "language": null, + "description": "

Selling food products on a website or e-commerce platform in Italy is subject to the Food Information of Consumers (FIC) regulations. These regulations dictate mandatory information that must be communicated on the product page, with fines for non-compliance. In this talk, we will cover the key guidelines and legal requirements, and demonstrate how we can use software tools and artificial intelligence to check large quantities of product listings for discrepancies. Join us to learn how to streamline the process of verifying food information and enhance consumer trust.

", + "track": { + "@color": "#25a2ea", + "#text": "Ethics, Policy, Legal & Economics" + }, + "category": "Ethics, Policy, Legal & Economics", + "type": "Ethics, Policy, Legal & Economics", + "track-url": "https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/", + "persons": { + "person": { + "@id": "1666", + "@organization": "Catch Solve", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2013/10/davide_montesin.jpg", + "@socials": "[{\"linkedin\":\"www.linkedin.com\\/in\\/davidemontesin\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/company\\/catch-solve\"},{\"facebook\":\"https:\\/\\/www.facebook.com\\/CatchSolve\"},{\"site\":\"https:\\/\\/www.catch-solve.tech\\/\"}]", + "@bio": "\"

Davide Montesin is the CEO of a Start-up called Catch Solve, which is situated in NOI Techpark in Bolzano Bozen, South Tyrol. The Start-up - founded in 2019 - is an integrated platform that monitors the quality of apps, websites and digital services and to find useful resources to solve software bugs easily, quickly and time efficiently.<\\/p>\\r\\n

The South Tyrol native, currently living in Bolzano \\u2013 Bozen, has a great passion for programming and open source \\/ free software and has a 20 year-long experience in participating and leading software projects for the public administration, private companies and the tourism sector.<\\/p>\"", + "@url": "https://www.sfscon.it/speakers/davide-montesin/", + "#text": "Davide Montesin" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c4b55ffa99770eee4de91ff503bfba55dc288", + "@unique_id": "2024day1event81", + "@bookmark": "1", + "@rating": "1", + "start": "17:20", + "duration": "00:15", + "title": "Tag manager", + "url": "https://www.sfscon.it/talks/tag-manager/", + "language": null, + "description": "

Presentation of our tool, which is an free alternative to Google Tag Manager and also helps manage cookie banners.

\n

Features:
\n– code injector
\n– code templating
\n– cookie banner manger

", + "track": { + "@color": "#25a2ea", + "#text": "Ethics, Policy, Legal & Economics" + }, + "category": "Ethics, Policy, Legal & Economics", + "type": "Ethics, Policy, Legal & Economics", + "track-url": "https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/", + "persons": { + "person": { + "@id": "7043", + "@organization": "Qbus", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Sandro_Antonucci_667ec273eacc0667ecbaae4ff1.jpeg", + "@bio": "\"I have a degree in Geology, over the years I became passionate about computer science, studying as a freelancer until it became my profession. For years I have been collaborating with Qbus srl as a web developer. In addition to this, I specialized in PHP and Python languages where I gained experience in various open-source projects.\"", + "@url": "https://www.sfscon.it/speakers/sandro-antonucci/", + "#text": "Sandro Antonucci" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c63aaf9490baf651be4c8cf569d85160c172d", + "@unique_id": "2024day1event85", + "@bookmark": "1", + "@rating": "1", + "start": "17:40", + "duration": "00:15", + "title": "State of Microsoft Windows Refund (2024)", + "url": "https://www.sfscon.it/talks/state-of-microsoft-windows-refund-2024/", + "language": null, + "abstract": "Getting a Refund of your Microsoft Windows License - present and future", + "subtitle": "Getting a Refund of your Microsoft Windows License - present and future", + "description": "

If you are a lover of the Free Software movement you probably already tried something else than Microsoft Windows on a computer.

\n

What you may not know, is that computer resellers usually charge end-users with the Fee of the Microsoft Windows License, even before you accept the Microsoft Terms of Services, and even if you completely want to uninstall Windows from your computer.

\n

This is a critical Tech Neutrality issue that fuels non-European proprietary software houses. What to do?

\n

– heritage of Luca Bonissi against Big Tech(s)
\n– current status and problems
\n– opportunities in Europe, and partnership between Free Software Foundation Europe and Italian Linux Society.

\n

Thanksgiving to community members who tried the procedure, and simplifying that procedure.

", + "track": { + "@color": "#25a2ea", + "#text": "Ethics, Policy, Legal & Economics" + }, + "category": "Ethics, Policy, Legal & Economics", + "type": "Ethics, Policy, Legal & Economics", + "track-url": "https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/", + "persons": { + "person": { + "@id": "7266", + "@organization": "Italian Linux Society", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/09/Valerio_Bozzolan_66f6fafd7cc5666f70ce9ca62f.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/ils.org\\/info\\/\"},{\"mastodon\":\"https:\\/\\/mastodon.uno\\/@boz\"}]", + "@bio": "\"President of Italian Linux Society. Tech commission in Wikimedia Italy. Open source consultant for Wikimedia Switzerland. OpenStreetMap active contributor. Phorge.it (ex Phabricator) co-maintainer.\"", + "@url": "https://www.sfscon.it/speakers/valerio-bozzolan/", + "#text": "Valerio Bozzolan" + } + }, + "bookmark": "1", + "rating": "1" + } + ] + }, + { + "@name": "Auditorium (A2)", + "event": { + "@id": "670d1b59a6f8fa0f2cd9aa0468cf94be12dcf7ee72afb", + "@unique_id": "2024day1event97", + "@bookmark": "0", + "@rating": "0", + "start": "10:30", + "duration": "00:30", + "title": "Ada & Zangemann", + "language": null, + "track": { + "@color": "#a8a8a8", + "#text": "Side Event - School Reading" + }, + "category": "Side Event - School Reading", + "type": "Side Event,School Reading", + "bookmark": "0", + "rating": "0" + } + }, + { + "@name": "Seminar 2", + "event": [ + { + "@id": "670d1b59a8718ec06704ae106c6fe150d929e76e489a0", + "@unique_id": "2024day1event6", + "@bookmark": "1", + "@rating": "1", + "start": "11:00", + "duration": "00:15", + "title": "Open Access for Museum Collections and Research", + "url": "https://www.sfscon.it/talks/open-access-for-museum-collections-and-research/", + "language": null, + "description": "

The digital era has revolutionised the way we access information and interact with it. Museums, as custodians of cultural and historical artefacts, can benefit substantially from this transformation. Open Access and FOSS can greatly increase the potential of museums for public outreach: enhance their educational impact and inspire new forms of cultural engagement and knowledge discovery. For example, by digitising collections and enabling Open Access for diverse audiences, accessibility barriers are eliminated and thousands of hidden treasures become available to both researchers and the wider public. Additionally, innovative data visualisations via FOSS platforms can reveal compelling insights into object collections and the research associated with them; Open Access can thus make complex research accessible and engaging to a broader audience. Through such practices, museums can democratise their activities and enrich the visitor experience. The process is not without obstacles; common challenges museums face in adopting Open Access policies are copyright issues, data privacy, and resource limitations.

\n

The presentation will discuss the aforementioned opportunities and issues currently emerging in the museum sector. The talk will be illustrated with examples from the Deutsches Museum in Munich, the world’s largest museum of science and technology.

", + "track": { + "@color": "#49a834", + "#text": "Data Spaces" + }, + "category": "Data Spaces", + "type": "Data Spaces", + "track-url": "https://www.sfscon.it/tracks/data-spaces-track-2024/", + "persons": { + "person": { + "@id": "6984", + "@organization": "Deutsches Museum (Munich)", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Artemis_Yagou_66759ae892f3d667ea7818e514.jpeg", + "@bio": "\"Artemis Yagou (she\\/her), PhD, is a historian of design and technology. She is an Associate at the Research Institute for the History of Science and Technology of the Deutsches Museum (Munich). Her main interests are the cultural history of technology, digital humanities, horology, construction toys, and Greek material culture (18th\\u201321st centuries). Her publications include: Fragile Innovation: Episodes in Greek Design History (2011); the edited volume Technology, Novelty, and Luxury (2022); Products, Users, and Popular Luxury in Early Modern Greece (2024); and Construction Toys: Education, Politics, and Technology (forthcoming, 2025). Her personal website is www.yagou.gr\"", + "@url": "https://www.sfscon.it/speakers/artemis-yagou/", + "#text": "Artemis Yagou" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59aa264ee41a43132c98f639b0c805757c21225", + "@unique_id": "2024day1event10", + "@bookmark": "1", + "@rating": "1", + "start": "11:20", + "duration": "00:15", + "title": "Journeying through Data Spaces – New Path to Interoperability?", + "url": "https://www.sfscon.it/talks/journeying-through-data-spaces-new-path-to-interoperability/", + "language": null, + "description": "

Data spaces play a pivotal role in advancing digitalisation and interoperability within and across different business domains, both on a national level and cross-borders. However, it’s not a new concept since its roots date back to 2005. The definition has evolved over the years and today it covers all four layers of interoperability defined by the European Interoperability Framework (EIF).

\n

Today, the term data space has several different definitions depending on whom you ask. Also, multiple international initiatives are working on data spaces to create common governance models, specifications, reference implementations, etc. The aim of this talk is to discuss the data space concept, different actors working on data spaces and their roles and responsibilities, and available specifications and building blocks.

", + "track": { + "@color": "#49a834", + "#text": "Data Spaces" + }, + "category": "Data Spaces", + "type": "Data Spaces", + "track-url": "https://www.sfscon.it/tracks/data-spaces-track-2024/", + "persons": { + "person": { + "@id": "5299", + "@organization": "Nordic Institute for Interoperability Solutions (NIIS)", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/form-speakers/petteri-kivimaki-f57d9d00b074c6ef26ac151d52a4c6b0.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/niis.org\"},{\"twitter\":\"http:\\/\\/www.twitter.com\\/pkivima\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/pkivimaki\\/\"}]", + "@bio": "\"Petteri Kivim\\u00e4ki is the CTO of the Nordic Institute for Interoperability Solutions (NIIS). NIIS is a non-profit association with the mission to ensure the development and strategic management of X-Road\\u00ae and other cross-border components for digital government infrastructure. The republics of Estonia, Finland and Iceland are members of NIIS.\\r\\n\\r\\nBefore joining the NIIS, Petteri worked as a technology architect in a leading global professional services company. From 2014 to 2017 Petteri worked at the Population Register Centre of Finland as an information systems manager. He was the technical lead of X-Road implementation project in Finland and was coordinating the joint open source development of the X-Road solution between Finland and Estonia.\\r\\n\\r\\nPetteri holds a Bachelor of Science in Software Engineering from the Metropolia University of Applied Sciences, Finland.\"", + "@url": "https://www.sfscon.it/speakers/petteri-kivimaki/", + "#text": "Petteri Kivimäki" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59ab8b6c9b475f096136c06c0d65d2405a73c6c", + "@unique_id": "2024day1event14", + "@bookmark": "1", + "@rating": "1", + "start": "11:40", + "duration": "00:15", + "title": "DOOF – an Open Source Orchestration Framework for Decentralized Consent Management", + "url": "https://www.sfscon.it/talks/doof-an-open-source-orchestration-framework-for-decentralized-consent-management/", + "language": null, + "description": "

DOOF stands for Data Ownership Orchestration Framework. It is a framework developed for NGI Trustchain Project within a broader Next Generation Internet scheme of the EU in order to address a lack of decentralization in consent management regarding users’ sharing of their data. The aim of DOOF is to revolutionize personal data governance and normalise the deployment of consent management and privacy enhancing technologies. It uniquely enables individuals to control their rights over data sharing, fostering greater trust and regulatory compliance, essential for building a resilient and transparent data economy.
\nDOOF targets the gap in current centralized consent management, where GDPR and Data Act demand seamless data exchange and regulatory compliance. Yet the sharing and consent management regarding users’ data is centralized – a responsibility of the data intermediary – which comes with great costs and liabilities.
\nWith DOOF, Ecosteer aims to separate and decouple the layer of physical data transferring from the layer of consent management. DOOF offers companies a framework that allows them to easily adopt Privacy Enhancing Technologies (PETs) for the actual sharing of data and enforcement of users’ decisions.
\nThe framework consists of a set of SDKs, libraries and a Smart Contract for decentralised consent management. The main component of the framework is a worker pipeline, consisting of extensible, plug-in processors. This pipeline contributes to the low-code movement, offering a framework that can be easily adapted to different business needs. Companies can easily build verticals on this existing framework by just extending some of its functionalities.
\nThis talk will focus on the concept of decentralized consent management as well as pipeline-based orchestration framework, outlining the process of creating a novel, re-usable and extensible open-source project.

", + "track": { + "@color": "#49a834", + "#text": "Data Spaces" + }, + "category": "Data Spaces", + "type": "Data Spaces", + "track-url": "https://www.sfscon.it/tracks/data-spaces-track-2024/", + "persons": { + "person": { + "@id": "7015", + "@organization": "Ecosteer", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Georgiana_Bud_667d76fcbf776667d7c1ea1bcd.jpeg", + "@bio": "\"Georgiana Bud is a software engineer passionate about secure distributed systems and resilient software. She holds the position of software developer at Ecosteer and is responsible for Ecosteer\\u2019s middleware components. With a Master\\u2019s Degree in Computer Science, she combines software development skills with a detail-oriented, analytical mindset. She has contributed to Ecosteer\\u2019s Open Source software in the domain of embedded software and in the DOOF project.\"", + "@url": "https://www.sfscon.it/speakers/georgiana-bud/", + "#text": "Georgiana Bud" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59acecdc03325da9f5417728e733031c0e882bd", + "@unique_id": "2024day1event18", + "@bookmark": "1", + "@rating": "1", + "start": "12:00", + "duration": "00:15", + "title": "Accelerating territory’s development through Open Data", + "url": "https://www.sfscon.it/talks/accelerating-territorys-development-through-open-data/", + "language": null, + "abstract": "Open Data Hub and south tyrolean examples", + "subtitle": "Open Data Hub and south tyrolean examples", + "description": "

In recent years, Open Data has revolutionized the way governments, companies and individuals access and use information. The openness of public and private data represents a milestone on the path towards a more transparent, participatory and competitive society.
\nOpen Data represent a resource for society and businesses and contribute to the development of a territory. This added value manifests itself in various forms, including transparency and democratic participation, technological innovation, economic development and improved services.
\nThe talk will focus on specific case studies from the Open Data Hub in the Autonomous Province of Bolzano, a region which has shown a strong commitment to the adoption and promotion of Open Data.
\nThrough the analysis of these cases, the aim is to demonstrate how the initiatives based on Open Data have led to concrete and tangible results, offering useful and applicable insights also in extra-regional contexts.

", + "track": { + "@color": "#49a834", + "#text": "Data Spaces" + }, + "category": "Data Spaces", + "type": "Data Spaces", + "track-url": "https://www.sfscon.it/tracks/data-spaces-track-2024/", + "persons": { + "person": { + "@id": "7145", + "@organization": "NOI Techpark", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/07/Luisa_Marangon_66a76ef939ad166a774689cd37.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/www.instagram.com\\/biondomelograno\\/\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/luisamarangon\\/\"}]", + "@bio": "\"Luisa Marangon is responsible for Customer Management & Cooperations at NOI Techpark.\\r\\nShe is the bridge between potential new clients, partners, and network members, both locally and globally.\\r\\nWith a background in multilingual communication in NPOs and a Degree in business administration, her 10+ years expertise spans european project management, internationalization, customer care, event management, hackathons, and digitalization.\"", + "@url": "https://www.sfscon.it/speakers/luisa-marangon/", + "#text": "Luisa Marangon" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59aeb90a7ca5894f62ee981f08dbcca40a0117f", + "@unique_id": "2024day1event22", + "@bookmark": "1", + "@rating": "1", + "start": "12:20", + "duration": "00:15", + "title": "Sensor Things API QGIS core provider", + "url": "https://www.sfscon.it/talks/sensor-things-api-qgis-core-provider/", + "language": null, + "description": "

Sensor Things API (STA, in short), is an OGC specification for storing and retrieving (timeseries of) Sensor Observations.

\n

FROST-Server, developed by Fraunhofer IOSB, is one of the most consolidated implementations of STA with a very detailed documentation and a lot of background information. The implementation includes a REST endpoint to insert, modify and retrieve STA entities with a query language based on OASIS Odata URL patterns and query options.

\n

A QGIS experimental plugin, developed by Deda Next srl in 2022 and implemented in python within the EU project Air-Break, is currently available to connect to STA-compliant endpoints and retrieve sensor data (e.g. European Air Quality data from this endpoint). The plugin has an embedded data provider which is currently designed to retrieve sensors’ locations as geometrical features and then request the time series of observations for specific locations.

\n

However, in order to offer support to a wider range of use cases and more complex queries on STA model entities, Faunalia and DedaNext (funded by BRGM) started to plan for a dedicated STA data provider for GIS: a development group was set up involving the QGIS community, formal acceptance of the proposal was sought within the QGIS community (QEP #257) and possible development options for the provider (ex: python vs C++) were analyzed. As STA is an OGC standard, it seemed appropriate to implement it in C++ as a core element of QGIS.

\n

Development has therefore been carried out in close interaction with the QGIS developer community with the focus on supporting complex STA queries, implementing among other things:

\n

– expansion of relations among model entities;
\n– independent attribute filtering and sorting on all entities;
\n– efficient data caching to limit unnecessary data transfers;

\n

This new core element is available from QGIS version 3.37 (currently only available as nightly release).

\n

Finally, plans are underway to develop a new version of the QGIS STA plugin (originally developed by Deda Next within project AirBreak) focused on data exploration and analysis that will be able to leverage on the newly released core STA data provider to support a wider range of use cases, such as:

\n

– Time series analysis: This is the case of the old STA plugin. Fetch Locations, show them on the map. Then, upon selection of one location, fetch all related Things and Datastreams, and finally, fetch the Observations of the desired Datastream to be shown in a table or plot;
\n– Space-time series analysis: Given a selected set of Datastreams from a moving sensor, get all the FeaturesOfInterest of those Datastreams and plot them on the map, so to have a view of the path of the moving sensor and a hold on its values on every part of that path;
\n– Monitoring and inspection: Fetch all the latest observations of all Datastreams (or a selection based on the ObservedProperty) and show these at their Locations, styled by the result of the latest Observation of a given ObservedProperty. Then, in a second phase (eg. if a value is over a threshold), inspect the full timeseries of that one Datastream.
\n– Tracking of moving things: Show all Things with their current Location and their HistoricalLocations with the Temporal Controller (time slider).

", + "track": { + "@color": "#49a834", + "#text": "Data Spaces" + }, + "category": "Data Spaces", + "type": "Data Spaces", + "track-url": "https://www.sfscon.it/tracks/data-spaces-track-2024/", + "persons": { + "person": [ + { + "@id": "4960", + "@organization": "Faunalia", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2020/10/matteo-ghetta.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/www.faunalia.eu\\/en\\/intro\"},{\"facebook\":\"https:\\/\\/www.facebook.com\\/faunaliagis\\/\"},{\"twitter\":\"https:\\/\\/twitter.com\\/ghtmtt\\/\"}]", + "@bio": "\"Matteo Ghetta is a python developer of Faunalia, a company based in Tuscany entirely focused on Open Source, especially on GIS software.\\r\\n\\r\\nHe has worked as python developer at Scuola Superiore Sant'Anna in Pisa within the FREEWAT project. He is currently the coordinator of the QGIS documentation team and actively collaborates with many Open Source communities.\"", + "@url": "https://www.sfscon.it/speakers/matteo-ghetta/", + "#text": "Matteo Ghetta" + }, + { + "@id": "6985", + "@organization": "Deda Next Srl", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/09/Luca_Giovannini_6675a48c0f2aa66e93d24ac8d7.jpeg", + "@socials": "[{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/lucagio\"}]", + "@bio": "\"I am passionate for data elaboration, analysis and visualization, especially if related to maps and geospatial data!\\r\\nI have an international work experience and I am sociable, curious, result-driven and inquisitive by nature.\"", + "@url": "https://www.sfscon.it/speakers/luca-giovannini/", + "#text": "Luca Giovannini" + } + ] + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b07a45a182a6a4e175fb98f9ace32c1945ee3", + "@unique_id": "2024day1event26", + "@bookmark": "1", + "@rating": "1", + "start": "12:40", + "duration": "00:15", + "title": "EO4MULTIHAZARDS Web Application", + "url": "https://www.sfscon.it/talks/eo4multihazards-web-application/", + "language": null, + "description": "

The EO4MULTIHA project (https://eo4multihazards.gmv.com/), funded by the European Space Agency, aims at developing an open database gathering and harmonizing event information coming from already existing event databases to support multi-hazard(-risk) research.
\nTo pursue this aim, this project which has been developed in the EURAC research, Center for Sensing Solutions, presents a comprehensive web application designed to analyze and visualize multi-hazard events, developed using Django and PostgreSQL. Leveraging the strengths of open-source technologies, the application provides a robust platform for researchers, policymakers, and the public to access and understand the complexities of multi-hazard scenarios. The main parts of this web application is explained in the following paragraphs:

\n

(i) The core of the application is built with Django, a high-level Python web framework known for its rapid development capabilities and clean, pragmatic design. PostgreSQL, a powerful and scalable open-source relational database system, ensures efficient data storage and management. Together, these technologies offer a reliable and flexible foundation for handling diverse and large datasets.

\n

(ii) To visualize the events, Leaflet Map which is an open source contributor to the OpenStreet Map has been used.

\n

(iii) To populate the database, the application exploits various RESTful APIs, integrating data from multiple sources, including satellite imagery, climatological records, in-situ measurements, and relevant statistical data. This multi-source approach allows for a comprehensive characterization of risks, exposures, and susceptibilities associated with multi-hazard events benefiting from the Open Data Standards such as OGC Standard.

\n

(iiii)Key features of the application include spatial and temporal filtering of events, cross-linking of data sets for enhanced reusability, and compliance with open standards such as RESTful APIs and OGC standards. The platform is designed to be expandable, with the potential to incorporate additional locations and datasets in the future.

\n

By providing an accessible online platform, this web application aims to support the understanding and analysis of multi-hazard events, facilitating informed decision-making and effective disaster management strategies. The use of open-source technologies and the integration of diverse data sources underscore the project’s commitment to innovation, scalability, and community-driven development.

", + "track": { + "@color": "#49a834", + "#text": "Data Spaces" + }, + "category": "Data Spaces", + "type": "Data Spaces", + "track-url": "https://www.sfscon.it/tracks/data-spaces-track-2024/", + "persons": { + "person": { + "@id": "7046", + "@organization": "Eurac Research, Center for Sensing Solutions", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Mahtab_Niknahad_667ecf6d476cf667ee40d8e71f.jpeg", + "@socials": "[{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/mahtab-niknahad-729443a8\\/\"}]", + "@bio": "\"Mahtab obtained her BSc degree in Computer Engineering from Isfahan University in Iran in 2016. In 2019, she moved to Italy to pursue a Master's degree at the Polytechnic University of Turin, specializing in Computer Engineering with a focus on Data Analytics. She completed her Master's thesis at the University of Tulsa in the United States, where she explored integrating deep metric learning into predictive models.\\r\\n\\r\\nWith three years of experience in software engineering, Mahtab has developed expertise in creating web and Android applications. After earning her Master's degree, she sought to blend her software engineering skills with her knowledge of machine learning and artificial intelligence. This led her to undertake an internship as a machine learning engineer at Primo Caredent Group in Turin.\\r\\n\\r\\nCurrently, Mahtab works as a junior researcher at EURAC Research, where she focuses on applying novel predictive and classifying machine learning models in the agricultural and environmental fields.\\r\\n\\r\\nTechnical Skills: Python, Django, Scikit-learn, PyTorch, TensorFlow, NumPy, Pandas, Java, Android, React.js\"", + "@url": "https://www.sfscon.it/speakers/mahtab-niknahad/", + "#text": "Mahtab Niknahad" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b25220fd8b2a2edf2ded6a8dc3e7b79ef22ec", + "@unique_id": "2024day1event30", + "@bookmark": "1", + "@rating": "1", + "start": "13:00", + "duration": "00:15", + "title": "BASIC CORE South Tyrol", + "url": "https://www.sfscon.it/talks/basic-core-south-tyrol/", + "language": null, + "abstract": "A project to solve the topographical complexity of the National Spatial Data Catalogue", + "subtitle": "A project to solve the topographical complexity of the National Spatial Data Catalogue", + "description": "

The project has its roots in a precise and simplified cartographic updating methodology introduced by the Consortium of Municipalities of the Province of Bolzano in the early 2000s. This methodology, which was consolidated over the years, could no longer be applied following the adoption of the Territorial Data Catalogue (Ministerial Decree 10.11.2011 “Technical rules for defining the content specifications of geotopographic databases” and subsequent amendments) due to the complexity and articulation of the new national model. The primary objective of the project was to research and define a minimum set of information that could adequately describe the territory within the typical use context of the public administration, ensuring its sustainability in terms of the ability to keep it updated and aligned with the transformations of the territory. Simplifying the definition and understanding of the basic technical layer that every public administration producing geographic data must guarantee within their institutional activities for geotopographic databases is a fundamental step to adequately support territorial management. Lightened of the informational content already managed by the Provincial Administration within archives or sectoral Information Systems, and consequently already included in existing and consolidated maintenance and updating flows, as well as everything that can be considered three-dimensional data nowadays obtainable through faster and more accurate systems, the Basic Core (BC) specification was produced by reorganizing and simplifying the information levels contained in the National Territorial Data Catalogue with reference to the identified minimum subset of required information known as the National Core (NC). To make it practically usable, only the themes considered objectively useful and easily updatable were included in the Basic Core. Our presentation will outline the key points that enabled the design of the Basic Core content specification and illustrates the technological tools developed, as well as the automatic transformation and simplification procedures that led to the significant reduction in the number of object classes provided by the National Core (from 59 to only 23), demonstrating that the Basic Core project is not a merely theoretical exercise, but a practical and concrete application currently tested and successfully used in South Tyrol. The specifically developed Dashboard for managing, correcting and updating the provincial Geotopographic Database, built on the basis of this new simplified specification, will be explained in detail. This dashboard allows effective operation on every management aspect, including the crucial task of sharing maintenance responsibilities between the Provincial and Municipal levels, thus ensuring the full efficiency of this fundamental geographic base. Particular attention will be given to illustrating the guided editing functionality available directly from the online interface, as well as the options for creating and exporting QGIS projects. QGIS projects are designed to perform the most significant and advanced corrections and/or updates. We will conclude the overview of this innovative system with a demonstration of the processes for reimporting and validating the updated data. Finally, practical cases in which the Basic Core has been used will be presented, as well as future developments, already planned and those still under evaluation, that the system will receive in order to refine and make its use more robust.

", + "track": { + "@color": "#49a834", + "#text": "Data Spaces" + }, + "category": "Data Spaces", + "type": "Data Spaces", + "track-url": "https://www.sfscon.it/tracks/data-spaces-track-2024/", + "persons": { + "person": { + "@id": "6327", + "@organization": "Consorzio dei Comuni della Provincia di Bolzano", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2023/06/Edoardo_Scepi_649be56920cd2649be8920d87e.jpeg", + "@bio": "\"With a degree in Environmental Biology, I have worked for over 15 years in the international development cooperation sector in projects for environmental protection and systemic management of endangered natural areas. My main goal in any project in which I have participated has always been to use the data collected in the only (for me) useful and smart way. That is, draw practical and concrete information that would allow any \\\"system\\\" to be effectively managed and monitored. I dedicated myself to research and data collection activities in the field, development of relational databases, creation of decision support systems, software development and teaching\\/training of many stakeholders who could then continue and effectively replicate the various management approaches implemented. Thus, making the projects self-sustainable. My education as a biologist also enabled me to translate the \\\"scientific mindset\\\" so that more technical\\/managerial members, such as policymakers, for example, could concretely understand the results obtained and use them as a robust and solid basis for their final decisions. I have worked in many countries around the world, and this has allowed me to relate with so many different characters, but especially in regard to this I have realized my ability to work with the most diverse types of people and in the most diverse situations possible. I am curious beyond measure; for me, the most important thing is to understand the \\\"working mechanism\\\" of what I am dedicated to. Regardless of the topic or field. I am also sometimes a bit \\\"lunatic\\\", but very logical. I like to work together with a wide range of professionality and personalities, and I consider myself a good communicator. Furthermore, I am passionate about so many things, for sure too many, engineering, mechanics, computer science, photography, new technologies in general, but above all there is in me an absolute love for the nature that surrounds us. A source of calm as well as deep inspiration.\"", + "@url": "https://www.sfscon.it/speakers/edoardo-scepi/", + "#text": "Edoardo Scepi" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b3c1b02340e86f617d537e18a3bedd3650d4d", + "@unique_id": "2024day1event34", + "@bookmark": "1", + "@rating": "1", + "start": "13:20", + "duration": "00:15", + "title": "Sharing Connects People", + "url": "https://www.sfscon.it/talks/sharing-connects-people/", + "language": null, + "abstract": "The experience of Think Open at CIMeC", + "subtitle": "The experience of Think Open at CIMeC", + "description": "

Think Open is an Open Science initiative born within CIMeC in 2018 whose goal is to build a virtual space within which researchers at the Center can share different kinds of outputs from research, integrating and merging information from different sources and stages of the knowledge-building process. A number of achievements have been made over the years, both from the point of view of training (seminars, hands-on, courses for doctoral students, awards, etc.) and implementation of best practices (code and data sharing, adoption of free-software tools, etc.). Here we will describe how sharing open practices in everyday working routines foster connections between people, creating practice-based communities.

", + "track": { + "@color": "#49a834", + "#text": "Data Spaces" + }, + "category": "Data Spaces", + "type": "Data Spaces", + "track-url": "https://www.sfscon.it/tracks/data-spaces-track-2024/", + "persons": { + "person": { + "@id": "6974", + "@organization": "University of Trento", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Vittorio_Iacovella_6673f70abc3ed6673fc4f5bcf4.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/viacovella.github.io\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/vittorioiacovella\\/\"},{\"twitter\":\"https:\\/\\/x.com\\/V_Iacovella\"}]", + "@bio": "\"I work as full-stack technician for Think Open, the open science initiative of CIMeC - Center for Mind \\/ Brain Sciences at the University of Trento. There, I develop, promote and disseminate the adoption of open science practices within CIMeC cognitive neuroscience research community. I work to reduce the gap between the adoption of technical tools and the scientific purposes.\"", + "@url": "https://www.sfscon.it/speakers/vittorio-iacovella/", + "#text": "Vittorio Iacovella" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b54e56b76ae52f83ed15cf75879584e82d108", + "@unique_id": "2024day1event38", + "@bookmark": "1", + "@rating": "1", + "start": "13:40", + "duration": "00:15", + "title": "Hacking your (electric) car: the importance of Open Data", + "url": "https://www.sfscon.it/talks/hacking-your-electric-car-the-importance-of-open-data/", + "language": null, + "abstract": "Gathering information from the OBD (On Board Diagnostic) port of your car could be challenging", + "subtitle": "Gathering information from the OBD (On Board Diagnostic) port of your car could be challenging", + "description": "

Any car has a diagnostic connector from which you can gather and/or set data from the various ECU (Engine Control Unit) that are present in your car, such as odometer, temperatures, motor rotation speed, accelerator depression percentage, wheel angle, lights, and – in an electric car – information about battery, remain energy, charging/discharging power, etc.
\nThe big challenge is that the meaning of fathered data is usually not known and car manufacturers are reluctant to share this information.
\nThis talk will illustrate how to scan the available data and make reverse engineering in order to try to create a shared database containing (useful) car data and PIDs (Parameter IDs) from ECUs of your car.

", + "track": { + "@color": "#49a834", + "#text": "Data Spaces" + }, + "category": "Data Spaces", + "type": "Data Spaces", + "track-url": "https://www.sfscon.it/tracks/data-spaces-track-2024/", + "persons": { + "person": { + "@id": "6443", + "@organization": "Bonnix di Bonissi Luca", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2023/07/Luca_Bonissi_64a458f0ab1ce64a45c4406b45.jpeg", + "@bio": "\"Programmer and Free Software enthusiast. FSFE volunteer.\\r\\n\\r\\nHe graduated in computer science, focusing on low-level programming (embedded microcontroller, assembly, etc.). He approached to Free Software in 1996, with the VIM text editor, and later, he began experimenting with various distributions (Phat Linux, Red Hat, Knoppix) and eventually focused on Slackware, feeling it perfect either to better understand GNU\\/Linux systems or because it has by default everything needed for programming. Actually he is the maintainer of BonSlack distribution, a Slackware porting to various CPUs\\/systems (ARM, Alpha, HPPA, LoongArch64, MIPS, OpenRISC, PowerPC, RISC-V, S\\/390x, SH4, SPARC64), and he is a translator volunteer for the FSFE community.\"", + "@url": "https://www.sfscon.it/speakers/luca-bonissi/", + "#text": "Luca Bonissi" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b707665419bd3524cf3fe7b13200efd97691e", + "@unique_id": "2024day1event42", + "@bookmark": "1", + "@rating": "1", + "start": "14:00", + "duration": "00:15", + "title": "The Innovation Paradox", + "url": "https://www.sfscon.it/talks/the-innovation-paradox/", + "language": null, + "abstract": "Do you really know how to unleash and manage innovation?", + "subtitle": "Do you really know how to unleash and manage innovation?", + "description": "

In the era of the Fifth Industrial Revolution, leaders, innovators and pioneers design, generate, and shape future-proof organizations, driven by a meaningful purpose promoting social impacts, combining emerging technologies and new ways of collaborating and conceiving work. While the “why” is clear and quite declared by many, the “what” to do and the “how” to do it remain very nebulous and, in some cases, obscure. Those ones who lead innovation within an organization suffer the innovation paradox: must innovate without knowing what and how. Innovators and pioneers are often alone, without a framework and processes for an open innovation execution. How can we unlock and unleash innovation, ensuring that the actions taken are always driven by what is truly needed to evolve your organization?

", + "track": { + "@color": "#49a834", + "#text": "Data Spaces" + }, + "category": "Data Spaces", + "type": "Data Spaces", + "track-url": "https://www.sfscon.it/tracks/data-spaces-track-2024/", + "persons": { + "person": { + "@id": "6492", + "@organization": "Seedble / Symphonie Prime", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Andrea_Solimene_64ebb4482e10b667a85bc0f083.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/www.seedble.com\\/\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/andreasolimene\\/\"}]", + "@bio": "\"Strategy & Open Innovation Enabler | TEDx speaker | Ecosystem Builder | Startup Mentor | New Ways of Working expert | CoFounder blendX.io | Advisory Board Member Business Innovation Hub Impresapiens | CoDirector Founder Institute Italy | Lecturer | Writer | coAuthor Coalescence Innovation Framework |\"", + "@url": "https://www.sfscon.it/speakers/andrea-solimene/", + "#text": "Andrea Solimene" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b87a38cd1a13c976d89c13cfb25b74874213a", + "@unique_id": "2024day1event46", + "@bookmark": "1", + "@rating": "1", + "start": "14:20", + "duration": "00:15", + "title": "The FSFE Italy Project from Understanding to Testing", + "url": "https://www.sfscon.it/talks/the-fsfe-italy-project-from-understanding-to-testing/", + "language": null, + "abstract": "How I applied design-thinking to re-design the Italian Free Software Community", + "subtitle": "How I applied design-thinking to re-design the Italian Free Software Community", + "description": "

The role of Deputy Coordinator Italy within the Free Software Foundation Europe (FSFE) was born in 2022 out of the need of re-establishing the presence of the Foundation on the territory. I designed this three years experimental project together with the Free Software Lab of NOI Techpark with the value proposition of (re)designing the FSFE Italian Community.

\n

The project followed a human centric approach, moving along the five core stages of design-thinking. The goal of my talk is to describe the FSFE Italy project and the design-thinking approach adopted.

\n

The first year (Y1) served as the understanding phase: I got involved as an FSFE representative in the main communication channels used by the Free Software (FS) community on the territory. I conducted interviews with volunteers, associations’ heads and enthusiasts, took part into the main FS events organized on the territory, mapped all stakeholders (understanding-observing) and created my own point of view (POV). By the end of 2022 I had already became an established FSFE representative on the territory, having gathered inputs and ideas on how to kick off the community into year two (Y2). The goal of year two was to build on these new ideas (ideation) and put these thoughts into action (prototyping) by finding common goals and activities with the main FS associations active on the territory and signing Memorandum of Understandings, preparing the ground to test it in the third year (Y3). Guess what was the result?

", + "track": { + "@color": "#6b6b6b", + "#text": "Community Building" + }, + "category": "Community Building", + "type": "Community Building", + "track-url": "https://www.sfscon.it/tracks/community-building-track-2024/", + "persons": { + "person": { + "@id": "5960", + "@organization": "FSFE - Free Software Foundation Europe ", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/form-speakers/marta-andreoli-fa9c0b907059fd5f818d4012846bb14e.jpeg", + "@bio": "\"Marta is an experienced event, marketing & communications leader. She has an extensive background in events coordination & planning, agency management, and campaign development having worked for international brands in the cultural and outdoor sector.\\r\\n\\r\\nShe is currently collaborating with the Free Software Foundation Europe (FSFE) as the Deputy Coordinator Italy, focusing on strenghtening the existing Italian free software community and fostering its growth.\\r\\n\\r\\nMarta\\u2019s core competencies are based on combining people centric, innovative and a human centred approaches within an environment of radical collaboration. She is currently furthering her studies in this field of Design Thinking at Hasso-Plattner-Institut in Berlin.\\r\\n\\r\\nShe values free software due the integration of ideas of critical consumption, minimalism and sustainability. She believes that the choices we make in the fundamental issues of freedom in software are fundamental issues in our lives and in the way we are shaping the future of our society.\\r\\n\\r\\nHer outgoing personality and the experience developed in forging relationships in her previous roles underpins her approach as Community Manager.\\r\\n\\r\\nDue to her strong interests in sustainability and ecology, Marta is especially interested in the interplay of Free Software with other fields such as ecology and one of her future goals would be to conduct a research project about the impact of digital technologies on the physical environment and its contribution to the so called Sustainable Development Goals.\\r\\n\\r\\n\\u201cLittle drops make the mighty ocean\\u201d (sono le gocce che fanno il mare) is her motto.\"", + "@url": "https://www.sfscon.it/speakers/marta-andreoli/", + "#text": "Marta Andreoli" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b9ebab56265693ebdef42993aad09f2ef52d4", + "@unique_id": "2024day1event50", + "@bookmark": "1", + "@rating": "1", + "start": "14:40", + "duration": "00:15", + "title": "How to Create a Fearless Open Source Community", + "url": "https://www.sfscon.it/talks/how-to-create-a-fearless-open-source-community/", + "language": null, + "abstract": "Empowering Open Source through Psychological Safety", + "subtitle": "Empowering Open Source through Psychological Safety", + "description": "

In the fast-evolving landscape of open source projects, traditional norms of conformity often stifle innovation. The culture of “fitting in” and “going along” suppresses new ideas and critical perspectives. Drawing on my decade of community management experience, I will share how to eliminate fear and aggression, fostering psychological safety where creativity can thrive.

\n

Creating a sense of community is essential. When people feel welcomed, they are more likely to stay and contribute. Inclusivity is key to building a positive atmosphere. By making everyone feel valued, we can encourage collaboration and idea-sharing.

\n

We must move beyond the “Read the Manual” culture and establish a “No Stupid Questions” rule. This embraces curiosity and eliminates the stigma of asking questions, especially for newcomers. When people feel safe to ask questions without fear, they engage more deeply and contribute meaningfully.

\n

Creating a safe space for expression involves fostering a culture where it’s okay to share half-finished thoughts, ask unconventional questions, and admit mistakes without fear. When members feel they can be open, they are more likely to share innovative ideas.

\n

Constructive dissent is crucial for innovation. Encouraging respectful disagreement and valuing different perspectives drives the community forward and prevents stagnation.

\n

Avoiding the “ivory tower effect” is also important. Promoting transparency in the development process by openly communicating project goals, decisions, and challenges helps build trust and encourages participation.

\n

This session will provide practical insights and strategies to transform your open source community into a fearless hub of innovation. Together, we can create a culture where expressing ideas, asking questions, and admitting mistakes are safe, fostering an environment where creativity can flourish.

", + "track": { + "@color": "#6b6b6b", + "#text": "Community Building" + }, + "category": "Community Building", + "type": "Community Building", + "track-url": "https://www.sfscon.it/tracks/community-building-track-2024/", + "persons": { + "person": { + "@id": "6259", + "@organization": "Nethesis", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2023/06/Alessio_Fattorini_649160be773b36491626adab0e.jpeg", + "@bio": "\"I am a community manager who writes, particularly drawn to everything that encourages people to work and collaborate together \\u2764\\ufe0f\\r\\nAt Nethesis, I create communities to support business by connecting people and companies.\\r\\n- I am an evangelist and public speaker in Italy and abroad. I provide training on Corporate Leadership, Open Source, Community Management, and Teamwork.\\r\\n- Leveraging my experience with Digital Heroes Community and the NethServer project, I am especially focused on creating customer and product-oriented communities.\\r\\n- I work closely with developers and users, utilizing my technical background as a Linux SysAdmin and Support Specialist.\"", + "@url": "https://www.sfscon.it/speakers/alessio-fattorini/", + "#text": "Alessio Fattorini" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59bb4f9e4e3c860fdea7f57c1d3f6a6b50b514f", + "@unique_id": "2024day1event54", + "@bookmark": "1", + "@rating": "1", + "start": "15:00", + "duration": "00:15", + "title": "What the open source community means to me", + "url": "https://www.sfscon.it/talks/what-the-open-source-community-means-to-me/", + "language": null, + "abstract": "Some very personal thoughts on why contributing can enrich your life", + "subtitle": "Some very personal thoughts on why contributing can enrich your life", + "description": "

Everytime I tell my friends about my hobby which noawadays has also become my job, I face lots of questions. A worldwide community? Contributors around the globe? An open source community? What is this all about?

\n

In this talk, I’d like to share my very personal view about what the open source community means to me, how to grow from user into community member, how the credit of trust helps you to discover your own skills, how to make friends around the world and why it’s not only fun to get active in a community, but also a big benefit for your whole life that can help you to broaden your mind.

", + "track": { + "@color": "#6b6b6b", + "#text": "Community Building" + }, + "category": "Community Building", + "type": "Community Building", + "track-url": "https://www.sfscon.it/tracks/community-building-track-2024/", + "persons": { + "person": { + "@id": "4932", + "@organization": "The Document Foundation", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/form-speakers/florian-effenberger-d0252ec75d2d897983e1937ddd628001.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/effenberger.org\"},{\"facebook\":\"https:\\/\\/www.facebook.com\\/floeff\"},{\"mastodon\":\"https:\\/\\/mastodon.social\\/@floeff\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/floeff\"},{\"twitter\":\"https:\\/\\/twitter.com\\/floeff\"}]", + "@bio": "\"Florian has been a free and open source enthusiast since 2004. He works for The Document Foundation, the nonprofit behind LibreOffice and previously volunteered in marketing and infrastructure. As a student, he designed educational computer systems for schools, including software deployment based on free software and was a frequent contributor to a variety of professional magazines worldwide on topics such as free software, open standards and legal matters. A proud uncle, he loves to spend time with the family and occasionally blogs about various topics, including community building, free and open source software and computer networks. Based around Munich, he helped to create the local open source meetings and shaped the tasty idea of open source cooking.\"", + "@url": "https://www.sfscon.it/speakers/florian-effenberger/", + "#text": "Florian Effenberger" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59bcb536cc86f4091ba8be0a644c81843b9d98e", + "@unique_id": "2024day1event58", + "@bookmark": "1", + "@rating": "1", + "start": "15:20", + "duration": "00:15", + "title": "A Journey of Contribution and Collaboration in Open Source", + "url": "https://www.sfscon.it/talks/a-journey-of-contribution-and-collaboration-in-open-source/", + "language": null, + "abstract": "Why Foundations are Essential", + "subtitle": "Why Foundations are Essential", + "description": "

Have you ever worked on a project that didn’t use any open source tools, libraries, or products? Didn’t think so…Using open source has been such an integral part of our daily work life that we don’t even think about it. We just expect it to be available, secure, stable, and bug-free. But how many of you are actually contributing back to an open source project?

\n

This session will go through a couple of the aspects to consider when you are embarking on your open source journey. We will look at different kinds of open source projects, and what the open source foundations bring to the table.

", + "track": { + "@color": "#6b6b6b", + "#text": "Community Building" + }, + "category": "Community Building", + "type": "Community Building", + "track-url": "https://www.sfscon.it/tracks/community-building-track-2024/", + "persons": { + "person": { + "@id": "7036", + "@organization": "Eclipse Foundation", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Ivar_Grimstad_667ea1bc78e64667ea2bd0fe32.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/agilejava.eu\"},{\"mastodon\":\"https:\\/\\/mastodon.social\\/@ivar_grimstad\"},{\"linkedin\":\"https:\\/\\/x.com\\/ivar_grimstad\"},{\"twitter\":\"https:\\/\\/x.com\\/ivar_grimstad\"}]", + "@bio": "\"Ivar Grimstad is the Jakarta EE Developer Advocate at Eclipse Foundation. He is a Java Champion and JUG Leader based in Sweden.\\r\\n\\r\\nBesides advocating the Jakarta EE technologies, Ivar is contributing to the Jakarta EE specifications as well as being the PMC Lead for Eclipse Enterprise for Java (EE4J). He is also one of the specification leads for Jakarta MVC and represents Eclipse Foundation on the JCP Executive Committee.\\r\\n\\r\\nIvar is also involved in various other open-source projects and communities. He is a frequent speaker at International developer conferences.\"", + "@url": "https://www.sfscon.it/speakers/ivar-grimstad/", + "#text": "Ivar Grimstad" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59be11a988d2172f15827aa3c317e4df0ba2738", + "@unique_id": "2024day1event62", + "@bookmark": "1", + "@rating": "1", + "start": "15:40", + "duration": "00:15", + "title": "Jakarta EE: Why and how to get involved in Open Source Software?", + "url": "https://www.sfscon.it/talks/jakarta-ee-why-and-how-to-get-involved-in-open-source-software/", + "language": null, + "description": "

In this session you will learn how to become part of an open source community, how to get involved and most importantly why you need to do it! You will learn about the Jakarta EE and its plans for the future, so you can start right away! This presentation will also provide you with key insights into the industry-wide, open source collaboration to modernize Java enterprise systems for cloud-centric use cases.

", + "track": { + "@color": "#6b6b6b", + "#text": "Community Building" + }, + "category": "Community Building", + "type": "Community Building", + "track-url": "https://www.sfscon.it/tracks/community-building-track-2024/", + "persons": { + "person": { + "@id": "7079", + "@organization": "Eclipse Foundation", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Tanja_Obradovic_668176bca009d6681782b56685.jpeg", + "@bio": "\"Tanja Obradovi\\u0107 is Senior Manager, Java Programs at the Eclipse Foundation. Having been involved with Java and Java EE for quite some time, with various companies and in various roles (development, consulting, management) revitalizing Enterprise Java with Jakarta EE and other Java open source specifications and projects at the Eclipse Foundation, making them relevant and the technology of choice for cloud-native application development is my particular interest.\"", + "@url": "https://www.sfscon.it/speakers/tanja-obradovic/", + "#text": "Tanja Obradovic" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59bf7182cce14462e150a69a5c414a56113a742", + "@unique_id": "2024day1event66", + "@bookmark": "1", + "@rating": "1", + "start": "16:00", + "duration": "00:15", + "title": "From Concept to Camp: Project Management Strategies for IT Education Events", + "url": "https://www.sfscon.it/talks/from-concept-to-camp-project-management-strategies-for-it-education-events/", + "language": null, + "description": "

In today’s fast-paced technological landscape, the need for immersive and hands-on educational experiences is more crucial than ever. “From Concept to Camp: Project Management Strategies for IT Education Events” delves into the meticulous process of organizing successful IT camps from a project management perspective.

\n

Join us as we explore the comprehensive journey of bringing an IT camp from initial concept to a fully realized event. We will cover essential project management strategies, including planning, scheduling, resource allocation, risk management, and post-event evaluation. Participants will gain insights into: Defining Objectives and Scope; Budgeting and Resource Management; Team Collaboration and Leadership; Marketing and Participant Recruitment; Logistics and Event Planning; Evaluation and Feedback.

\n

Through real-world examples and practical advice based on the Red Hat Summer Camp Brno project, this talk will equip you with the tools and knowledge needed to transform your vision of an IT camp into a reality.

\n

Whether you’re planning your first event or looking to enhance your current approach, this session will provide valuable takeaways to elevate your project management skills and deliver exceptional educational experiences.

", + "track": { + "@color": "#6b6b6b", + "#text": "Community Building" + }, + "category": "Community Building", + "type": "Community Building", + "track-url": "https://www.sfscon.it/tracks/community-building-track-2024/", + "persons": { + "person": [ + { + "@id": "5797", + "@organization": "Red Hat", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/form-speakers/juri-solovjov-99470f10372f7fce2d8b7a2c1bb75a79.jpeg", + "@socials": "[{\"facebook\":\"https:\\/\\/www.facebook.com\\/juras08\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/juri-solovjov\\/\"}]", + "@bio": "\"

ISTQB certified Software Quality Engineer with 4 years experience at Red Hat<\\/p>\\r\\nPreviously worked as a Front-End Developer\\r\\n\\r\\nOriginally came from Estonia, currently located in Brno, Czechia.\\r\\n\\r\\nStudied Telecommunications and Telecommunication Services at Tallinn University of Technology\"", + "@url": "https://www.sfscon.it/speakers/juri-solovjov/", + "#text": "Juri Solovjov" + }, + { + "@id": "5985", + "@organization": "Red Hat", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2022/10/Yuliia_Kliuchnikova.png", + "@bio": "\"Previously an active member of international youth-run, non-governmental, and not-for-profit organizations such as AIESEC and ESN.\\r\\nAt the present time, I am Project Manager in Red Hat with 3+ years of experience.\\r\\nOriginally came from Ukraine, currently located in Brno, Czech Republic.\\r\\nStudied Management and Ecology at the Donetsk State University of Management in Ukraine.\"", + "@url": "https://www.sfscon.it/speakers/yuliia-kliuchnikova/", + "#text": "Yuliia Kliuchnikova" + } + ] + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c0d037bd17ed11c5a420ff5a4a7356f979c8c", + "@unique_id": "2024day1event70", + "@bookmark": "1", + "@rating": "1", + "start": "16:20", + "duration": "00:15", + "title": "Building the Public Interest Desktop", + "url": "https://www.sfscon.it/talks/building-the-public-interest-desktop/", + "language": null, + "abstract": "Our experience organizing GNOME's Sovereign Tech Fund project", + "subtitle": "Our experience organizing GNOME's Sovereign Tech Fund project", + "description": "

The Sovereign Tech Fund is a new funding program for critical free software infrastructure by the German government. As part of this, members of the GNOME community have been working on fixing important issues across the free desktop stack. This includes security, accessibility, maintainability, hardware support, and more.

\n

In this talk Sonny and Tobias will give an overview of how we organized the project, the work done as part of it, and the massive impact a relatively small amount of public money can have on making the free desktop better.

", + "track": { + "@color": "#6b6b6b", + "#text": "Community Building" + }, + "category": "Community Building", + "type": "Community Building", + "track-url": "https://www.sfscon.it/tracks/community-building-track-2024/", + "persons": { + "person": [ + { + "@id": "5854", + "@organization": "GNOME", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/form-speakers/tobias-bernard-a69efe2d7457361a0a4bd764355e2d20.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/tobiasbernard.com\"},{\"twitter\":\"https:\\/\\/twitter.com\\/tobias_bernard\"}]", + "@bio": "\"Tobias is an Italian interaction designer based in Berlin. He's a member of the GNOME design team and works for Purism on the Librem 5 team. When he's not doing GNOME stuff, he's working to avoid climate disaster through mass civil resistance.\"", + "@url": "https://www.sfscon.it/speakers/tobias-bernard-2/", + "#text": "Tobias Bernard" + }, + { + "@id": "7091", + "@organization": "GNOME", + "@bio": "\"Sonny is a software and organization engineer. He's been working in software for 15+ years and has been contributing to the GNOME project for the last 5 years.\"", + "@url": "https://www.sfscon.it/speakers/sonny-piers/", + "#text": "Sonny Piers" + } + ] + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c22f30d8c38ec4a884a84da999c04fc1a2e8e", + "@unique_id": "2024day1event74", + "@bookmark": "1", + "@rating": "1", + "start": "16:40", + "duration": "00:15", + "title": "Let’s share our love for Free Software", + "url": "https://www.sfscon.it/talks/lets-share-our-love-for-free-software/", + "language": null, + "abstract": "I love Free Software Day 2025", + "subtitle": "I love Free Software Day 2025", + "description": "

We often underestimate the power of a simple Thank You. Free Software contributors do important work for our society and the “I Love Free Software Day” on 14 February is the perfect opportunity for you to express your special gratitude. Since 2010, we have celebrated this wonderful annual event with an ever-growing and diverse community. ♥

", + "track": { + "@color": "#6b6b6b", + "#text": "Community Building" + }, + "category": "Community Building", + "type": "Community Building", + "track-url": "https://www.sfscon.it/tracks/community-building-track-2024/", + "persons": { + "person": { + "@id": "7139", + "@organization": "FSFE - Free Software Foundation Europe", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/09/Ana_Galan_6693a1c2d138466f28f659d425.jpeg", + "@bio": "\"Ana has a background in communication and social sciences. After an internship at FSFE, she continued her career in Berlin and Madrid with various journalistic, communication and production-related experiences, and has been back at FSFE since 2022. There she focuses on communication outreach tasks as well as helping to manage the FSFE community and related events.\"", + "@url": "https://www.sfscon.it/speakers/ana-galan/", + "#text": "Ana Galan" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c399e36461c6618539787cfbb52b2d0b5e150", + "@unique_id": "2024day1event78", + "@bookmark": "1", + "@rating": "1", + "start": "17:00", + "duration": "00:15", + "title": "MoodleXR: A Next-Generation Open-Source Platform for Immersive Learning", + "url": "https://www.sfscon.it/talks/moodlexr-a-next-generation-open-source-platform-for-immersive-learning/", + "language": null, + "description": "

This project aims to develop a state-of-the-art Learning Management System (LMS) based on Moodle, optimized for delivering Virtual Reality (VR) and Augmented Reality (AR) learning modules.

\n

By leveraging the open-source nature of Moodle and integrating advanced immersive technologies, the project seeks to create an innovative educational platform that transforms traditional learning experiences.

\n

The LMS will incorporate open-source VR/AR tools and libraries, such as A-Frame, AR.js, and Blender, enabling educators to seamlessly integrate and manage immersive content. It will support various VR headsets and AR devices, ensuring broad accessibility. The platform will feature interactive learning modules, robust analytics, and scalable infrastructure, all built on open-source technologies like Kubernetes and Matomo.

\n

Additionally, the project will emphasize accessibility and privacy compliance, utilizing tools like WAVE and Let’s Encrypt.

\n

By fostering a community-driven development model, this LMS will offer a flexible, cost-effective solution that revolutionizes education through experiential learning, making it more engaging, interactive, and effective for students and educators alike.

", + "track": { + "@color": "#6b6b6b", + "#text": "Community Building" + }, + "category": "Community Building", + "type": "Community Building", + "track-url": "https://www.sfscon.it/tracks/community-building-track-2024/", + "persons": { + "person": { + "@id": "5556", + "@organization": "Gruppo FOS", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2021/09/Luca_Bagna.png", + "@socials": "[{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/lucabagna\\/\"}]", + "@bio": "\"Luca Bagna is an accomplished digital and learning executive with over 20 years of experience in driving strategic growth and operational excellence. Currently serving as the Chief Operating Officer for the Digital Learning Business Line at Gruppo FOS SpA, Luca has a proven track record of leading high-performance teams to deliver innovative learning solutions.\\r\\n\\r\\nLuca\\u2019s deep understanding of emerging technologies and industry trends has enabled him to create competitive advantages for his organizations, particularly in the development of comprehensive learning strategies that enhance employee performance and drive business results. His leadership has been instrumental in achieving steady annual profit growth by optimizing resources, fostering strategic alliances, and expanding training services.\\r\\n\\r\\nThroughout his career, Luca has managed and executed numerous large-scale digital learning projects across diverse sectors, including aerospace, automotive, finance, healthcare, and luxury retail. His expertise in LMS development, instructional design, and project management has been recognized in both the public and private sectors, where he has led the creation of customized learning ecosystems for organizations ranging from regional academies to global corporate giants.\"", + "@url": "https://www.sfscon.it/speakers/luca-bagna/", + "#text": "Luca Bagna" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c514bdfab4418da1c9cccbe1395c5e1ddbbc2", + "@unique_id": "2024day1event82", + "@bookmark": "1", + "@rating": "1", + "start": "17:20", + "duration": "00:15", + "title": "Implementing digital examinations in free software systems", + "url": "https://www.sfscon.it/talks/implementing-digital-examinations-in-free-software-systems/", + "language": null, + "description": "

In Finnish upper secondary schools course and final exams have been digital for some years now. Ordinary student laptops are routinely booted from USB flash drives to a special operating system, which provides a restricted environment allowing students to take an exam with no distractions or tools to cheat. Up to these days, this was implemented with Debian GNU/Linux, also meaning that student laptops must be Linux-compatible.

\n

This is now changing. Not every modern laptop can simply boot from a USB drive to run Linux, these including chromebooks, Apple laptops and some new Windows laptops. Some schools may want to buy these devices and do not want a separate set of computers only for examinations. The current system is being replaced by an exam application, meant to run on different operating systems, which are to provide guarantees that no cheating can occur. The exam application activates the “assessment mode”, provided by operating system vendors, and this mode should provide a safe place where no cheating can occur, even on computers owned by the students.

\n

Does that even make sense? Can that really be done, and with free software? In this presentation we take a peek at some technologies in Linux systems that can be used to secure a computer against an attacker with a physical access to the machine. We will also look at possible ways to implement an “assessment mode” in Linux desktops.

", + "track": { + "@color": "#6b6b6b", + "#text": "Community Building" + }, + "category": "Community Building", + "type": "Community Building", + "track-url": "https://www.sfscon.it/tracks/community-building-track-2024/", + "persons": { + "person": { + "@id": "6961", + "@organization": "Opinsys", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Juha_Erkkila_66727fef28526667284bbf1788.jpeg", + "@bio": "\"I am a programmer at Opinsys. Opinsys is a company that manages many thousands of student laptops in Finland and Germany, all using Debian GNU\\/Linux. Our free software project is called Puavo, see https:\\/\\/puavo.org.\\r\\n\\r\\nMy university years were spent as a free software hobbyist from 1999 onwards, using Linux and BSD Unix systems, while graduating later with a master's degree on software development. I have been working professionally with free software since 2008. I find the traditional unix tools seductive, lament why people have never heard of Tcl (the programming language!) and pick up shell whenever it can solve a problem.\"", + "@url": "https://www.sfscon.it/speakers/juha-erkkila/", + "#text": "Juha Erkkilä" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c699ef7566e17ca847eb6bae9c03baa38a34b", + "@unique_id": "2024day1event86", + "@bookmark": "1", + "@rating": "1", + "start": "17:40", + "duration": "00:15", + "title": "Let’s spark children’s interest in coding", + "url": "https://www.sfscon.it/talks/lets-spark-childrens-interest-in-coding/", + "language": null, + "abstract": "Our experiences and how you can contribute", + "subtitle": "Our experiences and how you can contribute", + "description": "

Today it is impossible to imagine daily life without software. The majority of us can’t spend a single day without using it. People use software in the workplace, on laptops, and on mobile phones. Software is also found in less obvious places however: in trains, cars, televisions, washing-machines, fridges, and many other devices. None of these devices could function without software. Without software we couldn’t write e-mails, make phone calls, go shopping, or travel as we are accustomed to. Software is our society’s central tool. How do we ensure that the next generation is motivated and capable of shaping technology for society’s benefits?

\n

The Free Software Foundation Europe’s volunteers and staff have interacted with over 1700 children between 6 to 10 years in the past months. Children, especially girls, afterwards were motivated to start experimenting with hardware and software. In the discussions we saw that they realise how crucial technology will be for them. Furthermore with the FSFE’s coding competition “Youth Hacking 4 Freedom” we gathered experiences working with teenagers who program, tinker, and have fun with software.

\n

Learn more about the experiences how the FSFE sparks children’s and teenagers interest to tinker, experiment and program. Furthermore you will see how fulfilling those activities can be for yourself.

", + "track": { + "@color": "#6b6b6b", + "#text": "Community Building" + }, + "category": "Community Building", + "type": "Community Building", + "track-url": "https://www.sfscon.it/tracks/community-building-track-2024/", + "persons": { + "person": { + "@id": "4358", + "@organization": "FSFE - Free Software Foundation Europe", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2018/10/Matthias_Kirschner-1.jpg", + "@socials": "[{\"twitter\":\"https:\\/\\/twitter.com\\/kirschner\"},{\"site\":\"ttps:\\/\\/fsfe.org\\/about\\/kirschner\"}]", + "@bio": "\"Matthias Kirschner is President of FSFE. In 1999 he started using GNU\\/Linux and realised that software is deeply involved in all aspects of our lives. Matthias is convinced that this technology has to empower society not restrict it. While studying Political and Administrative Science he joined FSFE in 2004.\\r\\nHe helps other organisations, companies and governments to understand how they can benefit from Free Software -- which gives everybody the rights to use, understand, adapt and share software - and how those rights help to support freedom of speech, freedom of press or privacy.\\r\\nMatthias loves playing with his children, and in his spare time assists in wilderness first aid seminars, enjoys comics like XKCD and Transmetropolitan; and Die \\u00c4rzte.\"", + "@url": "https://www.sfscon.it/speakers/matthias-kirschner/", + "#text": "Matthias Kirschner" + } + }, + "bookmark": "1", + "rating": "1" + } + ] + }, + { + "@name": "Seminar 3", + "event": [ + { + "@id": "670d1b59a8ec35e3e4ab0e4be4924544813945267c986", + "@unique_id": "2024day1event7", + "@bookmark": "1", + "@rating": "1", + "start": "11:00", + "duration": "00:15", + "title": "Open-source silicon chips", + "url": "https://www.sfscon.it/talks/open-source-silicon-chips/", + "language": null, + "description": "

We have all heard that there is ‘Intel inside’, but what is inside Intel? Almost all integrated circuits today are literally black boxes. They may contain unwanted or malicious features and, most importantly, they do not encourage reuse, nor do they allow it. The two main causes of such secrecy are: 1. standard design tools explicitly forbid the publication of any output, and 2. most foundries disallow disclosing technology details. Designers moreover face additional problems: The licence cost of standard design tools is unaffordable for most SMEs (unless questionable discount policies are applied), and lock-in threats arise at many levels, from IP blocks to foundry details to file formats. Yet exceptional progress has been made in recent years: Hundreds of silicon chips have been designed using free and open-source tools, and three foundries have made details of their processes public: The doors to free silicon are open! Hence how is politics reacting? What are the next steps to be taken? What are the opportunities for users, society and companies?

", + "track": { + "@color": "#c62ecc", + "#text": "Open Hardware" + }, + "category": "Open Hardware", + "type": "Open Hardware", + "track-url": "https://www.sfscon.it/tracks/open-hardware-track-2024/", + "persons": { + "person": { + "@id": "7288", + "@organization": "F-Si - Free Silicon Foundation", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/10/Luca_Alloatti_66ffa9ba2dd5a66ffac46a3f60.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/f-si.org\"},{\"mastodon\":\"https:\\/\\/mastodon.luca-alloatti.eu\\/@luca\"}]", + "@bio": "\"Luca Alloatti is the president of the Free Silicon Foundation (f-si.org) which promotes the freedom of silicon integrated circuits similarly to the Free Software Foundation which promotes the freedom of software.\\r\\nHe has a background in physics (diploma at SNS.it) and in electrical engineering (PhD at KIT.edu). At MIT, he demonstrated the first microprocessor with optical interconnects. He is currently involved in two European projects to promote open silicon in Europe [1] and to fund free software\\/hardware projects [2]. Most recently, he co-organised the 2024 Free Silicon Conference [3] and co-authored a roadmap for the European Commission [4].\\r\\n\\r\\n[1] GoIT proposal: https:\\/\\/wiki.f-si.org\\/index.php?title=Horizon_2021_Coordination_and_Support_Action_(CSA)_proposal\\r\\n[2] NGI0 Commons Fund announcement: https:\\/\\/nlnet.nl\\/press\\/20240109-NGI0-CommonsFund-unveiled.html\\r\\n[3] FSiC2024: https:\\/\\/wiki.f-si.org\\/index.php\\/FSiC2024\\r\\n[4] Roadmap for the EC: https:\\/\\/wiki.f-si.org\\/index.php?title=Recommendations_and_roadmap_for_the_development_of_open-source_silicon_in_the_EU\"", + "@url": "https://www.sfscon.it/speakers/luca-alloatti/", + "#text": "Luca Alloatti" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59aa81c1d2f2514f94265c7294cb92c7bb81a8f", + "@unique_id": "2024day1event11", + "@bookmark": "1", + "@rating": "1", + "start": "11:20", + "duration": "00:15", + "title": "Opt out? Opt in? Opt Green! Bringing Free Software To Eco-Consumers", + "url": "https://www.sfscon.it/talks/opt-out-opt-in-opt-green-bringing-free-software-to-eco-consumers/", + "language": null, + "description": "

Free Software gives consumers what they want, but many don’t know it … yet! We aim to change that by reaching out directly to eco-consumers in the “Opt Green” project, a new KDE Eco initiative funded by the German Environmental Agency.

\n

Consumers want sustainable software: in a recent European poll 50% of respondents say the two primary reasons they purchase a new device are non-functioning software and software performance issues. This is as good a time as ever for an “Opt Green” message. In the next couple of years Windows 10 end-of-life and the phasing out of Intel-based macOS support will make e-waste out of hundreds of millions of computers. Functioning but vendor-abandoned devices can stay out of the landfill and in use for many years to come. With software designed for users’ needs, not vendors’, it is possible to run software on the devices one already owns. Lean, efficient Free Software even runs on devices that are decades old. This is good for users, and better for the environment!

\n

In this lightning talk I will provide an overview of the whys and hows of KDE Eco’s “Opt Green” initiative. Through campaigns and workshops over the next 2 years, we will raise awareness about environmental issues driven by software and demonstrate the power of Free Software to drive down resource use and keep devices running smoothly for years beyond official vendor support. This is all possible because Free Software *is* right-to-repair software: it removes vendor dependencies and guarantees transparency and user autonomy, providing full control over software, and thus hardware. I will describe the ways we plan to reach our target audience, including materials designed for eco-consumers and events well outside usual tech circles, such as open-air organic, artisanal, and fair trade markets, cultural centers, and others. These activities give us the opportunity to align our values in the Free Software community with those in allied communities striving for a sustainable modern lifestyle.

", + "track": { + "@color": "#c62ecc", + "#text": "Open Hardware" + }, + "category": "Open Hardware", + "type": "Open Hardware", + "track-url": "https://www.sfscon.it/tracks/open-hardware-track-2024/", + "persons": { + "person": { + "@id": "5500", + "@organization": "KDE e.V.", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/form-speakers/joseph-p-de-veaugh-geiss-9f305bd1653fc8285db6843a4cc7e04b.jpeg", + "@bio": "\"Joseph P. De Veaugh-Geiss is the project and community manager of KDE e.V.'s \\\"Blauer Engel 4 FOSS\\\" project since July 2021. He supports the project by collecting, summarizing, and spreading information about Blauer Engel eco-certification and resource efficiency as it relates to free software development.\"", + "@url": "https://www.sfscon.it/speakers/joseph-p-de-veaugh-geiss/", + "#text": "Joseph P. De Veaugh-Geiss" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59abdfb315c72f76d912c35cf79773d98f6f316", + "@unique_id": "2024day1event15", + "@bookmark": "1", + "@rating": "1", + "start": "11:40", + "duration": "00:15", + "title": "ClapMetrics: Decoding Users’ Gender and Age Through Smartwatch Gesture Dynamics", + "url": "https://www.sfscon.it/talks/clapmetrics-decoding-users-gender-and-age-through-smartwatch-gesture-dynamics/", + "language": null, + "description": "

In this presentation, we introduce ClapMetrics – an innovative and seamless method for deducing the gender and age of smartwatch users. This system ingeniously harnesses the capabilities of the smartwatch’s integrated 3D sensors — specifically, the accelerometer and gyroscope—to capture the wearer’s arm movements during a clapping action. ClapMetrics operates on the principle that each clap is a complex interplay of motion, unique to the individual, much like a fingerprint. By analyzing these movements, ClapMetrics can gather rich biometric data without any active input or effort from the user, making it a remarkably non-intrusive technology. We will delve into the specifics of how ClapMetrics processes sensor data to make its estimations. We will explore the Neural Network’s architecture, the training process, and how the model interprets the sensor data to make reliable predictions about the wearer’s gender and age.

", + "track": { + "@color": "#c62ecc", + "#text": "Open Hardware" + }, + "category": "Open Hardware", + "type": "Open Hardware", + "track-url": "https://www.sfscon.it/tracks/open-hardware-track-2024/", + "persons": { + "person": { + "@id": "5812", + "@organization": "Department of Environmental Sciences, Informatics, and Statistics, University of Venezia Ca Foscari, Venice", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2022/09/attaullah-buriro.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/sites.google.com\\/view\\/attaullah\\/\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/attaullah-buriro-phd-03651a52\\/\"}]", + "@bio": "\"Attaullah Buriro is currently an Assistant Professor at the Department of Environmental Sciences, Informatics, and Statistics, University of Venezia Ca Foscari, Italy. Before that, he was an Assistant Professor at the Faculty of Engineering, Free University of Bolzano-Bozen, Bolzano. Before being an Assistant Professor, he held a postdoctoral researcher position at UNIBZ (1st Sep. 2019 \\u2013 30th Aug. 2020) and DISI Security Lab, University of Trento (1st Mar. 2017 \\u2013 Aug. 30th 2019). He earned his Ph.D. degree in Information and Communication Technology (security and privacy) from the University of Trento, Italy, in February 2017. His research interests include biometrics, access control, Internet of Things (IoT), Computer Vision, machine learning, artificial intelligence, and data mining. He has developed several secure, user-friendly, and implicit behavioral biometric-based authentication solutions for smartwatches, smartphones, and critical infrastructures.\"", + "@url": "https://www.sfscon.it/speakers/attaullah-buriro/", + "#text": "Attaullah Buriro" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59ad5c96bd07e7a2a2b3addd4a61cbbe2e40b91", + "@unique_id": "2024day1event19", + "@bookmark": "1", + "@rating": "1", + "start": "12:00", + "duration": "00:15", + "title": "Adoption Determinants of Open Hardware Across Industries", + "url": "https://www.sfscon.it/talks/adoption-determinants-of-open-hardware-across-industries/", + "language": null, + "description": "

Open Hardware (OH) is revolutionizing the way we approach technology in several areas, such as agriculture and healthcare. These areas, which are fundamental to food availability and human well-being, are undergoing an important shift as open hardware licensing strategies, inspired by open-source software (OSS), make solutions more accessible, affordable, and customizable. In this talk, we review major factors determining the use and adoption of OH technologies, including economic advantages, opportunities, and challenges.
\nSimilar to OSS, OH applications are gaining momentum. In agriculture, farmers and researchers are turning to OH for precision farming tools, environmental monitoring, and robotics. These technologies not only reduce development costs but can be easily adapted to specific local needs, enhancing their effectiveness in diverse agricultural environments – crucial for small-scale farmers in developing countries and rural areas who face financial constraints. Likewise, the healthcare industry is benefiting from OH through the development of affordable medical devices, diagnostic tools, and treatment systems. The high costs and regulatory challenges associated with traditional medical devices often limit access to essential healthcare, especially in underdeveloped regions. Examples include open-source ventilators, syringe pumps, and diagnostic devices.
\nApplications of OH will be showcased through a comparative analysis of successful projects, particularly those with high engagement on platforms like GitHub, characterized by community engagement, active forums, and regular updates. Finally, we will draw conclusions about the potential of OH for industries beyond agriculture and healthcare, encouraging further innovation and collaboration in the open-source community.

", + "track": { + "@color": "#c62ecc", + "#text": "Open Hardware" + }, + "category": "Open Hardware", + "type": "Open Hardware", + "track-url": "https://www.sfscon.it/tracks/open-hardware-track-2024/", + "persons": { + "person": [ + { + "@id": "6597", + "@organization": "University of Trento", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2023/09/Seckin_Celik_6517eee9b54f26517f0fd01164.jpeg", + "@bio": "\"Seckin Celik is a Ph.D. student at the University of Trento, specializing in Economics and Management. With a background in Electrical Engineering and Business Administration B.Scs., along with a master\\u2019s in Management of Innovation and Entrepreneurship, Seckin explores research areas like open-source hardware, software, licensing strategies, innovation adoption, technology acceptance, managerial decision-making, and behavioral economics. His academic journey is marked by a diverse set of skills and a passion for understanding the intricacies of economics and management.\"", + "@url": "https://www.sfscon.it/speakers/seckin-celik/", + "#text": "Seckin Celik" + }, + { + "@id": "6594", + "@organization": "University of Milan", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2023/09/Davide_Serpico_6517e222442646517e478bcb2e.jpeg", + "@bio": "\"Davide Serpico is a philosopher of science particularly interested in biology, medicine, social sciences, cognitive science, technology, and open science. Davide got a Ph.D. in Philosophy from the University of Turin (2018). Between 2016 and 2023, he conducted research at the University di Exeter (UK), the Graduate University for Advanced Studies (Hayama, Japan), the University of Leeds (UK), the University of Cambridge (UK), the University of Genoa (Italy), the Jagiellonian University (Krakow, Poland), and the University of Trento. He is now a Postdoc at the University of Milan. His research was published in top-tier philosophy and social sciences journals, such as "The British Journal for the Philosophy of Science", "Biology and Philosophy", "History and Philosophy of the Life Sciences", and "Philosophical Psychology".\"", + "@url": "https://www.sfscon.it/speakers/davide-serpico/", + "#text": "Davide Serpico" + } + ] + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59af13d05f268b5481f4006e3d6b78c3179b2c2", + "@unique_id": "2024day1event23", + "@bookmark": "1", + "@rating": "1", + "start": "12:20", + "duration": "00:15", + "title": "Enabling global interoperability among smart devices is only possible through Open Source", + "url": "https://www.sfscon.it/talks/enabling-global-interoperability-among-smart-devices-is-only-possible-through-open-source/", + "language": null, + "abstract": "Oniro and OpenHarmony a cooperation to build a global ecosystem", + "subtitle": "Oniro and OpenHarmony a cooperation to build a global ecosystem", + "description": "

Global interoperability is probably the biggest problem that smart devices have been studied for more than 10 years. Multiple solutions have been proposed with different results, but none of them has established a reference framework and a global adoption. One of the main reasons for this to stay as a key element for research and investment is the diversity among the whole technology stack and geographical dispersion of device manufacturers. In the last years, there is a solution that is capturing the attention by demonstrating how an open source operating system can enable global interoperability in a huge domestic market like China. This solution is OpenHarmony and through a cooperation with Eclipse Foundation Oniro project, it is intended to use open source to drive interoperability and therefore solve one of the biggest challenges in the IoT and smart device industry. During the talk, it will be presented the approach followed by these two independent initiatives to cooperate while keeping the independence of the open source communities behind them.

", + "track": { + "@color": "#c62ecc", + "#text": "Open Hardware" + }, + "category": "Open Hardware", + "type": "Open Hardware", + "track-url": "https://www.sfscon.it/tracks/open-hardware-track-2024/", + "persons": { + "person": { + "@id": "7009", + "@organization": "Eclipse Foundation", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Juan_Rico_667c77b6d2821667c7e3760ae2.jpeg", + "@socials": "[{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/juanricofdez\\/\"},{\"twitter\":\"https:\\/\\/x.com\\/j_rico_\"}]", + "@bio": "\"Juan Rico is a Telecommunications Engineer and Master in ICT technologies who has been deeply involved in the technical development of R&I initiatives applied to multiple domains (avionics, cities, homes, industry and energy). With a strong Digital mindset, he has led and supported the deployment and adoption of IoT, cloud and data technologies to exploit connected assets. During the last 10 years, he has been combining technology and business development defining and deploying digital transformation strategies for energy, consumer devices and manufacturing companies. These challenges led him to specialise in Disruptive Strategy at Harvard Business School and Innovation management at Georgia Tech. He is currently Senior Manager for Oniro and Cloud Programs at Eclipse Foundation exploiting his background as a technologist and manager to push forward open source as the most effective way to democratise technology and make it interoperable.\"", + "@url": "https://www.sfscon.it/speakers/juan-rico/", + "#text": "Juan Rico" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b0da4e77787706db072d93ef706113db96c6d", + "@unique_id": "2024day1event63", + "@bookmark": "1", + "@rating": "1", + "start": "12:40", + "duration": "00:15", + "title": "Smart Werke Meran – Lorawan Use Cases", + "url": "https://www.sfscon.it/talks/smart-werke-meran-lorawan-use-cases/", + "language": null, + "abstract": "Our Use Cases realized with 100% Open Source", + "subtitle": "Our Use Cases realized with 100% Open Source", + "description": "

Stadtwerke Meran has had a Chripstack Lorawan server and 19 Lorawan gateways for a year now. Merano has a well-developed Lorawan network.

\n

We have realized the following use cases:

\n

Remote control of public lighting.
\nTemperature measurement ( Just Nature project)
\nSmart metering for our water customer
\nGPS tracking for waste compactors of our major customers

", + "track": { + "@color": "#c62ecc", + "#text": "Open Hardware" + }, + "category": "Open Hardware", + "type": "Open Hardware", + "track-url": "https://www.sfscon.it/tracks/open-hardware-track-2024/", + "persons": { + "person": { + "@id": "6318", + "@organization": "Stadtwerke Meran", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2023/06/Stefan_Mutschlechner_649b2d4992c69649b33830883d.jpeg", + "@socials": "[{\"site\":\"http:\\/\\/www.asmmerano.it\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/stefan-mutschlechner-bb343355?originalSubdomain=it\"}]", + "@bio": "\"I was working for years in the automation sector.\\r\\nfirst for Techno Alpin(2001-2007) in Bozen, Peter Warasin from Endian told me to use Open Source. I started to use Subversion....\\r\\nAfter I worked for BTS Biogas like Head of Automation department, we used Kubuntu for visualizzing PC, and Postres like Database. 50% Open Souce use.\\r\\nNow im working for Stadt Werke Meran, where we were able to create a Smart City Plattform with only Open Source Tools..\\r\\nChirpstack, Fiware, Postgres, .... and many more. Smart City Merano 100% Open Source.\"", + "@url": "https://www.sfscon.it/speakers/stefan-mutschlechner/", + "#text": "Stefan Mutschlechner" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b2aa8a0db4dedf1f4f1718fe808f7ba861f56", + "@unique_id": "2024day1event31", + "@bookmark": "1", + "@rating": "1", + "start": "13:00", + "duration": "00:15", + "title": "2025 scenario on OpenISA OpenPower Open Hardware computing", + "url": "https://www.sfscon.it/talks/2025-scenario-on-openisa-openpower-open-hardware-computing/", + "language": null, + "abstract": "2025 Real scenario on Open Hardware based on OpenISA OpenPower CPU", + "subtitle": "2025 Real scenario on Open Hardware based on OpenISA OpenPower CPU", + "description": "

We see on 2025 which OpenISA OpenPower low power chip will give life to new Open Hardware computers, we examine in detail which open hardware computers will be ready for 2025 based on these chips. It will be the first time that OpenPower OpenISA low power Chip will be produced, and what is more, it will be produced from other Silicon Companies different from IBM.
\nWe will see who are the GNU/Linux distros that support PPC64 and PPC64el and PowerPC architecture that runs on these computers and how you can join to experiment with it and push forward these architectures.

", + "track": { + "@color": "#c62ecc", + "#text": "Open Hardware" + }, + "category": "Open Hardware", + "type": "Open Hardware", + "track-url": "https://www.sfscon.it/tracks/open-hardware-track-2024/", + "persons": { + "person": { + "@id": "4289", + "@organization": "Power Progress Community", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2023/08/Roberto_Innocenti_64a00b190e0b564cc2dab0c666.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/www.powerprogress.org\\/\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/roberto-innocenti-2961069\\/\"}]", + "@bio": "\"Among the founders of the project Open Hardware PowerPC Notebook, presenter and ambassador of the project.\\r\\nPresident of the association Power Progress Community which deals with the promotion and dissemination of free software and open hardware.\\r\\nResponsible in humanist forums of the area \\u201cTechnology for improving the living conditions of mankind\\u201d.\\r\\nTech Leader - Solutions & Infrastructure Architect, Software Architect with Open Source tools, by profession.\"", + "@url": "https://www.sfscon.it/speakers/roberto-innocenti/", + "#text": "Roberto Innocenti" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b42a17dcc0de9fce26c8560c2422a768a1467", + "@unique_id": "2024day1event35", + "@bookmark": "1", + "@rating": "1", + "start": "13:20", + "duration": "00:15", + "title": "The SMART Box of AURA Project", + "url": "https://www.sfscon.it/talks/the-smart-box-of-aura-project/", + "language": null, + "description": "

AURA project centers on the development of “Green & Smart Urban Furniture,” a new generation of urban furniture that transcends traditional roles by incorporating eco-friendly and intelligent features. These urban elements are designed with bioabsorbent vegetation capable of mitigating atmospheric pollutants, making them environmentally sustainable. Furthermore, they are outfitted with advanced IoT sensors that monitor a range of environmental parameters, including climate data, urban pollution, and vehicular traffic.

\n

These smart urban furniture units not only establish an extensive urban monitoring network but also actively combat pollution through the sequestration and reduction of harmful substances via the integrated vegetation. The embedded IoT sensors provide innovative capabilities for tracking the impact of these elements on the surrounding urban environment, such as monitoring air pollution levels and assessing the effects of heat islands. Each furniture piece is equipped with a “smart box,” a hardware system constructed using low-cost commercial off-the-shelf (COTS) components. This system includes climate and environmental sensors, gas measurement devices, a processing unit, and a data transmission module. The accompanying software, developed from scratch, delivers localized information—such as CO2 sequestration, temperature, and humidity—and contributes to a comprehensive environmental monitoring network aimed at predictive analysis, including weather risks, heat wave alerts, and health risks associated with air pollution. The presentation will delve into the custom-developed software and its ability to meet the field-level requirements of the AURA Architecture, encompassing individual sensors, sensor nodes (smart-boxes within the furniture), and the broader network of these nodes. It will highlight the significant impact and benefits of utilizing free and open-source technologies throughout the development process. Key focus areas include the creation of drivers for individual sensors, with emphasis on the most representative examples, the development of software for sensor nodes—covering features like self-testing, over-the-air (OTA) updates, and MQTT communication—and the design of a dynamic web app for data presentation, leveraging JavaScript, Bootstrap, and a JSON Data Lake. This comprehensive approach underscores the importance of open technologies in accelerating innovation, ensuring flexibility, and delivering robust, scalable solutions for smart urban environments.

", + "track": { + "@color": "#c62ecc", + "#text": "Open Hardware" + }, + "category": "Open Hardware", + "type": "Open Hardware", + "track-url": "https://www.sfscon.it/tracks/open-hardware-track-2024/", + "persons": { + "person": { + "@id": "7224", + "@organization": "FOS Spa", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/09/Angelo_Serino-1.png", + "@socials": "[{\"linkedin\":\"linkedin.com\\/in\\/angelo-serino-b474252b9\"}]", + "@bio": "\"Angelo Serino is a Software Engineer from Benevento, with a strong passion for sustainable innovation and environmentally-oriented technological solutions. He combines this interest with the development of solutions for projects in various fields, thus dedicating himself to initiatives that integrate technological efficiency and sustainability.\\r\\n\\r\\nHis passion for sustainability was born during his years of study in London, where he lived and actively participated in University projects based on IoT Edge technologies and distributed systems aimed at sustainable goals. Over time, he has become increasingly enthusiastic about the open-source movement, recognizing its immense potential for fostering sustainability through the sharing and continuous improvement of solutions. Angelo sees open-source as a versatile tool and he is particularly passionate about how open-source solutions, from sensor libraries to firmware, enhance interoperability and flexibility, enabling the rapid deployment of custom IoT softwares.\\r\\n\\r\\nThese experiences not only fueled his desire to explore innovative solutions in different contexts but also sharpened his technical skills and strategic vision, aimed at creating intelligent and sustainable systems capable of responding in real-time to environmental needs and changes. He envisions a future where technology becomes an increasingly effective tool for improving quality of life and reducing environmental impact, thus contributing to a greener and more responsible world.\\r\\n\\r\\nFollowing this direction, Angelo contributed to the development of AURA, an initiative of \\\"Green & Smart Urban Furniture\\\" aligned with many of his ideas, integrating advanced technology and ecological solutions to enhance the quality of life.\"", + "@url": "https://www.sfscon.it/speakers/angelo-serino/", + "#text": "Angelo Serino" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b5ace988c558f6cdd917655e3b611ded426f7", + "@unique_id": "2024day1event39", + "@bookmark": "1", + "@rating": "1", + "start": "13:40", + "duration": "00:15", + "title": "Raspberry Pi and Node-RED: Open Source Tools for Local Automation and Industrial IoT applications", + "url": "https://www.sfscon.it/talks/raspberry-pi-and-node-red-open-source-tools-for-local-automation-and-industrial-iot-applications/", + "language": null, + "description": "

This talk will explore how Raspberry Pi and Node-RED enable robust solutions for automation and control systems in both industrial and local applications. Leveraging open-source technology, these platforms can handle a wide range of tasks, from reading sensor data and managing actuators, to controlling devices through industrial communication protocols such as Modbus, RS485 ascii RTU etc. Node-RED’s message-driven architecture simplifies the creation of control logic, even for complex operations, while Raspberry Pi serves as a powerful and cost-effective alternative to traditional PLCs and IPCs. The integration of these tools allows for seamless data processing, remote communication, and the development of HMI interfaces both user-friendly or more traditiconal SCADA-like, making these technologies ideal for creating IIoT-native solutions. This presentation will focus on the technical capabilities, showing how these platforms can empower engineers and developers to build flexible and scalable automation solutions.

", + "track": { + "@color": "#c62ecc", + "#text": "Open Hardware" + }, + "category": "Open Hardware", + "type": "Open Hardware", + "track-url": "https://www.sfscon.it/tracks/open-hardware-track-2024/", + "persons": { + "person": [ + { + "@id": "7256", + "@organization": "FOS spa", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/09/Federico_Boero_66f5770f7c97c66f5778f9b7fc.jpeg", + "@bio": "\"Federico Boero is Head of Engineering at Gruppo FOS, where he manages and coordinates the technical development of engineering services and R&D projects while actively participating in technical advancements. An electronic engineer with extensive experience in analog and digital circuit design, system design for sensing and automation, and IT platforms for data acquisition and integration, his current research interests focus on the Internet of Things, RF systems, and IoT platforms for industrial and biomedical applications.\"", + "@url": "https://www.sfscon.it/speakers/federico-boero-2/", + "#text": "Federico Boero" + }, + { + "@id": "7255", + "@organization": "Gruppo FOS", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/09/alberto-nicoletti.png", + "@bio": "\"I am a creative and passionate learner, I always strive to improve myself both professionally and personally. I enjoy reading as well as trying to write books, I tend to be discrete and reserved, but can easily open up in a friendly environment. I am a passionate about games, both as the end-user as well as on the programmer side. Languages are my forte, if not even my obsession, and I am always willing to improve my proficiency by practising them actively.\"", + "@url": "https://www.sfscon.it/speakers/alberto-nicoletti/", + "#text": "Alberto Nicoletti" + } + ] + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b763f000d0d45d034ef0e1d9ac5a02316d41f", + "@unique_id": "2024day1event76", + "@bookmark": "1", + "@rating": "1", + "start": "14:00", + "duration": "00:15", + "title": "Approaches to Object Detection: Edge-Based and AI-Based", + "url": "https://www.sfscon.it/talks/approaches-to-object-detection-edge-based-and-ai-based/", + "language": null, + "description": "

This presentation explains why we passed to the expert system based on edge-based object detection on traditional image analysis techniques to the AI-based, leveraging advanced machine learning. The first method uses parameters derived from image analysis tools, focusing on attributes such as shape, size, and color of objects, informed by preliminary tests and expert data. The machine learning method employs a sophisticated algorithm that dynamically learns and identifies objects in images. We used both approaches using diverse datasets and measured their accuracy and efficiency under various conditions. The aim of this presentation is to show the improvement obtained by using the AI-based system applied for real-time detection and classification, offering insights into their practical strengths and applications.

", + "track": { + "@color": "#c62ecc", + "#text": "Open Hardware" + }, + "category": "Open Hardware", + "type": "Open Hardware", + "track-url": "https://www.sfscon.it/tracks/open-hardware-track-2024/", + "persons": { + "person": [ + { + "@id": "4476", + "@organization": "Gruppo FOS", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2019/08/Giovanni_Giannotta-1.png", + "@socials": "[{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/giannottagiovanni\\/\"}]", + "@bio": "\"He is an Electronics Engineer and ICT professional with over 10 Years of experience in managing and designing in the Engineering and R&D department of the Gruppo FOS. He managed various R&D projects, WEB projects and software projects for energy efficiency and intelligent monitoring systems. He is currently the Bozen office responsible and R&D manager of the Agritech technologies of the Gruppo FOS.\"", + "@url": "https://www.sfscon.it/speakers/giovanni-giannotta/", + "#text": "Giovanni Giannotta" + }, + { + "@id": "7231", + "@organization": "Gruppo FOS", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/09/Orneda_Lecini-1.png", + "@socials": "[{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/ornedalecini13111999\\/\"}]", + "@bio": "\"My curriculum includes courses such as Programming Languages, Database Systems, Analysis of Algorithms, Web Technologies, Software Engineering, and Networking. These have provided me with a strong foundation in Computer Science. I have a thorough understanding of computer hardware and software, as well as a solid background in mathematics, analysis, and problem-solving. I am skilled in several programming and web development languages and have considerable experience working on various projects. At the moment, I am working at Gruppo FOS as a software developer.\"", + "@url": "https://www.sfscon.it/speakers/orneda-lecini/", + "#text": "Orneda Lecini" + } + ] + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b8d4248fc147ccd31f546e7ecbdde02539ba7", + "@unique_id": "2024day1event67", + "@bookmark": "1", + "@rating": "1", + "start": "14:20", + "duration": "00:15", + "title": "Proxmox Backup Server: Backup for your Datacenter", + "url": "https://www.sfscon.it/talks/proxmox-backup-server-backup-for-your-datacenter/", + "language": null, + "description": "

Backups are an essential component of every IT infrastructure, from small scale businesses up to large datacenters, spanning multiple locations. With the Proxmox Backup Server a fully Free and Open Source backup solution is available, being highly integrated with the Proxmox Virtual Environment.
\nThis talk will present a short overview of the capabilites provided by Proxmox Backup Server, giving some insights into new and recently added features. Further, by peeking into the inner workings and the software design will show how fast, space efficient and reliable backups are created and how data consistency and integrity are guaranteed. Topics covered will include backups for Virtual Machines and Linux Containers running on top of Proxmox Virtual Environment as well as host level backups.

", + "track": { + "@color": "#aa2727", + "#text": "DevOps" + }, + "category": "DevOps", + "type": "DevOps", + "track-url": "https://www.sfscon.it/tracks/devops-track-2024/", + "persons": { + "person": { + "@id": "7135", + "@organization": "Proxmox Server Solutions GmbH", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/07/Christian_Ebner_66911d40d870766911f0d553d3.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/www.proxmox.com\"}]", + "@bio": "\"Christian Ebner is since 2019 a Linux Software Developer at Proxmox Server Solutions GmbH, focusing on development and implementation of backup technologies. After finishing his PhD in Physics at the University of Vienna and moving back to Bolzano, he gained additional experiences as researcher at the University of Bolzano and as software developer at teamblau Gmbh, before joining Proxmox again in 2023.\"", + "@url": "https://www.sfscon.it/speakers/christian-ebner/", + "#text": "Christian Ebner" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59ba425b268e4e4e120014f50bb1250bfd11260", + "@unique_id": "2024day1event51", + "@bookmark": "1", + "@rating": "1", + "start": "14:40", + "duration": "00:15", + "title": "Cloud Costs with ClickHouse and OpenCost", + "url": "https://www.sfscon.it/talks/cloud-costs-with-clickhouse-and-opencost/", + "language": null, + "description": "

Managing costs and billing across numerous Cloud-managed Kubernetes clusters presents significant challenges. In this talk, we’ll explore these challenges and discuss solutions using ClickHouse and OpenCost. Leveraging ClickHouse’s capabilities, we’ll demonstrate how it efficiently imports diverse Cloud billing data streams. Additionally, we’ll delve into how OpenCost addresses the complexities of real-time cost management within a multitenant architecture. Join us to uncover practical insights into optimizing cloud costs effectively.

", + "track": { + "@color": "#aa2727", + "#text": "DevOps" + }, + "category": "DevOps", + "type": "DevOps", + "track-url": "https://www.sfscon.it/tracks/devops-track-2024/", + "persons": { + "person": { + "@id": "7126", + "@organization": "Altinity", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/07/Denys_Kondtratenko_6687da7a049106687db7782380.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/denisok.github.io\\/\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/kondratenko\\/\"}]", + "@bio": "\"Denys Kondratenko is an Engineering Manager for Cloud at Altinity, where he serves as an architect specializing in platform development. With previous roles at Percona, SUSE, and Seagate, Denys brings a wealth of experience in databases and distributed storage. His past engagements include leading initiatives in monitoring and DBaaS at Percona, contributing to Ceph development at SUSE, and working on Luster at Seagate. A passionate Linux enthusiast, Denys has a longstanding commitment to open source projects, actively contributing to initiatives like openSUSEway. Additionally, he has been running full Wayland for many years, demonstrating his deep involvement in the Linux ecosystem.\"", + "@url": "https://www.sfscon.it/speakers/denys-kondratenko/", + "#text": "Denys Kondratenko" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59bba7fd51d5ee15f404c2f4f7863bebcde1fac", + "@unique_id": "2024day1event55", + "@bookmark": "1", + "@rating": "1", + "start": "15:00", + "duration": "00:15", + "title": "Ansible", + "url": "https://www.sfscon.it/talks/ansible/", + "language": null, + "abstract": "Lazy Engineer's Best Friend!", + "subtitle": "Lazy Engineer's Best Friend!", + "description": "

For a software engineer DRY is not only a washing machine progam, but it represents a deeply-held mantra: Don’t Repeat Yourself.

\n

To avoid repetitive manual work, automation tools like Ansible enable engineers to quickly configure infrastructure and easily deploy applications.

\n

In this talk, we will explore the key concepts and benefits of Ansible for configuration management, deployment and orchestration of remote devices. We will start with an overview of Ansible’s utility, how it works, and common use cases. We will see how YAML files describe configurations and playbooks define automated tasks and processes.

\n

Practical examples will show Ansible automation in action, including a quick introduction to initializing and keeping your operating system up to date by automating the installation and maintenance of system tools. We will also introduce the concept of dotfiles for configuration.

\n

What are you waiting for? Learn how to spend 30 minutes automating 5-second tasks with Ansible! (It’ll save you time in the long run, I promise!)

", + "track": { + "@color": "#aa2727", + "#text": "DevOps" + }, + "category": "DevOps", + "type": "DevOps", + "track-url": "https://www.sfscon.it/tracks/devops-track-2024/", + "persons": { + "person": { + "@id": "7083", + "@organization": "Amazon", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Marco_Lampis_66818907f075c66819d5261cf0.jpeg", + "@bio": "\"Born with a keyboard in hand, I've always been a tech enthusiast and a passionate all-rounder in the field of computer science. I'm actually working as a Software Engineer intern in Amazon Ireland and I'm studying Software Engineering at the Polytechnic University of Turin. I'm a strong advocate for free software as well as open source. In my free time, I brag to my friends about knowing how to exit Vim.\"", + "@url": "https://www.sfscon.it/speakers/marco-lampis/", + "#text": "Marco Lampis" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59bd0960575f49ea42034e2b332dd022deefe8c", + "@bookmark": "1", + "@rating": "1", + "start": "15:20", + "duration": "00:15", + "title": "Efficient Log Management in Large-Scale Kubernetes Clusters", + "url": null, + "language": null, + "description": "

Large Kubernetes clusters can generate significant volumes of logs, especially when housing thousands of running pods. This may demand substantial CPU, RAM, disk IO, and disk space for storing and querying large log volumes. In this talk, we will look into different strategies of storing those logs in ElasticSearch, Grafana Loki and VictoriaLogs and examine how we can save 10x or more on infrastructure costs.

\n

This talk presents real-world examples of efficient log management in large-scale Kubernetes clusters. It includes setup demonstrations, numerical data, and graphical representations from reproducible benchmarks.

", + "track": { + "@color": "#aa2727", + "#text": "DevOps" + }, + "category": "DevOps", + "type": "DevOps", + "track-url": "https://www.sfscon.it/tracks/devops-track-2024/", + "persons": { + "person": { + "@id": "7029", + "@organization": "VictoriaMetrics", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Aliaksandr_Valialkin_667e8bce024c4667e8d2039828.jpeg", + "@bio": "\"Aliaksandr is a co-founder and the principal architect of VictoriaMetrics. He is also a well-known author of the popular performance-oriented libraries: fasthttp, fastcache and quicktemplate. Prior to VictoriaMetrics, Aliaksandr held CTO and Architect roles with adtech companies serving high volumes of traffic. He holds a Master\\u2019s Degree in Computer Software Engineering. He decided to found VictoriaMetrics after experiencing the shortcomings of all available time series databases and monitoring solutions.\"", + "@url": "https://www.sfscon.it/?post_type=speaker&p=7029", + "#text": "Aliaksandr Valialkin" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59be665eca0dda5d40cf62b4a73c50deab2520c", + "@unique_id": "2024day1event43", + "@bookmark": "1", + "@rating": "1", + "start": "15:40", + "duration": "00:15", + "title": "KubeVirt", + "url": "https://www.sfscon.it/talks/kubevirt/", + "language": null, + "abstract": "making running virtual machines in a kubernetes cluster a mainstream activity", + "subtitle": "making running virtual machines in a kubernetes cluster a mainstream activity", + "description": "

KubeVirt is a Kubernetes addon for running virtual machines inside a Kubernetes cluster.

\n

Currently being in CNCF incubating state, it has a wide range of adopters by both vendors and end users, such as NVidia, Suse, ARM and Red Hat to name a few.

\n

This talk gives an overview of what is currently possible with KubeVirt on your cluster and what its future may look like. We will describe some of the features it supports, i.e. VM Import, LiveMigration, Snapshot/Restore and Monitoring.

\n

At the end of the talk attendees will have an idea of how they can use it to better integrate existing virtual machines with containers in their existing application landscape.

", + "track": { + "@color": "#aa2727", + "#text": "DevOps" + }, + "category": "DevOps", + "type": "DevOps", + "track-url": "https://www.sfscon.it/tracks/devops-track-2024/", + "persons": { + "person": { + "@id": "6251", + "@organization": "Red Hat GmbH", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2023/06/Daniel_Hiller_64896f4e6bd236489806c616f4.jpeg", + "@bio": "\"Daniel Hiller is a software engineer with more than 20 years of work experience. He strives to create software that is useful for people so they can do stuff that matters.\\r\\nHe\\u2019s currently part of the KubeVirt community. KubeVirt is a Kubernetes addon to run virtual machines on Kubernetes clusters. There he maintains, improves and automates CI and testing processes for the KubeVirt organization with Prow on Kubernetes.\"", + "@url": "https://www.sfscon.it/speakers/daniel-hiller/", + "#text": "Daniel Hiller" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59bfc6f719f3d60a65ab6db10db8ef7ae393939", + "@unique_id": "2024day1event47", + "@bookmark": "1", + "@rating": "1", + "start": "16:00", + "duration": "00:15", + "title": "Why free backup software matters", + "url": "https://www.sfscon.it/talks/why-free-backup-software-matters/", + "language": null, + "description": "

It is 2024, we’re in the middle of the cloud-era.
\nAlmost every service you desire is available in “the cloud”.
\nAt least some of your company’s critical data is stored at some cloud provider.
\nDoes your provider actually keep backups?
\nCan you live with their Recovery Time Objective (RTO)?
\nDo you believe they will actually meet the RTO?
\nMaybe you have another copy of your data?
\nIn a format that you can actually access and read?

", + "track": { + "@color": "#aa2727", + "#text": "DevOps" + }, + "category": "DevOps", + "type": "DevOps", + "track-url": "https://www.sfscon.it/tracks/devops-track-2024/", + "persons": { + "person": { + "@id": "7065", + "@organization": "Bareos GmbH &amp; Co. KG", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Andreas_Rogge_668077ffa0c2e66807bb40be2e.jpeg", + "@socials": "[{\"mastodon\":\"https:\\/\\/social.cologne\\/@arogge\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/andreas-rogge-6847bb249\\/\"}]", + "@bio": "\"I started using Linux in 1995 and still learn a new thing or two every day. Starting my carreer at a web company, I did a lot of webserver, database and networking things. After that I got into managed services and a lot of Linux consulting that provided insight into a lot of different companies and how they use free software. Nowadays I'm a developer at Bareos GmbH & Co. KG where I improve our software and provide technical support to customers.\"", + "@url": "https://www.sfscon.it/speakers/andreas-rogge/", + "#text": "Andreas Rogge" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c126dcdfc0428c8122c5d28e43e323648206a", + "@unique_id": "2024day1event71", + "@bookmark": "1", + "@rating": "1", + "start": "16:20", + "duration": "00:15", + "title": "Demystifying JWTs", + "url": "https://www.sfscon.it/talks/demystifying-jwts/", + "language": null, + "description": "

JSON Web Tokens (JWTs) have become a popular method for securely transmitting information between two parties. They are widely used in modern web applications for authentication and data exchange. However, their inner workings and security implications can be complex and often misunderstood by the developers.

\n

In this talk, we aim to demystify JWTs by exploring their structure, how they work, and the cryptographic mechanisms that ensure their integrity and confidentiality. We will discuss the components of a JWT, including headers, payloads, and signatures, and illustrate how they combine to form a token.

\n

Furthermore, we will dive into best practices for JWT usage, common pitfalls to avoid, and security considerations such as token expiration, payload size, and the choice of cryptographic algorithms. Finally, we will explore how a WebSocket connection can be secured with JWTs. Security is increasingly an overlooked necessity while utilizing a protocol that does not support authentication by default.

\n

By the end of the session, attendees will have a clear understanding of how JWTs operate, their advantages over traditional session-based authentication, and how to implement them securely in their own applications.

", + "track": { + "@color": "#d31d4e", + "#text": "Cybersecurity" + }, + "category": "Cybersecurity", + "type": "Cybersecurity", + "track-url": "https://www.sfscon.it/tracks/cybersecurity-track-2024/", + "persons": { + "person": { + "@id": "7114", + "@organization": "Microsoft", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/07/Dominika_Bobik_6682320cef6546682337f0175b.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/dominikabobik.com\\/\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/dominika-bobik\\/\"}]", + "@bio": "\"Dominika Bobik is a software engineer based in Seattle, Washington in the USA. She was born and raised in Poland and moved to the USA to pursue a Bachelor's degree in Computer Engineering. Upon graduation she started a full time position at Microsoft. She is working on Azure platform. Her focus lies all things cloud native. She is passionate about systems architecture, design and security. In her free time she enjoys scuba diving and alpine skiing.\"", + "@url": "https://www.sfscon.it/speakers/dominika-bobik/", + "#text": "Dominika Bobik" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c280f76e7ad42ec151a5330a249b18fb20353", + "@unique_id": "2024day1event75", + "@bookmark": "1", + "@rating": "1", + "start": "16:40", + "duration": "00:15", + "title": "Containerization and micro-services in real life change security and vulnerability management. Let’s Discuss.", + "url": "https://www.sfscon.it/talks/containerization-and-micro-services-in-real-life-chandge-security-and-vulnerability-management/", + "language": null, + "abstract": "Security Configuration for Containerization and micro-services applications", + "subtitle": "Security Configuration for Containerization and micro-services applications", + "description": "

Containerization and micro-services change the way software is deployed and used in production contexts. Re-evaluation of the criteria for secure development and above all for secure configuration of these solutions. It would probably be appropriate to implement security already during the creation of the solution itself.

", + "track": { + "@color": "#d31d4e", + "#text": "Cybersecurity" + }, + "category": "Cybersecurity", + "type": "Cybersecurity", + "track-url": "https://www.sfscon.it/tracks/cybersecurity-track-2024/", + "persons": { + "person": { + "@id": "5815", + "@organization": "Exprivia S.p.A.", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2022/09/carlo-falciola.jpg", + "@socials": "[{\"twitter\":\"https:\\/\\/twitter.com\\/CarloFalciola\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/carlo-falciola-6aa18a\"}]", + "@bio": "\"I'm Cybersecurity Delivery Services Manager for the Cybersecurity unit of Exprivia S.p.A.. my team is focused in Cybersecurity Governance and Prevention solutions ranging from Assessments, compliance, Identity Security, Attack Surface management, Data Protection.\"", + "@url": "https://www.sfscon.it/speakers/carlo-falciola/", + "#text": "Carlo Falciola" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c3f17232fb0e304a86aac50786d41376b9b15", + "@unique_id": "2024day1event79", + "@bookmark": "1", + "@rating": "1", + "start": "17:00", + "duration": "00:15", + "title": "Cyber Risk Management: let’s try to manage it with open source and free software", + "url": "https://www.sfscon.it/talks/cyber-risk-management-lets-try-to-manage-it-with-open-source-and-free-software/", + "language": null, + "abstract": "Open source solutions in the cybersecurity landscape, oriented to manage processes", + "subtitle": "Open source solutions in the cybersecurity landscape, oriented to manage processes", + "description": "

Cyber Risk Management is what you need to manage to ensure your business can operate being aware of threats, vulnerabilities, and to ensure that your business transactions and data are confidential, intact, available.

\n

Let’s discuss and explore solutions and resources coming from open source and free software that can help organization to manage their cybersecurity programs, with an approach that looks at sharing knowledge, adopt tools and pay attention to the budget.

", + "track": { + "@color": "#d31d4e", + "#text": "Cybersecurity" + }, + "category": "Cybersecurity", + "type": "Cybersecurity", + "track-url": "https://www.sfscon.it/tracks/cybersecurity-track-2024/", + "persons": { + "person": { + "@id": "7069", + "@organization": "Exprivia SpA", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Graziano_Specchierla_66811eb4643fe66812b31e0853.jpeg", + "@socials": "[{\"mastodon\":\"https:\\/\\/mastodon.uno\\/@ilgraz\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/grazianospecchierla\\/\"},{\"twitter\":\"https:\\/\\/twitter.com\\/ilgraz\"}]", + "@bio": "\"I am a security consultant in the areas of \\u200b\\u200bIT security and operations, and often I design and implement the project I started consulting on. I'm involved starting from the cybersecurity assessment and the establishment of cybersecurity operations in the customer\\r\\n\\r\\nI worked in a large enterprise service company of IT sector for many years , and I held various roles, so I have many years of experience not only in cybersecurity but also in design and implementation of systems for operations, in many industry sectors.\\r\\n\\r\\nI'm curious and the propensity to learn have always guided my professional growth, made up of skills but, above all, of experience in the field with customers.\"", + "@url": "https://www.sfscon.it/speakers/graziano-specchierla/", + "#text": "Graziano Specchierla" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c5708fd5132fb47f2da9e2bd1a0fe1412693b", + "@unique_id": "2024day1event83", + "@bookmark": "1", + "@rating": "1", + "start": "17:20", + "duration": "00:15", + "title": "IT Security – Don’t let Open Source Software become the next menace", + "url": "https://www.sfscon.it/talks/it-security-dont-let-open-source-software-become-the-next-menace/", + "language": null, + "abstract": "Criminals and Govs are levereging Open Source tools, libraries and software to break into organizations. Let's stop 'em.", + "subtitle": "Criminals and Govs are levereging Open Source tools, libraries and software to break into organizations. Let's stop 'em.", + "description": "

There is a prevalent myth that open source software is inherently secure. However, this is not true. Open source software is susceptible to vulnerabilities just like any other software. Moreover, the fact that anyone can review the code does not guarantee that the right people will do so. Open source software faces two important threats than not everybody are aware of:

\n

Vulnerabilities: Open source developers need to understand and communicate the security posture of their projects to users. They must adopt robust security practices. The Log4j incident in 2021, which led to the Log4Shell vulnerability, triggered a catastrophic wave of attacks due to inadequate support for the logging framework and its critical role in company procedures.

\n

Dev teams infiltration: Criminal organizations and government hacking teams are executing highly sophisticated social engineering operations to infiltrate understaffed open source projects. Their goal is to compromise development teams and insert backdoors into the software. The most recent attack on a significant project was discovered in April 2024.

\n

Objective of the Talk: Inform the community about these two security scenarios and demonstrate how to effectively address them.

", + "track": { + "@color": "#d31d4e", + "#text": "Cybersecurity" + }, + "category": "Cybersecurity", + "type": "Cybersecurity", + "track-url": "https://www.sfscon.it/tracks/cybersecurity-track-2024/", + "persons": { + "person": { + "@id": "6986", + "@organization": "Security Info", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Giancarlo_Calzetta_6676b1e5d305e6676bbc1c23ff.jpeg", + "@bio": "\"Born in 1971 (yes, I'm \\\"experienced\\\")\\r\\nPassionate in Tech since youngest age, I studied information technology, worked as a videogame programmer while studying and the started working as a journalist at 19.\\r\\nI got a big list of publications I worked for as contributor, editor and director in both consumer and B2B area.\\r\\nI actually work as\\r\\n\\r\\nDirector of Tom's Hardware (tech enthusiats site) B2B Channels,\\r\\nDirector of SecurityInfo (vertical website dedicated to IT Security)\\r\\nContributor for Il Sole 24 Ore (Most inlfuent italian financial newspaper) for technology topics.\\r\\nI'm also a trainer in IT Security topics (mainly B2B) and Digital transformation consultant.\\r\\n\\r\\nAs an hobby, with a friend I run a remote astronomical observatory in Canary Islands (Fuerteventura), available for free for school's projects.\\r\\n\\r\\nJournalist since 2000.\"", + "@url": "https://www.sfscon.it/speakers/giancarlo-calzetta/", + "#text": "Giancarlo Calzetta" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c6f43d5fb277af554585398edac26957b61aa", + "@unique_id": "2024day1event87", + "@bookmark": "1", + "@rating": "1", + "start": "17:40", + "duration": "00:15", + "title": "Biting the Apple", + "url": "https://www.sfscon.it/talks/biting-the-apple/", + "language": null, + "abstract": "MacBook Forensic with Fuji", + "subtitle": "MacBook Forensic with Fuji", + "description": "

Description: Fuji is a free software, licensed under GPL v3, that leverages Apple Software Restore (ASR) and Rsync to create forensic images of macOS systems. It operates on logged-in computers to efficiently capture disk images while maintaining data integrity.

\n

Bypassing encryption on Apple silicon processors presents significant challenges due to their advanced hardware encryption mechanisms and secure enclave protections. These processors employ complex security protocols that safeguard data at a hardware level, making unauthorized access and decryption extremely difficult. Without proper authentication or specific exploits, forensic imaging on these devices requires substantial technical expertise and often necessitates the cooperation of the device owner.

\n

We’ll see how to acquire forensically MacBook data with free software

", + "track": { + "@color": "#d31d4e", + "#text": "Cybersecurity" + }, + "category": "Cybersecurity", + "type": "Cybersecurity", + "track-url": "https://www.sfscon.it/tracks/cybersecurity-track-2024/", + "persons": { + "person": { + "@id": "4416", + "@organization": "D.S.A.", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2019/08/Alessandro_Farina.jpg", + "@bio": "\"Happy Father (13 year experience granted)\\r\\nAddicted to volunteering in CyberSecurity Awareness, HackInBo Main Staff member, RomHack Main Staff Member, CyberSaiyan.\\r\\nInformation Technology Expert \\u2013 Senior Project Manager, Working Partner of D.S.A. S.r.l.\\r\\nLinux and Free software early and happy adopter and developer.\\r\\nI\\u2019ve tried to spread the free software philosophy in every place where I\\u2019ve worked, sometimes achieving big successes.\\r\\nI\\u2019m a digital forensics expert, I work with Ministry of Justice Office of Public Prosecutor an almost all Italian Law Enforcement Agencies \\u2013 Private companies (names covered by NDA)\\r\\nI give support for IT security, Incident response e Cybercrime to medium to big public and private companies.\\r\\nI\\u2019ve been technical advisor for incident response and Computer Forensics with various Law firms. Law Enforcements assistant for inspections and searches.\"", + "@url": "https://www.sfscon.it/speakers/alessandro-farina/", + "#text": "Alessandro Farina" + } + }, + "bookmark": "1", + "rating": "1" + } + ] + }, + { + "@name": "Seminar 4", + "event": [ + { + "@id": "670d1b59a96246496fc52ef52a192483e2d3036f23e66", + "@unique_id": "2024day1event8", + "@bookmark": "1", + "@rating": "1", + "start": "11:00", + "duration": "00:15", + "title": "Apisense – Easily monitor and track your REST-API data quality", + "url": "https://www.sfscon.it/talks/apisense-easily-monitor-and-track-your-rest-api-data-quality/", + "language": null, + "abstract": "An easy and modular solution to faulty REST-API data developed in collaboration with the Open Data Hub", + "subtitle": "An easy and modular solution to faulty REST-API data developed in collaboration with the Open Data Hub", + "description": "

Ever had the issue of fetching invalid or faulty data from a REST-API and noticing only later, when everything broke down? Not anymore!

\n

Apisense was developed in collaboration with the Open Data Hub to be an easy and modular tool to fit every need possible used to ensure and monitor the availability, quality and correctness of data provided via REST-APIs.

\n

Sounds too good to be true? Tune in to find out how Apisense can help both producers and consumers of data to be aware of the quality and reliability of the data they provide/consume.

", + "track": { + "@color": "#c48c2d", + "#text": "Developers" + }, + "category": "Developers", + "type": "Developers", + "track-url": "https://www.sfscon.it/tracks/developers-track-2024/", + "persons": { + "person": [ + { + "@id": "6934", + "@organization": "Technical University of Munich", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Aurelio_Buonomo_66617a90ba47366617fc55df8e.jpeg", + "@bio": "\"Aurelio Buonomo was introduced to technology at a very young age. Due to his increasing passion he chose to attend the school \\\"TFO Max Valier\\\" in Bozen. There he was introduced to the world of free software by his very passionate teachers.\\r\\nAfter graduating high school, he enrolled at the Technical University of Munich where he currently is studying computer science.\\r\\nIn his free time, he always tinkers around with projects, keeping them free to use for everyone and striving to grow a project to be something big.\"", + "@url": "https://www.sfscon.it/speakers/aurelio-buonomo/", + "#text": "Aurelio Buonomo" + }, + { + "@id": "6944", + "@organization": "Technical University of Munich", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/09/Christian_Zanotti_6669a623e547e66ea8c8ebf608.jpeg", + "@bio": "\"After discovering an ever-growing interest for technology, Christian Zanotti decided to enrol in the school "TFO Max Valier" in Bozen. Attending the school for the following 5 years his passion for informatics grew steadily. Still hungry for knowledge after graduation he decided to enrol at the Technical University of Munich where he is currently studying computer science.\"", + "@url": "https://www.sfscon.it/speakers/christian-zanotti/", + "#text": "Christian Zanotti" + } + ] + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59aad45eff5d05607a8980057fb4c223254cace", + "@unique_id": "2024day1event12", + "@bookmark": "1", + "@rating": "1", + "start": "11:20", + "duration": "00:15", + "title": "MongoDB Alternatives: Is There A Need For A New Open Standard?", + "url": "https://www.sfscon.it/talks/mongodb-alternatives-is-there-a-need-for-a-new-open-standard/", + "language": null, + "description": "

This talk takes you on a journey through the history of SQL as an Open Standard, emphasizing its pivotal role in shaping the database industry. It also highlights the pressing need for a similar standard in MongoDB-compatible open databases. The presentation introduces FerretDB as a groundbreaking solution bridging MongoDB and open databases, ensuring seamless transitions without extensive application-level changes. This talk illuminates the importance of open standards and presents a path forward for enhanced compatibility and collaboration within the open-source database community.

", + "track": { + "@color": "#c48c2d", + "#text": "Developers" + }, + "category": "Developers", + "type": "Developers", + "track-url": "https://www.sfscon.it/tracks/developers-track-2024/", + "persons": { + "person": { + "@id": "7018", + "@organization": "FerretDB", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Peter_Farkas_667d822b61a5b667e59ca45dc2.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/www.ferretdb.io\\/\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/farkasp\\/\"},{\"twitter\":\"https:\\/\\/twitter.com\\/farkasp\"}]", + "@bio": "\"Peter has been building sustainable open-source projects and businesses for the last 14 years. He currently serves as the Co-Founder and CEO of FerretDB, the truly Open Source MongoDB Alternative, which helps users to use MongoDB drivers seamlessly with PostgreSQL as the database backend.\\r\\nPeter believes that open source is as sustainable in terms of product and revenue growth as proprietary solutions, and more and more entrepreneurs will work on open source projects.\"", + "@url": "https://www.sfscon.it/speakers/peter-farkas/", + "#text": "Peter Farkas" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59ac322670bd19b0441a1063b51c44490a7d5c6", + "@unique_id": "2024day1event16", + "@bookmark": "1", + "@rating": "1", + "start": "11:40", + "duration": "00:15", + "title": "MariaDB Vector: Why your AI data should be in an RDBMS", + "url": "https://www.sfscon.it/talks/mariadb-vector-why-your-ai-data-should-be-in-an-rdbms/", + "language": null, + "abstract": "Databases and AI: How to supercharge application development with MariaDB vector", + "subtitle": "Databases and AI: How to supercharge application development with MariaDB vector", + "description": "

As AI apps become mainstream, conventional IT wisdoms apply. AI apps must be no monoliths, but need to be logged, audited, and overall well integrated into normal IT. This means all AI data – vectors, input, output – is best stored in a normal RDBMS. Better still: In an open source database with performance, stability, and ease of use. Here is an overview of the AI opportunities, possibilities, methodologies, and features in MariaDB Server.

", + "track": { + "@color": "#c48c2d", + "#text": "Developers" + }, + "category": "Developers", + "type": "Developers", + "track-url": "https://www.sfscon.it/tracks/developers-track-2024/", + "persons": { + "person": { + "@id": "7035", + "@organization": "MariaDB Foundation", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Kaj_Arno_667e9bad69d51667f1ac972650.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/mariadb.org\"},{\"facebook\":\"https:\\/\\/www.facebook.com\\/mariadb.org\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/company\\/mariadb-foundation\\/\"},{\"twitter\":\"https:\\/\\/x.com\\/mariadb_org\"}]", + "@bio": "\"Kaj Arn\\u00f6 is a software industry generalist and currently the CEO of the MariaDB Foundation. MariaDB is the world's most popular Open Source database, of which Arn\\u00f6 has a long experience as the former Vice President of the MySQL Community at MySQL AB, Sun Microsystems and Oracle Corporation, and founder of MariaDB Corporation Ab. Arn\\u00f6 is also a prolific columnist contributing to several newspapers in Finland.\"", + "@url": "https://www.sfscon.it/speakers/kaj-arno/", + "#text": "Kaj Arnö" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59add1d2c660a48f92fa55cae9d79acfd0d21ac", + "@unique_id": "2024day1event20", + "@bookmark": "1", + "@rating": "1", + "start": "12:00", + "duration": "00:15", + "title": "1, 2, 3, Doc Kit!", + "url": "https://www.sfscon.it/talks/1-2-3-doc-kit/", + "language": null, + "abstract": "Automate the creation of software documentation", + "subtitle": "Automate the creation of software documentation", + "description": "

Doc Kit is an open source command line tool that automates the creation of software documentation and release notes.
\nIt can be used in conjunction with DocBook Authoring and Publishing Suite (DAPS) for quickly preparing the skeleton of professional looking software documentation.

\n

Doc Kit has been designed for initialising SUSE or openSUSE documentation repositories but in a few steps it can be re-used for other projects too.
\nThe tool consists of two parts:
\n1. a command-line tool called doc-kit that can download documentation boilerplate files
\n2. a repository of documentation boilerplate files, such as the SUSE/openSUSE book preface and entity files.

\n

The presentation will show how to use Doc Kit and how to customise the provided templates for creating a brand new documentation or release notes projects.

", + "track": { + "@color": "#c48c2d", + "#text": "Developers" + }, + "category": "Developers", + "type": "Developers", + "track-url": "https://www.sfscon.it/tracks/developers-track-2024/", + "persons": { + "person": { + "@id": "4324", + "@organization": "SUSE", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2018/10/Marina_Latini.png", + "@bio": "\"Marina Latini studied Computer Science at the University of Perugia, and is a free software advocate since 2007, promoting free software and open standards. In 2010, she was one of the first Italian members of the LibreOffice community and from 2016 until February 2020 she served as board member of The Document Foundation. From September 2020 she is a member of the Membership Committee of The Document Foundation. She has also been an active member of the Fedora Project from 2009 to 2013.\\r\\nMarina co-founded Associazione LibreItalia and has been involved in several events, migrations and training related to LibreOffice. She worked previously at Studio Storti and CIB at migrations and trainings to LibreOffice for the Italian Public Administrations and as a senior migrations and deployments engineer.\\r\\nSince 2020, Marina works at SUSE as a Software Release Engineer.\"", + "@url": "https://www.sfscon.it/speakers/marina-latini/", + "#text": "Marina Latini" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59afa843410334595ae50dbedaebc341dc52915", + "@unique_id": "2024day1event24", + "@bookmark": "1", + "@rating": "1", + "start": "12:20", + "duration": "00:15", + "title": "codEEmoji – Making code more informative with emojis", + "url": "https://www.sfscon.it/talks/codeemoji-making-code-more-informative-with-emojis/", + "language": null, + "description": "

This presentation focuses on the open-source project codEEmoji, an IDE plugin that adds additional information to the code through emojis. The talk starts by discussing the benefits of this approach compared to other ways to present information for the developer in IDEs. It follows by presenting the plugin and its main functionalities, which go from pointing out bad practices in method and variable naming to presenting modifiers and method characteristics in their usage. Next, it is presented how the plugin structure was designed to receive new contributions. The talk finishes by presenting some challenges and future features.

\n

https://github.com/codeemoji/codeemoji-plugin

\n

https://plugins.jetbrains.com/plugin/22416-codeemoji

", + "track": { + "@color": "#c48c2d", + "#text": "Developers" + }, + "category": "Developers", + "type": "Developers", + "track-url": "https://www.sfscon.it/tracks/developers-track-2024/", + "persons": { + "person": { + "@id": "5312", + "@organization": "Free University of Bozen-Bolzano", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/form-speakers/eduardo-guerra-7cfbcd8ccafbe709f6f4c90e65942e3d.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/www.unibz.it\\/it\\/faculties\\/computer-science\\/academic-staff\\/person\\/43879-eduardo-martins-guerra\"},{\"facebook\":\"https:\\/\\/www.facebook.com\\/profile.php?id=1639054168\"},{\"twitter\":\"https:\\/\\/twitter.com\\/emguerra\"}]", + "@bio": "\"Martins, Eduardo is a Researcher at the Free University of Bozen-Bolzano, Italy. The focus of Eduardo Guerra\\u2019s research can be defined as \\u201cfind better ways to develop software,\\u201d which can include programming approaches and processes to be used by the development team. He considers the principles of Agile Software Development the core guidance of his research since they share the goal to improve software quality, optimize development time, and increase software adaptability. Test-driven development (TDD) was the core of several works that focused on test code refactoring, application of TDD for specific kinds of software, and teaching and evaluating the technique. Also, in the scope of programming techniques, the usage of metadata and code annotations were the focus of several works that aimed to study them as an alternative to make the software more adaptable and improve the code quality.\"", + "@url": "https://www.sfscon.it/speakers/eduardo-guerra/", + "#text": "Eduardo Guerra" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b143ef85c83c18d03a3582a5673c4d9ed008e", + "@unique_id": "2024day1event27", + "@bookmark": "1", + "@rating": "1", + "start": "12:40", + "duration": "00:15", + "title": "Can Test Driven Development be speeded up with Generative AI?", + "url": "https://www.sfscon.it/talks/can-test-driven-development-be-speeded-up-with-generative-ai/", + "language": null, + "description": "

Generative AI tools, like ChatGPT, have shown remarkable capabilities in natural language processing. It is logical to explore their potential in programming, yet the quality of generated code raises concerns. Test-Driven Development (TDD) offers a promising approach to address these concerns. In this talk, we will explore how developers can effectively collaborate with generative AI tools to enhance TDD practices, ensuring higher code quality and streamlined development processes. To this aim, we will present two interaction patterns between a human and an AI.

", + "track": { + "@color": "#c48c2d", + "#text": "Developers" + }, + "category": "Developers", + "type": "Developers", + "track-url": "https://www.sfscon.it/tracks/developers-track-2024/", + "persons": { + "person": [ + { + "@id": "6365", + "@organization": "Free University of Bozen-Bolzano", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/05/Moritz_mock_649d8a99013416645d9ddae551.jpeg", + "@socials": "[{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/moritz-mock\\/\"},{\"twitter\":\"https:\\/\\/twitter.com\\/moritz_mock\"}]", + "@bio": "\"Moritz Mock is a PhD student in Advanced-Systems Engineering (ASE) at the Free University of Bozen-Bolzano. He holds a Master of Science in Software Engineering for Information Systems from the Free University of Bozen-Bolzano. His main research interest includes mining open-source projects to detect vulnerabilities utilizing static and machine-learning approaches. He is currently working with Prof. Barbara Russo's research group.\"", + "@url": "https://www.sfscon.it/speakers/moritz-mock/", + "#text": "Moritz Mock" + }, + { + "@id": "6368", + "@organization": "Free University of Bozen-Bolzano", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2023/09/Barbara_Russo_649d9728a287e64f7519c9e98c.jpeg", + "@bio": "\"I am full professor in Computer Science at the Faculty of Engineering of the Free University of Bozen-Bolzano. I havea PhD in pure mathematics from the university of Trento, Italy. I was visiting researcher at the Max Plan Institute for Mathematics, Bonn, Germany. I have published more than 150 articles in pure mathematics and computer science. Research interest is in software system engineering, software maintenance and security.\"", + "@url": "https://www.sfscon.it/speakers/barbara-russo/", + "#text": "Barbara Russo" + }, + { + "@id": "4993", + "@organization": "Free University of Bozen-Bolzano", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/form-speakers/jorge-melegati-xiaofeng-wang-a56004170c92e74fc704d0b9f0cf3e19.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/www.jmelegati.com\\/\"},{\"twitter\":\"https:\\/\\/x.com\\/JMelegati\"}]", + "@bio": "\"Jorge Melegati is a researcher at the Faculty of Engineering of the Free University of Bozen-Bolzano. His research focuses on improving software engineering considering human and process-related aspects, especially with the use of AI-based tools. He has published in several journals and conferences. Before joining academia, he has acted as a professional software developer for more than eight years.\"", + "@url": "https://www.sfscon.it/speakers/jorge-melegati/", + "#text": "Jorge Melegati" + } + ] + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b30af7bbe17ed948be5c9b8b2c2c9a9bced7b", + "@unique_id": "2024day1event32", + "@bookmark": "1", + "@rating": "1", + "start": "13:00", + "duration": "00:15", + "title": "ScrapeGraphAI", + "url": "https://www.sfscon.it/talks/scrapegraphai/", + "language": null, + "abstract": "you only scrape once", + "subtitle": "you only scrape once", + "description": "

ScrapeGraphAI is an innovative Python library designed to revolutionize the field of web scraping and in less than 4 months it collected over than 12k stars on Github and more than 100k downloads on pip. It allows to scrape which website you want with the knowledge of the HTML code and with the LLM models. By seamlessly integrating a natural language model within its architecture, ScrapeGraphAI enables the extraction of valuable information from websites with unparalleled flexibility and accuracy. Unlike traditional scraping tools that rely on rigid patterns or manual configuration, ScrapeGraphAI constructs a dynamic graph of operations to interrogate web pages, ensuring that relevant data is captured even in the face of changing website structures. This library’s unique fusion of language models and directed graph logic empowers developers to create sophisticated scraping workflows with minimal coding required, thereby streamlining the process of extracting valuable insights from online content. More info at this link: https://github.com/VinciGit00/Scrapegraph-ai

", + "track": { + "@color": "#c48c2d", + "#text": "Developers" + }, + "category": "Developers", + "type": "Developers", + "track-url": "https://www.sfscon.it/tracks/developers-track-2024/", + "persons": { + "person": { + "@id": "7084", + "@organization": "scrapegraphai", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/marco_Vinciguerra_66818de945d0d66819144447de.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/marco-vinciguerra-dev.onrender.com\\/\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/marco-vinciguerra-7ba365242\\/\"}]", + "@bio": "\"I am the founder of scrapegraphai, a python library that has more than 12k stars on gh and more than 100k downloads on pip\"", + "@url": "https://www.sfscon.it/speakers/marco-vinciguerra/", + "#text": "Marco Vinciguerra" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b4856e093dcbebb562a4b7731e7c08f0f707c", + "@unique_id": "2024day1event36", + "@bookmark": "1", + "@rating": "1", + "start": "13:20", + "duration": "00:15", + "title": "Software Engineering Automation: From early tools to Generative AI and beyond", + "url": "https://www.sfscon.it/talks/software-engineering-automation-from-early-tools-to-generative-ai-and-beyond/", + "language": null, + "description": "

The emergence of Generative AI tools, such as ChatGPT and Copilot, promises to disrupt knowledge-based work, including software development. However, these are not the first tools to support the automation of software engineering. From the early days, various tools have been developed to remove repetitive tasks, reduce workload, and consequently increase the abstraction of software development, such as auto-completion and automatic refactoring. In this talk, we present the different levels of the automation of software engineering. We will examine how past and present tools have achieved these levels, the current capabilities of Generative AI tools, and what we can expect for the future.

", + "track": { + "@color": "#c48c2d", + "#text": "Developers" + }, + "category": "Developers", + "type": "Developers", + "track-url": "https://www.sfscon.it/tracks/developers-track-2024/", + "persons": { + "person": { + "@id": "4993", + "@organization": "Free University of Bozen-Bolzano", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/form-speakers/jorge-melegati-xiaofeng-wang-a56004170c92e74fc704d0b9f0cf3e19.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/www.jmelegati.com\\/\"},{\"twitter\":\"https:\\/\\/x.com\\/JMelegati\"}]", + "@bio": "\"Jorge Melegati is a researcher at the Faculty of Engineering of the Free University of Bozen-Bolzano. His research focuses on improving software engineering considering human and process-related aspects, especially with the use of AI-based tools. He has published in several journals and conferences. Before joining academia, he has acted as a professional software developer for more than eight years.\"", + "@url": "https://www.sfscon.it/speakers/jorge-melegati/", + "#text": "Jorge Melegati" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b6099fe071b2dd58b07457a15d2dcfa5387d5", + "@unique_id": "2024day1event40", + "@bookmark": "1", + "@rating": "1", + "start": "13:40", + "duration": "00:15", + "title": "The Crucial Role of Openness in Modern Software Development", + "url": "https://www.sfscon.it/talks/the-crucial-role-of-openness-in-modern-software-development/", + "language": null, + "description": "

Developers and providers of software-based products as well as other new technologies for the global market know that the winning solutions for future-proof projects share one key feature: interoperability with products from other suppliers. Achieving this interoperability means relying on open standards, open-source technologies and establishing key partnerships with other industry players.

\n

In effect, openness principles are increasingly essential to software development. This talk will provide an in-depth analysis of how these concepts underpin interoperability, security and innovation in today’s technological landscape.

\n

It will discuss the importance of open standards in creating seamless integration between diverse systems and applications, ensuring that technological advancements remain accessible and adaptable. The session will also cover key strategies and best practices for the adoption of open solutions that drive compatibility and competitiveness.

\n

Finally, by examining Jakarta EE and the Payara Community, the talk will illustrate how these frameworks exemplify the power of open source in building innovative, scalable and future-oriented applications.

", + "track": { + "@color": "#c48c2d", + "#text": "Developers" + }, + "category": "Developers", + "type": "Developers", + "track-url": "https://www.sfscon.it/tracks/developers-track-2024/", + "persons": { + "person": [ + { + "@id": "6959", + "@organization": "Payara Services", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Chiara_Civardi_66706131e270e6673000483c03.jpeg", + "@bio": "\"Chiara is a Marketing Coordinator with over 10 years of experience in producing technical content on open technologies and standards. Her expertise includes open-source software, open network technologies for industrial communications, automation. Chiara has a passion for sharing knowledge about efficient and innovative solutions for smart factories and the digital transformation of businesses. She holds a PhD for ETH Zurich and a MSc from the University of Southampton.\"", + "@url": "https://www.sfscon.it/speakers/chiara-civardi/", + "#text": "Chiara Civardi" + }, + { + "@id": "6967", + "@organization": "Payara Services Ltd", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/08/Dominika_Tasarz-Sochacka_6672fed63aebd66c86813ede9b.jpeg", + "@socials": "[{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/dominikatasarz\\/\"}]", + "@bio": "\"With over 13 years of experience working in the Java industry, I have a passion for fostering developer communities, growing open source projects, and shaping the future of Java and Jakarta EE. My expertise lies in marketing communications which I use to drive collaboration and knowledge-sharing among developers.\\r\\n\\r\\nOver the years of working with various Java middleware technologies, I've been involved in educating Java developers about products, frameworks and tools that make their work lives easier and empowering them to stay at the forefront of Java innovation.\\r\\n\\r\\nAs one of the original team members at Payara, working on company's Java runtimes from day one, I've been contributing to the creation of Payara brand as well as growing and educating Payara users' community. In my current role of a Senior Marketing Specialist and Community Manager, I'm organizing and hosting regular developer focused educational events featuring Java Champions, Jakarta EE experts and experienced Java Developers.\"", + "@url": "https://www.sfscon.it/speakers/dominika-tasarz-sochacka/", + "#text": "Dominika Tasarz-Sochacka" + } + ] + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b7b9e47ddb0c4892ac581f68411c428bb8be2", + "@unique_id": "2024day1event44", + "@bookmark": "1", + "@rating": "1", + "start": "14:00", + "duration": "00:15", + "title": "AI Tools for Jakarta EE", + "url": "https://www.sfscon.it/talks/ai-tools-for-jakarta-ee/", + "language": null, + "description": "

Discover how AI-powered tools for Jakarta EE streamline the entire development lifecycle.

\n

Over the years, there have been many ways of starting a project: archetypes, project generators, visual designers, and so on. What do we get when we add a language model to the mix? A project generator that scaffolds domain-relevant Jakarta EE applications with backend and frontend functionalities in place.

\n

Experience the future of enterprise application development through practical, cutting-edge demonstrations.

", + "track": { + "@color": "#c48c2d", + "#text": "Developers" + }, + "category": "Developers", + "type": "Developers", + "track-url": "https://www.sfscon.it/tracks/developers-track-2024/", + "persons": { + "person": { + "@id": "6970", + "@organization": "Payara Services Limited", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Gaurav_Gupta_66730049f296b667304afed964.jpeg", + "@socials": "[{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/jgauravgupta\\/\"},{\"twitter\":\"https:\\/\\/twitter.com\\/jgauravgupta\"}]", + "@bio": "\"Gaurav Gupta is a Senior Software Engineer at Payara and the author of Jeddict, an open-source Jakarta EE application development platform that accelerates developer productivity by simplifying the creation and management of complex entity relationship models. Gaurav is also an active committer to Apache NetBeans IDE and a contributor to the Eclipse GlassFish server, enhancing these tools with his expertise and dedication to the open-source community.\"", + "@url": "https://www.sfscon.it/speakers/gaurav-gupta/", + "#text": "Gaurav Gupta" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59b92e315108b880443c5a7a45a699aceb1d3c0", + "@unique_id": "2024day1event48", + "@bookmark": "1", + "@rating": "1", + "start": "14:20", + "duration": "00:15", + "title": "How to start contributing and still have fun", + "url": "https://www.sfscon.it/talks/how-to-start-contributing-and-still-have-fun/", + "language": null, + "description": "

Are you new to Open Source and about to create your first commit, but still haven’t clicked on “New Pull Request” button?

\n

There will be always something holding you back.

\n

Or do you want to gain experience that can be applied at your school or work but don’t know how?

\n

Open Source gives you that opportunity.

\n

Let’s talk about it because we all go through it: how to find your project; fear of the first commit, the first code review, the first mistakes and everything is public; fight toxic communities – no one is perfect; when to open your code;

", + "track": { + "@color": "#c48c2d", + "#text": "Developers" + }, + "category": "Developers", + "type": "Developers", + "track-url": "https://www.sfscon.it/tracks/developers-track-2024/", + "persons": { + "person": { + "@id": "5797", + "@organization": "Red Hat", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/form-speakers/juri-solovjov-99470f10372f7fce2d8b7a2c1bb75a79.jpeg", + "@socials": "[{\"facebook\":\"https:\\/\\/www.facebook.com\\/juras08\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/juri-solovjov\\/\"}]", + "@bio": "\"

ISTQB certified Software Quality Engineer with 4 years experience at Red Hat<\\/p>\\r\\nPreviously worked as a Front-End Developer\\r\\n\\r\\nOriginally came from Estonia, currently located in Brno, Czechia.\\r\\n\\r\\nStudied Telecommunications and Telecommunication Services at Tallinn University of Technology\"", + "@url": "https://www.sfscon.it/speakers/juri-solovjov/", + "#text": "Juri Solovjov" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59ba9d2446fabfa6e79c027bc716d57b55a53d5", + "@unique_id": "2024day1event52", + "@bookmark": "1", + "@rating": "1", + "start": "14:40", + "duration": "00:15", + "title": "Monolith Splitter", + "url": "https://www.sfscon.it/talks/monolith-splitter/", + "language": null, + "description": "

Migration from monolithic systems to microservices has earned significant interest in recent years. Software architects and developers welcome approaches, techniques, and patterns that can facilitate and automate the migration process. This talk will present Monolith Splitter, a tool that employs various approaches for splitting a monolith into a microservices architecture. This tool could be beneficial for software architects looking to migrate monolithic projects to a more scalable architecture. It uses execution traces to analyze monolithic software and suggests which classes should be grouped together in separate services according to criteria such as cohesion, modularity, and independence of evolvability. We will showcase the application of the tool to a series of open source software projects, discussing the outcomes, the benefits, and the current limitations.

", + "track": { + "@color": "#c48c2d", + "#text": "Developers" + }, + "category": "Developers", + "type": "Developers", + "track-url": "https://www.sfscon.it/tracks/developers-track-2024/", + "persons": { + "person": [ + { + "@id": "7055", + "@organization": "T-Mobile Czech Republic", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Michal_Skipala_667f138765caa667fc8c94ee44.jpeg", + "@bio": "\"A passionate software engineer specializing in full stack development, focusing on Java and ReactJS. Presently employed at T-Mobile as a software engineer, holding a bachelor's degree in software engineering from CTU in Prague, and currently pursuing a master's degree at Masaryk University in Brno. Thrives on overcoming new challenges and embraces continuous learning within the dynamic landscape of software development.\"", + "@url": "https://www.sfscon.it/speakers/michal-skipala/", + "#text": "Michal Skipala" + }, + { + "@id": "6997", + "@organization": "Masaryk University", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/09/Bruno_Rossi_667bd90db6a0966d867a841a50.jpeg", + "@socials": "[{\"twitter\":\"https:\\/\\/x.com\\/brrossi75\\/\"}]", + "@bio": "\"Bruno Rossi is Assistant Professor at the Lab of Software Architectures and Information Systems at the Faculty of Informatics, Masaryk University, Brno, Czechia. He was previously RTD at the Free University of Bozen-Bolzano. He is mostly interested in software evolution, open source software systems, and cyber-physical systems. Enthusiast of open source software, which he also incorporates into his courses.\"", + "@url": "https://www.sfscon.it/speakers/bruno-rossi/", + "#text": "Bruno Rossi" + } + ] + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59bbffb0181b65483f87888887fbd54f0373300", + "@unique_id": "2024day1event56", + "@bookmark": "1", + "@rating": "1", + "start": "15:00", + "duration": "00:15", + "title": "The Next Level of Metrics in Microservices", + "url": "https://www.sfscon.it/talks/the-next-level-of-metrics-in-microservices/", + "language": null, + "abstract": "Going beyond measuring workload and performance", + "subtitle": "Going beyond measuring workload and performance", + "description": "

In Microservices, measuring workload and performance are old news! They’re still important, but we can do more. In this talk, we’re navigating through new ideas on how to use metrics to tell us more than the basics about our microservices. Did you know we can evaluate our microservices in the architectural level? So we’ll have concrete data to support our decision-making. Between patterns and bad smells, we can use metrics to detect the points where they happen. Let’s explore these new possibilities to improve our experience when evolving a microservice system, towards a more robust and maintainable direction! Bonus: you’ll learn about an open-source tool to facilitate this process, of which I’m a maintainer, and you could be too!

", + "track": { + "@color": "#c48c2d", + "#text": "Developers" + }, + "category": "Developers", + "type": "Developers", + "track-url": "https://www.sfscon.it/tracks/developers-track-2024/", + "persons": { + "person": { + "@id": "6301", + "@organization": "Free University of Bozen-Bolzano", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2023/06/Joao Francisco_Lino Daniel_649ac32cc9632649ac3e3896e1.jpeg", + "@bio": "\"He's a Brazilian recently arrived in Italy for the PhD. He believes that from diversity (of backgrounds, of experiences, of perspectives) comes excellence. Computer scientist for academic background, software engineer for profession, nerd by genetics, and trying to expand his horizon bit by bit.\"", + "@url": "https://www.sfscon.it/speakers/joao-francisco-lino-daniel/", + "#text": "João Francisco Lino Daniel" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59bd6218865b0b7e6984f3c8deb806e2aa879d8", + "@unique_id": "2024day1event60", + "@bookmark": "1", + "@rating": "1", + "start": "15:20", + "duration": "00:15", + "title": "What’s New in Notifications", + "url": "https://www.sfscon.it/talks/whats-new-in-notifications/", + "language": null, + "description": "

Over the past 6 months I’ve been working on improving notifications for the GNU/Linux desktop. This includes a new version of the xdg-desktop-portal notification spec, improved notification UI in GNOME Shell, and various backend components (e.g. GLib and portals).

\n

In this talk I’ll explain why it was so difficult, how we untangled it, and what’s in store for the future.

", + "track": { + "@color": "#c48c2d", + "#text": "Developers" + }, + "category": "Developers", + "type": "Developers", + "track-url": "https://www.sfscon.it/tracks/developers-track-2024/", + "persons": { + "person": { + "@id": "4052", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2017/10/Julian_Sparber.jpg", + "@socials": "[{\"twitter\":\"https:\\/\\/twitter.com\\/iamjsparber\"}]", + "@bio": "\"Julian Sparber is a software developer from South Tyrol. He got his BSc in Applied Computer Science at the University of Urbino. He's always been interested in software and its relation with society, which got him into software freedom.\"", + "@url": "https://www.sfscon.it/speakers/julian-sparber/", + "#text": "Julian Sparber" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59bebc535e82802ef9bc89b64a058629cabed34", + "@unique_id": "2024day1event64", + "@bookmark": "1", + "@rating": "1", + "start": "15:40", + "duration": "00:15", + "title": "Sync Your Tunes, Sync Your Screen: Introducing SyncWall", + "url": "https://www.sfscon.it/talks/sync-your-tunes-sync-your-screen-introducing-syncwall/", + "language": null, + "description": "

Ever wished your computer could visually represent your playlist? SyncWall lets you turn every song into a unique visual experience, by dynamically matching your desktop wallpaper to the music currently playing on Spotify!

\n

We’ll demonstrate SyncWall in action, showcasing its capabilities, and then we’ll dive deeper into the code and the process of creating the images.

\n

SyncWall relies on two core components: Spotify’s API, which provides with all the necessary song information, and Python’s PIL library, which allows to easily manipulate images. Throughout the presentation, we will explore the key concepts and most useful functions of these two technologies, providing you with practical tools to integrate into your own projects.

\n

Even if Syncwall is designed for GNOME, we will dive deep on how to make it work also in different desktop environments. This will cover all the steps and the challenges involved.

", + "track": { + "@color": "#c48c2d", + "#text": "Developers" + }, + "category": "Developers", + "type": "Developers", + "track-url": "https://www.sfscon.it/tracks/developers-track-2024/", + "persons": { + "person": { + "@id": "7088", + "@organization": "UniPi", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Giovanni Enrico_Loni_66819248e621d66819339af5ed.jpeg", + "@socials": "[{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/genricoloni\\/\"}]", + "@bio": "\"Giovanni Enrico is a Computer Engineering MSc Student at University of Pisa.\\r\\nHis main interests are Cybersecurity, Computer Architectures, with a particular focus on the security side, and everything that can be considered low level, to discover \\\"how that thing works\\\".\\r\\nHe believes in the leveraging of skills beyond academic pursuits, to create solutions useful in everyday life, following the mantra of Open Source.\\r\\nHe's always open to connect with those who have common interests, to share ideas and ongoing projects to join.\"", + "@url": "https://www.sfscon.it/speakers/giovanni-enrico-loni/", + "#text": "Giovanni Enrico Loni" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c01c907c47327a9f8aca4c2ca140d9b9d058f", + "@unique_id": "2024day1event68", + "@bookmark": "1", + "@rating": "1", + "start": "16:00", + "duration": "00:15", + "title": "Nurturing OpenJDK distribution: Eclipse Temurin Success History and plan", + "url": "https://www.sfscon.it/talks/nurturing-openjdk-distribution-eclipse-temurin-success-history-and-plan/", + "language": null, + "description": "

Join me as we explore the pillars that make Eclipse Temurin one of the most widely adopted, enterprise-ready OpenJDK Runtime (over 20M monthly downloads) and also delve into the future of Adoptium and explore the goals set for 2024.
\nAs we navigate the landscape of open source Java runtimes, Adoptium is committed to fostering vibrant, healthy projects that thrive with the support of robust communities. In this talk, we will also shine a spotlight on our dedication to delivering top-notch quality and outstanding performance, with a special focus on our AQAvit project and Security Effort.

", + "track": { + "@color": "#c48c2d", + "#text": "Developers" + }, + "category": "Developers", + "type": "Developers", + "track-url": "https://www.sfscon.it/tracks/developers-track-2024/", + "persons": { + "person": [ + { + "@id": "7074", + "@organization": "Eclipse Foundation", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Carmen_Delgado_66814169ba742668143772b3fd.jpeg", + "@socials": "[{\"mastodon\":\"https:\\/\\/fosstodon.org\\/@cldelgadop\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/cldelgadop\\/\"},{\"twitter\":\"https:\\/\\/twitter.com\\/cldelgadop\"}]", + "@bio": "\"Carmen Delgado joined Eclipse Foundation as Adoptium Community Manager in October 2022 and is responsible for helping the Eclipse Adoptium working group members achieve their goals and objectives and being the bridge between their procedures and Eclipse Foundation processes and Staff. Carmen has a background in project, operations, and financial management in SMEs, non-profits, and start-ups from different industries: healthcare, Pharma, Fintech, and Tech. She also volunteers as a group manager and mentor at Step4ward, a mentoring program in Spain for women starting in the tech world.\"", + "@url": "https://www.sfscon.it/speakers/carmen-delgado/", + "#text": "Carmen Delgado" + }, + { + "@id": "7036", + "@organization": "Eclipse Foundation", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Ivar_Grimstad_667ea1bc78e64667ea2bd0fe32.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/agilejava.eu\"},{\"mastodon\":\"https:\\/\\/mastodon.social\\/@ivar_grimstad\"},{\"linkedin\":\"https:\\/\\/x.com\\/ivar_grimstad\"},{\"twitter\":\"https:\\/\\/x.com\\/ivar_grimstad\"}]", + "@bio": "\"Ivar Grimstad is the Jakarta EE Developer Advocate at Eclipse Foundation. He is a Java Champion and JUG Leader based in Sweden.\\r\\n\\r\\nBesides advocating the Jakarta EE technologies, Ivar is contributing to the Jakarta EE specifications as well as being the PMC Lead for Eclipse Enterprise for Java (EE4J). He is also one of the specification leads for Jakarta MVC and represents Eclipse Foundation on the JCP Executive Committee.\\r\\n\\r\\nIvar is also involved in various other open-source projects and communities. He is a frequent speaker at International developer conferences.\"", + "@url": "https://www.sfscon.it/speakers/ivar-grimstad/", + "#text": "Ivar Grimstad" + } + ] + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c17b3a9d0b430f9e50546262cb4064b5e5524", + "@unique_id": "2024day1event72", + "@bookmark": "1", + "@rating": "1", + "start": "16:20", + "duration": "00:15", + "title": "Designing open source tools for Citizen Coders", + "url": "https://www.sfscon.it/talks/designing-open-source-tools-for-citizen-coders/", + "language": null, + "abstract": "Empower non-professional developers to drive innovation!", + "subtitle": "Empower non-professional developers to drive innovation!", + "description": "

In a world where proprietary no-code platforms with vendor lock-in and opacity dominate, there is a crucial need to enhance the developer experience of open source applications, libraries, and tools.

\n

We will explore how we can make open source software more accessible to citizen developers and non-professional programmers who face significant barriers to entry with modern open source tools. Showing the importance of collaborating with these developers, who are often closer to real-world problems, to improve the quality and usability of open source software.

", + "track": { + "@color": "#c48c2d", + "#text": "Developers" + }, + "category": "Developers", + "type": "Developers", + "track-url": "https://www.sfscon.it/tracks/developers-track-2024/", + "persons": { + "person": { + "@id": "6728", + "@organization": "Luca Rainone", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2023/11/Luca_Rainone.jpeg", + "@socials": "[{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/lucarainone\\/\"}]", + "@bio": "\"I'm a web development veteran with 15+ years of experience, fueled by a passion for open source. I prioritize precision, user experience, and creating powerful app, web app and content management systems.\\r\\nI'm devoted to sharing knowledge and have an insatiable appetite for learning.\"", + "@url": "https://www.sfscon.it/speakers/luca-rainone/", + "#text": "Luca Rainone" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c2da50be39bed63a0c095f4b234bdb61c9efd", + "@unique_id": "2024day1event88", + "@bookmark": "1", + "@rating": "1", + "start": "16:40", + "duration": "00:15", + "title": "Free your Games", + "url": "https://www.sfscon.it/talks/free-your-games/", + "language": null, + "abstract": "A Minetest story", + "subtitle": "A Minetest story", + "description": "

Videogames are part of our daily life. They allow us to unplug, to relax, to compete, simulating a reality that puts us at the centre of a new digital world. However, if we go deeper into the way videogames are made, we’ll learn that their market can be brutal and the ethics of their business models highly debatable – if not plain unbearable. Nowadays, playing a videogame usually means renouncing to our privacy and shaking hands with realities that we might not tolerate if we knew what they conceal. It was during the pandemic that a Minetest server called AES was born. Made by volunteers, AES decided to go against that: to build an online space where to play without strings attached. A place where everyone can have fun and nothing is proprietary. Four years later, this is its story.

", + "track": { + "@color": "#c48c2d", + "#text": "Developers" + }, + "category": "Developers", + "type": "Developers", + "track-url": "https://www.sfscon.it/tracks/developers-track-2024/", + "persons": { + "person": { + "@id": "7260", + "@organization": "Minetest", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/09/Marco_Amato_66f58ca8ee63d66f6e2f366781.jpeg", + "@socials": "[{\"mastodon\":\"https:\\/\\/mastodon.social\\/@zughy_boi\"}]", + "@bio": "\"Better known by the name Zughy, Marco Amato is a pixel artist and IT consultant. Passionate about the philosophical aspect of technology, in 2019 he started the Italian collective Etica Digitale and in 2022 became part of the organisation of Minetest, the libre voxel gaming platform\"", + "@url": "https://www.sfscon.it/speakers/marco-amato/", + "#text": "Marco Amato" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c454e58ee9cca3bd8aaac53fc1f72081d3c52", + "@unique_id": "2024day1event28", + "@bookmark": "1", + "@rating": "1", + "start": "17:00", + "duration": "00:15", + "title": "How to set up an Open Source Program Office? Get insights and use cases from the OSPO Alliance", + "url": "https://www.sfscon.it/talks/how-to-set-up-an-open-source-program-office-get-insights-and-use-cases-from-the-ospo-alliance/", + "language": null, + "description": "

The Good Governance Initiative (GGI) developped by the OSPO Alliance proposes a methodological framework to assess open-source awareness, compliance and governance in any kind of organizations, helping them to structure and improve the use of FOSS towards an OSPO. This presentation will highlight the main progresses and new features achieved since last year’s introduction at SFScon, such as the translation of the GGI Good Governance in five languages, the recent OSPO testimonies presented in the OnRamp meeting series, and many more.

", + "track": { + "@color": "#b7d631", + "#text": "OW2" + }, + "category": "OW2", + "type": "OW2", + "track-url": "https://www.sfscon.it/tracks/ow2-track-2024/", + "persons": { + "person": { + "@id": "6099", + "@organization": "seacom srl", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/form-speakers/valentina-del-prete-666112c0642530794146ca04825aedec.jpeg", + "@socials": "[{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/vallydp\\/\"}]", + "@bio": "\"Passionate about business and organizational models, she has been involved in business development at Seacom for more than 10 years. With a degree in communications science, she has always worked in the world of open source software. She is also currently in charge of the commercial offering and positioning of RIOS: Italian Open Source Network. Curious about humankind, she is passionate about all struggles for integration and equal rights.\"", + "@url": "https://www.sfscon.it/speakers/valentina-del-prete/", + "#text": "Valentina Del Prete" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c5d1b0f2ccab3a99c78f41ba4f04087b13444", + "@unique_id": "2024day1event80", + "@bookmark": "1", + "@rating": "1", + "start": "17:20", + "duration": "00:15", + "title": "Decentralized Search Over Decentralized Storage", + "url": "https://www.sfscon.it/talks/decentralized-search-over-decentralized-storage/", + "language": null, + "abstract": "Coupling an AI-powered search engine with a self-hosted personal cloud", + "subtitle": "Coupling an AI-powered search engine with a self-hosted personal cloud", + "description": "

In this talk, we will explore an innovative decentralized search system developed in collaboration between the teams of On My Disk, a personal cloud storage solution, and PeARS, a self-hosted search engine. This system is designed to enable user-friendly, AI-powered, multilingual search capabilities directly over a decentralized storage environment, empowering individuals to manage and search their data across devices without relying on third-party servers. By combining cutting-edge AI with a robust, local-first approach, this solution allows users to maintain complete control over their data, ensuring secure, fast, and personalized search results in a user-controlled environment. Learn how this technology is setting a new standard for privacy and autonomy in data storage and retrieval.

", + "track": { + "@color": "#b7d631", + "#text": "OW2" + }, + "category": "OW2", + "type": "OW2", + "track-url": "https://www.sfscon.it/tracks/ow2-track-2024/", + "persons": { + "person": { + "@id": "7240", + "@organization": "On My Disk", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/09/Alexey_Volkov_66ec41151370066edbececd0dc.jpeg", + "@bio": "\"Alexey Volkov is CEO at Bineon and founder of On My Disk. He is software engineer with background in telecommunications.\"", + "@url": "https://www.sfscon.it/speakers/alexey-volkov/", + "#text": "Alexey Volkov" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c7149b09e10123d1a253144a196e6b4a0be07", + "@unique_id": "2024day1event84", + "@bookmark": "1", + "@rating": "1", + "start": "17:40", + "duration": "00:15", + "title": "Optimizing Cloud Compute Resources with Spare Cores", + "url": "https://www.sfscon.it/talks/optimizing-cloud-compute-resources-with-spare-cores/", + "language": null, + "description": "

Spare Cores is a vendor-independent, open-source, Python ecosystem that offers a comprehensive inventory and performance evaluation of compute resources across cloud server providers. We start all server types publicly (GHA) to run hardware inspection tools and benchmarks for different workloads. Our findings are published as open data and open-source tools to help you identify and optionally start the most cost-efficient instance type for your specific use cases (e.g. ML model training or CI/CD pipelines) in your cloud environment. Additionally, Spare Cores provides a seamless SaaS solution built on this open-source ecosystem, managing the entire lifecycle of containerized batch jobs without requiring direct vendor engagement.

", + "track": { + "@color": "#b7d631", + "#text": "OW2" + }, + "category": "OW2", + "type": "OW2", + "track-url": "https://www.sfscon.it/tracks/ow2-track-2024/", + "persons": { + "person": { + "@id": "7246", + "@organization": "Spare Cores", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/09/Gergely_Daroczi_66ed45b594b8166f118a9e2a9c.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/daroczig.rapporter.net\"},{\"mastodon\":\"https:\\/\\/fosstodon.org\\/@daroczig\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/daroczig\\/\"},{\"twitter\":\"https:\\/\\/twitter.com\\/daroczig\"}]", + "@bio": "\"Gergely Daroczi, PhD, is a passionate R user and package developer for two decades. With over 15 years in the industry, he has expertise in data science, engineering, cloud infrastructure, and data operations across SaaS, fintech, adtech, and healthtech startups, focusing on building scalable data platforms. Gergely maintains a dozen open-source R and Python projects and organizes a meetup with 1,800 members in Hungary \\u2013 along with other open-source and data conferences. He is the author of a book on data analysis, and he serves as a part-time Senior Lecturer at CEU's Business Analytics program in Vienna.\"", + "@url": "https://www.sfscon.it/speakers/gergely-daroczi/", + "#text": "Gergely Daroczi" + } + }, + "bookmark": "1", + "rating": "1" + } + ] + }, + { + "@name": "NOISE", + "event": { + "@id": "670d1b59b1894ee396291209065920c529bf320b3f8c7", + "@unique_id": "2024day1event96", + "@bookmark": "0", + "@rating": "0", + "start": "13:00", + "duration": "00:30", + "title": "NOI Hackathon SFSCON Edition", + "language": null, + "track": { + "@color": "#a8a8a8", + "#text": "Side Event - Hackathon" + }, + "category": "Side Event - Hackathon", + "type": "Side Event,Hackathon", + "bookmark": "0", + "rating": "0" + } + }, + { + "@name": "Crane Hall", + "event": { + "@id": "670d1b59b65045aeceae6227b210bf66148a96a0cc439", + "@unique_id": "2024day1event90", + "@bookmark": "0", + "@rating": "0", + "start": "14:00", + "duration": "00:40", + "title": "Human and environmental Impacts of the actual “Artificial Intelligence” Industry, how to humanize?", + "language": null, + "track": { + "@color": "#1e73be", + "#text": "Side Event - Crane Hall BOF meetings" + }, + "category": "Side Event - Crane Hall BOF meetings", + "type": "Side Event,Crane Hall BOF meetings", + "track-url": "https://www.sfscon.it/tracks/crane-hall-bof-meetings-2024/", + "persons": { + "person": { + "@id": "4289", + "@organization": "Power Progress Community", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2023/08/Roberto_Innocenti_64a00b190e0b564cc2dab0c666.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/www.powerprogress.org\\/\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/roberto-innocenti-2961069\\/\"}]", + "@bio": "\"Among the founders of the project Open Hardware PowerPC Notebook, presenter and ambassador of the project.\\r\\nPresident of the association Power Progress Community which deals with the promotion and dissemination of free software and open hardware.\\r\\nResponsible in humanist forums of the area \\u201cTechnology for improving the living conditions of mankind\\u201d.\\r\\nTech Leader - Solutions & Infrastructure Architect, Software Architect with Open Source tools, by profession.\"", + "@url": "https://www.sfscon.it/speakers/roberto-innocenti/", + "#text": "Roberto Innocenti" + } + }, + "bookmark": "0", + "rating": "0" + } + } + ] + }, + { + "@date": "2024-11-09", + "room": [ + { + "@name": "NOI Techpark", + "event": [ + { + "@id": "670d1b59c7998a7484276072bd4ba826d36c592714e4b", + "@unique_id": "2024day2event1", + "@bookmark": "0", + "@rating": "0", + "start": "08:30", + "duration": "00:30", + "title": "Starting of the second day", + "language": null, + "track": "SFSCON", + "category": "SFSCON", + "type": "SFSCON", + "bookmark": "0", + "rating": "0" + }, + { + "@id": "670d1b59c8f96acefeefece7c55f6ec237a875c59e96a", + "@unique_id": "2024day2event12", + "@bookmark": "0", + "@rating": "0", + "start": "13:00", + "duration": "00:30", + "title": "Closing of the SFSCON 2024", + "language": null, + "track": "SFSCON", + "category": "SFSCON", + "type": "SFSCON", + "bookmark": "0", + "rating": "0" + } + ] + }, + { + "@name": "Foyer", + "event": { + "@id": "670d1b59c7b0aa847ccb8f88f9cfd40cc21ffc92e394f", + "@unique_id": "2024day2event2", + "@bookmark": "0", + "@rating": "0", + "start": "08:30", + "duration": "00:30", + "title": "Welcome Coffee", + "language": null, + "track": "SFSCON", + "category": "SFSCON", + "type": "SFSCON", + "bookmark": "0", + "rating": "0" + } + }, + { + "@name": "Seminar 2", + "event": [ + { + "@id": "670d1b59c7f0f3abc3563e904b2f539ba1fcaed118d20", + "@unique_id": "2024day2event8", + "@bookmark": "0", + "@rating": "0", + "start": "09:20", + "duration": "01:00", + "title": "Let’s spark more Adas in our tech world! workshop", + "language": null, + "abstract": "Women* in tech", + "subtitle": "Women* in tech", + "description": "

In this workshop we will dive into the possibilities of encouraging women*, especially girls, to thinker and to code. With tools such as the Free Software Foundation Europe’s (FSFE) illustrated book “Ada & Zangemann – A Tale of Software, Skateboards, and Raspberry Ice Cream”everybody can create ways to spark the participation of women* and girls in tech.The book tells the story of Ada, a girl who loves to experiment with hardware and software. Ada realises how crucial it is to control technology and decides to stand up to the mighty inventor Zangemann.This workshop will also intend to explore ways to promote diversity and gender equity in the Free Software community and beyond. Together we will identify the challenges women* face in participating in such communities and discuss how we can create more inclusive environments, especially for the future generations.We encourage you to join us to share your experiences, ideas and perspectives, and collaborate in creating a more inclusive and diverse future in the Free Software community for all.

\n

REGISTRATION NEEDED AT: https://pretix.eu/noi-digital/sfscon24/4260077/

\n

*women, inter, trans and non-binary people.

\n

Supported by: FSFE – Free Software Foundation Europe & SheTech

", + "track": { + "@color": "#f427c8", + "#text": "Side Event - Women* in tech" + }, + "category": "Side Event - Women* in tech", + "type": "Side Event,Women* in tech", + "track-url": "https://www.sfscon.it/tracks/women-in-tech-track-2024/", + "persons": { + "person": [ + { + "@id": "6041", + "@organization": "FSFE - Free Software Foundation Europe", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2023/11/Lina_Ceballos_649edcc7d38c3654a5babb0bf8.jpeg", + "@bio": "\"Lina has a background in Law and Political Science. Currently, she is a Policy Project Manager at the FSFE where she advocates for software freedom making sure technology doesn't undermine people's rights. She has experience in monitoring legislative processes in the EU while engaging with different stake-holders and decision-makers.\"", + "@url": "https://www.sfscon.it/speakers/lina-ceballos/", + "#text": "Lina Ceballos" + }, + { + "@id": "7139", + "@organization": "FSFE - Free Software Foundation Europe", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/09/Ana_Galan_6693a1c2d138466f28f659d425.jpeg", + "@bio": "\"Ana has a background in communication and social sciences. After an internship at FSFE, she continued her career in Berlin and Madrid with various journalistic, communication and production-related experiences, and has been back at FSFE since 2022. There she focuses on communication outreach tasks as well as helping to manage the FSFE community and related events.\"", + "@url": "https://www.sfscon.it/speakers/ana-galan/", + "#text": "Ana Galan" + } + ] + }, + "bookmark": "0", + "rating": "0" + }, + { + "@id": "670d1b59c89eb8488f97a3ca5af14217a787942083f63", + "@unique_id": "2024day2event6", + "@bookmark": "0", + "@rating": "0", + "start": "10:40", + "duration": "00:55", + "title": "Knitting Our Internet workshop", + "language": null, + "abstract": "An interactive journey through the history of the Internet, and how to save it, together", + "subtitle": "An interactive journey through the history of the Internet, and how to save it, together", + "description": "

“Knitting Our Internet” (KOI) is a workshop that explores the history of the Internet, and offers a perspective for a collective re-imagination of participatory, decentralized networks.

\n

The workshop aims at questioning the very essence of today’s social media, exposing the critical limits posed by centralization, monopoly, and surveillance capitalism.

\n

KOI was conceived in June 2023 by Tommaso Marmo, who was looking for a simple yet critical and accurate way to introduce the concept of the Fediverse to non-experts.

\n

The content and structure of the workshop matured over time, as it adapted to very diverse audiences of any ages and backgrounds. Furthermore, the experience is based on Tommaso’s academic research, mainly conducted for “Computer Sciences are Social Sciences”, his bachelor’s thesis.

\n

Content

\n

During the activity, Tommaso will be using a yarn his grandmother gifted him to simulate centralized and decentralized networks, employing concrete metaphors to actively involve the participants. Every individual attending the workshop will be given a quote or an image relevant in the early and contemporary history of the Internet, and they will be asked to share it as the story unfolds.

\n

Allowing them to understand the essential challenges society faces in relation to technological advancement, participants will be empowered to get involved in the Fediverse, especially understanding the importance of decentralization, Free Software, and the political role played by technical tools.

\n

Notes

\n

Given its malleable and open structure, the content of the workshop can be adapted, enriched, and edited to match the key topics of SFSCON 2024 in the best possible way.

\n

The interactive parts of the workshop can be limited and a more theoretical presentation, diving in the thoughts of philosophers and computer sciences, could be added, too.

\n

Supported by: FSFE – Free Software Foundation Europe

", + "track": { + "@color": "#34ad16", + "#text": "Fediverse" + }, + "category": "Fediverse", + "type": "Fediverse", + "track-url": "https://www.sfscon.it/tracks/fediverse-track-2024/", + "persons": { + "person": { + "@id": "6991", + "@organization": "FSFE - Free Software Foundation Europe || Tallinn University", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Tommaso_Marmo_6679753e11a1766813d0fe8415.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/tommi.space\"},{\"mastodon\":\"https:\\/\\/pan.rent\\/@tommi\"},{\"linkedin\":\"https:\\/\\/linkedin.com\\/in\\/tommasomarmo\\/\"}]", + "@bio": "\"Tommi is an enthusiastic activist focusing its work on the socio-economical, political, and philosophical nature of the Internet. He is also a student of the \\u201cArtificial Intelligence and Sustainable Societies\\u201d Erasmus Mundus joint master.\\r\\n\\r\\nAmong many other projects he brings forward, Tommi was an intern at the Free Software Foundation Europe, is the co-founder of Scambi Festival, the creator of quitsocialmedia.club, and proud member of Club Tenco.\\r\\n\\r\\nWhen he is not in front of a screen, he loves climbing and outdoor sports.\"", + "@url": "https://www.sfscon.it/speakers/tommaso-marmo/", + "#text": "Tommaso Marmo" + } + }, + "bookmark": "0", + "rating": "0" + }, + { + "@id": "670d1b59c8c6df1fcac9982a24088eb1276fd82d3e38a", + "@unique_id": "2024day2event5", + "@bookmark": "1", + "@rating": "1", + "start": "11:40", + "duration": "00:15", + "title": "about:Fediverse", + "url": "https://www.sfscon.it/talks/aboutfediverse/", + "language": null, + "abstract": "An introduction to the decentralised social network", + "subtitle": "An introduction to the decentralised social network", + "description": "

The Fediverse is a decentralised social network. But what does that mean?

\n

In this talk I will give a short introduction to the Fediverse of 2024 and how it started to evolve in 2008. I will explain the basic concepts of ActivityPub as the protocol of the Fediverse and how the use of this open protocol has enabled a diverse group of Free Software projects to build a social network of (micro) blogging, video streaming, podcasting and event organising. A network where users can share and interact with each other regardless of the platform they use. What will be possible in the Fediverse of 2024? And how can you get started today?

\n

This talk does not require any technical knowledge of the Fediverse. However, you should know what an email is.

", + "track": { + "@color": "#34ad16", + "#text": "Fediverse" + }, + "category": "Fediverse", + "type": "Fediverse", + "track-url": "https://www.sfscon.it/tracks/fediverse-track-2024/", + "persons": { + "person": { + "@id": "7100", + "@organization": "FSFE - Free Software Foundation Europe", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/09/Tobias_Diekershoff_6681aa694fcf566e2791c843ee.jpeg", + "@socials": "[{\"mastodon\":\"https:\\/\\/social.diekershoff.de\\/~tobias\"}]", + "@bio": "\"Tobias has been a FLOSS enthusiast since the mid-90s, for reasons of sustainability in retrospect and the other benefits that come from using Free Software. Since 2014 he has been an active member of the Berlin local supporter group of the Free Software Foundation Europe and joined the FSFE team as a system administrator in 2022.\\r\\n\\r\\nIn 2008 he joined the Fediverse on identi.ca and ventured out to his self-hosted node as soon as it was possible. He became a member of the Friendica development team in 2010 and is currently co-maintainer of the project.\"", + "@url": "https://www.sfscon.it/speakers/tobias-diekershoff/", + "#text": "Tobias Diekershoff" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c8eab24f07aa0b77c10f2bf00f4ff309c4fa3", + "@unique_id": "2024day2event3", + "@bookmark": "1", + "@rating": "1", + "start": "12:00", + "duration": "00:15", + "title": "How to build a website for the IndieWeb", + "url": "https://www.sfscon.it/talks/how-to-build-a-website-for-the-indieweb/", + "language": null, + "description": "

Have you ever heard of terms like POSSE, syndication, or webmention?
\nWhat about protocols like Web Sign-In or Micropub?
\nThese terms are all connected to the IndieWeb, a community of websites built on open standards and open source technologies.

\n

In today’s digital age, our online content and identities are more important than ever. Relying on random companies and social networks to manage them isn’t ideal. Instead, we should take control of our online presence by building our own website for the IndieWeb.

\n

In this talk, you’ll learn how to:

\n

1. Publish content on your website via a Micropub server.
\n2. Syndicate that content elsewhere (i.e., republish it on another website).
\n3. Gather comments from social networks and display them on your website.

\n

We will achieve all of this using a static website and a few open-source tools.

", + "track": { + "@color": "#34ad16", + "#text": "Fediverse" + }, + "category": "Fediverse", + "type": "Fediverse", + "track-url": "https://www.sfscon.it/tracks/fediverse-track-2024/", + "persons": { + "person": { + "@id": "7059", + "@organization": "Debidda Giacomo", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/06/Giacomo_Debidda_667fa9c431b40667fb005692b1.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/giacomodebidda.com\\/\"},{\"mastodon\":\"https:\\/\\/fosstodon.org\\/@jackdbd\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/giacomodebidda\\/\"},{\"twitter\":\"https:\\/\\/twitter.com\\/jackdbd\"}]", + "@bio": "\"Giacomo has been writing software for more than 20 years, starting with little scripts in Turbo Pascal when he was in high school, signal\\/image processing programs in Matlab when at the University, and applications of various nature in his professional life: data analysis programs in R and Python; web applications in JavaScript, TypeScript and ClojureScript; native applications in Zig.\\r\\n\\r\\nIn his spare time he enjoys inline skating, surfskating, and riding his motorbike. Basically he is a fan of anything that has at least a couple of wheels.\"", + "@url": "https://www.sfscon.it/speakers/giacomo-debidda/", + "#text": "Giacomo Debidda" + } + }, + "bookmark": "1", + "rating": "1" + } + ] + }, + { + "@name": "Seminar 3", + "event": [ + { + "@id": "670d1b59c818406ec6bbbe7794251e5764af1c9cb9e23", + "@unique_id": "2024day2event4", + "@bookmark": "1", + "@rating": "1", + "start": "09:20", + "duration": "00:15", + "title": "ARM Linux Laptops for Developers Status Report", + "url": "https://www.sfscon.it/talks/arm-linux-laptops-for-developers-status-report/", + "language": null, + "description": "

Intrigued by 22+ hours of battery life with comparable performance to current Intel / AMD systems? Starting from June this year a bunch of new ARM based laptops have been launched. All major laptop vendors launched devices, with over 33 to choose from at the time of this writing.

\n

While ARM based laptops have been available for years, they mostly have been targeted as cheap entry level ChromeBooks or MacBooks designed for MacOS only. Luckily with this new wave of ARM based laptops there should be something for everybody.

\n

The core question is how well they behave under Linux. Being designed for
\nWindows-on-ARM there is a risk Linux support is rudimentary at best. Stefan set out to test this and is reporting back here. Does a boot with UEFI work out of the box? Are all hardware features supported? Is the firmware for various drivers available? How is the performance?

\n

And the most important question: how does it stack up against an Intel based laptop from the same timeframe as daily driver for software development?

", + "track": { + "@color": "#6b6b6b", + "#text": "Community Building" + }, + "category": "Community Building", + "type": "Community Building", + "track-url": "https://www.sfscon.it/tracks/community-building-track-2024/", + "persons": { + "person": { + "@id": "5365", + "@organization": "Linaro", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/form-speakers/stefan-schmidt-154a3f3ea88624b4bb561acca60a4c6a.jpeg", + "@socials": "[{\"site\":\"https:\\/\\/sostec.de\\/\"},{\"linkedin\":\"https:\\/\\/linkedin.com\\/in\\/stefan-schmidt-84a7266\"}]", + "@bio": "\"Stefan Schmidt is a FOSS contributor for 16+ years now. During this time he\\r\\nworked on different projects and different layers of the Linux ecosystem. From bootloader and Kernel over build-systems for embedded to user interfaces. He was serving as a technical steering committee member of OpenEmbedded during the merge with the Yocto project, helped porting a 2.6 kernel to some early smartphones, and is the release manager of the Enlightenment Foundation Libraries as well as co-maintainer of the Linux IEEE 802.15.4 subsystem.\\r\\n\\r\\nAfter many years as a freelancer and long-time member of the Samsung Open Source Group he recently joined Huawei's newly founded Open Source Technology Center. Stefan is a regular speaker at open source related conferences.\"", + "@url": "https://www.sfscon.it/speakers/stefan-schmidt/", + "#text": "Stefan Schmidt" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c853b2d8cf2961a0c5ffb49c13fcde7933229", + "@unique_id": "2024day2event10", + "@bookmark": "1", + "@rating": "1", + "start": "09:40", + "duration": "00:35", + "title": "Building a no-drama community", + "url": "https://www.sfscon.it/talks/building-a-no-drama-community/", + "language": null, + "description": "

In this talk, we’ll focus on how the AlmaLinux project has chosen to foster a positive, drama-free community in the Linux ecosystem.

\n

\n

Whether you’re starting a new community or wrangling an existing one, it can be tempting to fall into the trap of bonding over shared enemies to see short-term, high-numbers growth. But, benny has spent the last 10 years building drama-free communities with a different kind of success.

\n

While many open-source projects rally members through shared frustrations or negativity, AlmaLinux took the more challenging path of uniting people through thoughtful dialogue and focusing on helping each other. By prioritizing respect, collaboration, and inclusivity, the AlmaLinux community grew healthier and stronger without the need for battle cries or infusing drama. Learn how this approach not only built a stable and thriving community around AlmaLinux, but is also setting a new standard for open-source communities – and proving that progress doesn’t have to be divisive.

", + "track": { + "@color": "#6b6b6b", + "#text": "Community Building" + }, + "category": "Community Building", + "type": "Community Building", + "track-url": "https://www.sfscon.it/tracks/community-building-track-2024/", + "persons": { + "person": { + "@id": "7344", + "@organization": "AlmaLinux OS Foundation", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/2024/10/benny_Vasquez_670ab8727de09670abede00c79.jpeg", + "@socials": "[{\"mastodon\":\"https:\\/\\/social.linux.pizza\\/@benny\"},{\"linkedin\":\"https:\\/\\/www.linkedin.com\\/in\\/bennyvasquez\\/\"},{\"twitter\":\"https:\\/\\/twitter.com\\/bennyvasquez\"}]", + "@bio": "\"benny is currently the Chair of the AlmaLinux OS Foundation, has a long history in business and community building, and a long and idealistic love of open source.\"", + "@url": "https://www.sfscon.it/speakers/benny-vasquez/", + "#text": "benny Vasquez" + } + }, + "bookmark": "1", + "rating": "1" + }, + { + "@id": "670d1b59c873c82047b6e2875f1f939d17f0c8b62fbc9", + "@unique_id": "2024day2event7", + "@bookmark": "0", + "@rating": "0", + "start": "10:20", + "duration": "02:40", + "title": "Voices of Free Software: connect, learn, inspire!", + "language": null, + "abstract": "FSFE Italian Community Meeting", + "subtitle": "FSFE Italian Community Meeting", + "description": "

You are invited to join the volunteers, supporters, and friends of the FSFE Italian Community!

\n

Join us to learn from one another, find inspiration, and tackle future challenges together in the realm of Free Software. As a volunteer, you have a platform to share your story, discuss the most pressing topics surrounding Free Software, and connect with fellow enthusiasts. We encourage you to collaborate with the community on common initiatives and work together to forge new paths forward.

\n

This is an hybrid event. You can join us either online or in person.

\n

REGISTRATION NEEDED AT: https://pretix.eu/noi-digital/sfscon24/4259648/

\n

Please note, the official language of the FSFE Italian Community is Italian, hence the event will be held in Italian.

\n

Supported by: FSFE – Free Software Foundation Europe

", + "track": { + "@color": "#49e547", + "#text": "Side Event - FSFE - Italian community meeting" + }, + "category": "Side Event - FSFE - Italian community meeting", + "type": "Side Event,FSFE,Italian community meeting", + "track-url": "https://www.sfscon.it/tracks/fsfe-italian-community-meeting-2024/", + "persons": { + "person": { + "@id": "5960", + "@organization": "FSFE - Free Software Foundation Europe ", + "@thumbnail": "https://www.sfscon.it/wp-content/uploads/form-speakers/marta-andreoli-fa9c0b907059fd5f818d4012846bb14e.jpeg", + "@bio": "\"Marta is an experienced event, marketing & communications leader. She has an extensive background in events coordination & planning, agency management, and campaign development having worked for international brands in the cultural and outdoor sector.\\r\\n\\r\\nShe is currently collaborating with the Free Software Foundation Europe (FSFE) as the Deputy Coordinator Italy, focusing on strenghtening the existing Italian free software community and fostering its growth.\\r\\n\\r\\nMarta\\u2019s core competencies are based on combining people centric, innovative and a human centred approaches within an environment of radical collaboration. She is currently furthering her studies in this field of Design Thinking at Hasso-Plattner-Institut in Berlin.\\r\\n\\r\\nShe values free software due the integration of ideas of critical consumption, minimalism and sustainability. She believes that the choices we make in the fundamental issues of freedom in software are fundamental issues in our lives and in the way we are shaping the future of our society.\\r\\n\\r\\nHer outgoing personality and the experience developed in forging relationships in her previous roles underpins her approach as Community Manager.\\r\\n\\r\\nDue to her strong interests in sustainability and ecology, Marta is especially interested in the interplay of Free Software with other fields such as ecology and one of her future goals would be to conduct a research project about the impact of digital technologies on the physical environment and its contribution to the so called Sustainable Development Goals.\\r\\n\\r\\n\\u201cLittle drops make the mighty ocean\\u201d (sono le gocce che fanno il mare) is her motto.\"", + "@url": "https://www.sfscon.it/speakers/marta-andreoli/", + "#text": "Marta Andreoli" + } + }, + "bookmark": "0", + "rating": "0" + } + ] + }, + { + "@name": "Seminar 4", + "event": { + "@id": "670d1b59c836baf427219a351d14e7aaf0fdcf3a53de9", + "@unique_id": "2024day2event13", + "@bookmark": "0", + "@rating": "0", + "start": "09:30", + "duration": "02:30", + "title": "Scratch Stories with Ada & Zangemann", + "language": null, + "track": { + "@color": "#a8a8a8", + "#text": "Side Event - MiniNOI x SFSCON" + }, + "category": "Side Event - MiniNOI x SFSCON", + "type": "Side Event,MiniNOI x SFSCON", + "bookmark": "0", + "rating": "0" + } + }, + { + "@name": "Seminar 1", + "event": { + "@id": "670d1b59c906471e89446fb96a90ef5476947cbdfe1ef", + "@unique_id": "2024day2event11", + "@bookmark": "0", + "@rating": "0", + "start": "16:30", + "duration": "00:30", + "title": "Winner proclamation and closing of the NOI Hackathon SFSCON Edition", + "language": null, + "track": { + "@color": "#a8a8a8", + "#text": "Side Event - Hackathon" + }, + "category": "Side Event - Hackathon", + "type": "Side Event,Hackathon", + "bookmark": "0", + "rating": "0" + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/tests/assets/sfs2024streaming.yaml b/src/tests/assets/sfs2024streaming.yaml new file mode 100644 index 0000000..1b702b0 --- /dev/null +++ b/src/tests/assets/sfs2024streaming.yaml @@ -0,0 +1,38 @@ +1-Main Track: Seminar https://maps.sfscon.it/l/sem1/ +2-Main Track: Seminar https://maps.sfscon.it/l/sem1/ + +1-Ethics, Policy, Legal & Economics: Seminar 1 - https://maps.sfscon.it/l/sem1/ +2-Ethics, Policy, Legal & Economics: Seminar 1 - https://maps.sfscon.it/l/sem1/ + +1-Data Spaces: Seminar 2 - https://maps.sfscon.it/l/sem2/ +2-Data Spaces: Seminar 2 - https://maps.sfscon.it/l/sem2/ + +1-Open Hardware: Seminar 3 - https://maps.sfscon.it/l/sem3/ +2-Open Hardware: Seminar 3 - https://maps.sfscon.it/l/sem3/ + +1-Developers: Seminar 4 - https://maps.sfscon.it/l/sem4/ +2-Developers: Seminar 4 - https://maps.sfscon.it/l/sem4/ + +1-Crane Hall BOF meetings: Crane Hall - https://maps.sfscon.it/l/kranhalle/ +2-Crane Hall BOF meetings: Crane Hall - https://maps.sfscon.it/l/kranhalle/ + +1-Community Building: Friday - Seminar 2 - https://maps.sfscon.it/l/sem2/ +2-Community Building: Saturday - Seminar 3 - https://maps.sfscon.it/l/sem3/ + +1-DevOps: Seminar 3 - https://maps.sfscon.it/l/sem3/ +2-DevOps: Seminar 3 - https://maps.sfscon.it/l/sem3/ + +1-Cybersecurity: Seminar 3 - https://maps.sfscon.it/l/sem3/ +2-Cybersecurity: Seminar 3 - https://maps.sfscon.it/l/sem3/ + +1-OW2: Seminar 4 - https://maps.sfscon.it/l/sem4/ +2-OW2: Seminar 4 - https://maps.sfscon.it/l/sem4/ + +1-Women* in tech: Seminar 2 - https://maps.sfscon.it/l/sem2/ +2-Women* in tech: Seminar 2 - https://maps.sfscon.it/l/sem2/ + +1-FSFE Italian Community Meeting: Seminar 3 - https://maps.sfscon.it/l/sem3/ +2-FSFE Italian Community Meeting: Seminar 3 - https://maps.sfscon.it/l/sem3/ + +1-Fediverse: Seminar 2 - https://maps.sfscon.it/l/sem2/ +2-Fediverse: Seminar 2 - https://maps.sfscon.it/l/sem2/ diff --git a/src/tests/assets/sfscon2023.xml b/src/tests/assets/sfscon2023.xml new file mode 100644 index 0000000..7d9b5bb --- /dev/null +++ b/src/tests/assets/sfscon2023.xml @@ -0,0 +1,2023 @@ + + + + sfscon-2023 + SFSCON 2023 + + + Main track + Artificial Intelligence track + Community track + Cybersecurity track + Developers track + Legal track + OW2 track + Public Money Public Code & Open Data track + Data4SmartHealth + ZOOOM project track + Open Data & Open Hardware track + Side Event - Hackathon + Side Event - School Reading + Closing - with a Tale of Software, Skateboards, and Raspberry Ice Cream + Side Event - FSFE - Italian community meeting + + + + + 08:30 + 00:30 + Check-in + + Main track + Main track + Main track,Main track + + + 18:40 + 00:30 + Closing of the first day + + SFSCON + SFSCON + SFSCON + + + + + 09:00 + 00:30 + Opening SFSCON 2023 + + <p>Opening SFSCON 2023</p> + + Main track + Main track + Main track,Main track + + Vincent Mauroit + + + + 09:30 + 00:30 + Coming soon + + Main track + Main track + Main track,Main track + + + 10:00 + 00:30 + Coming soon + + Main track + Main track + Main track,Main track + + + 10:30 + 00:30 + What the AI revolution means for Open Source, Open Tech and Open Societies + + <p>In the last year we saw the rise of AI systems like ChatGPT, Stable Diffusion, Dall-E and others. Large Language Models like GPT are enabling a lot of new innovative features and products which will revolutionise the world.<br /> +But this large autoregressive language models come with a lot of challenges that can have negative effects on the Open Source and Open Tech community. For example it’s unclear if in the future everyone will have access to the same ML models and training data. Can students, startups and open source people build innovative new products using AI in the same way the open source communities build Open Code and Open Tech. How can we make sure that the AI system are not discriminating underrepresented minorities? What is the energy consumption and CO2 emissions of this new big AI systems?<br /> +This talk will discuss the current fascinating trends in AI, the challenges and some possible solution. It will also cover the current Open Source AI features in Nextcloud and our Ethical AI framework.</p> + + Main track + Main track + Main track,Main track + + Frank Karlitschek + + + + 11:00 + 00:20 + European SFS Award 2023 + + <p>The award is given to a person who contributed to the introduction of the culture of Free Software.</p> + + SFSCON + SFSCON + SFSCON + + + 11:20 + 00:20 + The First Year of Eclipse Software Defined Vehicle: a successful “code first” approach + + <p>The most notable impact of using SW in the automotive domain is the decrease in fatalities as ADAS functions are more widely employed. On the other hand, SW complexity has seen an almost exponential growth reaching about 100 million lines of code.<br /> +Hardly any organization can tackle this challenge alone.</p> +<p>The Eclipse Software Defined Vehicle (SDV) Working Group ’s mission is to foster collaboration across industries to create an open technology platform for the software defined vehicle of the future. The working group community driven by its 40 member organization has chosen a “code first” approach to facilitate more agile and faster time-to-market software development.<br /> +After its formation about a year ago, the SDV WG has onboarded about 20 open source projects and is working on integrating several projects together to create “blueprints”. The frameworks emerging from these initial blueprints show the potential and benefits of utilizing different projects as components to build broader solutions to address more complex problems</p> +<p>This contribution introduces the SDV WG and Community, as well as its projects and capabilities.</p> + + Main track + Main track + Main track,Main track + + Sara Gallian + + + + 11:40 + 00:20 + Pyccel: write Python code, get Fortran speed + + <p>Imagine writing a pure Python library which can achieve the performance of Fortran or C/C++.<br /> +To this end we have developed Pyccel, which translates Python code to either Fortran or C, and makes the generated code callable from Python. The generated Fortran or C code is not only fast, but also human-readable; hence it can easily be profiled and optimized for the target machine.<br /> +Pyccel has a focus on high-performance computing applications, where the efficient usage of the available hardware resources is fundamental.<br /> +To this end it provides type annotations, function decorators, and OpenMP pragmas.<br /> +Pyccel is easy to use, is almost completely written in Python, and compares favourably against other Python accelerators.</p> + + Main track + Main track + Main track,Main track + + Emily Bourne + Yaman Güçlü + + + + 12:00 + 00:20 + Flaky tests – how to deal with them + + <p>Every QA/QE professional has encountered a flaky test at least once in their career. It may be a small, harmless bug that can be fixed in an instant, or it may take months to identify and fix it. This can be very costly and take a toll on your reputation and budget.</p> +<p>Don&#8217;t you want to know why flaky tests exist, how to identify them at an earlier stage, or even avoid them?</p> +<p>Join the investigation and we will figure it out together with you to find out the origins and roots of common flaky tests; to explore real cases and their solutions; to learn good practices.</p> + + Main track + Main track + Main track,Main track + + Juri Solovjov + + + + 12:20 + 00:20 + Psydac: a Python IGA library for large-scale simulations + + Ease of use and high performance in the open-source Python ecosystem + Ease of use and high performance in the open-source Python ecosystem + <p>Psydac is an open source library for isogeometric analysis (IGA), that is, a finite element method which uses the same basis functions of a CAD model (B-splines and NURBS).<br /> +It has been developed at the Max Planck Institute for Plasma Physics, with the goal of exploring advanced numerical methods for electromagnetism, magneto-hydro-dynamics, and plasma kinetics. It is completely written in Python, uses only open-source libraries, and can run large parallel simulations on high-performance computing facilities. It employs a domain specific language, automatic code generation, a transpiler, MPI communication, OpenMP multithreading, and parallel I/O. In this talk we explore the library architecture and its overall design philosophy, which can be applied to other domains.</p> + + Main track + Main track + Main track,Main track + + Yaman Güçlü + + + + 12:40 + 00:20 + The incredible machine: when automation backfires + + The hidden costs of automation + The hidden costs of automation + <p>Ever wanted to apply CI/CD principles and run tests for every change?<br /> +But it is too complex to set up the test environment, and launch the tests with all the updated parameters, solution? Automation!<br /> +Release your software implies a countless number of complicated steps, what solution? Automation!<br /> +So automation sometimes seems to be the solution, you automate some complex procedure and call the day.</p> +<p>But automation of a process sometimes can only hide the real problem and only delay the moment when you have to address the technical debt, and sometimes the automation can even also act as an amplifier of the technical debt.</p> +<p>Based on the experience matured on the field, this talk will be shown the hidden traps of automation, the drawbacks, and the lessons learned.</p> + + Main track + Main track + Main track,Main track + + Matteo Valentini + + + + 13:00 + 00:20 + Write High Performance Clients for RabbitMQ + + <p>In this talk, I will share our experience with writing clients for the RabbitMQ stream queues.<br /> +The RabbitMQ stream queues have been designed with performance as a major goal. So the clients have to be performant.<br /> +We will see how we increased the throughput and/or reduced the latency.<br /> +.NET and Go clients will be taken as examples. We will go through some real production code.</p> + + Main track + Main track + Main track,Main track + + Gabriele Santomaggio + + + + 13:20 + 00:20 + Ithaca: the Clean and Hexagonal Architectural Island + + An introduction to Clean and Hexagonal Architecture principles + An introduction to Clean and Hexagonal Architecture principles + <p>Get ready to sail from the Scylla and Charybdis&#8217;s shores of 3-layered architecture to the safe Ithaca refreshing shores of Clean and Hexagonal Architecture! Brace yourself as we surf from zero to Ulysses (a hero!), leaving behind monstrous code and embracing cleanliness and modularity. No more Odysseys; protect your source code navigation through Clean and Hexagonal Architecture principles!</p> + + Main track + Main track + Main track,Main track + + Luca Guadagnini + + + + 13:40 + 04:20 + Accessibility improvements for Uyuni + + <p>Uyuni is a powerful open source configuration and infrastructure management tool used by many organisations worldwide.<br /> +However, its current state presents accessibility challenges for people with disabilities. Its user interface relies heavily on visual elements, making it difficult for visually impaired users to navigate and access its features.</p> +<p>The presentation will dive into the ongoing work to increase Uyuni&#8217;s accessibility following the Web Content Accessibility Guidelines (WCAG).</p> +<p>Apart from focusing on the specific work for Uyuni, during the presentation, the participants will be also introduced to best practices for designing accessible WebUI and easy tools to be use during the software development.</p> + + Main track + Main track + Main track,Main track + + Marina Latini + + + + 14:00 + 00:20 + squash the flakes! + + how to minimize the impact of flaky tests + how to minimize the impact of flaky tests + <p>Flakes aka tests that don’t behave deterministically, i.e. they fail sometimes and pass sometimes, are an ever recurring problem in software development. This is especially the sad reality when running e2e tests where a lot of components are involved. There are various reasons why a test can be flaky, however the impact can be as fatal as CI being loaded beyond capacity causing overly long feedback cycles or even users losing trust in CI itself.</p> +<p>We want to remove flakes as fast as possible to minimize the number of retests required. This leads to shorter time to merge, reduces CI user frustration, improves trust in CI, while at the same time it decreases the overall load for the CI system.</p> +<p>We start by generating a report of tests that have failed at least once inside a merged PR, meaning that in the end all tests have succeeded, thus flaky tests have been run inside CI. We then look at the report to separate flakes from real issues and forward the flakes to dev teams.</p> +<p>As a result retest numbers have gone down significantly over the last year.</p> +<p>After attending the session the user will have an idea of what our flake process is, how we exercise it and what the actual outcomes are.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Daniel Hiller + + + + 14:20 + 00:20 + A comparison of Open Source FaaS technologies + + <p>As the demand for serverless computing continues to grow, the availability and choice of open source Function as a Service (FaaS) technologies are expanding rapidly. In this talk, we will present our experience in using some of the most popular open source FaaS platforms, compare them and discussing their features and characteristics.</p> +<p>The session will begin with an introduction to serverless computing and the key concepts behind FaaS. Throughout the talk, we will analyze various aspects such as ease of deployment, architecture, specific features, etc. We will examine real-world use cases and share insights on the strengths and limitations of each platform, allowing attendees to make informed decisions when choosing the right FaaS technology for their projects.</p> +<p>By the end of this session, attendees will have a better understanding of the open source FaaS landscape from our experience in production usage.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Andrea Avancini + Michele Santuari + Alberto Sillitti + + + + 14:40 + 00:20 + Coming soon + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + + 15:00 + 00:20 + F-Droid – The place for your FOSS Apps + + Why you should submit your FOSS Android App to F-Droid + Why you should submit your FOSS Android App to F-Droid + <p>On F-Droid you can find thousands of FOSS apps and games for Android. F-Droid brings you visibility in the FOSS community that will provide great feedback, open issues and eventually contribute to your FOSS project.<br /> +This presentation is about my personal experience with my games Ball2Box, Pocket Broomball and Sn4ke published on F-Droid. I will show you what F-Droid is, how it works and the steps needed to submit your project.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Simon Dalvai + + + + 15:20 + 00:20 + Coming soon + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + + 15:40 + 00:20 + Don’t let microservices kill you! + + A few ideas on architecting for the journey, not for the destination + A few ideas on architecting for the journey, not for the destination + <p>Microservices is a trend, and for a reason: it’s an architecture style that enables many desirable qualities on the systems that adopt it. By being distributed, it allows using the right technology stack for each capability, at the same time it eases the evolution of each fine-grained part of the system. But it comes with a price and offers significant risks, in particular related to larger portions of the architecture, and also the management of the entire infrastructure. Those costs and risks are the biggest challenges for a new system, when it adopts microservices from the start. But, on the other hand, starting with a monolith might require a big effort to migrate towards microservices in the future. Is that a check-mate?</p> +<p>Definitely not! Don’t let microservices kill you! In this talk, we’re going to see some ideas about architecting the system focusing on the journey. After all, we spend most of the time maintaining and evolving the system, than actually leaving it running “stably”. Also, by seeing how to start something new, we’re actually going to discuss the best architecture practices for any given time of the project.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + João Francisco Lino Daniel + + + + 16:00 + 00:20 + Automating git for development on large distributed teams + + A tour on aggressive use of git branching with automation for distributed cooperation + A tour on aggressive use of git branching with automation for distributed cooperation + <p>Contributing to large open source projects is not always a fast or smooth sailing process, and is often stalled simply due to the necessary human factor.</p> +<p>Contributions are rarely accepted quickly or as-is, and it&#8217;s not uncommon to rework each submission extensively by splitting the proposed change into separated fixes and features, into smaller incremental changes where each is tested independently or sometimes perform complete rewrites.</p> +<p>When the vetting of each submission can require weeks, contributors often feel blocked by the need to wait for their own or peer&#8217;s changes.</p> +<p>To cope in these scenarios, we present a few git branching and automation strategies that allow efficient wait-free development of interconnected changes, even across community members, in a truly distributed fashion.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Yuri D’Elia + + + + 16:20 + 00:20 + Kubernetes for IoT + + How kubernetes can help you quickly and automatically test and deploy new services + How kubernetes can help you quickly and automatically test and deploy new services + <p>While Kubernetes is primarily associated with managing cloud-native applications and microservices, it can also play a role in IoT deployments. Here are a few reasons why Kubernetes is relevant in the context of IoT:</p> +<p>1 Scalability: IoT systems often involve a large number of devices generating massive amounts of data. Kubernetes provides automatic scaling capabilities, allowing IoT applications to scale horizontally by adding or removing instances based on demand. This helps manage the increasing workload efficiently.</p> +<p>2 Resilience and High Availability: IoT applications require high availability to ensure uninterrupted operations. Kubernetes offers features like load balancing, fault tolerance, and self-healing capabilities. It can automatically restart failed containers or replace them with healthy instances, ensuring that IoT services remain available and resilient.</p> +<p>3 Resource Optimization: IoT deployments typically involve a mix of hardware devices with varying capabilities. Kubernetes can optimize resource utilization by efficiently distributing workloads across devices. It allows you to define resource constraints and priorities, ensuring that devices with higher capabilities handle more demanding tasks.</p> +<p>4 Service Discovery and Load Balancing: In an IoT ecosystem, devices and services need to discover and communicate with each other. Kubernetes provides built-in service discovery mechanisms, such as DNS-based service discovery and load balancing, allowing devices to locate and interact with services dynamically.</p> +<p>5 Security and Updates: Security is a crucial aspect of IoT systems, and Kubernetes helps in managing security at scale. It provides features like role-based access control (RBAC), network policies, and secret management to enforce security measures across IoT deployments. Additionally, Kubernetes facilitates rolling updates, allowing for seamless updates and patches without downtime.</p> +<p>6 Flexibility and Portability: Kubernetes abstracts the underlying infrastructure, enabling IoT applications to be deployed consistently across different environments, whether it&#8217;s on-premises, in the cloud, or at the edge. This flexibility allows organizations to migrate or distribute their IoT workloads as needed, making it easier to adopt hybrid or multi-cloud strategies</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Andrea Alfonsi + + + + 16:40 + 00:20 + Pitfalls and Mistakes When Dealing With Non-Functional Requirements + + <p>Non-functional requirements are essential to define the software architecture, and if they are not identified and handled correctly, the impact can be huge. This talk will present some common mistakes when handling non-functional requirements. It starts talking about the ones defined at the beginning of the project with a false certainty, which can become an even worst problem if they are never revised. Then, we will pass through the client that always wants the complete package and talk about the ones that are only remembered when some user complains. Of course, the talk does not forget about those that try to treat those very different non-functional requirements in exactly the same way. In the end, it will be presented some practices that can be used to avoid these problems.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Eduardo Guerra + + + + 17:00 + 00:20 + CrudIt: an opensource framework that makes developers autonomous + + Discover the low-code framework that accelerate app development + Discover the low-code framework that accelerate app development + <p>Nowadays application implementation requires a lot of different competencies that make it impossible for a single person to build an entire application. This led to the need for a big multi-competencies team and increasing in communication issues during the project. But what if we could implement an application without the need of implementing a backend? CrudIt does exactly that. CrudiIt is an open-source framework that enables a small team or a single front-end developer to create small SaaS applications without any knowledge of backend, cloud and sysadmin needs.<br /> +During the event, we will see how to implement a simple SaaS service using Crudit and how to use the framework to accelerate application development.<br /> +Moreover, we will discuss how to host a CrudIt application without any sysadmin competencies in the cloud, using free services.<br /> +This talk will unveil how, thanks to this powerful low-code framework, it is possible to save data without writing a line of code, even if you are working in complex, multitenant scenarios.<br /> +The talk will explain also how the framework is born, how it works internally and promote the opensource philosophy that brings to this library.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Daniele Fontani + Daniele Ciulli + + + + 17:20 + 00:20 + The Entando Marketplace + + Fueling the Capability Economy through FOSS Contributions and Empowering Community-driven Innovation + Fueling the Capability Economy through FOSS Contributions and Empowering Community-driven Innovation + <p>The Entando Platform, an open source Application Composition Platform (ACP), is transforming cloud-native application development. With a component-based approach, organizations harness the power of Entando to effortlessly create and consume reusable components, fostering collaboration and driving productivity.</p> +<p>At the heart of this transformation lies the Entando Marketplace. Entando Marketplace and the Entando Platform provides FOOS communities with a platform to collaborate, showcase their projects, access resources, and streamline development processes.</p> +<p>We delve into the principles and benefits of composable practices, which enable developers to build modular, scalable, and adaptable applications.</p> +<p>Furthermore, we highlight the essential role of the Entando Marketplace as a catalyst for the capability economy. FOSS contributors are empowered to share their expertise and contribute to the growing collection of reusable components, unlocking new possibilities for innovation and collaboration.</p> +<p>Join us to discover how the Entando Community fosters collaboration and embraces composable practices, paving the way for a vibrant FOSS ecosystem. Together, we can cultivate a community-driven capability economy that thrives on shared knowledge and collective innovation.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Emanuele Cerroni + + + + 17:40 + 00:20 + Improving developer experience in Open Source Projects + + How to ease contribution and management of your next big idea + How to ease contribution and management of your next big idea + <p>What makes an open-source project successful? How hard is it to add external people to an open project?<br /> +We at Nethesis have open source in our core with more than 400 public repositories that hold all of our company code. With the upcoming release of NethServer, we’re facing the excruciating question: how do we make it more appealing for developers?<br /> +Follow me in the changes we want to make to our processes to ease development and contributions, using big projects as examples and how even you can make a difference in the smallest of all codebases.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Tommaso Bailetti + + + + 18:00 + 00:30 + CLOSING with a Tale of Software, Skateboards, and Raspberry Ice Cream + + SFSCON + SFSCON + SFSCON + + Matthias Kirschner + + + + + + 10:30 + 01:30 + Ada & Zangemann + + Side Event - School Reading + Side Event - School Reading + Side Event,School Reading + + + 12:00 + 00:30 + Closing of Ada & Zangemann reading + + Side Event - School Reading + Side Event - School Reading + Side Event,School Reading + + + 14:00 + 00:20 + Welcome Data4SmartHealth 2023 + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Floriano Zini + Chiara Ghidini + Andrea Gasparella + + + + 14:20 + 01:00 + AI Algorithms for Digital Therapeutics + + <p>Digital therapeutics tackle diverse medical conditions, and AI algorithms, encompassing machine learning, natural language processing, and computer vision, are central to their success. They enable personalized, data-driven treatments, improving patient outcomes while potentially reducing healthcare costs. This talk explores AI&#8217;s pivotal role in digital therapeutics, where software interventions are reshaping healthcare.</p> + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Gianluigi Greco + + + + 15:20 + 00:20 + Software testing for remote proof of concept studies of digital therapies + + From the definition of a proof of concept study to the development and testing of the required technical infrastructure + From the definition of a proof of concept study to the development and testing of the required technical infrastructure + <p>Digital therapies are evidence-based therapeutic interventions that use software to prevent, manage, or treat a medical disorder or disease.<br /> +Not only they require carefully planned clinical studies, but they require also a suitable technical infrastructure not to lose or compromise relevant information. Consequently, careful software testing and monitoring is necessary to ensure that the technical infrastructure is working correctly during the study.</p> +<p>In this talk we will describe the entire process used for the analysis of the effectiveness of Nearine, a digital therapy for the management of depressive symptoms based on interoceptive stimulation through vibrations applied on the wrist.<br /> +We will start with the description of the remote proof of concept study used for the assessment of the effectiveness and potential adverse effects. After that, the technical infrastructure necessary for the study will be outlined.<br /> +Finally we will show how the usage of CatchSolve for software testing has decreased the risk of potential loss of information during the study.</p> +<p>The talk is the result of a joint collaboration between CatchSolve, software testing startup based in NOI Techpark, and Nearine, a new digital health and neurotechnology startup based in Bolzano.</p> + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Chiara Masci + Davide Montesin + + + + 15:40 + 00:20 + Gimme! Gimme! Gimme! (Some good algorithms) + + Wearable hackers meet e-health experts to make a first class open source Android app + Wearable hackers meet e-health experts to make a first class open source Android app + <p>Gadgetbridge, a free and open source project, has existed since 2015 to allow wearable device customers to use their hardware without being tied to the online services of the manufacturers.</p> +<p>The small but very focused and capable technical community working on the basic functionalities such as retrieving the various data from the wearables (detected activities, sleep, pulse per minute, peripheral oxygen saturation, &#8230;) lacks the expertise on specialised algorithms that could help to perform advanced analysis/diagnostics.</p> +<p>The goal of this talk is to explore a potential collaboration between our communities: Gadgetbridge provides local-only support for an extensive list of wearable devices and a community of engineers and privacy minded users, Data4SmartHealth might contribute advanced algorithms and AI on edge devices.</p> + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Daniele Gobbetti + + + + 16:00 + 00:20 + Home4Me – IoT and AI at service of disability + + An example of how the technology can help disabled people at home. + An example of how the technology can help disabled people at home. + <p>Home4Me is an innovative social project that tries to help disabled people at home (and not only at home).<br /> +The projects tries to keep in mind concrete problems that a person with disabilities lives at home and try to resolve them using IoT ad-hoc devices and a backend to access to the power of Cognitive and AI services.</p> +<p>On the market there are already IoT solutions, but expensive and not customizable to the needed of the disable person: here is where Home4Me want to be a possible solution.</p> + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Luca Nardelli + + + + 16:20 + 00:20 + Discussion on the first round of talks + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Chiara Masci + Davide Montesin + Daniele Gobbetti + Luca Nardelli + + + + 16:40 + 00:20 + Machine learning driven simulation of protein folding atomistic trajectories + + <p>The folding of proteins is an important biological process that determines the structure, role and functionality of proteins. It is often studied by molecular dynamics (MD) simulations, in order to obtain the folding trajectory of all the atoms in the system.<br /> +To date, pure MD simulations require huge computational resources and are still unable to access the timescales of folding processes that have biological relevance.<br /> +In my work, I am exploiting machine learning techniques and one recent AI milestone, Deepmind&#8217;s Alphafold, in order to create an advanced algorithm able to explore the folding trajectories within short computational times. It becomes possible to extract atomistic conformations from the folding pathways, and identify folding intermediates and long-lived states.<br /> +This method can be used to facilitate the identification of biologically relevant protein conformations, later to be used for pharmacological targeting or biophysical studies.</p> + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Alan Ianeselli + + + + 17:00 + 00:20 + Data-driven knowledge discovery from Brain Imaging of Alzheimer’s disease patients + + Artificial Intelligence to support the diagnosis of neurodegenerative disorders + Artificial Intelligence to support the diagnosis of neurodegenerative disorders + <p>Alzheimer’s disease (AD) is a chronic neurodegenerative disease which is largely responsible for dementia in around 6% of the population aged 65 and above. The availability of human brain data generated by imaging techniques, such as Magnetic Resonance Imaging, have resulted in a growing interest in data-driven approaches for the diagnosis of neurological disorders and for the identification of new biomarkers. The knowledge discovery process typically involves complex data workflows that combine pre-processing techniques, statistical methods, machine learning algorithms, post-processing and visualisation techniques. This talk presents specific research efforts in this direction, promising results, open issues and challenges.</p> + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Giuseppe Di Fatta + + + + 17:20 + 00:20 + Management of large genomic data with free software + + <p>The suite of free software tools created within the OpenCB (Open Computational Biology &#8211; https://github.com/opencb) initiative makes possible to efficiently manage large genomic databases.</p> +<p>These tools are not widely used, since there is quite a steep learning curve for their adoption, thanks to the complexity of the software stack, but they may be really cost-effective for hospitals, research institutions etcetera.</p> +<p>The objective of the talk is showing the potential of the OpenCB suite, the information to start using it and the advantages for the end users. BioDec is currently deploying a large OpenCGA installation for the Genetic Unit of one of the main Italian Hospitals, where data in the order of the hundreds of TBs will be managed and analyzed by bioinformaticians.</p> + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Michele Finelli + + + + 17:40 + 00:20 + Discussion on second round of talks and closing + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Alan Ianeselli + Giuseppe Di Fatta + Michele Finelli + + + + + + 11:20 + 00:20 + Self-hosted, Open Source Large Language Models (LLMs) + + What are the most promising projects and how good are they? + What are the most promising projects and how good are they? + <p>In recent years different groups have used the transformer architecture (a deep learning model) to train neural networks using large quantities of text. With the increase in compute power these models have grown to billions or even hundred of billions of parameters. As the model size grew, noteworthy abilities emerged. Such as the ability to generate text showing surprising reasoning skills to the point that the leading models can now successfully take college-level exams.</p> +<p>Currently some of the best and most famous models are proprietary and released to the public as a service. However a large Open Source community has emerged that tries to train and fine tune free models that can be used self-hosted. This is a challenging task due to problems with potential copyright issues with the training text, the large computational cost of the training itself and the supervised fine tuning step to adapt the model to its final use case.</p> +<p>In this talk I will give an overview on what the most promising projects in this space are and how they compare to the proprietary state-of-the-art models of the large players.</p> + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + Chris Mair + + + + 11:40 + 00:20 + Nextcloud – how to keep up with the fast moving IT world + + Artificial Intelligence within Nextcloud + Artificial Intelligence within Nextcloud + <p>At Nextcloud we believe that in order to achieve digital sovereignty we always need to stretch the boundaries. If new technologies and new ways of working come up, we work hard to enable our users to enjoy the same functionality without giving up control over their data and computing.</p> +<p>Over the last few months we saw a lot of innovation in the area of artificial intelligence which might change our way of working to a large extend. At Nextcloud we are happy that we can already provide the first features in this areas to our users. Unfortunately not all features work completely on-premise as of today. That&#8217;s why we introduced a &#8220;Ethical AI Rating&#8221; which provides transparency to the user and let them decide what to use today, while we are working hard to base more and more of this features on Free Software and on-premise solutions.</p> +<p>The talk will present Nextcloud&#8217;s AI-features, the Ethical AI Rating and how we try to approach innovations in a fast moving IT world, in order to bring similar functionality to the Free Software community.</p> + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + Björn Schießle + + + + 12:00 + 00:20 + From Novices to Innovators: Exploring the Possibilities with Free and Open Source AI Tools + + <p>Join me as we explore the world of free and open-source AI tools, empowering individuals and organizations to unleash their creativity and take their innovation to the next level.</p> +<p>Discover how some AI players are democratizing access to cutting-edge technologies and leveling the playing field, e.g. StabilityAI, etc. We will delve into the benefits and opportunities offered by some free and open-source AI tools, exploring their capabilities, potential applications, and the impact they can have on your projects.</p> +<p>Whether you&#8217;re a practitioner or just starting your AI journey, this talk is your gateway to discovering an exciting plethora of free and open-source AI tools, and how they can empower you to stay ahead of the curve in the modern era.</p> + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + Anjan Karmakar + + + + 12:20 + 00:20 + Optimizing Software Performance with Inductive Logic Programming: A Novel Approach + + <p>Concurrent execution of tasks can significantly improve its performance and efficiency. However, identifying which tasks can be executed concurrently and which tasks need to be executed sequentially can be a challenging task. In this talk, I propose using Inductive Logic Programming (ILP) to create a dynamic dependency graph for a given program. The graph can be used to identify which tasks can be executed concurrently and which tasks need to be executed sequentially. I demonstrate the effectiveness of this approach by applying it to a sample program and comparing its performance with a version that does not utilize concurrent execution. This talk presents a novel approach to creating a dynamic dependency graph for programs and highlights the potential benefits of using ILP for optimizing the performance of complex software systems.</p> + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + Enrico Zanardo + + + + 12:40 + 00:20 + Democratizing Language and Vision Technology + + A Retrieval-based Approach for Open Vocabulary Image Classification + A Retrieval-based Approach for Open Vocabulary Image Classification + <p>The advancement in language and vision models (LLM) has seen remarkable progress in recent years. However, the training of these large-scale models poses challenges in terms of time and computational resources, particularly with regards to deep learning models that require powerful GPUs. This has created a significant gap between Big Tech companies, who possess substantial resources to train LLM models, and academia, which often lacks the necessary means to contribute significantly in this field.</p> +<p>To address this issue, we propose an innovative open vocabulary framework called CaSED (Category Search from External Databases). Unlike traditional LLM models, CaSED does not rely on extensive training. Instead, it leverages retrieval techniques from an image-text knowledge base to classify or tag images automatically. By utilizing existing knowledge bases rather than requiring extensive training, CaSED eliminates the need for large computational resources.</p> +<p>In this talk, we will show the potential of low-budget approaches in the context of Language and Vision.</p> + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + Paolo Rota + + + + 13:00 + 00:20 + Web Search, fresh and local + + Deploying the PeARS search engine in regional communities + Deploying the PeARS search engine in regional communities + <p>It is widely believed that Web search engines require immense resources to operate, making it impossible for small communities to build alternatives to the dominant players. The PeARS project (https://pearsproject.org/) aims at changing the status quo by providing open-source search tools that can be used by anyone, anywhere. To achieve this, our team designs algorithms that run on entry-level hardware, using both traditional and cutting-edge machine learning techniques.</p> +<p>This talk will focus on a specific use case for PeARS, showing how the framework can easily be deployed to provide regional search solutions: for instance for local governments, small business communities, or minority speaker groups. We will see how the system can be trained and populated on a home computer in a few clicks and how it can be tailored to the specific community it is addressed to.</p> +<p>The project has received funding from the European Union under the Next Generation Internet programme.</p> + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + Aurelie Herbelot + + + + 13:20 + 00:20 + Image Generation with Diffusion Models + + How computers imagine our world + How computers imagine our world + <p>Recent machine learning developments saw a breakthrough in generating images. So-called Diffusion Models can create photo-realistic images from noise. With the help of an input text (prompt) we can guide the generation and produce matching images.</p> +<p>This technology opened new doors for creating digital art, modifying existing images, and creating stunning visual experiences. In the talk, we will find out how these algorithms work, introduce Stable Diffusion (a concrete implementation), and find out what its use cases are. We will see how text can be used to generate matching outputs but also take a look at more experimental features such as creating images from edges, outlines, or depth maps.</p> +<p>We will mainly focus on the open source text-to-image model Stable Diffusion, which has set new standards in image generation. With it also comes an active community that keeps it open source and accessible for everyone.</p> + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + Markus Pobitzer + + + + 13:40 + 04:20 + Coming soon + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + + 14:00 + 00:20 + The History of, and Path forward for, Copyleft and the GPL + + Copyleft, Software, Freedom, & You: Better Understanding Through History + Copyleft, Software, Freedom, & You: Better Understanding Through History + <p>Copyleft licensing has been the primary strategy of the FOSS community to guarantee users&#8217; rights to copy, share, modify, redistribute reinstall modified versions of their software. In our earliest days, we naïvely thought that the GPL would work like magic pixie dust; we&#8217;d sprinkle it on our code, and our code would remain free as in freedom.</p> +<p>The reality check that we&#8217;ve received over the last 35 years has been painful on this issue. Nevertheless, those who forget the past are condemned to repeat it.</p> +<p>This talk will not only discuss the primary past GPL enforcement efforts around the world, but also provide a whirlwind tour of how copyleft came to work how it does and discuss ideas and suggestions of future strategies in copyleft that, informed by this history, are our best hope for software freedom.</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Karen Sandler + + + + 14:20 + 00:20 + Reproducible Builds – the first 10 years + + an overview about reproducible builds, the past, the presence and the future + an overview about reproducible builds, the past, the presence and the future + <p>In this talk Holger Levsen will give an overview about reproducible builds, the past, the presence and the future. How it started with a small BoF at DebConf13 (and before), how it grew from being a Debian effort to something many projects work on together, until in 2021 it was mentioned in an executive order of the president of the United States. And of course the talk will not end there but rather outline where we are today and where we still need to be going, until we&#8217;ll all be running 100% reproducible software, verified by many.</p> +<p>And while Holger&#8217;s day to day work and this talk will have a Debian focus, reproducible builds in other project will be featured and not be left behind as Holger has been involved in Reproducible Builds since 2014 and has been working on reproducing Arch Linux, coreboot, Fedora, FreeBSD, NetBSD, OpenWrt and others. Other important software projects will also be covered and last not least Holger will also explain why you&#8217;ll want verifiable SBOMs and not just SBOMs.</p> +<p>So what is this talk about exactly again? &#8220;A build is reproducible if given the same source code, build environment and build instructions, any party can recreate bit-by-bit identical copies of all specified artifacts.&#8221;<br /> +(https://reproducible-builds.org/docs/definition)</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Holger Levsen + + + + 14:40 + 00:20 + AI Law & Ethics for sustainability corporate governance + + <p>In the era of AI, EU regulators struggle in definying a level playfield for the fruitful development of technology and utmost protection of fundamental rights and freedoms of individuals. The so-called AI Act is going to be approved by the end of 2023 and should come into force after a 2-year grace period. In any case most of the provision will be strongly risk-based and accountability oriented. In this fragmented and complex scenario, it is extremely interesting to observe how the use of AI law and AI ethics can serve the purposes of sustainability corporate governance, fostering innovation AND preserving fundamental rights and freedoms in a measurable and viable manner, having rights entering into business logics and decisions.</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Federico Sartore + + + + 15:00 + 00:20 + Windows and Office “tax” refund + + The right to install any software on any device and various cases about the refund of pre-installed software + The right to install any software on any device and various cases about the refund of pre-installed software + <p>Some manufacturers try to force to use the preinstalled software on the PC you acquire, sometimes also claiming that alternative software will not work properly.</p> +<p>On 2018 Luca purchases a Lenovo Tablet/PC and, since it comes with Microsoft Windows pre-installed, he requested the refund to Lenovo, but Lenovo denied to refund Luca. A court case was initiated, and Lenovo was condemned to pay a punitive damages of 20&#8217;000 euros for its abusive behaviour.</p> +<p>After this &#8220;historic&#8221; case, some other refund were request to other companies, such as HP, Dell, Microsoft, Acer, and again to Lenovo. Each OEM tried to deny the refund, with various reasons such as contractual clauses contained in the sale contract or in the same license agreement, or the need to delete the Product Key stored in the MSDM BIOS ACPI table and therefore they require to send the PC to their laboratories. These reasons have no valid legal basis, because – at least in Italy – the license agreement is a contract totally unrelated to the sale contract, so a third party may not impose any action on your material good, and the license agreement has remained without causal and economic justification, because not accepted and missed to be concluded.</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Luca Bonissi + + + + 15:20 + 00:20 + How do you really do GPL enforcement? + + aka Bringing software right-to-repair to the masses + aka Bringing software right-to-repair to the masses + <p>Enforcing the General Public License (GPL) to bring real software freedom to people can be very challenging in practice, but many of the steps in the process are straight-forward. As the only organization enforcing the GPL for Linux, Software Freedom Conservancy (SFC) receives a huge quantity of GPL violation reports, and needs to triage each one as the beginning of our process. The next step is called the &#8220;CCS check&#8221; (complete corresponding source check), a crucial but barely known activity that determines whether some candidate source code actually corresponds to the device/binaries that the candidate was provided for. We will discuss the CCS check in detail, providing examples and tips for doing your own checks.</p> +<p>Lastly, we&#8217;ll cover the offer check, something everyone can do to help in SFC&#8217;s efforts to bring real software right-to-repair to every device running Linux. Whether you want to check offers for source code, review a CCS candidate, or go even further with additional GPL enforcement work of your own, this talk will set you up for success.</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Denver Gingerich + + + + 15:40 + 00:20 + KYCS ‒ Know Your Code Sources (and let it be known) + + How Cyber Resilience Act is going to change FOSS forever and what can we do about it? + How Cyber Resilience Act is going to change FOSS forever and what can we do about it? + <p>CRA at the time of submission is still in a draft status, but it is relatively clear that it will impose a duty to make the software safer if and when it is distributed on the market as a final product.</p> +<p>Part of the safety requirements includes the obligation to collect and keep available for inspection a list of software components obtained from third parties, that is their provenance, and the insecurities obtained through mainly CVE scanning. Incidentally there is an obligation to support and provide security patches after the product is placed on the market (hint, open source rulez).</p> +<p>Open Source Software is not exempted per se, the current discussion is where the final burden and responsibility of complying, if at all, lies. In any case, whatever the outcome of such discussion is, open source projects should strive to ease up CRA compliance for their downstream adopters, if they want to keep them. We will concentrate on how open source projects that aim at being considered in an industry supply chain (including that of software industry) should strive to make the supply chain&#8217;s life easier, building on our experience with Eclipse Oniro and the toolchain and processes we have devised for it.</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Carlo Piana + Alberto Pianon + + + + 16:00 + 00:20 + Continuos compliance @ Linaro + + Linaro's open source innovation engine on steroids thanks to production grade and long term sustainability attributes. + Linaro's open source innovation engine on steroids thanks to production grade and long term sustainability attributes. + <p>Continuous compliance is rooted into Linaro&#8217;s everyday activities, whether the target is kernel development, a SOC Yocto SDK, an SDV, or consumer electronics project. Open source is at the center of today&#8217;s software innovation, ubiquitous across products and services and, as such open source needs to evolve from a mere innovation into a production-grade engine. Linaro, one of the leading linux kernel contributors, is perfectly positioned to support our customers and the entire open source community throughout this transition. This talk will showcase Linaro&#8217;s continuous compliance and production-grade processes, artifacts, and best practices and shed some light on what&#8217;s happening under the hood of one of the world leading open source organizations and contributors.</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Davide Ricci + + + + 16:20 + 01:40 + The current state of SBOMs and SPDX + + Updates for 2023 + Updates for 2023 + <p>Software Bill of Materials (SBOMs) are rapidly becoming increasingly important in the software supply chain. Software Package Data Exchange (SPDX) is a freely available ISO standard that defines the way of communicating information about software components. It includes, but is not limited to, metadata such as name and version, but also licensing and security information.</p> +<p>In this talk, we will present the latest updates from the ever-changing landscape of SBOMs and SPDX, focusing in real-world use cases. Familiarity with the concepts will not be assumed, as they will be briefly explained.</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Alexios Zavras + + + + 16:40 + 00:20 + ZOOOM Project track introduction + + Introduction to the ZOOOM project and presentation of the next-day activity + Introduction to the ZOOOM project and presentation of the next-day activity + <p>The ZOOOM Track aims to disseminate the findings of the ZOOOM project and show the intersection between legal and business aspects in IP management and value creation/capture in innovation ecosystems based on open-source software (and beyond).<br /> +In this talk the ZOOOM consortium will present the first results of the project discussed in the following talks and the activity for the second day workshop of the SFSCon.</p> + + ZOOOM project track + ZOOOM project track + ZOOOM project track + https://www.sfscon.it/tracks/zooom-project-track-2023/ + + Stefano Menegazzi + Alessandro Rossi + Amalia de Götzen + Andy Peruccon + + + + 17:00 + 00:20 + The ZOOOM Framework: Legal aspects of FOSS and beyond + + <p>License compliance efforts for software projects involve not only legal-oriented actions, but also governance elements such as organizational processes and community management. The larger the community or the organization working collectively, the more complex a compliance program for software projects may become. Free Software licenses being direct licensing models are easier to comply with in comparison to proprietary licenses. This talk will give an overview of the Free Software licensing compliance practices, including initiatives such as REUSE for streamlining copyright and license information for software projects.</p> + + ZOOOM project track + ZOOOM project track + ZOOOM project track + https://www.sfscon.it/tracks/zooom-project-track-2023/ + + Niharika Singhal + + + + 17:20 + 00:20 + The ZOOOM Framework: Business Aspects of FOSS and Beyond + + <p>Companies can engage in the 3Os in many ways and for different reasons. In many cases, strategic and competitive advantages are at the core of a company’s decisions, but in other cases, motivations can involve social and ethical considerations such as reciprocity, altruism, and democratization of knowledge. In this talk, we outline the main business-related motivations identified by the ZOOOM project for using and contributing to FOSS. Among them: pursuing competitive advantage, reduction of development costs, technological innovation, access to knowledge or assets, and interoperability. Based on the interviews conducted by the ZOOOM partners, we also discuss major challenges and risks that businesses leveraging the 3Os must navigate.</p> + + ZOOOM project track + ZOOOM project track + ZOOOM project track + https://www.sfscon.it/tracks/zooom-project-track-2023/ + + Seckin Celik + Davide Serpico + + + + 17:40 + 00:20 + The ZOOOM Framework: An Ecosystemic Perspective + + <p>In this talk, we analyse the ecosystem trend in the context of the 3Os, particularly FOSS. Based on the existing literature and data from ZOOOM interviews, we explore the potential roles that companies can play in open-source ecosystems, their interactions with the other players of the ecosystem, and their awareness about the impact that systemic elements have on their business. Most companies recognize the advantages of being embedded in ecosystems where the creation of new knowledge is facilitated by joint research work, collaboration, and expertise sharing. However, companies identify themselves into specific roles depending on their strategy, main business, network structures, and communities. Finally, we outline a multilevel framework of how business and innovation ecosystems complement each other in the realm of the 3Os.</p> + + ZOOOM project track + ZOOOM project track + ZOOOM project track + https://www.sfscon.it/tracks/zooom-project-track-2023/ + + Davide Serpico + Seckin Celik + + + + + + 11:20 + 00:20 + Community tidbits + + How to keep free software projects happy and healthy + How to keep free software projects happy and healthy + <p>Open source communities, when they have reached a certain size, face their very own set of challenges.</p> +<p>In the virtual world, timezones, language barriers and dealing with many e-mails can become a burden. In the real world, the organization of travels to project meetings, the planning of annual conferences in an easy to reach location, and even the shipment of gadgets around the globe turn out to be quite demanding.</p> +<p>While free software projects might have the same diversity and outreach as large organizations, they often have not the same resources at hand as established corporations. They need to be a bit more creative &#8211; but luckily, that&#8217;s in their DNA!</p> +<p>In the spirit of sharing knowledge openly, this talk intends to give some real-life examples of challenges your community may face, unexpected situations you might run into and how to solve them &#8211; sometimes in unconventional ways.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Florian Effenberger + + + + 11:40 + 00:20 + Transforming South Tyrol’s Economy: Empowering Tourism and Agriculture through Decentralized Applications (dApps) + + <p>The implementation of decentralized applications (dApps) holds immense potential for transforming two of the key economic sectors of South Tyrol: tourism and agriculture.</p> +<p>In the tourism industry, dApps can revolutionize the way services are offered and transactions are processed. By utilizing smart contracts and blockchain technology, dApps can enable transparent and secure processes for booking accommodations, tours, and activities. This ensures that tourists have direct access to reliable information-, while it eliminates the need for intermediaries, and reduces costs. Moreover, dApps can facilitate decentralized reviews and ratings, empowering visitors to make informed decisions based on authentic feedback from fellow travelers, i.e., fake reviews can be eliminated. This fosters trust and enhances the overall tourist experience.</p> +<p>In the agriculture sector, dApps can address key challenges faced by farmers and consumers alike. For example by implementing blockchain-based supply chain solutions, dApps can ensure traceability and transparency in the production, processing, and distribution of agricultural products. This allows consumers to verify the origin and quality of the products they purchase, promoting trust and supporting local producers. Additionally, dApps can facilitate direct farmer-to-consumer interactions through decentralized marketplaces, eliminating unnecessary middlemen and enabling fair and efficient transactions. This empowers farmers by providing them with a direct and secure channel to sell their products while offering consumers access to fresh and locally sourced goods.</p> +<p>By embracing decentralized applications, South Tyrol can unlock new opportunities for its tourism and agriculture sectors. These applications not only enhance efficiency and reduce costs but also increase customer trust, promote sustainability, and support the local economy. As a result, dApps have the potential to shape a thriving ecosystem that benefits both businesses and consumers in South Tyrol&#8217;s key industries.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Max Oberperfler + + + + 12:00 + 00:20 + Beyond Google & Apple duopoly + + FOSS alternatives for digital mobility + FOSS alternatives for digital mobility + <p>StatsCounter tell us that in May &#8217;23 the market share for the smartphones is split in this way: Android/Google 67.56%, iOS/Apple 31.6%. Which means the remaining is less that 1%. Today we are speaking about that 1%: available alternatives, future outlook and most important why we have to care of about that 1%. Spoiler: because a study of the University of Edinburgh and the Trinity College Dublin published in Q4/2021 proves what all we know &#8211; our smartphones leak our data constantly.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Roberto Foglietta + + + + 12:20 + 00:20 + Combatting E-Waste’s Environmental Harm With Free Software + + <p>Electronic waste, or e-waste, refers to discarded information and communications technology equipment such as laptops, smartphones, and large and small household appliances. In 2015, Achim Steiner of the UN Environment Programme (UNEP) described &#8220;an unprecedented tsunami of electronic waste rolling out over the world&#8221;. In 2016, 44.7 million tonnes of e-waste were generated, equivalent to 4500 Eiffel Towers. In 2019, the World Economic Forum determined e-waste to be the fastest growing waste stream in the world. In 2022, the amount of e-waste hit 59.4 million tonnes, a 33% increase since 2016. Given the economic, and not the technical logic driving the digital economy, devices are rendered obsolete before their time and the pile of e-waste continues to grow.</p> +<p>E-waste is the source of significant environmental harm. Production, transportation, and end-of-life treatment accounts for 80+% of a device&#8217;s carbon footprint over its operating life. Extracting rare earth metals consumes copious amounts of energy; moreover, mining is typically done in the Global South under miserable social conditions. The end-of-life treatment of e-waste means those same devices return to the Global South, resulting in toxic pollution entering the environment and harming workers.</p> +<p>Today, most devices have chips which need software to keep them running. Thus, software plays a crucial role in preventing e-waste: software determines a hardware&#8217;s minimum working requirements, and for how long a device remains safely in use. For most users, environmental harm driven by software has largely remained overlooked … let alone that we can already do something about it with Free Software.</p> +<p>In this talk I will provide a brief overview of the environmental harm from e-waste driven by software, and I will link the inherent values that come with a Free Software license to sustainable software design. By enabling full user autonomy and removing artificial vendor dependencies, Free Software means electronic devices that are otherwise unsupported by manufacturers remain in use. Lightweight and up-to-date software, free from bloat and energy-consuming ads, allows aging, less-powerful hardware to keep running and stay out of the waste bin. Software freedom means hardware freedom, and that means we are able to combat the environmental harm caused by e-waste with Free Software today.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Joseph P. De Veaugh-Geiss + + + + 12:40 + 00:20 + Building an Awesome Product by Creating a Community Around It + + How to effectively engage with your user community + How to effectively engage with your user community + <p>In today’s competitive market, it has become crucial to build a thriving community of developers and users around your product. Gone are the days when code alone could make a product successful; the human element now plays a pivotal role. This community becomes the face and representation of your project to the outside world. Having worked on our Open Source project for over 8 years, I have accumulated a wealth of proven strategies for attracting contributors, training newcomers, and expanding the user base. In my presentation, I will explain how to effectively engage with your user community in order to achieve the following objectives: collect feedback, share use cases, contribute to documentation, identify bugs and collaboratively develop code<br /> +Because improving your product goes beyond just writing code; it involves nurturing a strong community of people.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Alessio Fattorini + + + + 13:00 + 00:20 + Sustainability of Open Source Software and Potentials in Developing Countries + + <p>Although developing countries hold a lot of potential in software development and research, the licensing cost of commercial software, platforms, and online services serve as a hindrance in their widespread adoption. Open source software can be a very useful and viable solution in this regard. On one hand it can fill up the need for less costly software alternatives. On the other hand, it can reduce the adoption of pirated versions of commercial software by individuals and groups to make up for the cost factor. Furthermore, with more adoption of open source software in the developing countries, it will also encourage and engage more programmers from the developing countries to maintain the open source software and to contribute to it, adding to the sustainability of various open source projects and thus benefiting open source software development beyond borders. The speaker, who has the experience of working in both the developing countries as well as here in Alto-Adige/Sud-Tirol region, will share insights on this topic from both of these diverse perspectives.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Abid Munir Bajwa + + + + 13:20 + 00:20 + Sharing the power of appreciation: Celebrating ‘I Love Free Software Day’ + + <p>In the realm of Free Software, expressing gratitude towards Free Software contributors often goes unnoticed. The &#8220;I Love Free Software Day&#8221; (https://ilovefs.org) provides a platform for individuals and organisations to do exactly this, showing appreciation. But it is crucial to recognize that our appreciation for Free Software should extend far beyond this single day. This talk highlights the significance of the &#8220;I Love Free Software Day&#8221; as a platform for expressing support, love, and gratitude towards the developers and contributors who make Free Software possible.</p> +<p>Throughout the presentation, we will showcase memorable moments and successful initiatives from past celebrations, demonstrating the collective efforts to acknowledge and honor the impact of Free Software. We will discuss ideas and strategies for making the upcoming &#8220;I Love Free Software Day&#8221; even more remarkable.</p> +<p>However, it is essential to emphasize that our expressions of love and support for Free Software should not be limited to just one day. While the &#8220;I Love Free Software Day&#8221; serves as a catalyst for celebration, it should inspire us to continue demonstrating our gratitude throughout the year. We will explore ways to incorporate ongoing appreciation into our daily lives, such as contributing to Free Software projects, advocating for their importance, and recognizing the efforts of developers and contributors regularly also in a financial way.</p> +<p>By extending our appreciation beyond a single day, we can cultivate a culture of continuous support for Free Software. We invite everyone interested in Free Software to join us in this endeavor, as we strive to create an environment where gratitude and acknowledgment become integral parts of our interactions within the Free Software community.</p> +<p>Let us embrace the &#8220;I Love Free Software Day&#8221; (https://ilovefs.org) as a starting point, a reminder of the significance of Free Software, and a call to action to express our love and support throughout the year. Together, we can build a community that values and appreciates the tireless efforts of Free Software developers and contributors, making a lasting impact on the future of software freedom.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Bonnie Mehring + + + + 13:40 + 01:40 + MindsHub no-profit + + Makers, programmers, enthusiasts with a focus on education + Makers, programmers, enthusiasts with a focus on education + <p>MindsHub is a no profit association from Ala (near Trento), which provides a space for enthusiasts to develop skills and ideas in informatics, electronics, robotics and 3D printing: https://mindshub.it/.<br /> +Everything started back in 2016, when we organized CoderDojo Vallagarina to introduce young boys and girls to programming. The association has since grown to have multiple running projects, and over 20 active members, aging 12 years old and up. We meet once a week to learn from each other and bring the activities forward.<br /> +We created an autonomous farming robot (featured at Maker Faire Rome among the best 10 projects), we delved into online security with schools, we developed a FOSS app to report and collect garbage, we spoke to Samantha Cristoforetti on the ISS, &#8230;</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Fabio Giovanazzi + Alessio Zeni + + + + 14:00 + 00:20 + RIOS (Rete Italiana Open Source) presents latest updates on the OSPO Alliance and the Good Governance Initiative. + + <p>The Good Governance Initiative (GGI) proposes a methodological framework to assess open-source awareness, compliance and governance in any kind of organizations, helping them to structure and improve the use of FOSS towards an OSPO. This presentation will highlight the main progresses and new features achieved since last year, such as the translation of the GGI Good Governance in five languages, the recent Success Stories presented in the OnRamp meeting series, and many more. Stefano Pampaloni, vice-president of the Italian Open Source Network, will present the latest developments, elaborating on the RIOS Network&#8217;s contribution to the project.</p> + + OW2 track + OW2 track + OW2 track + https://www.sfscon.it/tracks/ow2-track-2023/ + + Valentina Del Prete + Stefano Pampaloni + + + + 14:20 + 00:20 + The CORD-19 Topic Visualizer + + Exploring the evolution of research topics during the COVID-19 pandemic + Exploring the evolution of research topics during the COVID-19 pandemic + <p>The COVID-19 pandemic reshaped research across various fields, producing an unprecedented flood of articles. In response, several open-access corpora were created; among them, the COVID-19 Open Research Dataset (CORD-19) collected over a million articles in 2.5 years.</p> +<p>In this presentation, we introduce the CORD-19 Topic Visualizer (CORToViz), a method and tool for exploring CORD-19&#8217;s scientific abstracts. It uses a stack of modern open source technologies to cluster articles and mine temporal topics. CORToViz has an interactive dashboard for quick topic visualization, time series tracking, and statistical testing.</p> +<p>We will show the results extracted with CORToViz, which allowed us to visualize and tell in a synthetic way what happened to react against COVID-19, comparing it with the key moments of the pandemic. The high adaptability of our approach suits any textual document corpus, and it lends itself easily to exploring new challenging fields of research, such as climate change.</p> +<p>CORToViz represents the first prototype of a series, which we aim to develop within the NGI Search Program, under the TETYS project (Topics Evolution That You See), aiming to build the next-generation Web topics explorer.</p> + + OW2 track + OW2 track + OW2 track + https://www.sfscon.it/tracks/ow2-track-2023/ + + Francesco Invernici + + + + 14:40 + 00:20 + Can AI counteract Health-related Fake News? + + HeReFaNMi (Health-Related Fake News Mitigation): an open-source project to counteract health-related misinformation + HeReFaNMi (Health-Related Fake News Mitigation): an open-source project to counteract health-related misinformation + <p>HeReFaNMi (Health-Related Fake News Mitigation) is an NGI-Search-funded project to give back trustworthiness to the Internet community by tackling fake news spread. Other than the well-known cyber threats, several factors have been undermining the Internet search experience lately. One of the pandemic&#8217;s lessons learned concerns the health-related fake news spread over websites and social media networks. Some nefarious effects came as a non-negligible hesitancy towards national healthcare systems&#8217; guidelines. Since then, several AI-powered solutions have been developed to counteract fake news circulation using supervised and unsupervised learning. The task is challenging due to the need for continuous updating upon introducing new scientific findings. The so-called data drift and catastrophic forgetting also affect the effectiveness of AI-powered classification methods.<br /> +LLMs (Large Language Models) have recently made their way through the AI landscape by delivering unprecedented performances over text analytics, mining, question and answering systems, and text generation. However, LLMs suffer from Hallucination, meaning they can elaborate contents that are unreliable as a source of truth even when fine-tuned on scientifically sound datasets.</p> + + OW2 track + OW2 track + OW2 track + https://www.sfscon.it/tracks/ow2-track-2023/ + + Alessandro Bruno + + + + 15:00 + 03:00 + Coming soon + + OW2 track + OW2 track + OW2 track + https://www.sfscon.it/tracks/ow2-track-2023/ + + + 15:20 + 00:20 + Videobooks + + Augmenting the Reading Experience with Synchronous Reading and Listening + Augmenting the Reading Experience with Synchronous Reading and Listening + <p>Recent open source libraries apply machine learning for forced alignment of speech and text and make it possible to produce text that is synchronized to audio in various languages. This makes it possible to produce a new type of reading experience: the videobook! This contribution talks about a pilot project that aims to produce videobooks based on hundreds of audiobooks and texts that are already in the public domain (such as librivox and the gutenberg project). Possible applications in the educational domain are discussed: such as language learning, accessibility and e-learning applications</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Michael Schlauch + + + + 15:40 + 00:20 + Can we sustain Software Freedom in the mobile world? + + <p>Laptops and servers are running Linux based free software just fine these days. But what about the small and powerful devices in our pockets that we carry everywhere?</p> +<p>Can we achieve the same level of freedom and choice on smart phones? Can we make that usable for everyone?</p> +<p>This talk gives a short overview about the current state of Linux on mobile devices.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Nicole Faerber + Guido Günther + + + + 16:00 + 00:20 + Process Analysis Tools 4 Public Utility + + <p>Background: Process Mining is a growing technology in recent years that consists of integrating specific process mining tools with management software systems to analyze process data and provide feedback on process efficiency, potential bottlenecks, and resource utilization in a production and business context.</p> +<p>Aim: The aim of this presentation is to showcase open source process mining tools, and how these could be integrated with other publicly available software in order to help make meaningful decisions driven by real data. This could be applied to any business context, including non-profit organizations and services to the public and community.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Martina Burlando + + + + 16:20 + 00:20 + TOGETHER IS BETTER + + Can competitors work together with open source ? + Can competitors work together with open source ? + <p>When community and Open source mindset are part of a company culture, it becomes easy to plan and project new products (even with potential competitors). In an open source project, all or part of the produced material is made publicly available for others to use, under certain conditions. The mistery of the &#8220;unpaid programmer&#8221; disappears when corporations see benefits coming from other members in the project and even fear of &#8220;loosing control&#8221; is balanced with continuous feedbacks from developers and users. This is the story of a new project&#8230;</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Nicola Filippini + + + + 16:40 + 00:20 + BIM2FEM: From Building Information Modeling to Finite Element Analysis + + An open-source-based workflow + An open-source-based workflow + <p>The construction industry currently lacks automated open-source-based workflows for thermal and structural analysis of buildings. The Finite Element Method (FEM) represents the state-of-the-art approach for structural and thermal analysis in construction engineering. With the recent increase in computing power, complex models can now be analyzed within a feasible amount of time. However, the integration of FEM into Building Information Modeling (BIM) workflows remains an active area of research. While some commercial software provides interfaces and plug-ins for BIM-integrated finite element analysis, their capabilities are limited and their use is restricted to the corresponding commercial software. Customizable open-source-based approaches exist, but they lack consistent and robust workflows. A consistent data flow of material properties and boundary conditions is essential but remains a challenging task that has not yet been sufficiently addressed. Fraunhofer Italia has developed a workflow based on the open IFC-standard and open-source FEM software packages, which has been tested and validated through the creation of a software prototype. This talk will introduce the developed workflow and demonstrate the prototype’s functionalities through selected use-cases.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Julius Emig + + + + 17:00 + 00:20 + Open Tracing Tools: Overview and Comparison + + <p>Open Tracing Tools are software tools that enable the monitoring, debugging, and optimization of distributed software architectures. They provide a way to trace and understand the flow of requests and data through various components of a distributed system.</p> +<p>In the last months, the authors conducted a study to select and compare 30 tracing tools using a systematic literature review approach. They analysed the open source licence, features, architecture, the collected data, interoperability, but also the popularity, benefits, and issues of each tool, using topic modelling and sentiment analysis. The results offer a systematic comparison of the selected tracing tools.</p> +<p>We&#8217;ll say it in advance: there is one perfect tool that is better than all the others but this talk will present a) a brief overview of what open tracing tools are and the OpenTelemetry standard, b) the process followed in the study and c) the obtained results. For those that want to read the entire report, here it is: https://arxiv.org/abs/2207.06875.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Andrea Janes + Xiaozhou Li + Valentina Lenarduzzi + + + + 17:20 + 00:20 + Providing and Receiving Feedback in Open Source + + <p>For open-source developers, user feedback provides a direct line between both parties, offering valuable insights. That&#8217;s at least how the theory goes In reality, the feedback is often skewed, and the minority of negative loudmouths sometimes overshadows the silent majority of satisfied and grateful users. Needless to say, this doesn&#8217;t do any favors to open-source developers.</p> +<p>Is there a way to improve the situation? Join this session and learn how you, as an open-source developer, can deal with feedback and other challenges unique to the open-source development model.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Dan Čermák + + + + 17:40 + 00:20 + Shaping the future with Data + + How Data can become the most valuable asset for a business/ company + How Data can become the most valuable asset for a business/ company + <p>How to launch, build and scale a business with DATA.<br /> +Support any decision making process<br /> +Become a value for people<br /> +Can help in the change management</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Zemourda Aissaoui + + + + + + 11:20 + 00:20 + Decoding the Corporate Maze + + Empowering Exposure Assessment through Open Software and OSINT + Empowering Exposure Assessment through Open Software and OSINT + <p>Embark on a remarkable expedition as we delve into the realm of Exposure Assessment. Unlocking its wonders, we will navigate this captivating process exclusively utilizing Open Software and OSINT. With a mere glimpse into a company&#8217;s domain, we will traverse the intricate labyrinth of their infrastructure, diligently seeking a potential access point into their corporate system.</p> + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + Francesco Pavanello + + + + 11:40 + 00:20 + Predict security attacks in FOSS + + Why you want it and how to do it + Why you want it and how to do it + <p>FOSS is here to stay, displacing malevolent privative counterparts—great!<br /> +FOSS exposes bugs to be found and fixed by the community—great!<br /> +FOSS shows security issues than can be exploited by attackers—gr..what?<br /> +In the last decades, source code transparency has made the job of black-hat hackers increasingly easy. We now have security websites exposing vulnerabilities and even exploits online—and despite good practices like responsible disclosure, it is the sheer amount of (external) code what makes everyone ultimately vulnerable. In plain words, nobody&#8217;s safe.</p> +<p>From that base, this talk puts forward the need for a concept of *probability of future exploits*. This is crucial for project management, but also at developer level, to see the risks of not upgrading (or yes upgrading!) a dependency. We show how this probability can, and must, be computed from a project&#8217;s dependency tree, in a manner that only the use of FOSS can allow. We also show that the development history of the project and its dependencies is key to getting useful results.</p> +<p>Finally, we merge the dependency tree and development history of a project into a white-box model, which we use to estimate the probability of future exploits. We show how to do it for the Java-Maven environment, for which we can use the FOSS tool &#8216;FIG&#8217;. FIG, written in C++ and released under GPLv3, was designed for statistical estimations and can compute the probability of attacks in complex scenarios like the ones at hand.</p> + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + Carlos Esteban Budde + + + + 12:00 + 00:20 + Software freedom primer on Self Sovereign Identity + + Let's stop feeding the surveillance economy + Let's stop feeding the surveillance economy + <p>The federated identity ecosystem is one of the key mechanisms by which the platform and surveillance economy has grown into today&#8217;s shape, mostly on the shoulders of a vast number of Open Source contributions. Self Sovereign Identity is a privacy, freedom, control first approach to managing identity in a decentralised and secure way. In his talk, Georg Greve will provide a primer into SSI, how it works, and share insights from developing the SSI stack within the Eclipse Cross Federation Services Components, formerly Gaia-X Federation Services.</p> + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + Georg Greve + + + + 12:20 + 00:20 + Opensource to help increase organizations Cybersecurity posture + + Cybersecurity is a compulsory, tough and expensive task for all organizations + Cybersecurity is a compulsory, tough and expensive task for all organizations + <p>Cybersecurity is a compulsory, tough and expensive task for all organizations, private and public, large , medium and small.<br /> +No one can ignore it anymore, and building a viable Cybersecurity strategy is a complex task that needs to balance budget, keeping up with attacker technologies, available skills and a plethora of expensive tools on the market.<br /> +Let&#8217;s discus s on how available Opensource solutions may greatly help ours organizations to be more effective in implementing their Cybersecurity posture, while optimizing available budget.</p> + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + Carlo Falciola + + + + 12:40 + 00:20 + Technical leverage analysis in the Python ecosystem: lessons learned + + <p>[Context:] Technical leverage is the ratio between dependencies (other people&#8217;s code) and own codes of a software package. It has been shown to be useful to characterize the Java ecosystem and there are also studies on the NPM ecosystem available. [Objective:] By using this metric we aim to analyze the Python ecosystem, how it evolves, and how secure it is, as a developer would perceive it when deciding to adopt or update (or not) a library. [Method:] We collect a dataset of the top 600 Python packages (corresponding to 21,205 versions) and used a number of innovative approaches for its analysis including the use of a two-part statistical model to deal with excess zeros, a mathematical closed formulation to estimate vulnerabilities that we confirm with bootstrapping on the actual dataset. [Results:] Small Python package versions have a median technical leverage of 6.9x their own code, while bigger package versions rely on dependencies code a tenth of their own (median leverage of 0.1). In terms of evolution, Python packages tend to have stable technical leverage through their evolution (once highly leveraged, always leveraged). On security, the chance of getting a safe package version when choosing a package is actually better than previous research has shown based on the ratio of safe package versions in the ecosystem. [Conclusions:] Python packages ship a lot of other people&#8217;s code and tend to keep doing so. However, developers will have a good chance to choose a safe package version.</p> + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + Ranindya Paramitha + + + + 13:00 + 00:20 + MBBS: A Multimodal Behavioral Biometric Scheme for Smartphone User Authentication + + <p>In this presentation, we present MBBS, a tetra-model behavioral biometric-based authentication scheme designed specifically for smartphones. MBBS utilizes four distinct modalities to authenticate users: touchscreen swiping patterns, taps on &#8220;text-independent&#8221; 8-digit numbers, name writing on the touchscreen, and micro-movements of the hand during the entry process. To enhance overall accuracy and security, MBBS incorporates a state-of-the-art Generative Adversarial Network (GAN) powered data augmentation architecture. This innovative approach allows us to demonstrate the effectiveness of MBBS using both real user samples and augmented samples, consisting of a combination of &#8220;real&#8221; and &#8220;GAN-generated&#8221; data, on an actual Android device. One of the key advantages of MBBS is its high usability, as it eliminates the need for users to remember any secret information. Instead, it leverages users&#8217; familiarity with natural processes, thereby increasing accuracy in real-time by employing GAN technology, all without requiring a large sample size from users. We will also present preliminary results from our performance, security, and usability analysis, which showcase a positive opinion regarding the effectiveness of our developed authentication mechanism.</p> + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + Attaullah Buriro + + + + 13:20 + 00:20 + Recommending security fixes for weak open-source code with AI + + <p>Technical debt is a metaphor that describes not-quite-right code introduced for short-term needs. The effort to refactor it increases if it remains for a long in the software. When developers are aware of it and admit it in source code comments, the debt is called Self-Admitted Technical Debt (SATD). Thus, SATD indicates weak code that developers are aware of. The question is whether they are aware that this code may be vulnerable to attacks. This presentation will illustrate how artificial intelligence can be employed to recommend security fixes for vulnerabilities to developers.</p> + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + Jorge Melegati + Moritz Mock + Barbara Russo + + + + 13:40 + 04:20 + Coming soon + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + + 14:00 + 00:20 + Free Software and AI in Europe + + How Europe regulates AI and Free Software + How Europe regulates AI and Free Software + <p>In this talk, I will present the latest developments in EU legislation and activities on AI and what role Free Software plays in this.</p> +<p>The European Union&#8217;s AI Act is the first comprehensive set of regulations for the artificial intelligence. Also Free Software plays a role in this regulation. I will shed light on the upcoming rules and evaluate what this means for Free Software, AI but also other upcoming regulations.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Alexander Sander + + + + 14:20 + 00:20 + Why Do We Need A Next Generation Internet? + + Improving the Internet as a platform, one Free Software at a time + Improving the Internet as a platform, one Free Software at a time + <p>The Internet today forms the backbone of the digitisation of our society and economy. As connectivity increases, the boundaries between the real and digital world get increasingly blurred. However, there has been an erosion of trust in the Internet following revelations about the exploitation of personal data, large-scale cybersecurity and data breaches, and growing awareness of the proliferation and impacts of online disinformation.</p> +<p>What can be done to improve the Internet as a platform for future generations? What initiatives are currently in place to build key technological blocks of an Internet that supports human-centric values, such as privacy, security, and inclusion, while reflecting the values and norms all citizens should enjoy in Europe?</p> +<p>This talk will explore why the current state of the internet must be re-imagined and re-engineered in order to support healthy societies, the existing European Commission initiative to work towards doing so, and the role of Free Software in accomplishing these goals.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Gabriel Ku Wei Bin + + + + 14:40 + 00:20 + Interoperable Europe Act: A real game changer? + + <p>Interoperability is a core element of the ongoing digitalisation of Europe. With the Interoperable Europe Act, the EU is aiming to create a dedicated legal framework for interoperability and to enhance cross-border digital public services across the European Union. This talk will give an overview of the state of play of this proposed regulation in the ongoing EU legislative process, some of its flaws, and the important role that Free Software and its community can play in it.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Lina Ceballos + + + + 15:00 + 00:20 + The Brand-New Version of IGis Maps + + The “swiss knife” developed and used in South Tyrol for the integrated management of Geo Referenced data and related information + The “swiss knife” developed and used in South Tyrol for the integrated management of Geo Referenced data and related information + <p>2023 saw the launch, after a long and well-structured revision and development process, all based on a fruitful collaboration between several departments of the Autonomous Province of Bolzano, most of the township in South Tyrol, Informatica Alto Adige (SIAG &#8211; Technical partner) and the Consortium of Municipalities of the Province of Bolzano, of the new version of the integrated geographic data management system IGis Maps. In use for years in South Tyrol, has in the Consortium one of its most enthusiastic contributors and supporters.</p> +<p>The very first version was released about eight years ago and its implementation was based on the idea of creating a multi-purpose GIS management system that could support different types of users, that was highly customizable, and, above all, that could be widely shared among the various management entities, both public and private, present within our territory.</p> +<p>After years of use and ad-hoc developments, we can finally present the new version of the IGis Maps system, which incorporates all the technical and technological improvements we realized the system needed.</p> +<p>It was not just a major update together with new functionalities combined inside the previous software structure, but a true re-engineering that led, among other things, to a new and more efficient user interface, a major advancement regarding the internal security, an optimization and improvement of the entire editing section as well as an optimization of the section regarding the automatic geo-processes.</p> +<p>A mobile version is currently under development to better support any field activities, for which a very powerful option will be included, the possibility of creating special work sessions in off-line mode so as to be able to operate even in areas without a proper cellular line network coverage.</p> +<p>Other very important peculiarities concern that the system is developed using a totally free software code and infrastructure, that a detailed documentation has been produced to ensure sustainability to any further future evolution, even in case of technical partner turnover, and finally, that by taking advantage of the high standards and levels of security access can be guaranteed to any type of user. From professional users, through dedicated access and qualifications or, using the ordinary SPID, to the private citizen.</p> +<p>We will show examples of how different types of users and stakeholders now permanently use the system for the management of a variety of tasks related to their activities, and how it was possible to customize IGis Maps to create visualization and data management contexts that best meet their needs.</p> +<p>We will also present a related project concerning the updating and the correction of the new technical basal cartography, built upon the new Basic Core specification, achieved through the automatic conversion implemented by the SIAG team starting from the previous National Core cartography. With the new IGis Maps it was possible to create an advanced editing and management environment that allow both experienced and less advanced users to interact with this important new informative layer to fill all those gaps and errors that are more than normal to discover following an important automatic translation action such as the one carried out for the Basic Core project.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Edoardo Scepi + + + + 15:20 + 00:20 + Let’s monitor implementation of Free Software Policies! + + How to sharpen the demand for public code across Europe and monitor progress with TEDective + How to sharpen the demand for public code across Europe and monitor progress with TEDective + <p>For six years, the Free Software Foundation Europe has been calling with a broad alliance for publicly funded software to be published as Free Software. This initiative has become a great success: Our demand &#8220;Public Money? Public Code!&#8221; has found its way into government strategy papers, party programs, as well as coalition treaties, and is being discussed in public administrations across Europe.</p> +<p>At the same time, we see less progress than expected and vendor lock ins remain a crucial issue. Digital sovereignty is redefined bypassing Free Software. There is openwashing in publicly funded companies, and government projects in favour of Free Software remain empty words. Public statistics on the procurement of Free Software are largely unavailable.</p> +<p>It is therefore no longer enough to promote the idea of &#8220;Public Money? Public Code!&#8221;. We as the Free Software community should be even more vigilant than before – continuing to praise small steps in the right direction, but pointing out and criticising omissions and lack of implementation. We should become more like watchdogs.</p> +<p>In the talk we will look at some examples of lack of implementation of Free Software policies. We will discuss how we, as civil society, can identify such shortcomings and how to deal with them. We will present our initiative TEDective – a free-software solution that makes European public procurement data explorable for non-experts, aiming to provide you with a powerful tool to keep an eye on real progress towards &#8220;Public Money? Public Code!&#8221; across Europe.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Johannes Näder + Linus Sehn + + + + 15:40 + 00:20 + GovStack project a univeral E-Government + + <p>GovStack aims to break down the barriers to building sustainable digital infrastructure and help governments create human-centered digital services that empower individuals and improve well-being.</p> +<p>In 2015, world leaders agreed to 17 Global Goals for Sustainable Development to achieve a better world by 2030. Many of these goals rely on governments’ ability to deliver services to people. We know that digital technology can facilitate broader access and build more inclusive and resilient societies. Plus, digital government services can foster economic growth and promote trust in government institutions.</p> +<p>GovStack is helping governments simplify the digital transformation process and reduce the cost, time, and resources required to create digital platforms and services.</p> +<p>Our approach is based on the SDG Digital Investment Framework, to help countries make smarter and more strategic decisions in their ICT investments.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Oleksii Danyliuk + + + + 16:00 + 00:20 + Empowering Insights: Unveiling the latest innovations in KNOWAGE for BI and Data Visualization + + <p>KNOWAGE is the open source analytics and business intelligence suite made in Italy. KNOWAGE aims to provide company and organizations with analytical capabilities to exploit data to increase their efficiency and sustainability. Also thanks to the open source community support, the suite is constantly evolving combining the reliability of the most popular business intelligence solutions with the security and the transparency guaranteed by open source.<br /> +This talk will show the last year advancements and new features towards a more mobile, accessible and user-friendly product, focusing on the newly rewritten dashboarding tool.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Davide Vernassa + + + + 16:20 + 00:20 + KNOWAGE and AICS for 2030 agenda SDG goals monitoring + + Visualizing international open data to enhance sustainable development + Visualizing international open data to enhance sustainable development + <p>AICS is the Italian Agency for Development Cooperation that started operating in 2016 with the ambition of aligning Italy with the main European and international partners in the commitment to development. KNOWAGE Labs are developing for AICS a platform that is probably unique in the world and will allow both the Agency and the public to access all the major indicators on the UN Sustainable Development Goals provided by international sources (World Bank, WTO, ILO..) and easily compare them. The solution will allow analysis to start from 3 different touch points: the infographic of SDG goals, the advanced search criteria, and the virtual assistant. Then, a customized dashboard will be provided to the user, allowing to further expand the analysis by interacting with charts, maps, tables, etc. This talk will show the state of art of the solution, highlighting objectives and expected results of the project, but also the new developments of KNOWAGE related to AI.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Marco Cortella + + + + 16:40 + 00:20 + European regulators cast their eyes on maturing OSS communities + + <p>As open source software becomes the foundation to build digital products, to run the backbones of ICT infrastructure and to ensure digital sovereignty and cyber resilience, both the technology as well as the communities that develop it inevitably move into the focus of regulators. The European Union is advancing a number of policy initiatives that regulate liability, cyber security, data handling and AI applications in digital products, among others. This is a challenge for the still quite decentralised and globally operating open source community. How could the open source community participate in legislative processes, and what may be the potential impacts of the upcoming regulation on the open source development process and community dynamics?</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Mirko Boehm + + + + 17:00 + 00:20 + How IoT and AI are revolutionizing Mass Customization + + <p>This lightning talk will explore the transformative potential of integrating Internet of Things (IoT) and Artificial Intelligence (AI) in Mass Customization (MC). There is a significant collective impact of these technologies on businesses, enabling the delivery of personalized products and exceptional customer experiences. Besides giving an overview of MC and the potential ways of integrating IoT and AI, the focus will be on the process of real-time data collection and facilitation of the customization process by IoT on one hand, and on the role of AI in data analysis and generation of personalized recommendations on the other hand. By presenting real-world case studies to demonstrate the practical implementation of IoT and AI in providing customized products and seamless customer experiences, attendees will gain insights into the future of customization and learn actionable strategies to effectively leverage IoT and AI.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Thomas Aichner + + + + 17:20 + 00:20 + Smart Werke Meran + + Smart City 100% Open Source + Smart City 100% Open Source + <p>Since 2020 Stadtwerke Meran have realized 5 Use cases:<br /> +&#8211; Control of the control cabinets of public lighting.<br /> +&#8211; Optimizing the service on Wast Press container.<br /> +&#8211; Bike Boxes<br /> +&#8211; Just Nature Project , temperature measuring over Lorawan<br /> +&#8211; Smart Lighting , communication with single light points over Lorwan.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Stefan Mutschlechner + + + + 17:40 + 00:20 + Monitoring the fleet of Sasa with free software + + Is it possibile to monitor a fleet of 400 buses using free software ? + Is it possibile to monitor a fleet of 400 buses using free software ? + <p>The public transport in South Tyrol is going through a huge transformation: new investments, many new green vehicles and a brand new software. Transition will take time and how do we develop a fleet monitoring system to use during the transition without spending a fortune ? maybe with free software!</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Marco Pavanelli + + + + + + 13:00 + 00:30 + NOI Hackathon SFSCON Edition + + Side Event - Hackathon + Side Event - Hackathon + Side Event,Hackathon + + + + + + + 08:30 + 00:30 + Starting of the second day + + SFSCON + SFSCON + SFSCON + + + 13:00 + 00:30 + Closing of the SFSCON 2023 + + SFSCON + SFSCON + SFSCON + + + + + 08:30 + 00:50 + Welcome Coffee + + SFSCON + SFSCON + SFSCON + + + + + 09:20 + 00:20 + How can Blockchain technologies incorporate AI solutions for a safer and efficient Open Data ecosystem. + + <p>The transition from Web 2.0 to Web 3.0 has fueled the need for a secure and decentralized cloud storage solution for digital assets. Web 2.0 was characterized by centralized platforms where user data was under the control of companies. In contrast, Web 3.0 aims to empower individuals and foster a decentralized web that supports and benefits the Free Software and Open Data Communities.</p> +<p>Blockchain technologies facilitate seamless collaboration and interoperability among diverse stakeholders in the Free Software and Open Data communities. Developers can establish open and transparent ecosystems where data can be shared, verified, and integrated across multiple platforms.</p> +<p>Beez, with its own blockchain infrastructure, offers a secure and transparent platform for digital asset exchanges, bolstering transaction integrity and trust. By distributing data across a network of nodes, Beez ensures security and mitigates the risk of single points of failure. Users retain control over their data, safeguard their privacy, and can take advantage of the incentive mechanisms offered by blockchain networks.<br /> +During our presentation, we will explore the role of AI within Beez&#8217;s ecosystem, facilitating accelerated data processing, correlation, and intelligent automation. AI unlocks valuable insights from blockchain data, and we will touch upon the use of Inductive Logic Programming (ILP) to enhance programming performance.</p> +<p>The integration of Blockchain and AI technologies holds great potential for advancing the safety and efficiency of the Open Data ecosystem. By combining decentralized data storage, trust-building mechanisms, and intelligent data processing, Beez is paving the way for a more secure, transparent, and user-centric digital landscape.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Marianna d'Atri + Enrico Zanardo + + + + 09:40 + 00:20 + Real-time aeroplane tracking and the Open Data Hub + + Using the Open Data Hub as real-time data backbone + Using the Open Data Hub as real-time data backbone + <p>Tracking aeroplanes in real time with Open Source Software is possible. Aircrafts must continuously send their current flight parameters to air traffic controllers on the ground and to other aircrafts. This generates a lot of data, especially when planes are being tracked by multiple sensors.<br /> +The Open Data Hub on the other hand offers a great backbone for data storing and processing, where the correct datasets have to be identified and filtered. After all transformation on the data is done, it will be exposed via API to be further used by a web application.<br /> +Bringing together sensor generated data, the Open Data Hub and custom web applications, is a showcase on how the Open Data Hub can be used as a service: OaaS.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Martin Rabanser + + + + 10:00 + 00:20 + Embracing CI/CD workflows for building ETL pipelines + + how we will gather and monitor multi-source spatially-interpolated meteorological parameters in near-real time + how we will gather and monitor multi-source spatially-interpolated meteorological parameters in near-real time + <p>Up-to date measurements of surface meteorological variables are essential to monitor weather conditions, their spatio-temporal variability and the potential effects on a wide range of sectors and applications. Moreover, when included in continuous records of long historical observations spanning several decades, they become essential for assessing long-term climate variability and change locally and on a regional level.</p> +<p>Automated pipelines capable of retrieving and processing near-real time meteorological data satisfy the primary prerequisites towards the development and advancement of effective and operational climate services.</p> +<p>With a public and operational near real-time monitoring web platform in mind, we present automated pipelines to collect and process up-to-date daily temperature and precipitation records for Trentino South Tyrol (Italy) and surrounding areas, and to derive their spatially interpolated fields at sub-km scale. Our pipelines are composed by multiple steps including data download, sanity checks, reconstruction of missing daily records, integration into the historical archive, spatial interpolation and publication onto online FAIR catalogues as (openEO) “datacubes”. The different APIs, data formats and structure across the various data sources, and the need to merge the data onto harmonized meteorological layers, make this a typical case of the so-called Extract, Transform and Load (ETL) pipelines, and, in order to follow the principles of data reproducibility and Open Science, we embraced open-source automated workflow management through GitLab’s Continuous Integration / Continuous Development (CI/CD) capabilities.</p> +<p>CI/CD workflows greatly help the management of the relatively complex graphs of tasks required for our climate application, ensuring seamless orchestration with thorough flow monitoring, application logs, transactions rollbacks, and exception handling in general. Native pipeline-oriented software development also fosters a clean separation of roles among the tasks, and a more modular architecture. This effectively reduces barriers to collaborative development and paves the way for robust operational climate services for researchers and decision makers in the face of the changing climate.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Elena Maines + + + + 10:20 + 00:20 + Free Software and Open Science + + <p>The Open Science movement aims to increase the transparency, reproducibility and inclusiveness of academic research. One of its central goals is therefore to make research outputs broadly available, e.g., manuscripts (Open Access) or research data (Open Data). While software/code created in the course of scientific research is a key artifact of scientific research that is clear distinct from the latter two, it has until recently not received the same attention as manuscripts or data, although it follows its own set of paradigms.</p> +<p>In this talk I will present an overview on how the core concepts of Free Software and the FAIR (findable, accessible, interoperable, reuseable) Principles intersect, what this means for managing code as research output and recent initiatives on the European level that will provide support for these issues.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Christian Busse + + + + 10:40 + 00:20 + MLOps with Kubernetes: unleash the power of the ecosystem! + + <p>Kubernetes is a popular open-source software, today&#8217;s de-facto open standard, to run production workloads. Innovation in the ecosystem thrives with multiple projects that enrich the platform&#8217;s core. Machine Learning Operations (MLOps) is part of the same effort to bring automation into Kubernetes for ML pipelines.</p> +<p>This session aims to explore the Kubernetes-native tools available such as Tekton, Argo CD, Kubeflow, and OpenDataHub, to apply DevOps and GitOps principles in AI/ML contexts.</p> +<p>By the end of the session, attendees will have a clear understanding on how to automate and simplify the iterative process of integrating ML models into software development processes, production rollout, monitoring, retraining, and redeployment for continued prediction accuracy with open source tools.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Natale Vinto + + + + 11:00 + 00:20 + Achieving FAIRness with EDP-portal + + DOI and citation improvements in metadata of EDP-portal + DOI and citation improvements in metadata of EDP-portal + <p>EDP-portal is the access point to the Environmental Data Platform of Eurac Research since 2021 to achieve FAIRness of our datasets. It allows to publish data and metadata and provides APIs and web services for data access. In the last 2 years the EDP improved the findability and accessibility of the data collected throughout the curation of metadata that was improved with the DOI registration for datasets. The result is a higher metadata quality where the final user can easily find how to properly cite datasets with a persistent identifier. The portal itself and main data repositories are registered in FAIR-sharing portal with their own DOI. The SW components of the EDP are totally based on open source projects.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Andrea Vianello + + + + 11:20 + 00:20 + SMODEX – a Python package for understanding the evolution of soil moisture anomalies + + <p>The complexity of agricultural droughts requires a consistent, reliable, and systematic method for monitoring and reporting. Amongst the various indices used to monitor this phenomenon, the soil moisture anomaly has been proven to be a more reliable predictor. However, the datasets required for computing this index are often large and computationally demanding. To address this challenge, we have developed SMODEX, a Python package that enables scalable, fast, and open-source standard-compliant computation and visualization of soil moisture anomalies.</p> +<p>SMODEX simplifies the computation and visualization of time-series for soil moisture and soil moisture anomalies from high-dimensional climate datasets. It allows for quick and easy parallelization of the computation on a daily, weekly, and monthly timescale. Additionally, SMODEX implements a straightforward workflow for automating the use of FAIR (Findable, Accessible, Interoperable, and Reusable) principles in producing and sharing outputs by leveraging the open source STAC API. The package is extendible and provides information on how to contribute to the project, test suites, test coverage, and a use case for the South Tyrol region, all provided in the package repository. In the future, additional agricultural drought indices and indicators would be included to serve to even larger community of researchers, policy makers, and individual users.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Rufai Omowunmi Balogun + + + + 11:40 + 00:20 + Why open digital infrastructure matters + + hardware & software infrastructure for Europe + hardware & software infrastructure for Europe + <p>Software freedom can be defined in many ways but in legal terms it is squarely defined by a set of approved FSF and OSI software licenses. Yet everyone realizes that beyond these licenses the goal of software freedom and digital sovereignty cannot be achieved without the ability to master and create hardware components and systems &#8211; and beyond that, to rely on open digital infrastructure (servers, datacenters, and resources) . This talk will present the challenges around these topics and what we, collectively in Europe already do and can do to ensure our independence and our freedoms.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Charles-H. Schulz + + + + 12:00 + 00:20 + Intelligent Decision Support System for traceability system of MOAH & MOSH olive oil contaminants + + What we are doing, what we will do! + What we are doing, what we will do! + <p>MOSH and MOAH are the abbreviation of two groups of chemical compounds found in mineral oils. “MOSH” stands for Mineral Oil Saturated Hydrocarbons. MOAH stands for Mineral Oil Aromatic Hydrocarbons. Both of them are under European deeply evaluation because there are two food contaminants. According to the current state of scientific knowledge, there is no sufficient toxicological evidence to prove a health risk to humans from saturated mineral oil fractions (MOSH). Meanwhile, MOAH are suspected to be carcinogenic (especially PAH-like compounds with 3-7 ring systems), therefore their levels in food should be reduced according to the ALARA-principle (as low as reasonably achievable). Gruppo FOS with CNR ( MOSH and MOAH are the abbreviation of two groups of chemical compounds found in mineral oils. “MOSH” stands for Mineral Oil Saturated Hydrocarbons. MOAH stands for Mineral Oil Aromatic Hydrocarbons. Both of them are under European deeply evaluation because there are two food contaminants. According to the current state of scientific knowledge, there is no sufficient toxicological evidence to prove a health risk to humans from saturated mineral oil fractions (MOSH). Meanwhile, MOAH are suspected to be carcinogenic (especially PAH-like compounds with 3-7 ring systems), therefore their levels in food should be reduced according to the ALARA-principle (as low as reasonably achievable). Gruppo FOS with CNR (Consiglio Nazionale delle Ricerche), Santagata 1907 and Enginius are searching the system for finding and trace their presence in the virgin and extra virgin olive oils by using open fingerprints methods, open hardware and open source blockchain and AI technologies.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Giovanni Giannotta + + + + 12:20 + 00:20 + The Future of Connectivity, Open Internet and Human Rights + + Making telecommunications more democratic with Free Software + Making telecommunications more democratic with Free Software + <p>We are becoming more and more dependent on the Internet for our work, education, communication, personal relations and entertainment. Our digital devices conquered an unprecedented level of importance in our life.</p> +<p>However, we are facing a loss of control over our smartphones, tablets and other devices for internet connection. It&#8217;s time to resolve monopolies and re-establish democratic control over the technology we most depend upon.</p> +<p>This talk will present the challenges end-users are facing to get more control over their devices and how Free Software is key for a consumer re-empowerement.</p> +<p>The talk will present real-life examples of policy demands against gatekeepers on digital markets, such as the struggle for Router Freedom in the last years and how Device Neutrality can serve as an important instrument for pushing forward end-user-oriented digital policies.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Lucas Lasota + + + + 12:40 + 00:20 + From the design to reality is here the Community Open Hardware PowerPC Notebook + + In 2014 hobbists dream it, now thanks to donors, volunteers and collaborations becomes reality + In 2014 hobbists dream it, now thanks to donors, volunteers and collaborations becomes reality + <p>The Open Hardware PowerPC Notebook designed around GNU/Linux will be showed at NOI Techpark. We had presented here its motherboard design in 2018. We will updates regarding last developments for u-boot AMD video drivers, re-design of heat pipes, and CE test certification process. We will give future availability milestones of this notebook and details regarding the GNU/Linux distributions or other OS that could runs on it.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Roberto Innocenti + + + + + + 09:20 + 01:00 + ZOOOM Toolkit Interactive Workshop + + <p>This workshop will focus on examining the ZOOOM toolkit, which provides valuable tools and material regarding open licence innovation around the topic of Open Data, Software and Hardware. Particularly, we will present the overall interface and user experience with the hope of collecting valuable feedback from participants and identifying potential improvements in both the structure and the functions of specific supporting tools. The involvement of the participants will be instrumental in gathering cutting-edge and up-to-date knowledge regarding current tools and resources that can contribute to the creation of an all-inclusive knowledge repository on open licence innovation.</p> +<p><b>REGISTRATION NEEDED AT: </b><a href="https://pretix.eu/noi-digital/sfscon23/3980546/">https://pretix.eu/noi-digital/sfscon23/3980546/</a></p> + + ZOOOM project track + ZOOOM project track + ZOOOM project track + https://www.sfscon.it/tracks/zooom-project-track-2023/ + + Amalia de Götzen + Andy Peruccon + Ronald Chenu Abente Acosta + + + + 10:20 + 00:30 + Closing ZOOOM Toolkit Interactive Workshop + + ZOOOM project track + ZOOOM project track + ZOOOM project track + https://www.sfscon.it/tracks/zooom-project-track-2023/ + + + + + 09:20 + 03:40 + The future of Free Software in Italy + + Side Event - FSFE - Italian community meeting + Side Event - FSFE - Italian community meeting + Side Event,FSFE,Italian community meeting + https://www.sfscon.it/tracks/fsfe-italian-community-meeting/ + + Marta Andreoli + + + + + + 17:00 + 00:30 + Winner proclamation and closing of the NOI Hackathon SFSCON Edition + + Side Event - Hackathon + Side Event - Hackathon + Side Event,Hackathon + + + + diff --git a/src/tests/assets/sfscon2023_event1day1_0830.xml b/src/tests/assets/sfscon2023_event1day1_0830.xml new file mode 100644 index 0000000..7d9b5bb --- /dev/null +++ b/src/tests/assets/sfscon2023_event1day1_0830.xml @@ -0,0 +1,2023 @@ + + + + sfscon-2023 + SFSCON 2023 + + + Main track + Artificial Intelligence track + Community track + Cybersecurity track + Developers track + Legal track + OW2 track + Public Money Public Code & Open Data track + Data4SmartHealth + ZOOOM project track + Open Data & Open Hardware track + Side Event - Hackathon + Side Event - School Reading + Closing - with a Tale of Software, Skateboards, and Raspberry Ice Cream + Side Event - FSFE - Italian community meeting + + + + + 08:30 + 00:30 + Check-in + + Main track + Main track + Main track,Main track + + + 18:40 + 00:30 + Closing of the first day + + SFSCON + SFSCON + SFSCON + + + + + 09:00 + 00:30 + Opening SFSCON 2023 + + <p>Opening SFSCON 2023</p> + + Main track + Main track + Main track,Main track + + Vincent Mauroit + + + + 09:30 + 00:30 + Coming soon + + Main track + Main track + Main track,Main track + + + 10:00 + 00:30 + Coming soon + + Main track + Main track + Main track,Main track + + + 10:30 + 00:30 + What the AI revolution means for Open Source, Open Tech and Open Societies + + <p>In the last year we saw the rise of AI systems like ChatGPT, Stable Diffusion, Dall-E and others. Large Language Models like GPT are enabling a lot of new innovative features and products which will revolutionise the world.<br /> +But this large autoregressive language models come with a lot of challenges that can have negative effects on the Open Source and Open Tech community. For example it’s unclear if in the future everyone will have access to the same ML models and training data. Can students, startups and open source people build innovative new products using AI in the same way the open source communities build Open Code and Open Tech. How can we make sure that the AI system are not discriminating underrepresented minorities? What is the energy consumption and CO2 emissions of this new big AI systems?<br /> +This talk will discuss the current fascinating trends in AI, the challenges and some possible solution. It will also cover the current Open Source AI features in Nextcloud and our Ethical AI framework.</p> + + Main track + Main track + Main track,Main track + + Frank Karlitschek + + + + 11:00 + 00:20 + European SFS Award 2023 + + <p>The award is given to a person who contributed to the introduction of the culture of Free Software.</p> + + SFSCON + SFSCON + SFSCON + + + 11:20 + 00:20 + The First Year of Eclipse Software Defined Vehicle: a successful “code first” approach + + <p>The most notable impact of using SW in the automotive domain is the decrease in fatalities as ADAS functions are more widely employed. On the other hand, SW complexity has seen an almost exponential growth reaching about 100 million lines of code.<br /> +Hardly any organization can tackle this challenge alone.</p> +<p>The Eclipse Software Defined Vehicle (SDV) Working Group ’s mission is to foster collaboration across industries to create an open technology platform for the software defined vehicle of the future. The working group community driven by its 40 member organization has chosen a “code first” approach to facilitate more agile and faster time-to-market software development.<br /> +After its formation about a year ago, the SDV WG has onboarded about 20 open source projects and is working on integrating several projects together to create “blueprints”. The frameworks emerging from these initial blueprints show the potential and benefits of utilizing different projects as components to build broader solutions to address more complex problems</p> +<p>This contribution introduces the SDV WG and Community, as well as its projects and capabilities.</p> + + Main track + Main track + Main track,Main track + + Sara Gallian + + + + 11:40 + 00:20 + Pyccel: write Python code, get Fortran speed + + <p>Imagine writing a pure Python library which can achieve the performance of Fortran or C/C++.<br /> +To this end we have developed Pyccel, which translates Python code to either Fortran or C, and makes the generated code callable from Python. The generated Fortran or C code is not only fast, but also human-readable; hence it can easily be profiled and optimized for the target machine.<br /> +Pyccel has a focus on high-performance computing applications, where the efficient usage of the available hardware resources is fundamental.<br /> +To this end it provides type annotations, function decorators, and OpenMP pragmas.<br /> +Pyccel is easy to use, is almost completely written in Python, and compares favourably against other Python accelerators.</p> + + Main track + Main track + Main track,Main track + + Emily Bourne + Yaman Güçlü + + + + 12:00 + 00:20 + Flaky tests – how to deal with them + + <p>Every QA/QE professional has encountered a flaky test at least once in their career. It may be a small, harmless bug that can be fixed in an instant, or it may take months to identify and fix it. This can be very costly and take a toll on your reputation and budget.</p> +<p>Don&#8217;t you want to know why flaky tests exist, how to identify them at an earlier stage, or even avoid them?</p> +<p>Join the investigation and we will figure it out together with you to find out the origins and roots of common flaky tests; to explore real cases and their solutions; to learn good practices.</p> + + Main track + Main track + Main track,Main track + + Juri Solovjov + + + + 12:20 + 00:20 + Psydac: a Python IGA library for large-scale simulations + + Ease of use and high performance in the open-source Python ecosystem + Ease of use and high performance in the open-source Python ecosystem + <p>Psydac is an open source library for isogeometric analysis (IGA), that is, a finite element method which uses the same basis functions of a CAD model (B-splines and NURBS).<br /> +It has been developed at the Max Planck Institute for Plasma Physics, with the goal of exploring advanced numerical methods for electromagnetism, magneto-hydro-dynamics, and plasma kinetics. It is completely written in Python, uses only open-source libraries, and can run large parallel simulations on high-performance computing facilities. It employs a domain specific language, automatic code generation, a transpiler, MPI communication, OpenMP multithreading, and parallel I/O. In this talk we explore the library architecture and its overall design philosophy, which can be applied to other domains.</p> + + Main track + Main track + Main track,Main track + + Yaman Güçlü + + + + 12:40 + 00:20 + The incredible machine: when automation backfires + + The hidden costs of automation + The hidden costs of automation + <p>Ever wanted to apply CI/CD principles and run tests for every change?<br /> +But it is too complex to set up the test environment, and launch the tests with all the updated parameters, solution? Automation!<br /> +Release your software implies a countless number of complicated steps, what solution? Automation!<br /> +So automation sometimes seems to be the solution, you automate some complex procedure and call the day.</p> +<p>But automation of a process sometimes can only hide the real problem and only delay the moment when you have to address the technical debt, and sometimes the automation can even also act as an amplifier of the technical debt.</p> +<p>Based on the experience matured on the field, this talk will be shown the hidden traps of automation, the drawbacks, and the lessons learned.</p> + + Main track + Main track + Main track,Main track + + Matteo Valentini + + + + 13:00 + 00:20 + Write High Performance Clients for RabbitMQ + + <p>In this talk, I will share our experience with writing clients for the RabbitMQ stream queues.<br /> +The RabbitMQ stream queues have been designed with performance as a major goal. So the clients have to be performant.<br /> +We will see how we increased the throughput and/or reduced the latency.<br /> +.NET and Go clients will be taken as examples. We will go through some real production code.</p> + + Main track + Main track + Main track,Main track + + Gabriele Santomaggio + + + + 13:20 + 00:20 + Ithaca: the Clean and Hexagonal Architectural Island + + An introduction to Clean and Hexagonal Architecture principles + An introduction to Clean and Hexagonal Architecture principles + <p>Get ready to sail from the Scylla and Charybdis&#8217;s shores of 3-layered architecture to the safe Ithaca refreshing shores of Clean and Hexagonal Architecture! Brace yourself as we surf from zero to Ulysses (a hero!), leaving behind monstrous code and embracing cleanliness and modularity. No more Odysseys; protect your source code navigation through Clean and Hexagonal Architecture principles!</p> + + Main track + Main track + Main track,Main track + + Luca Guadagnini + + + + 13:40 + 04:20 + Accessibility improvements for Uyuni + + <p>Uyuni is a powerful open source configuration and infrastructure management tool used by many organisations worldwide.<br /> +However, its current state presents accessibility challenges for people with disabilities. Its user interface relies heavily on visual elements, making it difficult for visually impaired users to navigate and access its features.</p> +<p>The presentation will dive into the ongoing work to increase Uyuni&#8217;s accessibility following the Web Content Accessibility Guidelines (WCAG).</p> +<p>Apart from focusing on the specific work for Uyuni, during the presentation, the participants will be also introduced to best practices for designing accessible WebUI and easy tools to be use during the software development.</p> + + Main track + Main track + Main track,Main track + + Marina Latini + + + + 14:00 + 00:20 + squash the flakes! + + how to minimize the impact of flaky tests + how to minimize the impact of flaky tests + <p>Flakes aka tests that don’t behave deterministically, i.e. they fail sometimes and pass sometimes, are an ever recurring problem in software development. This is especially the sad reality when running e2e tests where a lot of components are involved. There are various reasons why a test can be flaky, however the impact can be as fatal as CI being loaded beyond capacity causing overly long feedback cycles or even users losing trust in CI itself.</p> +<p>We want to remove flakes as fast as possible to minimize the number of retests required. This leads to shorter time to merge, reduces CI user frustration, improves trust in CI, while at the same time it decreases the overall load for the CI system.</p> +<p>We start by generating a report of tests that have failed at least once inside a merged PR, meaning that in the end all tests have succeeded, thus flaky tests have been run inside CI. We then look at the report to separate flakes from real issues and forward the flakes to dev teams.</p> +<p>As a result retest numbers have gone down significantly over the last year.</p> +<p>After attending the session the user will have an idea of what our flake process is, how we exercise it and what the actual outcomes are.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Daniel Hiller + + + + 14:20 + 00:20 + A comparison of Open Source FaaS technologies + + <p>As the demand for serverless computing continues to grow, the availability and choice of open source Function as a Service (FaaS) technologies are expanding rapidly. In this talk, we will present our experience in using some of the most popular open source FaaS platforms, compare them and discussing their features and characteristics.</p> +<p>The session will begin with an introduction to serverless computing and the key concepts behind FaaS. Throughout the talk, we will analyze various aspects such as ease of deployment, architecture, specific features, etc. We will examine real-world use cases and share insights on the strengths and limitations of each platform, allowing attendees to make informed decisions when choosing the right FaaS technology for their projects.</p> +<p>By the end of this session, attendees will have a better understanding of the open source FaaS landscape from our experience in production usage.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Andrea Avancini + Michele Santuari + Alberto Sillitti + + + + 14:40 + 00:20 + Coming soon + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + + 15:00 + 00:20 + F-Droid – The place for your FOSS Apps + + Why you should submit your FOSS Android App to F-Droid + Why you should submit your FOSS Android App to F-Droid + <p>On F-Droid you can find thousands of FOSS apps and games for Android. F-Droid brings you visibility in the FOSS community that will provide great feedback, open issues and eventually contribute to your FOSS project.<br /> +This presentation is about my personal experience with my games Ball2Box, Pocket Broomball and Sn4ke published on F-Droid. I will show you what F-Droid is, how it works and the steps needed to submit your project.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Simon Dalvai + + + + 15:20 + 00:20 + Coming soon + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + + 15:40 + 00:20 + Don’t let microservices kill you! + + A few ideas on architecting for the journey, not for the destination + A few ideas on architecting for the journey, not for the destination + <p>Microservices is a trend, and for a reason: it’s an architecture style that enables many desirable qualities on the systems that adopt it. By being distributed, it allows using the right technology stack for each capability, at the same time it eases the evolution of each fine-grained part of the system. But it comes with a price and offers significant risks, in particular related to larger portions of the architecture, and also the management of the entire infrastructure. Those costs and risks are the biggest challenges for a new system, when it adopts microservices from the start. But, on the other hand, starting with a monolith might require a big effort to migrate towards microservices in the future. Is that a check-mate?</p> +<p>Definitely not! Don’t let microservices kill you! In this talk, we’re going to see some ideas about architecting the system focusing on the journey. After all, we spend most of the time maintaining and evolving the system, than actually leaving it running “stably”. Also, by seeing how to start something new, we’re actually going to discuss the best architecture practices for any given time of the project.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + João Francisco Lino Daniel + + + + 16:00 + 00:20 + Automating git for development on large distributed teams + + A tour on aggressive use of git branching with automation for distributed cooperation + A tour on aggressive use of git branching with automation for distributed cooperation + <p>Contributing to large open source projects is not always a fast or smooth sailing process, and is often stalled simply due to the necessary human factor.</p> +<p>Contributions are rarely accepted quickly or as-is, and it&#8217;s not uncommon to rework each submission extensively by splitting the proposed change into separated fixes and features, into smaller incremental changes where each is tested independently or sometimes perform complete rewrites.</p> +<p>When the vetting of each submission can require weeks, contributors often feel blocked by the need to wait for their own or peer&#8217;s changes.</p> +<p>To cope in these scenarios, we present a few git branching and automation strategies that allow efficient wait-free development of interconnected changes, even across community members, in a truly distributed fashion.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Yuri D’Elia + + + + 16:20 + 00:20 + Kubernetes for IoT + + How kubernetes can help you quickly and automatically test and deploy new services + How kubernetes can help you quickly and automatically test and deploy new services + <p>While Kubernetes is primarily associated with managing cloud-native applications and microservices, it can also play a role in IoT deployments. Here are a few reasons why Kubernetes is relevant in the context of IoT:</p> +<p>1 Scalability: IoT systems often involve a large number of devices generating massive amounts of data. Kubernetes provides automatic scaling capabilities, allowing IoT applications to scale horizontally by adding or removing instances based on demand. This helps manage the increasing workload efficiently.</p> +<p>2 Resilience and High Availability: IoT applications require high availability to ensure uninterrupted operations. Kubernetes offers features like load balancing, fault tolerance, and self-healing capabilities. It can automatically restart failed containers or replace them with healthy instances, ensuring that IoT services remain available and resilient.</p> +<p>3 Resource Optimization: IoT deployments typically involve a mix of hardware devices with varying capabilities. Kubernetes can optimize resource utilization by efficiently distributing workloads across devices. It allows you to define resource constraints and priorities, ensuring that devices with higher capabilities handle more demanding tasks.</p> +<p>4 Service Discovery and Load Balancing: In an IoT ecosystem, devices and services need to discover and communicate with each other. Kubernetes provides built-in service discovery mechanisms, such as DNS-based service discovery and load balancing, allowing devices to locate and interact with services dynamically.</p> +<p>5 Security and Updates: Security is a crucial aspect of IoT systems, and Kubernetes helps in managing security at scale. It provides features like role-based access control (RBAC), network policies, and secret management to enforce security measures across IoT deployments. Additionally, Kubernetes facilitates rolling updates, allowing for seamless updates and patches without downtime.</p> +<p>6 Flexibility and Portability: Kubernetes abstracts the underlying infrastructure, enabling IoT applications to be deployed consistently across different environments, whether it&#8217;s on-premises, in the cloud, or at the edge. This flexibility allows organizations to migrate or distribute their IoT workloads as needed, making it easier to adopt hybrid or multi-cloud strategies</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Andrea Alfonsi + + + + 16:40 + 00:20 + Pitfalls and Mistakes When Dealing With Non-Functional Requirements + + <p>Non-functional requirements are essential to define the software architecture, and if they are not identified and handled correctly, the impact can be huge. This talk will present some common mistakes when handling non-functional requirements. It starts talking about the ones defined at the beginning of the project with a false certainty, which can become an even worst problem if they are never revised. Then, we will pass through the client that always wants the complete package and talk about the ones that are only remembered when some user complains. Of course, the talk does not forget about those that try to treat those very different non-functional requirements in exactly the same way. In the end, it will be presented some practices that can be used to avoid these problems.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Eduardo Guerra + + + + 17:00 + 00:20 + CrudIt: an opensource framework that makes developers autonomous + + Discover the low-code framework that accelerate app development + Discover the low-code framework that accelerate app development + <p>Nowadays application implementation requires a lot of different competencies that make it impossible for a single person to build an entire application. This led to the need for a big multi-competencies team and increasing in communication issues during the project. But what if we could implement an application without the need of implementing a backend? CrudIt does exactly that. CrudiIt is an open-source framework that enables a small team or a single front-end developer to create small SaaS applications without any knowledge of backend, cloud and sysadmin needs.<br /> +During the event, we will see how to implement a simple SaaS service using Crudit and how to use the framework to accelerate application development.<br /> +Moreover, we will discuss how to host a CrudIt application without any sysadmin competencies in the cloud, using free services.<br /> +This talk will unveil how, thanks to this powerful low-code framework, it is possible to save data without writing a line of code, even if you are working in complex, multitenant scenarios.<br /> +The talk will explain also how the framework is born, how it works internally and promote the opensource philosophy that brings to this library.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Daniele Fontani + Daniele Ciulli + + + + 17:20 + 00:20 + The Entando Marketplace + + Fueling the Capability Economy through FOSS Contributions and Empowering Community-driven Innovation + Fueling the Capability Economy through FOSS Contributions and Empowering Community-driven Innovation + <p>The Entando Platform, an open source Application Composition Platform (ACP), is transforming cloud-native application development. With a component-based approach, organizations harness the power of Entando to effortlessly create and consume reusable components, fostering collaboration and driving productivity.</p> +<p>At the heart of this transformation lies the Entando Marketplace. Entando Marketplace and the Entando Platform provides FOOS communities with a platform to collaborate, showcase their projects, access resources, and streamline development processes.</p> +<p>We delve into the principles and benefits of composable practices, which enable developers to build modular, scalable, and adaptable applications.</p> +<p>Furthermore, we highlight the essential role of the Entando Marketplace as a catalyst for the capability economy. FOSS contributors are empowered to share their expertise and contribute to the growing collection of reusable components, unlocking new possibilities for innovation and collaboration.</p> +<p>Join us to discover how the Entando Community fosters collaboration and embraces composable practices, paving the way for a vibrant FOSS ecosystem. Together, we can cultivate a community-driven capability economy that thrives on shared knowledge and collective innovation.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Emanuele Cerroni + + + + 17:40 + 00:20 + Improving developer experience in Open Source Projects + + How to ease contribution and management of your next big idea + How to ease contribution and management of your next big idea + <p>What makes an open-source project successful? How hard is it to add external people to an open project?<br /> +We at Nethesis have open source in our core with more than 400 public repositories that hold all of our company code. With the upcoming release of NethServer, we’re facing the excruciating question: how do we make it more appealing for developers?<br /> +Follow me in the changes we want to make to our processes to ease development and contributions, using big projects as examples and how even you can make a difference in the smallest of all codebases.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Tommaso Bailetti + + + + 18:00 + 00:30 + CLOSING with a Tale of Software, Skateboards, and Raspberry Ice Cream + + SFSCON + SFSCON + SFSCON + + Matthias Kirschner + + + + + + 10:30 + 01:30 + Ada & Zangemann + + Side Event - School Reading + Side Event - School Reading + Side Event,School Reading + + + 12:00 + 00:30 + Closing of Ada & Zangemann reading + + Side Event - School Reading + Side Event - School Reading + Side Event,School Reading + + + 14:00 + 00:20 + Welcome Data4SmartHealth 2023 + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Floriano Zini + Chiara Ghidini + Andrea Gasparella + + + + 14:20 + 01:00 + AI Algorithms for Digital Therapeutics + + <p>Digital therapeutics tackle diverse medical conditions, and AI algorithms, encompassing machine learning, natural language processing, and computer vision, are central to their success. They enable personalized, data-driven treatments, improving patient outcomes while potentially reducing healthcare costs. This talk explores AI&#8217;s pivotal role in digital therapeutics, where software interventions are reshaping healthcare.</p> + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Gianluigi Greco + + + + 15:20 + 00:20 + Software testing for remote proof of concept studies of digital therapies + + From the definition of a proof of concept study to the development and testing of the required technical infrastructure + From the definition of a proof of concept study to the development and testing of the required technical infrastructure + <p>Digital therapies are evidence-based therapeutic interventions that use software to prevent, manage, or treat a medical disorder or disease.<br /> +Not only they require carefully planned clinical studies, but they require also a suitable technical infrastructure not to lose or compromise relevant information. Consequently, careful software testing and monitoring is necessary to ensure that the technical infrastructure is working correctly during the study.</p> +<p>In this talk we will describe the entire process used for the analysis of the effectiveness of Nearine, a digital therapy for the management of depressive symptoms based on interoceptive stimulation through vibrations applied on the wrist.<br /> +We will start with the description of the remote proof of concept study used for the assessment of the effectiveness and potential adverse effects. After that, the technical infrastructure necessary for the study will be outlined.<br /> +Finally we will show how the usage of CatchSolve for software testing has decreased the risk of potential loss of information during the study.</p> +<p>The talk is the result of a joint collaboration between CatchSolve, software testing startup based in NOI Techpark, and Nearine, a new digital health and neurotechnology startup based in Bolzano.</p> + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Chiara Masci + Davide Montesin + + + + 15:40 + 00:20 + Gimme! Gimme! Gimme! (Some good algorithms) + + Wearable hackers meet e-health experts to make a first class open source Android app + Wearable hackers meet e-health experts to make a first class open source Android app + <p>Gadgetbridge, a free and open source project, has existed since 2015 to allow wearable device customers to use their hardware without being tied to the online services of the manufacturers.</p> +<p>The small but very focused and capable technical community working on the basic functionalities such as retrieving the various data from the wearables (detected activities, sleep, pulse per minute, peripheral oxygen saturation, &#8230;) lacks the expertise on specialised algorithms that could help to perform advanced analysis/diagnostics.</p> +<p>The goal of this talk is to explore a potential collaboration between our communities: Gadgetbridge provides local-only support for an extensive list of wearable devices and a community of engineers and privacy minded users, Data4SmartHealth might contribute advanced algorithms and AI on edge devices.</p> + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Daniele Gobbetti + + + + 16:00 + 00:20 + Home4Me – IoT and AI at service of disability + + An example of how the technology can help disabled people at home. + An example of how the technology can help disabled people at home. + <p>Home4Me is an innovative social project that tries to help disabled people at home (and not only at home).<br /> +The projects tries to keep in mind concrete problems that a person with disabilities lives at home and try to resolve them using IoT ad-hoc devices and a backend to access to the power of Cognitive and AI services.</p> +<p>On the market there are already IoT solutions, but expensive and not customizable to the needed of the disable person: here is where Home4Me want to be a possible solution.</p> + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Luca Nardelli + + + + 16:20 + 00:20 + Discussion on the first round of talks + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Chiara Masci + Davide Montesin + Daniele Gobbetti + Luca Nardelli + + + + 16:40 + 00:20 + Machine learning driven simulation of protein folding atomistic trajectories + + <p>The folding of proteins is an important biological process that determines the structure, role and functionality of proteins. It is often studied by molecular dynamics (MD) simulations, in order to obtain the folding trajectory of all the atoms in the system.<br /> +To date, pure MD simulations require huge computational resources and are still unable to access the timescales of folding processes that have biological relevance.<br /> +In my work, I am exploiting machine learning techniques and one recent AI milestone, Deepmind&#8217;s Alphafold, in order to create an advanced algorithm able to explore the folding trajectories within short computational times. It becomes possible to extract atomistic conformations from the folding pathways, and identify folding intermediates and long-lived states.<br /> +This method can be used to facilitate the identification of biologically relevant protein conformations, later to be used for pharmacological targeting or biophysical studies.</p> + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Alan Ianeselli + + + + 17:00 + 00:20 + Data-driven knowledge discovery from Brain Imaging of Alzheimer’s disease patients + + Artificial Intelligence to support the diagnosis of neurodegenerative disorders + Artificial Intelligence to support the diagnosis of neurodegenerative disorders + <p>Alzheimer’s disease (AD) is a chronic neurodegenerative disease which is largely responsible for dementia in around 6% of the population aged 65 and above. The availability of human brain data generated by imaging techniques, such as Magnetic Resonance Imaging, have resulted in a growing interest in data-driven approaches for the diagnosis of neurological disorders and for the identification of new biomarkers. The knowledge discovery process typically involves complex data workflows that combine pre-processing techniques, statistical methods, machine learning algorithms, post-processing and visualisation techniques. This talk presents specific research efforts in this direction, promising results, open issues and challenges.</p> + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Giuseppe Di Fatta + + + + 17:20 + 00:20 + Management of large genomic data with free software + + <p>The suite of free software tools created within the OpenCB (Open Computational Biology &#8211; https://github.com/opencb) initiative makes possible to efficiently manage large genomic databases.</p> +<p>These tools are not widely used, since there is quite a steep learning curve for their adoption, thanks to the complexity of the software stack, but they may be really cost-effective for hospitals, research institutions etcetera.</p> +<p>The objective of the talk is showing the potential of the OpenCB suite, the information to start using it and the advantages for the end users. BioDec is currently deploying a large OpenCGA installation for the Genetic Unit of one of the main Italian Hospitals, where data in the order of the hundreds of TBs will be managed and analyzed by bioinformaticians.</p> + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Michele Finelli + + + + 17:40 + 00:20 + Discussion on second round of talks and closing + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Alan Ianeselli + Giuseppe Di Fatta + Michele Finelli + + + + + + 11:20 + 00:20 + Self-hosted, Open Source Large Language Models (LLMs) + + What are the most promising projects and how good are they? + What are the most promising projects and how good are they? + <p>In recent years different groups have used the transformer architecture (a deep learning model) to train neural networks using large quantities of text. With the increase in compute power these models have grown to billions or even hundred of billions of parameters. As the model size grew, noteworthy abilities emerged. Such as the ability to generate text showing surprising reasoning skills to the point that the leading models can now successfully take college-level exams.</p> +<p>Currently some of the best and most famous models are proprietary and released to the public as a service. However a large Open Source community has emerged that tries to train and fine tune free models that can be used self-hosted. This is a challenging task due to problems with potential copyright issues with the training text, the large computational cost of the training itself and the supervised fine tuning step to adapt the model to its final use case.</p> +<p>In this talk I will give an overview on what the most promising projects in this space are and how they compare to the proprietary state-of-the-art models of the large players.</p> + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + Chris Mair + + + + 11:40 + 00:20 + Nextcloud – how to keep up with the fast moving IT world + + Artificial Intelligence within Nextcloud + Artificial Intelligence within Nextcloud + <p>At Nextcloud we believe that in order to achieve digital sovereignty we always need to stretch the boundaries. If new technologies and new ways of working come up, we work hard to enable our users to enjoy the same functionality without giving up control over their data and computing.</p> +<p>Over the last few months we saw a lot of innovation in the area of artificial intelligence which might change our way of working to a large extend. At Nextcloud we are happy that we can already provide the first features in this areas to our users. Unfortunately not all features work completely on-premise as of today. That&#8217;s why we introduced a &#8220;Ethical AI Rating&#8221; which provides transparency to the user and let them decide what to use today, while we are working hard to base more and more of this features on Free Software and on-premise solutions.</p> +<p>The talk will present Nextcloud&#8217;s AI-features, the Ethical AI Rating and how we try to approach innovations in a fast moving IT world, in order to bring similar functionality to the Free Software community.</p> + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + Björn Schießle + + + + 12:00 + 00:20 + From Novices to Innovators: Exploring the Possibilities with Free and Open Source AI Tools + + <p>Join me as we explore the world of free and open-source AI tools, empowering individuals and organizations to unleash their creativity and take their innovation to the next level.</p> +<p>Discover how some AI players are democratizing access to cutting-edge technologies and leveling the playing field, e.g. StabilityAI, etc. We will delve into the benefits and opportunities offered by some free and open-source AI tools, exploring their capabilities, potential applications, and the impact they can have on your projects.</p> +<p>Whether you&#8217;re a practitioner or just starting your AI journey, this talk is your gateway to discovering an exciting plethora of free and open-source AI tools, and how they can empower you to stay ahead of the curve in the modern era.</p> + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + Anjan Karmakar + + + + 12:20 + 00:20 + Optimizing Software Performance with Inductive Logic Programming: A Novel Approach + + <p>Concurrent execution of tasks can significantly improve its performance and efficiency. However, identifying which tasks can be executed concurrently and which tasks need to be executed sequentially can be a challenging task. In this talk, I propose using Inductive Logic Programming (ILP) to create a dynamic dependency graph for a given program. The graph can be used to identify which tasks can be executed concurrently and which tasks need to be executed sequentially. I demonstrate the effectiveness of this approach by applying it to a sample program and comparing its performance with a version that does not utilize concurrent execution. This talk presents a novel approach to creating a dynamic dependency graph for programs and highlights the potential benefits of using ILP for optimizing the performance of complex software systems.</p> + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + Enrico Zanardo + + + + 12:40 + 00:20 + Democratizing Language and Vision Technology + + A Retrieval-based Approach for Open Vocabulary Image Classification + A Retrieval-based Approach for Open Vocabulary Image Classification + <p>The advancement in language and vision models (LLM) has seen remarkable progress in recent years. However, the training of these large-scale models poses challenges in terms of time and computational resources, particularly with regards to deep learning models that require powerful GPUs. This has created a significant gap between Big Tech companies, who possess substantial resources to train LLM models, and academia, which often lacks the necessary means to contribute significantly in this field.</p> +<p>To address this issue, we propose an innovative open vocabulary framework called CaSED (Category Search from External Databases). Unlike traditional LLM models, CaSED does not rely on extensive training. Instead, it leverages retrieval techniques from an image-text knowledge base to classify or tag images automatically. By utilizing existing knowledge bases rather than requiring extensive training, CaSED eliminates the need for large computational resources.</p> +<p>In this talk, we will show the potential of low-budget approaches in the context of Language and Vision.</p> + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + Paolo Rota + + + + 13:00 + 00:20 + Web Search, fresh and local + + Deploying the PeARS search engine in regional communities + Deploying the PeARS search engine in regional communities + <p>It is widely believed that Web search engines require immense resources to operate, making it impossible for small communities to build alternatives to the dominant players. The PeARS project (https://pearsproject.org/) aims at changing the status quo by providing open-source search tools that can be used by anyone, anywhere. To achieve this, our team designs algorithms that run on entry-level hardware, using both traditional and cutting-edge machine learning techniques.</p> +<p>This talk will focus on a specific use case for PeARS, showing how the framework can easily be deployed to provide regional search solutions: for instance for local governments, small business communities, or minority speaker groups. We will see how the system can be trained and populated on a home computer in a few clicks and how it can be tailored to the specific community it is addressed to.</p> +<p>The project has received funding from the European Union under the Next Generation Internet programme.</p> + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + Aurelie Herbelot + + + + 13:20 + 00:20 + Image Generation with Diffusion Models + + How computers imagine our world + How computers imagine our world + <p>Recent machine learning developments saw a breakthrough in generating images. So-called Diffusion Models can create photo-realistic images from noise. With the help of an input text (prompt) we can guide the generation and produce matching images.</p> +<p>This technology opened new doors for creating digital art, modifying existing images, and creating stunning visual experiences. In the talk, we will find out how these algorithms work, introduce Stable Diffusion (a concrete implementation), and find out what its use cases are. We will see how text can be used to generate matching outputs but also take a look at more experimental features such as creating images from edges, outlines, or depth maps.</p> +<p>We will mainly focus on the open source text-to-image model Stable Diffusion, which has set new standards in image generation. With it also comes an active community that keeps it open source and accessible for everyone.</p> + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + Markus Pobitzer + + + + 13:40 + 04:20 + Coming soon + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + + 14:00 + 00:20 + The History of, and Path forward for, Copyleft and the GPL + + Copyleft, Software, Freedom, & You: Better Understanding Through History + Copyleft, Software, Freedom, & You: Better Understanding Through History + <p>Copyleft licensing has been the primary strategy of the FOSS community to guarantee users&#8217; rights to copy, share, modify, redistribute reinstall modified versions of their software. In our earliest days, we naïvely thought that the GPL would work like magic pixie dust; we&#8217;d sprinkle it on our code, and our code would remain free as in freedom.</p> +<p>The reality check that we&#8217;ve received over the last 35 years has been painful on this issue. Nevertheless, those who forget the past are condemned to repeat it.</p> +<p>This talk will not only discuss the primary past GPL enforcement efforts around the world, but also provide a whirlwind tour of how copyleft came to work how it does and discuss ideas and suggestions of future strategies in copyleft that, informed by this history, are our best hope for software freedom.</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Karen Sandler + + + + 14:20 + 00:20 + Reproducible Builds – the first 10 years + + an overview about reproducible builds, the past, the presence and the future + an overview about reproducible builds, the past, the presence and the future + <p>In this talk Holger Levsen will give an overview about reproducible builds, the past, the presence and the future. How it started with a small BoF at DebConf13 (and before), how it grew from being a Debian effort to something many projects work on together, until in 2021 it was mentioned in an executive order of the president of the United States. And of course the talk will not end there but rather outline where we are today and where we still need to be going, until we&#8217;ll all be running 100% reproducible software, verified by many.</p> +<p>And while Holger&#8217;s day to day work and this talk will have a Debian focus, reproducible builds in other project will be featured and not be left behind as Holger has been involved in Reproducible Builds since 2014 and has been working on reproducing Arch Linux, coreboot, Fedora, FreeBSD, NetBSD, OpenWrt and others. Other important software projects will also be covered and last not least Holger will also explain why you&#8217;ll want verifiable SBOMs and not just SBOMs.</p> +<p>So what is this talk about exactly again? &#8220;A build is reproducible if given the same source code, build environment and build instructions, any party can recreate bit-by-bit identical copies of all specified artifacts.&#8221;<br /> +(https://reproducible-builds.org/docs/definition)</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Holger Levsen + + + + 14:40 + 00:20 + AI Law & Ethics for sustainability corporate governance + + <p>In the era of AI, EU regulators struggle in definying a level playfield for the fruitful development of technology and utmost protection of fundamental rights and freedoms of individuals. The so-called AI Act is going to be approved by the end of 2023 and should come into force after a 2-year grace period. In any case most of the provision will be strongly risk-based and accountability oriented. In this fragmented and complex scenario, it is extremely interesting to observe how the use of AI law and AI ethics can serve the purposes of sustainability corporate governance, fostering innovation AND preserving fundamental rights and freedoms in a measurable and viable manner, having rights entering into business logics and decisions.</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Federico Sartore + + + + 15:00 + 00:20 + Windows and Office “tax” refund + + The right to install any software on any device and various cases about the refund of pre-installed software + The right to install any software on any device and various cases about the refund of pre-installed software + <p>Some manufacturers try to force to use the preinstalled software on the PC you acquire, sometimes also claiming that alternative software will not work properly.</p> +<p>On 2018 Luca purchases a Lenovo Tablet/PC and, since it comes with Microsoft Windows pre-installed, he requested the refund to Lenovo, but Lenovo denied to refund Luca. A court case was initiated, and Lenovo was condemned to pay a punitive damages of 20&#8217;000 euros for its abusive behaviour.</p> +<p>After this &#8220;historic&#8221; case, some other refund were request to other companies, such as HP, Dell, Microsoft, Acer, and again to Lenovo. Each OEM tried to deny the refund, with various reasons such as contractual clauses contained in the sale contract or in the same license agreement, or the need to delete the Product Key stored in the MSDM BIOS ACPI table and therefore they require to send the PC to their laboratories. These reasons have no valid legal basis, because – at least in Italy – the license agreement is a contract totally unrelated to the sale contract, so a third party may not impose any action on your material good, and the license agreement has remained without causal and economic justification, because not accepted and missed to be concluded.</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Luca Bonissi + + + + 15:20 + 00:20 + How do you really do GPL enforcement? + + aka Bringing software right-to-repair to the masses + aka Bringing software right-to-repair to the masses + <p>Enforcing the General Public License (GPL) to bring real software freedom to people can be very challenging in practice, but many of the steps in the process are straight-forward. As the only organization enforcing the GPL for Linux, Software Freedom Conservancy (SFC) receives a huge quantity of GPL violation reports, and needs to triage each one as the beginning of our process. The next step is called the &#8220;CCS check&#8221; (complete corresponding source check), a crucial but barely known activity that determines whether some candidate source code actually corresponds to the device/binaries that the candidate was provided for. We will discuss the CCS check in detail, providing examples and tips for doing your own checks.</p> +<p>Lastly, we&#8217;ll cover the offer check, something everyone can do to help in SFC&#8217;s efforts to bring real software right-to-repair to every device running Linux. Whether you want to check offers for source code, review a CCS candidate, or go even further with additional GPL enforcement work of your own, this talk will set you up for success.</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Denver Gingerich + + + + 15:40 + 00:20 + KYCS ‒ Know Your Code Sources (and let it be known) + + How Cyber Resilience Act is going to change FOSS forever and what can we do about it? + How Cyber Resilience Act is going to change FOSS forever and what can we do about it? + <p>CRA at the time of submission is still in a draft status, but it is relatively clear that it will impose a duty to make the software safer if and when it is distributed on the market as a final product.</p> +<p>Part of the safety requirements includes the obligation to collect and keep available for inspection a list of software components obtained from third parties, that is their provenance, and the insecurities obtained through mainly CVE scanning. Incidentally there is an obligation to support and provide security patches after the product is placed on the market (hint, open source rulez).</p> +<p>Open Source Software is not exempted per se, the current discussion is where the final burden and responsibility of complying, if at all, lies. In any case, whatever the outcome of such discussion is, open source projects should strive to ease up CRA compliance for their downstream adopters, if they want to keep them. We will concentrate on how open source projects that aim at being considered in an industry supply chain (including that of software industry) should strive to make the supply chain&#8217;s life easier, building on our experience with Eclipse Oniro and the toolchain and processes we have devised for it.</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Carlo Piana + Alberto Pianon + + + + 16:00 + 00:20 + Continuos compliance @ Linaro + + Linaro's open source innovation engine on steroids thanks to production grade and long term sustainability attributes. + Linaro's open source innovation engine on steroids thanks to production grade and long term sustainability attributes. + <p>Continuous compliance is rooted into Linaro&#8217;s everyday activities, whether the target is kernel development, a SOC Yocto SDK, an SDV, or consumer electronics project. Open source is at the center of today&#8217;s software innovation, ubiquitous across products and services and, as such open source needs to evolve from a mere innovation into a production-grade engine. Linaro, one of the leading linux kernel contributors, is perfectly positioned to support our customers and the entire open source community throughout this transition. This talk will showcase Linaro&#8217;s continuous compliance and production-grade processes, artifacts, and best practices and shed some light on what&#8217;s happening under the hood of one of the world leading open source organizations and contributors.</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Davide Ricci + + + + 16:20 + 01:40 + The current state of SBOMs and SPDX + + Updates for 2023 + Updates for 2023 + <p>Software Bill of Materials (SBOMs) are rapidly becoming increasingly important in the software supply chain. Software Package Data Exchange (SPDX) is a freely available ISO standard that defines the way of communicating information about software components. It includes, but is not limited to, metadata such as name and version, but also licensing and security information.</p> +<p>In this talk, we will present the latest updates from the ever-changing landscape of SBOMs and SPDX, focusing in real-world use cases. Familiarity with the concepts will not be assumed, as they will be briefly explained.</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Alexios Zavras + + + + 16:40 + 00:20 + ZOOOM Project track introduction + + Introduction to the ZOOOM project and presentation of the next-day activity + Introduction to the ZOOOM project and presentation of the next-day activity + <p>The ZOOOM Track aims to disseminate the findings of the ZOOOM project and show the intersection between legal and business aspects in IP management and value creation/capture in innovation ecosystems based on open-source software (and beyond).<br /> +In this talk the ZOOOM consortium will present the first results of the project discussed in the following talks and the activity for the second day workshop of the SFSCon.</p> + + ZOOOM project track + ZOOOM project track + ZOOOM project track + https://www.sfscon.it/tracks/zooom-project-track-2023/ + + Stefano Menegazzi + Alessandro Rossi + Amalia de Götzen + Andy Peruccon + + + + 17:00 + 00:20 + The ZOOOM Framework: Legal aspects of FOSS and beyond + + <p>License compliance efforts for software projects involve not only legal-oriented actions, but also governance elements such as organizational processes and community management. The larger the community or the organization working collectively, the more complex a compliance program for software projects may become. Free Software licenses being direct licensing models are easier to comply with in comparison to proprietary licenses. This talk will give an overview of the Free Software licensing compliance practices, including initiatives such as REUSE for streamlining copyright and license information for software projects.</p> + + ZOOOM project track + ZOOOM project track + ZOOOM project track + https://www.sfscon.it/tracks/zooom-project-track-2023/ + + Niharika Singhal + + + + 17:20 + 00:20 + The ZOOOM Framework: Business Aspects of FOSS and Beyond + + <p>Companies can engage in the 3Os in many ways and for different reasons. In many cases, strategic and competitive advantages are at the core of a company’s decisions, but in other cases, motivations can involve social and ethical considerations such as reciprocity, altruism, and democratization of knowledge. In this talk, we outline the main business-related motivations identified by the ZOOOM project for using and contributing to FOSS. Among them: pursuing competitive advantage, reduction of development costs, technological innovation, access to knowledge or assets, and interoperability. Based on the interviews conducted by the ZOOOM partners, we also discuss major challenges and risks that businesses leveraging the 3Os must navigate.</p> + + ZOOOM project track + ZOOOM project track + ZOOOM project track + https://www.sfscon.it/tracks/zooom-project-track-2023/ + + Seckin Celik + Davide Serpico + + + + 17:40 + 00:20 + The ZOOOM Framework: An Ecosystemic Perspective + + <p>In this talk, we analyse the ecosystem trend in the context of the 3Os, particularly FOSS. Based on the existing literature and data from ZOOOM interviews, we explore the potential roles that companies can play in open-source ecosystems, their interactions with the other players of the ecosystem, and their awareness about the impact that systemic elements have on their business. Most companies recognize the advantages of being embedded in ecosystems where the creation of new knowledge is facilitated by joint research work, collaboration, and expertise sharing. However, companies identify themselves into specific roles depending on their strategy, main business, network structures, and communities. Finally, we outline a multilevel framework of how business and innovation ecosystems complement each other in the realm of the 3Os.</p> + + ZOOOM project track + ZOOOM project track + ZOOOM project track + https://www.sfscon.it/tracks/zooom-project-track-2023/ + + Davide Serpico + Seckin Celik + + + + + + 11:20 + 00:20 + Community tidbits + + How to keep free software projects happy and healthy + How to keep free software projects happy and healthy + <p>Open source communities, when they have reached a certain size, face their very own set of challenges.</p> +<p>In the virtual world, timezones, language barriers and dealing with many e-mails can become a burden. In the real world, the organization of travels to project meetings, the planning of annual conferences in an easy to reach location, and even the shipment of gadgets around the globe turn out to be quite demanding.</p> +<p>While free software projects might have the same diversity and outreach as large organizations, they often have not the same resources at hand as established corporations. They need to be a bit more creative &#8211; but luckily, that&#8217;s in their DNA!</p> +<p>In the spirit of sharing knowledge openly, this talk intends to give some real-life examples of challenges your community may face, unexpected situations you might run into and how to solve them &#8211; sometimes in unconventional ways.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Florian Effenberger + + + + 11:40 + 00:20 + Transforming South Tyrol’s Economy: Empowering Tourism and Agriculture through Decentralized Applications (dApps) + + <p>The implementation of decentralized applications (dApps) holds immense potential for transforming two of the key economic sectors of South Tyrol: tourism and agriculture.</p> +<p>In the tourism industry, dApps can revolutionize the way services are offered and transactions are processed. By utilizing smart contracts and blockchain technology, dApps can enable transparent and secure processes for booking accommodations, tours, and activities. This ensures that tourists have direct access to reliable information-, while it eliminates the need for intermediaries, and reduces costs. Moreover, dApps can facilitate decentralized reviews and ratings, empowering visitors to make informed decisions based on authentic feedback from fellow travelers, i.e., fake reviews can be eliminated. This fosters trust and enhances the overall tourist experience.</p> +<p>In the agriculture sector, dApps can address key challenges faced by farmers and consumers alike. For example by implementing blockchain-based supply chain solutions, dApps can ensure traceability and transparency in the production, processing, and distribution of agricultural products. This allows consumers to verify the origin and quality of the products they purchase, promoting trust and supporting local producers. Additionally, dApps can facilitate direct farmer-to-consumer interactions through decentralized marketplaces, eliminating unnecessary middlemen and enabling fair and efficient transactions. This empowers farmers by providing them with a direct and secure channel to sell their products while offering consumers access to fresh and locally sourced goods.</p> +<p>By embracing decentralized applications, South Tyrol can unlock new opportunities for its tourism and agriculture sectors. These applications not only enhance efficiency and reduce costs but also increase customer trust, promote sustainability, and support the local economy. As a result, dApps have the potential to shape a thriving ecosystem that benefits both businesses and consumers in South Tyrol&#8217;s key industries.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Max Oberperfler + + + + 12:00 + 00:20 + Beyond Google & Apple duopoly + + FOSS alternatives for digital mobility + FOSS alternatives for digital mobility + <p>StatsCounter tell us that in May &#8217;23 the market share for the smartphones is split in this way: Android/Google 67.56%, iOS/Apple 31.6%. Which means the remaining is less that 1%. Today we are speaking about that 1%: available alternatives, future outlook and most important why we have to care of about that 1%. Spoiler: because a study of the University of Edinburgh and the Trinity College Dublin published in Q4/2021 proves what all we know &#8211; our smartphones leak our data constantly.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Roberto Foglietta + + + + 12:20 + 00:20 + Combatting E-Waste’s Environmental Harm With Free Software + + <p>Electronic waste, or e-waste, refers to discarded information and communications technology equipment such as laptops, smartphones, and large and small household appliances. In 2015, Achim Steiner of the UN Environment Programme (UNEP) described &#8220;an unprecedented tsunami of electronic waste rolling out over the world&#8221;. In 2016, 44.7 million tonnes of e-waste were generated, equivalent to 4500 Eiffel Towers. In 2019, the World Economic Forum determined e-waste to be the fastest growing waste stream in the world. In 2022, the amount of e-waste hit 59.4 million tonnes, a 33% increase since 2016. Given the economic, and not the technical logic driving the digital economy, devices are rendered obsolete before their time and the pile of e-waste continues to grow.</p> +<p>E-waste is the source of significant environmental harm. Production, transportation, and end-of-life treatment accounts for 80+% of a device&#8217;s carbon footprint over its operating life. Extracting rare earth metals consumes copious amounts of energy; moreover, mining is typically done in the Global South under miserable social conditions. The end-of-life treatment of e-waste means those same devices return to the Global South, resulting in toxic pollution entering the environment and harming workers.</p> +<p>Today, most devices have chips which need software to keep them running. Thus, software plays a crucial role in preventing e-waste: software determines a hardware&#8217;s minimum working requirements, and for how long a device remains safely in use. For most users, environmental harm driven by software has largely remained overlooked … let alone that we can already do something about it with Free Software.</p> +<p>In this talk I will provide a brief overview of the environmental harm from e-waste driven by software, and I will link the inherent values that come with a Free Software license to sustainable software design. By enabling full user autonomy and removing artificial vendor dependencies, Free Software means electronic devices that are otherwise unsupported by manufacturers remain in use. Lightweight and up-to-date software, free from bloat and energy-consuming ads, allows aging, less-powerful hardware to keep running and stay out of the waste bin. Software freedom means hardware freedom, and that means we are able to combat the environmental harm caused by e-waste with Free Software today.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Joseph P. De Veaugh-Geiss + + + + 12:40 + 00:20 + Building an Awesome Product by Creating a Community Around It + + How to effectively engage with your user community + How to effectively engage with your user community + <p>In today’s competitive market, it has become crucial to build a thriving community of developers and users around your product. Gone are the days when code alone could make a product successful; the human element now plays a pivotal role. This community becomes the face and representation of your project to the outside world. Having worked on our Open Source project for over 8 years, I have accumulated a wealth of proven strategies for attracting contributors, training newcomers, and expanding the user base. In my presentation, I will explain how to effectively engage with your user community in order to achieve the following objectives: collect feedback, share use cases, contribute to documentation, identify bugs and collaboratively develop code<br /> +Because improving your product goes beyond just writing code; it involves nurturing a strong community of people.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Alessio Fattorini + + + + 13:00 + 00:20 + Sustainability of Open Source Software and Potentials in Developing Countries + + <p>Although developing countries hold a lot of potential in software development and research, the licensing cost of commercial software, platforms, and online services serve as a hindrance in their widespread adoption. Open source software can be a very useful and viable solution in this regard. On one hand it can fill up the need for less costly software alternatives. On the other hand, it can reduce the adoption of pirated versions of commercial software by individuals and groups to make up for the cost factor. Furthermore, with more adoption of open source software in the developing countries, it will also encourage and engage more programmers from the developing countries to maintain the open source software and to contribute to it, adding to the sustainability of various open source projects and thus benefiting open source software development beyond borders. The speaker, who has the experience of working in both the developing countries as well as here in Alto-Adige/Sud-Tirol region, will share insights on this topic from both of these diverse perspectives.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Abid Munir Bajwa + + + + 13:20 + 00:20 + Sharing the power of appreciation: Celebrating ‘I Love Free Software Day’ + + <p>In the realm of Free Software, expressing gratitude towards Free Software contributors often goes unnoticed. The &#8220;I Love Free Software Day&#8221; (https://ilovefs.org) provides a platform for individuals and organisations to do exactly this, showing appreciation. But it is crucial to recognize that our appreciation for Free Software should extend far beyond this single day. This talk highlights the significance of the &#8220;I Love Free Software Day&#8221; as a platform for expressing support, love, and gratitude towards the developers and contributors who make Free Software possible.</p> +<p>Throughout the presentation, we will showcase memorable moments and successful initiatives from past celebrations, demonstrating the collective efforts to acknowledge and honor the impact of Free Software. We will discuss ideas and strategies for making the upcoming &#8220;I Love Free Software Day&#8221; even more remarkable.</p> +<p>However, it is essential to emphasize that our expressions of love and support for Free Software should not be limited to just one day. While the &#8220;I Love Free Software Day&#8221; serves as a catalyst for celebration, it should inspire us to continue demonstrating our gratitude throughout the year. We will explore ways to incorporate ongoing appreciation into our daily lives, such as contributing to Free Software projects, advocating for their importance, and recognizing the efforts of developers and contributors regularly also in a financial way.</p> +<p>By extending our appreciation beyond a single day, we can cultivate a culture of continuous support for Free Software. We invite everyone interested in Free Software to join us in this endeavor, as we strive to create an environment where gratitude and acknowledgment become integral parts of our interactions within the Free Software community.</p> +<p>Let us embrace the &#8220;I Love Free Software Day&#8221; (https://ilovefs.org) as a starting point, a reminder of the significance of Free Software, and a call to action to express our love and support throughout the year. Together, we can build a community that values and appreciates the tireless efforts of Free Software developers and contributors, making a lasting impact on the future of software freedom.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Bonnie Mehring + + + + 13:40 + 01:40 + MindsHub no-profit + + Makers, programmers, enthusiasts with a focus on education + Makers, programmers, enthusiasts with a focus on education + <p>MindsHub is a no profit association from Ala (near Trento), which provides a space for enthusiasts to develop skills and ideas in informatics, electronics, robotics and 3D printing: https://mindshub.it/.<br /> +Everything started back in 2016, when we organized CoderDojo Vallagarina to introduce young boys and girls to programming. The association has since grown to have multiple running projects, and over 20 active members, aging 12 years old and up. We meet once a week to learn from each other and bring the activities forward.<br /> +We created an autonomous farming robot (featured at Maker Faire Rome among the best 10 projects), we delved into online security with schools, we developed a FOSS app to report and collect garbage, we spoke to Samantha Cristoforetti on the ISS, &#8230;</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Fabio Giovanazzi + Alessio Zeni + + + + 14:00 + 00:20 + RIOS (Rete Italiana Open Source) presents latest updates on the OSPO Alliance and the Good Governance Initiative. + + <p>The Good Governance Initiative (GGI) proposes a methodological framework to assess open-source awareness, compliance and governance in any kind of organizations, helping them to structure and improve the use of FOSS towards an OSPO. This presentation will highlight the main progresses and new features achieved since last year, such as the translation of the GGI Good Governance in five languages, the recent Success Stories presented in the OnRamp meeting series, and many more. Stefano Pampaloni, vice-president of the Italian Open Source Network, will present the latest developments, elaborating on the RIOS Network&#8217;s contribution to the project.</p> + + OW2 track + OW2 track + OW2 track + https://www.sfscon.it/tracks/ow2-track-2023/ + + Valentina Del Prete + Stefano Pampaloni + + + + 14:20 + 00:20 + The CORD-19 Topic Visualizer + + Exploring the evolution of research topics during the COVID-19 pandemic + Exploring the evolution of research topics during the COVID-19 pandemic + <p>The COVID-19 pandemic reshaped research across various fields, producing an unprecedented flood of articles. In response, several open-access corpora were created; among them, the COVID-19 Open Research Dataset (CORD-19) collected over a million articles in 2.5 years.</p> +<p>In this presentation, we introduce the CORD-19 Topic Visualizer (CORToViz), a method and tool for exploring CORD-19&#8217;s scientific abstracts. It uses a stack of modern open source technologies to cluster articles and mine temporal topics. CORToViz has an interactive dashboard for quick topic visualization, time series tracking, and statistical testing.</p> +<p>We will show the results extracted with CORToViz, which allowed us to visualize and tell in a synthetic way what happened to react against COVID-19, comparing it with the key moments of the pandemic. The high adaptability of our approach suits any textual document corpus, and it lends itself easily to exploring new challenging fields of research, such as climate change.</p> +<p>CORToViz represents the first prototype of a series, which we aim to develop within the NGI Search Program, under the TETYS project (Topics Evolution That You See), aiming to build the next-generation Web topics explorer.</p> + + OW2 track + OW2 track + OW2 track + https://www.sfscon.it/tracks/ow2-track-2023/ + + Francesco Invernici + + + + 14:40 + 00:20 + Can AI counteract Health-related Fake News? + + HeReFaNMi (Health-Related Fake News Mitigation): an open-source project to counteract health-related misinformation + HeReFaNMi (Health-Related Fake News Mitigation): an open-source project to counteract health-related misinformation + <p>HeReFaNMi (Health-Related Fake News Mitigation) is an NGI-Search-funded project to give back trustworthiness to the Internet community by tackling fake news spread. Other than the well-known cyber threats, several factors have been undermining the Internet search experience lately. One of the pandemic&#8217;s lessons learned concerns the health-related fake news spread over websites and social media networks. Some nefarious effects came as a non-negligible hesitancy towards national healthcare systems&#8217; guidelines. Since then, several AI-powered solutions have been developed to counteract fake news circulation using supervised and unsupervised learning. The task is challenging due to the need for continuous updating upon introducing new scientific findings. The so-called data drift and catastrophic forgetting also affect the effectiveness of AI-powered classification methods.<br /> +LLMs (Large Language Models) have recently made their way through the AI landscape by delivering unprecedented performances over text analytics, mining, question and answering systems, and text generation. However, LLMs suffer from Hallucination, meaning they can elaborate contents that are unreliable as a source of truth even when fine-tuned on scientifically sound datasets.</p> + + OW2 track + OW2 track + OW2 track + https://www.sfscon.it/tracks/ow2-track-2023/ + + Alessandro Bruno + + + + 15:00 + 03:00 + Coming soon + + OW2 track + OW2 track + OW2 track + https://www.sfscon.it/tracks/ow2-track-2023/ + + + 15:20 + 00:20 + Videobooks + + Augmenting the Reading Experience with Synchronous Reading and Listening + Augmenting the Reading Experience with Synchronous Reading and Listening + <p>Recent open source libraries apply machine learning for forced alignment of speech and text and make it possible to produce text that is synchronized to audio in various languages. This makes it possible to produce a new type of reading experience: the videobook! This contribution talks about a pilot project that aims to produce videobooks based on hundreds of audiobooks and texts that are already in the public domain (such as librivox and the gutenberg project). Possible applications in the educational domain are discussed: such as language learning, accessibility and e-learning applications</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Michael Schlauch + + + + 15:40 + 00:20 + Can we sustain Software Freedom in the mobile world? + + <p>Laptops and servers are running Linux based free software just fine these days. But what about the small and powerful devices in our pockets that we carry everywhere?</p> +<p>Can we achieve the same level of freedom and choice on smart phones? Can we make that usable for everyone?</p> +<p>This talk gives a short overview about the current state of Linux on mobile devices.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Nicole Faerber + Guido Günther + + + + 16:00 + 00:20 + Process Analysis Tools 4 Public Utility + + <p>Background: Process Mining is a growing technology in recent years that consists of integrating specific process mining tools with management software systems to analyze process data and provide feedback on process efficiency, potential bottlenecks, and resource utilization in a production and business context.</p> +<p>Aim: The aim of this presentation is to showcase open source process mining tools, and how these could be integrated with other publicly available software in order to help make meaningful decisions driven by real data. This could be applied to any business context, including non-profit organizations and services to the public and community.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Martina Burlando + + + + 16:20 + 00:20 + TOGETHER IS BETTER + + Can competitors work together with open source ? + Can competitors work together with open source ? + <p>When community and Open source mindset are part of a company culture, it becomes easy to plan and project new products (even with potential competitors). In an open source project, all or part of the produced material is made publicly available for others to use, under certain conditions. The mistery of the &#8220;unpaid programmer&#8221; disappears when corporations see benefits coming from other members in the project and even fear of &#8220;loosing control&#8221; is balanced with continuous feedbacks from developers and users. This is the story of a new project&#8230;</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Nicola Filippini + + + + 16:40 + 00:20 + BIM2FEM: From Building Information Modeling to Finite Element Analysis + + An open-source-based workflow + An open-source-based workflow + <p>The construction industry currently lacks automated open-source-based workflows for thermal and structural analysis of buildings. The Finite Element Method (FEM) represents the state-of-the-art approach for structural and thermal analysis in construction engineering. With the recent increase in computing power, complex models can now be analyzed within a feasible amount of time. However, the integration of FEM into Building Information Modeling (BIM) workflows remains an active area of research. While some commercial software provides interfaces and plug-ins for BIM-integrated finite element analysis, their capabilities are limited and their use is restricted to the corresponding commercial software. Customizable open-source-based approaches exist, but they lack consistent and robust workflows. A consistent data flow of material properties and boundary conditions is essential but remains a challenging task that has not yet been sufficiently addressed. Fraunhofer Italia has developed a workflow based on the open IFC-standard and open-source FEM software packages, which has been tested and validated through the creation of a software prototype. This talk will introduce the developed workflow and demonstrate the prototype’s functionalities through selected use-cases.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Julius Emig + + + + 17:00 + 00:20 + Open Tracing Tools: Overview and Comparison + + <p>Open Tracing Tools are software tools that enable the monitoring, debugging, and optimization of distributed software architectures. They provide a way to trace and understand the flow of requests and data through various components of a distributed system.</p> +<p>In the last months, the authors conducted a study to select and compare 30 tracing tools using a systematic literature review approach. They analysed the open source licence, features, architecture, the collected data, interoperability, but also the popularity, benefits, and issues of each tool, using topic modelling and sentiment analysis. The results offer a systematic comparison of the selected tracing tools.</p> +<p>We&#8217;ll say it in advance: there is one perfect tool that is better than all the others but this talk will present a) a brief overview of what open tracing tools are and the OpenTelemetry standard, b) the process followed in the study and c) the obtained results. For those that want to read the entire report, here it is: https://arxiv.org/abs/2207.06875.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Andrea Janes + Xiaozhou Li + Valentina Lenarduzzi + + + + 17:20 + 00:20 + Providing and Receiving Feedback in Open Source + + <p>For open-source developers, user feedback provides a direct line between both parties, offering valuable insights. That&#8217;s at least how the theory goes In reality, the feedback is often skewed, and the minority of negative loudmouths sometimes overshadows the silent majority of satisfied and grateful users. Needless to say, this doesn&#8217;t do any favors to open-source developers.</p> +<p>Is there a way to improve the situation? Join this session and learn how you, as an open-source developer, can deal with feedback and other challenges unique to the open-source development model.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Dan Čermák + + + + 17:40 + 00:20 + Shaping the future with Data + + How Data can become the most valuable asset for a business/ company + How Data can become the most valuable asset for a business/ company + <p>How to launch, build and scale a business with DATA.<br /> +Support any decision making process<br /> +Become a value for people<br /> +Can help in the change management</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Zemourda Aissaoui + + + + + + 11:20 + 00:20 + Decoding the Corporate Maze + + Empowering Exposure Assessment through Open Software and OSINT + Empowering Exposure Assessment through Open Software and OSINT + <p>Embark on a remarkable expedition as we delve into the realm of Exposure Assessment. Unlocking its wonders, we will navigate this captivating process exclusively utilizing Open Software and OSINT. With a mere glimpse into a company&#8217;s domain, we will traverse the intricate labyrinth of their infrastructure, diligently seeking a potential access point into their corporate system.</p> + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + Francesco Pavanello + + + + 11:40 + 00:20 + Predict security attacks in FOSS + + Why you want it and how to do it + Why you want it and how to do it + <p>FOSS is here to stay, displacing malevolent privative counterparts—great!<br /> +FOSS exposes bugs to be found and fixed by the community—great!<br /> +FOSS shows security issues than can be exploited by attackers—gr..what?<br /> +In the last decades, source code transparency has made the job of black-hat hackers increasingly easy. We now have security websites exposing vulnerabilities and even exploits online—and despite good practices like responsible disclosure, it is the sheer amount of (external) code what makes everyone ultimately vulnerable. In plain words, nobody&#8217;s safe.</p> +<p>From that base, this talk puts forward the need for a concept of *probability of future exploits*. This is crucial for project management, but also at developer level, to see the risks of not upgrading (or yes upgrading!) a dependency. We show how this probability can, and must, be computed from a project&#8217;s dependency tree, in a manner that only the use of FOSS can allow. We also show that the development history of the project and its dependencies is key to getting useful results.</p> +<p>Finally, we merge the dependency tree and development history of a project into a white-box model, which we use to estimate the probability of future exploits. We show how to do it for the Java-Maven environment, for which we can use the FOSS tool &#8216;FIG&#8217;. FIG, written in C++ and released under GPLv3, was designed for statistical estimations and can compute the probability of attacks in complex scenarios like the ones at hand.</p> + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + Carlos Esteban Budde + + + + 12:00 + 00:20 + Software freedom primer on Self Sovereign Identity + + Let's stop feeding the surveillance economy + Let's stop feeding the surveillance economy + <p>The federated identity ecosystem is one of the key mechanisms by which the platform and surveillance economy has grown into today&#8217;s shape, mostly on the shoulders of a vast number of Open Source contributions. Self Sovereign Identity is a privacy, freedom, control first approach to managing identity in a decentralised and secure way. In his talk, Georg Greve will provide a primer into SSI, how it works, and share insights from developing the SSI stack within the Eclipse Cross Federation Services Components, formerly Gaia-X Federation Services.</p> + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + Georg Greve + + + + 12:20 + 00:20 + Opensource to help increase organizations Cybersecurity posture + + Cybersecurity is a compulsory, tough and expensive task for all organizations + Cybersecurity is a compulsory, tough and expensive task for all organizations + <p>Cybersecurity is a compulsory, tough and expensive task for all organizations, private and public, large , medium and small.<br /> +No one can ignore it anymore, and building a viable Cybersecurity strategy is a complex task that needs to balance budget, keeping up with attacker technologies, available skills and a plethora of expensive tools on the market.<br /> +Let&#8217;s discus s on how available Opensource solutions may greatly help ours organizations to be more effective in implementing their Cybersecurity posture, while optimizing available budget.</p> + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + Carlo Falciola + + + + 12:40 + 00:20 + Technical leverage analysis in the Python ecosystem: lessons learned + + <p>[Context:] Technical leverage is the ratio between dependencies (other people&#8217;s code) and own codes of a software package. It has been shown to be useful to characterize the Java ecosystem and there are also studies on the NPM ecosystem available. [Objective:] By using this metric we aim to analyze the Python ecosystem, how it evolves, and how secure it is, as a developer would perceive it when deciding to adopt or update (or not) a library. [Method:] We collect a dataset of the top 600 Python packages (corresponding to 21,205 versions) and used a number of innovative approaches for its analysis including the use of a two-part statistical model to deal with excess zeros, a mathematical closed formulation to estimate vulnerabilities that we confirm with bootstrapping on the actual dataset. [Results:] Small Python package versions have a median technical leverage of 6.9x their own code, while bigger package versions rely on dependencies code a tenth of their own (median leverage of 0.1). In terms of evolution, Python packages tend to have stable technical leverage through their evolution (once highly leveraged, always leveraged). On security, the chance of getting a safe package version when choosing a package is actually better than previous research has shown based on the ratio of safe package versions in the ecosystem. [Conclusions:] Python packages ship a lot of other people&#8217;s code and tend to keep doing so. However, developers will have a good chance to choose a safe package version.</p> + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + Ranindya Paramitha + + + + 13:00 + 00:20 + MBBS: A Multimodal Behavioral Biometric Scheme for Smartphone User Authentication + + <p>In this presentation, we present MBBS, a tetra-model behavioral biometric-based authentication scheme designed specifically for smartphones. MBBS utilizes four distinct modalities to authenticate users: touchscreen swiping patterns, taps on &#8220;text-independent&#8221; 8-digit numbers, name writing on the touchscreen, and micro-movements of the hand during the entry process. To enhance overall accuracy and security, MBBS incorporates a state-of-the-art Generative Adversarial Network (GAN) powered data augmentation architecture. This innovative approach allows us to demonstrate the effectiveness of MBBS using both real user samples and augmented samples, consisting of a combination of &#8220;real&#8221; and &#8220;GAN-generated&#8221; data, on an actual Android device. One of the key advantages of MBBS is its high usability, as it eliminates the need for users to remember any secret information. Instead, it leverages users&#8217; familiarity with natural processes, thereby increasing accuracy in real-time by employing GAN technology, all without requiring a large sample size from users. We will also present preliminary results from our performance, security, and usability analysis, which showcase a positive opinion regarding the effectiveness of our developed authentication mechanism.</p> + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + Attaullah Buriro + + + + 13:20 + 00:20 + Recommending security fixes for weak open-source code with AI + + <p>Technical debt is a metaphor that describes not-quite-right code introduced for short-term needs. The effort to refactor it increases if it remains for a long in the software. When developers are aware of it and admit it in source code comments, the debt is called Self-Admitted Technical Debt (SATD). Thus, SATD indicates weak code that developers are aware of. The question is whether they are aware that this code may be vulnerable to attacks. This presentation will illustrate how artificial intelligence can be employed to recommend security fixes for vulnerabilities to developers.</p> + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + Jorge Melegati + Moritz Mock + Barbara Russo + + + + 13:40 + 04:20 + Coming soon + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + + 14:00 + 00:20 + Free Software and AI in Europe + + How Europe regulates AI and Free Software + How Europe regulates AI and Free Software + <p>In this talk, I will present the latest developments in EU legislation and activities on AI and what role Free Software plays in this.</p> +<p>The European Union&#8217;s AI Act is the first comprehensive set of regulations for the artificial intelligence. Also Free Software plays a role in this regulation. I will shed light on the upcoming rules and evaluate what this means for Free Software, AI but also other upcoming regulations.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Alexander Sander + + + + 14:20 + 00:20 + Why Do We Need A Next Generation Internet? + + Improving the Internet as a platform, one Free Software at a time + Improving the Internet as a platform, one Free Software at a time + <p>The Internet today forms the backbone of the digitisation of our society and economy. As connectivity increases, the boundaries between the real and digital world get increasingly blurred. However, there has been an erosion of trust in the Internet following revelations about the exploitation of personal data, large-scale cybersecurity and data breaches, and growing awareness of the proliferation and impacts of online disinformation.</p> +<p>What can be done to improve the Internet as a platform for future generations? What initiatives are currently in place to build key technological blocks of an Internet that supports human-centric values, such as privacy, security, and inclusion, while reflecting the values and norms all citizens should enjoy in Europe?</p> +<p>This talk will explore why the current state of the internet must be re-imagined and re-engineered in order to support healthy societies, the existing European Commission initiative to work towards doing so, and the role of Free Software in accomplishing these goals.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Gabriel Ku Wei Bin + + + + 14:40 + 00:20 + Interoperable Europe Act: A real game changer? + + <p>Interoperability is a core element of the ongoing digitalisation of Europe. With the Interoperable Europe Act, the EU is aiming to create a dedicated legal framework for interoperability and to enhance cross-border digital public services across the European Union. This talk will give an overview of the state of play of this proposed regulation in the ongoing EU legislative process, some of its flaws, and the important role that Free Software and its community can play in it.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Lina Ceballos + + + + 15:00 + 00:20 + The Brand-New Version of IGis Maps + + The “swiss knife” developed and used in South Tyrol for the integrated management of Geo Referenced data and related information + The “swiss knife” developed and used in South Tyrol for the integrated management of Geo Referenced data and related information + <p>2023 saw the launch, after a long and well-structured revision and development process, all based on a fruitful collaboration between several departments of the Autonomous Province of Bolzano, most of the township in South Tyrol, Informatica Alto Adige (SIAG &#8211; Technical partner) and the Consortium of Municipalities of the Province of Bolzano, of the new version of the integrated geographic data management system IGis Maps. In use for years in South Tyrol, has in the Consortium one of its most enthusiastic contributors and supporters.</p> +<p>The very first version was released about eight years ago and its implementation was based on the idea of creating a multi-purpose GIS management system that could support different types of users, that was highly customizable, and, above all, that could be widely shared among the various management entities, both public and private, present within our territory.</p> +<p>After years of use and ad-hoc developments, we can finally present the new version of the IGis Maps system, which incorporates all the technical and technological improvements we realized the system needed.</p> +<p>It was not just a major update together with new functionalities combined inside the previous software structure, but a true re-engineering that led, among other things, to a new and more efficient user interface, a major advancement regarding the internal security, an optimization and improvement of the entire editing section as well as an optimization of the section regarding the automatic geo-processes.</p> +<p>A mobile version is currently under development to better support any field activities, for which a very powerful option will be included, the possibility of creating special work sessions in off-line mode so as to be able to operate even in areas without a proper cellular line network coverage.</p> +<p>Other very important peculiarities concern that the system is developed using a totally free software code and infrastructure, that a detailed documentation has been produced to ensure sustainability to any further future evolution, even in case of technical partner turnover, and finally, that by taking advantage of the high standards and levels of security access can be guaranteed to any type of user. From professional users, through dedicated access and qualifications or, using the ordinary SPID, to the private citizen.</p> +<p>We will show examples of how different types of users and stakeholders now permanently use the system for the management of a variety of tasks related to their activities, and how it was possible to customize IGis Maps to create visualization and data management contexts that best meet their needs.</p> +<p>We will also present a related project concerning the updating and the correction of the new technical basal cartography, built upon the new Basic Core specification, achieved through the automatic conversion implemented by the SIAG team starting from the previous National Core cartography. With the new IGis Maps it was possible to create an advanced editing and management environment that allow both experienced and less advanced users to interact with this important new informative layer to fill all those gaps and errors that are more than normal to discover following an important automatic translation action such as the one carried out for the Basic Core project.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Edoardo Scepi + + + + 15:20 + 00:20 + Let’s monitor implementation of Free Software Policies! + + How to sharpen the demand for public code across Europe and monitor progress with TEDective + How to sharpen the demand for public code across Europe and monitor progress with TEDective + <p>For six years, the Free Software Foundation Europe has been calling with a broad alliance for publicly funded software to be published as Free Software. This initiative has become a great success: Our demand &#8220;Public Money? Public Code!&#8221; has found its way into government strategy papers, party programs, as well as coalition treaties, and is being discussed in public administrations across Europe.</p> +<p>At the same time, we see less progress than expected and vendor lock ins remain a crucial issue. Digital sovereignty is redefined bypassing Free Software. There is openwashing in publicly funded companies, and government projects in favour of Free Software remain empty words. Public statistics on the procurement of Free Software are largely unavailable.</p> +<p>It is therefore no longer enough to promote the idea of &#8220;Public Money? Public Code!&#8221;. We as the Free Software community should be even more vigilant than before – continuing to praise small steps in the right direction, but pointing out and criticising omissions and lack of implementation. We should become more like watchdogs.</p> +<p>In the talk we will look at some examples of lack of implementation of Free Software policies. We will discuss how we, as civil society, can identify such shortcomings and how to deal with them. We will present our initiative TEDective – a free-software solution that makes European public procurement data explorable for non-experts, aiming to provide you with a powerful tool to keep an eye on real progress towards &#8220;Public Money? Public Code!&#8221; across Europe.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Johannes Näder + Linus Sehn + + + + 15:40 + 00:20 + GovStack project a univeral E-Government + + <p>GovStack aims to break down the barriers to building sustainable digital infrastructure and help governments create human-centered digital services that empower individuals and improve well-being.</p> +<p>In 2015, world leaders agreed to 17 Global Goals for Sustainable Development to achieve a better world by 2030. Many of these goals rely on governments’ ability to deliver services to people. We know that digital technology can facilitate broader access and build more inclusive and resilient societies. Plus, digital government services can foster economic growth and promote trust in government institutions.</p> +<p>GovStack is helping governments simplify the digital transformation process and reduce the cost, time, and resources required to create digital platforms and services.</p> +<p>Our approach is based on the SDG Digital Investment Framework, to help countries make smarter and more strategic decisions in their ICT investments.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Oleksii Danyliuk + + + + 16:00 + 00:20 + Empowering Insights: Unveiling the latest innovations in KNOWAGE for BI and Data Visualization + + <p>KNOWAGE is the open source analytics and business intelligence suite made in Italy. KNOWAGE aims to provide company and organizations with analytical capabilities to exploit data to increase their efficiency and sustainability. Also thanks to the open source community support, the suite is constantly evolving combining the reliability of the most popular business intelligence solutions with the security and the transparency guaranteed by open source.<br /> +This talk will show the last year advancements and new features towards a more mobile, accessible and user-friendly product, focusing on the newly rewritten dashboarding tool.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Davide Vernassa + + + + 16:20 + 00:20 + KNOWAGE and AICS for 2030 agenda SDG goals monitoring + + Visualizing international open data to enhance sustainable development + Visualizing international open data to enhance sustainable development + <p>AICS is the Italian Agency for Development Cooperation that started operating in 2016 with the ambition of aligning Italy with the main European and international partners in the commitment to development. KNOWAGE Labs are developing for AICS a platform that is probably unique in the world and will allow both the Agency and the public to access all the major indicators on the UN Sustainable Development Goals provided by international sources (World Bank, WTO, ILO..) and easily compare them. The solution will allow analysis to start from 3 different touch points: the infographic of SDG goals, the advanced search criteria, and the virtual assistant. Then, a customized dashboard will be provided to the user, allowing to further expand the analysis by interacting with charts, maps, tables, etc. This talk will show the state of art of the solution, highlighting objectives and expected results of the project, but also the new developments of KNOWAGE related to AI.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Marco Cortella + + + + 16:40 + 00:20 + European regulators cast their eyes on maturing OSS communities + + <p>As open source software becomes the foundation to build digital products, to run the backbones of ICT infrastructure and to ensure digital sovereignty and cyber resilience, both the technology as well as the communities that develop it inevitably move into the focus of regulators. The European Union is advancing a number of policy initiatives that regulate liability, cyber security, data handling and AI applications in digital products, among others. This is a challenge for the still quite decentralised and globally operating open source community. How could the open source community participate in legislative processes, and what may be the potential impacts of the upcoming regulation on the open source development process and community dynamics?</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Mirko Boehm + + + + 17:00 + 00:20 + How IoT and AI are revolutionizing Mass Customization + + <p>This lightning talk will explore the transformative potential of integrating Internet of Things (IoT) and Artificial Intelligence (AI) in Mass Customization (MC). There is a significant collective impact of these technologies on businesses, enabling the delivery of personalized products and exceptional customer experiences. Besides giving an overview of MC and the potential ways of integrating IoT and AI, the focus will be on the process of real-time data collection and facilitation of the customization process by IoT on one hand, and on the role of AI in data analysis and generation of personalized recommendations on the other hand. By presenting real-world case studies to demonstrate the practical implementation of IoT and AI in providing customized products and seamless customer experiences, attendees will gain insights into the future of customization and learn actionable strategies to effectively leverage IoT and AI.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Thomas Aichner + + + + 17:20 + 00:20 + Smart Werke Meran + + Smart City 100% Open Source + Smart City 100% Open Source + <p>Since 2020 Stadtwerke Meran have realized 5 Use cases:<br /> +&#8211; Control of the control cabinets of public lighting.<br /> +&#8211; Optimizing the service on Wast Press container.<br /> +&#8211; Bike Boxes<br /> +&#8211; Just Nature Project , temperature measuring over Lorawan<br /> +&#8211; Smart Lighting , communication with single light points over Lorwan.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Stefan Mutschlechner + + + + 17:40 + 00:20 + Monitoring the fleet of Sasa with free software + + Is it possibile to monitor a fleet of 400 buses using free software ? + Is it possibile to monitor a fleet of 400 buses using free software ? + <p>The public transport in South Tyrol is going through a huge transformation: new investments, many new green vehicles and a brand new software. Transition will take time and how do we develop a fleet monitoring system to use during the transition without spending a fortune ? maybe with free software!</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Marco Pavanelli + + + + + + 13:00 + 00:30 + NOI Hackathon SFSCON Edition + + Side Event - Hackathon + Side Event - Hackathon + Side Event,Hackathon + + + + + + + 08:30 + 00:30 + Starting of the second day + + SFSCON + SFSCON + SFSCON + + + 13:00 + 00:30 + Closing of the SFSCON 2023 + + SFSCON + SFSCON + SFSCON + + + + + 08:30 + 00:50 + Welcome Coffee + + SFSCON + SFSCON + SFSCON + + + + + 09:20 + 00:20 + How can Blockchain technologies incorporate AI solutions for a safer and efficient Open Data ecosystem. + + <p>The transition from Web 2.0 to Web 3.0 has fueled the need for a secure and decentralized cloud storage solution for digital assets. Web 2.0 was characterized by centralized platforms where user data was under the control of companies. In contrast, Web 3.0 aims to empower individuals and foster a decentralized web that supports and benefits the Free Software and Open Data Communities.</p> +<p>Blockchain technologies facilitate seamless collaboration and interoperability among diverse stakeholders in the Free Software and Open Data communities. Developers can establish open and transparent ecosystems where data can be shared, verified, and integrated across multiple platforms.</p> +<p>Beez, with its own blockchain infrastructure, offers a secure and transparent platform for digital asset exchanges, bolstering transaction integrity and trust. By distributing data across a network of nodes, Beez ensures security and mitigates the risk of single points of failure. Users retain control over their data, safeguard their privacy, and can take advantage of the incentive mechanisms offered by blockchain networks.<br /> +During our presentation, we will explore the role of AI within Beez&#8217;s ecosystem, facilitating accelerated data processing, correlation, and intelligent automation. AI unlocks valuable insights from blockchain data, and we will touch upon the use of Inductive Logic Programming (ILP) to enhance programming performance.</p> +<p>The integration of Blockchain and AI technologies holds great potential for advancing the safety and efficiency of the Open Data ecosystem. By combining decentralized data storage, trust-building mechanisms, and intelligent data processing, Beez is paving the way for a more secure, transparent, and user-centric digital landscape.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Marianna d'Atri + Enrico Zanardo + + + + 09:40 + 00:20 + Real-time aeroplane tracking and the Open Data Hub + + Using the Open Data Hub as real-time data backbone + Using the Open Data Hub as real-time data backbone + <p>Tracking aeroplanes in real time with Open Source Software is possible. Aircrafts must continuously send their current flight parameters to air traffic controllers on the ground and to other aircrafts. This generates a lot of data, especially when planes are being tracked by multiple sensors.<br /> +The Open Data Hub on the other hand offers a great backbone for data storing and processing, where the correct datasets have to be identified and filtered. After all transformation on the data is done, it will be exposed via API to be further used by a web application.<br /> +Bringing together sensor generated data, the Open Data Hub and custom web applications, is a showcase on how the Open Data Hub can be used as a service: OaaS.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Martin Rabanser + + + + 10:00 + 00:20 + Embracing CI/CD workflows for building ETL pipelines + + how we will gather and monitor multi-source spatially-interpolated meteorological parameters in near-real time + how we will gather and monitor multi-source spatially-interpolated meteorological parameters in near-real time + <p>Up-to date measurements of surface meteorological variables are essential to monitor weather conditions, their spatio-temporal variability and the potential effects on a wide range of sectors and applications. Moreover, when included in continuous records of long historical observations spanning several decades, they become essential for assessing long-term climate variability and change locally and on a regional level.</p> +<p>Automated pipelines capable of retrieving and processing near-real time meteorological data satisfy the primary prerequisites towards the development and advancement of effective and operational climate services.</p> +<p>With a public and operational near real-time monitoring web platform in mind, we present automated pipelines to collect and process up-to-date daily temperature and precipitation records for Trentino South Tyrol (Italy) and surrounding areas, and to derive their spatially interpolated fields at sub-km scale. Our pipelines are composed by multiple steps including data download, sanity checks, reconstruction of missing daily records, integration into the historical archive, spatial interpolation and publication onto online FAIR catalogues as (openEO) “datacubes”. The different APIs, data formats and structure across the various data sources, and the need to merge the data onto harmonized meteorological layers, make this a typical case of the so-called Extract, Transform and Load (ETL) pipelines, and, in order to follow the principles of data reproducibility and Open Science, we embraced open-source automated workflow management through GitLab’s Continuous Integration / Continuous Development (CI/CD) capabilities.</p> +<p>CI/CD workflows greatly help the management of the relatively complex graphs of tasks required for our climate application, ensuring seamless orchestration with thorough flow monitoring, application logs, transactions rollbacks, and exception handling in general. Native pipeline-oriented software development also fosters a clean separation of roles among the tasks, and a more modular architecture. This effectively reduces barriers to collaborative development and paves the way for robust operational climate services for researchers and decision makers in the face of the changing climate.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Elena Maines + + + + 10:20 + 00:20 + Free Software and Open Science + + <p>The Open Science movement aims to increase the transparency, reproducibility and inclusiveness of academic research. One of its central goals is therefore to make research outputs broadly available, e.g., manuscripts (Open Access) or research data (Open Data). While software/code created in the course of scientific research is a key artifact of scientific research that is clear distinct from the latter two, it has until recently not received the same attention as manuscripts or data, although it follows its own set of paradigms.</p> +<p>In this talk I will present an overview on how the core concepts of Free Software and the FAIR (findable, accessible, interoperable, reuseable) Principles intersect, what this means for managing code as research output and recent initiatives on the European level that will provide support for these issues.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Christian Busse + + + + 10:40 + 00:20 + MLOps with Kubernetes: unleash the power of the ecosystem! + + <p>Kubernetes is a popular open-source software, today&#8217;s de-facto open standard, to run production workloads. Innovation in the ecosystem thrives with multiple projects that enrich the platform&#8217;s core. Machine Learning Operations (MLOps) is part of the same effort to bring automation into Kubernetes for ML pipelines.</p> +<p>This session aims to explore the Kubernetes-native tools available such as Tekton, Argo CD, Kubeflow, and OpenDataHub, to apply DevOps and GitOps principles in AI/ML contexts.</p> +<p>By the end of the session, attendees will have a clear understanding on how to automate and simplify the iterative process of integrating ML models into software development processes, production rollout, monitoring, retraining, and redeployment for continued prediction accuracy with open source tools.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Natale Vinto + + + + 11:00 + 00:20 + Achieving FAIRness with EDP-portal + + DOI and citation improvements in metadata of EDP-portal + DOI and citation improvements in metadata of EDP-portal + <p>EDP-portal is the access point to the Environmental Data Platform of Eurac Research since 2021 to achieve FAIRness of our datasets. It allows to publish data and metadata and provides APIs and web services for data access. In the last 2 years the EDP improved the findability and accessibility of the data collected throughout the curation of metadata that was improved with the DOI registration for datasets. The result is a higher metadata quality where the final user can easily find how to properly cite datasets with a persistent identifier. The portal itself and main data repositories are registered in FAIR-sharing portal with their own DOI. The SW components of the EDP are totally based on open source projects.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Andrea Vianello + + + + 11:20 + 00:20 + SMODEX – a Python package for understanding the evolution of soil moisture anomalies + + <p>The complexity of agricultural droughts requires a consistent, reliable, and systematic method for monitoring and reporting. Amongst the various indices used to monitor this phenomenon, the soil moisture anomaly has been proven to be a more reliable predictor. However, the datasets required for computing this index are often large and computationally demanding. To address this challenge, we have developed SMODEX, a Python package that enables scalable, fast, and open-source standard-compliant computation and visualization of soil moisture anomalies.</p> +<p>SMODEX simplifies the computation and visualization of time-series for soil moisture and soil moisture anomalies from high-dimensional climate datasets. It allows for quick and easy parallelization of the computation on a daily, weekly, and monthly timescale. Additionally, SMODEX implements a straightforward workflow for automating the use of FAIR (Findable, Accessible, Interoperable, and Reusable) principles in producing and sharing outputs by leveraging the open source STAC API. The package is extendible and provides information on how to contribute to the project, test suites, test coverage, and a use case for the South Tyrol region, all provided in the package repository. In the future, additional agricultural drought indices and indicators would be included to serve to even larger community of researchers, policy makers, and individual users.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Rufai Omowunmi Balogun + + + + 11:40 + 00:20 + Why open digital infrastructure matters + + hardware & software infrastructure for Europe + hardware & software infrastructure for Europe + <p>Software freedom can be defined in many ways but in legal terms it is squarely defined by a set of approved FSF and OSI software licenses. Yet everyone realizes that beyond these licenses the goal of software freedom and digital sovereignty cannot be achieved without the ability to master and create hardware components and systems &#8211; and beyond that, to rely on open digital infrastructure (servers, datacenters, and resources) . This talk will present the challenges around these topics and what we, collectively in Europe already do and can do to ensure our independence and our freedoms.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Charles-H. Schulz + + + + 12:00 + 00:20 + Intelligent Decision Support System for traceability system of MOAH & MOSH olive oil contaminants + + What we are doing, what we will do! + What we are doing, what we will do! + <p>MOSH and MOAH are the abbreviation of two groups of chemical compounds found in mineral oils. “MOSH” stands for Mineral Oil Saturated Hydrocarbons. MOAH stands for Mineral Oil Aromatic Hydrocarbons. Both of them are under European deeply evaluation because there are two food contaminants. According to the current state of scientific knowledge, there is no sufficient toxicological evidence to prove a health risk to humans from saturated mineral oil fractions (MOSH). Meanwhile, MOAH are suspected to be carcinogenic (especially PAH-like compounds with 3-7 ring systems), therefore their levels in food should be reduced according to the ALARA-principle (as low as reasonably achievable). Gruppo FOS with CNR ( MOSH and MOAH are the abbreviation of two groups of chemical compounds found in mineral oils. “MOSH” stands for Mineral Oil Saturated Hydrocarbons. MOAH stands for Mineral Oil Aromatic Hydrocarbons. Both of them are under European deeply evaluation because there are two food contaminants. According to the current state of scientific knowledge, there is no sufficient toxicological evidence to prove a health risk to humans from saturated mineral oil fractions (MOSH). Meanwhile, MOAH are suspected to be carcinogenic (especially PAH-like compounds with 3-7 ring systems), therefore their levels in food should be reduced according to the ALARA-principle (as low as reasonably achievable). Gruppo FOS with CNR (Consiglio Nazionale delle Ricerche), Santagata 1907 and Enginius are searching the system for finding and trace their presence in the virgin and extra virgin olive oils by using open fingerprints methods, open hardware and open source blockchain and AI technologies.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Giovanni Giannotta + + + + 12:20 + 00:20 + The Future of Connectivity, Open Internet and Human Rights + + Making telecommunications more democratic with Free Software + Making telecommunications more democratic with Free Software + <p>We are becoming more and more dependent on the Internet for our work, education, communication, personal relations and entertainment. Our digital devices conquered an unprecedented level of importance in our life.</p> +<p>However, we are facing a loss of control over our smartphones, tablets and other devices for internet connection. It&#8217;s time to resolve monopolies and re-establish democratic control over the technology we most depend upon.</p> +<p>This talk will present the challenges end-users are facing to get more control over their devices and how Free Software is key for a consumer re-empowerement.</p> +<p>The talk will present real-life examples of policy demands against gatekeepers on digital markets, such as the struggle for Router Freedom in the last years and how Device Neutrality can serve as an important instrument for pushing forward end-user-oriented digital policies.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Lucas Lasota + + + + 12:40 + 00:20 + From the design to reality is here the Community Open Hardware PowerPC Notebook + + In 2014 hobbists dream it, now thanks to donors, volunteers and collaborations becomes reality + In 2014 hobbists dream it, now thanks to donors, volunteers and collaborations becomes reality + <p>The Open Hardware PowerPC Notebook designed around GNU/Linux will be showed at NOI Techpark. We had presented here its motherboard design in 2018. We will updates regarding last developments for u-boot AMD video drivers, re-design of heat pipes, and CE test certification process. We will give future availability milestones of this notebook and details regarding the GNU/Linux distributions or other OS that could runs on it.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Roberto Innocenti + + + + + + 09:20 + 01:00 + ZOOOM Toolkit Interactive Workshop + + <p>This workshop will focus on examining the ZOOOM toolkit, which provides valuable tools and material regarding open licence innovation around the topic of Open Data, Software and Hardware. Particularly, we will present the overall interface and user experience with the hope of collecting valuable feedback from participants and identifying potential improvements in both the structure and the functions of specific supporting tools. The involvement of the participants will be instrumental in gathering cutting-edge and up-to-date knowledge regarding current tools and resources that can contribute to the creation of an all-inclusive knowledge repository on open licence innovation.</p> +<p><b>REGISTRATION NEEDED AT: </b><a href="https://pretix.eu/noi-digital/sfscon23/3980546/">https://pretix.eu/noi-digital/sfscon23/3980546/</a></p> + + ZOOOM project track + ZOOOM project track + ZOOOM project track + https://www.sfscon.it/tracks/zooom-project-track-2023/ + + Amalia de Götzen + Andy Peruccon + Ronald Chenu Abente Acosta + + + + 10:20 + 00:30 + Closing ZOOOM Toolkit Interactive Workshop + + ZOOOM project track + ZOOOM project track + ZOOOM project track + https://www.sfscon.it/tracks/zooom-project-track-2023/ + + + + + 09:20 + 03:40 + The future of Free Software in Italy + + Side Event - FSFE - Italian community meeting + Side Event - FSFE - Italian community meeting + Side Event,FSFE,Italian community meeting + https://www.sfscon.it/tracks/fsfe-italian-community-meeting/ + + Marta Andreoli + + + + + + 17:00 + 00:30 + Winner proclamation and closing of the NOI Hackathon SFSCON Edition + + Side Event - Hackathon + Side Event - Hackathon + Side Event,Hackathon + + + + diff --git a/src/tests/assets/sfscon2023_event1day1_0835.xml b/src/tests/assets/sfscon2023_event1day1_0835.xml new file mode 100644 index 0000000..2f6dd17 --- /dev/null +++ b/src/tests/assets/sfscon2023_event1day1_0835.xml @@ -0,0 +1,2023 @@ + + + + sfscon-2023 + SFSCON 2023 + + + Main track + Artificial Intelligence track + Community track + Cybersecurity track + Developers track + Legal track + OW2 track + Public Money Public Code & Open Data track + Data4SmartHealth + ZOOOM project track + Open Data & Open Hardware track + Side Event - Hackathon + Side Event - School Reading + Closing - with a Tale of Software, Skateboards, and Raspberry Ice Cream + Side Event - FSFE - Italian community meeting + + + + + 18:40 + 00:30 + Closing of the first day + + SFSCON + SFSCON + SFSCON + + + + + 09:00 + 00:30 + Opening SFSCON 2023 + + <p>Opening SFSCON 2023</p> + + Main track + Main track + Main track,Main track + + Vincent Mauroit + + + + 09:30 + 00:30 + Coming soon + + Main track + Main track + Main track,Main track + + + 10:00 + 00:30 + Coming soon + + Main track + Main track + Main track,Main track + + + 10:30 + 00:30 + What the AI revolution means for Open Source, Open Tech and Open Societies + + <p>In the last year we saw the rise of AI systems like ChatGPT, Stable Diffusion, Dall-E and others. Large Language Models like GPT are enabling a lot of new innovative features and products which will revolutionise the world.<br /> +But this large autoregressive language models come with a lot of challenges that can have negative effects on the Open Source and Open Tech community. For example it’s unclear if in the future everyone will have access to the same ML models and training data. Can students, startups and open source people build innovative new products using AI in the same way the open source communities build Open Code and Open Tech. How can we make sure that the AI system are not discriminating underrepresented minorities? What is the energy consumption and CO2 emissions of this new big AI systems?<br /> +This talk will discuss the current fascinating trends in AI, the challenges and some possible solution. It will also cover the current Open Source AI features in Nextcloud and our Ethical AI framework.</p> + + Main track + Main track + Main track,Main track + + Frank Karlitschek + + + + 11:00 + 00:20 + European SFS Award 2023 + + <p>The award is given to a person who contributed to the introduction of the culture of Free Software.</p> + + SFSCON + SFSCON + SFSCON + + + 11:20 + 00:20 + The First Year of Eclipse Software Defined Vehicle: a successful “code first” approach + + <p>The most notable impact of using SW in the automotive domain is the decrease in fatalities as ADAS functions are more widely employed. On the other hand, SW complexity has seen an almost exponential growth reaching about 100 million lines of code.<br /> +Hardly any organization can tackle this challenge alone.</p> +<p>The Eclipse Software Defined Vehicle (SDV) Working Group ’s mission is to foster collaboration across industries to create an open technology platform for the software defined vehicle of the future. The working group community driven by its 40 member organization has chosen a “code first” approach to facilitate more agile and faster time-to-market software development.<br /> +After its formation about a year ago, the SDV WG has onboarded about 20 open source projects and is working on integrating several projects together to create “blueprints”. The frameworks emerging from these initial blueprints show the potential and benefits of utilizing different projects as components to build broader solutions to address more complex problems</p> +<p>This contribution introduces the SDV WG and Community, as well as its projects and capabilities.</p> + + Main track + Main track + Main track,Main track + + Sara Gallian + + + + 11:40 + 00:20 + Pyccel: write Python code, get Fortran speed + + <p>Imagine writing a pure Python library which can achieve the performance of Fortran or C/C++.<br /> +To this end we have developed Pyccel, which translates Python code to either Fortran or C, and makes the generated code callable from Python. The generated Fortran or C code is not only fast, but also human-readable; hence it can easily be profiled and optimized for the target machine.<br /> +Pyccel has a focus on high-performance computing applications, where the efficient usage of the available hardware resources is fundamental.<br /> +To this end it provides type annotations, function decorators, and OpenMP pragmas.<br /> +Pyccel is easy to use, is almost completely written in Python, and compares favourably against other Python accelerators.</p> + + Main track + Main track + Main track,Main track + + Emily Bourne + Yaman Güçlü + + + + 12:00 + 00:20 + Flaky tests – how to deal with them + + <p>Every QA/QE professional has encountered a flaky test at least once in their career. It may be a small, harmless bug that can be fixed in an instant, or it may take months to identify and fix it. This can be very costly and take a toll on your reputation and budget.</p> +<p>Don&#8217;t you want to know why flaky tests exist, how to identify them at an earlier stage, or even avoid them?</p> +<p>Join the investigation and we will figure it out together with you to find out the origins and roots of common flaky tests; to explore real cases and their solutions; to learn good practices.</p> + + Main track + Main track + Main track,Main track + + Juri Solovjov + + + + 12:20 + 00:20 + Psydac: a Python IGA library for large-scale simulations + + Ease of use and high performance in the open-source Python ecosystem + Ease of use and high performance in the open-source Python ecosystem + <p>Psydac is an open source library for isogeometric analysis (IGA), that is, a finite element method which uses the same basis functions of a CAD model (B-splines and NURBS).<br /> +It has been developed at the Max Planck Institute for Plasma Physics, with the goal of exploring advanced numerical methods for electromagnetism, magneto-hydro-dynamics, and plasma kinetics. It is completely written in Python, uses only open-source libraries, and can run large parallel simulations on high-performance computing facilities. It employs a domain specific language, automatic code generation, a transpiler, MPI communication, OpenMP multithreading, and parallel I/O. In this talk we explore the library architecture and its overall design philosophy, which can be applied to other domains.</p> + + Main track + Main track + Main track,Main track + + Yaman Güçlü + + + + 12:40 + 00:20 + The incredible machine: when automation backfires + + The hidden costs of automation + The hidden costs of automation + <p>Ever wanted to apply CI/CD principles and run tests for every change?<br /> +But it is too complex to set up the test environment, and launch the tests with all the updated parameters, solution? Automation!<br /> +Release your software implies a countless number of complicated steps, what solution? Automation!<br /> +So automation sometimes seems to be the solution, you automate some complex procedure and call the day.</p> +<p>But automation of a process sometimes can only hide the real problem and only delay the moment when you have to address the technical debt, and sometimes the automation can even also act as an amplifier of the technical debt.</p> +<p>Based on the experience matured on the field, this talk will be shown the hidden traps of automation, the drawbacks, and the lessons learned.</p> + + Main track + Main track + Main track,Main track + + Matteo Valentini + + + + 13:00 + 00:20 + Write High Performance Clients for RabbitMQ + + <p>In this talk, I will share our experience with writing clients for the RabbitMQ stream queues.<br /> +The RabbitMQ stream queues have been designed with performance as a major goal. So the clients have to be performant.<br /> +We will see how we increased the throughput and/or reduced the latency.<br /> +.NET and Go clients will be taken as examples. We will go through some real production code.</p> + + Main track + Main track + Main track,Main track + + Gabriele Santomaggio + + + + 13:20 + 00:20 + Ithaca: the Clean and Hexagonal Architectural Island + + An introduction to Clean and Hexagonal Architecture principles + An introduction to Clean and Hexagonal Architecture principles + <p>Get ready to sail from the Scylla and Charybdis&#8217;s shores of 3-layered architecture to the safe Ithaca refreshing shores of Clean and Hexagonal Architecture! Brace yourself as we surf from zero to Ulysses (a hero!), leaving behind monstrous code and embracing cleanliness and modularity. No more Odysseys; protect your source code navigation through Clean and Hexagonal Architecture principles!</p> + + Main track + Main track + Main track,Main track + + Luca Guadagnini + + + + 13:40 + 04:20 + Accessibility improvements for Uyuni + + <p>Uyuni is a powerful open source configuration and infrastructure management tool used by many organisations worldwide.<br /> +However, its current state presents accessibility challenges for people with disabilities. Its user interface relies heavily on visual elements, making it difficult for visually impaired users to navigate and access its features.</p> +<p>The presentation will dive into the ongoing work to increase Uyuni&#8217;s accessibility following the Web Content Accessibility Guidelines (WCAG).</p> +<p>Apart from focusing on the specific work for Uyuni, during the presentation, the participants will be also introduced to best practices for designing accessible WebUI and easy tools to be use during the software development.</p> + + Main track + Main track + Main track,Main track + + Marina Latini + + + + 14:00 + 00:20 + squash the flakes! + + how to minimize the impact of flaky tests + how to minimize the impact of flaky tests + <p>Flakes aka tests that don’t behave deterministically, i.e. they fail sometimes and pass sometimes, are an ever recurring problem in software development. This is especially the sad reality when running e2e tests where a lot of components are involved. There are various reasons why a test can be flaky, however the impact can be as fatal as CI being loaded beyond capacity causing overly long feedback cycles or even users losing trust in CI itself.</p> +<p>We want to remove flakes as fast as possible to minimize the number of retests required. This leads to shorter time to merge, reduces CI user frustration, improves trust in CI, while at the same time it decreases the overall load for the CI system.</p> +<p>We start by generating a report of tests that have failed at least once inside a merged PR, meaning that in the end all tests have succeeded, thus flaky tests have been run inside CI. We then look at the report to separate flakes from real issues and forward the flakes to dev teams.</p> +<p>As a result retest numbers have gone down significantly over the last year.</p> +<p>After attending the session the user will have an idea of what our flake process is, how we exercise it and what the actual outcomes are.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Daniel Hiller + + + + 14:20 + 00:20 + A comparison of Open Source FaaS technologies + + <p>As the demand for serverless computing continues to grow, the availability and choice of open source Function as a Service (FaaS) technologies are expanding rapidly. In this talk, we will present our experience in using some of the most popular open source FaaS platforms, compare them and discussing their features and characteristics.</p> +<p>The session will begin with an introduction to serverless computing and the key concepts behind FaaS. Throughout the talk, we will analyze various aspects such as ease of deployment, architecture, specific features, etc. We will examine real-world use cases and share insights on the strengths and limitations of each platform, allowing attendees to make informed decisions when choosing the right FaaS technology for their projects.</p> +<p>By the end of this session, attendees will have a better understanding of the open source FaaS landscape from our experience in production usage.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Andrea Avancini + Michele Santuari + Alberto Sillitti + + + + 14:40 + 00:20 + Coming soon + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + + 15:00 + 00:20 + F-Droid – The place for your FOSS Apps + + Why you should submit your FOSS Android App to F-Droid + Why you should submit your FOSS Android App to F-Droid + <p>On F-Droid you can find thousands of FOSS apps and games for Android. F-Droid brings you visibility in the FOSS community that will provide great feedback, open issues and eventually contribute to your FOSS project.<br /> +This presentation is about my personal experience with my games Ball2Box, Pocket Broomball and Sn4ke published on F-Droid. I will show you what F-Droid is, how it works and the steps needed to submit your project.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Simon Dalvai + + + + 15:20 + 00:20 + Coming soon + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + + 15:40 + 00:20 + Don’t let microservices kill you! + + A few ideas on architecting for the journey, not for the destination + A few ideas on architecting for the journey, not for the destination + <p>Microservices is a trend, and for a reason: it’s an architecture style that enables many desirable qualities on the systems that adopt it. By being distributed, it allows using the right technology stack for each capability, at the same time it eases the evolution of each fine-grained part of the system. But it comes with a price and offers significant risks, in particular related to larger portions of the architecture, and also the management of the entire infrastructure. Those costs and risks are the biggest challenges for a new system, when it adopts microservices from the start. But, on the other hand, starting with a monolith might require a big effort to migrate towards microservices in the future. Is that a check-mate?</p> +<p>Definitely not! Don’t let microservices kill you! In this talk, we’re going to see some ideas about architecting the system focusing on the journey. After all, we spend most of the time maintaining and evolving the system, than actually leaving it running “stably”. Also, by seeing how to start something new, we’re actually going to discuss the best architecture practices for any given time of the project.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + João Francisco Lino Daniel + + + + 16:00 + 00:20 + Automating git for development on large distributed teams + + A tour on aggressive use of git branching with automation for distributed cooperation + A tour on aggressive use of git branching with automation for distributed cooperation + <p>Contributing to large open source projects is not always a fast or smooth sailing process, and is often stalled simply due to the necessary human factor.</p> +<p>Contributions are rarely accepted quickly or as-is, and it&#8217;s not uncommon to rework each submission extensively by splitting the proposed change into separated fixes and features, into smaller incremental changes where each is tested independently or sometimes perform complete rewrites.</p> +<p>When the vetting of each submission can require weeks, contributors often feel blocked by the need to wait for their own or peer&#8217;s changes.</p> +<p>To cope in these scenarios, we present a few git branching and automation strategies that allow efficient wait-free development of interconnected changes, even across community members, in a truly distributed fashion.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Yuri D’Elia + + + + 16:20 + 00:20 + Kubernetes for IoT + + How kubernetes can help you quickly and automatically test and deploy new services + How kubernetes can help you quickly and automatically test and deploy new services + <p>While Kubernetes is primarily associated with managing cloud-native applications and microservices, it can also play a role in IoT deployments. Here are a few reasons why Kubernetes is relevant in the context of IoT:</p> +<p>1 Scalability: IoT systems often involve a large number of devices generating massive amounts of data. Kubernetes provides automatic scaling capabilities, allowing IoT applications to scale horizontally by adding or removing instances based on demand. This helps manage the increasing workload efficiently.</p> +<p>2 Resilience and High Availability: IoT applications require high availability to ensure uninterrupted operations. Kubernetes offers features like load balancing, fault tolerance, and self-healing capabilities. It can automatically restart failed containers or replace them with healthy instances, ensuring that IoT services remain available and resilient.</p> +<p>3 Resource Optimization: IoT deployments typically involve a mix of hardware devices with varying capabilities. Kubernetes can optimize resource utilization by efficiently distributing workloads across devices. It allows you to define resource constraints and priorities, ensuring that devices with higher capabilities handle more demanding tasks.</p> +<p>4 Service Discovery and Load Balancing: In an IoT ecosystem, devices and services need to discover and communicate with each other. Kubernetes provides built-in service discovery mechanisms, such as DNS-based service discovery and load balancing, allowing devices to locate and interact with services dynamically.</p> +<p>5 Security and Updates: Security is a crucial aspect of IoT systems, and Kubernetes helps in managing security at scale. It provides features like role-based access control (RBAC), network policies, and secret management to enforce security measures across IoT deployments. Additionally, Kubernetes facilitates rolling updates, allowing for seamless updates and patches without downtime.</p> +<p>6 Flexibility and Portability: Kubernetes abstracts the underlying infrastructure, enabling IoT applications to be deployed consistently across different environments, whether it&#8217;s on-premises, in the cloud, or at the edge. This flexibility allows organizations to migrate or distribute their IoT workloads as needed, making it easier to adopt hybrid or multi-cloud strategies</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Andrea Alfonsi + + + + 16:40 + 00:20 + Pitfalls and Mistakes When Dealing With Non-Functional Requirements + + <p>Non-functional requirements are essential to define the software architecture, and if they are not identified and handled correctly, the impact can be huge. This talk will present some common mistakes when handling non-functional requirements. It starts talking about the ones defined at the beginning of the project with a false certainty, which can become an even worst problem if they are never revised. Then, we will pass through the client that always wants the complete package and talk about the ones that are only remembered when some user complains. Of course, the talk does not forget about those that try to treat those very different non-functional requirements in exactly the same way. In the end, it will be presented some practices that can be used to avoid these problems.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Eduardo Guerra + + + + 17:00 + 00:20 + CrudIt: an opensource framework that makes developers autonomous + + Discover the low-code framework that accelerate app development + Discover the low-code framework that accelerate app development + <p>Nowadays application implementation requires a lot of different competencies that make it impossible for a single person to build an entire application. This led to the need for a big multi-competencies team and increasing in communication issues during the project. But what if we could implement an application without the need of implementing a backend? CrudIt does exactly that. CrudiIt is an open-source framework that enables a small team or a single front-end developer to create small SaaS applications without any knowledge of backend, cloud and sysadmin needs.<br /> +During the event, we will see how to implement a simple SaaS service using Crudit and how to use the framework to accelerate application development.<br /> +Moreover, we will discuss how to host a CrudIt application without any sysadmin competencies in the cloud, using free services.<br /> +This talk will unveil how, thanks to this powerful low-code framework, it is possible to save data without writing a line of code, even if you are working in complex, multitenant scenarios.<br /> +The talk will explain also how the framework is born, how it works internally and promote the opensource philosophy that brings to this library.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Daniele Fontani + Daniele Ciulli + + + + 17:20 + 00:20 + The Entando Marketplace + + Fueling the Capability Economy through FOSS Contributions and Empowering Community-driven Innovation + Fueling the Capability Economy through FOSS Contributions and Empowering Community-driven Innovation + <p>The Entando Platform, an open source Application Composition Platform (ACP), is transforming cloud-native application development. With a component-based approach, organizations harness the power of Entando to effortlessly create and consume reusable components, fostering collaboration and driving productivity.</p> +<p>At the heart of this transformation lies the Entando Marketplace. Entando Marketplace and the Entando Platform provides FOOS communities with a platform to collaborate, showcase their projects, access resources, and streamline development processes.</p> +<p>We delve into the principles and benefits of composable practices, which enable developers to build modular, scalable, and adaptable applications.</p> +<p>Furthermore, we highlight the essential role of the Entando Marketplace as a catalyst for the capability economy. FOSS contributors are empowered to share their expertise and contribute to the growing collection of reusable components, unlocking new possibilities for innovation and collaboration.</p> +<p>Join us to discover how the Entando Community fosters collaboration and embraces composable practices, paving the way for a vibrant FOSS ecosystem. Together, we can cultivate a community-driven capability economy that thrives on shared knowledge and collective innovation.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Emanuele Cerroni + + + + 17:40 + 00:20 + Improving developer experience in Open Source Projects + + How to ease contribution and management of your next big idea + How to ease contribution and management of your next big idea + <p>What makes an open-source project successful? How hard is it to add external people to an open project?<br /> +We at Nethesis have open source in our core with more than 400 public repositories that hold all of our company code. With the upcoming release of NethServer, we’re facing the excruciating question: how do we make it more appealing for developers?<br /> +Follow me in the changes we want to make to our processes to ease development and contributions, using big projects as examples and how even you can make a difference in the smallest of all codebases.</p> + + Developers track + Developers track + Developers track + https://www.sfscon.it/tracks/developers-track-2023/ + + Tommaso Bailetti + + + + 18:00 + 00:30 + CLOSING with a Tale of Software, Skateboards, and Raspberry Ice Cream + + SFSCON + SFSCON + SFSCON + + Matthias Kirschner + + + + + + 10:30 + 01:30 + Ada & Zangemann + + Side Event - School Reading + Side Event - School Reading + Side Event,School Reading + + + 12:00 + 00:30 + Closing of Ada & Zangemann reading + + Side Event - School Reading + Side Event - School Reading + Side Event,School Reading + + + 14:00 + 00:20 + Welcome Data4SmartHealth 2023 + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Floriano Zini + Chiara Ghidini + Andrea Gasparella + + + + 14:20 + 01:00 + AI Algorithms for Digital Therapeutics + + <p>Digital therapeutics tackle diverse medical conditions, and AI algorithms, encompassing machine learning, natural language processing, and computer vision, are central to their success. They enable personalized, data-driven treatments, improving patient outcomes while potentially reducing healthcare costs. This talk explores AI&#8217;s pivotal role in digital therapeutics, where software interventions are reshaping healthcare.</p> + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Gianluigi Greco + + + + 15:20 + 00:20 + Software testing for remote proof of concept studies of digital therapies + + From the definition of a proof of concept study to the development and testing of the required technical infrastructure + From the definition of a proof of concept study to the development and testing of the required technical infrastructure + <p>Digital therapies are evidence-based therapeutic interventions that use software to prevent, manage, or treat a medical disorder or disease.<br /> +Not only they require carefully planned clinical studies, but they require also a suitable technical infrastructure not to lose or compromise relevant information. Consequently, careful software testing and monitoring is necessary to ensure that the technical infrastructure is working correctly during the study.</p> +<p>In this talk we will describe the entire process used for the analysis of the effectiveness of Nearine, a digital therapy for the management of depressive symptoms based on interoceptive stimulation through vibrations applied on the wrist.<br /> +We will start with the description of the remote proof of concept study used for the assessment of the effectiveness and potential adverse effects. After that, the technical infrastructure necessary for the study will be outlined.<br /> +Finally we will show how the usage of CatchSolve for software testing has decreased the risk of potential loss of information during the study.</p> +<p>The talk is the result of a joint collaboration between CatchSolve, software testing startup based in NOI Techpark, and Nearine, a new digital health and neurotechnology startup based in Bolzano.</p> + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Chiara Masci + Davide Montesin + + + + 15:40 + 00:20 + Gimme! Gimme! Gimme! (Some good algorithms) + + Wearable hackers meet e-health experts to make a first class open source Android app + Wearable hackers meet e-health experts to make a first class open source Android app + <p>Gadgetbridge, a free and open source project, has existed since 2015 to allow wearable device customers to use their hardware without being tied to the online services of the manufacturers.</p> +<p>The small but very focused and capable technical community working on the basic functionalities such as retrieving the various data from the wearables (detected activities, sleep, pulse per minute, peripheral oxygen saturation, &#8230;) lacks the expertise on specialised algorithms that could help to perform advanced analysis/diagnostics.</p> +<p>The goal of this talk is to explore a potential collaboration between our communities: Gadgetbridge provides local-only support for an extensive list of wearable devices and a community of engineers and privacy minded users, Data4SmartHealth might contribute advanced algorithms and AI on edge devices.</p> + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Daniele Gobbetti + + + + 16:00 + 00:20 + Home4Me – IoT and AI at service of disability + + An example of how the technology can help disabled people at home. + An example of how the technology can help disabled people at home. + <p>Home4Me is an innovative social project that tries to help disabled people at home (and not only at home).<br /> +The projects tries to keep in mind concrete problems that a person with disabilities lives at home and try to resolve them using IoT ad-hoc devices and a backend to access to the power of Cognitive and AI services.</p> +<p>On the market there are already IoT solutions, but expensive and not customizable to the needed of the disable person: here is where Home4Me want to be a possible solution.</p> + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Luca Nardelli + + + + 16:20 + 00:20 + Discussion on the first round of talks + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Chiara Masci + Davide Montesin + Daniele Gobbetti + Luca Nardelli + + + + 16:40 + 00:20 + Machine learning driven simulation of protein folding atomistic trajectories + + <p>The folding of proteins is an important biological process that determines the structure, role and functionality of proteins. It is often studied by molecular dynamics (MD) simulations, in order to obtain the folding trajectory of all the atoms in the system.<br /> +To date, pure MD simulations require huge computational resources and are still unable to access the timescales of folding processes that have biological relevance.<br /> +In my work, I am exploiting machine learning techniques and one recent AI milestone, Deepmind&#8217;s Alphafold, in order to create an advanced algorithm able to explore the folding trajectories within short computational times. It becomes possible to extract atomistic conformations from the folding pathways, and identify folding intermediates and long-lived states.<br /> +This method can be used to facilitate the identification of biologically relevant protein conformations, later to be used for pharmacological targeting or biophysical studies.</p> + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Alan Ianeselli + + + + 17:00 + 00:20 + Data-driven knowledge discovery from Brain Imaging of Alzheimer’s disease patients + + Artificial Intelligence to support the diagnosis of neurodegenerative disorders + Artificial Intelligence to support the diagnosis of neurodegenerative disorders + <p>Alzheimer’s disease (AD) is a chronic neurodegenerative disease which is largely responsible for dementia in around 6% of the population aged 65 and above. The availability of human brain data generated by imaging techniques, such as Magnetic Resonance Imaging, have resulted in a growing interest in data-driven approaches for the diagnosis of neurological disorders and for the identification of new biomarkers. The knowledge discovery process typically involves complex data workflows that combine pre-processing techniques, statistical methods, machine learning algorithms, post-processing and visualisation techniques. This talk presents specific research efforts in this direction, promising results, open issues and challenges.</p> + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Giuseppe Di Fatta + + + + 17:20 + 00:20 + Management of large genomic data with free software + + <p>The suite of free software tools created within the OpenCB (Open Computational Biology &#8211; https://github.com/opencb) initiative makes possible to efficiently manage large genomic databases.</p> +<p>These tools are not widely used, since there is quite a steep learning curve for their adoption, thanks to the complexity of the software stack, but they may be really cost-effective for hospitals, research institutions etcetera.</p> +<p>The objective of the talk is showing the potential of the OpenCB suite, the information to start using it and the advantages for the end users. BioDec is currently deploying a large OpenCGA installation for the Genetic Unit of one of the main Italian Hospitals, where data in the order of the hundreds of TBs will be managed and analyzed by bioinformaticians.</p> + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Michele Finelli + + + + 17:40 + 00:20 + Discussion on second round of talks and closing + + Data4SmartHealth + Data4SmartHealth + Data4SmartHealth + https://www.sfscon.it/tracks/data4smarthealth/ + + Alan Ianeselli + Giuseppe Di Fatta + Michele Finelli + + + + + + 11:20 + 00:20 + Self-hosted, Open Source Large Language Models (LLMs) + + What are the most promising projects and how good are they? + What are the most promising projects and how good are they? + <p>In recent years different groups have used the transformer architecture (a deep learning model) to train neural networks using large quantities of text. With the increase in compute power these models have grown to billions or even hundred of billions of parameters. As the model size grew, noteworthy abilities emerged. Such as the ability to generate text showing surprising reasoning skills to the point that the leading models can now successfully take college-level exams.</p> +<p>Currently some of the best and most famous models are proprietary and released to the public as a service. However a large Open Source community has emerged that tries to train and fine tune free models that can be used self-hosted. This is a challenging task due to problems with potential copyright issues with the training text, the large computational cost of the training itself and the supervised fine tuning step to adapt the model to its final use case.</p> +<p>In this talk I will give an overview on what the most promising projects in this space are and how they compare to the proprietary state-of-the-art models of the large players.</p> + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + Chris Mair + + + + 11:40 + 00:20 + Nextcloud – how to keep up with the fast moving IT world + + Artificial Intelligence within Nextcloud + Artificial Intelligence within Nextcloud + <p>At Nextcloud we believe that in order to achieve digital sovereignty we always need to stretch the boundaries. If new technologies and new ways of working come up, we work hard to enable our users to enjoy the same functionality without giving up control over their data and computing.</p> +<p>Over the last few months we saw a lot of innovation in the area of artificial intelligence which might change our way of working to a large extend. At Nextcloud we are happy that we can already provide the first features in this areas to our users. Unfortunately not all features work completely on-premise as of today. That&#8217;s why we introduced a &#8220;Ethical AI Rating&#8221; which provides transparency to the user and let them decide what to use today, while we are working hard to base more and more of this features on Free Software and on-premise solutions.</p> +<p>The talk will present Nextcloud&#8217;s AI-features, the Ethical AI Rating and how we try to approach innovations in a fast moving IT world, in order to bring similar functionality to the Free Software community.</p> + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + Björn Schießle + + + + 12:00 + 00:20 + From Novices to Innovators: Exploring the Possibilities with Free and Open Source AI Tools + + <p>Join me as we explore the world of free and open-source AI tools, empowering individuals and organizations to unleash their creativity and take their innovation to the next level.</p> +<p>Discover how some AI players are democratizing access to cutting-edge technologies and leveling the playing field, e.g. StabilityAI, etc. We will delve into the benefits and opportunities offered by some free and open-source AI tools, exploring their capabilities, potential applications, and the impact they can have on your projects.</p> +<p>Whether you&#8217;re a practitioner or just starting your AI journey, this talk is your gateway to discovering an exciting plethora of free and open-source AI tools, and how they can empower you to stay ahead of the curve in the modern era.</p> + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + Anjan Karmakar + + + + 12:20 + 00:20 + Optimizing Software Performance with Inductive Logic Programming: A Novel Approach + + <p>Concurrent execution of tasks can significantly improve its performance and efficiency. However, identifying which tasks can be executed concurrently and which tasks need to be executed sequentially can be a challenging task. In this talk, I propose using Inductive Logic Programming (ILP) to create a dynamic dependency graph for a given program. The graph can be used to identify which tasks can be executed concurrently and which tasks need to be executed sequentially. I demonstrate the effectiveness of this approach by applying it to a sample program and comparing its performance with a version that does not utilize concurrent execution. This talk presents a novel approach to creating a dynamic dependency graph for programs and highlights the potential benefits of using ILP for optimizing the performance of complex software systems.</p> + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + Enrico Zanardo + + + + 12:40 + 00:20 + Democratizing Language and Vision Technology + + A Retrieval-based Approach for Open Vocabulary Image Classification + A Retrieval-based Approach for Open Vocabulary Image Classification + <p>The advancement in language and vision models (LLM) has seen remarkable progress in recent years. However, the training of these large-scale models poses challenges in terms of time and computational resources, particularly with regards to deep learning models that require powerful GPUs. This has created a significant gap between Big Tech companies, who possess substantial resources to train LLM models, and academia, which often lacks the necessary means to contribute significantly in this field.</p> +<p>To address this issue, we propose an innovative open vocabulary framework called CaSED (Category Search from External Databases). Unlike traditional LLM models, CaSED does not rely on extensive training. Instead, it leverages retrieval techniques from an image-text knowledge base to classify or tag images automatically. By utilizing existing knowledge bases rather than requiring extensive training, CaSED eliminates the need for large computational resources.</p> +<p>In this talk, we will show the potential of low-budget approaches in the context of Language and Vision.</p> + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + Paolo Rota + + + + 13:00 + 00:20 + Web Search, fresh and local + + Deploying the PeARS search engine in regional communities + Deploying the PeARS search engine in regional communities + <p>It is widely believed that Web search engines require immense resources to operate, making it impossible for small communities to build alternatives to the dominant players. The PeARS project (https://pearsproject.org/) aims at changing the status quo by providing open-source search tools that can be used by anyone, anywhere. To achieve this, our team designs algorithms that run on entry-level hardware, using both traditional and cutting-edge machine learning techniques.</p> +<p>This talk will focus on a specific use case for PeARS, showing how the framework can easily be deployed to provide regional search solutions: for instance for local governments, small business communities, or minority speaker groups. We will see how the system can be trained and populated on a home computer in a few clicks and how it can be tailored to the specific community it is addressed to.</p> +<p>The project has received funding from the European Union under the Next Generation Internet programme.</p> + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + Aurelie Herbelot + + + + 13:20 + 00:20 + Image Generation with Diffusion Models + + How computers imagine our world + How computers imagine our world + <p>Recent machine learning developments saw a breakthrough in generating images. So-called Diffusion Models can create photo-realistic images from noise. With the help of an input text (prompt) we can guide the generation and produce matching images.</p> +<p>This technology opened new doors for creating digital art, modifying existing images, and creating stunning visual experiences. In the talk, we will find out how these algorithms work, introduce Stable Diffusion (a concrete implementation), and find out what its use cases are. We will see how text can be used to generate matching outputs but also take a look at more experimental features such as creating images from edges, outlines, or depth maps.</p> +<p>We will mainly focus on the open source text-to-image model Stable Diffusion, which has set new standards in image generation. With it also comes an active community that keeps it open source and accessible for everyone.</p> + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + Markus Pobitzer + + + + 13:40 + 04:20 + Coming soon + + Artificial Intelligence track + Artificial Intelligence track + Artificial Intelligence track + https://www.sfscon.it/tracks/artificial-intelligence-track-2023/ + + + 14:00 + 00:20 + The History of, and Path forward for, Copyleft and the GPL + + Copyleft, Software, Freedom, & You: Better Understanding Through History + Copyleft, Software, Freedom, & You: Better Understanding Through History + <p>Copyleft licensing has been the primary strategy of the FOSS community to guarantee users&#8217; rights to copy, share, modify, redistribute reinstall modified versions of their software. In our earliest days, we naïvely thought that the GPL would work like magic pixie dust; we&#8217;d sprinkle it on our code, and our code would remain free as in freedom.</p> +<p>The reality check that we&#8217;ve received over the last 35 years has been painful on this issue. Nevertheless, those who forget the past are condemned to repeat it.</p> +<p>This talk will not only discuss the primary past GPL enforcement efforts around the world, but also provide a whirlwind tour of how copyleft came to work how it does and discuss ideas and suggestions of future strategies in copyleft that, informed by this history, are our best hope for software freedom.</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Karen Sandler + + + + 14:20 + 00:20 + Reproducible Builds – the first 10 years + + an overview about reproducible builds, the past, the presence and the future + an overview about reproducible builds, the past, the presence and the future + <p>In this talk Holger Levsen will give an overview about reproducible builds, the past, the presence and the future. How it started with a small BoF at DebConf13 (and before), how it grew from being a Debian effort to something many projects work on together, until in 2021 it was mentioned in an executive order of the president of the United States. And of course the talk will not end there but rather outline where we are today and where we still need to be going, until we&#8217;ll all be running 100% reproducible software, verified by many.</p> +<p>And while Holger&#8217;s day to day work and this talk will have a Debian focus, reproducible builds in other project will be featured and not be left behind as Holger has been involved in Reproducible Builds since 2014 and has been working on reproducing Arch Linux, coreboot, Fedora, FreeBSD, NetBSD, OpenWrt and others. Other important software projects will also be covered and last not least Holger will also explain why you&#8217;ll want verifiable SBOMs and not just SBOMs.</p> +<p>So what is this talk about exactly again? &#8220;A build is reproducible if given the same source code, build environment and build instructions, any party can recreate bit-by-bit identical copies of all specified artifacts.&#8221;<br /> +(https://reproducible-builds.org/docs/definition)</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Holger Levsen + + + + 14:40 + 00:20 + AI Law & Ethics for sustainability corporate governance + + <p>In the era of AI, EU regulators struggle in definying a level playfield for the fruitful development of technology and utmost protection of fundamental rights and freedoms of individuals. The so-called AI Act is going to be approved by the end of 2023 and should come into force after a 2-year grace period. In any case most of the provision will be strongly risk-based and accountability oriented. In this fragmented and complex scenario, it is extremely interesting to observe how the use of AI law and AI ethics can serve the purposes of sustainability corporate governance, fostering innovation AND preserving fundamental rights and freedoms in a measurable and viable manner, having rights entering into business logics and decisions.</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Federico Sartore + + + + 15:00 + 00:20 + Windows and Office “tax” refund + + The right to install any software on any device and various cases about the refund of pre-installed software + The right to install any software on any device and various cases about the refund of pre-installed software + <p>Some manufacturers try to force to use the preinstalled software on the PC you acquire, sometimes also claiming that alternative software will not work properly.</p> +<p>On 2018 Luca purchases a Lenovo Tablet/PC and, since it comes with Microsoft Windows pre-installed, he requested the refund to Lenovo, but Lenovo denied to refund Luca. A court case was initiated, and Lenovo was condemned to pay a punitive damages of 20&#8217;000 euros for its abusive behaviour.</p> +<p>After this &#8220;historic&#8221; case, some other refund were request to other companies, such as HP, Dell, Microsoft, Acer, and again to Lenovo. Each OEM tried to deny the refund, with various reasons such as contractual clauses contained in the sale contract or in the same license agreement, or the need to delete the Product Key stored in the MSDM BIOS ACPI table and therefore they require to send the PC to their laboratories. These reasons have no valid legal basis, because – at least in Italy – the license agreement is a contract totally unrelated to the sale contract, so a third party may not impose any action on your material good, and the license agreement has remained without causal and economic justification, because not accepted and missed to be concluded.</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Luca Bonissi + + + + 15:20 + 00:20 + How do you really do GPL enforcement? + + aka Bringing software right-to-repair to the masses + aka Bringing software right-to-repair to the masses + <p>Enforcing the General Public License (GPL) to bring real software freedom to people can be very challenging in practice, but many of the steps in the process are straight-forward. As the only organization enforcing the GPL for Linux, Software Freedom Conservancy (SFC) receives a huge quantity of GPL violation reports, and needs to triage each one as the beginning of our process. The next step is called the &#8220;CCS check&#8221; (complete corresponding source check), a crucial but barely known activity that determines whether some candidate source code actually corresponds to the device/binaries that the candidate was provided for. We will discuss the CCS check in detail, providing examples and tips for doing your own checks.</p> +<p>Lastly, we&#8217;ll cover the offer check, something everyone can do to help in SFC&#8217;s efforts to bring real software right-to-repair to every device running Linux. Whether you want to check offers for source code, review a CCS candidate, or go even further with additional GPL enforcement work of your own, this talk will set you up for success.</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Denver Gingerich + + + + 15:40 + 00:20 + KYCS ‒ Know Your Code Sources (and let it be known) + + How Cyber Resilience Act is going to change FOSS forever and what can we do about it? + How Cyber Resilience Act is going to change FOSS forever and what can we do about it? + <p>CRA at the time of submission is still in a draft status, but it is relatively clear that it will impose a duty to make the software safer if and when it is distributed on the market as a final product.</p> +<p>Part of the safety requirements includes the obligation to collect and keep available for inspection a list of software components obtained from third parties, that is their provenance, and the insecurities obtained through mainly CVE scanning. Incidentally there is an obligation to support and provide security patches after the product is placed on the market (hint, open source rulez).</p> +<p>Open Source Software is not exempted per se, the current discussion is where the final burden and responsibility of complying, if at all, lies. In any case, whatever the outcome of such discussion is, open source projects should strive to ease up CRA compliance for their downstream adopters, if they want to keep them. We will concentrate on how open source projects that aim at being considered in an industry supply chain (including that of software industry) should strive to make the supply chain&#8217;s life easier, building on our experience with Eclipse Oniro and the toolchain and processes we have devised for it.</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Carlo Piana + Alberto Pianon + + + + 16:00 + 00:20 + Continuos compliance @ Linaro + + Linaro's open source innovation engine on steroids thanks to production grade and long term sustainability attributes. + Linaro's open source innovation engine on steroids thanks to production grade and long term sustainability attributes. + <p>Continuous compliance is rooted into Linaro&#8217;s everyday activities, whether the target is kernel development, a SOC Yocto SDK, an SDV, or consumer electronics project. Open source is at the center of today&#8217;s software innovation, ubiquitous across products and services and, as such open source needs to evolve from a mere innovation into a production-grade engine. Linaro, one of the leading linux kernel contributors, is perfectly positioned to support our customers and the entire open source community throughout this transition. This talk will showcase Linaro&#8217;s continuous compliance and production-grade processes, artifacts, and best practices and shed some light on what&#8217;s happening under the hood of one of the world leading open source organizations and contributors.</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Davide Ricci + + + + 16:20 + 01:40 + The current state of SBOMs and SPDX + + Updates for 2023 + Updates for 2023 + <p>Software Bill of Materials (SBOMs) are rapidly becoming increasingly important in the software supply chain. Software Package Data Exchange (SPDX) is a freely available ISO standard that defines the way of communicating information about software components. It includes, but is not limited to, metadata such as name and version, but also licensing and security information.</p> +<p>In this talk, we will present the latest updates from the ever-changing landscape of SBOMs and SPDX, focusing in real-world use cases. Familiarity with the concepts will not be assumed, as they will be briefly explained.</p> + + Legal track + Legal track + Legal track + https://www.sfscon.it/tracks/legal-track-2023/ + + Alexios Zavras + + + + 16:40 + 00:20 + ZOOOM Project track introduction + + Introduction to the ZOOOM project and presentation of the next-day activity + Introduction to the ZOOOM project and presentation of the next-day activity + <p>The ZOOOM Track aims to disseminate the findings of the ZOOOM project and show the intersection between legal and business aspects in IP management and value creation/capture in innovation ecosystems based on open-source software (and beyond).<br /> +In this talk the ZOOOM consortium will present the first results of the project discussed in the following talks and the activity for the second day workshop of the SFSCon.</p> + + ZOOOM project track + ZOOOM project track + ZOOOM project track + https://www.sfscon.it/tracks/zooom-project-track-2023/ + + Stefano Menegazzi + Alessandro Rossi + Amalia de Götzen + Andy Peruccon + + + + 17:00 + 00:20 + The ZOOOM Framework: Legal aspects of FOSS and beyond + + <p>License compliance efforts for software projects involve not only legal-oriented actions, but also governance elements such as organizational processes and community management. The larger the community or the organization working collectively, the more complex a compliance program for software projects may become. Free Software licenses being direct licensing models are easier to comply with in comparison to proprietary licenses. This talk will give an overview of the Free Software licensing compliance practices, including initiatives such as REUSE for streamlining copyright and license information for software projects.</p> + + ZOOOM project track + ZOOOM project track + ZOOOM project track + https://www.sfscon.it/tracks/zooom-project-track-2023/ + + Niharika Singhal + + + + 17:20 + 00:20 + The ZOOOM Framework: Business Aspects of FOSS and Beyond + + <p>Companies can engage in the 3Os in many ways and for different reasons. In many cases, strategic and competitive advantages are at the core of a company’s decisions, but in other cases, motivations can involve social and ethical considerations such as reciprocity, altruism, and democratization of knowledge. In this talk, we outline the main business-related motivations identified by the ZOOOM project for using and contributing to FOSS. Among them: pursuing competitive advantage, reduction of development costs, technological innovation, access to knowledge or assets, and interoperability. Based on the interviews conducted by the ZOOOM partners, we also discuss major challenges and risks that businesses leveraging the 3Os must navigate.</p> + + ZOOOM project track + ZOOOM project track + ZOOOM project track + https://www.sfscon.it/tracks/zooom-project-track-2023/ + + Seckin Celik + Davide Serpico + + + + 17:40 + 00:20 + The ZOOOM Framework: An Ecosystemic Perspective + + <p>In this talk, we analyse the ecosystem trend in the context of the 3Os, particularly FOSS. Based on the existing literature and data from ZOOOM interviews, we explore the potential roles that companies can play in open-source ecosystems, their interactions with the other players of the ecosystem, and their awareness about the impact that systemic elements have on their business. Most companies recognize the advantages of being embedded in ecosystems where the creation of new knowledge is facilitated by joint research work, collaboration, and expertise sharing. However, companies identify themselves into specific roles depending on their strategy, main business, network structures, and communities. Finally, we outline a multilevel framework of how business and innovation ecosystems complement each other in the realm of the 3Os.</p> + + ZOOOM project track + ZOOOM project track + ZOOOM project track + https://www.sfscon.it/tracks/zooom-project-track-2023/ + + Davide Serpico + Seckin Celik + + + + + + 11:20 + 00:20 + Community tidbits + + How to keep free software projects happy and healthy + How to keep free software projects happy and healthy + <p>Open source communities, when they have reached a certain size, face their very own set of challenges.</p> +<p>In the virtual world, timezones, language barriers and dealing with many e-mails can become a burden. In the real world, the organization of travels to project meetings, the planning of annual conferences in an easy to reach location, and even the shipment of gadgets around the globe turn out to be quite demanding.</p> +<p>While free software projects might have the same diversity and outreach as large organizations, they often have not the same resources at hand as established corporations. They need to be a bit more creative &#8211; but luckily, that&#8217;s in their DNA!</p> +<p>In the spirit of sharing knowledge openly, this talk intends to give some real-life examples of challenges your community may face, unexpected situations you might run into and how to solve them &#8211; sometimes in unconventional ways.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Florian Effenberger + + + + 11:40 + 00:20 + Transforming South Tyrol’s Economy: Empowering Tourism and Agriculture through Decentralized Applications (dApps) + + <p>The implementation of decentralized applications (dApps) holds immense potential for transforming two of the key economic sectors of South Tyrol: tourism and agriculture.</p> +<p>In the tourism industry, dApps can revolutionize the way services are offered and transactions are processed. By utilizing smart contracts and blockchain technology, dApps can enable transparent and secure processes for booking accommodations, tours, and activities. This ensures that tourists have direct access to reliable information-, while it eliminates the need for intermediaries, and reduces costs. Moreover, dApps can facilitate decentralized reviews and ratings, empowering visitors to make informed decisions based on authentic feedback from fellow travelers, i.e., fake reviews can be eliminated. This fosters trust and enhances the overall tourist experience.</p> +<p>In the agriculture sector, dApps can address key challenges faced by farmers and consumers alike. For example by implementing blockchain-based supply chain solutions, dApps can ensure traceability and transparency in the production, processing, and distribution of agricultural products. This allows consumers to verify the origin and quality of the products they purchase, promoting trust and supporting local producers. Additionally, dApps can facilitate direct farmer-to-consumer interactions through decentralized marketplaces, eliminating unnecessary middlemen and enabling fair and efficient transactions. This empowers farmers by providing them with a direct and secure channel to sell their products while offering consumers access to fresh and locally sourced goods.</p> +<p>By embracing decentralized applications, South Tyrol can unlock new opportunities for its tourism and agriculture sectors. These applications not only enhance efficiency and reduce costs but also increase customer trust, promote sustainability, and support the local economy. As a result, dApps have the potential to shape a thriving ecosystem that benefits both businesses and consumers in South Tyrol&#8217;s key industries.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Max Oberperfler + + + + 12:00 + 00:20 + Beyond Google & Apple duopoly + + FOSS alternatives for digital mobility + FOSS alternatives for digital mobility + <p>StatsCounter tell us that in May &#8217;23 the market share for the smartphones is split in this way: Android/Google 67.56%, iOS/Apple 31.6%. Which means the remaining is less that 1%. Today we are speaking about that 1%: available alternatives, future outlook and most important why we have to care of about that 1%. Spoiler: because a study of the University of Edinburgh and the Trinity College Dublin published in Q4/2021 proves what all we know &#8211; our smartphones leak our data constantly.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Roberto Foglietta + + + + 12:20 + 00:20 + Combatting E-Waste’s Environmental Harm With Free Software + + <p>Electronic waste, or e-waste, refers to discarded information and communications technology equipment such as laptops, smartphones, and large and small household appliances. In 2015, Achim Steiner of the UN Environment Programme (UNEP) described &#8220;an unprecedented tsunami of electronic waste rolling out over the world&#8221;. In 2016, 44.7 million tonnes of e-waste were generated, equivalent to 4500 Eiffel Towers. In 2019, the World Economic Forum determined e-waste to be the fastest growing waste stream in the world. In 2022, the amount of e-waste hit 59.4 million tonnes, a 33% increase since 2016. Given the economic, and not the technical logic driving the digital economy, devices are rendered obsolete before their time and the pile of e-waste continues to grow.</p> +<p>E-waste is the source of significant environmental harm. Production, transportation, and end-of-life treatment accounts for 80+% of a device&#8217;s carbon footprint over its operating life. Extracting rare earth metals consumes copious amounts of energy; moreover, mining is typically done in the Global South under miserable social conditions. The end-of-life treatment of e-waste means those same devices return to the Global South, resulting in toxic pollution entering the environment and harming workers.</p> +<p>Today, most devices have chips which need software to keep them running. Thus, software plays a crucial role in preventing e-waste: software determines a hardware&#8217;s minimum working requirements, and for how long a device remains safely in use. For most users, environmental harm driven by software has largely remained overlooked … let alone that we can already do something about it with Free Software.</p> +<p>In this talk I will provide a brief overview of the environmental harm from e-waste driven by software, and I will link the inherent values that come with a Free Software license to sustainable software design. By enabling full user autonomy and removing artificial vendor dependencies, Free Software means electronic devices that are otherwise unsupported by manufacturers remain in use. Lightweight and up-to-date software, free from bloat and energy-consuming ads, allows aging, less-powerful hardware to keep running and stay out of the waste bin. Software freedom means hardware freedom, and that means we are able to combat the environmental harm caused by e-waste with Free Software today.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Joseph P. De Veaugh-Geiss + + + + 12:40 + 00:20 + Building an Awesome Product by Creating a Community Around It + + How to effectively engage with your user community + How to effectively engage with your user community + <p>In today’s competitive market, it has become crucial to build a thriving community of developers and users around your product. Gone are the days when code alone could make a product successful; the human element now plays a pivotal role. This community becomes the face and representation of your project to the outside world. Having worked on our Open Source project for over 8 years, I have accumulated a wealth of proven strategies for attracting contributors, training newcomers, and expanding the user base. In my presentation, I will explain how to effectively engage with your user community in order to achieve the following objectives: collect feedback, share use cases, contribute to documentation, identify bugs and collaboratively develop code<br /> +Because improving your product goes beyond just writing code; it involves nurturing a strong community of people.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Alessio Fattorini + + + + 13:00 + 00:20 + Sustainability of Open Source Software and Potentials in Developing Countries + + <p>Although developing countries hold a lot of potential in software development and research, the licensing cost of commercial software, platforms, and online services serve as a hindrance in their widespread adoption. Open source software can be a very useful and viable solution in this regard. On one hand it can fill up the need for less costly software alternatives. On the other hand, it can reduce the adoption of pirated versions of commercial software by individuals and groups to make up for the cost factor. Furthermore, with more adoption of open source software in the developing countries, it will also encourage and engage more programmers from the developing countries to maintain the open source software and to contribute to it, adding to the sustainability of various open source projects and thus benefiting open source software development beyond borders. The speaker, who has the experience of working in both the developing countries as well as here in Alto-Adige/Sud-Tirol region, will share insights on this topic from both of these diverse perspectives.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Abid Munir Bajwa + + + + 13:20 + 00:20 + Sharing the power of appreciation: Celebrating ‘I Love Free Software Day’ + + <p>In the realm of Free Software, expressing gratitude towards Free Software contributors often goes unnoticed. The &#8220;I Love Free Software Day&#8221; (https://ilovefs.org) provides a platform for individuals and organisations to do exactly this, showing appreciation. But it is crucial to recognize that our appreciation for Free Software should extend far beyond this single day. This talk highlights the significance of the &#8220;I Love Free Software Day&#8221; as a platform for expressing support, love, and gratitude towards the developers and contributors who make Free Software possible.</p> +<p>Throughout the presentation, we will showcase memorable moments and successful initiatives from past celebrations, demonstrating the collective efforts to acknowledge and honor the impact of Free Software. We will discuss ideas and strategies for making the upcoming &#8220;I Love Free Software Day&#8221; even more remarkable.</p> +<p>However, it is essential to emphasize that our expressions of love and support for Free Software should not be limited to just one day. While the &#8220;I Love Free Software Day&#8221; serves as a catalyst for celebration, it should inspire us to continue demonstrating our gratitude throughout the year. We will explore ways to incorporate ongoing appreciation into our daily lives, such as contributing to Free Software projects, advocating for their importance, and recognizing the efforts of developers and contributors regularly also in a financial way.</p> +<p>By extending our appreciation beyond a single day, we can cultivate a culture of continuous support for Free Software. We invite everyone interested in Free Software to join us in this endeavor, as we strive to create an environment where gratitude and acknowledgment become integral parts of our interactions within the Free Software community.</p> +<p>Let us embrace the &#8220;I Love Free Software Day&#8221; (https://ilovefs.org) as a starting point, a reminder of the significance of Free Software, and a call to action to express our love and support throughout the year. Together, we can build a community that values and appreciates the tireless efforts of Free Software developers and contributors, making a lasting impact on the future of software freedom.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Bonnie Mehring + + + + 13:40 + 01:40 + MindsHub no-profit + + Makers, programmers, enthusiasts with a focus on education + Makers, programmers, enthusiasts with a focus on education + <p>MindsHub is a no profit association from Ala (near Trento), which provides a space for enthusiasts to develop skills and ideas in informatics, electronics, robotics and 3D printing: https://mindshub.it/.<br /> +Everything started back in 2016, when we organized CoderDojo Vallagarina to introduce young boys and girls to programming. The association has since grown to have multiple running projects, and over 20 active members, aging 12 years old and up. We meet once a week to learn from each other and bring the activities forward.<br /> +We created an autonomous farming robot (featured at Maker Faire Rome among the best 10 projects), we delved into online security with schools, we developed a FOSS app to report and collect garbage, we spoke to Samantha Cristoforetti on the ISS, &#8230;</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Fabio Giovanazzi + Alessio Zeni + + + + 14:00 + 00:20 + RIOS (Rete Italiana Open Source) presents latest updates on the OSPO Alliance and the Good Governance Initiative. + + <p>The Good Governance Initiative (GGI) proposes a methodological framework to assess open-source awareness, compliance and governance in any kind of organizations, helping them to structure and improve the use of FOSS towards an OSPO. This presentation will highlight the main progresses and new features achieved since last year, such as the translation of the GGI Good Governance in five languages, the recent Success Stories presented in the OnRamp meeting series, and many more. Stefano Pampaloni, vice-president of the Italian Open Source Network, will present the latest developments, elaborating on the RIOS Network&#8217;s contribution to the project.</p> + + OW2 track + OW2 track + OW2 track + https://www.sfscon.it/tracks/ow2-track-2023/ + + Valentina Del Prete + Stefano Pampaloni + + + + 14:20 + 00:20 + The CORD-19 Topic Visualizer + + Exploring the evolution of research topics during the COVID-19 pandemic + Exploring the evolution of research topics during the COVID-19 pandemic + <p>The COVID-19 pandemic reshaped research across various fields, producing an unprecedented flood of articles. In response, several open-access corpora were created; among them, the COVID-19 Open Research Dataset (CORD-19) collected over a million articles in 2.5 years.</p> +<p>In this presentation, we introduce the CORD-19 Topic Visualizer (CORToViz), a method and tool for exploring CORD-19&#8217;s scientific abstracts. It uses a stack of modern open source technologies to cluster articles and mine temporal topics. CORToViz has an interactive dashboard for quick topic visualization, time series tracking, and statistical testing.</p> +<p>We will show the results extracted with CORToViz, which allowed us to visualize and tell in a synthetic way what happened to react against COVID-19, comparing it with the key moments of the pandemic. The high adaptability of our approach suits any textual document corpus, and it lends itself easily to exploring new challenging fields of research, such as climate change.</p> +<p>CORToViz represents the first prototype of a series, which we aim to develop within the NGI Search Program, under the TETYS project (Topics Evolution That You See), aiming to build the next-generation Web topics explorer.</p> + + OW2 track + OW2 track + OW2 track + https://www.sfscon.it/tracks/ow2-track-2023/ + + Francesco Invernici + + + + 14:40 + 00:20 + Can AI counteract Health-related Fake News? + + HeReFaNMi (Health-Related Fake News Mitigation): an open-source project to counteract health-related misinformation + HeReFaNMi (Health-Related Fake News Mitigation): an open-source project to counteract health-related misinformation + <p>HeReFaNMi (Health-Related Fake News Mitigation) is an NGI-Search-funded project to give back trustworthiness to the Internet community by tackling fake news spread. Other than the well-known cyber threats, several factors have been undermining the Internet search experience lately. One of the pandemic&#8217;s lessons learned concerns the health-related fake news spread over websites and social media networks. Some nefarious effects came as a non-negligible hesitancy towards national healthcare systems&#8217; guidelines. Since then, several AI-powered solutions have been developed to counteract fake news circulation using supervised and unsupervised learning. The task is challenging due to the need for continuous updating upon introducing new scientific findings. The so-called data drift and catastrophic forgetting also affect the effectiveness of AI-powered classification methods.<br /> +LLMs (Large Language Models) have recently made their way through the AI landscape by delivering unprecedented performances over text analytics, mining, question and answering systems, and text generation. However, LLMs suffer from Hallucination, meaning they can elaborate contents that are unreliable as a source of truth even when fine-tuned on scientifically sound datasets.</p> + + OW2 track + OW2 track + OW2 track + https://www.sfscon.it/tracks/ow2-track-2023/ + + Alessandro Bruno + + + + 15:00 + 03:00 + Coming soon + + OW2 track + OW2 track + OW2 track + https://www.sfscon.it/tracks/ow2-track-2023/ + + + 15:20 + 00:20 + Videobooks + + Augmenting the Reading Experience with Synchronous Reading and Listening + Augmenting the Reading Experience with Synchronous Reading and Listening + <p>Recent open source libraries apply machine learning for forced alignment of speech and text and make it possible to produce text that is synchronized to audio in various languages. This makes it possible to produce a new type of reading experience: the videobook! This contribution talks about a pilot project that aims to produce videobooks based on hundreds of audiobooks and texts that are already in the public domain (such as librivox and the gutenberg project). Possible applications in the educational domain are discussed: such as language learning, accessibility and e-learning applications</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Michael Schlauch + + + + 15:40 + 00:20 + Can we sustain Software Freedom in the mobile world? + + <p>Laptops and servers are running Linux based free software just fine these days. But what about the small and powerful devices in our pockets that we carry everywhere?</p> +<p>Can we achieve the same level of freedom and choice on smart phones? Can we make that usable for everyone?</p> +<p>This talk gives a short overview about the current state of Linux on mobile devices.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Nicole Faerber + Guido Günther + + + + 16:00 + 00:20 + Process Analysis Tools 4 Public Utility + + <p>Background: Process Mining is a growing technology in recent years that consists of integrating specific process mining tools with management software systems to analyze process data and provide feedback on process efficiency, potential bottlenecks, and resource utilization in a production and business context.</p> +<p>Aim: The aim of this presentation is to showcase open source process mining tools, and how these could be integrated with other publicly available software in order to help make meaningful decisions driven by real data. This could be applied to any business context, including non-profit organizations and services to the public and community.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Martina Burlando + + + + 16:20 + 00:20 + TOGETHER IS BETTER + + Can competitors work together with open source ? + Can competitors work together with open source ? + <p>When community and Open source mindset are part of a company culture, it becomes easy to plan and project new products (even with potential competitors). In an open source project, all or part of the produced material is made publicly available for others to use, under certain conditions. The mistery of the &#8220;unpaid programmer&#8221; disappears when corporations see benefits coming from other members in the project and even fear of &#8220;loosing control&#8221; is balanced with continuous feedbacks from developers and users. This is the story of a new project&#8230;</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Nicola Filippini + + + + 16:40 + 00:20 + BIM2FEM: From Building Information Modeling to Finite Element Analysis + + An open-source-based workflow + An open-source-based workflow + <p>The construction industry currently lacks automated open-source-based workflows for thermal and structural analysis of buildings. The Finite Element Method (FEM) represents the state-of-the-art approach for structural and thermal analysis in construction engineering. With the recent increase in computing power, complex models can now be analyzed within a feasible amount of time. However, the integration of FEM into Building Information Modeling (BIM) workflows remains an active area of research. While some commercial software provides interfaces and plug-ins for BIM-integrated finite element analysis, their capabilities are limited and their use is restricted to the corresponding commercial software. Customizable open-source-based approaches exist, but they lack consistent and robust workflows. A consistent data flow of material properties and boundary conditions is essential but remains a challenging task that has not yet been sufficiently addressed. Fraunhofer Italia has developed a workflow based on the open IFC-standard and open-source FEM software packages, which has been tested and validated through the creation of a software prototype. This talk will introduce the developed workflow and demonstrate the prototype’s functionalities through selected use-cases.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Julius Emig + + + + 17:00 + 00:20 + Open Tracing Tools: Overview and Comparison + + <p>Open Tracing Tools are software tools that enable the monitoring, debugging, and optimization of distributed software architectures. They provide a way to trace and understand the flow of requests and data through various components of a distributed system.</p> +<p>In the last months, the authors conducted a study to select and compare 30 tracing tools using a systematic literature review approach. They analysed the open source licence, features, architecture, the collected data, interoperability, but also the popularity, benefits, and issues of each tool, using topic modelling and sentiment analysis. The results offer a systematic comparison of the selected tracing tools.</p> +<p>We&#8217;ll say it in advance: there is one perfect tool that is better than all the others but this talk will present a) a brief overview of what open tracing tools are and the OpenTelemetry standard, b) the process followed in the study and c) the obtained results. For those that want to read the entire report, here it is: https://arxiv.org/abs/2207.06875.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Andrea Janes + Xiaozhou Li + Valentina Lenarduzzi + + + + 17:20 + 00:20 + Providing and Receiving Feedback in Open Source + + <p>For open-source developers, user feedback provides a direct line between both parties, offering valuable insights. That&#8217;s at least how the theory goes In reality, the feedback is often skewed, and the minority of negative loudmouths sometimes overshadows the silent majority of satisfied and grateful users. Needless to say, this doesn&#8217;t do any favors to open-source developers.</p> +<p>Is there a way to improve the situation? Join this session and learn how you, as an open-source developer, can deal with feedback and other challenges unique to the open-source development model.</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Dan Čermák + + + + 17:40 + 00:20 + Shaping the future with Data + + How Data can become the most valuable asset for a business/ company + How Data can become the most valuable asset for a business/ company + <p>How to launch, build and scale a business with DATA.<br /> +Support any decision making process<br /> +Become a value for people<br /> +Can help in the change management</p> + + Community track + Community track + Community track + https://www.sfscon.it/tracks/community-track-2023/ + + Zemourda Aissaoui + + + + + + 11:20 + 00:20 + Decoding the Corporate Maze + + Empowering Exposure Assessment through Open Software and OSINT + Empowering Exposure Assessment through Open Software and OSINT + <p>Embark on a remarkable expedition as we delve into the realm of Exposure Assessment. Unlocking its wonders, we will navigate this captivating process exclusively utilizing Open Software and OSINT. With a mere glimpse into a company&#8217;s domain, we will traverse the intricate labyrinth of their infrastructure, diligently seeking a potential access point into their corporate system.</p> + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + Francesco Pavanello + + + + 11:40 + 00:20 + Predict security attacks in FOSS + + Why you want it and how to do it + Why you want it and how to do it + <p>FOSS is here to stay, displacing malevolent privative counterparts—great!<br /> +FOSS exposes bugs to be found and fixed by the community—great!<br /> +FOSS shows security issues than can be exploited by attackers—gr..what?<br /> +In the last decades, source code transparency has made the job of black-hat hackers increasingly easy. We now have security websites exposing vulnerabilities and even exploits online—and despite good practices like responsible disclosure, it is the sheer amount of (external) code what makes everyone ultimately vulnerable. In plain words, nobody&#8217;s safe.</p> +<p>From that base, this talk puts forward the need for a concept of *probability of future exploits*. This is crucial for project management, but also at developer level, to see the risks of not upgrading (or yes upgrading!) a dependency. We show how this probability can, and must, be computed from a project&#8217;s dependency tree, in a manner that only the use of FOSS can allow. We also show that the development history of the project and its dependencies is key to getting useful results.</p> +<p>Finally, we merge the dependency tree and development history of a project into a white-box model, which we use to estimate the probability of future exploits. We show how to do it for the Java-Maven environment, for which we can use the FOSS tool &#8216;FIG&#8217;. FIG, written in C++ and released under GPLv3, was designed for statistical estimations and can compute the probability of attacks in complex scenarios like the ones at hand.</p> + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + Carlos Esteban Budde + + + + 12:00 + 00:20 + Software freedom primer on Self Sovereign Identity + + Let's stop feeding the surveillance economy + Let's stop feeding the surveillance economy + <p>The federated identity ecosystem is one of the key mechanisms by which the platform and surveillance economy has grown into today&#8217;s shape, mostly on the shoulders of a vast number of Open Source contributions. Self Sovereign Identity is a privacy, freedom, control first approach to managing identity in a decentralised and secure way. In his talk, Georg Greve will provide a primer into SSI, how it works, and share insights from developing the SSI stack within the Eclipse Cross Federation Services Components, formerly Gaia-X Federation Services.</p> + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + Georg Greve + + + + 12:20 + 00:20 + Opensource to help increase organizations Cybersecurity posture + + Cybersecurity is a compulsory, tough and expensive task for all organizations + Cybersecurity is a compulsory, tough and expensive task for all organizations + <p>Cybersecurity is a compulsory, tough and expensive task for all organizations, private and public, large , medium and small.<br /> +No one can ignore it anymore, and building a viable Cybersecurity strategy is a complex task that needs to balance budget, keeping up with attacker technologies, available skills and a plethora of expensive tools on the market.<br /> +Let&#8217;s discus s on how available Opensource solutions may greatly help ours organizations to be more effective in implementing their Cybersecurity posture, while optimizing available budget.</p> + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + Carlo Falciola + + + + 12:40 + 00:20 + Technical leverage analysis in the Python ecosystem: lessons learned + + <p>[Context:] Technical leverage is the ratio between dependencies (other people&#8217;s code) and own codes of a software package. It has been shown to be useful to characterize the Java ecosystem and there are also studies on the NPM ecosystem available. [Objective:] By using this metric we aim to analyze the Python ecosystem, how it evolves, and how secure it is, as a developer would perceive it when deciding to adopt or update (or not) a library. [Method:] We collect a dataset of the top 600 Python packages (corresponding to 21,205 versions) and used a number of innovative approaches for its analysis including the use of a two-part statistical model to deal with excess zeros, a mathematical closed formulation to estimate vulnerabilities that we confirm with bootstrapping on the actual dataset. [Results:] Small Python package versions have a median technical leverage of 6.9x their own code, while bigger package versions rely on dependencies code a tenth of their own (median leverage of 0.1). In terms of evolution, Python packages tend to have stable technical leverage through their evolution (once highly leveraged, always leveraged). On security, the chance of getting a safe package version when choosing a package is actually better than previous research has shown based on the ratio of safe package versions in the ecosystem. [Conclusions:] Python packages ship a lot of other people&#8217;s code and tend to keep doing so. However, developers will have a good chance to choose a safe package version.</p> + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + Ranindya Paramitha + + + + 13:00 + 00:20 + MBBS: A Multimodal Behavioral Biometric Scheme for Smartphone User Authentication + + <p>In this presentation, we present MBBS, a tetra-model behavioral biometric-based authentication scheme designed specifically for smartphones. MBBS utilizes four distinct modalities to authenticate users: touchscreen swiping patterns, taps on &#8220;text-independent&#8221; 8-digit numbers, name writing on the touchscreen, and micro-movements of the hand during the entry process. To enhance overall accuracy and security, MBBS incorporates a state-of-the-art Generative Adversarial Network (GAN) powered data augmentation architecture. This innovative approach allows us to demonstrate the effectiveness of MBBS using both real user samples and augmented samples, consisting of a combination of &#8220;real&#8221; and &#8220;GAN-generated&#8221; data, on an actual Android device. One of the key advantages of MBBS is its high usability, as it eliminates the need for users to remember any secret information. Instead, it leverages users&#8217; familiarity with natural processes, thereby increasing accuracy in real-time by employing GAN technology, all without requiring a large sample size from users. We will also present preliminary results from our performance, security, and usability analysis, which showcase a positive opinion regarding the effectiveness of our developed authentication mechanism.</p> + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + Attaullah Buriro + + + + 13:20 + 00:20 + Recommending security fixes for weak open-source code with AI + + <p>Technical debt is a metaphor that describes not-quite-right code introduced for short-term needs. The effort to refactor it increases if it remains for a long in the software. When developers are aware of it and admit it in source code comments, the debt is called Self-Admitted Technical Debt (SATD). Thus, SATD indicates weak code that developers are aware of. The question is whether they are aware that this code may be vulnerable to attacks. This presentation will illustrate how artificial intelligence can be employed to recommend security fixes for vulnerabilities to developers.</p> + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + Jorge Melegati + Moritz Mock + Barbara Russo + + + + 13:40 + 04:20 + Coming soon + + Cybersecurity track + Cybersecurity track + Cybersecurity track + https://www.sfscon.it/tracks/cybersecurity-track-2023/ + + + 14:00 + 00:20 + Free Software and AI in Europe + + How Europe regulates AI and Free Software + How Europe regulates AI and Free Software + <p>In this talk, I will present the latest developments in EU legislation and activities on AI and what role Free Software plays in this.</p> +<p>The European Union&#8217;s AI Act is the first comprehensive set of regulations for the artificial intelligence. Also Free Software plays a role in this regulation. I will shed light on the upcoming rules and evaluate what this means for Free Software, AI but also other upcoming regulations.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Alexander Sander + + + + 14:20 + 00:20 + Why Do We Need A Next Generation Internet? + + Improving the Internet as a platform, one Free Software at a time + Improving the Internet as a platform, one Free Software at a time + <p>The Internet today forms the backbone of the digitisation of our society and economy. As connectivity increases, the boundaries between the real and digital world get increasingly blurred. However, there has been an erosion of trust in the Internet following revelations about the exploitation of personal data, large-scale cybersecurity and data breaches, and growing awareness of the proliferation and impacts of online disinformation.</p> +<p>What can be done to improve the Internet as a platform for future generations? What initiatives are currently in place to build key technological blocks of an Internet that supports human-centric values, such as privacy, security, and inclusion, while reflecting the values and norms all citizens should enjoy in Europe?</p> +<p>This talk will explore why the current state of the internet must be re-imagined and re-engineered in order to support healthy societies, the existing European Commission initiative to work towards doing so, and the role of Free Software in accomplishing these goals.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Gabriel Ku Wei Bin + + + + 14:40 + 00:20 + Interoperable Europe Act: A real game changer? + + <p>Interoperability is a core element of the ongoing digitalisation of Europe. With the Interoperable Europe Act, the EU is aiming to create a dedicated legal framework for interoperability and to enhance cross-border digital public services across the European Union. This talk will give an overview of the state of play of this proposed regulation in the ongoing EU legislative process, some of its flaws, and the important role that Free Software and its community can play in it.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Lina Ceballos + + + + 15:00 + 00:20 + The Brand-New Version of IGis Maps + + The “swiss knife” developed and used in South Tyrol for the integrated management of Geo Referenced data and related information + The “swiss knife” developed and used in South Tyrol for the integrated management of Geo Referenced data and related information + <p>2023 saw the launch, after a long and well-structured revision and development process, all based on a fruitful collaboration between several departments of the Autonomous Province of Bolzano, most of the township in South Tyrol, Informatica Alto Adige (SIAG &#8211; Technical partner) and the Consortium of Municipalities of the Province of Bolzano, of the new version of the integrated geographic data management system IGis Maps. In use for years in South Tyrol, has in the Consortium one of its most enthusiastic contributors and supporters.</p> +<p>The very first version was released about eight years ago and its implementation was based on the idea of creating a multi-purpose GIS management system that could support different types of users, that was highly customizable, and, above all, that could be widely shared among the various management entities, both public and private, present within our territory.</p> +<p>After years of use and ad-hoc developments, we can finally present the new version of the IGis Maps system, which incorporates all the technical and technological improvements we realized the system needed.</p> +<p>It was not just a major update together with new functionalities combined inside the previous software structure, but a true re-engineering that led, among other things, to a new and more efficient user interface, a major advancement regarding the internal security, an optimization and improvement of the entire editing section as well as an optimization of the section regarding the automatic geo-processes.</p> +<p>A mobile version is currently under development to better support any field activities, for which a very powerful option will be included, the possibility of creating special work sessions in off-line mode so as to be able to operate even in areas without a proper cellular line network coverage.</p> +<p>Other very important peculiarities concern that the system is developed using a totally free software code and infrastructure, that a detailed documentation has been produced to ensure sustainability to any further future evolution, even in case of technical partner turnover, and finally, that by taking advantage of the high standards and levels of security access can be guaranteed to any type of user. From professional users, through dedicated access and qualifications or, using the ordinary SPID, to the private citizen.</p> +<p>We will show examples of how different types of users and stakeholders now permanently use the system for the management of a variety of tasks related to their activities, and how it was possible to customize IGis Maps to create visualization and data management contexts that best meet their needs.</p> +<p>We will also present a related project concerning the updating and the correction of the new technical basal cartography, built upon the new Basic Core specification, achieved through the automatic conversion implemented by the SIAG team starting from the previous National Core cartography. With the new IGis Maps it was possible to create an advanced editing and management environment that allow both experienced and less advanced users to interact with this important new informative layer to fill all those gaps and errors that are more than normal to discover following an important automatic translation action such as the one carried out for the Basic Core project.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Edoardo Scepi + + + + 15:20 + 00:20 + Let’s monitor implementation of Free Software Policies! + + How to sharpen the demand for public code across Europe and monitor progress with TEDective + How to sharpen the demand for public code across Europe and monitor progress with TEDective + <p>For six years, the Free Software Foundation Europe has been calling with a broad alliance for publicly funded software to be published as Free Software. This initiative has become a great success: Our demand &#8220;Public Money? Public Code!&#8221; has found its way into government strategy papers, party programs, as well as coalition treaties, and is being discussed in public administrations across Europe.</p> +<p>At the same time, we see less progress than expected and vendor lock ins remain a crucial issue. Digital sovereignty is redefined bypassing Free Software. There is openwashing in publicly funded companies, and government projects in favour of Free Software remain empty words. Public statistics on the procurement of Free Software are largely unavailable.</p> +<p>It is therefore no longer enough to promote the idea of &#8220;Public Money? Public Code!&#8221;. We as the Free Software community should be even more vigilant than before – continuing to praise small steps in the right direction, but pointing out and criticising omissions and lack of implementation. We should become more like watchdogs.</p> +<p>In the talk we will look at some examples of lack of implementation of Free Software policies. We will discuss how we, as civil society, can identify such shortcomings and how to deal with them. We will present our initiative TEDective – a free-software solution that makes European public procurement data explorable for non-experts, aiming to provide you with a powerful tool to keep an eye on real progress towards &#8220;Public Money? Public Code!&#8221; across Europe.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Johannes Näder + Linus Sehn + + + + 15:40 + 00:20 + GovStack project a univeral E-Government + + <p>GovStack aims to break down the barriers to building sustainable digital infrastructure and help governments create human-centered digital services that empower individuals and improve well-being.</p> +<p>In 2015, world leaders agreed to 17 Global Goals for Sustainable Development to achieve a better world by 2030. Many of these goals rely on governments’ ability to deliver services to people. We know that digital technology can facilitate broader access and build more inclusive and resilient societies. Plus, digital government services can foster economic growth and promote trust in government institutions.</p> +<p>GovStack is helping governments simplify the digital transformation process and reduce the cost, time, and resources required to create digital platforms and services.</p> +<p>Our approach is based on the SDG Digital Investment Framework, to help countries make smarter and more strategic decisions in their ICT investments.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Oleksii Danyliuk + + + + 16:00 + 00:20 + Empowering Insights: Unveiling the latest innovations in KNOWAGE for BI and Data Visualization + + <p>KNOWAGE is the open source analytics and business intelligence suite made in Italy. KNOWAGE aims to provide company and organizations with analytical capabilities to exploit data to increase their efficiency and sustainability. Also thanks to the open source community support, the suite is constantly evolving combining the reliability of the most popular business intelligence solutions with the security and the transparency guaranteed by open source.<br /> +This talk will show the last year advancements and new features towards a more mobile, accessible and user-friendly product, focusing on the newly rewritten dashboarding tool.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Davide Vernassa + + + + 16:20 + 00:20 + KNOWAGE and AICS for 2030 agenda SDG goals monitoring + + Visualizing international open data to enhance sustainable development + Visualizing international open data to enhance sustainable development + <p>AICS is the Italian Agency for Development Cooperation that started operating in 2016 with the ambition of aligning Italy with the main European and international partners in the commitment to development. KNOWAGE Labs are developing for AICS a platform that is probably unique in the world and will allow both the Agency and the public to access all the major indicators on the UN Sustainable Development Goals provided by international sources (World Bank, WTO, ILO..) and easily compare them. The solution will allow analysis to start from 3 different touch points: the infographic of SDG goals, the advanced search criteria, and the virtual assistant. Then, a customized dashboard will be provided to the user, allowing to further expand the analysis by interacting with charts, maps, tables, etc. This talk will show the state of art of the solution, highlighting objectives and expected results of the project, but also the new developments of KNOWAGE related to AI.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Marco Cortella + + + + 16:40 + 00:20 + European regulators cast their eyes on maturing OSS communities + + <p>As open source software becomes the foundation to build digital products, to run the backbones of ICT infrastructure and to ensure digital sovereignty and cyber resilience, both the technology as well as the communities that develop it inevitably move into the focus of regulators. The European Union is advancing a number of policy initiatives that regulate liability, cyber security, data handling and AI applications in digital products, among others. This is a challenge for the still quite decentralised and globally operating open source community. How could the open source community participate in legislative processes, and what may be the potential impacts of the upcoming regulation on the open source development process and community dynamics?</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Mirko Boehm + + + + 17:00 + 00:20 + How IoT and AI are revolutionizing Mass Customization + + <p>This lightning talk will explore the transformative potential of integrating Internet of Things (IoT) and Artificial Intelligence (AI) in Mass Customization (MC). There is a significant collective impact of these technologies on businesses, enabling the delivery of personalized products and exceptional customer experiences. Besides giving an overview of MC and the potential ways of integrating IoT and AI, the focus will be on the process of real-time data collection and facilitation of the customization process by IoT on one hand, and on the role of AI in data analysis and generation of personalized recommendations on the other hand. By presenting real-world case studies to demonstrate the practical implementation of IoT and AI in providing customized products and seamless customer experiences, attendees will gain insights into the future of customization and learn actionable strategies to effectively leverage IoT and AI.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Thomas Aichner + + + + 17:20 + 00:20 + Smart Werke Meran + + Smart City 100% Open Source + Smart City 100% Open Source + <p>Since 2020 Stadtwerke Meran have realized 5 Use cases:<br /> +&#8211; Control of the control cabinets of public lighting.<br /> +&#8211; Optimizing the service on Wast Press container.<br /> +&#8211; Bike Boxes<br /> +&#8211; Just Nature Project , temperature measuring over Lorawan<br /> +&#8211; Smart Lighting , communication with single light points over Lorwan.</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Stefan Mutschlechner + + + + 17:40 + 00:20 + Monitoring the fleet of Sasa with free software + + Is it possibile to monitor a fleet of 400 buses using free software ? + Is it possibile to monitor a fleet of 400 buses using free software ? + <p>The public transport in South Tyrol is going through a huge transformation: new investments, many new green vehicles and a brand new software. Transition will take time and how do we develop a fleet monitoring system to use during the transition without spending a fortune ? maybe with free software!</p> + + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + Public Money Public Code & Open Data track + https://www.sfscon.it/tracks/public-money-public-code-open-data-track-2023/ + + Marco Pavanelli + + + + + + 13:00 + 00:30 + NOI Hackathon SFSCON Edition + + Side Event - Hackathon + Side Event - Hackathon + Side Event,Hackathon + + + + + + + 08:30 + 00:30 + Starting of the second day + + SFSCON + SFSCON + SFSCON + + + 08:35 + 00:30 + Check-in + + Main track + Main track + Main track,Main track + + + 13:00 + 00:30 + Closing of the SFSCON 2023 + + SFSCON + SFSCON + SFSCON + + + + + 08:30 + 00:50 + Welcome Coffee + + SFSCON + SFSCON + SFSCON + + + + + 09:20 + 00:20 + How can Blockchain technologies incorporate AI solutions for a safer and efficient Open Data ecosystem. + + <p>The transition from Web 2.0 to Web 3.0 has fueled the need for a secure and decentralized cloud storage solution for digital assets. Web 2.0 was characterized by centralized platforms where user data was under the control of companies. In contrast, Web 3.0 aims to empower individuals and foster a decentralized web that supports and benefits the Free Software and Open Data Communities.</p> +<p>Blockchain technologies facilitate seamless collaboration and interoperability among diverse stakeholders in the Free Software and Open Data communities. Developers can establish open and transparent ecosystems where data can be shared, verified, and integrated across multiple platforms.</p> +<p>Beez, with its own blockchain infrastructure, offers a secure and transparent platform for digital asset exchanges, bolstering transaction integrity and trust. By distributing data across a network of nodes, Beez ensures security and mitigates the risk of single points of failure. Users retain control over their data, safeguard their privacy, and can take advantage of the incentive mechanisms offered by blockchain networks.<br /> +During our presentation, we will explore the role of AI within Beez&#8217;s ecosystem, facilitating accelerated data processing, correlation, and intelligent automation. AI unlocks valuable insights from blockchain data, and we will touch upon the use of Inductive Logic Programming (ILP) to enhance programming performance.</p> +<p>The integration of Blockchain and AI technologies holds great potential for advancing the safety and efficiency of the Open Data ecosystem. By combining decentralized data storage, trust-building mechanisms, and intelligent data processing, Beez is paving the way for a more secure, transparent, and user-centric digital landscape.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Marianna d'Atri + Enrico Zanardo + + + + 09:40 + 00:20 + Real-time aeroplane tracking and the Open Data Hub + + Using the Open Data Hub as real-time data backbone + Using the Open Data Hub as real-time data backbone + <p>Tracking aeroplanes in real time with Open Source Software is possible. Aircrafts must continuously send their current flight parameters to air traffic controllers on the ground and to other aircrafts. This generates a lot of data, especially when planes are being tracked by multiple sensors.<br /> +The Open Data Hub on the other hand offers a great backbone for data storing and processing, where the correct datasets have to be identified and filtered. After all transformation on the data is done, it will be exposed via API to be further used by a web application.<br /> +Bringing together sensor generated data, the Open Data Hub and custom web applications, is a showcase on how the Open Data Hub can be used as a service: OaaS.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Martin Rabanser + + + + 10:00 + 00:20 + Embracing CI/CD workflows for building ETL pipelines + + how we will gather and monitor multi-source spatially-interpolated meteorological parameters in near-real time + how we will gather and monitor multi-source spatially-interpolated meteorological parameters in near-real time + <p>Up-to date measurements of surface meteorological variables are essential to monitor weather conditions, their spatio-temporal variability and the potential effects on a wide range of sectors and applications. Moreover, when included in continuous records of long historical observations spanning several decades, they become essential for assessing long-term climate variability and change locally and on a regional level.</p> +<p>Automated pipelines capable of retrieving and processing near-real time meteorological data satisfy the primary prerequisites towards the development and advancement of effective and operational climate services.</p> +<p>With a public and operational near real-time monitoring web platform in mind, we present automated pipelines to collect and process up-to-date daily temperature and precipitation records for Trentino South Tyrol (Italy) and surrounding areas, and to derive their spatially interpolated fields at sub-km scale. Our pipelines are composed by multiple steps including data download, sanity checks, reconstruction of missing daily records, integration into the historical archive, spatial interpolation and publication onto online FAIR catalogues as (openEO) “datacubes”. The different APIs, data formats and structure across the various data sources, and the need to merge the data onto harmonized meteorological layers, make this a typical case of the so-called Extract, Transform and Load (ETL) pipelines, and, in order to follow the principles of data reproducibility and Open Science, we embraced open-source automated workflow management through GitLab’s Continuous Integration / Continuous Development (CI/CD) capabilities.</p> +<p>CI/CD workflows greatly help the management of the relatively complex graphs of tasks required for our climate application, ensuring seamless orchestration with thorough flow monitoring, application logs, transactions rollbacks, and exception handling in general. Native pipeline-oriented software development also fosters a clean separation of roles among the tasks, and a more modular architecture. This effectively reduces barriers to collaborative development and paves the way for robust operational climate services for researchers and decision makers in the face of the changing climate.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Elena Maines + + + + 10:20 + 00:20 + Free Software and Open Science + + <p>The Open Science movement aims to increase the transparency, reproducibility and inclusiveness of academic research. One of its central goals is therefore to make research outputs broadly available, e.g., manuscripts (Open Access) or research data (Open Data). While software/code created in the course of scientific research is a key artifact of scientific research that is clear distinct from the latter two, it has until recently not received the same attention as manuscripts or data, although it follows its own set of paradigms.</p> +<p>In this talk I will present an overview on how the core concepts of Free Software and the FAIR (findable, accessible, interoperable, reuseable) Principles intersect, what this means for managing code as research output and recent initiatives on the European level that will provide support for these issues.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Christian Busse + + + + 10:40 + 00:20 + MLOps with Kubernetes: unleash the power of the ecosystem! + + <p>Kubernetes is a popular open-source software, today&#8217;s de-facto open standard, to run production workloads. Innovation in the ecosystem thrives with multiple projects that enrich the platform&#8217;s core. Machine Learning Operations (MLOps) is part of the same effort to bring automation into Kubernetes for ML pipelines.</p> +<p>This session aims to explore the Kubernetes-native tools available such as Tekton, Argo CD, Kubeflow, and OpenDataHub, to apply DevOps and GitOps principles in AI/ML contexts.</p> +<p>By the end of the session, attendees will have a clear understanding on how to automate and simplify the iterative process of integrating ML models into software development processes, production rollout, monitoring, retraining, and redeployment for continued prediction accuracy with open source tools.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Natale Vinto + + + + 11:00 + 00:20 + Achieving FAIRness with EDP-portal + + DOI and citation improvements in metadata of EDP-portal + DOI and citation improvements in metadata of EDP-portal + <p>EDP-portal is the access point to the Environmental Data Platform of Eurac Research since 2021 to achieve FAIRness of our datasets. It allows to publish data and metadata and provides APIs and web services for data access. In the last 2 years the EDP improved the findability and accessibility of the data collected throughout the curation of metadata that was improved with the DOI registration for datasets. The result is a higher metadata quality where the final user can easily find how to properly cite datasets with a persistent identifier. The portal itself and main data repositories are registered in FAIR-sharing portal with their own DOI. The SW components of the EDP are totally based on open source projects.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Andrea Vianello + + + + 11:20 + 00:20 + SMODEX – a Python package for understanding the evolution of soil moisture anomalies + + <p>The complexity of agricultural droughts requires a consistent, reliable, and systematic method for monitoring and reporting. Amongst the various indices used to monitor this phenomenon, the soil moisture anomaly has been proven to be a more reliable predictor. However, the datasets required for computing this index are often large and computationally demanding. To address this challenge, we have developed SMODEX, a Python package that enables scalable, fast, and open-source standard-compliant computation and visualization of soil moisture anomalies.</p> +<p>SMODEX simplifies the computation and visualization of time-series for soil moisture and soil moisture anomalies from high-dimensional climate datasets. It allows for quick and easy parallelization of the computation on a daily, weekly, and monthly timescale. Additionally, SMODEX implements a straightforward workflow for automating the use of FAIR (Findable, Accessible, Interoperable, and Reusable) principles in producing and sharing outputs by leveraging the open source STAC API. The package is extendible and provides information on how to contribute to the project, test suites, test coverage, and a use case for the South Tyrol region, all provided in the package repository. In the future, additional agricultural drought indices and indicators would be included to serve to even larger community of researchers, policy makers, and individual users.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Rufai Omowunmi Balogun + + + + 11:40 + 00:20 + Why open digital infrastructure matters + + hardware & software infrastructure for Europe + hardware & software infrastructure for Europe + <p>Software freedom can be defined in many ways but in legal terms it is squarely defined by a set of approved FSF and OSI software licenses. Yet everyone realizes that beyond these licenses the goal of software freedom and digital sovereignty cannot be achieved without the ability to master and create hardware components and systems &#8211; and beyond that, to rely on open digital infrastructure (servers, datacenters, and resources) . This talk will present the challenges around these topics and what we, collectively in Europe already do and can do to ensure our independence and our freedoms.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Charles-H. Schulz + + + + 12:00 + 00:20 + Intelligent Decision Support System for traceability system of MOAH & MOSH olive oil contaminants + + What we are doing, what we will do! + What we are doing, what we will do! + <p>MOSH and MOAH are the abbreviation of two groups of chemical compounds found in mineral oils. “MOSH” stands for Mineral Oil Saturated Hydrocarbons. MOAH stands for Mineral Oil Aromatic Hydrocarbons. Both of them are under European deeply evaluation because there are two food contaminants. According to the current state of scientific knowledge, there is no sufficient toxicological evidence to prove a health risk to humans from saturated mineral oil fractions (MOSH). Meanwhile, MOAH are suspected to be carcinogenic (especially PAH-like compounds with 3-7 ring systems), therefore their levels in food should be reduced according to the ALARA-principle (as low as reasonably achievable). Gruppo FOS with CNR ( MOSH and MOAH are the abbreviation of two groups of chemical compounds found in mineral oils. “MOSH” stands for Mineral Oil Saturated Hydrocarbons. MOAH stands for Mineral Oil Aromatic Hydrocarbons. Both of them are under European deeply evaluation because there are two food contaminants. According to the current state of scientific knowledge, there is no sufficient toxicological evidence to prove a health risk to humans from saturated mineral oil fractions (MOSH). Meanwhile, MOAH are suspected to be carcinogenic (especially PAH-like compounds with 3-7 ring systems), therefore their levels in food should be reduced according to the ALARA-principle (as low as reasonably achievable). Gruppo FOS with CNR (Consiglio Nazionale delle Ricerche), Santagata 1907 and Enginius are searching the system for finding and trace their presence in the virgin and extra virgin olive oils by using open fingerprints methods, open hardware and open source blockchain and AI technologies.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Giovanni Giannotta + + + + 12:20 + 00:20 + The Future of Connectivity, Open Internet and Human Rights + + Making telecommunications more democratic with Free Software + Making telecommunications more democratic with Free Software + <p>We are becoming more and more dependent on the Internet for our work, education, communication, personal relations and entertainment. Our digital devices conquered an unprecedented level of importance in our life.</p> +<p>However, we are facing a loss of control over our smartphones, tablets and other devices for internet connection. It&#8217;s time to resolve monopolies and re-establish democratic control over the technology we most depend upon.</p> +<p>This talk will present the challenges end-users are facing to get more control over their devices and how Free Software is key for a consumer re-empowerement.</p> +<p>The talk will present real-life examples of policy demands against gatekeepers on digital markets, such as the struggle for Router Freedom in the last years and how Device Neutrality can serve as an important instrument for pushing forward end-user-oriented digital policies.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Lucas Lasota + + + + 12:40 + 00:20 + From the design to reality is here the Community Open Hardware PowerPC Notebook + + In 2014 hobbists dream it, now thanks to donors, volunteers and collaborations becomes reality + In 2014 hobbists dream it, now thanks to donors, volunteers and collaborations becomes reality + <p>The Open Hardware PowerPC Notebook designed around GNU/Linux will be showed at NOI Techpark. We had presented here its motherboard design in 2018. We will updates regarding last developments for u-boot AMD video drivers, re-design of heat pipes, and CE test certification process. We will give future availability milestones of this notebook and details regarding the GNU/Linux distributions or other OS that could runs on it.</p> + + Open Data & Open Hardware track + Open Data & Open Hardware track + Open Data & Open Hardware track + https://www.sfscon.it/tracks/open-data-open-hardware-track-2023/ + + Roberto Innocenti + + + + + + 09:20 + 01:00 + ZOOOM Toolkit Interactive Workshop + + <p>This workshop will focus on examining the ZOOOM toolkit, which provides valuable tools and material regarding open licence innovation around the topic of Open Data, Software and Hardware. Particularly, we will present the overall interface and user experience with the hope of collecting valuable feedback from participants and identifying potential improvements in both the structure and the functions of specific supporting tools. The involvement of the participants will be instrumental in gathering cutting-edge and up-to-date knowledge regarding current tools and resources that can contribute to the creation of an all-inclusive knowledge repository on open licence innovation.</p> +<p><b>REGISTRATION NEEDED AT: </b><a href="https://pretix.eu/noi-digital/sfscon23/3980546/">https://pretix.eu/noi-digital/sfscon23/3980546/</a></p> + + ZOOOM project track + ZOOOM project track + ZOOOM project track + https://www.sfscon.it/tracks/zooom-project-track-2023/ + + Amalia de Götzen + Andy Peruccon + Ronald Chenu Abente Acosta + + + + 10:20 + 00:30 + Closing ZOOOM Toolkit Interactive Workshop + + ZOOOM project track + ZOOOM project track + ZOOOM project track + https://www.sfscon.it/tracks/zooom-project-track-2023/ + + + + + 09:20 + 03:40 + The future of Free Software in Italy + + Side Event - FSFE - Italian community meeting + Side Event - FSFE - Italian community meeting + Side Event,FSFE,Italian community meeting + https://www.sfscon.it/tracks/fsfe-italian-community-meeting/ + + Marta Andreoli + + + + + + 17:00 + 00:30 + Winner proclamation and closing of the NOI Hackathon SFSCON Edition + + Side Event - Hackathon + Side Event - Hackathon + Side Event,Hackathon + + + + diff --git a/src/tests/assets/sfscon2023sponsors.yaml b/src/tests/assets/sfscon2023sponsors.yaml new file mode 100644 index 0000000..0139850 --- /dev/null +++ b/src/tests/assets/sfscon2023sponsors.yaml @@ -0,0 +1,169 @@ +- id: ac2fefd3-3664-4e67-a0ff-76daffe05a47 + name: Eclipse Foundation + acronym: eclipse + sponsor_type: main + logo_url: https://m.opencon.dev/static/ECLIPSE_BNnew.png + url: https://www.eclipse.org/ + width: 282px + height: 91px +- id: 44701ce9-af97-4819-8852-30e12fb96066 + name: Gruppo Fos + acronym: gruppo-fos + sponsor_type: main + logo_url: https://m.opencon.dev/static/GRUPPOFOS_BNnew.png + url: https://www.gruppofos.it/ + width: 282px + height: 102px +- id: 219de8c8-7f80-49e2-b101-aa8e9e498db4 + acronym: red-hat + name: Red Hat + sponsor_type: main + logo_url: https://m.opencon.dev/static/red-hat.png + url: https://www.redhat.com/en + width: 284px + height: 86px +- id: 4dad81f6-e1e2-478e-9406-80b5987204dc + acronym: telmekom + name: Telmekom + sponsor_type: main + logo_url: https://m.opencon.dev/static/TELMEKOM_BNnew.png + url: http://www.telmekom.net/ + width: 284px + height: 86px +- id: 5f1e9ccc-cf71-441e-81e0-c40dc34a677e + acronym: vates + name: Vates + sponsor_type: normal + logo_url: https://m.opencon.dev/static/VATES_BNnew.png + url: https://vates.fr/ + width: 180px + height: 53.43px +- id: 127d0b97-87fd-454e-822e-77fb7367ce28 + name: ITSERVICENET + acronym: it-service-net + logo_url: https://m.opencon.dev/static/itservicenet.png + url: https://www.itservicenet.net/ + sponsor_type: normal + width: 180px + height: 71.16px +- id: e68950c1-eda9-48c8-8fc4-5ef987228ce2 + acronym: madeinchima + name: Made In Chima + logo_url: https://m.opencon.dev/static/MADEINCIMA_BNnew.png + url: https://www.madeincima.it/ + sponsor_type: normal + width: 128px + height: 70px +- id: 184da88c-f090-4cf9-958c-22b84c0fe8d4 + acronym: '1006' + name: 1006 Org + logo_url: https://m.opencon.dev/static/1006org_logonew.png + url: https://www.1006.org/ + sponsor_type: normal + width: 101px + height: 20px +- id: 101c39b0-24ab-474b-a747-459a6a61660d + acronym: catchsolve + name: Catchsolve + logo_url: https://m.opencon.dev/static/CATCHSOLVE_BNnew.png + url: https://www.catch-solve.tech/ + sponsor_type: normal + width: 128px + height: 32px +- id: f542abc0-c94b-4459-82ed-9acf814fefae + acronym: endian + name: Endian + logo_url: https://m.opencon.dev/static/ENDIAN_BNnew.png + url: https://www.endian.com/ + sponsor_type: normal + width: 90px + height: 22.28px +- id: e9c0d83a-26f5-4ed0-8162-09ab28c2ddda + acronym: peer + name: Peer + logo_url: https://m.opencon.dev/static/Peer_BNnew.png + url: https://www.peer.biz/de/ + sponsor_type: normal + width: 80px + height: 30.66px +- id: 2244636e-19ad-4edd-b537-da40368a904e + acronym: fosslife + name: Foss Life + logo_url: https://m.opencon.dev/static/FossLife_BNnew.png + url: https://fosslife.org/ + sponsor_type: normal + width: 40px + height: 50.91px +- id: f6e8cf35-60aa-4fc7-aed2-1af091147d3a + acronym: fsfe + name: Fsfe + logo_url: https://m.opencon.dev/static/FSFE_BNnew.png + url: https://fsfe.org/ + sponsor_type: normal + width: 70px + height: 38px +- id: 05646adf-f9a0-47d8-8030-5a682ca8708b + acronym: linux-magazine + name: Linux + logo_url: https://m.opencon.dev/static/LinuxMagazine_BNnew.png + url: https://www.linux-magazine.com/ + sponsor_type: normal + width: 60px + height: 27px +- id: 2de671e5-ceaa-4306-a685-24921c3a14f5 + acronym: lugbz + name: Lugbz + logo_url: https://m.opencon.dev/static/LUGBZ_BNnew.png + url: https://www.lugbz.org/ + sponsor_type: normal + width: 36px + height: 42px +- id: 691dff4f-8b91-4993-acd3-2e73352348c2 + acronym: ow2 + name: Ow2 + logo_url: https://m.opencon.dev/static/OW2_BNnew.png + url: https://www.ow2.org/ + sponsor_type: normal + width: 50px + height: 13px +- id: 329152e4-bffd-4f9e-b6ca-edc0d11bc7dc + acronym: speckand.tech + name: Speck & Tech + logo_url: https://m.opencon.dev/static/SpeckTech_BNnew.png + url: https://speckand.tech/ + sponsor_type: normal + width: 36px + height: 46px +- id: de0cd141-12a3-4e8d-90e5-b04f222f5582 + acronym: stickermule + name: Sticker Mule + logo_url: https://m.opencon.dev/static/Stickermule_BNnew.png + url: >- + https://www.stickermule.com/it/uses/laptop-stickers?utm_source=sponsorship&utm_medium=referral&utm_campaign=SFSCon21 + sponsor_type: normal + width: 64px + height: 39px +- id: 0508427b-41c9-43fb-b209-b3673761ea6f + acronym: unibz + name: Unibz + logo_url: https://m.opencon.dev/static/UNIBZ_BNnew.png + url: https://www.unibz.it/ + sponsor_type: normal + width: 46px + height: 36px +- id: 2dee2644-8373-4dc2-a397-73ac14c0dbc0 + acronym: wud + name: Wud + logo_url: https://m.opencon.dev/static/WUD.png + url: https://wud-bz.it/ + sponsor_type: normal + width: 46px + height: 36px +- id: 4589f65b-bf88-4575-a6d1-069a63956439 + acronym: zooom + name: Zooom + logo_url: https://m.opencon.dev/static/ZOOOM.png + url: https://zooom4u.eu/ + sponsor_type: normal + width: 92px + height: 64px diff --git a/src/tests/assets/sfscon2024-m.xml b/src/tests/assets/sfscon2024-m.xml new file mode 100644 index 0000000..9346553 --- /dev/null +++ b/src/tests/assets/sfscon2024-m.xml @@ -0,0 +1,2248 @@ + + + + sfscon-2024 + SFSCON 2024 + + + Ethics, Policy, Legal & Economics + Data Spaces + Open Hardware + Developers + Community Building + Cybersecurity + Fediverse + DevOps + Side Event - Hackathon + Side Event - School Reading + Side Event - MiniNOI x SFSCON + OW2 + Side Event - Women* in tech + Side Event - Crane Hall BOF meetings + Side Event - FSFE - Italian community meeting + + + + + 08:30 + 00:30 + Check-in SFSCON 2024 + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + 0 + 0 + + + + + 09:00 + 00:15 + Opening SFSCON 2024 + https://www.sfscon.it/talks/opening-sfscon-2024/ + + <p>Opening SFSCON 2024</p> + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Philipp Achammer + + 1 + 1 + + + 09:15 + 00:05 + Greetings from NOI + https://www.sfscon.it/talks/greetings-from-noi/ + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Vincent Mauroit + + 1 + 1 + + + 09:20 + 00:05 + Greetings from Gruppo FOS + https://www.sfscon.it/talks/greetings-from-gruppo-fos/ + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Giorgio Allasia + + 1 + 1 + + + 09:25 + 00:05 + Greetings from Telmekom + https://www.sfscon.it/talks/greetings-from-telmekom/ + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Sergio Vemic + + 1 + 1 + + + 09:30 + 00:30 + Keynote speaker &#8211; coming soon + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Emily Omier + + 0 + 0 + + + 10:00 + 00:15 + European SFS Award 2024 + + Free Software Foundation Europe (FSFE) and Linux User Group Bozen-Bolzano-Bulsan assign the “European SFS Award” + Free Software Foundation Europe (FSFE) and Linux User Group Bozen-Bolzano-Bulsan assign the “European SFS Award” + <p>The award is given to a person who contributed to the introduction of the culture of Free Software.</p> + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + 0 + 0 + + + 10:15 + 00:15 + SFS Award 2024 + + Linux User Group Bozen-Bolzano-Bulsan assigns the “South Tyrol Free Software Award” + Linux User Group Bozen-Bolzano-Bulsan assigns the “South Tyrol Free Software Award” + <p>Every year the Linux User Group Bozen-Bolzano-Bulsan assigns the &#8220;South Tyrol Free Software Award&#8221; (SFS Award). The award is given to a person who contributed to the introduction of the culture of Free Software in the Province of Bolzano.</p> + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + 0 + 0 + + + 10:30 + 00:10 + AlmaLinux in brief + https://www.sfscon.it/talks/almalinux-in-brief/ + + <p>In this quick chat, benny will summarize 20 years of context and 4 years of growth in just 10 minutes by highlighting the major points that brought AlmaLinux to the world, how the project has adjusted for each challenge along the way, and what they&#8217;re planning next.</p> + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + benny Vasquez + + 1 + 1 + + + 10:40 + 00:20 + Open Source in EU policy + https://www.sfscon.it/talks/open-source-in-eu-policy/ + + Making laws with the Open Source community in mind + Making laws with the Open Source community in mind + <p>Over the past three years, the Open Source Community has had to mobilise to fix flaws in European Union policy initiatives, like the Cyber Resilience Act, Product Liability Directive, and the AI act, all of which could have negatively impacted Open Source developers.</p> +<p>This talk explores why this mobilisation was necessary, how the Community is preparing for future legislation, and how the Open Source community has changed the way the EU makes and implements laws.</p> +<p>It will then delve into the particular case of the AI act and its Open Source AI exemption. It will cover how the exemption came about, why it has prompted a wave of AI open-washing, and what can be done to fix it.</p> + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Jordan Maris + + 1 + 1 + + + 11:05 + 00:15 + Let’s all get over the CRA! + https://www.sfscon.it/talks/lets-all-get-over-the-cra/ + + how I stopped worrying about the consequences of the CRA for Open Source innovation in Europe and moved to something else + how I stopped worrying about the consequences of the CRA for Open Source innovation in Europe and moved to something else + <p>The adoption of the CRA (Cyber Resilience Act) has caused some real anxiety among the FOSS ecosystem. Even in its amended form, many questions remain opened and debated, and more to the point, a lot of uncertainty still surrounds it, not just at the level of its general architecture but also at the implementation level.<br /> +It is perhaps fair to mention that the CRA itself does not exist in a void and is building on already existing regulations and ideas. However, it should be explained how the CRA itself was not born inside the institutions of the European Union but is an almost pure product of governmental cyber security circles and agencies. Because of that, the digital ecosystem at large is at pain understanding some of its logic. This talk will start with what we know and what we can infer from the CRA, and how it fits within the general regulatory framework of the European Union. We will thus clarify the following points:</p> +<p>&#8211; what does the CRA mean in terms of software security assessment and certification &#8211; and how that plays a key role in understanding what the CRA is and what it is not<br /> +&#8211; CRA within the European regulatory framework<br /> +&#8211; CRA implementation: the bad, the ugly, and the unknown</p> +<p>We will then discuss what the concerns are for the FOSS communities. Most notably:</p> +<p>&#8211; barriers of entry for Free Software companies, esp. the small and medium ones<br /> +&#8211; legal inability to develop Free and Open Source Software<br /> +&#8211; what will Free and Open Source software foundations do in edge cases and what are they expected to bring in terms of guidance to the companies contributing to their projects</p> +<p>It will then discuss how we can best prepare for it, and make some suggestions on how to solve FOSS specific challenges related to CRA. In particular the talk will explore the following possibilities:</p> +<p>&#8211; evolving the role or cross project security teams<br /> +-promoting best practices in development (CI CD, code auditability) turning the CRA against proprietary software practices<br /> +&#8211; Pooling security audits<br /> +&#8211; Better release management</p> +<p>Last but not least, this talk will discuss the economics behind the CRA and why this may not end up being less of a problem than we think.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Charles-H. Schulz + + 1 + 1 + + + 11:21 + 00:15 + On the ethical challenges raised by robots powered by Artificial Intelligence + https://www.sfscon.it/talks/on-the-ethical-challenges-raised-by-robots-powered-by-artificial-intelligence/ + + <p>The integration of generative AI into robot systems has the potential to boost several industries by enabling robots to understand their environments, create courses of action, and autonomously react to complex situations. However, the adoption of generative AI techniques brings about profound ethical concerns that need to be addressed to ensure the responsible development and deployment of such technologies. In this talk, I will explore the multifaceted ethical challenges associated with generative AI-powered robots, focusing on issues such as robot autonomy, decision-making, accountability of robot actions, and their impact on humans and society as a whole.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Fulvio Mastrogiovanni + + 1 + 1 + + + 11:40 + 00:15 + CRA & PLD Liability rules and Software Freedom + https://www.sfscon.it/talks/cra-pld-liability-rules-and-software-freedom/ + + <p>With CRA and PLD liability rules for software have been introduced with a broad exception for Free Software. After long and intense debates individual developers and non for profit work are safeguarded. I will shed light on those new rules.</p> +<p>Already at an early stage, the FSFE argued in a hearing in the EU Parliament, for the inclusion of clear and precise exemptions for Free Software development in the legislation and for liability to be transferred to those who significantly financially benefit from it on the market.</p> +<p>In the future, individual developers and non-profit development of Free Software will be exempt from the CRA and the PLD. Nevertheless, the wording in both the regulations are different and a standardisation processes and guidelines are still being drawn up.</p> +<p>In this talk I will discuss what this new regulation means for software freedom in future and what happens at this stage and how to be involved in implementation.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Alexander Sander + + 1 + 1 + + + 12:00 + 00:15 + Cyber Resilience Act, already too late to comply? + https://www.sfscon.it/talks/cyber-resilience-act-already-too-late-to-comply/ + + Compliance is dead, long live compliance + Compliance is dead, long live compliance + <p>If you are taking your decisions now for complying with all the requirements of CRA, you might be too late to find adequate external resources to comply , although &#8212; at submission time &#8212; it is not yet in force. So what are you gonna do? Being open source would help only to a certain point, if you monetize the software. Some guidance tips for Open Source projects and businesses.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Carlo Piana + Alberto Pianon + + 1 + 1 + + + 12:20 + 00:15 + AI no-code for marketing + https://www.sfscon.it/talks/ai-no-code-for-marketing/ + + How artificial intelligence can really help create a marketing strategy + How artificial intelligence can really help create a marketing strategy + <p>The process of creating a Marketing strategy and the subsequent steps of drafting editorial calendars, selecting channels, designing, and publishing advertising campaigns, is a complex journey.<br /> +Marketers have always dedicated a lot of time and resources to creating the most effective strategy for a brand’s success and translating it into concrete actions.<br /> +Today, is it possible to use artificial intelligence as a tangible support for the development of the strategic, technical, and operational assets necessary to create a successful marketing plan?<br /> +Let’s discover ATENA together, a methodology and an easy process through which you can simplify, accelerate, and enhance the quality of your marketing strategy, thanks to the practical support of AI.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Alessandro Agnati + + 1 + 1 + + + 12:40 + 00:15 + We went to court against Apple &#8211; a case for Software Freedom + https://www.sfscon.it/talks/for-the-right-of-general-purpose-computers/ + + Breaking lock-ins over devices with Free Software + Breaking lock-ins over devices with Free Software + <p>Our smartphones, tablets, laptops, and other connected devices are general purpose computers. That means we can potentially run any software we want to make full use of the hardware. This potential is fostered by Free Software.</p> +<p>However, device manufacturers, vendors, and internet platforms have been restricting software freedom by exercising their monopolistic control over end-user equipment. This power is used over key features and components of devices such as operating systems, browsers, and app stores.</p> +<p>Basic freedoms such as installing and uninstalling software are being unfairly limited by these companies, commonly referred to as &#8220;gatekeepers&#8221;, because of their monopolistic control over devices.</p> +<p>As a concrete example, this talk will present the policy and legal work of FSFE in denouncing the detrimental commercial practices of a worldwide known gatekeeper: Apple.</p> +<p>Apple&#8217;s monopolistic power over its devices is detrimental to Free Software and a high risk for the right of general purpose computers. The company&#8217;s &#8220;notarization&#8221;, its barriers to software freedom and lack of interoperability are highly negative to Free Software.</p> +<p>In conclusion, this talk will present Device Neutrality as a policy solution to enable end-users to bypass gatekeepers in order to run Free Software independently of the control exercised by hardware manufacturers, vendors, and platforms. Device Neutrality can enable end&#8211;users to regain control over their devices.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Lucas Lasota + + 1 + 1 + + + 13:00 + 00:15 + 25 Years of Copyleft Enforcement: The Road Ahead for Defending Software Rights + https://www.sfscon.it/talks/25-years-of-copyleft-enforcement-the-road-ahead-for-defending-software-rights/ + + <p>In 1999, I worked my first GPL enforcement matter: a large storage had made proprietary modifications to GNU tar and failed to release the complete, corresponding source code to its customers. In early 2000, I did my first “CCS check” (complete, corresponding sourcecode check) — wherein one attempts to build the “CCS candidate” provided by the vendor to investigate whether the CCS candidate is actually complete, and whether it corresponds to the binaries that were distributed.</p> +<p>In those days, violations of copyleft licenses were rare, and once uncovered, companies eventually corrected their behavior. Yet, even then, it took years of work to convince the company to comply. And often, by the time compliance was achieved, a new generation of the product was released.</p> +<p>25 years later, we face the same problems with nearly every vendor.<br /> +Almost every product on the market today contains Linux, BusyBox, the GNU C Library, GNU Bash, and dozen other packages licensed under the GPL and/or LGPL. Almost none of these companies, even if an offer for source code is made, provide CCS.</p> +<p>This talk will look both to the past and future as we investigate software rights and freedoms of the average consumer, and how we reached this difficult situation. Attendees can learn the history of copyleft and its enforcement, and leave with an understanding of how much work remains and what individuals can do to make a real impact on the rights of users under copyleft.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Bradley Kuhn + + 1 + 1 + + + 13:20 + 00:15 + SPDXv3: Advancing Transparency in Software + https://www.sfscon.it/talks/spdxv3-advancing-transparency-in-software/ + + A newly released standard for complete information + A newly released standard for complete information + <p>SBOMs are a crucial tool for understanding the composition of software, which is particularly important in the context of managing security risks and licensing compliance. Recent regulatory efforts from, among others, the US and the EU, explicitly move towards requiring SBOM for each software delivery.<br /> +SPDX (System Package Data Exchange) is a freely available ISO standard that provides a set of specifications for communicating SBOM information. It offers a common format for companies and organizations to share important data accurately and efficiently.</p> +<p>This presentation will delve into the details of the newly released version of SPDX, providing a comprehensive understanding of their importance in the software industry.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Alexios Zavras + + 1 + 1 + + + 13:40 + 00:15 + (re)classifying FOSS licenses + https://www.sfscon.it/talks/reclassifying-foss-licenses/ + + New strategy for classifying licenses in a better way + New strategy for classifying licenses in a better way + <p>There are many efforts trying to classify licenses, for different use cases such as checking compatibility or for complying with the license terms. Most of these efforts seem to, explicitly or implicitly, have a certain use case in mind.</p> +<p>This project sets out to:<br /> +Consider provisioning case &#8211; how is the software provided to your user (e.g. binary distribution, SaaS, Web UI)<br /> +Consider use case &#8211; how is the software used (e.g. compiler, library)<br /> +Trust model &#8211; why should you trust the contributor of a classification or you should be able to exclude a contributor’s work etc<br /> +Identify and generalize FOSS license clauses<br /> +Identify and generalize when a clauses is triggered<br /> +Determine how clauses are compatible with each other (a license clause matrix)<br /> +Identify the clauses and triggers for each license</p> +<p>Keeping track of how 100 licenses are compatible with each other will result in a matrix with 10 000 (100 x 100) values. This is hard to maintain. Extending to 200 licenses requires 40 000 values. By instead looking at the license clauses we will end up with a much smaller problem, assuming we identify 20-30 of them, which will result in a matrix of 400-900 values. This is big, but maintainable. Adding a new license will not increase the size of the (license clause) matrix, which means that our approach scales much better. From the license definitions and license clause matrix we can compile a license compatibility matrix (for fast compatibility lookup).</p> +<p>This project sets out to provide to users:<br /> +A license obligation checklist for each provisioning case &#8211; for making compliance checks easy<br /> +A license compatibility matrix for each provisioning case &#8211; for fast compatibility lookup</p> +<p>All data and source code will be released under FOSS licenses.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Henrik Sandklef + + 1 + 1 + + + 14:00 + 00:15 + Lessons from the EU&#8217;s Next Generation Internet Initiatives + https://www.sfscon.it/talks/lessons-from-the-eus-next-generation-internet-initiatives/ + + What We've Learnt From Looking At 500 Free Software Projects + What We've Learnt From Looking At 500 Free Software Projects + <p>The FSFE is a consortium member of the EU&#8217;s Next Generation Internet initiatives (https://fsfe.org/activities/ngi/ngi.en.html). As part of our work there over the past 6 years, we have looked at hundreds of participating Free Software projects, to assist them with their legal and licensing questions, as well as to help them become REUSE compliant.</p> +<p>This talk will speak about some simple trends in Free Software legal and licensing that we&#8217;ve observed over the years in independent Free Software projects and their developers, and how these affect aspects of the Free Software ecosystem.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Gabriel Ku Wei Bin + + 1 + 1 + + + 14:20 + 00:15 + The ZOOOM project: final results and future outlooks + https://www.sfscon.it/talks/the-zooom-project-final-results-and-future-outlooks/ + + <p>The ZOOOM project, concluding in Sept 2024, aimed to raise awareness about the role of open licenses (open source software, open hardware, and open data &#8211; 3Os) in intellectual property valorization. In this talk, we&#8217;ll summarize key results, share recommendations for businesses leveraging 3Os, and demonstrate tools developed to aid knowledge generators and supporting organizations in navigating the legal and business implications of 3Os. Additionally, we&#8217;ll discuss the future of ZOOOM and its potential impact on the industry and research.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Elisa Morganti + + 1 + 1 + + + 14:40 + 00:15 + AI Law & Ethics: developing responsible AI systems + https://www.sfscon.it/talks/ai-law-ethics-developing-responsible-ai-systems/ + + <p>The aim of this talk is to explore AI law and ethics in developing responsible AI systems. It covers the forthcoming AI Act and EU regulations, focusing on accountability, risk management, and privacy-by-design. Through use cases, it shows how developers can ensure AI transparency, fairness, and compliance, balancing innovation with ethics. Attendees will gain insights for creating sustainable, ethical AI solutions.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Federico Sartore + Francesco Vadori + + 1 + 1 + + + 15:00 + 00:15 + Impact and Innovation: The Crucial Role of OSPOs in Shaping a More Sustainable Capitalism + https://www.sfscon.it/talks/impact-and-innovation-the-crucial-role-of-ospos-in-shaping-a-more-sustainable-capitalism/ + + <p>In an era where sustainability and responsible innovation are not just valued but expected, Open Source Program Offices (OSPOs) stand at the forefront of a transformative wave that merges open innovation with sustainable business practices. This session explores the pivotal role of OSPOs in fostering open innovation environments that not only drive technological advancement but also align with the principles of impact-oriented capitalism</p> +<p>We will delve into how OSPOs can leverage open source ecosystems to catalyze change within their organizations, promoting not just compliance and security but also environmental, social, and governance (ESG) goals. Through case studies and practical insights, attendees will learn how integrating OSPO strategies with corporate sustainability objectives can create a powerful synergy that propels companies toward a more ethical and profitable future.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Stefano Pampaloni + + 1 + 1 + + + 15:20 + 00:15 + From Personalized to Programmed + https://www.sfscon.it/talks/from-personalized-to-programmed/ + + The Dilemma of AI Customization + The Dilemma of AI Customization + <p>When considering the core values of mass customization, such as individual expression, fun in co-creating, and creativity, AI may introduce disadvantages, potentially leading to the homogenization of experiences. This lightning talk aims to explore the potential risks and drawbacks of utilizing AI in mass customization, highlighting the tension between leveraging technology for customization and preserving the unique human elements that form the foundation of personalized experiences. Could the reliance on algorithms diminish the consumer’s role in the creative process? If so, it might challenge the essence of what makes mass customization truly unique and innovative.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Thomas Aichner + + 1 + 1 + + + 15:40 + 00:15 + Fostering Innovation in IT Businesses through Open Source Software Involvement + https://www.sfscon.it/talks/fostering-innovation-in-it-businesses-through-open-source-software-involvement/ + + <p>All IT companies depend on free and open source software to some extent. Once they reach a certain size, they spontaneously become supporters of the projects on which they base their business. This happens because of first order consequences: my business depends on it, if I help it strive, my business will benefit.<br /> +In this talk, we will address the second-order consequences of software engineers interacting with open source projects, and show why dedicating internal resources to this activity is an effective strategy for enabling the discovery of new or modified (software) entities, which is the prerequisite for innovation.<br /> +The benefits are visible for companies of any size, even if their business does not depend on a specific project to which they could contribute: compelling arguments will be presented to motivate business owners to encourage their IT staff to engage in open source activities (and to developers to convince their bosses).</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Daniele Gobbetti + + 1 + 1 + + + 16:00 + 00:15 + Tackling Openwashers, Freeloaders and Cuckoos + https://www.sfscon.it/talks/tackling-openwashers-freeloaders-and-cuckoos/ + + How to safeguard the Free Software market against unfair competition + How to safeguard the Free Software market against unfair competition + <p>Companies that produce and sell Free Software face a problem: some competitors use unethical and destructive means to compete, making their products cheaper and winning bids. This kind of market behaviour is increasingly becoming a problem for Free Software producers.</p> +<p>Destructive practices include marketing proprietary software under the guise of being Free Software, whether by using free/open wording, by introducing new licences that falsely appear to be free, or by imposing additional barriers that make it more difficult to use the freedoms offered by Free Software.</p> +<p>Other competitors sell Free Software products without contributing to their development and maintenance, profiting from the work of others but giving nothing back to the community. This allows them to offer low prices while raising the costs of maintenance for the original manufacturers. For some players, there seems to be no limit to their creativity when it comes to undercutting competitors and winning bids.</p> +<p>The Free Software Foundation Europe has been analysing these and other problematic market practices over the last few years. In this talk we will take a closer look at them and show why they harm Free Software manufacturers and the Free Software ecosystem. We will then discuss ways to limit the success of such practices.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Johannes Näder + + 1 + 1 + + + 16:20 + 00:15 + Web Accessibility is actually well-forgotten old + https://www.sfscon.it/talks/web-accessibility-is-actually-well-forgotten-old/ + + <p>Trends are cyclical, even in the tech world. A few years ago, everyone was talking about D&amp;I in the workplace. This season, web accessibility absolutely occupies the first lines of code. How is it shown? Let&#8217;s talk about it &#8211; many do not understand how to implement it in their project.</p> +<p>First, relax. This is a really complex topic that requires not only a well-created website, but also communication with real users who cannot fully use the Internet, for example, without a screen reader.</p> +<p>A checklist that will convince you to try implementing WA into your application:</p> +<p>◦ What can be adapted for WA?<br /> +◦ How is WA testing done?<br /> +◦ How to use AI in WA?</p> +<p>If we haven&#8217;t convinced you, then look at WA from the point of view of strengthening your personal brand in the market.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Sofia Etingof + Juri Solovjov + + 1 + 1 + + + 16:40 + 00:15 + LibreOffice as JavaScript idiomatic WebWidget + Library + https://www.sfscon.it/talks/libreoffice-as-javascript-idiomatic-webwidget-library/ + + Making LibreOffice a native part of the web, using FOSS for highly customizable office document handling in the browser, based on WASM. + Making LibreOffice a native part of the web, using FOSS for highly customizable office document handling in the browser, based on WASM. + <p>LibreOffice can be highly integrated into desktop and server applications and we wanted to make this also possible for web apps. Running fully client side with Web Assembly, LibreOffice can now be used and customized by a JavaScript idiomatic API, becoming an easy usable component for web development. With this Free Software opens the door to a completely different approach for bringing office document handling into the browser, then from what&#8217;s known from Google Docs and Co.. Use cases may be the integration of widgets with rich text documents, including classic desktop macros, into browser based applications or enabling JavaScript to interact live with values in spreadsheets. But LibreOffice can also work as background WASM library, converting documents from and to all supported formats like ODF (ODT, &#8230;), MS formats (DocX, XlsX, Doc, &#8230;), PDF or HTML, while applying custom conversion filters for things like macro sanitization.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Moritz Duge + + 1 + 1 + + + 17:00 + 00:15 + Using software tools and AI to audit e-commerce food regulations + https://www.sfscon.it/talks/using-software-tools-and-ai-to-audit-e-commerce-food-regulations/ + + <p>Selling food products on a website or e-commerce platform in Italy is subject to the Food Information of Consumers (FIC) regulations. These regulations dictate mandatory information that must be communicated on the product page, with fines for non-compliance. In this talk, we will cover the key guidelines and legal requirements, and demonstrate how we can use software tools and artificial intelligence to check large quantities of product listings for discrepancies. Join us to learn how to streamline the process of verifying food information and enhance consumer trust.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Davide Montesin + + 1 + 1 + + + 17:20 + 00:15 + Tag manager + https://www.sfscon.it/talks/tag-manager/ + + <p>Presentation of our tool, which is an free alternative to Google Tag Manager and also helps manage cookie banners.</p> +<p>Features:<br /> +&#8211; code injector<br /> +&#8211; code templating<br /> +&#8211; cookie banner manger</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Sandro Antonucci + + 1 + 1 + + + 17:40 + 00:15 + State of Microsoft Windows Refund (2024) + https://www.sfscon.it/talks/state-of-microsoft-windows-refund-2024/ + + Getting a Refund of your Microsoft Windows License - present and future + Getting a Refund of your Microsoft Windows License - present and future + <p>If you are a lover of the Free Software movement you probably already tried something else than Microsoft Windows on a computer.</p> +<p>What you may not know, is that computer resellers usually charge end-users with the Fee of the Microsoft Windows License, even before you accept the Microsoft Terms of Services, and even if you completely want to uninstall Windows from your computer.</p> +<p>This is a critical Tech Neutrality issue that fuels non-European proprietary software houses. What to do?</p> +<p>&#8211; heritage of Luca Bonissi against Big Tech(s)<br /> +&#8211; current status and problems<br /> +&#8211; opportunities in Europe, and partnership between Free Software Foundation Europe and Italian Linux Society.</p> +<p>Thanksgiving to community members who tried the procedure, and simplifying that procedure.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Valerio Bozzolan + + 1 + 1 + + + + + 10:30 + 00:30 + Ada & Zangemann + + Side Event - School Reading + Side Event - School Reading + Side Event,School Reading + 0 + 0 + + + + + 11:00 + 00:15 + Open Access for Museum Collections and Research + https://www.sfscon.it/talks/open-access-for-museum-collections-and-research/ + + <p>The digital era has revolutionised the way we access information and interact with it. Museums, as custodians of cultural and historical artefacts, can benefit substantially from this transformation. Open Access and FOSS can greatly increase the potential of museums for public outreach: enhance their educational impact and inspire new forms of cultural engagement and knowledge discovery. For example, by digitising collections and enabling Open Access for diverse audiences, accessibility barriers are eliminated and thousands of hidden treasures become available to both researchers and the wider public. Additionally, innovative data visualisations via FOSS platforms can reveal compelling insights into object collections and the research associated with them; Open Access can thus make complex research accessible and engaging to a broader audience. Through such practices, museums can democratise their activities and enrich the visitor experience. The process is not without obstacles; common challenges museums face in adopting Open Access policies are copyright issues, data privacy, and resource limitations.</p> +<p>The presentation will discuss the aforementioned opportunities and issues currently emerging in the museum sector. The talk will be illustrated with examples from the Deutsches Museum in Munich, the world’s largest museum of science and technology.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Artemis Yagou + + 1 + 1 + + + 11:20 + 00:15 + Journeying through Data Spaces – New Path to Interoperability? + https://www.sfscon.it/talks/journeying-through-data-spaces-new-path-to-interoperability/ + + <p>Data spaces play a pivotal role in advancing digitalisation and interoperability within and across different business domains, both on a national level and cross-borders. However, it&#8217;s not a new concept since its roots date back to 2005. The definition has evolved over the years and today it covers all four layers of interoperability defined by the European Interoperability Framework (EIF).</p> +<p>Today, the term data space has several different definitions depending on whom you ask. Also, multiple international initiatives are working on data spaces to create common governance models, specifications, reference implementations, etc. The aim of this talk is to discuss the data space concept, different actors working on data spaces and their roles and responsibilities, and available specifications and building blocks.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Petteri Kivimäki + + 1 + 1 + + + 11:40 + 00:15 + DOOF – an Open Source Orchestration Framework for Decentralized Consent Management + https://www.sfscon.it/talks/doof-an-open-source-orchestration-framework-for-decentralized-consent-management/ + + <p>DOOF stands for Data Ownership Orchestration Framework. It is a framework developed for NGI Trustchain Project within a broader Next Generation Internet scheme of the EU in order to address a lack of decentralization in consent management regarding users’ sharing of their data. The aim of DOOF is to revolutionize personal data governance and normalise the deployment of consent management and privacy enhancing technologies. It uniquely enables individuals to control their rights over data sharing, fostering greater trust and regulatory compliance, essential for building a resilient and transparent data economy.<br /> +DOOF targets the gap in current centralized consent management, where GDPR and Data Act demand seamless data exchange and regulatory compliance. Yet the sharing and consent management regarding users’ data is centralized &#8211; a responsibility of the data intermediary &#8211; which comes with great costs and liabilities.<br /> +With DOOF, Ecosteer aims to separate and decouple the layer of physical data transferring from the layer of consent management. DOOF offers companies a framework that allows them to easily adopt Privacy Enhancing Technologies (PETs) for the actual sharing of data and enforcement of users’ decisions.<br /> +The framework consists of a set of SDKs, libraries and a Smart Contract for decentralised consent management. The main component of the framework is a worker pipeline, consisting of extensible, plug-in processors. This pipeline contributes to the low-code movement, offering a framework that can be easily adapted to different business needs. Companies can easily build verticals on this existing framework by just extending some of its functionalities.<br /> +This talk will focus on the concept of decentralized consent management as well as pipeline-based orchestration framework, outlining the process of creating a novel, re-usable and extensible open-source project.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Georgiana Bud + + 1 + 1 + + + 12:00 + 00:15 + Accelerating territory&#8217;s development through Open Data + https://www.sfscon.it/talks/accelerating-territorys-development-through-open-data/ + + Open Data Hub and south tyrolean examples + Open Data Hub and south tyrolean examples + <p>In recent years, Open Data has revolutionized the way governments, companies and individuals access and use information. The openness of public and private data represents a milestone on the path towards a more transparent, participatory and competitive society.<br /> +Open Data represent a resource for society and businesses and contribute to the development of a territory. This added value manifests itself in various forms, including transparency and democratic participation, technological innovation, economic development and improved services.<br /> +The talk will focus on specific case studies from the Open Data Hub in the Autonomous Province of Bolzano, a region which has shown a strong commitment to the adoption and promotion of Open Data.<br /> +Through the analysis of these cases, the aim is to demonstrate how the initiatives based on Open Data have led to concrete and tangible results, offering useful and applicable insights also in extra-regional contexts.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Luisa Marangon + + 1 + 1 + + + 12:20 + 00:15 + Sensor Things API QGIS core provider + https://www.sfscon.it/talks/sensor-things-api-qgis-core-provider/ + + <p>Sensor Things API (STA, in short), is an OGC specification for storing and retrieving (timeseries of) Sensor Observations.</p> +<p>FROST-Server, developed by Fraunhofer IOSB, is one of the most consolidated implementations of STA with a very detailed documentation and a lot of background information. The implementation includes a REST endpoint to insert, modify and retrieve STA entities with a query language based on OASIS Odata URL patterns and query options.</p> +<p>A QGIS experimental plugin, developed by Deda Next srl in 2022 and implemented in python within the EU project Air-Break, is currently available to connect to STA-compliant endpoints and retrieve sensor data (e.g. European Air Quality data from this endpoint). The plugin has an embedded data provider which is currently designed to retrieve sensors&#8217; locations as geometrical features and then request the time series of observations for specific locations.</p> +<p>However, in order to offer support to a wider range of use cases and more complex queries on STA model entities, Faunalia and DedaNext (funded by BRGM) started to plan for a dedicated STA data provider for GIS: a development group was set up involving the QGIS community, formal acceptance of the proposal was sought within the QGIS community (QEP #257) and possible development options for the provider (ex: python vs C++) were analyzed. As STA is an OGC standard, it seemed appropriate to implement it in C++ as a core element of QGIS.</p> +<p>Development has therefore been carried out in close interaction with the QGIS developer community with the focus on supporting complex STA queries, implementing among other things:</p> +<p>&#8211; expansion of relations among model entities;<br /> +&#8211; independent attribute filtering and sorting on all entities;<br /> +&#8211; efficient data caching to limit unnecessary data transfers;</p> +<p>This new core element is available from QGIS version 3.37 (currently only available as nightly release).</p> +<p>Finally, plans are underway to develop a new version of the QGIS STA plugin (originally developed by Deda Next within project AirBreak) focused on data exploration and analysis that will be able to leverage on the newly released core STA data provider to support a wider range of use cases, such as:</p> +<p>&#8211; Time series analysis: This is the case of the old STA plugin. Fetch Locations, show them on the map. Then, upon selection of one location, fetch all related Things and Datastreams, and finally, fetch the Observations of the desired Datastream to be shown in a table or plot;<br /> +&#8211; Space-time series analysis: Given a selected set of Datastreams from a moving sensor, get all the FeaturesOfInterest of those Datastreams and plot them on the map, so to have a view of the path of the moving sensor and a hold on its values on every part of that path;<br /> +&#8211; Monitoring and inspection: Fetch all the latest observations of all Datastreams (or a selection based on the ObservedProperty) and show these at their Locations, styled by the result of the latest Observation of a given ObservedProperty. Then, in a second phase (eg. if a value is over a threshold), inspect the full timeseries of that one Datastream.<br /> +&#8211; Tracking of moving things: Show all Things with their current Location and their HistoricalLocations with the Temporal Controller (time slider).</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Matteo Ghetta + Luca Giovannini + + 1 + 1 + + + 12:40 + 00:15 + EO4MULTIHAZARDS Web Application + https://www.sfscon.it/talks/eo4multihazards-web-application/ + + <p>The EO4MULTIHA project (https://eo4multihazards.gmv.com/), funded by the European Space Agency, aims at developing an open database gathering and harmonizing event information coming from already existing event databases to support multi-hazard(-risk) research.<br /> +To pursue this aim, this project which has been developed in the EURAC research, Center for Sensing Solutions, presents a comprehensive web application designed to analyze and visualize multi-hazard events, developed using Django and PostgreSQL. Leveraging the strengths of open-source technologies, the application provides a robust platform for researchers, policymakers, and the public to access and understand the complexities of multi-hazard scenarios. The main parts of this web application is explained in the following paragraphs:</p> +<p>(i) The core of the application is built with Django, a high-level Python web framework known for its rapid development capabilities and clean, pragmatic design. PostgreSQL, a powerful and scalable open-source relational database system, ensures efficient data storage and management. Together, these technologies offer a reliable and flexible foundation for handling diverse and large datasets.</p> +<p>(ii) To visualize the events, Leaflet Map which is an open source contributor to the OpenStreet Map has been used.</p> +<p>(iii) To populate the database, the application exploits various RESTful APIs, integrating data from multiple sources, including satellite imagery, climatological records, in-situ measurements, and relevant statistical data. This multi-source approach allows for a comprehensive characterization of risks, exposures, and susceptibilities associated with multi-hazard events benefiting from the Open Data Standards such as OGC Standard.</p> +<p>(iiii)Key features of the application include spatial and temporal filtering of events, cross-linking of data sets for enhanced reusability, and compliance with open standards such as RESTful APIs and OGC standards. The platform is designed to be expandable, with the potential to incorporate additional locations and datasets in the future.</p> +<p>By providing an accessible online platform, this web application aims to support the understanding and analysis of multi-hazard events, facilitating informed decision-making and effective disaster management strategies. The use of open-source technologies and the integration of diverse data sources underscore the project&#8217;s commitment to innovation, scalability, and community-driven development.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Mahtab Niknahad + + 1 + 1 + + + 13:00 + 00:15 + BASIC CORE South Tyrol + https://www.sfscon.it/talks/basic-core-south-tyrol/ + + A project to solve the topographical complexity of the National Spatial Data Catalogue + A project to solve the topographical complexity of the National Spatial Data Catalogue + <p>The project has its roots in a precise and simplified cartographic updating methodology introduced by the Consortium of Municipalities of the Province of Bolzano in the early 2000s. This methodology, which was consolidated over the years, could no longer be applied following the adoption of the Territorial Data Catalogue (Ministerial Decree 10.11.2011 &#8220;Technical rules for defining the content specifications of geotopographic databases&#8221; and subsequent amendments) due to the complexity and articulation of the new national model. The primary objective of the project was to research and define a minimum set of information that could adequately describe the territory within the typical use context of the public administration, ensuring its sustainability in terms of the ability to keep it updated and aligned with the transformations of the territory. Simplifying the definition and understanding of the basic technical layer that every public administration producing geographic data must guarantee within their institutional activities for geotopographic databases is a fundamental step to adequately support territorial management. Lightened of the informational content already managed by the Provincial Administration within archives or sectoral Information Systems, and consequently already included in existing and consolidated maintenance and updating flows, as well as everything that can be considered three-dimensional data nowadays obtainable through faster and more accurate systems, the Basic Core (BC) specification was produced by reorganizing and simplifying the information levels contained in the National Territorial Data Catalogue with reference to the identified minimum subset of required information known as the National Core (NC). To make it practically usable, only the themes considered objectively useful and easily updatable were included in the Basic Core. Our presentation will outline the key points that enabled the design of the Basic Core content specification and illustrates the technological tools developed, as well as the automatic transformation and simplification procedures that led to the significant reduction in the number of object classes provided by the National Core (from 59 to only 23), demonstrating that the Basic Core project is not a merely theoretical exercise, but a practical and concrete application currently tested and successfully used in South Tyrol. The specifically developed Dashboard for managing, correcting and updating the provincial Geotopographic Database, built on the basis of this new simplified specification, will be explained in detail. This dashboard allows effective operation on every management aspect, including the crucial task of sharing maintenance responsibilities between the Provincial and Municipal levels, thus ensuring the full efficiency of this fundamental geographic base. Particular attention will be given to illustrating the guided editing functionality available directly from the online interface, as well as the options for creating and exporting QGIS projects. QGIS projects are designed to perform the most significant and advanced corrections and/or updates. We will conclude the overview of this innovative system with a demonstration of the processes for reimporting and validating the updated data. Finally, practical cases in which the Basic Core has been used will be presented, as well as future developments, already planned and those still under evaluation, that the system will receive in order to refine and make its use more robust.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Edoardo Scepi + + 1 + 1 + + + 13:20 + 00:15 + Sharing Connects People + https://www.sfscon.it/talks/sharing-connects-people/ + + The experience of Think Open at CIMeC + The experience of Think Open at CIMeC + <p>Think Open is an Open Science initiative born within CIMeC in 2018 whose goal is to build a virtual space within which researchers at the Center can share different kinds of outputs from research, integrating and merging information from different sources and stages of the knowledge-building process. A number of achievements have been made over the years, both from the point of view of training (seminars, hands-on, courses for doctoral students, awards, etc.) and implementation of best practices (code and data sharing, adoption of free-software tools, etc.). Here we will describe how sharing open practices in everyday working routines foster connections between people, creating practice-based communities.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Vittorio Iacovella + + 1 + 1 + + + 13:40 + 00:15 + Hacking your (electric) car: the importance of Open Data + https://www.sfscon.it/talks/hacking-your-electric-car-the-importance-of-open-data/ + + Gathering information from the OBD (On Board Diagnostic) port of your car could be challenging + Gathering information from the OBD (On Board Diagnostic) port of your car could be challenging + <p>Any car has a diagnostic connector from which you can gather and/or set data from the various ECU (Engine Control Unit) that are present in your car, such as odometer, temperatures, motor rotation speed, accelerator depression percentage, wheel angle, lights, and – in an electric car – information about battery, remain energy, charging/discharging power, etc.<br /> +The big challenge is that the meaning of fathered data is usually not known and car manufacturers are reluctant to share this information.<br /> +This talk will illustrate how to scan the available data and make reverse engineering in order to try to create a shared database containing (useful) car data and PIDs (Parameter IDs) from ECUs of your car.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Luca Bonissi + + 1 + 1 + + + 14:00 + 00:15 + The Innovation Paradox + https://www.sfscon.it/talks/the-innovation-paradox/ + + Do you really know how to unleash and manage innovation? + Do you really know how to unleash and manage innovation? + <p>In the era of the Fifth Industrial Revolution, leaders, innovators and pioneers design, generate, and shape future-proof organizations, driven by a meaningful purpose promoting social impacts, combining emerging technologies and new ways of collaborating and conceiving work. While the &#8220;why&#8221; is clear and quite declared by many, the &#8220;what&#8221; to do and the &#8220;how&#8221; to do it remain very nebulous and, in some cases, obscure. Those ones who lead innovation within an organization suffer the innovation paradox: must innovate without knowing what and how. Innovators and pioneers are often alone, without a framework and processes for an open innovation execution. How can we unlock and unleash innovation, ensuring that the actions taken are always driven by what is truly needed to evolve your organization?</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Andrea Solimene + + 1 + 1 + + + 14:20 + 00:15 + The FSFE Italy Project from Understanding to Testing + https://www.sfscon.it/talks/the-fsfe-italy-project-from-understanding-to-testing/ + + How I applied design-thinking to re-design the Italian Free Software Community + How I applied design-thinking to re-design the Italian Free Software Community + <p>The role of Deputy Coordinator Italy within the Free Software Foundation Europe (FSFE) was born in 2022 out of the need of re-establishing the presence of the Foundation on the territory. I designed this three years experimental project together with the <a href="https://freesoftwarelab.noi.bz.it/">Free Software Lab</a> of NOI Techpark with the value proposition of (re)designing the FSFE Italian Community.</p> +<p>The project followed a human centric approach, moving along the five core stages of design-thinking. The goal of my talk is to describe the FSFE Italy project and the design-thinking approach adopted.</p> +<p>The first year (Y1) served as the understanding phase: I got involved as an FSFE representative in the main communication channels used by the Free Software (FS) community on the territory. I conducted interviews with volunteers, associations’ heads and enthusiasts, took part into the main FS events organized on the territory, mapped all stakeholders (understanding-observing) and created my own point of view (POV). By the end of 2022 I had already became an established FSFE representative on the territory, having gathered inputs and ideas on how to kick off the community into year two (Y2). The goal of year two was to build on these new ideas (ideation) and put these thoughts into action (prototyping) by finding common goals and activities with the main FS associations active on the territory and signing Memorandum of Understandings, preparing the ground to test it in the third year (Y3). Guess what was the result?</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Marta Andreoli + + 1 + 1 + + + 14:40 + 00:15 + NGI: No more EU funding for Free Software?! + https://www.sfscon.it/talks/ngi-no-more-eu-funding-for-free-software/ + + <p>During the summer the European Commission made the decision to stop funding Free Software projects within the Next Generation Internet initiative (NGI). This decision results in a loss of €27 million for software freedom. Since 2018, the European Commission has supported the Free Software ecosystem through NGI, that provided funding and technical assistance to Free Software projects. This decision unfortunately exposes a larger issue: that software freedom in the EU needs more stable, long-term financial support. The ease with which this funding was excluded underlines this need.<br /> +This talk shows the urgent need for sustainable, long-term financial support for Free Software to ensure Europe&#8217;s technological independence.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Alexander Sander + + 1 + 1 + + + 15:00 + 00:15 + What the open source community means to me + https://www.sfscon.it/talks/what-the-open-source-community-means-to-me/ + + Some very personal thoughts on why contributing can enrich your life + Some very personal thoughts on why contributing can enrich your life + <p>Everytime I tell my friends about my hobby which noawadays has also become my job, I face lots of questions. A worldwide community? Contributors around the globe? An open source community? What is this all about?</p> +<p>In this talk, I&#8217;d like to share my very personal view about what the open source community means to me, how to grow from user into community member, how the credit of trust helps you to discover your own skills, how to make friends around the world and why it&#8217;s not only fun to get active in a community, but also a big benefit for your whole life that can help you to broaden your mind.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Florian Effenberger + + 1 + 1 + + + 15:20 + 00:15 + A Journey of Contribution and Collaboration in Open Source + https://www.sfscon.it/talks/a-journey-of-contribution-and-collaboration-in-open-source/ + + Why Foundations are Essential + Why Foundations are Essential + <p>Have you ever worked on a project that didn&#8217;t use any open source tools, libraries, or products? Didn&#8217;t think so&#8230;Using open source has been such an integral part of our daily work life that we don&#8217;t even think about it. We just expect it to be available, secure, stable, and bug-free. But how many of you are actually contributing back to an open source project?</p> +<p>This session will go through a couple of the aspects to consider when you are embarking on your open source journey. We will look at different kinds of open source projects, and what the open source foundations bring to the table.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Ivar Grimstad + + 1 + 1 + + + 15:40 + 00:15 + Jakarta EE: Why and how to get involved in Open Source Software? + https://www.sfscon.it/talks/jakarta-ee-why-and-how-to-get-involved-in-open-source-software/ + + <p>In this session you will learn how to become part of an open source community, how to get involved and most importantly why you need to do it! You will learn about the Jakarta EE and its plans for the future, so you can start right away! This presentation will also provide you with key insights into the industry-wide, open source collaboration to modernize Java enterprise systems for cloud-centric use cases.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Tanja Obradovic + + 1 + 1 + + + 16:00 + 00:15 + From Concept to Camp: Project Management Strategies for IT Education Events + + + <p>In today’s fast-paced technological landscape, the need for immersive and hands-on educational experiences is more crucial than ever. &#8220;From Concept to Camp: Project Management Strategies for IT Education Events&#8221; delves into the meticulous process of organizing successful IT camps from a project management perspective.</p> +<p>Join us as we explore the comprehensive journey of bringing an IT camp from initial concept to a fully realized event. We will cover essential project management strategies, including planning, scheduling, resource allocation, risk management, and post-event evaluation. Participants will gain insights into: Defining Objectives and Scope; Budgeting and Resource Management; Team Collaboration and Leadership; Marketing and Participant Recruitment; Logistics and Event Planning; Evaluation and Feedback.</p> +<p>Through real-world examples and practical advice based on the Red Hat Summer Camp Brno project, this talk will equip you with the tools and knowledge needed to transform your vision of an IT camp into a reality.</p> +<p>Whether you’re planning your first event or looking to enhance your current approach, this session will provide valuable takeaways to elevate your project management skills and deliver exceptional educational experiences.</p> + + SFSCON + SFSCON + SFSCON + + Juri Solovjov + Yuliia Kliuchnikova + + 1 + 1 + + + 16:20 + 00:15 + Building the Public Interest Desktop + https://www.sfscon.it/talks/building-the-public-interest-desktop/ + + Our experience organizing GNOME's Sovereign Tech Fund project + Our experience organizing GNOME's Sovereign Tech Fund project + <p>The Sovereign Tech Fund is a new funding program for critical free software infrastructure by the German government. As part of this, members of the GNOME community have been working on fixing important issues across the free desktop stack. This includes security, accessibility, maintainability, hardware support, and more.</p> +<p>In this talk Sonny and Tobias will give an overview of how we organized the project, the work done as part of it, and the massive impact a relatively small amount of public money can have on making the free desktop better.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Tobias Bernard + Sonny Piers + + 1 + 1 + + + 16:40 + 00:15 + Let&#8217;s share our love for Free Software + https://www.sfscon.it/talks/lets-share-our-love-for-free-software/ + + I love Free Software Day 2025 + I love Free Software Day 2025 + <p>We often underestimate the power of a simple Thank You. Free Software contributors do important work for our society and the &#8220;I Love Free Software Day&#8221; on 14 February is the perfect opportunity for you to express your special gratitude. Since 2010, we have celebrated this wonderful annual event with an ever-growing and diverse community. ♥</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Ana Galan + + 1 + 1 + + + 17:00 + 00:15 + MoodleXR: A Next-Generation Open-Source Platform for Immersive Learning + https://www.sfscon.it/talks/moodlexr-a-next-generation-open-source-platform-for-immersive-learning/ + + <p>This project aims to develop a state-of-the-art Learning Management System (LMS) based on Moodle, optimized for delivering Virtual Reality (VR) and Augmented Reality (AR) learning modules.</p> +<p>By leveraging the open-source nature of Moodle and integrating advanced immersive technologies, the project seeks to create an innovative educational platform that transforms traditional learning experiences.</p> +<p>The LMS will incorporate open-source VR/AR tools and libraries, such as A-Frame, AR.js, and Blender, enabling educators to seamlessly integrate and manage immersive content. It will support various VR headsets and AR devices, ensuring broad accessibility. The platform will feature interactive learning modules, robust analytics, and scalable infrastructure, all built on open-source technologies like Kubernetes and Matomo.</p> +<p>Additionally, the project will emphasize accessibility and privacy compliance, utilizing tools like WAVE and Let’s Encrypt.</p> +<p>By fostering a community-driven development model, this LMS will offer a flexible, cost-effective solution that revolutionizes education through experiential learning, making it more engaging, interactive, and effective for students and educators alike.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Luca Bagna + + 1 + 1 + + + 17:20 + 00:15 + Implementing digital examinations in free software systems + https://www.sfscon.it/talks/implementing-digital-examinations-in-free-software-systems/ + + <p>In Finnish upper secondary schools course and final exams have been digital for some years now. Ordinary student laptops are routinely booted from USB flash drives to a special operating system, which provides a restricted environment allowing students to take an exam with no distractions or tools to cheat. Up to these days, this was implemented with Debian GNU/Linux, also meaning that student laptops must be Linux-compatible.</p> +<p>This is now changing. Not every modern laptop can simply boot from a USB drive to run Linux, these including chromebooks, Apple laptops and some new Windows laptops. Some schools may want to buy these devices and do not want a separate set of computers only for examinations. The current system is being replaced by an exam application, meant to run on different operating systems, which are to provide guarantees that no cheating can occur. The exam application activates the &#8220;assessment mode&#8221;, provided by operating system vendors, and this mode should provide a safe place where no cheating can occur, even on computers owned by the students.</p> +<p>Does that even make sense? Can that really be done, and with free software? In this presentation we take a peek at some technologies in Linux systems that can be used to secure a computer against an attacker with a physical access to the machine. We will also look at possible ways to implement an &#8220;assessment mode&#8221; in Linux desktops.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Juha Erkkilä + + 1 + 1 + + + 17:40 + 00:15 + Let’s spark children’s interest in coding + https://www.sfscon.it/talks/lets-spark-childrens-interest-in-coding/ + + Our experiences and how you can contribute + Our experiences and how you can contribute + <p>Today it is impossible to imagine daily life without software. The majority of us can&#8217;t spend a single day without using it. People use software in the workplace, on laptops, and on mobile phones. Software is also found in less obvious places however: in trains, cars, televisions, washing-machines, fridges, and many other devices. None of these devices could function without software. Without software we couldn&#8217;t write e-mails, make phone calls, go shopping, or travel as we are accustomed to. Software is our society&#8217;s central tool. How do we ensure that the next generation is motivated and capable of shaping technology for society&#8217;s benefits?</p> +<p>The Free Software Foundation Europe&#8217;s volunteers and staff have interacted with over 1700 children between 6 to 10 years in the past months. Children, especially girls, afterwards were motivated to start experimenting with hardware and software. In the discussions we saw that they realise how crucial technology will be for them. Furthermore with the FSFE&#8217;s coding competition &#8220;Youth Hacking 4 Freedom&#8221; we gathered experiences working with teenagers who program, tinker, and have fun with software.</p> +<p>Learn more about the experiences how the FSFE sparks children&#8217;s and teenagers interest to tinker, experiment and program. Furthermore you will see how fulfilling those activities can be for yourself.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Matthias Kirschner + + 1 + 1 + + + + + 11:00 + 00:15 + Open-source silicon chips + https://www.sfscon.it/talks/open-source-silicon-chips/ + + <p>We have all heard that there is &#8216;Intel inside&#8217;, but what is inside Intel? Almost all integrated circuits today are literally black boxes. They may contain unwanted or malicious features and, most importantly, they do not encourage reuse, nor do they allow it. The two main causes of such secrecy are: 1. standard design tools explicitly forbid the publication of any output, and 2. most foundries disallow disclosing technology details. Designers moreover face additional problems: The licence cost of standard design tools is unaffordable for most SMEs (unless questionable discount policies are applied), and lock-in threats arise at many levels, from IP blocks to foundry details to file formats. Yet exceptional progress has been made in recent years: Hundreds of silicon chips have been designed using free and open-source tools, and three foundries have made details of their processes public: The doors to free silicon are open! Hence how is politics reacting? What are the next steps to be taken? What are the opportunities for users, society and companies?</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Luca Alloatti + + 1 + 1 + + + 11:20 + 00:15 + Opt out? Opt in? Opt Green! Bringing Free Software To Eco-Consumers + https://www.sfscon.it/talks/opt-out-opt-in-opt-green-bringing-free-software-to-eco-consumers/ + + <p>Free Software gives consumers what they want, but many don&#8217;t know it &#8230; yet! We aim to change that by reaching out directly to eco-consumers in the &#8220;Opt Green&#8221; project, a new KDE Eco initiative funded by the German Environmental Agency.</p> +<p>Consumers want sustainable software: in a recent European poll 50% of respondents say the two primary reasons they purchase a new device are non-functioning software and software performance issues. This is as good a time as ever for an &#8220;Opt Green&#8221; message. In the next couple of years Windows 10 end-of-life and the phasing out of Intel-based macOS support will make e-waste out of hundreds of millions of computers. Functioning but vendor-abandoned devices can stay out of the landfill and in use for many years to come. With software designed for users&#8217; needs, not vendors&#8217;, it is possible to run software on the devices one already owns. Lean, efficient Free Software even runs on devices that are decades old. This is good for users, and better for the environment!</p> +<p>In this lightning talk I will provide an overview of the whys and hows of KDE Eco&#8217;s &#8220;Opt Green&#8221; initiative. Through campaigns and workshops over the next 2 years, we will raise awareness about environmental issues driven by software and demonstrate the power of Free Software to drive down resource use and keep devices running smoothly for years beyond official vendor support. This is all possible because Free Software *is* right-to-repair software: it removes vendor dependencies and guarantees transparency and user autonomy, providing full control over software, and thus hardware. I will describe the ways we plan to reach our target audience, including materials designed for eco-consumers and events well outside usual tech circles, such as open-air organic, artisanal, and fair trade markets, cultural centers, and others. These activities give us the opportunity to align our values in the Free Software community with those in allied communities striving for a sustainable modern lifestyle.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Joseph P. De Veaugh-Geiss + + 1 + 1 + + + 11:40 + 00:15 + ClapMetrics: Decoding Users’ Gender and Age Through Smartwatch Gesture Dynamics + https://www.sfscon.it/talks/clapmetrics-decoding-users-gender-and-age-through-smartwatch-gesture-dynamics/ + + <p>In this presentation, we introduce ClapMetrics &#8211; an innovative and seamless method for deducing the gender and age of smartwatch users. This system ingeniously harnesses the capabilities of the smartwatch’s integrated 3D sensors — specifically, the accelerometer and gyroscope—to capture the wearer’s arm movements during a clapping action. ClapMetrics operates on the principle that each clap is a complex interplay of motion, unique to the individual, much like a fingerprint. By analyzing these movements, ClapMetrics can gather rich biometric data without any active input or effort from the user, making it a remarkably non-intrusive technology. We will delve into the specifics of how ClapMetrics processes sensor data to make its estimations. We will explore the Neural Network’s architecture, the training process, and how the model interprets the sensor data to make reliable predictions about the wearer’s gender and age.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Attaullah Buriro + + 1 + 1 + + + 12:00 + 00:15 + Adoption Determinants of Open Hardware Across Industries + https://www.sfscon.it/talks/adoption-determinants-of-open-hardware-across-industries/ + + <p>Open Hardware (OH) is revolutionizing the way we approach technology in several areas, such as agriculture and healthcare. These areas, which are fundamental to food availability and human well-being, are undergoing an important shift as open hardware licensing strategies, inspired by open-source software (OSS), make solutions more accessible, affordable, and customizable. In this talk, we review major factors determining the use and adoption of OH technologies, including economic advantages, opportunities, and challenges.<br /> +Similar to OSS, OH applications are gaining momentum. In agriculture, farmers and researchers are turning to OH for precision farming tools, environmental monitoring, and robotics. These technologies not only reduce development costs but can be easily adapted to specific local needs, enhancing their effectiveness in diverse agricultural environments – crucial for small-scale farmers in developing countries and rural areas who face financial constraints. Likewise, the healthcare industry is benefiting from OH through the development of affordable medical devices, diagnostic tools, and treatment systems. The high costs and regulatory challenges associated with traditional medical devices often limit access to essential healthcare, especially in underdeveloped regions. Examples include open-source ventilators, syringe pumps, and diagnostic devices.<br /> +Applications of OH will be showcased through a comparative analysis of successful projects, particularly those with high engagement on platforms like GitHub, characterized by community engagement, active forums, and regular updates. Finally, we will draw conclusions about the potential of OH for industries beyond agriculture and healthcare, encouraging further innovation and collaboration in the open-source community.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Seckin Celik + Davide Serpico + + 1 + 1 + + + 12:20 + 00:15 + Enabling global interoperability among smart devices is only possible through Open Source + https://www.sfscon.it/talks/enabling-global-interoperability-among-smart-devices-is-only-possible-through-open-source/ + + Oniro and OpenHarmony a cooperation to build a global ecosystem + Oniro and OpenHarmony a cooperation to build a global ecosystem + <p>Global interoperability is probably the biggest problem that smart devices have been studied for more than 10 years. Multiple solutions have been proposed with different results, but none of them has established a reference framework and a global adoption. One of the main reasons for this to stay as a key element for research and investment is the diversity among the whole technology stack and geographical dispersion of device manufacturers. In the last years, there is a solution that is capturing the attention by demonstrating how an open source operating system can enable global interoperability in a huge domestic market like China. This solution is OpenHarmony and through a cooperation with Eclipse Foundation Oniro project, it is intended to use open source to drive interoperability and therefore solve one of the biggest challenges in the IoT and smart device industry. During the talk, it will be presented the approach followed by these two independent initiatives to cooperate while keeping the independence of the open source communities behind them.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Juan Rico + + 1 + 1 + + + 12:40 + 00:15 + Smart Werke Meran &#8211; Lorawan Use Cases + https://www.sfscon.it/talks/smart-werke-meran-lorawan-use-cases/ + + Our Use Cases realized with 100% Open Source + Our Use Cases realized with 100% Open Source + <p>Stadtwerke Meran has had a Chripstack Lorawan server and 19 Lorawan gateways for a year now. Merano has a well-developed Lorawan network.</p> +<p>We have realized the following use cases:</p> +<p>Remote control of public lighting.<br /> +Temperature measurement ( Just Nature project)<br /> +Smart metering for our water customer<br /> +GPS tracking for waste compactors of our major customers</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Stefan Mutschlechner + + 1 + 1 + + + 13:00 + 00:15 + 2025 scenario on OpenISA OpenPower Open Hardware computing + https://www.sfscon.it/talks/2025-scenario-on-openisa-openpower-open-hardware-computing/ + + 2025 Real scenario on Open Hardware based on OpenISA OpenPower CPU + 2025 Real scenario on Open Hardware based on OpenISA OpenPower CPU + <p>We see on 2025 which OpenISA OpenPower low power chip will give life to new Open Hardware computers, we examine in detail which open hardware computers will be ready for 2025 based on these chips. It will be the first time that OpenPower OpenISA low power Chip will be produced, and what is more, it will be produced from other Silicon Companies different from IBM.<br /> +We will see who are the GNU/Linux distros that support PPC64 and PPC64el and PowerPC architecture that runs on these computers and how you can join to experiment with it and push forward these architectures.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Roberto Innocenti + + 1 + 1 + + + 13:20 + 00:15 + The SMART Box of AURA Project + https://www.sfscon.it/talks/the-smart-box-of-aura-project/ + + <p>AURA project centers on the development of &#8220;Green &amp; Smart Urban Furniture,&#8221; a new generation of urban furniture that transcends traditional roles by incorporating eco-friendly and intelligent features. These urban elements are designed with bioabsorbent vegetation capable of mitigating atmospheric pollutants, making them environmentally sustainable. Furthermore, they are outfitted with advanced IoT sensors that monitor a range of environmental parameters, including climate data, urban pollution, and vehicular traffic.</p> +<p>These smart urban furniture units not only establish an extensive urban monitoring network but also actively combat pollution through the sequestration and reduction of harmful substances via the integrated vegetation. The embedded IoT sensors provide innovative capabilities for tracking the impact of these elements on the surrounding urban environment, such as monitoring air pollution levels and assessing the effects of heat islands. Each furniture piece is equipped with a &#8220;smart box,&#8221; a hardware system constructed using low-cost commercial off-the-shelf (COTS) components. This system includes climate and environmental sensors, gas measurement devices, a processing unit, and a data transmission module. The accompanying software, developed from scratch, delivers localized information—such as CO2 sequestration, temperature, and humidity—and contributes to a comprehensive environmental monitoring network aimed at predictive analysis, including weather risks, heat wave alerts, and health risks associated with air pollution. The presentation will delve into the custom-developed software and its ability to meet the field-level requirements of the AURA Architecture, encompassing individual sensors, sensor nodes (smart-boxes within the furniture), and the broader network of these nodes. It will highlight the significant impact and benefits of utilizing free and open-source technologies throughout the development process. Key focus areas include the creation of drivers for individual sensors, with emphasis on the most representative examples, the development of software for sensor nodes—covering features like self-testing, over-the-air (OTA) updates, and MQTT communication—and the design of a dynamic web app for data presentation, leveraging JavaScript, Bootstrap, and a JSON Data Lake. This comprehensive approach underscores the importance of open technologies in accelerating innovation, ensuring flexibility, and delivering robust, scalable solutions for smart urban environments.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Angelo Serino + + 1 + 1 + + + 13:40 + 00:15 + Raspberry Pi and Node-RED: Open Source Tools for Local Automation and Industrial IoT applications + https://www.sfscon.it/talks/raspberry-pi-and-node-red-open-source-tools-for-local-automation-and-industrial-iot-applications/ + + <p>This talk will explore how Raspberry Pi and Node-RED enable robust solutions for automation and control systems in both industrial and local applications. Leveraging open-source technology, these platforms can handle a wide range of tasks, from reading sensor data and managing actuators, to controlling devices through industrial communication protocols such as Modbus, RS485 ascii RTU etc. Node-RED&#8217;s message-driven architecture simplifies the creation of control logic, even for complex operations, while Raspberry Pi serves as a powerful and cost-effective alternative to traditional PLCs and IPCs. The integration of these tools allows for seamless data processing, remote communication, and the development of HMI interfaces both user-friendly or more traditiconal SCADA-like, making these technologies ideal for creating IIoT-native solutions. This presentation will focus on the technical capabilities, showing how these platforms can empower engineers and developers to build flexible and scalable automation solutions.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Federico Boero + Alberto Nicoletti + + 1 + 1 + + + 14:00 + 00:15 + Approaches to Object Detection: Edge-Based and AI-Based + https://www.sfscon.it/talks/approaches-to-object-detection-edge-based-and-ai-based/ + + <p>This presentation explains why we passed to the expert system based on edge-based object detection on traditional image analysis techniques to the AI-based, leveraging advanced machine learning. The first method uses parameters derived from image analysis tools, focusing on attributes such as shape, size, and color of objects, informed by preliminary tests and expert data. The machine learning method employs a sophisticated algorithm that dynamically learns and identifies objects in images. We used both approaches using diverse datasets and measured their accuracy and efficiency under various conditions. The aim of this presentation is to show the improvement obtained by using the AI-based system applied for real-time detection and classification, offering insights into their practical strengths and applications.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Giovanni Giannotta + Orneda Lecini + + 1 + 1 + + + 14:20 + 00:15 + Proxmox Backup Server: Backup for your Datacenter + https://www.sfscon.it/talks/proxmox-backup-server-backup-for-your-datacenter/ + + <p>Backups are an essential component of every IT infrastructure, from small scale businesses up to large datacenters, spanning multiple locations. With the Proxmox Backup Server a fully Free and Open Source backup solution is available, being highly integrated with the Proxmox Virtual Environment.<br /> +This talk will present a short overview of the capabilites provided by Proxmox Backup Server, giving some insights into new and recently added features. Further, by peeking into the inner workings and the software design will show how fast, space efficient and reliable backups are created and how data consistency and integrity are guaranteed. Topics covered will include backups for Virtual Machines and Linux Containers running on top of Proxmox Virtual Environment as well as host level backups.</p> + + DevOps + DevOps + DevOps + https://www.sfscon.it/tracks/devops-track-2024/ + + Christian Ebner + + 1 + 1 + + + 14:40 + 00:15 + Cloud Costs with ClickHouse and OpenCost + https://www.sfscon.it/talks/cloud-costs-with-clickhouse-and-opencost/ + + <p>Managing costs and billing across numerous Cloud-managed Kubernetes clusters presents significant challenges. In this talk, we&#8217;ll explore these challenges and discuss solutions using ClickHouse and OpenCost. Leveraging ClickHouse&#8217;s capabilities, we&#8217;ll demonstrate how it efficiently imports diverse Cloud billing data streams. Additionally, we&#8217;ll delve into how OpenCost addresses the complexities of real-time cost management within a multitenant architecture. Join us to uncover practical insights into optimizing cloud costs effectively.</p> + + DevOps + DevOps + DevOps + https://www.sfscon.it/tracks/devops-track-2024/ + + Denys Kondratenko + + 1 + 1 + + + 15:00 + 00:15 + Ansible + https://www.sfscon.it/talks/ansible/ + + Lazy Engineer's Best Friend! + Lazy Engineer's Best Friend! + <p>For a software engineer DRY is not only a washing machine progam, but it represents a deeply-held mantra: Don&#8217;t Repeat Yourself.</p> +<p>To avoid repetitive manual work, automation tools like Ansible enable engineers to quickly configure infrastructure and easily deploy applications.</p> +<p>In this talk, we will explore the key concepts and benefits of Ansible for configuration management, deployment and orchestration of remote devices. We will start with an overview of Ansible&#8217;s utility, how it works, and common use cases. We will see how YAML files describe configurations and playbooks define automated tasks and processes.</p> +<p>Practical examples will show Ansible automation in action, including a quick introduction to initializing and keeping your operating system up to date by automating the installation and maintenance of system tools. We will also introduce the concept of dotfiles for configuration.</p> +<p>What are you waiting for? Learn how to spend 30 minutes automating 5-second tasks with Ansible! (It&#8217;ll save you time in the long run, I promise!)</p> + + DevOps + DevOps + DevOps + https://www.sfscon.it/tracks/devops-track-2024/ + + Marco Lampis + + 1 + 1 + + + 15:20 + 00:15 + Efficient Log Management in Large-Scale Kubernetes Clusters + + + <p>Large Kubernetes clusters can generate significant volumes of logs, especially when housing thousands of running pods. This may demand substantial CPU, RAM, disk IO, and disk space for storing and querying large log volumes. In this talk, we will look into different strategies of storing those logs in ElasticSearch, Grafana Loki and VictoriaLogs and examine how we can save 10x or more on infrastructure costs.</p> +<p>This talk presents real-world examples of efficient log management in large-scale Kubernetes clusters. It includes setup demonstrations, numerical data, and graphical representations from reproducible benchmarks.</p> + + DevOps + DevOps + DevOps + https://www.sfscon.it/tracks/devops-track-2024/ + + Aliaksandr Valialkin + + 1 + 1 + + + 15:40 + 00:15 + KubeVirt + + + making running virtual machines in a kubernetes cluster a mainstream activity + making running virtual machines in a kubernetes cluster a mainstream activity + <p>KubeVirt is a Kubernetes addon for running virtual machines inside a Kubernetes cluster.</p> +<p>Currently being in CNCF incubating state, it has a wide range of adopters by both vendors and end users, such as NVidia, Suse, ARM and Red Hat to name a few.</p> +<p>This talk gives an overview of what is currently possible with KubeVirt on your cluster and what its future may look like. We will describe some of the features it supports, i.e. VM Import, LiveMigration, Snapshot/Restore and Monitoring.</p> +<p>At the end of the talk attendees will have an idea of how they can use it to better integrate existing virtual machines with containers in their existing application landscape.</p> + + SFSCON + SFSCON + SFSCON + + Daniel Hiller + + 1 + 1 + + + 16:00 + 00:15 + Why free backup software matters + https://www.sfscon.it/talks/why-free-backup-software-matters/ + + <p>It is 2024, we&#8217;re in the middle of the cloud-era.<br /> +Almost every service you desire is available in &#8220;the cloud&#8221;.<br /> +At least some of your company&#8217;s critical data is stored at some cloud provider.<br /> +Does your provider actually keep backups?<br /> +Can you live with their Recovery Time Objective (RTO)?<br /> +Do you believe they will actually meet the RTO?<br /> +Maybe you have another copy of your data?<br /> +In a format that you can actually access and read?</p> + + DevOps + DevOps + DevOps + https://www.sfscon.it/tracks/devops-track-2024/ + + Andreas Rogge + + 1 + 1 + + + 16:20 + 00:15 + Demystifying JWTs + https://www.sfscon.it/talks/demystifying-jwts/ + + <p>JSON Web Tokens (JWTs) have become a popular method for securely transmitting information between two parties. They are widely used in modern web applications for authentication and data exchange. However, their inner workings and security implications can be complex and often misunderstood by the developers.</p> +<p>In this talk, we aim to demystify JWTs by exploring their structure, how they work, and the cryptographic mechanisms that ensure their integrity and confidentiality. We will discuss the components of a JWT, including headers, payloads, and signatures, and illustrate how they combine to form a token.</p> +<p>Furthermore, we will dive into best practices for JWT usage, common pitfalls to avoid, and security considerations such as token expiration, payload size, and the choice of cryptographic algorithms. Finally, we will explore how a WebSocket connection can be secured with JWTs. Security is increasingly an overlooked necessity while utilizing a protocol that does not support authentication by default.</p> +<p>By the end of the session, attendees will have a clear understanding of how JWTs operate, their advantages over traditional session-based authentication, and how to implement them securely in their own applications.</p> + + Cybersecurity + Cybersecurity + Cybersecurity + https://www.sfscon.it/tracks/cybersecurity-track-2024/ + + Dominika Bobik + + 1 + 1 + + + 16:40 + 00:15 + Containerization and micro-services in real life change security and vulnerability management. Let’s Discuss. + https://www.sfscon.it/talks/containerization-and-micro-services-in-real-life-chandge-security-and-vulnerability-management/ + + Security Configuration for Containerization and micro-services applications + Security Configuration for Containerization and micro-services applications + <p>Containerization and micro-services change the way software is deployed and used in production contexts. Re-evaluation of the criteria for secure development and above all for secure configuration of these solutions. It would probably be appropriate to implement security already during the creation of the solution itself.</p> + + Cybersecurity + Cybersecurity + Cybersecurity + https://www.sfscon.it/tracks/cybersecurity-track-2024/ + + Carlo Falciola + + 1 + 1 + + + 17:00 + 00:15 + Cyber Risk Management: let’s try to manage it with open source and free software + https://www.sfscon.it/talks/cyber-risk-management-lets-try-to-manage-it-with-open-source-and-free-software/ + + Open source solutions in the cybersecurity landscape, oriented to manage processes + Open source solutions in the cybersecurity landscape, oriented to manage processes + <p>Cyber Risk Management is what you need to manage to ensure your business can operate being aware of threats, vulnerabilities, and to ensure that your business transactions and data are confidential, intact, available.</p> +<p>Let’s discuss and explore solutions and resources coming from open source and free software that can help organization to manage their cybersecurity programs, with an approach that looks at sharing knowledge, adopt tools and pay attention to the budget.</p> + + Cybersecurity + Cybersecurity + Cybersecurity + https://www.sfscon.it/tracks/cybersecurity-track-2024/ + + Graziano Specchierla + + 1 + 1 + + + 17:20 + 00:15 + IT Security – Don’t let Open Source Software become the next menace + https://www.sfscon.it/talks/it-security-dont-let-open-source-software-become-the-next-menace/ + + Criminals and Govs are levereging Open Source tools, libraries and software to break into organizations. Let's stop 'em. + Criminals and Govs are levereging Open Source tools, libraries and software to break into organizations. Let's stop 'em. + <p>There is a prevalent myth that open source software is inherently secure. However, this is not true. Open source software is susceptible to vulnerabilities just like any other software. Moreover, the fact that anyone can review the code does not guarantee that the right people will do so. Open source software faces two important threats than not everybody are aware of:</p> +<p>Vulnerabilities: Open source developers need to understand and communicate the security posture of their projects to users. They must adopt robust security practices. The Log4j incident in 2021, which led to the Log4Shell vulnerability, triggered a catastrophic wave of attacks due to inadequate support for the logging framework and its critical role in company procedures.</p> +<p>Dev teams infiltration: Criminal organizations and government hacking teams are executing highly sophisticated social engineering operations to infiltrate understaffed open source projects. Their goal is to compromise development teams and insert backdoors into the software. The most recent attack on a significant project was discovered in April 2024.</p> +<p>Objective of the Talk: Inform the community about these two security scenarios and demonstrate how to effectively address them.</p> + + Cybersecurity + Cybersecurity + Cybersecurity + https://www.sfscon.it/tracks/cybersecurity-track-2024/ + + Giancarlo Calzetta + + 1 + 1 + + + 17:40 + 00:15 + Biting the Apple + https://www.sfscon.it/talks/biting-the-apple/ + + MacBook Forensic with Fuji + MacBook Forensic with Fuji + <p>Description: Fuji is a free software, licensed under GPL v3, that leverages Apple Software Restore (ASR) and Rsync to create forensic images of macOS systems. It operates on logged-in computers to efficiently capture disk images while maintaining data integrity.</p> +<p>Bypassing encryption on Apple silicon processors presents significant challenges due to their advanced hardware encryption mechanisms and secure enclave protections. These processors employ complex security protocols that safeguard data at a hardware level, making unauthorized access and decryption extremely difficult. Without proper authentication or specific exploits, forensic imaging on these devices requires substantial technical expertise and often necessitates the cooperation of the device owner.</p> +<p>We&#8217;ll see how to acquire forensically MacBook data with free software</p> + + Cybersecurity + Cybersecurity + Cybersecurity + https://www.sfscon.it/tracks/cybersecurity-track-2024/ + + Alessandro Farina + + 1 + 1 + + + + + 11:00 + 00:15 + Apisense – Easily monitor and track your REST-API data quality + https://www.sfscon.it/talks/apisense-easily-monitor-and-track-your-rest-api-data-quality/ + + An easy and modular solution to faulty REST-API data developed in collaboration with the Open Data Hub + An easy and modular solution to faulty REST-API data developed in collaboration with the Open Data Hub + <p>Ever had the issue of fetching invalid or faulty data from a REST-API and noticing only later, when everything broke down? Not anymore!</p> +<p>Apisense was developed in collaboration with the Open Data Hub to be an easy and modular tool to fit every need possible used to ensure and monitor the availability, quality and correctness of data provided via REST-APIs.</p> +<p>Sounds too good to be true? Tune in to find out how Apisense can help both producers and consumers of data to be aware of the quality and reliability of the data they provide/consume.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Aurelio Buonomo + Christian Zanotti + + 1 + 1 + + + 11:20 + 00:15 + MongoDB Alternatives: Is There A Need For A New Open Standard? + + + <p>This talk takes you on a journey through the history of SQL as an Open Standard, emphasizing its pivotal role in shaping the database industry. It also highlights the pressing need for a similar standard in MongoDB-compatible open databases. The presentation introduces FerretDB as a groundbreaking solution bridging MongoDB and open databases, ensuring seamless transitions without extensive application-level changes. This talk illuminates the importance of open standards and presents a path forward for enhanced compatibility and collaboration within the open-source database community.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Peter Farkas + + 1 + 1 + + + 11:40 + 00:15 + MariaDB Vector: Why your AI data should be in an RDBMS + https://www.sfscon.it/talks/mariadb-vector-why-your-ai-data-should-be-in-an-rdbms/ + + Databases and AI: How to supercharge application development with MariaDB vector + Databases and AI: How to supercharge application development with MariaDB vector + <p>As AI apps become mainstream, conventional IT wisdoms apply. AI apps must be no monoliths, but need to be logged, audited, and overall well integrated into normal IT. This means all AI data – vectors, input, output – is best stored in a normal RDBMS. Better still: In an open source database with performance, stability, and ease of use. Here is an overview of the AI opportunities, possibilities, methodologies, and features in MariaDB Server.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Kaj Arnö + + 1 + 1 + + + 12:00 + 00:15 + 1, 2, 3, Doc Kit! + https://www.sfscon.it/talks/1-2-3-doc-kit/ + + Automate the creation of software documentation + Automate the creation of software documentation + <p>Doc Kit is an open source command line tool that automates the creation of software documentation and release notes.<br /> +It can be used in conjunction with DocBook Authoring and Publishing Suite (DAPS) for quickly preparing the skeleton of professional looking software documentation.</p> +<p>Doc Kit has been designed for initialising SUSE or openSUSE documentation repositories but in a few steps it can be re-used for other projects too.<br /> +The tool consists of two parts:<br /> +1. a command-line tool called doc-kit that can download documentation boilerplate files<br /> +2. a repository of documentation boilerplate files, such as the SUSE/openSUSE book preface and entity files.</p> +<p>The presentation will show how to use Doc Kit and how to customise the provided templates for creating a brand new documentation or release notes projects.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Marina Latini + + 1 + 1 + + + 12:20 + 00:15 + codEEmoji – Making code more informative with emojis + https://www.sfscon.it/talks/codeemoji-making-code-more-informative-with-emojis/ + + <p>This presentation focuses on the open-source project codEEmoji, an IDE plugin that adds additional information to the code through emojis. The talk starts by discussing the benefits of this approach compared to other ways to present information for the developer in IDEs. It follows by presenting the plugin and its main functionalities, which go from pointing out bad practices in method and variable naming to presenting modifiers and method characteristics in their usage. Next, it is presented how the plugin structure was designed to receive new contributions. The talk finishes by presenting some challenges and future features.</p> +<p>https://github.com/codeemoji/codeemoji-plugin</p> +<p>https://plugins.jetbrains.com/plugin/22416-codeemoji</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Eduardo Guerra + + 1 + 1 + + + 12:40 + 00:15 + Can Test Driven Development be speeded up with Generative AI? + https://www.sfscon.it/talks/can-test-driven-development-be-speeded-up-with-generative-ai/ + + <p>Generative AI tools, like ChatGPT, have shown remarkable capabilities in natural language processing. It is logical to explore their potential in programming, yet the quality of generated code raises concerns. Test-Driven Development (TDD) offers a promising approach to address these concerns. In this talk, we will explore how developers can effectively collaborate with generative AI tools to enhance TDD practices, ensuring higher code quality and streamlined development processes. To this aim, we will present two interaction patterns between a human and an AI.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Moritz Mock + Barbara Russo + Jorge Melegati + + 1 + 1 + + + 13:00 + 00:15 + ScrapeGraphAI + https://www.sfscon.it/talks/scrapegraphai/ + + you only scrape once + you only scrape once + <p>ScrapeGraphAI is an innovative Python library designed to revolutionize the field of web scraping and in less than 4 months it collected over than 12k stars on Github and more than 100k downloads on pip. It allows to scrape which website you want with the knowledge of the HTML code and with the LLM models. By seamlessly integrating a natural language model within its architecture, ScrapeGraphAI enables the extraction of valuable information from websites with unparalleled flexibility and accuracy. Unlike traditional scraping tools that rely on rigid patterns or manual configuration, ScrapeGraphAI constructs a dynamic graph of operations to interrogate web pages, ensuring that relevant data is captured even in the face of changing website structures. This library&#8217;s unique fusion of language models and directed graph logic empowers developers to create sophisticated scraping workflows with minimal coding required, thereby streamlining the process of extracting valuable insights from online content. More info at this link: https://github.com/VinciGit00/Scrapegraph-ai</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Marco Vinciguerra + + 1 + 1 + + + 13:20 + 00:15 + Software Engineering Automation: From early tools to Generative AI and beyond + https://www.sfscon.it/talks/software-engineering-automation-from-early-tools-to-generative-ai-and-beyond/ + + <p>The emergence of Generative AI tools, such as ChatGPT and Copilot, promises to disrupt knowledge-based work, including software development. However, these are not the first tools to support the automation of software engineering. From the early days, various tools have been developed to remove repetitive tasks, reduce workload, and consequently increase the abstraction of software development, such as auto-completion and automatic refactoring. In this talk, we present the different levels of the automation of software engineering. We will examine how past and present tools have achieved these levels, the current capabilities of Generative AI tools, and what we can expect for the future.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Jorge Melegati + + 1 + 1 + + + 13:40 + 00:15 + The Crucial Role of Openness in Modern Software Development + https://www.sfscon.it/talks/the-crucial-role-of-openness-in-modern-software-development/ + + <p>Developers and providers of software-based products as well as other new technologies for the global market know that the winning solutions for future-proof projects share one key feature: interoperability with products from other suppliers. Achieving this interoperability means relying on open standards, open-source technologies and establishing key partnerships with other industry players.</p> +<p>In effect, openness principles are increasingly essential to software development. This talk will provide an in-depth analysis of how these concepts underpin interoperability, security and innovation in today&#8217;s technological landscape.</p> +<p>It will discuss the importance of open standards in creating seamless integration between diverse systems and applications, ensuring that technological advancements remain accessible and adaptable. The session will also cover key strategies and best practices for the adoption of open solutions that drive compatibility and competitiveness.</p> +<p>Finally, by examining Jakarta EE and the Payara Community, the talk will illustrate how these frameworks exemplify the power of open source in building innovative, scalable and future-oriented applications.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Chiara Civardi + Dominika Tasarz-Sochacka + + 1 + 1 + + + 14:00 + 00:15 + AI Tools for Jakarta EE + https://www.sfscon.it/talks/ai-tools-for-jakarta-ee/ + + <p>Discover how AI-powered tools for Jakarta EE streamline the entire development lifecycle.</p> +<p>Over the years, there have been many ways of starting a project: archetypes, project generators, visual designers, and so on. What do we get when we add a language model to the mix? A project generator that scaffolds domain-relevant Jakarta EE applications with backend and frontend functionalities in place.</p> +<p>Experience the future of enterprise application development through practical, cutting-edge demonstrations.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Gaurav Gupta + + 1 + 1 + + + 14:20 + 00:15 + How to start contributing and still have fun + https://www.sfscon.it/talks/how-to-start-contributing-and-still-have-fun/ + + <p>Are you new to Open Source and about to create your first commit, but still haven&#8217;t clicked on &#8220;New Pull Request&#8221; button?</p> +<p>There will be always something holding you back.</p> +<p>Or do you want to gain experience that can be applied at your school or work but don&#8217;t know how?</p> +<p>Open Source gives you that opportunity.</p> +<p>Let&#8217;s talk about it because we all go through it: how to find your project; fear of the first commit, the first code review, the first mistakes and everything is public; fight toxic communities &#8211; no one is perfect; when to open your code;</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Juri Solovjov + + 1 + 1 + + + 14:40 + 00:15 + Monolith Splitter + https://www.sfscon.it/talks/monolith-splitter/ + + <p>Migration from monolithic systems to microservices has earned significant interest in recent years. Software architects and developers welcome approaches, techniques, and patterns that can facilitate and automate the migration process. This talk will present Monolith Splitter, a tool that employs various approaches for splitting a monolith into a microservices architecture. This tool could be beneficial for software architects looking to migrate monolithic projects to a more scalable architecture. It uses execution traces to analyze monolithic software and suggests which classes should be grouped together in separate services according to criteria such as cohesion, modularity, and independence of evolvability. We will showcase the application of the tool to a series of open source software projects, discussing the outcomes, the benefits, and the current limitations.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Michal Skipala + Bruno Rossi + + 1 + 1 + + + 15:00 + 00:15 + The Next Level of Metrics in Microservices + https://www.sfscon.it/talks/the-next-level-of-metrics-in-microservices/ + + Going beyond measuring workload and performance + Going beyond measuring workload and performance + <p>In Microservices, measuring workload and performance are old news! They&#8217;re still important, but we can do more. In this talk, we&#8217;re navigating through new ideas on how to use metrics to tell us more than the basics about our microservices. Did you know we can evaluate our microservices in the architectural level? So we&#8217;ll have concrete data to support our decision-making. Between patterns and bad smells, we can use metrics to detect the points where they happen. Let&#8217;s explore these new possibilities to improve our experience when evolving a microservice system, towards a more robust and maintainable direction! Bonus: you&#8217;ll learn about an open-source tool to facilitate this process, of which I&#8217;m a maintainer, and you could be too!</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + João Francisco Lino Daniel + + 1 + 1 + + + 15:20 + 00:15 + What’s New in Notifications + https://www.sfscon.it/talks/whats-new-in-notifications/ + + <p>Over the past 6 months I&#8217;ve been working on improving notifications for the GNU/Linux desktop. This includes a new version of the xdg-desktop-portal notification spec, improved notification UI in GNOME Shell, and various backend components (e.g. GLib and portals).</p> +<p>In this talk I&#8217;ll explain why it was so difficult, how we untangled it, and what&#8217;s in store for the future.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Julian Sparber + + 1 + 1 + + + 15:40 + 00:15 + Sync Your Tunes, Sync Your Screen: Introducing SyncWall + https://www.sfscon.it/talks/sync-your-tunes-sync-your-screen-introducing-syncwall/ + + <p>Ever wished your computer could visually represent your playlist? SyncWall lets you turn every song into a unique visual experience, by dynamically matching your desktop wallpaper to the music currently playing on Spotify!</p> +<p>We&#8217;ll demonstrate SyncWall in action, showcasing its capabilities, and then we&#8217;ll dive deeper into the code and the process of creating the images.</p> +<p>SyncWall relies on two core components: Spotify&#8217;s API, which provides with all the necessary song information, and Python&#8217;s PIL library, which allows to easily manipulate images. Throughout the presentation, we will explore the key concepts and most useful functions of these two technologies, providing you with practical tools to integrate into your own projects.</p> +<p>Even if Syncwall is designed for GNOME, we will dive deep on how to make it work also in different desktop environments. This will cover all the steps and the challenges involved.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Giovanni Enrico Loni + + 1 + 1 + + + 16:00 + 00:15 + Nurturing OpenJDK distribution: Eclipse Temurin Success History and plan + https://www.sfscon.it/talks/nurturing-openjdk-distribution-eclipse-temurin-success-history-and-plan/ + + <p>Join me as we explore the pillars that make Eclipse Temurin one of the most widely adopted, enterprise-ready OpenJDK Runtime (over 20M monthly downloads) and also delve into the future of Adoptium and explore the goals set for 2024.<br /> +As we navigate the landscape of open source Java runtimes, Adoptium is committed to fostering vibrant, healthy projects that thrive with the support of robust communities. In this talk, we will also shine a spotlight on our dedication to delivering top-notch quality and outstanding performance, with a special focus on our AQAvit project and Security Effort.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Carmen Delgado + Ivar Grimstad + + 1 + 1 + + + 16:20 + 00:15 + Designing open source tools for Citizen Coders + https://www.sfscon.it/talks/designing-open-source-tools-for-citizen-coders/ + + Empower non-professional developers to drive innovation! + Empower non-professional developers to drive innovation! + <p>In a world where proprietary no-code platforms with vendor lock-in and opacity dominate, there is a crucial need to enhance the developer experience of open source applications, libraries, and tools.</p> +<p>We will explore how we can make open source software more accessible to citizen developers and non-professional programmers who face significant barriers to entry with modern open source tools. Showing the importance of collaborating with these developers, who are often closer to real-world problems, to improve the quality and usability of open source software.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Luca Rainone + + 1 + 1 + + + 16:40 + 00:15 + Free your Games + https://www.sfscon.it/talks/free-your-games/ + + A Minetest story + A Minetest story + <p>Videogames are part of our daily life. They allow us to unplug, to relax, to compete, simulating a reality that puts us at the centre of a new digital world. However, if we go deeper into the way videogames are made, we&#8217;ll learn that their market can be brutal and the ethics of their business models highly debatable &#8211; if not plain unbearable. Nowadays, playing a videogame usually means renouncing to our privacy and shaking hands with realities that we might not tolerate if we knew what they conceal. It was during the pandemic that a Minetest server called AES was born. Made by volunteers, AES decided to go against that: to build an online space where to play without strings attached. A place where everyone can have fun and nothing is proprietary. Four years later, this is its story.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Marco Amato + + 1 + 1 + + + 17:00 + 00:15 + How to set up an Open Source Program Office? Get insights and use cases from the OSPO Alliance + https://www.sfscon.it/talks/how-to-set-up-an-open-source-program-office-get-insights-and-use-cases-from-the-ospo-alliance/ + + <p>The Good Governance Initiative (GGI) developped by the OSPO Alliance proposes a methodological framework to assess open-source awareness, compliance and governance in any kind of organizations, helping them to structure and improve the use of FOSS towards an OSPO. This presentation will highlight the main progresses and new features achieved since last year&#8217;s introduction at SFScon, such as the translation of the GGI Good Governance in five languages, the recent OSPO testimonies presented in the OnRamp meeting series, and many more.</p> + + OW2 + OW2 + OW2 + https://www.sfscon.it/tracks/ow2-track-2024/ + + Valentina Del Prete + + 1 + 1 + + + 17:20 + 00:15 + Decentralized Search Over Decentralized Storage + https://www.sfscon.it/talks/decentralized-search-over-decentralized-storage/ + + Coupling an AI-powered search engine with a self-hosted personal cloud + Coupling an AI-powered search engine with a self-hosted personal cloud + <p>In this talk, we will explore an innovative decentralized search system developed in collaboration between the teams of On My Disk, a personal cloud storage solution, and PeARS, a self-hosted search engine. This system is designed to enable user-friendly, AI-powered, multilingual search capabilities directly over a decentralized storage environment, empowering individuals to manage and search their data across devices without relying on third-party servers. By combining cutting-edge AI with a robust, local-first approach, this solution allows users to maintain complete control over their data, ensuring secure, fast, and personalized search results in a user-controlled environment. Learn how this technology is setting a new standard for privacy and autonomy in data storage and retrieval.</p> + + OW2 + OW2 + OW2 + https://www.sfscon.it/tracks/ow2-track-2024/ + + Alexey Volkov + + 1 + 1 + + + 17:40 + 00:15 + Optimizing Cloud Compute Resources with Spare Cores + https://www.sfscon.it/talks/optimizing-cloud-compute-resources-with-spare-cores/ + + <p>Spare Cores is a vendor-independent, open-source, Python ecosystem that offers a comprehensive inventory and performance evaluation of compute resources across cloud server providers. We start all server types publicly (GHA) to run hardware inspection tools and benchmarks for different workloads. Our findings are published as open data and open-source tools to help you identify and optionally start the most cost-efficient instance type for your specific use cases (e.g. ML model training or CI/CD pipelines) in your cloud environment. Additionally, Spare Cores provides a seamless SaaS solution built on this open-source ecosystem, managing the entire lifecycle of containerized batch jobs without requiring direct vendor engagement.</p> + + OW2 + OW2 + OW2 + https://www.sfscon.it/tracks/ow2-track-2024/ + + Gergely Daroczi + + 1 + 1 + + + + + 13:00 + 00:30 + NOI Hackathon SFSCON Edition + + Side Event - Hackathon + Side Event - Hackathon + Side Event,Hackathon + 0 + 0 + + + + + 14:00 + 00:40 + Human and environmental Impacts of the actual “Artificial Intelligence” Industry, how to humanize? + + Side Event - Crane Hall BOF meetings + Side Event - Crane Hall BOF meetings + Side Event,Crane Hall BOF meetings + https://www.sfscon.it/tracks/crane-hall-bof-meetings-2024/ + + Roberto Innocenti + + 0 + 0 + + + + + + + 08:30 + 00:30 + Starting of the second day + + SFSCON + SFSCON + SFSCON + 0 + 0 + + + 13:00 + 00:30 + Closing of the SFSCON 2024 + + SFSCON + SFSCON + SFSCON + 0 + 0 + + + + + 08:30 + 00:30 + Welcome Coffee + + SFSCON + SFSCON + SFSCON + 0 + 0 + + + + + 09:20 + 01:00 + Let’s spark more Adas in our tech world! workshop + + Women* in tech + Women* in tech + <p>In this workshop we will dive into the possibilities of encouraging women*, especially girls, to thinker and to code. With tools such as the Free Software Foundation Europe’s (FSFE) illustrated book &#8220;Ada &amp; Zangemann &#8211; A Tale of Software, Skateboards, and Raspberry Ice Cream&#8221;everybody can create ways to spark the participation of women* and girls in tech.The book tells the story of Ada, a girl who loves to experiment with hardware and software. Ada realises how crucial it is to control technology and decides to stand up to the mighty inventor Zangemann.This workshop will also intend to explore ways to promote diversity and gender equity in the Free Software community and beyond. Together we will identify the challenges women* face in participating in such communities and discuss how we can create more inclusive environments, especially for the future generations.We encourage you to join us to share your experiences, ideas and perspectives, and collaborate in creating a more inclusive and diverse future in the Free Software community for all.</p> +<p><b>REGISTRATION NEEDED AT: </b><a href="https://pretix.eu/noi-digital/sfscon24/4260077/">https://pretix.eu/noi-digital/sfscon24/4260077/</a></p> +<p><em>*women, inter, trans and non-binary people.</em></p> +<p>Supported by: <strong><a href="https://fsfe.org/" target="_blank" rel="noopener">FSFE – Free Software Foundation Europe</a> </strong>&amp; <a href="https://shetechitaly.org/"><strong>SheTech</strong></a></p> + + Side Event - Women* in tech + Side Event - Women* in tech + Side Event,Women* in tech + https://www.sfscon.it/tracks/women-in-tech-track-2024/ + + Lina Ceballos + Ana Galan + + 0 + 0 + + + 10:40 + 00:55 + Knitting Our Internet workshop + + An interactive journey through the history of the Internet, and how to save it, together + An interactive journey through the history of the Internet, and how to save it, together + <p>“Knitting Our Internet” (KOI) is a workshop that explores the history of the Internet, and offers a perspective for a collective re-imagination of participatory, decentralized networks.</p> +<p>The workshop aims at questioning the very essence of today’s social media, exposing the critical limits posed by centralization, monopoly, and surveillance capitalism.</p> +<p>KOI was conceived in June 2023 by <a href="https://tommi.space">Tommaso Marmo</a>, who was looking for a simple yet critical and accurate way to introduce the concept of the Fediverse to non-experts.</p> +<p>The content and structure of the workshop matured over time, as it adapted to very diverse audiences of any ages and backgrounds. Furthermore, the experience is based on Tommaso’s academic research, mainly conducted for “<a href="https://tommi.space/csss/">Computer Sciences are Social Sciences</a>”, his bachelor’s thesis.</p> +<p><strong>Content</strong></p> +<p>During the activity, Tommaso will be using a yarn his grandmother gifted him to simulate centralized and decentralized networks, employing concrete metaphors to actively involve the participants. Every individual attending the workshop will be given a quote or an image relevant in the early and contemporary history of the Internet, and they will be asked to share it as the story unfolds.</p> +<p>Allowing them to understand the essential challenges society faces in relation to technological advancement, participants will be empowered to get involved in the Fediverse, especially understanding the importance of decentralization, Free Software, and the political role played by technical tools.</p> +<p><strong>Notes</strong></p> +<p>Given its malleable and open structure, the content of the workshop can be adapted, enriched, and edited to match the key topics of SFSCON 2024 in the best possible way.</p> +<p>The interactive parts of the workshop can be limited and a more theoretical presentation, diving in the thoughts of philosophers and computer sciences, could be added, too.</p> +<p>Supported by: <strong><a href="https://fsfe.org/" target="_blank" rel="noopener">FSFE – Free Software Foundation Europe</a></strong></p> + + Fediverse + Fediverse + Fediverse + https://www.sfscon.it/tracks/fediverse-track-2024/ + + Tommaso Marmo + + 0 + 0 + + + 11:40 + 00:15 + about:Fediverse + https://www.sfscon.it/talks/aboutfediverse/ + + An introduction to the decentralised social network + An introduction to the decentralised social network + <p>The Fediverse is a decentralised social network. But what does that mean?</p> +<p>In this talk I will give a short introduction to the Fediverse of 2024 and how it started to evolve in 2008. I will explain the basic concepts of ActivityPub as the protocol of the Fediverse and how the use of this open protocol has enabled a diverse group of Free Software projects to build a social network of (micro) blogging, video streaming, podcasting and event organising. A network where users can share and interact with each other regardless of the platform they use. What will be possible in the Fediverse of 2024? And how can you get started today?</p> +<p>This talk does not require any technical knowledge of the Fediverse. However, you should know what an email is.</p> + + Fediverse + Fediverse + Fediverse + https://www.sfscon.it/tracks/fediverse-track-2024/ + + Tobias Diekershoff + + 1 + 1 + + + 12:00 + 00:15 + How to build a website for the IndieWeb + https://www.sfscon.it/talks/how-to-build-a-website-for-the-indieweb/ + + <p>Have you ever heard of terms like POSSE, syndication, or webmention?<br /> +What about protocols like Web Sign-In or Micropub?<br /> +These terms are all connected to the IndieWeb, a community of websites built on open standards and open source technologies.</p> +<p>In today&#8217;s digital age, our online content and identities are more important than ever. Relying on random companies and social networks to manage them isn&#8217;t ideal. Instead, we should take control of our online presence by building our own website for the IndieWeb.</p> +<p>In this talk, you&#8217;ll learn how to:</p> +<p>1. Publish content on your website via a Micropub server.<br /> +2. Syndicate that content elsewhere (i.e., republish it on another website).<br /> +3. Gather comments from social networks and display them on your website.</p> +<p>We will achieve all of this using a static website and a few open-source tools.</p> + + Fediverse + Fediverse + Fediverse + https://www.sfscon.it/tracks/fediverse-track-2024/ + + Giacomo Debidda + + 1 + 1 + + + + + 09:20 + 00:15 + ARM Linux Laptops for Developers Status Report + https://www.sfscon.it/talks/arm-linux-laptops-for-developers-status-report/ + + <p>Intrigued by 22+ hours of battery life with comparable performance to current Intel / AMD systems? Starting from June this year a bunch of new ARM based laptops have been launched. All major laptop vendors launched devices, with over 33 to choose from at the time of this writing.</p> +<p>While ARM based laptops have been available for years, they mostly have been targeted as cheap entry level ChromeBooks or MacBooks designed for MacOS only. Luckily with this new wave of ARM based laptops there should be something for everybody.</p> +<p>The core question is how well they behave under Linux. Being designed for<br /> +Windows-on-ARM there is a risk Linux support is rudimentary at best. Stefan set out to test this and is reporting back here. Does a boot with UEFI work out of the box? Are all hardware features supported? Is the firmware for various drivers available? How is the performance?</p> +<p>And the most important question: how does it stack up against an Intel based laptop from the same timeframe as daily driver for software development?</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Stefan Schmidt + + 1 + 1 + + + 09:40 + 00:35 + Building a no-drama community + https://www.sfscon.it/talks/building-a-no-drama-community/ + + <p>In this talk, we&#8217;ll focus on how the AlmaLinux project has chosen to foster a positive, drama-free community in the Linux ecosystem.</p> +<p>&#8212;</p> +<p>Whether you&#8217;re starting a new community or wrangling an existing one, it can be tempting to fall into the trap of bonding over shared enemies to see short-term, high-numbers growth. But, benny has spent the last 10 years building drama-free communities with a different kind of success.</p> +<p>While many open-source projects rally members through shared frustrations or negativity, AlmaLinux took the more challenging path of uniting people through thoughtful dialogue and focusing on helping each other. By prioritizing respect, collaboration, and inclusivity, the AlmaLinux community grew healthier and stronger without the need for battle cries or infusing drama. Learn how this approach not only built a stable and thriving community around AlmaLinux, but is also setting a new standard for open-source communities &#8211; and proving that progress doesn’t have to be divisive.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + benny Vasquez + + 1 + 1 + + + 10:20 + 02:40 + Voices of Free Software: connect, learn, inspire! + + FSFE Italian Community Meeting + FSFE Italian Community Meeting + <p>You are invited to join the volunteers, supporters, and friends of the FSFE Italian Community!</p> +<p>Join us to learn from one another, find inspiration, and tackle future challenges together in the realm of Free Software. As a volunteer, you have a platform to share your story, discuss the most pressing topics surrounding Free Software, and connect with fellow enthusiasts. We encourage you to collaborate with the community on common initiatives and work together to forge new paths forward.</p> +<p>This is an <strong>hybrid event</strong>. You can join us either online or in person.</p> +<p><b>REGISTRATION NEEDED AT: </b><a href="https://pretix.eu/noi-digital/sfscon24/4259648/">https://pretix.eu/noi-digital/sfscon24/4259648/</a></p> +<p>Please note, the official language of the FSFE Italian Community is Italian, hence the event will be held in <strong>Italian</strong>.</p> +<p>Supported by: <strong><a href="https://fsfe.org/" target="_blank" rel="noopener">FSFE – Free Software Foundation Europe</a></strong></p> + + Side Event - FSFE - Italian community meeting + Side Event - FSFE - Italian community meeting + Side Event,FSFE,Italian community meeting + https://www.sfscon.it/tracks/fsfe-italian-community-meeting-2024/ + + Marta Andreoli + + 0 + 0 + + + + + 09:30 + 02:30 + Scratch Stories with Ada & Zangemann + + Side Event - MiniNOI x SFSCON + Side Event - MiniNOI x SFSCON + Side Event,MiniNOI x SFSCON + 0 + 0 + + + + + 16:30 + 00:30 + Winner proclamation and closing of the NOI Hackathon SFSCON Edition + + Side Event - Hackathon + Side Event - Hackathon + Side Event,Hackathon + 0 + 0 + + + + diff --git a/src/tests/assets/sfscon2024.1st_session_moved_for_5_minutes.xml b/src/tests/assets/sfscon2024.1st_session_moved_for_5_minutes.xml new file mode 100644 index 0000000..780e091 --- /dev/null +++ b/src/tests/assets/sfscon2024.1st_session_moved_for_5_minutes.xml @@ -0,0 +1,2248 @@ + + + + sfscon-2024 + SFSCON 2024 + + + Ethics, Policy, Legal & Economics + Data Spaces + Open Hardware + Developers + Community Building + Cybersecurity + Fediverse + DevOps + Side Event - Hackathon + Side Event - School Reading + Side Event - MiniNOI x SFSCON + OW2 + Side Event - Women* in tech + Side Event - Crane Hall BOF meetings + Side Event - FSFE - Italian community meeting + + + + + 08:30 + 00:30 + Check-in SFSCON 2024 + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + 0 + 0 + + + + + 09:02 + 00:15 + Opening SFSCON 2024 + https://www.sfscon.it/talks/opening-sfscon-2024/ + + <p>Opening SFSCON 2024</p> + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Philipp Achammer + + 1 + 1 + + + 09:15 + 00:05 + Greetings from NOI + https://www.sfscon.it/talks/greetings-from-noi/ + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Vincent Mauroit + + 1 + 1 + + + 09:20 + 00:05 + Greetings from Gruppo FOS + https://www.sfscon.it/talks/greetings-from-gruppo-fos/ + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Giorgio Allasia + + 1 + 1 + + + 09:25 + 00:05 + Greetings from Telmekom + https://www.sfscon.it/talks/greetings-from-telmekom/ + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Sergio Vemic + + 1 + 1 + + + 09:30 + 00:30 + Keynote speaker &#8211; coming soon + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Emily Omier + + 0 + 0 + + + 10:00 + 00:15 + European SFS Award 2024 + + Free Software Foundation Europe (FSFE) and Linux User Group Bozen-Bolzano-Bulsan assign the “European SFS Award” + Free Software Foundation Europe (FSFE) and Linux User Group Bozen-Bolzano-Bulsan assign the “European SFS Award” + <p>The award is given to a person who contributed to the introduction of the culture of Free Software.</p> + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + 0 + 0 + + + 10:15 + 00:15 + SFS Award 2024 + + Linux User Group Bozen-Bolzano-Bulsan assigns the “South Tyrol Free Software Award” + Linux User Group Bozen-Bolzano-Bulsan assigns the “South Tyrol Free Software Award” + <p>Every year the Linux User Group Bozen-Bolzano-Bulsan assigns the &#8220;South Tyrol Free Software Award&#8221; (SFS Award). The award is given to a person who contributed to the introduction of the culture of Free Software in the Province of Bolzano.</p> + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + 0 + 0 + + + 10:30 + 00:10 + AlmaLinux in brief + https://www.sfscon.it/talks/almalinux-in-brief/ + + <p>In this quick chat, benny will summarize 20 years of context and 4 years of growth in just 10 minutes by highlighting the major points that brought AlmaLinux to the world, how the project has adjusted for each challenge along the way, and what they&#8217;re planning next.</p> + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + benny Vasquez + + 1 + 1 + + + 10:40 + 00:20 + Open Source in EU policy + https://www.sfscon.it/talks/open-source-in-eu-policy/ + + Making laws with the Open Source community in mind + Making laws with the Open Source community in mind + <p>Over the past three years, the Open Source Community has had to mobilise to fix flaws in European Union policy initiatives, like the Cyber Resilience Act, Product Liability Directive, and the AI act, all of which could have negatively impacted Open Source developers.</p> +<p>This talk explores why this mobilisation was necessary, how the Community is preparing for future legislation, and how the Open Source community has changed the way the EU makes and implements laws.</p> +<p>It will then delve into the particular case of the AI act and its Open Source AI exemption. It will cover how the exemption came about, why it has prompted a wave of AI open-washing, and what can be done to fix it.</p> + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Jordan Maris + + 1 + 1 + + + 11:01 + 00:15 + Let’s all get over the CRA! + https://www.sfscon.it/talks/lets-all-get-over-the-cra/ + + how I stopped worrying about the consequences of the CRA for Open Source innovation in Europe and moved to something else + how I stopped worrying about the consequences of the CRA for Open Source innovation in Europe and moved to something else + <p>The adoption of the CRA (Cyber Resilience Act) has caused some real anxiety among the FOSS ecosystem. Even in its amended form, many questions remain opened and debated, and more to the point, a lot of uncertainty still surrounds it, not just at the level of its general architecture but also at the implementation level.<br /> +It is perhaps fair to mention that the CRA itself does not exist in a void and is building on already existing regulations and ideas. However, it should be explained how the CRA itself was not born inside the institutions of the European Union but is an almost pure product of governmental cyber security circles and agencies. Because of that, the digital ecosystem at large is at pain understanding some of its logic. This talk will start with what we know and what we can infer from the CRA, and how it fits within the general regulatory framework of the European Union. We will thus clarify the following points:</p> +<p>&#8211; what does the CRA mean in terms of software security assessment and certification &#8211; and how that plays a key role in understanding what the CRA is and what it is not<br /> +&#8211; CRA within the European regulatory framework<br /> +&#8211; CRA implementation: the bad, the ugly, and the unknown</p> +<p>We will then discuss what the concerns are for the FOSS communities. Most notably:</p> +<p>&#8211; barriers of entry for Free Software companies, esp. the small and medium ones<br /> +&#8211; legal inability to develop Free and Open Source Software<br /> +&#8211; what will Free and Open Source software foundations do in edge cases and what are they expected to bring in terms of guidance to the companies contributing to their projects</p> +<p>It will then discuss how we can best prepare for it, and make some suggestions on how to solve FOSS specific challenges related to CRA. In particular the talk will explore the following possibilities:</p> +<p>&#8211; evolving the role or cross project security teams<br /> +-promoting best practices in development (CI CD, code auditability) turning the CRA against proprietary software practices<br /> +&#8211; Pooling security audits<br /> +&#8211; Better release management</p> +<p>Last but not least, this talk will discuss the economics behind the CRA and why this may not end up being less of a problem than we think.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Charles-H. Schulz + + 1 + 1 + + + 11:25 + 00:15 + On the ethical challenges raised by robots powered by Artificial Intelligence + https://www.sfscon.it/talks/on-the-ethical-challenges-raised-by-robots-powered-by-artificial-intelligence/ + + <p>The integration of generative AI into robot systems has the potential to boost several industries by enabling robots to understand their environments, create courses of action, and autonomously react to complex situations. However, the adoption of generative AI techniques brings about profound ethical concerns that need to be addressed to ensure the responsible development and deployment of such technologies. In this talk, I will explore the multifaceted ethical challenges associated with generative AI-powered robots, focusing on issues such as robot autonomy, decision-making, accountability of robot actions, and their impact on humans and society as a whole.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Fulvio Mastrogiovanni + + 1 + 1 + + + 11:40 + 00:15 + CRA & PLD Liability rules and Software Freedom + https://www.sfscon.it/talks/cra-pld-liability-rules-and-software-freedom/ + + <p>With CRA and PLD liability rules for software have been introduced with a broad exception for Free Software. After long and intense debates individual developers and non for profit work are safeguarded. I will shed light on those new rules.</p> +<p>Already at an early stage, the FSFE argued in a hearing in the EU Parliament, for the inclusion of clear and precise exemptions for Free Software development in the legislation and for liability to be transferred to those who significantly financially benefit from it on the market.</p> +<p>In the future, individual developers and non-profit development of Free Software will be exempt from the CRA and the PLD. Nevertheless, the wording in both the regulations are different and a standardisation processes and guidelines are still being drawn up.</p> +<p>In this talk I will discuss what this new regulation means for software freedom in future and what happens at this stage and how to be involved in implementation.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Alexander Sander + + 1 + 1 + + + 12:00 + 00:15 + Cyber Resilience Act, already too late to comply? + https://www.sfscon.it/talks/cyber-resilience-act-already-too-late-to-comply/ + + Compliance is dead, long live compliance + Compliance is dead, long live compliance + <p>If you are taking your decisions now for complying with all the requirements of CRA, you might be too late to find adequate external resources to comply , although &#8212; at submission time &#8212; it is not yet in force. So what are you gonna do? Being open source would help only to a certain point, if you monetize the software. Some guidance tips for Open Source projects and businesses.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Carlo Piana + Alberto Pianon + + 1 + 1 + + + 12:20 + 00:15 + AI no-code for marketing + https://www.sfscon.it/talks/ai-no-code-for-marketing/ + + How artificial intelligence can really help create a marketing strategy + How artificial intelligence can really help create a marketing strategy + <p>The process of creating a Marketing strategy and the subsequent steps of drafting editorial calendars, selecting channels, designing, and publishing advertising campaigns, is a complex journey.<br /> +Marketers have always dedicated a lot of time and resources to creating the most effective strategy for a brand’s success and translating it into concrete actions.<br /> +Today, is it possible to use artificial intelligence as a tangible support for the development of the strategic, technical, and operational assets necessary to create a successful marketing plan?<br /> +Let’s discover ATENA together, a methodology and an easy process through which you can simplify, accelerate, and enhance the quality of your marketing strategy, thanks to the practical support of AI.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Alessandro Agnati + + 1 + 1 + + + 12:40 + 00:15 + We went to court against Apple &#8211; a case for Software Freedom + https://www.sfscon.it/talks/for-the-right-of-general-purpose-computers/ + + Breaking lock-ins over devices with Free Software + Breaking lock-ins over devices with Free Software + <p>Our smartphones, tablets, laptops, and other connected devices are general purpose computers. That means we can potentially run any software we want to make full use of the hardware. This potential is fostered by Free Software.</p> +<p>However, device manufacturers, vendors, and internet platforms have been restricting software freedom by exercising their monopolistic control over end-user equipment. This power is used over key features and components of devices such as operating systems, browsers, and app stores.</p> +<p>Basic freedoms such as installing and uninstalling software are being unfairly limited by these companies, commonly referred to as &#8220;gatekeepers&#8221;, because of their monopolistic control over devices.</p> +<p>As a concrete example, this talk will present the policy and legal work of FSFE in denouncing the detrimental commercial practices of a worldwide known gatekeeper: Apple.</p> +<p>Apple&#8217;s monopolistic power over its devices is detrimental to Free Software and a high risk for the right of general purpose computers. The company&#8217;s &#8220;notarization&#8221;, its barriers to software freedom and lack of interoperability are highly negative to Free Software.</p> +<p>In conclusion, this talk will present Device Neutrality as a policy solution to enable end-users to bypass gatekeepers in order to run Free Software independently of the control exercised by hardware manufacturers, vendors, and platforms. Device Neutrality can enable end&#8211;users to regain control over their devices.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Lucas Lasota + + 1 + 1 + + + 13:00 + 00:15 + 25 Years of Copyleft Enforcement: The Road Ahead for Defending Software Rights + https://www.sfscon.it/talks/25-years-of-copyleft-enforcement-the-road-ahead-for-defending-software-rights/ + + <p>In 1999, I worked my first GPL enforcement matter: a large storage had made proprietary modifications to GNU tar and failed to release the complete, corresponding source code to its customers. In early 2000, I did my first “CCS check” (complete, corresponding sourcecode check) — wherein one attempts to build the “CCS candidate” provided by the vendor to investigate whether the CCS candidate is actually complete, and whether it corresponds to the binaries that were distributed.</p> +<p>In those days, violations of copyleft licenses were rare, and once uncovered, companies eventually corrected their behavior. Yet, even then, it took years of work to convince the company to comply. And often, by the time compliance was achieved, a new generation of the product was released.</p> +<p>25 years later, we face the same problems with nearly every vendor.<br /> +Almost every product on the market today contains Linux, BusyBox, the GNU C Library, GNU Bash, and dozen other packages licensed under the GPL and/or LGPL. Almost none of these companies, even if an offer for source code is made, provide CCS.</p> +<p>This talk will look both to the past and future as we investigate software rights and freedoms of the average consumer, and how we reached this difficult situation. Attendees can learn the history of copyleft and its enforcement, and leave with an understanding of how much work remains and what individuals can do to make a real impact on the rights of users under copyleft.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Bradley Kuhn + + 1 + 1 + + + 13:20 + 00:15 + SPDXv3: Advancing Transparency in Software + https://www.sfscon.it/talks/spdxv3-advancing-transparency-in-software/ + + A newly released standard for complete information + A newly released standard for complete information + <p>SBOMs are a crucial tool for understanding the composition of software, which is particularly important in the context of managing security risks and licensing compliance. Recent regulatory efforts from, among others, the US and the EU, explicitly move towards requiring SBOM for each software delivery.<br /> +SPDX (System Package Data Exchange) is a freely available ISO standard that provides a set of specifications for communicating SBOM information. It offers a common format for companies and organizations to share important data accurately and efficiently.</p> +<p>This presentation will delve into the details of the newly released version of SPDX, providing a comprehensive understanding of their importance in the software industry.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Alexios Zavras + + 1 + 1 + + + 13:40 + 00:15 + (re)classifying FOSS licenses + https://www.sfscon.it/talks/reclassifying-foss-licenses/ + + New strategy for classifying licenses in a better way + New strategy for classifying licenses in a better way + <p>There are many efforts trying to classify licenses, for different use cases such as checking compatibility or for complying with the license terms. Most of these efforts seem to, explicitly or implicitly, have a certain use case in mind.</p> +<p>This project sets out to:<br /> +Consider provisioning case &#8211; how is the software provided to your user (e.g. binary distribution, SaaS, Web UI)<br /> +Consider use case &#8211; how is the software used (e.g. compiler, library)<br /> +Trust model &#8211; why should you trust the contributor of a classification or you should be able to exclude a contributor’s work etc<br /> +Identify and generalize FOSS license clauses<br /> +Identify and generalize when a clauses is triggered<br /> +Determine how clauses are compatible with each other (a license clause matrix)<br /> +Identify the clauses and triggers for each license</p> +<p>Keeping track of how 100 licenses are compatible with each other will result in a matrix with 10 000 (100 x 100) values. This is hard to maintain. Extending to 200 licenses requires 40 000 values. By instead looking at the license clauses we will end up with a much smaller problem, assuming we identify 20-30 of them, which will result in a matrix of 400-900 values. This is big, but maintainable. Adding a new license will not increase the size of the (license clause) matrix, which means that our approach scales much better. From the license definitions and license clause matrix we can compile a license compatibility matrix (for fast compatibility lookup).</p> +<p>This project sets out to provide to users:<br /> +A license obligation checklist for each provisioning case &#8211; for making compliance checks easy<br /> +A license compatibility matrix for each provisioning case &#8211; for fast compatibility lookup</p> +<p>All data and source code will be released under FOSS licenses.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Henrik Sandklef + + 1 + 1 + + + 14:00 + 00:15 + Lessons from the EU&#8217;s Next Generation Internet Initiatives + https://www.sfscon.it/talks/lessons-from-the-eus-next-generation-internet-initiatives/ + + What We've Learnt From Looking At 500 Free Software Projects + What We've Learnt From Looking At 500 Free Software Projects + <p>The FSFE is a consortium member of the EU&#8217;s Next Generation Internet initiatives (https://fsfe.org/activities/ngi/ngi.en.html). As part of our work there over the past 6 years, we have looked at hundreds of participating Free Software projects, to assist them with their legal and licensing questions, as well as to help them become REUSE compliant.</p> +<p>This talk will speak about some simple trends in Free Software legal and licensing that we&#8217;ve observed over the years in independent Free Software projects and their developers, and how these affect aspects of the Free Software ecosystem.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Gabriel Ku Wei Bin + + 1 + 1 + + + 14:20 + 00:15 + The ZOOOM project: final results and future outlooks + https://www.sfscon.it/talks/the-zooom-project-final-results-and-future-outlooks/ + + <p>The ZOOOM project, concluding in Sept 2024, aimed to raise awareness about the role of open licenses (open source software, open hardware, and open data &#8211; 3Os) in intellectual property valorization. In this talk, we&#8217;ll summarize key results, share recommendations for businesses leveraging 3Os, and demonstrate tools developed to aid knowledge generators and supporting organizations in navigating the legal and business implications of 3Os. Additionally, we&#8217;ll discuss the future of ZOOOM and its potential impact on the industry and research.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Elisa Morganti + + 1 + 1 + + + 14:40 + 00:15 + AI Law & Ethics: developing responsible AI systems + https://www.sfscon.it/talks/ai-law-ethics-developing-responsible-ai-systems/ + + <p>The aim of this talk is to explore AI law and ethics in developing responsible AI systems. It covers the forthcoming AI Act and EU regulations, focusing on accountability, risk management, and privacy-by-design. Through use cases, it shows how developers can ensure AI transparency, fairness, and compliance, balancing innovation with ethics. Attendees will gain insights for creating sustainable, ethical AI solutions.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Federico Sartore + Francesco Vadori + + 1 + 1 + + + 15:00 + 00:15 + Impact and Innovation: The Crucial Role of OSPOs in Shaping a More Sustainable Capitalism + https://www.sfscon.it/talks/impact-and-innovation-the-crucial-role-of-ospos-in-shaping-a-more-sustainable-capitalism/ + + <p>In an era where sustainability and responsible innovation are not just valued but expected, Open Source Program Offices (OSPOs) stand at the forefront of a transformative wave that merges open innovation with sustainable business practices. This session explores the pivotal role of OSPOs in fostering open innovation environments that not only drive technological advancement but also align with the principles of impact-oriented capitalism</p> +<p>We will delve into how OSPOs can leverage open source ecosystems to catalyze change within their organizations, promoting not just compliance and security but also environmental, social, and governance (ESG) goals. Through case studies and practical insights, attendees will learn how integrating OSPO strategies with corporate sustainability objectives can create a powerful synergy that propels companies toward a more ethical and profitable future.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Stefano Pampaloni + + 1 + 1 + + + 15:20 + 00:15 + From Personalized to Programmed + https://www.sfscon.it/talks/from-personalized-to-programmed/ + + The Dilemma of AI Customization + The Dilemma of AI Customization + <p>When considering the core values of mass customization, such as individual expression, fun in co-creating, and creativity, AI may introduce disadvantages, potentially leading to the homogenization of experiences. This lightning talk aims to explore the potential risks and drawbacks of utilizing AI in mass customization, highlighting the tension between leveraging technology for customization and preserving the unique human elements that form the foundation of personalized experiences. Could the reliance on algorithms diminish the consumer’s role in the creative process? If so, it might challenge the essence of what makes mass customization truly unique and innovative.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Thomas Aichner + + 1 + 1 + + + 15:40 + 00:15 + Fostering Innovation in IT Businesses through Open Source Software Involvement + https://www.sfscon.it/talks/fostering-innovation-in-it-businesses-through-open-source-software-involvement/ + + <p>All IT companies depend on free and open source software to some extent. Once they reach a certain size, they spontaneously become supporters of the projects on which they base their business. This happens because of first order consequences: my business depends on it, if I help it strive, my business will benefit.<br /> +In this talk, we will address the second-order consequences of software engineers interacting with open source projects, and show why dedicating internal resources to this activity is an effective strategy for enabling the discovery of new or modified (software) entities, which is the prerequisite for innovation.<br /> +The benefits are visible for companies of any size, even if their business does not depend on a specific project to which they could contribute: compelling arguments will be presented to motivate business owners to encourage their IT staff to engage in open source activities (and to developers to convince their bosses).</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Daniele Gobbetti + + 1 + 1 + + + 16:00 + 00:15 + Tackling Openwashers, Freeloaders and Cuckoos + https://www.sfscon.it/talks/tackling-openwashers-freeloaders-and-cuckoos/ + + How to safeguard the Free Software market against unfair competition + How to safeguard the Free Software market against unfair competition + <p>Companies that produce and sell Free Software face a problem: some competitors use unethical and destructive means to compete, making their products cheaper and winning bids. This kind of market behaviour is increasingly becoming a problem for Free Software producers.</p> +<p>Destructive practices include marketing proprietary software under the guise of being Free Software, whether by using free/open wording, by introducing new licences that falsely appear to be free, or by imposing additional barriers that make it more difficult to use the freedoms offered by Free Software.</p> +<p>Other competitors sell Free Software products without contributing to their development and maintenance, profiting from the work of others but giving nothing back to the community. This allows them to offer low prices while raising the costs of maintenance for the original manufacturers. For some players, there seems to be no limit to their creativity when it comes to undercutting competitors and winning bids.</p> +<p>The Free Software Foundation Europe has been analysing these and other problematic market practices over the last few years. In this talk we will take a closer look at them and show why they harm Free Software manufacturers and the Free Software ecosystem. We will then discuss ways to limit the success of such practices.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Johannes Näder + + 1 + 1 + + + 16:20 + 00:15 + Web Accessibility is actually well-forgotten old + https://www.sfscon.it/talks/web-accessibility-is-actually-well-forgotten-old/ + + <p>Trends are cyclical, even in the tech world. A few years ago, everyone was talking about D&amp;I in the workplace. This season, web accessibility absolutely occupies the first lines of code. How is it shown? Let&#8217;s talk about it &#8211; many do not understand how to implement it in their project.</p> +<p>First, relax. This is a really complex topic that requires not only a well-created website, but also communication with real users who cannot fully use the Internet, for example, without a screen reader.</p> +<p>A checklist that will convince you to try implementing WA into your application:</p> +<p>◦ What can be adapted for WA?<br /> +◦ How is WA testing done?<br /> +◦ How to use AI in WA?</p> +<p>If we haven&#8217;t convinced you, then look at WA from the point of view of strengthening your personal brand in the market.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Sofia Etingof + Juri Solovjov + + 1 + 1 + + + 16:40 + 00:15 + LibreOffice as JavaScript idiomatic WebWidget + Library + https://www.sfscon.it/talks/libreoffice-as-javascript-idiomatic-webwidget-library/ + + Making LibreOffice a native part of the web, using FOSS for highly customizable office document handling in the browser, based on WASM. + Making LibreOffice a native part of the web, using FOSS for highly customizable office document handling in the browser, based on WASM. + <p>LibreOffice can be highly integrated into desktop and server applications and we wanted to make this also possible for web apps. Running fully client side with Web Assembly, LibreOffice can now be used and customized by a JavaScript idiomatic API, becoming an easy usable component for web development. With this Free Software opens the door to a completely different approach for bringing office document handling into the browser, then from what&#8217;s known from Google Docs and Co.. Use cases may be the integration of widgets with rich text documents, including classic desktop macros, into browser based applications or enabling JavaScript to interact live with values in spreadsheets. But LibreOffice can also work as background WASM library, converting documents from and to all supported formats like ODF (ODT, &#8230;), MS formats (DocX, XlsX, Doc, &#8230;), PDF or HTML, while applying custom conversion filters for things like macro sanitization.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Moritz Duge + + 1 + 1 + + + 17:00 + 00:15 + Using software tools and AI to audit e-commerce food regulations + https://www.sfscon.it/talks/using-software-tools-and-ai-to-audit-e-commerce-food-regulations/ + + <p>Selling food products on a website or e-commerce platform in Italy is subject to the Food Information of Consumers (FIC) regulations. These regulations dictate mandatory information that must be communicated on the product page, with fines for non-compliance. In this talk, we will cover the key guidelines and legal requirements, and demonstrate how we can use software tools and artificial intelligence to check large quantities of product listings for discrepancies. Join us to learn how to streamline the process of verifying food information and enhance consumer trust.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Davide Montesin + + 1 + 1 + + + 17:20 + 00:15 + Tag manager + https://www.sfscon.it/talks/tag-manager/ + + <p>Presentation of our tool, which is an free alternative to Google Tag Manager and also helps manage cookie banners.</p> +<p>Features:<br /> +&#8211; code injector<br /> +&#8211; code templating<br /> +&#8211; cookie banner manger</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Sandro Antonucci + + 1 + 1 + + + 17:40 + 00:15 + State of Microsoft Windows Refund (2024) + https://www.sfscon.it/talks/state-of-microsoft-windows-refund-2024/ + + Getting a Refund of your Microsoft Windows License - present and future + Getting a Refund of your Microsoft Windows License - present and future + <p>If you are a lover of the Free Software movement you probably already tried something else than Microsoft Windows on a computer.</p> +<p>What you may not know, is that computer resellers usually charge end-users with the Fee of the Microsoft Windows License, even before you accept the Microsoft Terms of Services, and even if you completely want to uninstall Windows from your computer.</p> +<p>This is a critical Tech Neutrality issue that fuels non-European proprietary software houses. What to do?</p> +<p>&#8211; heritage of Luca Bonissi against Big Tech(s)<br /> +&#8211; current status and problems<br /> +&#8211; opportunities in Europe, and partnership between Free Software Foundation Europe and Italian Linux Society.</p> +<p>Thanksgiving to community members who tried the procedure, and simplifying that procedure.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Valerio Bozzolan + + 1 + 1 + + + + + 10:30 + 00:30 + Ada & Zangemann + + Side Event - School Reading + Side Event - School Reading + Side Event,School Reading + 0 + 0 + + + + + 11:00 + 00:15 + Open Access for Museum Collections and Research + https://www.sfscon.it/talks/open-access-for-museum-collections-and-research/ + + <p>The digital era has revolutionised the way we access information and interact with it. Museums, as custodians of cultural and historical artefacts, can benefit substantially from this transformation. Open Access and FOSS can greatly increase the potential of museums for public outreach: enhance their educational impact and inspire new forms of cultural engagement and knowledge discovery. For example, by digitising collections and enabling Open Access for diverse audiences, accessibility barriers are eliminated and thousands of hidden treasures become available to both researchers and the wider public. Additionally, innovative data visualisations via FOSS platforms can reveal compelling insights into object collections and the research associated with them; Open Access can thus make complex research accessible and engaging to a broader audience. Through such practices, museums can democratise their activities and enrich the visitor experience. The process is not without obstacles; common challenges museums face in adopting Open Access policies are copyright issues, data privacy, and resource limitations.</p> +<p>The presentation will discuss the aforementioned opportunities and issues currently emerging in the museum sector. The talk will be illustrated with examples from the Deutsches Museum in Munich, the world’s largest museum of science and technology.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Artemis Yagou + + 1 + 1 + + + 11:20 + 00:15 + Journeying through Data Spaces – New Path to Interoperability? + https://www.sfscon.it/talks/journeying-through-data-spaces-new-path-to-interoperability/ + + <p>Data spaces play a pivotal role in advancing digitalisation and interoperability within and across different business domains, both on a national level and cross-borders. However, it&#8217;s not a new concept since its roots date back to 2005. The definition has evolved over the years and today it covers all four layers of interoperability defined by the European Interoperability Framework (EIF).</p> +<p>Today, the term data space has several different definitions depending on whom you ask. Also, multiple international initiatives are working on data spaces to create common governance models, specifications, reference implementations, etc. The aim of this talk is to discuss the data space concept, different actors working on data spaces and their roles and responsibilities, and available specifications and building blocks.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Petteri Kivimäki + + 1 + 1 + + + 11:40 + 00:15 + DOOF – an Open Source Orchestration Framework for Decentralized Consent Management + https://www.sfscon.it/talks/doof-an-open-source-orchestration-framework-for-decentralized-consent-management/ + + <p>DOOF stands for Data Ownership Orchestration Framework. It is a framework developed for NGI Trustchain Project within a broader Next Generation Internet scheme of the EU in order to address a lack of decentralization in consent management regarding users’ sharing of their data. The aim of DOOF is to revolutionize personal data governance and normalise the deployment of consent management and privacy enhancing technologies. It uniquely enables individuals to control their rights over data sharing, fostering greater trust and regulatory compliance, essential for building a resilient and transparent data economy.<br /> +DOOF targets the gap in current centralized consent management, where GDPR and Data Act demand seamless data exchange and regulatory compliance. Yet the sharing and consent management regarding users’ data is centralized &#8211; a responsibility of the data intermediary &#8211; which comes with great costs and liabilities.<br /> +With DOOF, Ecosteer aims to separate and decouple the layer of physical data transferring from the layer of consent management. DOOF offers companies a framework that allows them to easily adopt Privacy Enhancing Technologies (PETs) for the actual sharing of data and enforcement of users’ decisions.<br /> +The framework consists of a set of SDKs, libraries and a Smart Contract for decentralised consent management. The main component of the framework is a worker pipeline, consisting of extensible, plug-in processors. This pipeline contributes to the low-code movement, offering a framework that can be easily adapted to different business needs. Companies can easily build verticals on this existing framework by just extending some of its functionalities.<br /> +This talk will focus on the concept of decentralized consent management as well as pipeline-based orchestration framework, outlining the process of creating a novel, re-usable and extensible open-source project.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Georgiana Bud + + 1 + 1 + + + 12:00 + 00:15 + Accelerating territory&#8217;s development through Open Data + https://www.sfscon.it/talks/accelerating-territorys-development-through-open-data/ + + Open Data Hub and south tyrolean examples + Open Data Hub and south tyrolean examples + <p>In recent years, Open Data has revolutionized the way governments, companies and individuals access and use information. The openness of public and private data represents a milestone on the path towards a more transparent, participatory and competitive society.<br /> +Open Data represent a resource for society and businesses and contribute to the development of a territory. This added value manifests itself in various forms, including transparency and democratic participation, technological innovation, economic development and improved services.<br /> +The talk will focus on specific case studies from the Open Data Hub in the Autonomous Province of Bolzano, a region which has shown a strong commitment to the adoption and promotion of Open Data.<br /> +Through the analysis of these cases, the aim is to demonstrate how the initiatives based on Open Data have led to concrete and tangible results, offering useful and applicable insights also in extra-regional contexts.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Luisa Marangon + + 1 + 1 + + + 12:20 + 00:15 + Sensor Things API QGIS core provider + https://www.sfscon.it/talks/sensor-things-api-qgis-core-provider/ + + <p>Sensor Things API (STA, in short), is an OGC specification for storing and retrieving (timeseries of) Sensor Observations.</p> +<p>FROST-Server, developed by Fraunhofer IOSB, is one of the most consolidated implementations of STA with a very detailed documentation and a lot of background information. The implementation includes a REST endpoint to insert, modify and retrieve STA entities with a query language based on OASIS Odata URL patterns and query options.</p> +<p>A QGIS experimental plugin, developed by Deda Next srl in 2022 and implemented in python within the EU project Air-Break, is currently available to connect to STA-compliant endpoints and retrieve sensor data (e.g. European Air Quality data from this endpoint). The plugin has an embedded data provider which is currently designed to retrieve sensors&#8217; locations as geometrical features and then request the time series of observations for specific locations.</p> +<p>However, in order to offer support to a wider range of use cases and more complex queries on STA model entities, Faunalia and DedaNext (funded by BRGM) started to plan for a dedicated STA data provider for GIS: a development group was set up involving the QGIS community, formal acceptance of the proposal was sought within the QGIS community (QEP #257) and possible development options for the provider (ex: python vs C++) were analyzed. As STA is an OGC standard, it seemed appropriate to implement it in C++ as a core element of QGIS.</p> +<p>Development has therefore been carried out in close interaction with the QGIS developer community with the focus on supporting complex STA queries, implementing among other things:</p> +<p>&#8211; expansion of relations among model entities;<br /> +&#8211; independent attribute filtering and sorting on all entities;<br /> +&#8211; efficient data caching to limit unnecessary data transfers;</p> +<p>This new core element is available from QGIS version 3.37 (currently only available as nightly release).</p> +<p>Finally, plans are underway to develop a new version of the QGIS STA plugin (originally developed by Deda Next within project AirBreak) focused on data exploration and analysis that will be able to leverage on the newly released core STA data provider to support a wider range of use cases, such as:</p> +<p>&#8211; Time series analysis: This is the case of the old STA plugin. Fetch Locations, show them on the map. Then, upon selection of one location, fetch all related Things and Datastreams, and finally, fetch the Observations of the desired Datastream to be shown in a table or plot;<br /> +&#8211; Space-time series analysis: Given a selected set of Datastreams from a moving sensor, get all the FeaturesOfInterest of those Datastreams and plot them on the map, so to have a view of the path of the moving sensor and a hold on its values on every part of that path;<br /> +&#8211; Monitoring and inspection: Fetch all the latest observations of all Datastreams (or a selection based on the ObservedProperty) and show these at their Locations, styled by the result of the latest Observation of a given ObservedProperty. Then, in a second phase (eg. if a value is over a threshold), inspect the full timeseries of that one Datastream.<br /> +&#8211; Tracking of moving things: Show all Things with their current Location and their HistoricalLocations with the Temporal Controller (time slider).</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Matteo Ghetta + Luca Giovannini + + 1 + 1 + + + 12:40 + 00:15 + EO4MULTIHAZARDS Web Application + https://www.sfscon.it/talks/eo4multihazards-web-application/ + + <p>The EO4MULTIHA project (https://eo4multihazards.gmv.com/), funded by the European Space Agency, aims at developing an open database gathering and harmonizing event information coming from already existing event databases to support multi-hazard(-risk) research.<br /> +To pursue this aim, this project which has been developed in the EURAC research, Center for Sensing Solutions, presents a comprehensive web application designed to analyze and visualize multi-hazard events, developed using Django and PostgreSQL. Leveraging the strengths of open-source technologies, the application provides a robust platform for researchers, policymakers, and the public to access and understand the complexities of multi-hazard scenarios. The main parts of this web application is explained in the following paragraphs:</p> +<p>(i) The core of the application is built with Django, a high-level Python web framework known for its rapid development capabilities and clean, pragmatic design. PostgreSQL, a powerful and scalable open-source relational database system, ensures efficient data storage and management. Together, these technologies offer a reliable and flexible foundation for handling diverse and large datasets.</p> +<p>(ii) To visualize the events, Leaflet Map which is an open source contributor to the OpenStreet Map has been used.</p> +<p>(iii) To populate the database, the application exploits various RESTful APIs, integrating data from multiple sources, including satellite imagery, climatological records, in-situ measurements, and relevant statistical data. This multi-source approach allows for a comprehensive characterization of risks, exposures, and susceptibilities associated with multi-hazard events benefiting from the Open Data Standards such as OGC Standard.</p> +<p>(iiii)Key features of the application include spatial and temporal filtering of events, cross-linking of data sets for enhanced reusability, and compliance with open standards such as RESTful APIs and OGC standards. The platform is designed to be expandable, with the potential to incorporate additional locations and datasets in the future.</p> +<p>By providing an accessible online platform, this web application aims to support the understanding and analysis of multi-hazard events, facilitating informed decision-making and effective disaster management strategies. The use of open-source technologies and the integration of diverse data sources underscore the project&#8217;s commitment to innovation, scalability, and community-driven development.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Mahtab Niknahad + + 1 + 1 + + + 13:00 + 00:15 + BASIC CORE South Tyrol + https://www.sfscon.it/talks/basic-core-south-tyrol/ + + A project to solve the topographical complexity of the National Spatial Data Catalogue + A project to solve the topographical complexity of the National Spatial Data Catalogue + <p>The project has its roots in a precise and simplified cartographic updating methodology introduced by the Consortium of Municipalities of the Province of Bolzano in the early 2000s. This methodology, which was consolidated over the years, could no longer be applied following the adoption of the Territorial Data Catalogue (Ministerial Decree 10.11.2011 &#8220;Technical rules for defining the content specifications of geotopographic databases&#8221; and subsequent amendments) due to the complexity and articulation of the new national model. The primary objective of the project was to research and define a minimum set of information that could adequately describe the territory within the typical use context of the public administration, ensuring its sustainability in terms of the ability to keep it updated and aligned with the transformations of the territory. Simplifying the definition and understanding of the basic technical layer that every public administration producing geographic data must guarantee within their institutional activities for geotopographic databases is a fundamental step to adequately support territorial management. Lightened of the informational content already managed by the Provincial Administration within archives or sectoral Information Systems, and consequently already included in existing and consolidated maintenance and updating flows, as well as everything that can be considered three-dimensional data nowadays obtainable through faster and more accurate systems, the Basic Core (BC) specification was produced by reorganizing and simplifying the information levels contained in the National Territorial Data Catalogue with reference to the identified minimum subset of required information known as the National Core (NC). To make it practically usable, only the themes considered objectively useful and easily updatable were included in the Basic Core. Our presentation will outline the key points that enabled the design of the Basic Core content specification and illustrates the technological tools developed, as well as the automatic transformation and simplification procedures that led to the significant reduction in the number of object classes provided by the National Core (from 59 to only 23), demonstrating that the Basic Core project is not a merely theoretical exercise, but a practical and concrete application currently tested and successfully used in South Tyrol. The specifically developed Dashboard for managing, correcting and updating the provincial Geotopographic Database, built on the basis of this new simplified specification, will be explained in detail. This dashboard allows effective operation on every management aspect, including the crucial task of sharing maintenance responsibilities between the Provincial and Municipal levels, thus ensuring the full efficiency of this fundamental geographic base. Particular attention will be given to illustrating the guided editing functionality available directly from the online interface, as well as the options for creating and exporting QGIS projects. QGIS projects are designed to perform the most significant and advanced corrections and/or updates. We will conclude the overview of this innovative system with a demonstration of the processes for reimporting and validating the updated data. Finally, practical cases in which the Basic Core has been used will be presented, as well as future developments, already planned and those still under evaluation, that the system will receive in order to refine and make its use more robust.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Edoardo Scepi + + 1 + 1 + + + 13:20 + 00:15 + Sharing Connects People + https://www.sfscon.it/talks/sharing-connects-people/ + + The experience of Think Open at CIMeC + The experience of Think Open at CIMeC + <p>Think Open is an Open Science initiative born within CIMeC in 2018 whose goal is to build a virtual space within which researchers at the Center can share different kinds of outputs from research, integrating and merging information from different sources and stages of the knowledge-building process. A number of achievements have been made over the years, both from the point of view of training (seminars, hands-on, courses for doctoral students, awards, etc.) and implementation of best practices (code and data sharing, adoption of free-software tools, etc.). Here we will describe how sharing open practices in everyday working routines foster connections between people, creating practice-based communities.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Vittorio Iacovella + + 1 + 1 + + + 13:40 + 00:15 + Hacking your (electric) car: the importance of Open Data + https://www.sfscon.it/talks/hacking-your-electric-car-the-importance-of-open-data/ + + Gathering information from the OBD (On Board Diagnostic) port of your car could be challenging + Gathering information from the OBD (On Board Diagnostic) port of your car could be challenging + <p>Any car has a diagnostic connector from which you can gather and/or set data from the various ECU (Engine Control Unit) that are present in your car, such as odometer, temperatures, motor rotation speed, accelerator depression percentage, wheel angle, lights, and – in an electric car – information about battery, remain energy, charging/discharging power, etc.<br /> +The big challenge is that the meaning of fathered data is usually not known and car manufacturers are reluctant to share this information.<br /> +This talk will illustrate how to scan the available data and make reverse engineering in order to try to create a shared database containing (useful) car data and PIDs (Parameter IDs) from ECUs of your car.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Luca Bonissi + + 1 + 1 + + + 14:00 + 00:15 + The Innovation Paradox + https://www.sfscon.it/talks/the-innovation-paradox/ + + Do you really know how to unleash and manage innovation? + Do you really know how to unleash and manage innovation? + <p>In the era of the Fifth Industrial Revolution, leaders, innovators and pioneers design, generate, and shape future-proof organizations, driven by a meaningful purpose promoting social impacts, combining emerging technologies and new ways of collaborating and conceiving work. While the &#8220;why&#8221; is clear and quite declared by many, the &#8220;what&#8221; to do and the &#8220;how&#8221; to do it remain very nebulous and, in some cases, obscure. Those ones who lead innovation within an organization suffer the innovation paradox: must innovate without knowing what and how. Innovators and pioneers are often alone, without a framework and processes for an open innovation execution. How can we unlock and unleash innovation, ensuring that the actions taken are always driven by what is truly needed to evolve your organization?</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Andrea Solimene + + 1 + 1 + + + 14:20 + 00:15 + The FSFE Italy Project from Understanding to Testing + https://www.sfscon.it/talks/the-fsfe-italy-project-from-understanding-to-testing/ + + How I applied design-thinking to re-design the Italian Free Software Community + How I applied design-thinking to re-design the Italian Free Software Community + <p>The role of Deputy Coordinator Italy within the Free Software Foundation Europe (FSFE) was born in 2022 out of the need of re-establishing the presence of the Foundation on the territory. I designed this three years experimental project together with the <a href="https://freesoftwarelab.noi.bz.it/">Free Software Lab</a> of NOI Techpark with the value proposition of (re)designing the FSFE Italian Community.</p> +<p>The project followed a human centric approach, moving along the five core stages of design-thinking. The goal of my talk is to describe the FSFE Italy project and the design-thinking approach adopted.</p> +<p>The first year (Y1) served as the understanding phase: I got involved as an FSFE representative in the main communication channels used by the Free Software (FS) community on the territory. I conducted interviews with volunteers, associations’ heads and enthusiasts, took part into the main FS events organized on the territory, mapped all stakeholders (understanding-observing) and created my own point of view (POV). By the end of 2022 I had already became an established FSFE representative on the territory, having gathered inputs and ideas on how to kick off the community into year two (Y2). The goal of year two was to build on these new ideas (ideation) and put these thoughts into action (prototyping) by finding common goals and activities with the main FS associations active on the territory and signing Memorandum of Understandings, preparing the ground to test it in the third year (Y3). Guess what was the result?</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Marta Andreoli + + 1 + 1 + + + 14:40 + 00:15 + NGI: No more EU funding for Free Software?! + https://www.sfscon.it/talks/ngi-no-more-eu-funding-for-free-software/ + + <p>During the summer the European Commission made the decision to stop funding Free Software projects within the Next Generation Internet initiative (NGI). This decision results in a loss of €27 million for software freedom. Since 2018, the European Commission has supported the Free Software ecosystem through NGI, that provided funding and technical assistance to Free Software projects. This decision unfortunately exposes a larger issue: that software freedom in the EU needs more stable, long-term financial support. The ease with which this funding was excluded underlines this need.<br /> +This talk shows the urgent need for sustainable, long-term financial support for Free Software to ensure Europe&#8217;s technological independence.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Alexander Sander + + 1 + 1 + + + 15:00 + 00:15 + What the open source community means to me + https://www.sfscon.it/talks/what-the-open-source-community-means-to-me/ + + Some very personal thoughts on why contributing can enrich your life + Some very personal thoughts on why contributing can enrich your life + <p>Everytime I tell my friends about my hobby which noawadays has also become my job, I face lots of questions. A worldwide community? Contributors around the globe? An open source community? What is this all about?</p> +<p>In this talk, I&#8217;d like to share my very personal view about what the open source community means to me, how to grow from user into community member, how the credit of trust helps you to discover your own skills, how to make friends around the world and why it&#8217;s not only fun to get active in a community, but also a big benefit for your whole life that can help you to broaden your mind.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Florian Effenberger + + 1 + 1 + + + 15:20 + 00:15 + A Journey of Contribution and Collaboration in Open Source + https://www.sfscon.it/talks/a-journey-of-contribution-and-collaboration-in-open-source/ + + Why Foundations are Essential + Why Foundations are Essential + <p>Have you ever worked on a project that didn&#8217;t use any open source tools, libraries, or products? Didn&#8217;t think so&#8230;Using open source has been such an integral part of our daily work life that we don&#8217;t even think about it. We just expect it to be available, secure, stable, and bug-free. But how many of you are actually contributing back to an open source project?</p> +<p>This session will go through a couple of the aspects to consider when you are embarking on your open source journey. We will look at different kinds of open source projects, and what the open source foundations bring to the table.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Ivar Grimstad + + 1 + 1 + + + 15:40 + 00:15 + Jakarta EE: Why and how to get involved in Open Source Software? + https://www.sfscon.it/talks/jakarta-ee-why-and-how-to-get-involved-in-open-source-software/ + + <p>In this session you will learn how to become part of an open source community, how to get involved and most importantly why you need to do it! You will learn about the Jakarta EE and its plans for the future, so you can start right away! This presentation will also provide you with key insights into the industry-wide, open source collaboration to modernize Java enterprise systems for cloud-centric use cases.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Tanja Obradovic + + 1 + 1 + + + 16:00 + 00:15 + From Concept to Camp: Project Management Strategies for IT Education Events + + + <p>In today’s fast-paced technological landscape, the need for immersive and hands-on educational experiences is more crucial than ever. &#8220;From Concept to Camp: Project Management Strategies for IT Education Events&#8221; delves into the meticulous process of organizing successful IT camps from a project management perspective.</p> +<p>Join us as we explore the comprehensive journey of bringing an IT camp from initial concept to a fully realized event. We will cover essential project management strategies, including planning, scheduling, resource allocation, risk management, and post-event evaluation. Participants will gain insights into: Defining Objectives and Scope; Budgeting and Resource Management; Team Collaboration and Leadership; Marketing and Participant Recruitment; Logistics and Event Planning; Evaluation and Feedback.</p> +<p>Through real-world examples and practical advice based on the Red Hat Summer Camp Brno project, this talk will equip you with the tools and knowledge needed to transform your vision of an IT camp into a reality.</p> +<p>Whether you’re planning your first event or looking to enhance your current approach, this session will provide valuable takeaways to elevate your project management skills and deliver exceptional educational experiences.</p> + + SFSCON + SFSCON + SFSCON + + Juri Solovjov + Yuliia Kliuchnikova + + 1 + 1 + + + 16:20 + 00:15 + Building the Public Interest Desktop + https://www.sfscon.it/talks/building-the-public-interest-desktop/ + + Our experience organizing GNOME's Sovereign Tech Fund project + Our experience organizing GNOME's Sovereign Tech Fund project + <p>The Sovereign Tech Fund is a new funding program for critical free software infrastructure by the German government. As part of this, members of the GNOME community have been working on fixing important issues across the free desktop stack. This includes security, accessibility, maintainability, hardware support, and more.</p> +<p>In this talk Sonny and Tobias will give an overview of how we organized the project, the work done as part of it, and the massive impact a relatively small amount of public money can have on making the free desktop better.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Tobias Bernard + Sonny Piers + + 1 + 1 + + + 16:40 + 00:15 + Let&#8217;s share our love for Free Software + https://www.sfscon.it/talks/lets-share-our-love-for-free-software/ + + I love Free Software Day 2025 + I love Free Software Day 2025 + <p>We often underestimate the power of a simple Thank You. Free Software contributors do important work for our society and the &#8220;I Love Free Software Day&#8221; on 14 February is the perfect opportunity for you to express your special gratitude. Since 2010, we have celebrated this wonderful annual event with an ever-growing and diverse community. ♥</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Ana Galan + + 1 + 1 + + + 17:00 + 00:15 + MoodleXR: A Next-Generation Open-Source Platform for Immersive Learning + https://www.sfscon.it/talks/moodlexr-a-next-generation-open-source-platform-for-immersive-learning/ + + <p>This project aims to develop a state-of-the-art Learning Management System (LMS) based on Moodle, optimized for delivering Virtual Reality (VR) and Augmented Reality (AR) learning modules.</p> +<p>By leveraging the open-source nature of Moodle and integrating advanced immersive technologies, the project seeks to create an innovative educational platform that transforms traditional learning experiences.</p> +<p>The LMS will incorporate open-source VR/AR tools and libraries, such as A-Frame, AR.js, and Blender, enabling educators to seamlessly integrate and manage immersive content. It will support various VR headsets and AR devices, ensuring broad accessibility. The platform will feature interactive learning modules, robust analytics, and scalable infrastructure, all built on open-source technologies like Kubernetes and Matomo.</p> +<p>Additionally, the project will emphasize accessibility and privacy compliance, utilizing tools like WAVE and Let’s Encrypt.</p> +<p>By fostering a community-driven development model, this LMS will offer a flexible, cost-effective solution that revolutionizes education through experiential learning, making it more engaging, interactive, and effective for students and educators alike.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Luca Bagna + + 1 + 1 + + + 17:20 + 00:15 + Implementing digital examinations in free software systems + https://www.sfscon.it/talks/implementing-digital-examinations-in-free-software-systems/ + + <p>In Finnish upper secondary schools course and final exams have been digital for some years now. Ordinary student laptops are routinely booted from USB flash drives to a special operating system, which provides a restricted environment allowing students to take an exam with no distractions or tools to cheat. Up to these days, this was implemented with Debian GNU/Linux, also meaning that student laptops must be Linux-compatible.</p> +<p>This is now changing. Not every modern laptop can simply boot from a USB drive to run Linux, these including chromebooks, Apple laptops and some new Windows laptops. Some schools may want to buy these devices and do not want a separate set of computers only for examinations. The current system is being replaced by an exam application, meant to run on different operating systems, which are to provide guarantees that no cheating can occur. The exam application activates the &#8220;assessment mode&#8221;, provided by operating system vendors, and this mode should provide a safe place where no cheating can occur, even on computers owned by the students.</p> +<p>Does that even make sense? Can that really be done, and with free software? In this presentation we take a peek at some technologies in Linux systems that can be used to secure a computer against an attacker with a physical access to the machine. We will also look at possible ways to implement an &#8220;assessment mode&#8221; in Linux desktops.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Juha Erkkilä + + 1 + 1 + + + 17:40 + 00:15 + Let’s spark children’s interest in coding + https://www.sfscon.it/talks/lets-spark-childrens-interest-in-coding/ + + Our experiences and how you can contribute + Our experiences and how you can contribute + <p>Today it is impossible to imagine daily life without software. The majority of us can&#8217;t spend a single day without using it. People use software in the workplace, on laptops, and on mobile phones. Software is also found in less obvious places however: in trains, cars, televisions, washing-machines, fridges, and many other devices. None of these devices could function without software. Without software we couldn&#8217;t write e-mails, make phone calls, go shopping, or travel as we are accustomed to. Software is our society&#8217;s central tool. How do we ensure that the next generation is motivated and capable of shaping technology for society&#8217;s benefits?</p> +<p>The Free Software Foundation Europe&#8217;s volunteers and staff have interacted with over 1700 children between 6 to 10 years in the past months. Children, especially girls, afterwards were motivated to start experimenting with hardware and software. In the discussions we saw that they realise how crucial technology will be for them. Furthermore with the FSFE&#8217;s coding competition &#8220;Youth Hacking 4 Freedom&#8221; we gathered experiences working with teenagers who program, tinker, and have fun with software.</p> +<p>Learn more about the experiences how the FSFE sparks children&#8217;s and teenagers interest to tinker, experiment and program. Furthermore you will see how fulfilling those activities can be for yourself.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Matthias Kirschner + + 1 + 1 + + + + + 11:00 + 00:15 + Open-source silicon chips + https://www.sfscon.it/talks/open-source-silicon-chips/ + + <p>We have all heard that there is &#8216;Intel inside&#8217;, but what is inside Intel? Almost all integrated circuits today are literally black boxes. They may contain unwanted or malicious features and, most importantly, they do not encourage reuse, nor do they allow it. The two main causes of such secrecy are: 1. standard design tools explicitly forbid the publication of any output, and 2. most foundries disallow disclosing technology details. Designers moreover face additional problems: The licence cost of standard design tools is unaffordable for most SMEs (unless questionable discount policies are applied), and lock-in threats arise at many levels, from IP blocks to foundry details to file formats. Yet exceptional progress has been made in recent years: Hundreds of silicon chips have been designed using free and open-source tools, and three foundries have made details of their processes public: The doors to free silicon are open! Hence how is politics reacting? What are the next steps to be taken? What are the opportunities for users, society and companies?</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Luca Alloatti + + 1 + 1 + + + 11:20 + 00:15 + Opt out? Opt in? Opt Green! Bringing Free Software To Eco-Consumers + https://www.sfscon.it/talks/opt-out-opt-in-opt-green-bringing-free-software-to-eco-consumers/ + + <p>Free Software gives consumers what they want, but many don&#8217;t know it &#8230; yet! We aim to change that by reaching out directly to eco-consumers in the &#8220;Opt Green&#8221; project, a new KDE Eco initiative funded by the German Environmental Agency.</p> +<p>Consumers want sustainable software: in a recent European poll 50% of respondents say the two primary reasons they purchase a new device are non-functioning software and software performance issues. This is as good a time as ever for an &#8220;Opt Green&#8221; message. In the next couple of years Windows 10 end-of-life and the phasing out of Intel-based macOS support will make e-waste out of hundreds of millions of computers. Functioning but vendor-abandoned devices can stay out of the landfill and in use for many years to come. With software designed for users&#8217; needs, not vendors&#8217;, it is possible to run software on the devices one already owns. Lean, efficient Free Software even runs on devices that are decades old. This is good for users, and better for the environment!</p> +<p>In this lightning talk I will provide an overview of the whys and hows of KDE Eco&#8217;s &#8220;Opt Green&#8221; initiative. Through campaigns and workshops over the next 2 years, we will raise awareness about environmental issues driven by software and demonstrate the power of Free Software to drive down resource use and keep devices running smoothly for years beyond official vendor support. This is all possible because Free Software *is* right-to-repair software: it removes vendor dependencies and guarantees transparency and user autonomy, providing full control over software, and thus hardware. I will describe the ways we plan to reach our target audience, including materials designed for eco-consumers and events well outside usual tech circles, such as open-air organic, artisanal, and fair trade markets, cultural centers, and others. These activities give us the opportunity to align our values in the Free Software community with those in allied communities striving for a sustainable modern lifestyle.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Joseph P. De Veaugh-Geiss + + 1 + 1 + + + 11:40 + 00:15 + ClapMetrics: Decoding Users’ Gender and Age Through Smartwatch Gesture Dynamics + https://www.sfscon.it/talks/clapmetrics-decoding-users-gender-and-age-through-smartwatch-gesture-dynamics/ + + <p>In this presentation, we introduce ClapMetrics &#8211; an innovative and seamless method for deducing the gender and age of smartwatch users. This system ingeniously harnesses the capabilities of the smartwatch’s integrated 3D sensors — specifically, the accelerometer and gyroscope—to capture the wearer’s arm movements during a clapping action. ClapMetrics operates on the principle that each clap is a complex interplay of motion, unique to the individual, much like a fingerprint. By analyzing these movements, ClapMetrics can gather rich biometric data without any active input or effort from the user, making it a remarkably non-intrusive technology. We will delve into the specifics of how ClapMetrics processes sensor data to make its estimations. We will explore the Neural Network’s architecture, the training process, and how the model interprets the sensor data to make reliable predictions about the wearer’s gender and age.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Attaullah Buriro + + 1 + 1 + + + 12:00 + 00:15 + Adoption Determinants of Open Hardware Across Industries + https://www.sfscon.it/talks/adoption-determinants-of-open-hardware-across-industries/ + + <p>Open Hardware (OH) is revolutionizing the way we approach technology in several areas, such as agriculture and healthcare. These areas, which are fundamental to food availability and human well-being, are undergoing an important shift as open hardware licensing strategies, inspired by open-source software (OSS), make solutions more accessible, affordable, and customizable. In this talk, we review major factors determining the use and adoption of OH technologies, including economic advantages, opportunities, and challenges.<br /> +Similar to OSS, OH applications are gaining momentum. In agriculture, farmers and researchers are turning to OH for precision farming tools, environmental monitoring, and robotics. These technologies not only reduce development costs but can be easily adapted to specific local needs, enhancing their effectiveness in diverse agricultural environments – crucial for small-scale farmers in developing countries and rural areas who face financial constraints. Likewise, the healthcare industry is benefiting from OH through the development of affordable medical devices, diagnostic tools, and treatment systems. The high costs and regulatory challenges associated with traditional medical devices often limit access to essential healthcare, especially in underdeveloped regions. Examples include open-source ventilators, syringe pumps, and diagnostic devices.<br /> +Applications of OH will be showcased through a comparative analysis of successful projects, particularly those with high engagement on platforms like GitHub, characterized by community engagement, active forums, and regular updates. Finally, we will draw conclusions about the potential of OH for industries beyond agriculture and healthcare, encouraging further innovation and collaboration in the open-source community.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Seckin Celik + Davide Serpico + + 1 + 1 + + + 12:20 + 00:15 + Enabling global interoperability among smart devices is only possible through Open Source + https://www.sfscon.it/talks/enabling-global-interoperability-among-smart-devices-is-only-possible-through-open-source/ + + Oniro and OpenHarmony a cooperation to build a global ecosystem + Oniro and OpenHarmony a cooperation to build a global ecosystem + <p>Global interoperability is probably the biggest problem that smart devices have been studied for more than 10 years. Multiple solutions have been proposed with different results, but none of them has established a reference framework and a global adoption. One of the main reasons for this to stay as a key element for research and investment is the diversity among the whole technology stack and geographical dispersion of device manufacturers. In the last years, there is a solution that is capturing the attention by demonstrating how an open source operating system can enable global interoperability in a huge domestic market like China. This solution is OpenHarmony and through a cooperation with Eclipse Foundation Oniro project, it is intended to use open source to drive interoperability and therefore solve one of the biggest challenges in the IoT and smart device industry. During the talk, it will be presented the approach followed by these two independent initiatives to cooperate while keeping the independence of the open source communities behind them.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Juan Rico + + 1 + 1 + + + 12:40 + 00:15 + Smart Werke Meran &#8211; Lorawan Use Cases + https://www.sfscon.it/talks/smart-werke-meran-lorawan-use-cases/ + + Our Use Cases realized with 100% Open Source + Our Use Cases realized with 100% Open Source + <p>Stadtwerke Meran has had a Chripstack Lorawan server and 19 Lorawan gateways for a year now. Merano has a well-developed Lorawan network.</p> +<p>We have realized the following use cases:</p> +<p>Remote control of public lighting.<br /> +Temperature measurement ( Just Nature project)<br /> +Smart metering for our water customer<br /> +GPS tracking for waste compactors of our major customers</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Stefan Mutschlechner + + 1 + 1 + + + 13:00 + 00:15 + 2025 scenario on OpenISA OpenPower Open Hardware computing + https://www.sfscon.it/talks/2025-scenario-on-openisa-openpower-open-hardware-computing/ + + 2025 Real scenario on Open Hardware based on OpenISA OpenPower CPU + 2025 Real scenario on Open Hardware based on OpenISA OpenPower CPU + <p>We see on 2025 which OpenISA OpenPower low power chip will give life to new Open Hardware computers, we examine in detail which open hardware computers will be ready for 2025 based on these chips. It will be the first time that OpenPower OpenISA low power Chip will be produced, and what is more, it will be produced from other Silicon Companies different from IBM.<br /> +We will see who are the GNU/Linux distros that support PPC64 and PPC64el and PowerPC architecture that runs on these computers and how you can join to experiment with it and push forward these architectures.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Roberto Innocenti + + 1 + 1 + + + 13:20 + 00:15 + The SMART Box of AURA Project + https://www.sfscon.it/talks/the-smart-box-of-aura-project/ + + <p>AURA project centers on the development of &#8220;Green &amp; Smart Urban Furniture,&#8221; a new generation of urban furniture that transcends traditional roles by incorporating eco-friendly and intelligent features. These urban elements are designed with bioabsorbent vegetation capable of mitigating atmospheric pollutants, making them environmentally sustainable. Furthermore, they are outfitted with advanced IoT sensors that monitor a range of environmental parameters, including climate data, urban pollution, and vehicular traffic.</p> +<p>These smart urban furniture units not only establish an extensive urban monitoring network but also actively combat pollution through the sequestration and reduction of harmful substances via the integrated vegetation. The embedded IoT sensors provide innovative capabilities for tracking the impact of these elements on the surrounding urban environment, such as monitoring air pollution levels and assessing the effects of heat islands. Each furniture piece is equipped with a &#8220;smart box,&#8221; a hardware system constructed using low-cost commercial off-the-shelf (COTS) components. This system includes climate and environmental sensors, gas measurement devices, a processing unit, and a data transmission module. The accompanying software, developed from scratch, delivers localized information—such as CO2 sequestration, temperature, and humidity—and contributes to a comprehensive environmental monitoring network aimed at predictive analysis, including weather risks, heat wave alerts, and health risks associated with air pollution. The presentation will delve into the custom-developed software and its ability to meet the field-level requirements of the AURA Architecture, encompassing individual sensors, sensor nodes (smart-boxes within the furniture), and the broader network of these nodes. It will highlight the significant impact and benefits of utilizing free and open-source technologies throughout the development process. Key focus areas include the creation of drivers for individual sensors, with emphasis on the most representative examples, the development of software for sensor nodes—covering features like self-testing, over-the-air (OTA) updates, and MQTT communication—and the design of a dynamic web app for data presentation, leveraging JavaScript, Bootstrap, and a JSON Data Lake. This comprehensive approach underscores the importance of open technologies in accelerating innovation, ensuring flexibility, and delivering robust, scalable solutions for smart urban environments.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Angelo Serino + + 1 + 1 + + + 13:40 + 00:15 + Raspberry Pi and Node-RED: Open Source Tools for Local Automation and Industrial IoT applications + https://www.sfscon.it/talks/raspberry-pi-and-node-red-open-source-tools-for-local-automation-and-industrial-iot-applications/ + + <p>This talk will explore how Raspberry Pi and Node-RED enable robust solutions for automation and control systems in both industrial and local applications. Leveraging open-source technology, these platforms can handle a wide range of tasks, from reading sensor data and managing actuators, to controlling devices through industrial communication protocols such as Modbus, RS485 ascii RTU etc. Node-RED&#8217;s message-driven architecture simplifies the creation of control logic, even for complex operations, while Raspberry Pi serves as a powerful and cost-effective alternative to traditional PLCs and IPCs. The integration of these tools allows for seamless data processing, remote communication, and the development of HMI interfaces both user-friendly or more traditiconal SCADA-like, making these technologies ideal for creating IIoT-native solutions. This presentation will focus on the technical capabilities, showing how these platforms can empower engineers and developers to build flexible and scalable automation solutions.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Federico Boero + Alberto Nicoletti + + 1 + 1 + + + 14:00 + 00:15 + Approaches to Object Detection: Edge-Based and AI-Based + https://www.sfscon.it/talks/approaches-to-object-detection-edge-based-and-ai-based/ + + <p>This presentation explains why we passed to the expert system based on edge-based object detection on traditional image analysis techniques to the AI-based, leveraging advanced machine learning. The first method uses parameters derived from image analysis tools, focusing on attributes such as shape, size, and color of objects, informed by preliminary tests and expert data. The machine learning method employs a sophisticated algorithm that dynamically learns and identifies objects in images. We used both approaches using diverse datasets and measured their accuracy and efficiency under various conditions. The aim of this presentation is to show the improvement obtained by using the AI-based system applied for real-time detection and classification, offering insights into their practical strengths and applications.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Giovanni Giannotta + Orneda Lecini + + 1 + 1 + + + 14:20 + 00:15 + Proxmox Backup Server: Backup for your Datacenter + https://www.sfscon.it/talks/proxmox-backup-server-backup-for-your-datacenter/ + + <p>Backups are an essential component of every IT infrastructure, from small scale businesses up to large datacenters, spanning multiple locations. With the Proxmox Backup Server a fully Free and Open Source backup solution is available, being highly integrated with the Proxmox Virtual Environment.<br /> +This talk will present a short overview of the capabilites provided by Proxmox Backup Server, giving some insights into new and recently added features. Further, by peeking into the inner workings and the software design will show how fast, space efficient and reliable backups are created and how data consistency and integrity are guaranteed. Topics covered will include backups for Virtual Machines and Linux Containers running on top of Proxmox Virtual Environment as well as host level backups.</p> + + DevOps + DevOps + DevOps + https://www.sfscon.it/tracks/devops-track-2024/ + + Christian Ebner + + 1 + 1 + + + 14:40 + 00:15 + Cloud Costs with ClickHouse and OpenCost + https://www.sfscon.it/talks/cloud-costs-with-clickhouse-and-opencost/ + + <p>Managing costs and billing across numerous Cloud-managed Kubernetes clusters presents significant challenges. In this talk, we&#8217;ll explore these challenges and discuss solutions using ClickHouse and OpenCost. Leveraging ClickHouse&#8217;s capabilities, we&#8217;ll demonstrate how it efficiently imports diverse Cloud billing data streams. Additionally, we&#8217;ll delve into how OpenCost addresses the complexities of real-time cost management within a multitenant architecture. Join us to uncover practical insights into optimizing cloud costs effectively.</p> + + DevOps + DevOps + DevOps + https://www.sfscon.it/tracks/devops-track-2024/ + + Denys Kondratenko + + 1 + 1 + + + 15:00 + 00:15 + Ansible + https://www.sfscon.it/talks/ansible/ + + Lazy Engineer's Best Friend! + Lazy Engineer's Best Friend! + <p>For a software engineer DRY is not only a washing machine progam, but it represents a deeply-held mantra: Don&#8217;t Repeat Yourself.</p> +<p>To avoid repetitive manual work, automation tools like Ansible enable engineers to quickly configure infrastructure and easily deploy applications.</p> +<p>In this talk, we will explore the key concepts and benefits of Ansible for configuration management, deployment and orchestration of remote devices. We will start with an overview of Ansible&#8217;s utility, how it works, and common use cases. We will see how YAML files describe configurations and playbooks define automated tasks and processes.</p> +<p>Practical examples will show Ansible automation in action, including a quick introduction to initializing and keeping your operating system up to date by automating the installation and maintenance of system tools. We will also introduce the concept of dotfiles for configuration.</p> +<p>What are you waiting for? Learn how to spend 30 minutes automating 5-second tasks with Ansible! (It&#8217;ll save you time in the long run, I promise!)</p> + + DevOps + DevOps + DevOps + https://www.sfscon.it/tracks/devops-track-2024/ + + Marco Lampis + + 1 + 1 + + + 15:20 + 00:15 + Efficient Log Management in Large-Scale Kubernetes Clusters + + + <p>Large Kubernetes clusters can generate significant volumes of logs, especially when housing thousands of running pods. This may demand substantial CPU, RAM, disk IO, and disk space for storing and querying large log volumes. In this talk, we will look into different strategies of storing those logs in ElasticSearch, Grafana Loki and VictoriaLogs and examine how we can save 10x or more on infrastructure costs.</p> +<p>This talk presents real-world examples of efficient log management in large-scale Kubernetes clusters. It includes setup demonstrations, numerical data, and graphical representations from reproducible benchmarks.</p> + + DevOps + DevOps + DevOps + https://www.sfscon.it/tracks/devops-track-2024/ + + Aliaksandr Valialkin + + 1 + 1 + + + 15:40 + 00:15 + KubeVirt + + + making running virtual machines in a kubernetes cluster a mainstream activity + making running virtual machines in a kubernetes cluster a mainstream activity + <p>KubeVirt is a Kubernetes addon for running virtual machines inside a Kubernetes cluster.</p> +<p>Currently being in CNCF incubating state, it has a wide range of adopters by both vendors and end users, such as NVidia, Suse, ARM and Red Hat to name a few.</p> +<p>This talk gives an overview of what is currently possible with KubeVirt on your cluster and what its future may look like. We will describe some of the features it supports, i.e. VM Import, LiveMigration, Snapshot/Restore and Monitoring.</p> +<p>At the end of the talk attendees will have an idea of how they can use it to better integrate existing virtual machines with containers in their existing application landscape.</p> + + SFSCON + SFSCON + SFSCON + + Daniel Hiller + + 1 + 1 + + + 16:00 + 00:15 + Why free backup software matters + https://www.sfscon.it/talks/why-free-backup-software-matters/ + + <p>It is 2024, we&#8217;re in the middle of the cloud-era.<br /> +Almost every service you desire is available in &#8220;the cloud&#8221;.<br /> +At least some of your company&#8217;s critical data is stored at some cloud provider.<br /> +Does your provider actually keep backups?<br /> +Can you live with their Recovery Time Objective (RTO)?<br /> +Do you believe they will actually meet the RTO?<br /> +Maybe you have another copy of your data?<br /> +In a format that you can actually access and read?</p> + + DevOps + DevOps + DevOps + https://www.sfscon.it/tracks/devops-track-2024/ + + Andreas Rogge + + 1 + 1 + + + 16:20 + 00:15 + Demystifying JWTs + https://www.sfscon.it/talks/demystifying-jwts/ + + <p>JSON Web Tokens (JWTs) have become a popular method for securely transmitting information between two parties. They are widely used in modern web applications for authentication and data exchange. However, their inner workings and security implications can be complex and often misunderstood by the developers.</p> +<p>In this talk, we aim to demystify JWTs by exploring their structure, how they work, and the cryptographic mechanisms that ensure their integrity and confidentiality. We will discuss the components of a JWT, including headers, payloads, and signatures, and illustrate how they combine to form a token.</p> +<p>Furthermore, we will dive into best practices for JWT usage, common pitfalls to avoid, and security considerations such as token expiration, payload size, and the choice of cryptographic algorithms. Finally, we will explore how a WebSocket connection can be secured with JWTs. Security is increasingly an overlooked necessity while utilizing a protocol that does not support authentication by default.</p> +<p>By the end of the session, attendees will have a clear understanding of how JWTs operate, their advantages over traditional session-based authentication, and how to implement them securely in their own applications.</p> + + Cybersecurity + Cybersecurity + Cybersecurity + https://www.sfscon.it/tracks/cybersecurity-track-2024/ + + Dominika Bobik + + 1 + 1 + + + 16:40 + 00:15 + Containerization and micro-services in real life change security and vulnerability management. Let’s Discuss. + https://www.sfscon.it/talks/containerization-and-micro-services-in-real-life-chandge-security-and-vulnerability-management/ + + Security Configuration for Containerization and micro-services applications + Security Configuration for Containerization and micro-services applications + <p>Containerization and micro-services change the way software is deployed and used in production contexts. Re-evaluation of the criteria for secure development and above all for secure configuration of these solutions. It would probably be appropriate to implement security already during the creation of the solution itself.</p> + + Cybersecurity + Cybersecurity + Cybersecurity + https://www.sfscon.it/tracks/cybersecurity-track-2024/ + + Carlo Falciola + + 1 + 1 + + + 17:00 + 00:15 + Cyber Risk Management: let’s try to manage it with open source and free software + https://www.sfscon.it/talks/cyber-risk-management-lets-try-to-manage-it-with-open-source-and-free-software/ + + Open source solutions in the cybersecurity landscape, oriented to manage processes + Open source solutions in the cybersecurity landscape, oriented to manage processes + <p>Cyber Risk Management is what you need to manage to ensure your business can operate being aware of threats, vulnerabilities, and to ensure that your business transactions and data are confidential, intact, available.</p> +<p>Let’s discuss and explore solutions and resources coming from open source and free software that can help organization to manage their cybersecurity programs, with an approach that looks at sharing knowledge, adopt tools and pay attention to the budget.</p> + + Cybersecurity + Cybersecurity + Cybersecurity + https://www.sfscon.it/tracks/cybersecurity-track-2024/ + + Graziano Specchierla + + 1 + 1 + + + 17:20 + 00:15 + IT Security – Don’t let Open Source Software become the next menace + https://www.sfscon.it/talks/it-security-dont-let-open-source-software-become-the-next-menace/ + + Criminals and Govs are levereging Open Source tools, libraries and software to break into organizations. Let's stop 'em. + Criminals and Govs are levereging Open Source tools, libraries and software to break into organizations. Let's stop 'em. + <p>There is a prevalent myth that open source software is inherently secure. However, this is not true. Open source software is susceptible to vulnerabilities just like any other software. Moreover, the fact that anyone can review the code does not guarantee that the right people will do so. Open source software faces two important threats than not everybody are aware of:</p> +<p>Vulnerabilities: Open source developers need to understand and communicate the security posture of their projects to users. They must adopt robust security practices. The Log4j incident in 2021, which led to the Log4Shell vulnerability, triggered a catastrophic wave of attacks due to inadequate support for the logging framework and its critical role in company procedures.</p> +<p>Dev teams infiltration: Criminal organizations and government hacking teams are executing highly sophisticated social engineering operations to infiltrate understaffed open source projects. Their goal is to compromise development teams and insert backdoors into the software. The most recent attack on a significant project was discovered in April 2024.</p> +<p>Objective of the Talk: Inform the community about these two security scenarios and demonstrate how to effectively address them.</p> + + Cybersecurity + Cybersecurity + Cybersecurity + https://www.sfscon.it/tracks/cybersecurity-track-2024/ + + Giancarlo Calzetta + + 1 + 1 + + + 17:40 + 00:15 + Biting the Apple + https://www.sfscon.it/talks/biting-the-apple/ + + MacBook Forensic with Fuji + MacBook Forensic with Fuji + <p>Description: Fuji is a free software, licensed under GPL v3, that leverages Apple Software Restore (ASR) and Rsync to create forensic images of macOS systems. It operates on logged-in computers to efficiently capture disk images while maintaining data integrity.</p> +<p>Bypassing encryption on Apple silicon processors presents significant challenges due to their advanced hardware encryption mechanisms and secure enclave protections. These processors employ complex security protocols that safeguard data at a hardware level, making unauthorized access and decryption extremely difficult. Without proper authentication or specific exploits, forensic imaging on these devices requires substantial technical expertise and often necessitates the cooperation of the device owner.</p> +<p>We&#8217;ll see how to acquire forensically MacBook data with free software</p> + + Cybersecurity + Cybersecurity + Cybersecurity + https://www.sfscon.it/tracks/cybersecurity-track-2024/ + + Alessandro Farina + + 1 + 1 + + + + + 11:00 + 00:15 + Apisense – Easily monitor and track your REST-API data quality + https://www.sfscon.it/talks/apisense-easily-monitor-and-track-your-rest-api-data-quality/ + + An easy and modular solution to faulty REST-API data developed in collaboration with the Open Data Hub + An easy and modular solution to faulty REST-API data developed in collaboration with the Open Data Hub + <p>Ever had the issue of fetching invalid or faulty data from a REST-API and noticing only later, when everything broke down? Not anymore!</p> +<p>Apisense was developed in collaboration with the Open Data Hub to be an easy and modular tool to fit every need possible used to ensure and monitor the availability, quality and correctness of data provided via REST-APIs.</p> +<p>Sounds too good to be true? Tune in to find out how Apisense can help both producers and consumers of data to be aware of the quality and reliability of the data they provide/consume.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Aurelio Buonomo + Christian Zanotti + + 1 + 1 + + + 11:20 + 00:15 + MongoDB Alternatives: Is There A Need For A New Open Standard? + + + <p>This talk takes you on a journey through the history of SQL as an Open Standard, emphasizing its pivotal role in shaping the database industry. It also highlights the pressing need for a similar standard in MongoDB-compatible open databases. The presentation introduces FerretDB as a groundbreaking solution bridging MongoDB and open databases, ensuring seamless transitions without extensive application-level changes. This talk illuminates the importance of open standards and presents a path forward for enhanced compatibility and collaboration within the open-source database community.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Peter Farkas + + 1 + 1 + + + 11:40 + 00:15 + MariaDB Vector: Why your AI data should be in an RDBMS + https://www.sfscon.it/talks/mariadb-vector-why-your-ai-data-should-be-in-an-rdbms/ + + Databases and AI: How to supercharge application development with MariaDB vector + Databases and AI: How to supercharge application development with MariaDB vector + <p>As AI apps become mainstream, conventional IT wisdoms apply. AI apps must be no monoliths, but need to be logged, audited, and overall well integrated into normal IT. This means all AI data – vectors, input, output – is best stored in a normal RDBMS. Better still: In an open source database with performance, stability, and ease of use. Here is an overview of the AI opportunities, possibilities, methodologies, and features in MariaDB Server.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Kaj Arnö + + 1 + 1 + + + 12:00 + 00:15 + 1, 2, 3, Doc Kit! + https://www.sfscon.it/talks/1-2-3-doc-kit/ + + Automate the creation of software documentation + Automate the creation of software documentation + <p>Doc Kit is an open source command line tool that automates the creation of software documentation and release notes.<br /> +It can be used in conjunction with DocBook Authoring and Publishing Suite (DAPS) for quickly preparing the skeleton of professional looking software documentation.</p> +<p>Doc Kit has been designed for initialising SUSE or openSUSE documentation repositories but in a few steps it can be re-used for other projects too.<br /> +The tool consists of two parts:<br /> +1. a command-line tool called doc-kit that can download documentation boilerplate files<br /> +2. a repository of documentation boilerplate files, such as the SUSE/openSUSE book preface and entity files.</p> +<p>The presentation will show how to use Doc Kit and how to customise the provided templates for creating a brand new documentation or release notes projects.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Marina Latini + + 1 + 1 + + + 12:20 + 00:15 + codEEmoji – Making code more informative with emojis + https://www.sfscon.it/talks/codeemoji-making-code-more-informative-with-emojis/ + + <p>This presentation focuses on the open-source project codEEmoji, an IDE plugin that adds additional information to the code through emojis. The talk starts by discussing the benefits of this approach compared to other ways to present information for the developer in IDEs. It follows by presenting the plugin and its main functionalities, which go from pointing out bad practices in method and variable naming to presenting modifiers and method characteristics in their usage. Next, it is presented how the plugin structure was designed to receive new contributions. The talk finishes by presenting some challenges and future features.</p> +<p>https://github.com/codeemoji/codeemoji-plugin</p> +<p>https://plugins.jetbrains.com/plugin/22416-codeemoji</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Eduardo Guerra + + 1 + 1 + + + 12:40 + 00:15 + Can Test Driven Development be speeded up with Generative AI? + https://www.sfscon.it/talks/can-test-driven-development-be-speeded-up-with-generative-ai/ + + <p>Generative AI tools, like ChatGPT, have shown remarkable capabilities in natural language processing. It is logical to explore their potential in programming, yet the quality of generated code raises concerns. Test-Driven Development (TDD) offers a promising approach to address these concerns. In this talk, we will explore how developers can effectively collaborate with generative AI tools to enhance TDD practices, ensuring higher code quality and streamlined development processes. To this aim, we will present two interaction patterns between a human and an AI.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Moritz Mock + Barbara Russo + Jorge Melegati + + 1 + 1 + + + 13:00 + 00:15 + ScrapeGraphAI + https://www.sfscon.it/talks/scrapegraphai/ + + you only scrape once + you only scrape once + <p>ScrapeGraphAI is an innovative Python library designed to revolutionize the field of web scraping and in less than 4 months it collected over than 12k stars on Github and more than 100k downloads on pip. It allows to scrape which website you want with the knowledge of the HTML code and with the LLM models. By seamlessly integrating a natural language model within its architecture, ScrapeGraphAI enables the extraction of valuable information from websites with unparalleled flexibility and accuracy. Unlike traditional scraping tools that rely on rigid patterns or manual configuration, ScrapeGraphAI constructs a dynamic graph of operations to interrogate web pages, ensuring that relevant data is captured even in the face of changing website structures. This library&#8217;s unique fusion of language models and directed graph logic empowers developers to create sophisticated scraping workflows with minimal coding required, thereby streamlining the process of extracting valuable insights from online content. More info at this link: https://github.com/VinciGit00/Scrapegraph-ai</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Marco Vinciguerra + + 1 + 1 + + + 13:20 + 00:15 + Software Engineering Automation: From early tools to Generative AI and beyond + https://www.sfscon.it/talks/software-engineering-automation-from-early-tools-to-generative-ai-and-beyond/ + + <p>The emergence of Generative AI tools, such as ChatGPT and Copilot, promises to disrupt knowledge-based work, including software development. However, these are not the first tools to support the automation of software engineering. From the early days, various tools have been developed to remove repetitive tasks, reduce workload, and consequently increase the abstraction of software development, such as auto-completion and automatic refactoring. In this talk, we present the different levels of the automation of software engineering. We will examine how past and present tools have achieved these levels, the current capabilities of Generative AI tools, and what we can expect for the future.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Jorge Melegati + + 1 + 1 + + + 13:40 + 00:15 + The Crucial Role of Openness in Modern Software Development + https://www.sfscon.it/talks/the-crucial-role-of-openness-in-modern-software-development/ + + <p>Developers and providers of software-based products as well as other new technologies for the global market know that the winning solutions for future-proof projects share one key feature: interoperability with products from other suppliers. Achieving this interoperability means relying on open standards, open-source technologies and establishing key partnerships with other industry players.</p> +<p>In effect, openness principles are increasingly essential to software development. This talk will provide an in-depth analysis of how these concepts underpin interoperability, security and innovation in today&#8217;s technological landscape.</p> +<p>It will discuss the importance of open standards in creating seamless integration between diverse systems and applications, ensuring that technological advancements remain accessible and adaptable. The session will also cover key strategies and best practices for the adoption of open solutions that drive compatibility and competitiveness.</p> +<p>Finally, by examining Jakarta EE and the Payara Community, the talk will illustrate how these frameworks exemplify the power of open source in building innovative, scalable and future-oriented applications.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Chiara Civardi + Dominika Tasarz-Sochacka + + 1 + 1 + + + 14:00 + 00:15 + AI Tools for Jakarta EE + https://www.sfscon.it/talks/ai-tools-for-jakarta-ee/ + + <p>Discover how AI-powered tools for Jakarta EE streamline the entire development lifecycle.</p> +<p>Over the years, there have been many ways of starting a project: archetypes, project generators, visual designers, and so on. What do we get when we add a language model to the mix? A project generator that scaffolds domain-relevant Jakarta EE applications with backend and frontend functionalities in place.</p> +<p>Experience the future of enterprise application development through practical, cutting-edge demonstrations.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Gaurav Gupta + + 1 + 1 + + + 14:20 + 00:15 + How to start contributing and still have fun + https://www.sfscon.it/talks/how-to-start-contributing-and-still-have-fun/ + + <p>Are you new to Open Source and about to create your first commit, but still haven&#8217;t clicked on &#8220;New Pull Request&#8221; button?</p> +<p>There will be always something holding you back.</p> +<p>Or do you want to gain experience that can be applied at your school or work but don&#8217;t know how?</p> +<p>Open Source gives you that opportunity.</p> +<p>Let&#8217;s talk about it because we all go through it: how to find your project; fear of the first commit, the first code review, the first mistakes and everything is public; fight toxic communities &#8211; no one is perfect; when to open your code;</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Juri Solovjov + + 1 + 1 + + + 14:40 + 00:15 + Monolith Splitter + https://www.sfscon.it/talks/monolith-splitter/ + + <p>Migration from monolithic systems to microservices has earned significant interest in recent years. Software architects and developers welcome approaches, techniques, and patterns that can facilitate and automate the migration process. This talk will present Monolith Splitter, a tool that employs various approaches for splitting a monolith into a microservices architecture. This tool could be beneficial for software architects looking to migrate monolithic projects to a more scalable architecture. It uses execution traces to analyze monolithic software and suggests which classes should be grouped together in separate services according to criteria such as cohesion, modularity, and independence of evolvability. We will showcase the application of the tool to a series of open source software projects, discussing the outcomes, the benefits, and the current limitations.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Michal Skipala + Bruno Rossi + + 1 + 1 + + + 15:00 + 00:15 + The Next Level of Metrics in Microservices + https://www.sfscon.it/talks/the-next-level-of-metrics-in-microservices/ + + Going beyond measuring workload and performance + Going beyond measuring workload and performance + <p>In Microservices, measuring workload and performance are old news! They&#8217;re still important, but we can do more. In this talk, we&#8217;re navigating through new ideas on how to use metrics to tell us more than the basics about our microservices. Did you know we can evaluate our microservices in the architectural level? So we&#8217;ll have concrete data to support our decision-making. Between patterns and bad smells, we can use metrics to detect the points where they happen. Let&#8217;s explore these new possibilities to improve our experience when evolving a microservice system, towards a more robust and maintainable direction! Bonus: you&#8217;ll learn about an open-source tool to facilitate this process, of which I&#8217;m a maintainer, and you could be too!</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + João Francisco Lino Daniel + + 1 + 1 + + + 15:20 + 00:15 + What’s New in Notifications + https://www.sfscon.it/talks/whats-new-in-notifications/ + + <p>Over the past 6 months I&#8217;ve been working on improving notifications for the GNU/Linux desktop. This includes a new version of the xdg-desktop-portal notification spec, improved notification UI in GNOME Shell, and various backend components (e.g. GLib and portals).</p> +<p>In this talk I&#8217;ll explain why it was so difficult, how we untangled it, and what&#8217;s in store for the future.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Julian Sparber + + 1 + 1 + + + 15:40 + 00:15 + Sync Your Tunes, Sync Your Screen: Introducing SyncWall + https://www.sfscon.it/talks/sync-your-tunes-sync-your-screen-introducing-syncwall/ + + <p>Ever wished your computer could visually represent your playlist? SyncWall lets you turn every song into a unique visual experience, by dynamically matching your desktop wallpaper to the music currently playing on Spotify!</p> +<p>We&#8217;ll demonstrate SyncWall in action, showcasing its capabilities, and then we&#8217;ll dive deeper into the code and the process of creating the images.</p> +<p>SyncWall relies on two core components: Spotify&#8217;s API, which provides with all the necessary song information, and Python&#8217;s PIL library, which allows to easily manipulate images. Throughout the presentation, we will explore the key concepts and most useful functions of these two technologies, providing you with practical tools to integrate into your own projects.</p> +<p>Even if Syncwall is designed for GNOME, we will dive deep on how to make it work also in different desktop environments. This will cover all the steps and the challenges involved.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Giovanni Enrico Loni + + 1 + 1 + + + 16:00 + 00:15 + Nurturing OpenJDK distribution: Eclipse Temurin Success History and plan + https://www.sfscon.it/talks/nurturing-openjdk-distribution-eclipse-temurin-success-history-and-plan/ + + <p>Join me as we explore the pillars that make Eclipse Temurin one of the most widely adopted, enterprise-ready OpenJDK Runtime (over 20M monthly downloads) and also delve into the future of Adoptium and explore the goals set for 2024.<br /> +As we navigate the landscape of open source Java runtimes, Adoptium is committed to fostering vibrant, healthy projects that thrive with the support of robust communities. In this talk, we will also shine a spotlight on our dedication to delivering top-notch quality and outstanding performance, with a special focus on our AQAvit project and Security Effort.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Carmen Delgado + Ivar Grimstad + + 1 + 1 + + + 16:20 + 00:15 + Designing open source tools for Citizen Coders + https://www.sfscon.it/talks/designing-open-source-tools-for-citizen-coders/ + + Empower non-professional developers to drive innovation! + Empower non-professional developers to drive innovation! + <p>In a world where proprietary no-code platforms with vendor lock-in and opacity dominate, there is a crucial need to enhance the developer experience of open source applications, libraries, and tools.</p> +<p>We will explore how we can make open source software more accessible to citizen developers and non-professional programmers who face significant barriers to entry with modern open source tools. Showing the importance of collaborating with these developers, who are often closer to real-world problems, to improve the quality and usability of open source software.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Luca Rainone + + 1 + 1 + + + 16:40 + 00:15 + Free your Games + https://www.sfscon.it/talks/free-your-games/ + + A Minetest story + A Minetest story + <p>Videogames are part of our daily life. They allow us to unplug, to relax, to compete, simulating a reality that puts us at the centre of a new digital world. However, if we go deeper into the way videogames are made, we&#8217;ll learn that their market can be brutal and the ethics of their business models highly debatable &#8211; if not plain unbearable. Nowadays, playing a videogame usually means renouncing to our privacy and shaking hands with realities that we might not tolerate if we knew what they conceal. It was during the pandemic that a Minetest server called AES was born. Made by volunteers, AES decided to go against that: to build an online space where to play without strings attached. A place where everyone can have fun and nothing is proprietary. Four years later, this is its story.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Marco Amato + + 1 + 1 + + + 17:00 + 00:15 + How to set up an Open Source Program Office? Get insights and use cases from the OSPO Alliance + https://www.sfscon.it/talks/how-to-set-up-an-open-source-program-office-get-insights-and-use-cases-from-the-ospo-alliance/ + + <p>The Good Governance Initiative (GGI) developped by the OSPO Alliance proposes a methodological framework to assess open-source awareness, compliance and governance in any kind of organizations, helping them to structure and improve the use of FOSS towards an OSPO. This presentation will highlight the main progresses and new features achieved since last year&#8217;s introduction at SFScon, such as the translation of the GGI Good Governance in five languages, the recent OSPO testimonies presented in the OnRamp meeting series, and many more.</p> + + OW2 + OW2 + OW2 + https://www.sfscon.it/tracks/ow2-track-2024/ + + Valentina Del Prete + + 1 + 1 + + + 17:20 + 00:15 + Decentralized Search Over Decentralized Storage + https://www.sfscon.it/talks/decentralized-search-over-decentralized-storage/ + + Coupling an AI-powered search engine with a self-hosted personal cloud + Coupling an AI-powered search engine with a self-hosted personal cloud + <p>In this talk, we will explore an innovative decentralized search system developed in collaboration between the teams of On My Disk, a personal cloud storage solution, and PeARS, a self-hosted search engine. This system is designed to enable user-friendly, AI-powered, multilingual search capabilities directly over a decentralized storage environment, empowering individuals to manage and search their data across devices without relying on third-party servers. By combining cutting-edge AI with a robust, local-first approach, this solution allows users to maintain complete control over their data, ensuring secure, fast, and personalized search results in a user-controlled environment. Learn how this technology is setting a new standard for privacy and autonomy in data storage and retrieval.</p> + + OW2 + OW2 + OW2 + https://www.sfscon.it/tracks/ow2-track-2024/ + + Alexey Volkov + + 1 + 1 + + + 17:40 + 00:15 + Optimizing Cloud Compute Resources with Spare Cores + https://www.sfscon.it/talks/optimizing-cloud-compute-resources-with-spare-cores/ + + <p>Spare Cores is a vendor-independent, open-source, Python ecosystem that offers a comprehensive inventory and performance evaluation of compute resources across cloud server providers. We start all server types publicly (GHA) to run hardware inspection tools and benchmarks for different workloads. Our findings are published as open data and open-source tools to help you identify and optionally start the most cost-efficient instance type for your specific use cases (e.g. ML model training or CI/CD pipelines) in your cloud environment. Additionally, Spare Cores provides a seamless SaaS solution built on this open-source ecosystem, managing the entire lifecycle of containerized batch jobs without requiring direct vendor engagement.</p> + + OW2 + OW2 + OW2 + https://www.sfscon.it/tracks/ow2-track-2024/ + + Gergely Daroczi + + 1 + 1 + + + + + 13:00 + 00:30 + NOI Hackathon SFSCON Edition + + Side Event - Hackathon + Side Event - Hackathon + Side Event,Hackathon + 0 + 0 + + + + + 14:00 + 00:40 + Human and environmental Impacts of the actual “Artificial Intelligence” Industry, how to humanize? + + Side Event - Crane Hall BOF meetings + Side Event - Crane Hall BOF meetings + Side Event,Crane Hall BOF meetings + https://www.sfscon.it/tracks/crane-hall-bof-meetings-2024/ + + Roberto Innocenti + + 0 + 0 + + + + + + + 08:30 + 00:30 + Starting of the second day + + SFSCON + SFSCON + SFSCON + 0 + 0 + + + 13:00 + 00:30 + Closing of the SFSCON 2024 + + SFSCON + SFSCON + SFSCON + 0 + 0 + + + + + 08:30 + 00:30 + Welcome Coffee + + SFSCON + SFSCON + SFSCON + 0 + 0 + + + + + 09:20 + 01:00 + Let’s spark more Adas in our tech world! workshop + + Women* in tech + Women* in tech + <p>In this workshop we will dive into the possibilities of encouraging women*, especially girls, to thinker and to code. With tools such as the Free Software Foundation Europe’s (FSFE) illustrated book &#8220;Ada &amp; Zangemann &#8211; A Tale of Software, Skateboards, and Raspberry Ice Cream&#8221;everybody can create ways to spark the participation of women* and girls in tech.The book tells the story of Ada, a girl who loves to experiment with hardware and software. Ada realises how crucial it is to control technology and decides to stand up to the mighty inventor Zangemann.This workshop will also intend to explore ways to promote diversity and gender equity in the Free Software community and beyond. Together we will identify the challenges women* face in participating in such communities and discuss how we can create more inclusive environments, especially for the future generations.We encourage you to join us to share your experiences, ideas and perspectives, and collaborate in creating a more inclusive and diverse future in the Free Software community for all.</p> +<p><b>REGISTRATION NEEDED AT: </b><a href="https://pretix.eu/noi-digital/sfscon24/4260077/">https://pretix.eu/noi-digital/sfscon24/4260077/</a></p> +<p><em>*women, inter, trans and non-binary people.</em></p> +<p>Supported by: <strong><a href="https://fsfe.org/" target="_blank" rel="noopener">FSFE – Free Software Foundation Europe</a> </strong>&amp; <a href="https://shetechitaly.org/"><strong>SheTech</strong></a></p> + + Side Event - Women* in tech + Side Event - Women* in tech + Side Event,Women* in tech + https://www.sfscon.it/tracks/women-in-tech-track-2024/ + + Lina Ceballos + Ana Galan + + 0 + 0 + + + 10:40 + 00:55 + Knitting Our Internet workshop + + An interactive journey through the history of the Internet, and how to save it, together + An interactive journey through the history of the Internet, and how to save it, together + <p>“Knitting Our Internet” (KOI) is a workshop that explores the history of the Internet, and offers a perspective for a collective re-imagination of participatory, decentralized networks.</p> +<p>The workshop aims at questioning the very essence of today’s social media, exposing the critical limits posed by centralization, monopoly, and surveillance capitalism.</p> +<p>KOI was conceived in June 2023 by <a href="https://tommi.space">Tommaso Marmo</a>, who was looking for a simple yet critical and accurate way to introduce the concept of the Fediverse to non-experts.</p> +<p>The content and structure of the workshop matured over time, as it adapted to very diverse audiences of any ages and backgrounds. Furthermore, the experience is based on Tommaso’s academic research, mainly conducted for “<a href="https://tommi.space/csss/">Computer Sciences are Social Sciences</a>”, his bachelor’s thesis.</p> +<p><strong>Content</strong></p> +<p>During the activity, Tommaso will be using a yarn his grandmother gifted him to simulate centralized and decentralized networks, employing concrete metaphors to actively involve the participants. Every individual attending the workshop will be given a quote or an image relevant in the early and contemporary history of the Internet, and they will be asked to share it as the story unfolds.</p> +<p>Allowing them to understand the essential challenges society faces in relation to technological advancement, participants will be empowered to get involved in the Fediverse, especially understanding the importance of decentralization, Free Software, and the political role played by technical tools.</p> +<p><strong>Notes</strong></p> +<p>Given its malleable and open structure, the content of the workshop can be adapted, enriched, and edited to match the key topics of SFSCON 2024 in the best possible way.</p> +<p>The interactive parts of the workshop can be limited and a more theoretical presentation, diving in the thoughts of philosophers and computer sciences, could be added, too.</p> +<p>Supported by: <strong><a href="https://fsfe.org/" target="_blank" rel="noopener">FSFE – Free Software Foundation Europe</a></strong></p> + + Fediverse + Fediverse + Fediverse + https://www.sfscon.it/tracks/fediverse-track-2024/ + + Tommaso Marmo + + 0 + 0 + + + 11:40 + 00:15 + about:Fediverse + https://www.sfscon.it/talks/aboutfediverse/ + + An introduction to the decentralised social network + An introduction to the decentralised social network + <p>The Fediverse is a decentralised social network. But what does that mean?</p> +<p>In this talk I will give a short introduction to the Fediverse of 2024 and how it started to evolve in 2008. I will explain the basic concepts of ActivityPub as the protocol of the Fediverse and how the use of this open protocol has enabled a diverse group of Free Software projects to build a social network of (micro) blogging, video streaming, podcasting and event organising. A network where users can share and interact with each other regardless of the platform they use. What will be possible in the Fediverse of 2024? And how can you get started today?</p> +<p>This talk does not require any technical knowledge of the Fediverse. However, you should know what an email is.</p> + + Fediverse + Fediverse + Fediverse + https://www.sfscon.it/tracks/fediverse-track-2024/ + + Tobias Diekershoff + + 1 + 1 + + + 12:00 + 00:15 + How to build a website for the IndieWeb + https://www.sfscon.it/talks/how-to-build-a-website-for-the-indieweb/ + + <p>Have you ever heard of terms like POSSE, syndication, or webmention?<br /> +What about protocols like Web Sign-In or Micropub?<br /> +These terms are all connected to the IndieWeb, a community of websites built on open standards and open source technologies.</p> +<p>In today&#8217;s digital age, our online content and identities are more important than ever. Relying on random companies and social networks to manage them isn&#8217;t ideal. Instead, we should take control of our online presence by building our own website for the IndieWeb.</p> +<p>In this talk, you&#8217;ll learn how to:</p> +<p>1. Publish content on your website via a Micropub server.<br /> +2. Syndicate that content elsewhere (i.e., republish it on another website).<br /> +3. Gather comments from social networks and display them on your website.</p> +<p>We will achieve all of this using a static website and a few open-source tools.</p> + + Fediverse + Fediverse + Fediverse + https://www.sfscon.it/tracks/fediverse-track-2024/ + + Giacomo Debidda + + 1 + 1 + + + + + 09:20 + 00:15 + ARM Linux Laptops for Developers Status Report + https://www.sfscon.it/talks/arm-linux-laptops-for-developers-status-report/ + + <p>Intrigued by 22+ hours of battery life with comparable performance to current Intel / AMD systems? Starting from June this year a bunch of new ARM based laptops have been launched. All major laptop vendors launched devices, with over 33 to choose from at the time of this writing.</p> +<p>While ARM based laptops have been available for years, they mostly have been targeted as cheap entry level ChromeBooks or MacBooks designed for MacOS only. Luckily with this new wave of ARM based laptops there should be something for everybody.</p> +<p>The core question is how well they behave under Linux. Being designed for<br /> +Windows-on-ARM there is a risk Linux support is rudimentary at best. Stefan set out to test this and is reporting back here. Does a boot with UEFI work out of the box? Are all hardware features supported? Is the firmware for various drivers available? How is the performance?</p> +<p>And the most important question: how does it stack up against an Intel based laptop from the same timeframe as daily driver for software development?</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Stefan Schmidt + + 1 + 1 + + + 09:40 + 00:35 + Building a no-drama community + https://www.sfscon.it/talks/building-a-no-drama-community/ + + <p>In this talk, we&#8217;ll focus on how the AlmaLinux project has chosen to foster a positive, drama-free community in the Linux ecosystem.</p> +<p>&#8212;</p> +<p>Whether you&#8217;re starting a new community or wrangling an existing one, it can be tempting to fall into the trap of bonding over shared enemies to see short-term, high-numbers growth. But, benny has spent the last 10 years building drama-free communities with a different kind of success.</p> +<p>While many open-source projects rally members through shared frustrations or negativity, AlmaLinux took the more challenging path of uniting people through thoughtful dialogue and focusing on helping each other. By prioritizing respect, collaboration, and inclusivity, the AlmaLinux community grew healthier and stronger without the need for battle cries or infusing drama. Learn how this approach not only built a stable and thriving community around AlmaLinux, but is also setting a new standard for open-source communities &#8211; and proving that progress doesn’t have to be divisive.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + benny Vasquez + + 1 + 1 + + + 10:20 + 02:40 + Voices of Free Software: connect, learn, inspire! + + FSFE Italian Community Meeting + FSFE Italian Community Meeting + <p>You are invited to join the volunteers, supporters, and friends of the FSFE Italian Community!</p> +<p>Join us to learn from one another, find inspiration, and tackle future challenges together in the realm of Free Software. As a volunteer, you have a platform to share your story, discuss the most pressing topics surrounding Free Software, and connect with fellow enthusiasts. We encourage you to collaborate with the community on common initiatives and work together to forge new paths forward.</p> +<p>This is an <strong>hybrid event</strong>. You can join us either online or in person.</p> +<p><b>REGISTRATION NEEDED AT: </b><a href="https://pretix.eu/noi-digital/sfscon24/4259648/">https://pretix.eu/noi-digital/sfscon24/4259648/</a></p> +<p>Please note, the official language of the FSFE Italian Community is Italian, hence the event will be held in <strong>Italian</strong>.</p> +<p>Supported by: <strong><a href="https://fsfe.org/" target="_blank" rel="noopener">FSFE – Free Software Foundation Europe</a></strong></p> + + Side Event - FSFE - Italian community meeting + Side Event - FSFE - Italian community meeting + Side Event,FSFE,Italian community meeting + https://www.sfscon.it/tracks/fsfe-italian-community-meeting-2024/ + + Marta Andreoli + + 0 + 0 + + + + + 09:30 + 02:30 + Scratch Stories with Ada & Zangemann + + Side Event - MiniNOI x SFSCON + Side Event - MiniNOI x SFSCON + Side Event,MiniNOI x SFSCON + 0 + 0 + + + + + 16:30 + 00:30 + Winner proclamation and closing of the NOI Hackathon SFSCON Edition + + Side Event - Hackathon + Side Event - Hackathon + Side Event,Hackathon + 0 + 0 + + + + diff --git a/src/tests/assets/sfscon2024.session-removed.xml b/src/tests/assets/sfscon2024.session-removed.xml new file mode 100644 index 0000000..f27cbe1 --- /dev/null +++ b/src/tests/assets/sfscon2024.session-removed.xml @@ -0,0 +1,2231 @@ + + + + sfscon-2024 + SFSCON 2024 + + + Ethics, Policy, Legal & Economics + Data Spaces + Open Hardware + Developers + Community Building + Cybersecurity + Fediverse + DevOps + Side Event - Hackathon + Side Event - School Reading + Side Event - MiniNOI x SFSCON + OW2 + Side Event - Women* in tech + Side Event - Crane Hall BOF meetings + Side Event - FSFE - Italian community meeting + + + + + 08:30 + 00:30 + Check-in SFSCON 2024 + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + 0 + 0 + + + + + 09:00 + 00:15 + Opening SFSCON 2024 + https://www.sfscon.it/talks/opening-sfscon-2024/ + + <p>Opening SFSCON 2024</p> + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Philipp Achammer + + 1 + 1 + + + 09:15 + 00:05 + Greetings from NOI + https://www.sfscon.it/talks/greetings-from-noi/ + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Vincent Mauroit + + 1 + 1 + + + 09:20 + 00:05 + Greetings from Gruppo FOS + https://www.sfscon.it/talks/greetings-from-gruppo-fos/ + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Giorgio Allasia + + 1 + 1 + + + 09:25 + 00:05 + Greetings from Telmekom + https://www.sfscon.it/talks/greetings-from-telmekom/ + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Sergio Vemic + + 1 + 1 + + + 09:30 + 00:30 + Keynote speaker &#8211; coming soon + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Emily Omier + + 0 + 0 + + + 10:00 + 00:15 + European SFS Award 2024 + + Free Software Foundation Europe (FSFE) and Linux User Group Bozen-Bolzano-Bulsan assign the “European SFS Award” + Free Software Foundation Europe (FSFE) and Linux User Group Bozen-Bolzano-Bulsan assign the “European SFS Award” + <p>The award is given to a person who contributed to the introduction of the culture of Free Software.</p> + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + 0 + 0 + + + 10:15 + 00:15 + SFS Award 2024 + + Linux User Group Bozen-Bolzano-Bulsan assigns the “South Tyrol Free Software Award” + Linux User Group Bozen-Bolzano-Bulsan assigns the “South Tyrol Free Software Award” + <p>Every year the Linux User Group Bozen-Bolzano-Bulsan assigns the &#8220;South Tyrol Free Software Award&#8221; (SFS Award). The award is given to a person who contributed to the introduction of the culture of Free Software in the Province of Bolzano.</p> + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + 0 + 0 + + + 10:40 + 00:20 + Open Source in EU policy + https://www.sfscon.it/talks/open-source-in-eu-policy/ + + Making laws with the Open Source community in mind + Making laws with the Open Source community in mind + <p>Over the past three years, the Open Source Community has had to mobilise to fix flaws in European Union policy initiatives, like the Cyber Resilience Act, Product Liability Directive, and the AI act, all of which could have negatively impacted Open Source developers.</p> +<p>This talk explores why this mobilisation was necessary, how the Community is preparing for future legislation, and how the Open Source community has changed the way the EU makes and implements laws.</p> +<p>It will then delve into the particular case of the AI act and its Open Source AI exemption. It will cover how the exemption came about, why it has prompted a wave of AI open-washing, and what can be done to fix it.</p> + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Jordan Maris + + 1 + 1 + + + 11:00 + 00:15 + Let’s all get over the CRA! + https://www.sfscon.it/talks/lets-all-get-over-the-cra/ + + how I stopped worrying about the consequences of the CRA for Open Source innovation in Europe and moved to something else + how I stopped worrying about the consequences of the CRA for Open Source innovation in Europe and moved to something else + <p>The adoption of the CRA (Cyber Resilience Act) has caused some real anxiety among the FOSS ecosystem. Even in its amended form, many questions remain opened and debated, and more to the point, a lot of uncertainty still surrounds it, not just at the level of its general architecture but also at the implementation level.<br /> +It is perhaps fair to mention that the CRA itself does not exist in a void and is building on already existing regulations and ideas. However, it should be explained how the CRA itself was not born inside the institutions of the European Union but is an almost pure product of governmental cyber security circles and agencies. Because of that, the digital ecosystem at large is at pain understanding some of its logic. This talk will start with what we know and what we can infer from the CRA, and how it fits within the general regulatory framework of the European Union. We will thus clarify the following points:</p> +<p>&#8211; what does the CRA mean in terms of software security assessment and certification &#8211; and how that plays a key role in understanding what the CRA is and what it is not<br /> +&#8211; CRA within the European regulatory framework<br /> +&#8211; CRA implementation: the bad, the ugly, and the unknown</p> +<p>We will then discuss what the concerns are for the FOSS communities. Most notably:</p> +<p>&#8211; barriers of entry for Free Software companies, esp. the small and medium ones<br /> +&#8211; legal inability to develop Free and Open Source Software<br /> +&#8211; what will Free and Open Source software foundations do in edge cases and what are they expected to bring in terms of guidance to the companies contributing to their projects</p> +<p>It will then discuss how we can best prepare for it, and make some suggestions on how to solve FOSS specific challenges related to CRA. In particular the talk will explore the following possibilities:</p> +<p>&#8211; evolving the role or cross project security teams<br /> +-promoting best practices in development (CI CD, code auditability) turning the CRA against proprietary software practices<br /> +&#8211; Pooling security audits<br /> +&#8211; Better release management</p> +<p>Last but not least, this talk will discuss the economics behind the CRA and why this may not end up being less of a problem than we think.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Charles-H. Schulz + + 1 + 1 + + + 11:21 + 00:15 + On the ethical challenges raised by robots powered by Artificial Intelligence + https://www.sfscon.it/talks/on-the-ethical-challenges-raised-by-robots-powered-by-artificial-intelligence/ + + <p>The integration of generative AI into robot systems has the potential to boost several industries by enabling robots to understand their environments, create courses of action, and autonomously react to complex situations. However, the adoption of generative AI techniques brings about profound ethical concerns that need to be addressed to ensure the responsible development and deployment of such technologies. In this talk, I will explore the multifaceted ethical challenges associated with generative AI-powered robots, focusing on issues such as robot autonomy, decision-making, accountability of robot actions, and their impact on humans and society as a whole.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Fulvio Mastrogiovanni + + 1 + 1 + + + 11:40 + 00:15 + CRA & PLD Liability rules and Software Freedom + https://www.sfscon.it/talks/cra-pld-liability-rules-and-software-freedom/ + + <p>With CRA and PLD liability rules for software have been introduced with a broad exception for Free Software. After long and intense debates individual developers and non for profit work are safeguarded. I will shed light on those new rules.</p> +<p>Already at an early stage, the FSFE argued in a hearing in the EU Parliament, for the inclusion of clear and precise exemptions for Free Software development in the legislation and for liability to be transferred to those who significantly financially benefit from it on the market.</p> +<p>In the future, individual developers and non-profit development of Free Software will be exempt from the CRA and the PLD. Nevertheless, the wording in both the regulations are different and a standardisation processes and guidelines are still being drawn up.</p> +<p>In this talk I will discuss what this new regulation means for software freedom in future and what happens at this stage and how to be involved in implementation.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Alexander Sander + + 1 + 1 + + + 12:00 + 00:15 + Cyber Resilience Act, already too late to comply? + https://www.sfscon.it/talks/cyber-resilience-act-already-too-late-to-comply/ + + Compliance is dead, long live compliance + Compliance is dead, long live compliance + <p>If you are taking your decisions now for complying with all the requirements of CRA, you might be too late to find adequate external resources to comply , although &#8212; at submission time &#8212; it is not yet in force. So what are you gonna do? Being open source would help only to a certain point, if you monetize the software. Some guidance tips for Open Source projects and businesses.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Carlo Piana + Alberto Pianon + + 1 + 1 + + + 12:20 + 00:15 + AI no-code for marketing + https://www.sfscon.it/talks/ai-no-code-for-marketing/ + + How artificial intelligence can really help create a marketing strategy + How artificial intelligence can really help create a marketing strategy + <p>The process of creating a Marketing strategy and the subsequent steps of drafting editorial calendars, selecting channels, designing, and publishing advertising campaigns, is a complex journey.<br /> +Marketers have always dedicated a lot of time and resources to creating the most effective strategy for a brand’s success and translating it into concrete actions.<br /> +Today, is it possible to use artificial intelligence as a tangible support for the development of the strategic, technical, and operational assets necessary to create a successful marketing plan?<br /> +Let’s discover ATENA together, a methodology and an easy process through which you can simplify, accelerate, and enhance the quality of your marketing strategy, thanks to the practical support of AI.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Alessandro Agnati + + 1 + 1 + + + 12:40 + 00:15 + We went to court against Apple &#8211; a case for Software Freedom + https://www.sfscon.it/talks/for-the-right-of-general-purpose-computers/ + + Breaking lock-ins over devices with Free Software + Breaking lock-ins over devices with Free Software + <p>Our smartphones, tablets, laptops, and other connected devices are general purpose computers. That means we can potentially run any software we want to make full use of the hardware. This potential is fostered by Free Software.</p> +<p>However, device manufacturers, vendors, and internet platforms have been restricting software freedom by exercising their monopolistic control over end-user equipment. This power is used over key features and components of devices such as operating systems, browsers, and app stores.</p> +<p>Basic freedoms such as installing and uninstalling software are being unfairly limited by these companies, commonly referred to as &#8220;gatekeepers&#8221;, because of their monopolistic control over devices.</p> +<p>As a concrete example, this talk will present the policy and legal work of FSFE in denouncing the detrimental commercial practices of a worldwide known gatekeeper: Apple.</p> +<p>Apple&#8217;s monopolistic power over its devices is detrimental to Free Software and a high risk for the right of general purpose computers. The company&#8217;s &#8220;notarization&#8221;, its barriers to software freedom and lack of interoperability are highly negative to Free Software.</p> +<p>In conclusion, this talk will present Device Neutrality as a policy solution to enable end-users to bypass gatekeepers in order to run Free Software independently of the control exercised by hardware manufacturers, vendors, and platforms. Device Neutrality can enable end&#8211;users to regain control over their devices.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Lucas Lasota + + 1 + 1 + + + 13:00 + 00:15 + 25 Years of Copyleft Enforcement: The Road Ahead for Defending Software Rights + https://www.sfscon.it/talks/25-years-of-copyleft-enforcement-the-road-ahead-for-defending-software-rights/ + + <p>In 1999, I worked my first GPL enforcement matter: a large storage had made proprietary modifications to GNU tar and failed to release the complete, corresponding source code to its customers. In early 2000, I did my first “CCS check” (complete, corresponding sourcecode check) — wherein one attempts to build the “CCS candidate” provided by the vendor to investigate whether the CCS candidate is actually complete, and whether it corresponds to the binaries that were distributed.</p> +<p>In those days, violations of copyleft licenses were rare, and once uncovered, companies eventually corrected their behavior. Yet, even then, it took years of work to convince the company to comply. And often, by the time compliance was achieved, a new generation of the product was released.</p> +<p>25 years later, we face the same problems with nearly every vendor.<br /> +Almost every product on the market today contains Linux, BusyBox, the GNU C Library, GNU Bash, and dozen other packages licensed under the GPL and/or LGPL. Almost none of these companies, even if an offer for source code is made, provide CCS.</p> +<p>This talk will look both to the past and future as we investigate software rights and freedoms of the average consumer, and how we reached this difficult situation. Attendees can learn the history of copyleft and its enforcement, and leave with an understanding of how much work remains and what individuals can do to make a real impact on the rights of users under copyleft.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Bradley Kuhn + + 1 + 1 + + + 13:20 + 00:15 + SPDXv3: Advancing Transparency in Software + https://www.sfscon.it/talks/spdxv3-advancing-transparency-in-software/ + + A newly released standard for complete information + A newly released standard for complete information + <p>SBOMs are a crucial tool for understanding the composition of software, which is particularly important in the context of managing security risks and licensing compliance. Recent regulatory efforts from, among others, the US and the EU, explicitly move towards requiring SBOM for each software delivery.<br /> +SPDX (System Package Data Exchange) is a freely available ISO standard that provides a set of specifications for communicating SBOM information. It offers a common format for companies and organizations to share important data accurately and efficiently.</p> +<p>This presentation will delve into the details of the newly released version of SPDX, providing a comprehensive understanding of their importance in the software industry.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Alexios Zavras + + 1 + 1 + + + 13:40 + 00:15 + (re)classifying FOSS licenses + https://www.sfscon.it/talks/reclassifying-foss-licenses/ + + New strategy for classifying licenses in a better way + New strategy for classifying licenses in a better way + <p>There are many efforts trying to classify licenses, for different use cases such as checking compatibility or for complying with the license terms. Most of these efforts seem to, explicitly or implicitly, have a certain use case in mind.</p> +<p>This project sets out to:<br /> +Consider provisioning case &#8211; how is the software provided to your user (e.g. binary distribution, SaaS, Web UI)<br /> +Consider use case &#8211; how is the software used (e.g. compiler, library)<br /> +Trust model &#8211; why should you trust the contributor of a classification or you should be able to exclude a contributor’s work etc<br /> +Identify and generalize FOSS license clauses<br /> +Identify and generalize when a clauses is triggered<br /> +Determine how clauses are compatible with each other (a license clause matrix)<br /> +Identify the clauses and triggers for each license</p> +<p>Keeping track of how 100 licenses are compatible with each other will result in a matrix with 10 000 (100 x 100) values. This is hard to maintain. Extending to 200 licenses requires 40 000 values. By instead looking at the license clauses we will end up with a much smaller problem, assuming we identify 20-30 of them, which will result in a matrix of 400-900 values. This is big, but maintainable. Adding a new license will not increase the size of the (license clause) matrix, which means that our approach scales much better. From the license definitions and license clause matrix we can compile a license compatibility matrix (for fast compatibility lookup).</p> +<p>This project sets out to provide to users:<br /> +A license obligation checklist for each provisioning case &#8211; for making compliance checks easy<br /> +A license compatibility matrix for each provisioning case &#8211; for fast compatibility lookup</p> +<p>All data and source code will be released under FOSS licenses.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Henrik Sandklef + + 1 + 1 + + + 14:00 + 00:15 + Lessons from the EU&#8217;s Next Generation Internet Initiatives + https://www.sfscon.it/talks/lessons-from-the-eus-next-generation-internet-initiatives/ + + What We've Learnt From Looking At 500 Free Software Projects + What We've Learnt From Looking At 500 Free Software Projects + <p>The FSFE is a consortium member of the EU&#8217;s Next Generation Internet initiatives (https://fsfe.org/activities/ngi/ngi.en.html). As part of our work there over the past 6 years, we have looked at hundreds of participating Free Software projects, to assist them with their legal and licensing questions, as well as to help them become REUSE compliant.</p> +<p>This talk will speak about some simple trends in Free Software legal and licensing that we&#8217;ve observed over the years in independent Free Software projects and their developers, and how these affect aspects of the Free Software ecosystem.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Gabriel Ku Wei Bin + + 1 + 1 + + + 14:20 + 00:15 + The ZOOOM project: final results and future outlooks + https://www.sfscon.it/talks/the-zooom-project-final-results-and-future-outlooks/ + + <p>The ZOOOM project, concluding in Sept 2024, aimed to raise awareness about the role of open licenses (open source software, open hardware, and open data &#8211; 3Os) in intellectual property valorization. In this talk, we&#8217;ll summarize key results, share recommendations for businesses leveraging 3Os, and demonstrate tools developed to aid knowledge generators and supporting organizations in navigating the legal and business implications of 3Os. Additionally, we&#8217;ll discuss the future of ZOOOM and its potential impact on the industry and research.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Elisa Morganti + + 1 + 1 + + + 14:40 + 00:15 + AI Law & Ethics: developing responsible AI systems + https://www.sfscon.it/talks/ai-law-ethics-developing-responsible-ai-systems/ + + <p>The aim of this talk is to explore AI law and ethics in developing responsible AI systems. It covers the forthcoming AI Act and EU regulations, focusing on accountability, risk management, and privacy-by-design. Through use cases, it shows how developers can ensure AI transparency, fairness, and compliance, balancing innovation with ethics. Attendees will gain insights for creating sustainable, ethical AI solutions.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Federico Sartore + Francesco Vadori + + 1 + 1 + + + 15:00 + 00:15 + Impact and Innovation: The Crucial Role of OSPOs in Shaping a More Sustainable Capitalism + https://www.sfscon.it/talks/impact-and-innovation-the-crucial-role-of-ospos-in-shaping-a-more-sustainable-capitalism/ + + <p>In an era where sustainability and responsible innovation are not just valued but expected, Open Source Program Offices (OSPOs) stand at the forefront of a transformative wave that merges open innovation with sustainable business practices. This session explores the pivotal role of OSPOs in fostering open innovation environments that not only drive technological advancement but also align with the principles of impact-oriented capitalism</p> +<p>We will delve into how OSPOs can leverage open source ecosystems to catalyze change within their organizations, promoting not just compliance and security but also environmental, social, and governance (ESG) goals. Through case studies and practical insights, attendees will learn how integrating OSPO strategies with corporate sustainability objectives can create a powerful synergy that propels companies toward a more ethical and profitable future.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Stefano Pampaloni + + 1 + 1 + + + 15:20 + 00:15 + From Personalized to Programmed + https://www.sfscon.it/talks/from-personalized-to-programmed/ + + The Dilemma of AI Customization + The Dilemma of AI Customization + <p>When considering the core values of mass customization, such as individual expression, fun in co-creating, and creativity, AI may introduce disadvantages, potentially leading to the homogenization of experiences. This lightning talk aims to explore the potential risks and drawbacks of utilizing AI in mass customization, highlighting the tension between leveraging technology for customization and preserving the unique human elements that form the foundation of personalized experiences. Could the reliance on algorithms diminish the consumer’s role in the creative process? If so, it might challenge the essence of what makes mass customization truly unique and innovative.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Thomas Aichner + + 1 + 1 + + + 15:40 + 00:15 + Fostering Innovation in IT Businesses through Open Source Software Involvement + https://www.sfscon.it/talks/fostering-innovation-in-it-businesses-through-open-source-software-involvement/ + + <p>All IT companies depend on free and open source software to some extent. Once they reach a certain size, they spontaneously become supporters of the projects on which they base their business. This happens because of first order consequences: my business depends on it, if I help it strive, my business will benefit.<br /> +In this talk, we will address the second-order consequences of software engineers interacting with open source projects, and show why dedicating internal resources to this activity is an effective strategy for enabling the discovery of new or modified (software) entities, which is the prerequisite for innovation.<br /> +The benefits are visible for companies of any size, even if their business does not depend on a specific project to which they could contribute: compelling arguments will be presented to motivate business owners to encourage their IT staff to engage in open source activities (and to developers to convince their bosses).</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Daniele Gobbetti + + 1 + 1 + + + 16:00 + 00:15 + Tackling Openwashers, Freeloaders and Cuckoos + https://www.sfscon.it/talks/tackling-openwashers-freeloaders-and-cuckoos/ + + How to safeguard the Free Software market against unfair competition + How to safeguard the Free Software market against unfair competition + <p>Companies that produce and sell Free Software face a problem: some competitors use unethical and destructive means to compete, making their products cheaper and winning bids. This kind of market behaviour is increasingly becoming a problem for Free Software producers.</p> +<p>Destructive practices include marketing proprietary software under the guise of being Free Software, whether by using free/open wording, by introducing new licences that falsely appear to be free, or by imposing additional barriers that make it more difficult to use the freedoms offered by Free Software.</p> +<p>Other competitors sell Free Software products without contributing to their development and maintenance, profiting from the work of others but giving nothing back to the community. This allows them to offer low prices while raising the costs of maintenance for the original manufacturers. For some players, there seems to be no limit to their creativity when it comes to undercutting competitors and winning bids.</p> +<p>The Free Software Foundation Europe has been analysing these and other problematic market practices over the last few years. In this talk we will take a closer look at them and show why they harm Free Software manufacturers and the Free Software ecosystem. We will then discuss ways to limit the success of such practices.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Johannes Näder + + 1 + 1 + + + 16:20 + 00:15 + Web Accessibility is actually well-forgotten old + https://www.sfscon.it/talks/web-accessibility-is-actually-well-forgotten-old/ + + <p>Trends are cyclical, even in the tech world. A few years ago, everyone was talking about D&amp;I in the workplace. This season, web accessibility absolutely occupies the first lines of code. How is it shown? Let&#8217;s talk about it &#8211; many do not understand how to implement it in their project.</p> +<p>First, relax. This is a really complex topic that requires not only a well-created website, but also communication with real users who cannot fully use the Internet, for example, without a screen reader.</p> +<p>A checklist that will convince you to try implementing WA into your application:</p> +<p>◦ What can be adapted for WA?<br /> +◦ How is WA testing done?<br /> +◦ How to use AI in WA?</p> +<p>If we haven&#8217;t convinced you, then look at WA from the point of view of strengthening your personal brand in the market.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Sofia Etingof + Juri Solovjov + + 1 + 1 + + + 16:40 + 00:15 + LibreOffice as JavaScript idiomatic WebWidget + Library + https://www.sfscon.it/talks/libreoffice-as-javascript-idiomatic-webwidget-library/ + + Making LibreOffice a native part of the web, using FOSS for highly customizable office document handling in the browser, based on WASM. + Making LibreOffice a native part of the web, using FOSS for highly customizable office document handling in the browser, based on WASM. + <p>LibreOffice can be highly integrated into desktop and server applications and we wanted to make this also possible for web apps. Running fully client side with Web Assembly, LibreOffice can now be used and customized by a JavaScript idiomatic API, becoming an easy usable component for web development. With this Free Software opens the door to a completely different approach for bringing office document handling into the browser, then from what&#8217;s known from Google Docs and Co.. Use cases may be the integration of widgets with rich text documents, including classic desktop macros, into browser based applications or enabling JavaScript to interact live with values in spreadsheets. But LibreOffice can also work as background WASM library, converting documents from and to all supported formats like ODF (ODT, &#8230;), MS formats (DocX, XlsX, Doc, &#8230;), PDF or HTML, while applying custom conversion filters for things like macro sanitization.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Moritz Duge + + 1 + 1 + + + 17:00 + 00:15 + Using software tools and AI to audit e-commerce food regulations + https://www.sfscon.it/talks/using-software-tools-and-ai-to-audit-e-commerce-food-regulations/ + + <p>Selling food products on a website or e-commerce platform in Italy is subject to the Food Information of Consumers (FIC) regulations. These regulations dictate mandatory information that must be communicated on the product page, with fines for non-compliance. In this talk, we will cover the key guidelines and legal requirements, and demonstrate how we can use software tools and artificial intelligence to check large quantities of product listings for discrepancies. Join us to learn how to streamline the process of verifying food information and enhance consumer trust.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Davide Montesin + + 1 + 1 + + + 17:20 + 00:15 + Tag manager + https://www.sfscon.it/talks/tag-manager/ + + <p>Presentation of our tool, which is an free alternative to Google Tag Manager and also helps manage cookie banners.</p> +<p>Features:<br /> +&#8211; code injector<br /> +&#8211; code templating<br /> +&#8211; cookie banner manger</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Sandro Antonucci + + 1 + 1 + + + 17:40 + 00:15 + State of Microsoft Windows Refund (2024) + https://www.sfscon.it/talks/state-of-microsoft-windows-refund-2024/ + + Getting a Refund of your Microsoft Windows License - present and future + Getting a Refund of your Microsoft Windows License - present and future + <p>If you are a lover of the Free Software movement you probably already tried something else than Microsoft Windows on a computer.</p> +<p>What you may not know, is that computer resellers usually charge end-users with the Fee of the Microsoft Windows License, even before you accept the Microsoft Terms of Services, and even if you completely want to uninstall Windows from your computer.</p> +<p>This is a critical Tech Neutrality issue that fuels non-European proprietary software houses. What to do?</p> +<p>&#8211; heritage of Luca Bonissi against Big Tech(s)<br /> +&#8211; current status and problems<br /> +&#8211; opportunities in Europe, and partnership between Free Software Foundation Europe and Italian Linux Society.</p> +<p>Thanksgiving to community members who tried the procedure, and simplifying that procedure.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Valerio Bozzolan + + 1 + 1 + + + + + 10:30 + 00:30 + Ada & Zangemann + + Side Event - School Reading + Side Event - School Reading + Side Event,School Reading + 0 + 0 + + + + + 11:00 + 00:15 + Open Access for Museum Collections and Research + https://www.sfscon.it/talks/open-access-for-museum-collections-and-research/ + + <p>The digital era has revolutionised the way we access information and interact with it. Museums, as custodians of cultural and historical artefacts, can benefit substantially from this transformation. Open Access and FOSS can greatly increase the potential of museums for public outreach: enhance their educational impact and inspire new forms of cultural engagement and knowledge discovery. For example, by digitising collections and enabling Open Access for diverse audiences, accessibility barriers are eliminated and thousands of hidden treasures become available to both researchers and the wider public. Additionally, innovative data visualisations via FOSS platforms can reveal compelling insights into object collections and the research associated with them; Open Access can thus make complex research accessible and engaging to a broader audience. Through such practices, museums can democratise their activities and enrich the visitor experience. The process is not without obstacles; common challenges museums face in adopting Open Access policies are copyright issues, data privacy, and resource limitations.</p> +<p>The presentation will discuss the aforementioned opportunities and issues currently emerging in the museum sector. The talk will be illustrated with examples from the Deutsches Museum in Munich, the world’s largest museum of science and technology.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Artemis Yagou + + 1 + 1 + + + 11:20 + 00:15 + Journeying through Data Spaces – New Path to Interoperability? + https://www.sfscon.it/talks/journeying-through-data-spaces-new-path-to-interoperability/ + + <p>Data spaces play a pivotal role in advancing digitalisation and interoperability within and across different business domains, both on a national level and cross-borders. However, it&#8217;s not a new concept since its roots date back to 2005. The definition has evolved over the years and today it covers all four layers of interoperability defined by the European Interoperability Framework (EIF).</p> +<p>Today, the term data space has several different definitions depending on whom you ask. Also, multiple international initiatives are working on data spaces to create common governance models, specifications, reference implementations, etc. The aim of this talk is to discuss the data space concept, different actors working on data spaces and their roles and responsibilities, and available specifications and building blocks.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Petteri Kivimäki + + 1 + 1 + + + 11:40 + 00:15 + DOOF – an Open Source Orchestration Framework for Decentralized Consent Management + https://www.sfscon.it/talks/doof-an-open-source-orchestration-framework-for-decentralized-consent-management/ + + <p>DOOF stands for Data Ownership Orchestration Framework. It is a framework developed for NGI Trustchain Project within a broader Next Generation Internet scheme of the EU in order to address a lack of decentralization in consent management regarding users’ sharing of their data. The aim of DOOF is to revolutionize personal data governance and normalise the deployment of consent management and privacy enhancing technologies. It uniquely enables individuals to control their rights over data sharing, fostering greater trust and regulatory compliance, essential for building a resilient and transparent data economy.<br /> +DOOF targets the gap in current centralized consent management, where GDPR and Data Act demand seamless data exchange and regulatory compliance. Yet the sharing and consent management regarding users’ data is centralized &#8211; a responsibility of the data intermediary &#8211; which comes with great costs and liabilities.<br /> +With DOOF, Ecosteer aims to separate and decouple the layer of physical data transferring from the layer of consent management. DOOF offers companies a framework that allows them to easily adopt Privacy Enhancing Technologies (PETs) for the actual sharing of data and enforcement of users’ decisions.<br /> +The framework consists of a set of SDKs, libraries and a Smart Contract for decentralised consent management. The main component of the framework is a worker pipeline, consisting of extensible, plug-in processors. This pipeline contributes to the low-code movement, offering a framework that can be easily adapted to different business needs. Companies can easily build verticals on this existing framework by just extending some of its functionalities.<br /> +This talk will focus on the concept of decentralized consent management as well as pipeline-based orchestration framework, outlining the process of creating a novel, re-usable and extensible open-source project.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Georgiana Bud + + 1 + 1 + + + 12:00 + 00:15 + Accelerating territory&#8217;s development through Open Data + https://www.sfscon.it/talks/accelerating-territorys-development-through-open-data/ + + Open Data Hub and south tyrolean examples + Open Data Hub and south tyrolean examples + <p>In recent years, Open Data has revolutionized the way governments, companies and individuals access and use information. The openness of public and private data represents a milestone on the path towards a more transparent, participatory and competitive society.<br /> +Open Data represent a resource for society and businesses and contribute to the development of a territory. This added value manifests itself in various forms, including transparency and democratic participation, technological innovation, economic development and improved services.<br /> +The talk will focus on specific case studies from the Open Data Hub in the Autonomous Province of Bolzano, a region which has shown a strong commitment to the adoption and promotion of Open Data.<br /> +Through the analysis of these cases, the aim is to demonstrate how the initiatives based on Open Data have led to concrete and tangible results, offering useful and applicable insights also in extra-regional contexts.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Luisa Marangon + + 1 + 1 + + + 12:20 + 00:15 + Sensor Things API QGIS core provider + https://www.sfscon.it/talks/sensor-things-api-qgis-core-provider/ + + <p>Sensor Things API (STA, in short), is an OGC specification for storing and retrieving (timeseries of) Sensor Observations.</p> +<p>FROST-Server, developed by Fraunhofer IOSB, is one of the most consolidated implementations of STA with a very detailed documentation and a lot of background information. The implementation includes a REST endpoint to insert, modify and retrieve STA entities with a query language based on OASIS Odata URL patterns and query options.</p> +<p>A QGIS experimental plugin, developed by Deda Next srl in 2022 and implemented in python within the EU project Air-Break, is currently available to connect to STA-compliant endpoints and retrieve sensor data (e.g. European Air Quality data from this endpoint). The plugin has an embedded data provider which is currently designed to retrieve sensors&#8217; locations as geometrical features and then request the time series of observations for specific locations.</p> +<p>However, in order to offer support to a wider range of use cases and more complex queries on STA model entities, Faunalia and DedaNext (funded by BRGM) started to plan for a dedicated STA data provider for GIS: a development group was set up involving the QGIS community, formal acceptance of the proposal was sought within the QGIS community (QEP #257) and possible development options for the provider (ex: python vs C++) were analyzed. As STA is an OGC standard, it seemed appropriate to implement it in C++ as a core element of QGIS.</p> +<p>Development has therefore been carried out in close interaction with the QGIS developer community with the focus on supporting complex STA queries, implementing among other things:</p> +<p>&#8211; expansion of relations among model entities;<br /> +&#8211; independent attribute filtering and sorting on all entities;<br /> +&#8211; efficient data caching to limit unnecessary data transfers;</p> +<p>This new core element is available from QGIS version 3.37 (currently only available as nightly release).</p> +<p>Finally, plans are underway to develop a new version of the QGIS STA plugin (originally developed by Deda Next within project AirBreak) focused on data exploration and analysis that will be able to leverage on the newly released core STA data provider to support a wider range of use cases, such as:</p> +<p>&#8211; Time series analysis: This is the case of the old STA plugin. Fetch Locations, show them on the map. Then, upon selection of one location, fetch all related Things and Datastreams, and finally, fetch the Observations of the desired Datastream to be shown in a table or plot;<br /> +&#8211; Space-time series analysis: Given a selected set of Datastreams from a moving sensor, get all the FeaturesOfInterest of those Datastreams and plot them on the map, so to have a view of the path of the moving sensor and a hold on its values on every part of that path;<br /> +&#8211; Monitoring and inspection: Fetch all the latest observations of all Datastreams (or a selection based on the ObservedProperty) and show these at their Locations, styled by the result of the latest Observation of a given ObservedProperty. Then, in a second phase (eg. if a value is over a threshold), inspect the full timeseries of that one Datastream.<br /> +&#8211; Tracking of moving things: Show all Things with their current Location and their HistoricalLocations with the Temporal Controller (time slider).</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Matteo Ghetta + Luca Giovannini + + 1 + 1 + + + 12:40 + 00:15 + EO4MULTIHAZARDS Web Application + https://www.sfscon.it/talks/eo4multihazards-web-application/ + + <p>The EO4MULTIHA project (https://eo4multihazards.gmv.com/), funded by the European Space Agency, aims at developing an open database gathering and harmonizing event information coming from already existing event databases to support multi-hazard(-risk) research.<br /> +To pursue this aim, this project which has been developed in the EURAC research, Center for Sensing Solutions, presents a comprehensive web application designed to analyze and visualize multi-hazard events, developed using Django and PostgreSQL. Leveraging the strengths of open-source technologies, the application provides a robust platform for researchers, policymakers, and the public to access and understand the complexities of multi-hazard scenarios. The main parts of this web application is explained in the following paragraphs:</p> +<p>(i) The core of the application is built with Django, a high-level Python web framework known for its rapid development capabilities and clean, pragmatic design. PostgreSQL, a powerful and scalable open-source relational database system, ensures efficient data storage and management. Together, these technologies offer a reliable and flexible foundation for handling diverse and large datasets.</p> +<p>(ii) To visualize the events, Leaflet Map which is an open source contributor to the OpenStreet Map has been used.</p> +<p>(iii) To populate the database, the application exploits various RESTful APIs, integrating data from multiple sources, including satellite imagery, climatological records, in-situ measurements, and relevant statistical data. This multi-source approach allows for a comprehensive characterization of risks, exposures, and susceptibilities associated with multi-hazard events benefiting from the Open Data Standards such as OGC Standard.</p> +<p>(iiii)Key features of the application include spatial and temporal filtering of events, cross-linking of data sets for enhanced reusability, and compliance with open standards such as RESTful APIs and OGC standards. The platform is designed to be expandable, with the potential to incorporate additional locations and datasets in the future.</p> +<p>By providing an accessible online platform, this web application aims to support the understanding and analysis of multi-hazard events, facilitating informed decision-making and effective disaster management strategies. The use of open-source technologies and the integration of diverse data sources underscore the project&#8217;s commitment to innovation, scalability, and community-driven development.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Mahtab Niknahad + + 1 + 1 + + + 13:00 + 00:15 + BASIC CORE South Tyrol + https://www.sfscon.it/talks/basic-core-south-tyrol/ + + A project to solve the topographical complexity of the National Spatial Data Catalogue + A project to solve the topographical complexity of the National Spatial Data Catalogue + <p>The project has its roots in a precise and simplified cartographic updating methodology introduced by the Consortium of Municipalities of the Province of Bolzano in the early 2000s. This methodology, which was consolidated over the years, could no longer be applied following the adoption of the Territorial Data Catalogue (Ministerial Decree 10.11.2011 &#8220;Technical rules for defining the content specifications of geotopographic databases&#8221; and subsequent amendments) due to the complexity and articulation of the new national model. The primary objective of the project was to research and define a minimum set of information that could adequately describe the territory within the typical use context of the public administration, ensuring its sustainability in terms of the ability to keep it updated and aligned with the transformations of the territory. Simplifying the definition and understanding of the basic technical layer that every public administration producing geographic data must guarantee within their institutional activities for geotopographic databases is a fundamental step to adequately support territorial management. Lightened of the informational content already managed by the Provincial Administration within archives or sectoral Information Systems, and consequently already included in existing and consolidated maintenance and updating flows, as well as everything that can be considered three-dimensional data nowadays obtainable through faster and more accurate systems, the Basic Core (BC) specification was produced by reorganizing and simplifying the information levels contained in the National Territorial Data Catalogue with reference to the identified minimum subset of required information known as the National Core (NC). To make it practically usable, only the themes considered objectively useful and easily updatable were included in the Basic Core. Our presentation will outline the key points that enabled the design of the Basic Core content specification and illustrates the technological tools developed, as well as the automatic transformation and simplification procedures that led to the significant reduction in the number of object classes provided by the National Core (from 59 to only 23), demonstrating that the Basic Core project is not a merely theoretical exercise, but a practical and concrete application currently tested and successfully used in South Tyrol. The specifically developed Dashboard for managing, correcting and updating the provincial Geotopographic Database, built on the basis of this new simplified specification, will be explained in detail. This dashboard allows effective operation on every management aspect, including the crucial task of sharing maintenance responsibilities between the Provincial and Municipal levels, thus ensuring the full efficiency of this fundamental geographic base. Particular attention will be given to illustrating the guided editing functionality available directly from the online interface, as well as the options for creating and exporting QGIS projects. QGIS projects are designed to perform the most significant and advanced corrections and/or updates. We will conclude the overview of this innovative system with a demonstration of the processes for reimporting and validating the updated data. Finally, practical cases in which the Basic Core has been used will be presented, as well as future developments, already planned and those still under evaluation, that the system will receive in order to refine and make its use more robust.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Edoardo Scepi + + 1 + 1 + + + 13:20 + 00:15 + Sharing Connects People + https://www.sfscon.it/talks/sharing-connects-people/ + + The experience of Think Open at CIMeC + The experience of Think Open at CIMeC + <p>Think Open is an Open Science initiative born within CIMeC in 2018 whose goal is to build a virtual space within which researchers at the Center can share different kinds of outputs from research, integrating and merging information from different sources and stages of the knowledge-building process. A number of achievements have been made over the years, both from the point of view of training (seminars, hands-on, courses for doctoral students, awards, etc.) and implementation of best practices (code and data sharing, adoption of free-software tools, etc.). Here we will describe how sharing open practices in everyday working routines foster connections between people, creating practice-based communities.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Vittorio Iacovella + + 1 + 1 + + + 13:40 + 00:15 + Hacking your (electric) car: the importance of Open Data + https://www.sfscon.it/talks/hacking-your-electric-car-the-importance-of-open-data/ + + Gathering information from the OBD (On Board Diagnostic) port of your car could be challenging + Gathering information from the OBD (On Board Diagnostic) port of your car could be challenging + <p>Any car has a diagnostic connector from which you can gather and/or set data from the various ECU (Engine Control Unit) that are present in your car, such as odometer, temperatures, motor rotation speed, accelerator depression percentage, wheel angle, lights, and – in an electric car – information about battery, remain energy, charging/discharging power, etc.<br /> +The big challenge is that the meaning of fathered data is usually not known and car manufacturers are reluctant to share this information.<br /> +This talk will illustrate how to scan the available data and make reverse engineering in order to try to create a shared database containing (useful) car data and PIDs (Parameter IDs) from ECUs of your car.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Luca Bonissi + + 1 + 1 + + + 14:00 + 00:15 + The Innovation Paradox + https://www.sfscon.it/talks/the-innovation-paradox/ + + Do you really know how to unleash and manage innovation? + Do you really know how to unleash and manage innovation? + <p>In the era of the Fifth Industrial Revolution, leaders, innovators and pioneers design, generate, and shape future-proof organizations, driven by a meaningful purpose promoting social impacts, combining emerging technologies and new ways of collaborating and conceiving work. While the &#8220;why&#8221; is clear and quite declared by many, the &#8220;what&#8221; to do and the &#8220;how&#8221; to do it remain very nebulous and, in some cases, obscure. Those ones who lead innovation within an organization suffer the innovation paradox: must innovate without knowing what and how. Innovators and pioneers are often alone, without a framework and processes for an open innovation execution. How can we unlock and unleash innovation, ensuring that the actions taken are always driven by what is truly needed to evolve your organization?</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Andrea Solimene + + 1 + 1 + + + 14:20 + 00:15 + The FSFE Italy Project from Understanding to Testing + https://www.sfscon.it/talks/the-fsfe-italy-project-from-understanding-to-testing/ + + How I applied design-thinking to re-design the Italian Free Software Community + How I applied design-thinking to re-design the Italian Free Software Community + <p>The role of Deputy Coordinator Italy within the Free Software Foundation Europe (FSFE) was born in 2022 out of the need of re-establishing the presence of the Foundation on the territory. I designed this three years experimental project together with the <a href="https://freesoftwarelab.noi.bz.it/">Free Software Lab</a> of NOI Techpark with the value proposition of (re)designing the FSFE Italian Community.</p> +<p>The project followed a human centric approach, moving along the five core stages of design-thinking. The goal of my talk is to describe the FSFE Italy project and the design-thinking approach adopted.</p> +<p>The first year (Y1) served as the understanding phase: I got involved as an FSFE representative in the main communication channels used by the Free Software (FS) community on the territory. I conducted interviews with volunteers, associations’ heads and enthusiasts, took part into the main FS events organized on the territory, mapped all stakeholders (understanding-observing) and created my own point of view (POV). By the end of 2022 I had already became an established FSFE representative on the territory, having gathered inputs and ideas on how to kick off the community into year two (Y2). The goal of year two was to build on these new ideas (ideation) and put these thoughts into action (prototyping) by finding common goals and activities with the main FS associations active on the territory and signing Memorandum of Understandings, preparing the ground to test it in the third year (Y3). Guess what was the result?</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Marta Andreoli + + 1 + 1 + + + 14:40 + 00:15 + NGI: No more EU funding for Free Software?! + https://www.sfscon.it/talks/ngi-no-more-eu-funding-for-free-software/ + + <p>During the summer the European Commission made the decision to stop funding Free Software projects within the Next Generation Internet initiative (NGI). This decision results in a loss of €27 million for software freedom. Since 2018, the European Commission has supported the Free Software ecosystem through NGI, that provided funding and technical assistance to Free Software projects. This decision unfortunately exposes a larger issue: that software freedom in the EU needs more stable, long-term financial support. The ease with which this funding was excluded underlines this need.<br /> +This talk shows the urgent need for sustainable, long-term financial support for Free Software to ensure Europe&#8217;s technological independence.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Alexander Sander + + 1 + 1 + + + 15:00 + 00:15 + What the open source community means to me + https://www.sfscon.it/talks/what-the-open-source-community-means-to-me/ + + Some very personal thoughts on why contributing can enrich your life + Some very personal thoughts on why contributing can enrich your life + <p>Everytime I tell my friends about my hobby which noawadays has also become my job, I face lots of questions. A worldwide community? Contributors around the globe? An open source community? What is this all about?</p> +<p>In this talk, I&#8217;d like to share my very personal view about what the open source community means to me, how to grow from user into community member, how the credit of trust helps you to discover your own skills, how to make friends around the world and why it&#8217;s not only fun to get active in a community, but also a big benefit for your whole life that can help you to broaden your mind.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Florian Effenberger + + 1 + 1 + + + 15:20 + 00:15 + A Journey of Contribution and Collaboration in Open Source + https://www.sfscon.it/talks/a-journey-of-contribution-and-collaboration-in-open-source/ + + Why Foundations are Essential + Why Foundations are Essential + <p>Have you ever worked on a project that didn&#8217;t use any open source tools, libraries, or products? Didn&#8217;t think so&#8230;Using open source has been such an integral part of our daily work life that we don&#8217;t even think about it. We just expect it to be available, secure, stable, and bug-free. But how many of you are actually contributing back to an open source project?</p> +<p>This session will go through a couple of the aspects to consider when you are embarking on your open source journey. We will look at different kinds of open source projects, and what the open source foundations bring to the table.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Ivar Grimstad + + 1 + 1 + + + 15:40 + 00:15 + Jakarta EE: Why and how to get involved in Open Source Software? + https://www.sfscon.it/talks/jakarta-ee-why-and-how-to-get-involved-in-open-source-software/ + + <p>In this session you will learn how to become part of an open source community, how to get involved and most importantly why you need to do it! You will learn about the Jakarta EE and its plans for the future, so you can start right away! This presentation will also provide you with key insights into the industry-wide, open source collaboration to modernize Java enterprise systems for cloud-centric use cases.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Tanja Obradovic + + 1 + 1 + + + 16:00 + 00:15 + From Concept to Camp: Project Management Strategies for IT Education Events + + + <p>In today’s fast-paced technological landscape, the need for immersive and hands-on educational experiences is more crucial than ever. &#8220;From Concept to Camp: Project Management Strategies for IT Education Events&#8221; delves into the meticulous process of organizing successful IT camps from a project management perspective.</p> +<p>Join us as we explore the comprehensive journey of bringing an IT camp from initial concept to a fully realized event. We will cover essential project management strategies, including planning, scheduling, resource allocation, risk management, and post-event evaluation. Participants will gain insights into: Defining Objectives and Scope; Budgeting and Resource Management; Team Collaboration and Leadership; Marketing and Participant Recruitment; Logistics and Event Planning; Evaluation and Feedback.</p> +<p>Through real-world examples and practical advice based on the Red Hat Summer Camp Brno project, this talk will equip you with the tools and knowledge needed to transform your vision of an IT camp into a reality.</p> +<p>Whether you’re planning your first event or looking to enhance your current approach, this session will provide valuable takeaways to elevate your project management skills and deliver exceptional educational experiences.</p> + + SFSCON + SFSCON + SFSCON + + Juri Solovjov + Yuliia Kliuchnikova + + 1 + 1 + + + 16:20 + 00:15 + Building the Public Interest Desktop + https://www.sfscon.it/talks/building-the-public-interest-desktop/ + + Our experience organizing GNOME's Sovereign Tech Fund project + Our experience organizing GNOME's Sovereign Tech Fund project + <p>The Sovereign Tech Fund is a new funding program for critical free software infrastructure by the German government. As part of this, members of the GNOME community have been working on fixing important issues across the free desktop stack. This includes security, accessibility, maintainability, hardware support, and more.</p> +<p>In this talk Sonny and Tobias will give an overview of how we organized the project, the work done as part of it, and the massive impact a relatively small amount of public money can have on making the free desktop better.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Tobias Bernard + Sonny Piers + + 1 + 1 + + + 16:40 + 00:15 + Let&#8217;s share our love for Free Software + https://www.sfscon.it/talks/lets-share-our-love-for-free-software/ + + I love Free Software Day 2025 + I love Free Software Day 2025 + <p>We often underestimate the power of a simple Thank You. Free Software contributors do important work for our society and the &#8220;I Love Free Software Day&#8221; on 14 February is the perfect opportunity for you to express your special gratitude. Since 2010, we have celebrated this wonderful annual event with an ever-growing and diverse community. ♥</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Ana Galan + + 1 + 1 + + + 17:00 + 00:15 + MoodleXR: A Next-Generation Open-Source Platform for Immersive Learning + https://www.sfscon.it/talks/moodlexr-a-next-generation-open-source-platform-for-immersive-learning/ + + <p>This project aims to develop a state-of-the-art Learning Management System (LMS) based on Moodle, optimized for delivering Virtual Reality (VR) and Augmented Reality (AR) learning modules.</p> +<p>By leveraging the open-source nature of Moodle and integrating advanced immersive technologies, the project seeks to create an innovative educational platform that transforms traditional learning experiences.</p> +<p>The LMS will incorporate open-source VR/AR tools and libraries, such as A-Frame, AR.js, and Blender, enabling educators to seamlessly integrate and manage immersive content. It will support various VR headsets and AR devices, ensuring broad accessibility. The platform will feature interactive learning modules, robust analytics, and scalable infrastructure, all built on open-source technologies like Kubernetes and Matomo.</p> +<p>Additionally, the project will emphasize accessibility and privacy compliance, utilizing tools like WAVE and Let’s Encrypt.</p> +<p>By fostering a community-driven development model, this LMS will offer a flexible, cost-effective solution that revolutionizes education through experiential learning, making it more engaging, interactive, and effective for students and educators alike.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Luca Bagna + + 1 + 1 + + + 17:20 + 00:15 + Implementing digital examinations in free software systems + https://www.sfscon.it/talks/implementing-digital-examinations-in-free-software-systems/ + + <p>In Finnish upper secondary schools course and final exams have been digital for some years now. Ordinary student laptops are routinely booted from USB flash drives to a special operating system, which provides a restricted environment allowing students to take an exam with no distractions or tools to cheat. Up to these days, this was implemented with Debian GNU/Linux, also meaning that student laptops must be Linux-compatible.</p> +<p>This is now changing. Not every modern laptop can simply boot from a USB drive to run Linux, these including chromebooks, Apple laptops and some new Windows laptops. Some schools may want to buy these devices and do not want a separate set of computers only for examinations. The current system is being replaced by an exam application, meant to run on different operating systems, which are to provide guarantees that no cheating can occur. The exam application activates the &#8220;assessment mode&#8221;, provided by operating system vendors, and this mode should provide a safe place where no cheating can occur, even on computers owned by the students.</p> +<p>Does that even make sense? Can that really be done, and with free software? In this presentation we take a peek at some technologies in Linux systems that can be used to secure a computer against an attacker with a physical access to the machine. We will also look at possible ways to implement an &#8220;assessment mode&#8221; in Linux desktops.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Juha Erkkilä + + 1 + 1 + + + 17:40 + 00:15 + Let’s spark children’s interest in coding + https://www.sfscon.it/talks/lets-spark-childrens-interest-in-coding/ + + Our experiences and how you can contribute + Our experiences and how you can contribute + <p>Today it is impossible to imagine daily life without software. The majority of us can&#8217;t spend a single day without using it. People use software in the workplace, on laptops, and on mobile phones. Software is also found in less obvious places however: in trains, cars, televisions, washing-machines, fridges, and many other devices. None of these devices could function without software. Without software we couldn&#8217;t write e-mails, make phone calls, go shopping, or travel as we are accustomed to. Software is our society&#8217;s central tool. How do we ensure that the next generation is motivated and capable of shaping technology for society&#8217;s benefits?</p> +<p>The Free Software Foundation Europe&#8217;s volunteers and staff have interacted with over 1700 children between 6 to 10 years in the past months. Children, especially girls, afterwards were motivated to start experimenting with hardware and software. In the discussions we saw that they realise how crucial technology will be for them. Furthermore with the FSFE&#8217;s coding competition &#8220;Youth Hacking 4 Freedom&#8221; we gathered experiences working with teenagers who program, tinker, and have fun with software.</p> +<p>Learn more about the experiences how the FSFE sparks children&#8217;s and teenagers interest to tinker, experiment and program. Furthermore you will see how fulfilling those activities can be for yourself.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Matthias Kirschner + + 1 + 1 + + + + + 11:00 + 00:15 + Open-source silicon chips + https://www.sfscon.it/talks/open-source-silicon-chips/ + + <p>We have all heard that there is &#8216;Intel inside&#8217;, but what is inside Intel? Almost all integrated circuits today are literally black boxes. They may contain unwanted or malicious features and, most importantly, they do not encourage reuse, nor do they allow it. The two main causes of such secrecy are: 1. standard design tools explicitly forbid the publication of any output, and 2. most foundries disallow disclosing technology details. Designers moreover face additional problems: The licence cost of standard design tools is unaffordable for most SMEs (unless questionable discount policies are applied), and lock-in threats arise at many levels, from IP blocks to foundry details to file formats. Yet exceptional progress has been made in recent years: Hundreds of silicon chips have been designed using free and open-source tools, and three foundries have made details of their processes public: The doors to free silicon are open! Hence how is politics reacting? What are the next steps to be taken? What are the opportunities for users, society and companies?</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Luca Alloatti + + 1 + 1 + + + 11:20 + 00:15 + Opt out? Opt in? Opt Green! Bringing Free Software To Eco-Consumers + https://www.sfscon.it/talks/opt-out-opt-in-opt-green-bringing-free-software-to-eco-consumers/ + + <p>Free Software gives consumers what they want, but many don&#8217;t know it &#8230; yet! We aim to change that by reaching out directly to eco-consumers in the &#8220;Opt Green&#8221; project, a new KDE Eco initiative funded by the German Environmental Agency.</p> +<p>Consumers want sustainable software: in a recent European poll 50% of respondents say the two primary reasons they purchase a new device are non-functioning software and software performance issues. This is as good a time as ever for an &#8220;Opt Green&#8221; message. In the next couple of years Windows 10 end-of-life and the phasing out of Intel-based macOS support will make e-waste out of hundreds of millions of computers. Functioning but vendor-abandoned devices can stay out of the landfill and in use for many years to come. With software designed for users&#8217; needs, not vendors&#8217;, it is possible to run software on the devices one already owns. Lean, efficient Free Software even runs on devices that are decades old. This is good for users, and better for the environment!</p> +<p>In this lightning talk I will provide an overview of the whys and hows of KDE Eco&#8217;s &#8220;Opt Green&#8221; initiative. Through campaigns and workshops over the next 2 years, we will raise awareness about environmental issues driven by software and demonstrate the power of Free Software to drive down resource use and keep devices running smoothly for years beyond official vendor support. This is all possible because Free Software *is* right-to-repair software: it removes vendor dependencies and guarantees transparency and user autonomy, providing full control over software, and thus hardware. I will describe the ways we plan to reach our target audience, including materials designed for eco-consumers and events well outside usual tech circles, such as open-air organic, artisanal, and fair trade markets, cultural centers, and others. These activities give us the opportunity to align our values in the Free Software community with those in allied communities striving for a sustainable modern lifestyle.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Joseph P. De Veaugh-Geiss + + 1 + 1 + + + 11:40 + 00:15 + ClapMetrics: Decoding Users’ Gender and Age Through Smartwatch Gesture Dynamics + https://www.sfscon.it/talks/clapmetrics-decoding-users-gender-and-age-through-smartwatch-gesture-dynamics/ + + <p>In this presentation, we introduce ClapMetrics &#8211; an innovative and seamless method for deducing the gender and age of smartwatch users. This system ingeniously harnesses the capabilities of the smartwatch’s integrated 3D sensors — specifically, the accelerometer and gyroscope—to capture the wearer’s arm movements during a clapping action. ClapMetrics operates on the principle that each clap is a complex interplay of motion, unique to the individual, much like a fingerprint. By analyzing these movements, ClapMetrics can gather rich biometric data without any active input or effort from the user, making it a remarkably non-intrusive technology. We will delve into the specifics of how ClapMetrics processes sensor data to make its estimations. We will explore the Neural Network’s architecture, the training process, and how the model interprets the sensor data to make reliable predictions about the wearer’s gender and age.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Attaullah Buriro + + 1 + 1 + + + 12:00 + 00:15 + Adoption Determinants of Open Hardware Across Industries + https://www.sfscon.it/talks/adoption-determinants-of-open-hardware-across-industries/ + + <p>Open Hardware (OH) is revolutionizing the way we approach technology in several areas, such as agriculture and healthcare. These areas, which are fundamental to food availability and human well-being, are undergoing an important shift as open hardware licensing strategies, inspired by open-source software (OSS), make solutions more accessible, affordable, and customizable. In this talk, we review major factors determining the use and adoption of OH technologies, including economic advantages, opportunities, and challenges.<br /> +Similar to OSS, OH applications are gaining momentum. In agriculture, farmers and researchers are turning to OH for precision farming tools, environmental monitoring, and robotics. These technologies not only reduce development costs but can be easily adapted to specific local needs, enhancing their effectiveness in diverse agricultural environments – crucial for small-scale farmers in developing countries and rural areas who face financial constraints. Likewise, the healthcare industry is benefiting from OH through the development of affordable medical devices, diagnostic tools, and treatment systems. The high costs and regulatory challenges associated with traditional medical devices often limit access to essential healthcare, especially in underdeveloped regions. Examples include open-source ventilators, syringe pumps, and diagnostic devices.<br /> +Applications of OH will be showcased through a comparative analysis of successful projects, particularly those with high engagement on platforms like GitHub, characterized by community engagement, active forums, and regular updates. Finally, we will draw conclusions about the potential of OH for industries beyond agriculture and healthcare, encouraging further innovation and collaboration in the open-source community.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Seckin Celik + Davide Serpico + + 1 + 1 + + + 12:20 + 00:15 + Enabling global interoperability among smart devices is only possible through Open Source + https://www.sfscon.it/talks/enabling-global-interoperability-among-smart-devices-is-only-possible-through-open-source/ + + Oniro and OpenHarmony a cooperation to build a global ecosystem + Oniro and OpenHarmony a cooperation to build a global ecosystem + <p>Global interoperability is probably the biggest problem that smart devices have been studied for more than 10 years. Multiple solutions have been proposed with different results, but none of them has established a reference framework and a global adoption. One of the main reasons for this to stay as a key element for research and investment is the diversity among the whole technology stack and geographical dispersion of device manufacturers. In the last years, there is a solution that is capturing the attention by demonstrating how an open source operating system can enable global interoperability in a huge domestic market like China. This solution is OpenHarmony and through a cooperation with Eclipse Foundation Oniro project, it is intended to use open source to drive interoperability and therefore solve one of the biggest challenges in the IoT and smart device industry. During the talk, it will be presented the approach followed by these two independent initiatives to cooperate while keeping the independence of the open source communities behind them.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Juan Rico + + 1 + 1 + + + 12:40 + 00:15 + Smart Werke Meran &#8211; Lorawan Use Cases + https://www.sfscon.it/talks/smart-werke-meran-lorawan-use-cases/ + + Our Use Cases realized with 100% Open Source + Our Use Cases realized with 100% Open Source + <p>Stadtwerke Meran has had a Chripstack Lorawan server and 19 Lorawan gateways for a year now. Merano has a well-developed Lorawan network.</p> +<p>We have realized the following use cases:</p> +<p>Remote control of public lighting.<br /> +Temperature measurement ( Just Nature project)<br /> +Smart metering for our water customer<br /> +GPS tracking for waste compactors of our major customers</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Stefan Mutschlechner + + 1 + 1 + + + 13:00 + 00:15 + 2025 scenario on OpenISA OpenPower Open Hardware computing + https://www.sfscon.it/talks/2025-scenario-on-openisa-openpower-open-hardware-computing/ + + 2025 Real scenario on Open Hardware based on OpenISA OpenPower CPU + 2025 Real scenario on Open Hardware based on OpenISA OpenPower CPU + <p>We see on 2025 which OpenISA OpenPower low power chip will give life to new Open Hardware computers, we examine in detail which open hardware computers will be ready for 2025 based on these chips. It will be the first time that OpenPower OpenISA low power Chip will be produced, and what is more, it will be produced from other Silicon Companies different from IBM.<br /> +We will see who are the GNU/Linux distros that support PPC64 and PPC64el and PowerPC architecture that runs on these computers and how you can join to experiment with it and push forward these architectures.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Roberto Innocenti + + 1 + 1 + + + 13:20 + 00:15 + The SMART Box of AURA Project + https://www.sfscon.it/talks/the-smart-box-of-aura-project/ + + <p>AURA project centers on the development of &#8220;Green &amp; Smart Urban Furniture,&#8221; a new generation of urban furniture that transcends traditional roles by incorporating eco-friendly and intelligent features. These urban elements are designed with bioabsorbent vegetation capable of mitigating atmospheric pollutants, making them environmentally sustainable. Furthermore, they are outfitted with advanced IoT sensors that monitor a range of environmental parameters, including climate data, urban pollution, and vehicular traffic.</p> +<p>These smart urban furniture units not only establish an extensive urban monitoring network but also actively combat pollution through the sequestration and reduction of harmful substances via the integrated vegetation. The embedded IoT sensors provide innovative capabilities for tracking the impact of these elements on the surrounding urban environment, such as monitoring air pollution levels and assessing the effects of heat islands. Each furniture piece is equipped with a &#8220;smart box,&#8221; a hardware system constructed using low-cost commercial off-the-shelf (COTS) components. This system includes climate and environmental sensors, gas measurement devices, a processing unit, and a data transmission module. The accompanying software, developed from scratch, delivers localized information—such as CO2 sequestration, temperature, and humidity—and contributes to a comprehensive environmental monitoring network aimed at predictive analysis, including weather risks, heat wave alerts, and health risks associated with air pollution. The presentation will delve into the custom-developed software and its ability to meet the field-level requirements of the AURA Architecture, encompassing individual sensors, sensor nodes (smart-boxes within the furniture), and the broader network of these nodes. It will highlight the significant impact and benefits of utilizing free and open-source technologies throughout the development process. Key focus areas include the creation of drivers for individual sensors, with emphasis on the most representative examples, the development of software for sensor nodes—covering features like self-testing, over-the-air (OTA) updates, and MQTT communication—and the design of a dynamic web app for data presentation, leveraging JavaScript, Bootstrap, and a JSON Data Lake. This comprehensive approach underscores the importance of open technologies in accelerating innovation, ensuring flexibility, and delivering robust, scalable solutions for smart urban environments.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Angelo Serino + + 1 + 1 + + + 13:40 + 00:15 + Raspberry Pi and Node-RED: Open Source Tools for Local Automation and Industrial IoT applications + https://www.sfscon.it/talks/raspberry-pi-and-node-red-open-source-tools-for-local-automation-and-industrial-iot-applications/ + + <p>This talk will explore how Raspberry Pi and Node-RED enable robust solutions for automation and control systems in both industrial and local applications. Leveraging open-source technology, these platforms can handle a wide range of tasks, from reading sensor data and managing actuators, to controlling devices through industrial communication protocols such as Modbus, RS485 ascii RTU etc. Node-RED&#8217;s message-driven architecture simplifies the creation of control logic, even for complex operations, while Raspberry Pi serves as a powerful and cost-effective alternative to traditional PLCs and IPCs. The integration of these tools allows for seamless data processing, remote communication, and the development of HMI interfaces both user-friendly or more traditiconal SCADA-like, making these technologies ideal for creating IIoT-native solutions. This presentation will focus on the technical capabilities, showing how these platforms can empower engineers and developers to build flexible and scalable automation solutions.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Federico Boero + Alberto Nicoletti + + 1 + 1 + + + 14:00 + 00:15 + Approaches to Object Detection: Edge-Based and AI-Based + https://www.sfscon.it/talks/approaches-to-object-detection-edge-based-and-ai-based/ + + <p>This presentation explains why we passed to the expert system based on edge-based object detection on traditional image analysis techniques to the AI-based, leveraging advanced machine learning. The first method uses parameters derived from image analysis tools, focusing on attributes such as shape, size, and color of objects, informed by preliminary tests and expert data. The machine learning method employs a sophisticated algorithm that dynamically learns and identifies objects in images. We used both approaches using diverse datasets and measured their accuracy and efficiency under various conditions. The aim of this presentation is to show the improvement obtained by using the AI-based system applied for real-time detection and classification, offering insights into their practical strengths and applications.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Giovanni Giannotta + Orneda Lecini + + 1 + 1 + + + 14:20 + 00:15 + Proxmox Backup Server: Backup for your Datacenter + https://www.sfscon.it/talks/proxmox-backup-server-backup-for-your-datacenter/ + + <p>Backups are an essential component of every IT infrastructure, from small scale businesses up to large datacenters, spanning multiple locations. With the Proxmox Backup Server a fully Free and Open Source backup solution is available, being highly integrated with the Proxmox Virtual Environment.<br /> +This talk will present a short overview of the capabilites provided by Proxmox Backup Server, giving some insights into new and recently added features. Further, by peeking into the inner workings and the software design will show how fast, space efficient and reliable backups are created and how data consistency and integrity are guaranteed. Topics covered will include backups for Virtual Machines and Linux Containers running on top of Proxmox Virtual Environment as well as host level backups.</p> + + DevOps + DevOps + DevOps + https://www.sfscon.it/tracks/devops-track-2024/ + + Christian Ebner + + 1 + 1 + + + 14:40 + 00:15 + Cloud Costs with ClickHouse and OpenCost + https://www.sfscon.it/talks/cloud-costs-with-clickhouse-and-opencost/ + + <p>Managing costs and billing across numerous Cloud-managed Kubernetes clusters presents significant challenges. In this talk, we&#8217;ll explore these challenges and discuss solutions using ClickHouse and OpenCost. Leveraging ClickHouse&#8217;s capabilities, we&#8217;ll demonstrate how it efficiently imports diverse Cloud billing data streams. Additionally, we&#8217;ll delve into how OpenCost addresses the complexities of real-time cost management within a multitenant architecture. Join us to uncover practical insights into optimizing cloud costs effectively.</p> + + DevOps + DevOps + DevOps + https://www.sfscon.it/tracks/devops-track-2024/ + + Denys Kondratenko + + 1 + 1 + + + 15:00 + 00:15 + Ansible + https://www.sfscon.it/talks/ansible/ + + Lazy Engineer's Best Friend! + Lazy Engineer's Best Friend! + <p>For a software engineer DRY is not only a washing machine progam, but it represents a deeply-held mantra: Don&#8217;t Repeat Yourself.</p> +<p>To avoid repetitive manual work, automation tools like Ansible enable engineers to quickly configure infrastructure and easily deploy applications.</p> +<p>In this talk, we will explore the key concepts and benefits of Ansible for configuration management, deployment and orchestration of remote devices. We will start with an overview of Ansible&#8217;s utility, how it works, and common use cases. We will see how YAML files describe configurations and playbooks define automated tasks and processes.</p> +<p>Practical examples will show Ansible automation in action, including a quick introduction to initializing and keeping your operating system up to date by automating the installation and maintenance of system tools. We will also introduce the concept of dotfiles for configuration.</p> +<p>What are you waiting for? Learn how to spend 30 minutes automating 5-second tasks with Ansible! (It&#8217;ll save you time in the long run, I promise!)</p> + + DevOps + DevOps + DevOps + https://www.sfscon.it/tracks/devops-track-2024/ + + Marco Lampis + + 1 + 1 + + + 15:20 + 00:15 + Efficient Log Management in Large-Scale Kubernetes Clusters + + + <p>Large Kubernetes clusters can generate significant volumes of logs, especially when housing thousands of running pods. This may demand substantial CPU, RAM, disk IO, and disk space for storing and querying large log volumes. In this talk, we will look into different strategies of storing those logs in ElasticSearch, Grafana Loki and VictoriaLogs and examine how we can save 10x or more on infrastructure costs.</p> +<p>This talk presents real-world examples of efficient log management in large-scale Kubernetes clusters. It includes setup demonstrations, numerical data, and graphical representations from reproducible benchmarks.</p> + + DevOps + DevOps + DevOps + https://www.sfscon.it/tracks/devops-track-2024/ + + Aliaksandr Valialkin + + 1 + 1 + + + 15:40 + 00:15 + KubeVirt + + + making running virtual machines in a kubernetes cluster a mainstream activity + making running virtual machines in a kubernetes cluster a mainstream activity + <p>KubeVirt is a Kubernetes addon for running virtual machines inside a Kubernetes cluster.</p> +<p>Currently being in CNCF incubating state, it has a wide range of adopters by both vendors and end users, such as NVidia, Suse, ARM and Red Hat to name a few.</p> +<p>This talk gives an overview of what is currently possible with KubeVirt on your cluster and what its future may look like. We will describe some of the features it supports, i.e. VM Import, LiveMigration, Snapshot/Restore and Monitoring.</p> +<p>At the end of the talk attendees will have an idea of how they can use it to better integrate existing virtual machines with containers in their existing application landscape.</p> + + SFSCON + SFSCON + SFSCON + + Daniel Hiller + + 1 + 1 + + + 16:00 + 00:15 + Why free backup software matters + https://www.sfscon.it/talks/why-free-backup-software-matters/ + + <p>It is 2024, we&#8217;re in the middle of the cloud-era.<br /> +Almost every service you desire is available in &#8220;the cloud&#8221;.<br /> +At least some of your company&#8217;s critical data is stored at some cloud provider.<br /> +Does your provider actually keep backups?<br /> +Can you live with their Recovery Time Objective (RTO)?<br /> +Do you believe they will actually meet the RTO?<br /> +Maybe you have another copy of your data?<br /> +In a format that you can actually access and read?</p> + + DevOps + DevOps + DevOps + https://www.sfscon.it/tracks/devops-track-2024/ + + Andreas Rogge + + 1 + 1 + + + 16:20 + 00:15 + Demystifying JWTs + https://www.sfscon.it/talks/demystifying-jwts/ + + <p>JSON Web Tokens (JWTs) have become a popular method for securely transmitting information between two parties. They are widely used in modern web applications for authentication and data exchange. However, their inner workings and security implications can be complex and often misunderstood by the developers.</p> +<p>In this talk, we aim to demystify JWTs by exploring their structure, how they work, and the cryptographic mechanisms that ensure their integrity and confidentiality. We will discuss the components of a JWT, including headers, payloads, and signatures, and illustrate how they combine to form a token.</p> +<p>Furthermore, we will dive into best practices for JWT usage, common pitfalls to avoid, and security considerations such as token expiration, payload size, and the choice of cryptographic algorithms. Finally, we will explore how a WebSocket connection can be secured with JWTs. Security is increasingly an overlooked necessity while utilizing a protocol that does not support authentication by default.</p> +<p>By the end of the session, attendees will have a clear understanding of how JWTs operate, their advantages over traditional session-based authentication, and how to implement them securely in their own applications.</p> + + Cybersecurity + Cybersecurity + Cybersecurity + https://www.sfscon.it/tracks/cybersecurity-track-2024/ + + Dominika Bobik + + 1 + 1 + + + 16:40 + 00:15 + Containerization and micro-services in real life change security and vulnerability management. Let’s Discuss. + https://www.sfscon.it/talks/containerization-and-micro-services-in-real-life-chandge-security-and-vulnerability-management/ + + Security Configuration for Containerization and micro-services applications + Security Configuration for Containerization and micro-services applications + <p>Containerization and micro-services change the way software is deployed and used in production contexts. Re-evaluation of the criteria for secure development and above all for secure configuration of these solutions. It would probably be appropriate to implement security already during the creation of the solution itself.</p> + + Cybersecurity + Cybersecurity + Cybersecurity + https://www.sfscon.it/tracks/cybersecurity-track-2024/ + + Carlo Falciola + + 1 + 1 + + + 17:00 + 00:15 + Cyber Risk Management: let’s try to manage it with open source and free software + https://www.sfscon.it/talks/cyber-risk-management-lets-try-to-manage-it-with-open-source-and-free-software/ + + Open source solutions in the cybersecurity landscape, oriented to manage processes + Open source solutions in the cybersecurity landscape, oriented to manage processes + <p>Cyber Risk Management is what you need to manage to ensure your business can operate being aware of threats, vulnerabilities, and to ensure that your business transactions and data are confidential, intact, available.</p> +<p>Let’s discuss and explore solutions and resources coming from open source and free software that can help organization to manage their cybersecurity programs, with an approach that looks at sharing knowledge, adopt tools and pay attention to the budget.</p> + + Cybersecurity + Cybersecurity + Cybersecurity + https://www.sfscon.it/tracks/cybersecurity-track-2024/ + + Graziano Specchierla + + 1 + 1 + + + 17:20 + 00:15 + IT Security – Don’t let Open Source Software become the next menace + https://www.sfscon.it/talks/it-security-dont-let-open-source-software-become-the-next-menace/ + + Criminals and Govs are levereging Open Source tools, libraries and software to break into organizations. Let's stop 'em. + Criminals and Govs are levereging Open Source tools, libraries and software to break into organizations. Let's stop 'em. + <p>There is a prevalent myth that open source software is inherently secure. However, this is not true. Open source software is susceptible to vulnerabilities just like any other software. Moreover, the fact that anyone can review the code does not guarantee that the right people will do so. Open source software faces two important threats than not everybody are aware of:</p> +<p>Vulnerabilities: Open source developers need to understand and communicate the security posture of their projects to users. They must adopt robust security practices. The Log4j incident in 2021, which led to the Log4Shell vulnerability, triggered a catastrophic wave of attacks due to inadequate support for the logging framework and its critical role in company procedures.</p> +<p>Dev teams infiltration: Criminal organizations and government hacking teams are executing highly sophisticated social engineering operations to infiltrate understaffed open source projects. Their goal is to compromise development teams and insert backdoors into the software. The most recent attack on a significant project was discovered in April 2024.</p> +<p>Objective of the Talk: Inform the community about these two security scenarios and demonstrate how to effectively address them.</p> + + Cybersecurity + Cybersecurity + Cybersecurity + https://www.sfscon.it/tracks/cybersecurity-track-2024/ + + Giancarlo Calzetta + + 1 + 1 + + + 17:40 + 00:15 + Biting the Apple + https://www.sfscon.it/talks/biting-the-apple/ + + MacBook Forensic with Fuji + MacBook Forensic with Fuji + <p>Description: Fuji is a free software, licensed under GPL v3, that leverages Apple Software Restore (ASR) and Rsync to create forensic images of macOS systems. It operates on logged-in computers to efficiently capture disk images while maintaining data integrity.</p> +<p>Bypassing encryption on Apple silicon processors presents significant challenges due to their advanced hardware encryption mechanisms and secure enclave protections. These processors employ complex security protocols that safeguard data at a hardware level, making unauthorized access and decryption extremely difficult. Without proper authentication or specific exploits, forensic imaging on these devices requires substantial technical expertise and often necessitates the cooperation of the device owner.</p> +<p>We&#8217;ll see how to acquire forensically MacBook data with free software</p> + + Cybersecurity + Cybersecurity + Cybersecurity + https://www.sfscon.it/tracks/cybersecurity-track-2024/ + + Alessandro Farina + + 1 + 1 + + + + + 11:00 + 00:15 + Apisense – Easily monitor and track your REST-API data quality + https://www.sfscon.it/talks/apisense-easily-monitor-and-track-your-rest-api-data-quality/ + + An easy and modular solution to faulty REST-API data developed in collaboration with the Open Data Hub + An easy and modular solution to faulty REST-API data developed in collaboration with the Open Data Hub + <p>Ever had the issue of fetching invalid or faulty data from a REST-API and noticing only later, when everything broke down? Not anymore!</p> +<p>Apisense was developed in collaboration with the Open Data Hub to be an easy and modular tool to fit every need possible used to ensure and monitor the availability, quality and correctness of data provided via REST-APIs.</p> +<p>Sounds too good to be true? Tune in to find out how Apisense can help both producers and consumers of data to be aware of the quality and reliability of the data they provide/consume.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Aurelio Buonomo + Christian Zanotti + + 1 + 1 + + + 11:20 + 00:15 + MongoDB Alternatives: Is There A Need For A New Open Standard? + + + <p>This talk takes you on a journey through the history of SQL as an Open Standard, emphasizing its pivotal role in shaping the database industry. It also highlights the pressing need for a similar standard in MongoDB-compatible open databases. The presentation introduces FerretDB as a groundbreaking solution bridging MongoDB and open databases, ensuring seamless transitions without extensive application-level changes. This talk illuminates the importance of open standards and presents a path forward for enhanced compatibility and collaboration within the open-source database community.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Peter Farkas + + 1 + 1 + + + 11:40 + 00:15 + MariaDB Vector: Why your AI data should be in an RDBMS + https://www.sfscon.it/talks/mariadb-vector-why-your-ai-data-should-be-in-an-rdbms/ + + Databases and AI: How to supercharge application development with MariaDB vector + Databases and AI: How to supercharge application development with MariaDB vector + <p>As AI apps become mainstream, conventional IT wisdoms apply. AI apps must be no monoliths, but need to be logged, audited, and overall well integrated into normal IT. This means all AI data – vectors, input, output – is best stored in a normal RDBMS. Better still: In an open source database with performance, stability, and ease of use. Here is an overview of the AI opportunities, possibilities, methodologies, and features in MariaDB Server.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Kaj Arnö + + 1 + 1 + + + 12:00 + 00:15 + 1, 2, 3, Doc Kit! + https://www.sfscon.it/talks/1-2-3-doc-kit/ + + Automate the creation of software documentation + Automate the creation of software documentation + <p>Doc Kit is an open source command line tool that automates the creation of software documentation and release notes.<br /> +It can be used in conjunction with DocBook Authoring and Publishing Suite (DAPS) for quickly preparing the skeleton of professional looking software documentation.</p> +<p>Doc Kit has been designed for initialising SUSE or openSUSE documentation repositories but in a few steps it can be re-used for other projects too.<br /> +The tool consists of two parts:<br /> +1. a command-line tool called doc-kit that can download documentation boilerplate files<br /> +2. a repository of documentation boilerplate files, such as the SUSE/openSUSE book preface and entity files.</p> +<p>The presentation will show how to use Doc Kit and how to customise the provided templates for creating a brand new documentation or release notes projects.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Marina Latini + + 1 + 1 + + + 12:20 + 00:15 + codEEmoji – Making code more informative with emojis + https://www.sfscon.it/talks/codeemoji-making-code-more-informative-with-emojis/ + + <p>This presentation focuses on the open-source project codEEmoji, an IDE plugin that adds additional information to the code through emojis. The talk starts by discussing the benefits of this approach compared to other ways to present information for the developer in IDEs. It follows by presenting the plugin and its main functionalities, which go from pointing out bad practices in method and variable naming to presenting modifiers and method characteristics in their usage. Next, it is presented how the plugin structure was designed to receive new contributions. The talk finishes by presenting some challenges and future features.</p> +<p>https://github.com/codeemoji/codeemoji-plugin</p> +<p>https://plugins.jetbrains.com/plugin/22416-codeemoji</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Eduardo Guerra + + 1 + 1 + + + 12:40 + 00:15 + Can Test Driven Development be speeded up with Generative AI? + https://www.sfscon.it/talks/can-test-driven-development-be-speeded-up-with-generative-ai/ + + <p>Generative AI tools, like ChatGPT, have shown remarkable capabilities in natural language processing. It is logical to explore their potential in programming, yet the quality of generated code raises concerns. Test-Driven Development (TDD) offers a promising approach to address these concerns. In this talk, we will explore how developers can effectively collaborate with generative AI tools to enhance TDD practices, ensuring higher code quality and streamlined development processes. To this aim, we will present two interaction patterns between a human and an AI.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Moritz Mock + Barbara Russo + Jorge Melegati + + 1 + 1 + + + 13:00 + 00:15 + ScrapeGraphAI + https://www.sfscon.it/talks/scrapegraphai/ + + you only scrape once + you only scrape once + <p>ScrapeGraphAI is an innovative Python library designed to revolutionize the field of web scraping and in less than 4 months it collected over than 12k stars on Github and more than 100k downloads on pip. It allows to scrape which website you want with the knowledge of the HTML code and with the LLM models. By seamlessly integrating a natural language model within its architecture, ScrapeGraphAI enables the extraction of valuable information from websites with unparalleled flexibility and accuracy. Unlike traditional scraping tools that rely on rigid patterns or manual configuration, ScrapeGraphAI constructs a dynamic graph of operations to interrogate web pages, ensuring that relevant data is captured even in the face of changing website structures. This library&#8217;s unique fusion of language models and directed graph logic empowers developers to create sophisticated scraping workflows with minimal coding required, thereby streamlining the process of extracting valuable insights from online content. More info at this link: https://github.com/VinciGit00/Scrapegraph-ai</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Marco Vinciguerra + + 1 + 1 + + + 13:20 + 00:15 + Software Engineering Automation: From early tools to Generative AI and beyond + https://www.sfscon.it/talks/software-engineering-automation-from-early-tools-to-generative-ai-and-beyond/ + + <p>The emergence of Generative AI tools, such as ChatGPT and Copilot, promises to disrupt knowledge-based work, including software development. However, these are not the first tools to support the automation of software engineering. From the early days, various tools have been developed to remove repetitive tasks, reduce workload, and consequently increase the abstraction of software development, such as auto-completion and automatic refactoring. In this talk, we present the different levels of the automation of software engineering. We will examine how past and present tools have achieved these levels, the current capabilities of Generative AI tools, and what we can expect for the future.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Jorge Melegati + + 1 + 1 + + + 13:40 + 00:15 + The Crucial Role of Openness in Modern Software Development + https://www.sfscon.it/talks/the-crucial-role-of-openness-in-modern-software-development/ + + <p>Developers and providers of software-based products as well as other new technologies for the global market know that the winning solutions for future-proof projects share one key feature: interoperability with products from other suppliers. Achieving this interoperability means relying on open standards, open-source technologies and establishing key partnerships with other industry players.</p> +<p>In effect, openness principles are increasingly essential to software development. This talk will provide an in-depth analysis of how these concepts underpin interoperability, security and innovation in today&#8217;s technological landscape.</p> +<p>It will discuss the importance of open standards in creating seamless integration between diverse systems and applications, ensuring that technological advancements remain accessible and adaptable. The session will also cover key strategies and best practices for the adoption of open solutions that drive compatibility and competitiveness.</p> +<p>Finally, by examining Jakarta EE and the Payara Community, the talk will illustrate how these frameworks exemplify the power of open source in building innovative, scalable and future-oriented applications.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Chiara Civardi + Dominika Tasarz-Sochacka + + 1 + 1 + + + 14:00 + 00:15 + AI Tools for Jakarta EE + https://www.sfscon.it/talks/ai-tools-for-jakarta-ee/ + + <p>Discover how AI-powered tools for Jakarta EE streamline the entire development lifecycle.</p> +<p>Over the years, there have been many ways of starting a project: archetypes, project generators, visual designers, and so on. What do we get when we add a language model to the mix? A project generator that scaffolds domain-relevant Jakarta EE applications with backend and frontend functionalities in place.</p> +<p>Experience the future of enterprise application development through practical, cutting-edge demonstrations.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Gaurav Gupta + + 1 + 1 + + + 14:20 + 00:15 + How to start contributing and still have fun + https://www.sfscon.it/talks/how-to-start-contributing-and-still-have-fun/ + + <p>Are you new to Open Source and about to create your first commit, but still haven&#8217;t clicked on &#8220;New Pull Request&#8221; button?</p> +<p>There will be always something holding you back.</p> +<p>Or do you want to gain experience that can be applied at your school or work but don&#8217;t know how?</p> +<p>Open Source gives you that opportunity.</p> +<p>Let&#8217;s talk about it because we all go through it: how to find your project; fear of the first commit, the first code review, the first mistakes and everything is public; fight toxic communities &#8211; no one is perfect; when to open your code;</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Juri Solovjov + + 1 + 1 + + + 14:40 + 00:15 + Monolith Splitter + https://www.sfscon.it/talks/monolith-splitter/ + + <p>Migration from monolithic systems to microservices has earned significant interest in recent years. Software architects and developers welcome approaches, techniques, and patterns that can facilitate and automate the migration process. This talk will present Monolith Splitter, a tool that employs various approaches for splitting a monolith into a microservices architecture. This tool could be beneficial for software architects looking to migrate monolithic projects to a more scalable architecture. It uses execution traces to analyze monolithic software and suggests which classes should be grouped together in separate services according to criteria such as cohesion, modularity, and independence of evolvability. We will showcase the application of the tool to a series of open source software projects, discussing the outcomes, the benefits, and the current limitations.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Michal Skipala + Bruno Rossi + + 1 + 1 + + + 15:00 + 00:15 + The Next Level of Metrics in Microservices + https://www.sfscon.it/talks/the-next-level-of-metrics-in-microservices/ + + Going beyond measuring workload and performance + Going beyond measuring workload and performance + <p>In Microservices, measuring workload and performance are old news! They&#8217;re still important, but we can do more. In this talk, we&#8217;re navigating through new ideas on how to use metrics to tell us more than the basics about our microservices. Did you know we can evaluate our microservices in the architectural level? So we&#8217;ll have concrete data to support our decision-making. Between patterns and bad smells, we can use metrics to detect the points where they happen. Let&#8217;s explore these new possibilities to improve our experience when evolving a microservice system, towards a more robust and maintainable direction! Bonus: you&#8217;ll learn about an open-source tool to facilitate this process, of which I&#8217;m a maintainer, and you could be too!</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + João Francisco Lino Daniel + + 1 + 1 + + + 15:20 + 00:15 + What’s New in Notifications + https://www.sfscon.it/talks/whats-new-in-notifications/ + + <p>Over the past 6 months I&#8217;ve been working on improving notifications for the GNU/Linux desktop. This includes a new version of the xdg-desktop-portal notification spec, improved notification UI in GNOME Shell, and various backend components (e.g. GLib and portals).</p> +<p>In this talk I&#8217;ll explain why it was so difficult, how we untangled it, and what&#8217;s in store for the future.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Julian Sparber + + 1 + 1 + + + 15:40 + 00:15 + Sync Your Tunes, Sync Your Screen: Introducing SyncWall + https://www.sfscon.it/talks/sync-your-tunes-sync-your-screen-introducing-syncwall/ + + <p>Ever wished your computer could visually represent your playlist? SyncWall lets you turn every song into a unique visual experience, by dynamically matching your desktop wallpaper to the music currently playing on Spotify!</p> +<p>We&#8217;ll demonstrate SyncWall in action, showcasing its capabilities, and then we&#8217;ll dive deeper into the code and the process of creating the images.</p> +<p>SyncWall relies on two core components: Spotify&#8217;s API, which provides with all the necessary song information, and Python&#8217;s PIL library, which allows to easily manipulate images. Throughout the presentation, we will explore the key concepts and most useful functions of these two technologies, providing you with practical tools to integrate into your own projects.</p> +<p>Even if Syncwall is designed for GNOME, we will dive deep on how to make it work also in different desktop environments. This will cover all the steps and the challenges involved.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Giovanni Enrico Loni + + 1 + 1 + + + 16:00 + 00:15 + Nurturing OpenJDK distribution: Eclipse Temurin Success History and plan + https://www.sfscon.it/talks/nurturing-openjdk-distribution-eclipse-temurin-success-history-and-plan/ + + <p>Join me as we explore the pillars that make Eclipse Temurin one of the most widely adopted, enterprise-ready OpenJDK Runtime (over 20M monthly downloads) and also delve into the future of Adoptium and explore the goals set for 2024.<br /> +As we navigate the landscape of open source Java runtimes, Adoptium is committed to fostering vibrant, healthy projects that thrive with the support of robust communities. In this talk, we will also shine a spotlight on our dedication to delivering top-notch quality and outstanding performance, with a special focus on our AQAvit project and Security Effort.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Carmen Delgado + Ivar Grimstad + + 1 + 1 + + + 16:20 + 00:15 + Designing open source tools for Citizen Coders + https://www.sfscon.it/talks/designing-open-source-tools-for-citizen-coders/ + + Empower non-professional developers to drive innovation! + Empower non-professional developers to drive innovation! + <p>In a world where proprietary no-code platforms with vendor lock-in and opacity dominate, there is a crucial need to enhance the developer experience of open source applications, libraries, and tools.</p> +<p>We will explore how we can make open source software more accessible to citizen developers and non-professional programmers who face significant barriers to entry with modern open source tools. Showing the importance of collaborating with these developers, who are often closer to real-world problems, to improve the quality and usability of open source software.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Luca Rainone + + 1 + 1 + + + 16:40 + 00:15 + Free your Games + https://www.sfscon.it/talks/free-your-games/ + + A Minetest story + A Minetest story + <p>Videogames are part of our daily life. They allow us to unplug, to relax, to compete, simulating a reality that puts us at the centre of a new digital world. However, if we go deeper into the way videogames are made, we&#8217;ll learn that their market can be brutal and the ethics of their business models highly debatable &#8211; if not plain unbearable. Nowadays, playing a videogame usually means renouncing to our privacy and shaking hands with realities that we might not tolerate if we knew what they conceal. It was during the pandemic that a Minetest server called AES was born. Made by volunteers, AES decided to go against that: to build an online space where to play without strings attached. A place where everyone can have fun and nothing is proprietary. Four years later, this is its story.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Marco Amato + + 1 + 1 + + + 17:00 + 00:15 + How to set up an Open Source Program Office? Get insights and use cases from the OSPO Alliance + https://www.sfscon.it/talks/how-to-set-up-an-open-source-program-office-get-insights-and-use-cases-from-the-ospo-alliance/ + + <p>The Good Governance Initiative (GGI) developped by the OSPO Alliance proposes a methodological framework to assess open-source awareness, compliance and governance in any kind of organizations, helping them to structure and improve the use of FOSS towards an OSPO. This presentation will highlight the main progresses and new features achieved since last year&#8217;s introduction at SFScon, such as the translation of the GGI Good Governance in five languages, the recent OSPO testimonies presented in the OnRamp meeting series, and many more.</p> + + OW2 + OW2 + OW2 + https://www.sfscon.it/tracks/ow2-track-2024/ + + Valentina Del Prete + + 1 + 1 + + + 17:20 + 00:15 + Decentralized Search Over Decentralized Storage + https://www.sfscon.it/talks/decentralized-search-over-decentralized-storage/ + + Coupling an AI-powered search engine with a self-hosted personal cloud + Coupling an AI-powered search engine with a self-hosted personal cloud + <p>In this talk, we will explore an innovative decentralized search system developed in collaboration between the teams of On My Disk, a personal cloud storage solution, and PeARS, a self-hosted search engine. This system is designed to enable user-friendly, AI-powered, multilingual search capabilities directly over a decentralized storage environment, empowering individuals to manage and search their data across devices without relying on third-party servers. By combining cutting-edge AI with a robust, local-first approach, this solution allows users to maintain complete control over their data, ensuring secure, fast, and personalized search results in a user-controlled environment. Learn how this technology is setting a new standard for privacy and autonomy in data storage and retrieval.</p> + + OW2 + OW2 + OW2 + https://www.sfscon.it/tracks/ow2-track-2024/ + + Alexey Volkov + + 1 + 1 + + + 17:40 + 00:15 + Optimizing Cloud Compute Resources with Spare Cores + https://www.sfscon.it/talks/optimizing-cloud-compute-resources-with-spare-cores/ + + <p>Spare Cores is a vendor-independent, open-source, Python ecosystem that offers a comprehensive inventory and performance evaluation of compute resources across cloud server providers. We start all server types publicly (GHA) to run hardware inspection tools and benchmarks for different workloads. Our findings are published as open data and open-source tools to help you identify and optionally start the most cost-efficient instance type for your specific use cases (e.g. ML model training or CI/CD pipelines) in your cloud environment. Additionally, Spare Cores provides a seamless SaaS solution built on this open-source ecosystem, managing the entire lifecycle of containerized batch jobs without requiring direct vendor engagement.</p> + + OW2 + OW2 + OW2 + https://www.sfscon.it/tracks/ow2-track-2024/ + + Gergely Daroczi + + 1 + 1 + + + + + 13:00 + 00:30 + NOI Hackathon SFSCON Edition + + Side Event - Hackathon + Side Event - Hackathon + Side Event,Hackathon + 0 + 0 + + + + + 14:00 + 00:40 + Human and environmental Impacts of the actual “Artificial Intelligence” Industry, how to humanize? + + Side Event - Crane Hall BOF meetings + Side Event - Crane Hall BOF meetings + Side Event,Crane Hall BOF meetings + https://www.sfscon.it/tracks/crane-hall-bof-meetings-2024/ + + Roberto Innocenti + + 0 + 0 + + + + + + + 08:30 + 00:30 + Starting of the second day + + SFSCON + SFSCON + SFSCON + 0 + 0 + + + 13:00 + 00:30 + Closing of the SFSCON 2024 + + SFSCON + SFSCON + SFSCON + 0 + 0 + + + + + 08:30 + 00:30 + Welcome Coffee + + SFSCON + SFSCON + SFSCON + 0 + 0 + + + + + 09:20 + 01:00 + Let’s spark more Adas in our tech world! workshop + + Women* in tech + Women* in tech + <p>In this workshop we will dive into the possibilities of encouraging women*, especially girls, to thinker and to code. With tools such as the Free Software Foundation Europe’s (FSFE) illustrated book &#8220;Ada &amp; Zangemann &#8211; A Tale of Software, Skateboards, and Raspberry Ice Cream&#8221;everybody can create ways to spark the participation of women* and girls in tech.The book tells the story of Ada, a girl who loves to experiment with hardware and software. Ada realises how crucial it is to control technology and decides to stand up to the mighty inventor Zangemann.This workshop will also intend to explore ways to promote diversity and gender equity in the Free Software community and beyond. Together we will identify the challenges women* face in participating in such communities and discuss how we can create more inclusive environments, especially for the future generations.We encourage you to join us to share your experiences, ideas and perspectives, and collaborate in creating a more inclusive and diverse future in the Free Software community for all.</p> +<p><b>REGISTRATION NEEDED AT: </b><a href="https://pretix.eu/noi-digital/sfscon24/4260077/">https://pretix.eu/noi-digital/sfscon24/4260077/</a></p> +<p><em>*women, inter, trans and non-binary people.</em></p> +<p>Supported by: <strong><a href="https://fsfe.org/" target="_blank" rel="noopener">FSFE – Free Software Foundation Europe</a> </strong>&amp; <a href="https://shetechitaly.org/"><strong>SheTech</strong></a></p> + + Side Event - Women* in tech + Side Event - Women* in tech + Side Event,Women* in tech + https://www.sfscon.it/tracks/women-in-tech-track-2024/ + + Lina Ceballos + Ana Galan + + 0 + 0 + + + 10:40 + 00:55 + Knitting Our Internet workshop + + An interactive journey through the history of the Internet, and how to save it, together + An interactive journey through the history of the Internet, and how to save it, together + <p>“Knitting Our Internet” (KOI) is a workshop that explores the history of the Internet, and offers a perspective for a collective re-imagination of participatory, decentralized networks.</p> +<p>The workshop aims at questioning the very essence of today’s social media, exposing the critical limits posed by centralization, monopoly, and surveillance capitalism.</p> +<p>KOI was conceived in June 2023 by <a href="https://tommi.space">Tommaso Marmo</a>, who was looking for a simple yet critical and accurate way to introduce the concept of the Fediverse to non-experts.</p> +<p>The content and structure of the workshop matured over time, as it adapted to very diverse audiences of any ages and backgrounds. Furthermore, the experience is based on Tommaso’s academic research, mainly conducted for “<a href="https://tommi.space/csss/">Computer Sciences are Social Sciences</a>”, his bachelor’s thesis.</p> +<p><strong>Content</strong></p> +<p>During the activity, Tommaso will be using a yarn his grandmother gifted him to simulate centralized and decentralized networks, employing concrete metaphors to actively involve the participants. Every individual attending the workshop will be given a quote or an image relevant in the early and contemporary history of the Internet, and they will be asked to share it as the story unfolds.</p> +<p>Allowing them to understand the essential challenges society faces in relation to technological advancement, participants will be empowered to get involved in the Fediverse, especially understanding the importance of decentralization, Free Software, and the political role played by technical tools.</p> +<p><strong>Notes</strong></p> +<p>Given its malleable and open structure, the content of the workshop can be adapted, enriched, and edited to match the key topics of SFSCON 2024 in the best possible way.</p> +<p>The interactive parts of the workshop can be limited and a more theoretical presentation, diving in the thoughts of philosophers and computer sciences, could be added, too.</p> +<p>Supported by: <strong><a href="https://fsfe.org/" target="_blank" rel="noopener">FSFE – Free Software Foundation Europe</a></strong></p> + + Fediverse + Fediverse + Fediverse + https://www.sfscon.it/tracks/fediverse-track-2024/ + + Tommaso Marmo + + 0 + 0 + + + 11:40 + 00:15 + about:Fediverse + https://www.sfscon.it/talks/aboutfediverse/ + + An introduction to the decentralised social network + An introduction to the decentralised social network + <p>The Fediverse is a decentralised social network. But what does that mean?</p> +<p>In this talk I will give a short introduction to the Fediverse of 2024 and how it started to evolve in 2008. I will explain the basic concepts of ActivityPub as the protocol of the Fediverse and how the use of this open protocol has enabled a diverse group of Free Software projects to build a social network of (micro) blogging, video streaming, podcasting and event organising. A network where users can share and interact with each other regardless of the platform they use. What will be possible in the Fediverse of 2024? And how can you get started today?</p> +<p>This talk does not require any technical knowledge of the Fediverse. However, you should know what an email is.</p> + + Fediverse + Fediverse + Fediverse + https://www.sfscon.it/tracks/fediverse-track-2024/ + + Tobias Diekershoff + + 1 + 1 + + + 12:00 + 00:15 + How to build a website for the IndieWeb + https://www.sfscon.it/talks/how-to-build-a-website-for-the-indieweb/ + + <p>Have you ever heard of terms like POSSE, syndication, or webmention?<br /> +What about protocols like Web Sign-In or Micropub?<br /> +These terms are all connected to the IndieWeb, a community of websites built on open standards and open source technologies.</p> +<p>In today&#8217;s digital age, our online content and identities are more important than ever. Relying on random companies and social networks to manage them isn&#8217;t ideal. Instead, we should take control of our online presence by building our own website for the IndieWeb.</p> +<p>In this talk, you&#8217;ll learn how to:</p> +<p>1. Publish content on your website via a Micropub server.<br /> +2. Syndicate that content elsewhere (i.e., republish it on another website).<br /> +3. Gather comments from social networks and display them on your website.</p> +<p>We will achieve all of this using a static website and a few open-source tools.</p> + + Fediverse + Fediverse + Fediverse + https://www.sfscon.it/tracks/fediverse-track-2024/ + + Giacomo Debidda + + 1 + 1 + + + + + 09:20 + 00:15 + ARM Linux Laptops for Developers Status Report + https://www.sfscon.it/talks/arm-linux-laptops-for-developers-status-report/ + + <p>Intrigued by 22+ hours of battery life with comparable performance to current Intel / AMD systems? Starting from June this year a bunch of new ARM based laptops have been launched. All major laptop vendors launched devices, with over 33 to choose from at the time of this writing.</p> +<p>While ARM based laptops have been available for years, they mostly have been targeted as cheap entry level ChromeBooks or MacBooks designed for MacOS only. Luckily with this new wave of ARM based laptops there should be something for everybody.</p> +<p>The core question is how well they behave under Linux. Being designed for<br /> +Windows-on-ARM there is a risk Linux support is rudimentary at best. Stefan set out to test this and is reporting back here. Does a boot with UEFI work out of the box? Are all hardware features supported? Is the firmware for various drivers available? How is the performance?</p> +<p>And the most important question: how does it stack up against an Intel based laptop from the same timeframe as daily driver for software development?</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Stefan Schmidt + + 1 + 1 + + + 09:40 + 00:35 + Building a no-drama community + https://www.sfscon.it/talks/building-a-no-drama-community/ + + <p>In this talk, we&#8217;ll focus on how the AlmaLinux project has chosen to foster a positive, drama-free community in the Linux ecosystem.</p> +<p>&#8212;</p> +<p>Whether you&#8217;re starting a new community or wrangling an existing one, it can be tempting to fall into the trap of bonding over shared enemies to see short-term, high-numbers growth. But, benny has spent the last 10 years building drama-free communities with a different kind of success.</p> +<p>While many open-source projects rally members through shared frustrations or negativity, AlmaLinux took the more challenging path of uniting people through thoughtful dialogue and focusing on helping each other. By prioritizing respect, collaboration, and inclusivity, the AlmaLinux community grew healthier and stronger without the need for battle cries or infusing drama. Learn how this approach not only built a stable and thriving community around AlmaLinux, but is also setting a new standard for open-source communities &#8211; and proving that progress doesn’t have to be divisive.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + benny Vasquez + + 1 + 1 + + + 10:20 + 02:40 + Voices of Free Software: connect, learn, inspire! + + FSFE Italian Community Meeting + FSFE Italian Community Meeting + <p>You are invited to join the volunteers, supporters, and friends of the FSFE Italian Community!</p> +<p>Join us to learn from one another, find inspiration, and tackle future challenges together in the realm of Free Software. As a volunteer, you have a platform to share your story, discuss the most pressing topics surrounding Free Software, and connect with fellow enthusiasts. We encourage you to collaborate with the community on common initiatives and work together to forge new paths forward.</p> +<p>This is an <strong>hybrid event</strong>. You can join us either online or in person.</p> +<p><b>REGISTRATION NEEDED AT: </b><a href="https://pretix.eu/noi-digital/sfscon24/4259648/">https://pretix.eu/noi-digital/sfscon24/4259648/</a></p> +<p>Please note, the official language of the FSFE Italian Community is Italian, hence the event will be held in <strong>Italian</strong>.</p> +<p>Supported by: <strong><a href="https://fsfe.org/" target="_blank" rel="noopener">FSFE – Free Software Foundation Europe</a></strong></p> + + Side Event - FSFE - Italian community meeting + Side Event - FSFE - Italian community meeting + Side Event,FSFE,Italian community meeting + https://www.sfscon.it/tracks/fsfe-italian-community-meeting-2024/ + + Marta Andreoli + + 0 + 0 + + + + + 09:30 + 02:30 + Scratch Stories with Ada & Zangemann + + Side Event - MiniNOI x SFSCON + Side Event - MiniNOI x SFSCON + Side Event,MiniNOI x SFSCON + 0 + 0 + + + + + 16:30 + 00:30 + Winner proclamation and closing of the NOI Hackathon SFSCON Edition + + Side Event - Hackathon + Side Event - Hackathon + Side Event,Hackathon + 0 + 0 + + + + diff --git a/src/tests/assets/sfscon2024.xml b/src/tests/assets/sfscon2024.xml new file mode 100644 index 0000000..6d29fd9 --- /dev/null +++ b/src/tests/assets/sfscon2024.xml @@ -0,0 +1,2248 @@ + + + + sfscon-2024 + SFSCON 2024 + + + Ethics, Policy, Legal & Economics + Data Spaces + Open Hardware + Developers + Community Building + Cybersecurity + Fediverse + DevOps + Side Event - Hackathon + Side Event - School Reading + Side Event - MiniNOI x SFSCON + OW2 + Side Event - Women* in tech + Side Event - Crane Hall BOF meetings + Side Event - FSFE - Italian community meeting + + + + + 08:30 + 00:30 + Check-in SFSCON 2024 + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + 0 + 0 + + + + + 09:00 + 00:15 + Opening SFSCON 2024 + https://www.sfscon.it/talks/opening-sfscon-2024/ + + <p>Opening SFSCON 2024</p> + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Philipp Achammer + + 1 + 1 + + + 09:15 + 00:05 + Greetings from NOI + https://www.sfscon.it/talks/greetings-from-noi/ + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Vincent Mauroit + + 1 + 1 + + + 09:20 + 00:05 + Greetings from Gruppo FOS + https://www.sfscon.it/talks/greetings-from-gruppo-fos/ + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Giorgio Allasia + + 1 + 1 + + + 09:25 + 00:05 + Greetings from Telmekom + https://www.sfscon.it/talks/greetings-from-telmekom/ + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Sergio Vemic + + 1 + 1 + + + 09:30 + 00:30 + Keynote speaker &#8211; coming soon + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Emily Omier + + 0 + 0 + + + 10:00 + 00:15 + European SFS Award 2024 + + Free Software Foundation Europe (FSFE) and Linux User Group Bozen-Bolzano-Bulsan assign the “European SFS Award” + Free Software Foundation Europe (FSFE) and Linux User Group Bozen-Bolzano-Bulsan assign the “European SFS Award” + <p>The award is given to a person who contributed to the introduction of the culture of Free Software.</p> + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + 0 + 0 + + + 10:15 + 00:15 + SFS Award 2024 + + Linux User Group Bozen-Bolzano-Bulsan assigns the “South Tyrol Free Software Award” + Linux User Group Bozen-Bolzano-Bulsan assigns the “South Tyrol Free Software Award” + <p>Every year the Linux User Group Bozen-Bolzano-Bulsan assigns the &#8220;South Tyrol Free Software Award&#8221; (SFS Award). The award is given to a person who contributed to the introduction of the culture of Free Software in the Province of Bolzano.</p> + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + 0 + 0 + + + 10:30 + 00:10 + AlmaLinux in brief + https://www.sfscon.it/talks/almalinux-in-brief/ + + <p>In this quick chat, benny will summarize 20 years of context and 4 years of growth in just 10 minutes by highlighting the major points that brought AlmaLinux to the world, how the project has adjusted for each challenge along the way, and what they&#8217;re planning next.</p> + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + benny Vasquez + + 1 + 1 + + + 10:40 + 00:20 + Open Source in EU policy + https://www.sfscon.it/talks/open-source-in-eu-policy/ + + Making laws with the Open Source community in mind + Making laws with the Open Source community in mind + <p>Over the past three years, the Open Source Community has had to mobilise to fix flaws in European Union policy initiatives, like the Cyber Resilience Act, Product Liability Directive, and the AI act, all of which could have negatively impacted Open Source developers.</p> +<p>This talk explores why this mobilisation was necessary, how the Community is preparing for future legislation, and how the Open Source community has changed the way the EU makes and implements laws.</p> +<p>It will then delve into the particular case of the AI act and its Open Source AI exemption. It will cover how the exemption came about, why it has prompted a wave of AI open-washing, and what can be done to fix it.</p> + + SFSCON - Main track + SFSCON - Main track + SFSCON,Main track + + Jordan Maris + + 1 + 1 + + + 11:00 + 00:15 + Let’s all get over the CRA! + https://www.sfscon.it/talks/lets-all-get-over-the-cra/ + + how I stopped worrying about the consequences of the CRA for Open Source innovation in Europe and moved to something else + how I stopped worrying about the consequences of the CRA for Open Source innovation in Europe and moved to something else + <p>The adoption of the CRA (Cyber Resilience Act) has caused some real anxiety among the FOSS ecosystem. Even in its amended form, many questions remain opened and debated, and more to the point, a lot of uncertainty still surrounds it, not just at the level of its general architecture but also at the implementation level.<br /> +It is perhaps fair to mention that the CRA itself does not exist in a void and is building on already existing regulations and ideas. However, it should be explained how the CRA itself was not born inside the institutions of the European Union but is an almost pure product of governmental cyber security circles and agencies. Because of that, the digital ecosystem at large is at pain understanding some of its logic. This talk will start with what we know and what we can infer from the CRA, and how it fits within the general regulatory framework of the European Union. We will thus clarify the following points:</p> +<p>&#8211; what does the CRA mean in terms of software security assessment and certification &#8211; and how that plays a key role in understanding what the CRA is and what it is not<br /> +&#8211; CRA within the European regulatory framework<br /> +&#8211; CRA implementation: the bad, the ugly, and the unknown</p> +<p>We will then discuss what the concerns are for the FOSS communities. Most notably:</p> +<p>&#8211; barriers of entry for Free Software companies, esp. the small and medium ones<br /> +&#8211; legal inability to develop Free and Open Source Software<br /> +&#8211; what will Free and Open Source software foundations do in edge cases and what are they expected to bring in terms of guidance to the companies contributing to their projects</p> +<p>It will then discuss how we can best prepare for it, and make some suggestions on how to solve FOSS specific challenges related to CRA. In particular the talk will explore the following possibilities:</p> +<p>&#8211; evolving the role or cross project security teams<br /> +-promoting best practices in development (CI CD, code auditability) turning the CRA against proprietary software practices<br /> +&#8211; Pooling security audits<br /> +&#8211; Better release management</p> +<p>Last but not least, this talk will discuss the economics behind the CRA and why this may not end up being less of a problem than we think.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Charles-H. Schulz + + 1 + 1 + + + 11:21 + 00:15 + On the ethical challenges raised by robots powered by Artificial Intelligence + https://www.sfscon.it/talks/on-the-ethical-challenges-raised-by-robots-powered-by-artificial-intelligence/ + + <p>The integration of generative AI into robot systems has the potential to boost several industries by enabling robots to understand their environments, create courses of action, and autonomously react to complex situations. However, the adoption of generative AI techniques brings about profound ethical concerns that need to be addressed to ensure the responsible development and deployment of such technologies. In this talk, I will explore the multifaceted ethical challenges associated with generative AI-powered robots, focusing on issues such as robot autonomy, decision-making, accountability of robot actions, and their impact on humans and society as a whole.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Fulvio Mastrogiovanni + + 1 + 1 + + + 11:40 + 00:15 + CRA & PLD Liability rules and Software Freedom + https://www.sfscon.it/talks/cra-pld-liability-rules-and-software-freedom/ + + <p>With CRA and PLD liability rules for software have been introduced with a broad exception for Free Software. After long and intense debates individual developers and non for profit work are safeguarded. I will shed light on those new rules.</p> +<p>Already at an early stage, the FSFE argued in a hearing in the EU Parliament, for the inclusion of clear and precise exemptions for Free Software development in the legislation and for liability to be transferred to those who significantly financially benefit from it on the market.</p> +<p>In the future, individual developers and non-profit development of Free Software will be exempt from the CRA and the PLD. Nevertheless, the wording in both the regulations are different and a standardisation processes and guidelines are still being drawn up.</p> +<p>In this talk I will discuss what this new regulation means for software freedom in future and what happens at this stage and how to be involved in implementation.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Alexander Sander + + 1 + 1 + + + 12:00 + 00:15 + Cyber Resilience Act, already too late to comply? + https://www.sfscon.it/talks/cyber-resilience-act-already-too-late-to-comply/ + + Compliance is dead, long live compliance + Compliance is dead, long live compliance + <p>If you are taking your decisions now for complying with all the requirements of CRA, you might be too late to find adequate external resources to comply , although &#8212; at submission time &#8212; it is not yet in force. So what are you gonna do? Being open source would help only to a certain point, if you monetize the software. Some guidance tips for Open Source projects and businesses.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Carlo Piana + Alberto Pianon + + 1 + 1 + + + 12:20 + 00:15 + AI no-code for marketing + https://www.sfscon.it/talks/ai-no-code-for-marketing/ + + How artificial intelligence can really help create a marketing strategy + How artificial intelligence can really help create a marketing strategy + <p>The process of creating a Marketing strategy and the subsequent steps of drafting editorial calendars, selecting channels, designing, and publishing advertising campaigns, is a complex journey.<br /> +Marketers have always dedicated a lot of time and resources to creating the most effective strategy for a brand’s success and translating it into concrete actions.<br /> +Today, is it possible to use artificial intelligence as a tangible support for the development of the strategic, technical, and operational assets necessary to create a successful marketing plan?<br /> +Let’s discover ATENA together, a methodology and an easy process through which you can simplify, accelerate, and enhance the quality of your marketing strategy, thanks to the practical support of AI.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Alessandro Agnati + + 1 + 1 + + + 12:40 + 00:15 + We went to court against Apple &#8211; a case for Software Freedom + https://www.sfscon.it/talks/for-the-right-of-general-purpose-computers/ + + Breaking lock-ins over devices with Free Software + Breaking lock-ins over devices with Free Software + <p>Our smartphones, tablets, laptops, and other connected devices are general purpose computers. That means we can potentially run any software we want to make full use of the hardware. This potential is fostered by Free Software.</p> +<p>However, device manufacturers, vendors, and internet platforms have been restricting software freedom by exercising their monopolistic control over end-user equipment. This power is used over key features and components of devices such as operating systems, browsers, and app stores.</p> +<p>Basic freedoms such as installing and uninstalling software are being unfairly limited by these companies, commonly referred to as &#8220;gatekeepers&#8221;, because of their monopolistic control over devices.</p> +<p>As a concrete example, this talk will present the policy and legal work of FSFE in denouncing the detrimental commercial practices of a worldwide known gatekeeper: Apple.</p> +<p>Apple&#8217;s monopolistic power over its devices is detrimental to Free Software and a high risk for the right of general purpose computers. The company&#8217;s &#8220;notarization&#8221;, its barriers to software freedom and lack of interoperability are highly negative to Free Software.</p> +<p>In conclusion, this talk will present Device Neutrality as a policy solution to enable end-users to bypass gatekeepers in order to run Free Software independently of the control exercised by hardware manufacturers, vendors, and platforms. Device Neutrality can enable end&#8211;users to regain control over their devices.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Lucas Lasota + + 1 + 1 + + + 13:00 + 00:15 + 25 Years of Copyleft Enforcement: The Road Ahead for Defending Software Rights + https://www.sfscon.it/talks/25-years-of-copyleft-enforcement-the-road-ahead-for-defending-software-rights/ + + <p>In 1999, I worked my first GPL enforcement matter: a large storage had made proprietary modifications to GNU tar and failed to release the complete, corresponding source code to its customers. In early 2000, I did my first “CCS check” (complete, corresponding sourcecode check) — wherein one attempts to build the “CCS candidate” provided by the vendor to investigate whether the CCS candidate is actually complete, and whether it corresponds to the binaries that were distributed.</p> +<p>In those days, violations of copyleft licenses were rare, and once uncovered, companies eventually corrected their behavior. Yet, even then, it took years of work to convince the company to comply. And often, by the time compliance was achieved, a new generation of the product was released.</p> +<p>25 years later, we face the same problems with nearly every vendor.<br /> +Almost every product on the market today contains Linux, BusyBox, the GNU C Library, GNU Bash, and dozen other packages licensed under the GPL and/or LGPL. Almost none of these companies, even if an offer for source code is made, provide CCS.</p> +<p>This talk will look both to the past and future as we investigate software rights and freedoms of the average consumer, and how we reached this difficult situation. Attendees can learn the history of copyleft and its enforcement, and leave with an understanding of how much work remains and what individuals can do to make a real impact on the rights of users under copyleft.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Bradley Kuhn + + 1 + 1 + + + 13:20 + 00:15 + SPDXv3: Advancing Transparency in Software + https://www.sfscon.it/talks/spdxv3-advancing-transparency-in-software/ + + A newly released standard for complete information + A newly released standard for complete information + <p>SBOMs are a crucial tool for understanding the composition of software, which is particularly important in the context of managing security risks and licensing compliance. Recent regulatory efforts from, among others, the US and the EU, explicitly move towards requiring SBOM for each software delivery.<br /> +SPDX (System Package Data Exchange) is a freely available ISO standard that provides a set of specifications for communicating SBOM information. It offers a common format for companies and organizations to share important data accurately and efficiently.</p> +<p>This presentation will delve into the details of the newly released version of SPDX, providing a comprehensive understanding of their importance in the software industry.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Alexios Zavras + + 1 + 1 + + + 13:40 + 00:15 + (re)classifying FOSS licenses + https://www.sfscon.it/talks/reclassifying-foss-licenses/ + + New strategy for classifying licenses in a better way + New strategy for classifying licenses in a better way + <p>There are many efforts trying to classify licenses, for different use cases such as checking compatibility or for complying with the license terms. Most of these efforts seem to, explicitly or implicitly, have a certain use case in mind.</p> +<p>This project sets out to:<br /> +Consider provisioning case &#8211; how is the software provided to your user (e.g. binary distribution, SaaS, Web UI)<br /> +Consider use case &#8211; how is the software used (e.g. compiler, library)<br /> +Trust model &#8211; why should you trust the contributor of a classification or you should be able to exclude a contributor’s work etc<br /> +Identify and generalize FOSS license clauses<br /> +Identify and generalize when a clauses is triggered<br /> +Determine how clauses are compatible with each other (a license clause matrix)<br /> +Identify the clauses and triggers for each license</p> +<p>Keeping track of how 100 licenses are compatible with each other will result in a matrix with 10 000 (100 x 100) values. This is hard to maintain. Extending to 200 licenses requires 40 000 values. By instead looking at the license clauses we will end up with a much smaller problem, assuming we identify 20-30 of them, which will result in a matrix of 400-900 values. This is big, but maintainable. Adding a new license will not increase the size of the (license clause) matrix, which means that our approach scales much better. From the license definitions and license clause matrix we can compile a license compatibility matrix (for fast compatibility lookup).</p> +<p>This project sets out to provide to users:<br /> +A license obligation checklist for each provisioning case &#8211; for making compliance checks easy<br /> +A license compatibility matrix for each provisioning case &#8211; for fast compatibility lookup</p> +<p>All data and source code will be released under FOSS licenses.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Henrik Sandklef + + 1 + 1 + + + 14:00 + 00:15 + Lessons from the EU&#8217;s Next Generation Internet Initiatives + https://www.sfscon.it/talks/lessons-from-the-eus-next-generation-internet-initiatives/ + + What We've Learnt From Looking At 500 Free Software Projects + What We've Learnt From Looking At 500 Free Software Projects + <p>The FSFE is a consortium member of the EU&#8217;s Next Generation Internet initiatives (https://fsfe.org/activities/ngi/ngi.en.html). As part of our work there over the past 6 years, we have looked at hundreds of participating Free Software projects, to assist them with their legal and licensing questions, as well as to help them become REUSE compliant.</p> +<p>This talk will speak about some simple trends in Free Software legal and licensing that we&#8217;ve observed over the years in independent Free Software projects and their developers, and how these affect aspects of the Free Software ecosystem.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Gabriel Ku Wei Bin + + 1 + 1 + + + 14:20 + 00:15 + The ZOOOM project: final results and future outlooks + https://www.sfscon.it/talks/the-zooom-project-final-results-and-future-outlooks/ + + <p>The ZOOOM project, concluding in Sept 2024, aimed to raise awareness about the role of open licenses (open source software, open hardware, and open data &#8211; 3Os) in intellectual property valorization. In this talk, we&#8217;ll summarize key results, share recommendations for businesses leveraging 3Os, and demonstrate tools developed to aid knowledge generators and supporting organizations in navigating the legal and business implications of 3Os. Additionally, we&#8217;ll discuss the future of ZOOOM and its potential impact on the industry and research.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Elisa Morganti + + 1 + 1 + + + 14:40 + 00:15 + AI Law & Ethics: developing responsible AI systems + https://www.sfscon.it/talks/ai-law-ethics-developing-responsible-ai-systems/ + + <p>The aim of this talk is to explore AI law and ethics in developing responsible AI systems. It covers the forthcoming AI Act and EU regulations, focusing on accountability, risk management, and privacy-by-design. Through use cases, it shows how developers can ensure AI transparency, fairness, and compliance, balancing innovation with ethics. Attendees will gain insights for creating sustainable, ethical AI solutions.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Federico Sartore + Francesco Vadori + + 1 + 1 + + + 15:00 + 00:15 + Impact and Innovation: The Crucial Role of OSPOs in Shaping a More Sustainable Capitalism + https://www.sfscon.it/talks/impact-and-innovation-the-crucial-role-of-ospos-in-shaping-a-more-sustainable-capitalism/ + + <p>In an era where sustainability and responsible innovation are not just valued but expected, Open Source Program Offices (OSPOs) stand at the forefront of a transformative wave that merges open innovation with sustainable business practices. This session explores the pivotal role of OSPOs in fostering open innovation environments that not only drive technological advancement but also align with the principles of impact-oriented capitalism</p> +<p>We will delve into how OSPOs can leverage open source ecosystems to catalyze change within their organizations, promoting not just compliance and security but also environmental, social, and governance (ESG) goals. Through case studies and practical insights, attendees will learn how integrating OSPO strategies with corporate sustainability objectives can create a powerful synergy that propels companies toward a more ethical and profitable future.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Stefano Pampaloni + + 1 + 1 + + + 15:20 + 00:15 + From Personalized to Programmed + https://www.sfscon.it/talks/from-personalized-to-programmed/ + + The Dilemma of AI Customization + The Dilemma of AI Customization + <p>When considering the core values of mass customization, such as individual expression, fun in co-creating, and creativity, AI may introduce disadvantages, potentially leading to the homogenization of experiences. This lightning talk aims to explore the potential risks and drawbacks of utilizing AI in mass customization, highlighting the tension between leveraging technology for customization and preserving the unique human elements that form the foundation of personalized experiences. Could the reliance on algorithms diminish the consumer’s role in the creative process? If so, it might challenge the essence of what makes mass customization truly unique and innovative.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Thomas Aichner + + 1 + 1 + + + 15:40 + 00:15 + Fostering Innovation in IT Businesses through Open Source Software Involvement + https://www.sfscon.it/talks/fostering-innovation-in-it-businesses-through-open-source-software-involvement/ + + <p>All IT companies depend on free and open source software to some extent. Once they reach a certain size, they spontaneously become supporters of the projects on which they base their business. This happens because of first order consequences: my business depends on it, if I help it strive, my business will benefit.<br /> +In this talk, we will address the second-order consequences of software engineers interacting with open source projects, and show why dedicating internal resources to this activity is an effective strategy for enabling the discovery of new or modified (software) entities, which is the prerequisite for innovation.<br /> +The benefits are visible for companies of any size, even if their business does not depend on a specific project to which they could contribute: compelling arguments will be presented to motivate business owners to encourage their IT staff to engage in open source activities (and to developers to convince their bosses).</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Daniele Gobbetti + + 1 + 1 + + + 16:00 + 00:15 + Tackling Openwashers, Freeloaders and Cuckoos + https://www.sfscon.it/talks/tackling-openwashers-freeloaders-and-cuckoos/ + + How to safeguard the Free Software market against unfair competition + How to safeguard the Free Software market against unfair competition + <p>Companies that produce and sell Free Software face a problem: some competitors use unethical and destructive means to compete, making their products cheaper and winning bids. This kind of market behaviour is increasingly becoming a problem for Free Software producers.</p> +<p>Destructive practices include marketing proprietary software under the guise of being Free Software, whether by using free/open wording, by introducing new licences that falsely appear to be free, or by imposing additional barriers that make it more difficult to use the freedoms offered by Free Software.</p> +<p>Other competitors sell Free Software products without contributing to their development and maintenance, profiting from the work of others but giving nothing back to the community. This allows them to offer low prices while raising the costs of maintenance for the original manufacturers. For some players, there seems to be no limit to their creativity when it comes to undercutting competitors and winning bids.</p> +<p>The Free Software Foundation Europe has been analysing these and other problematic market practices over the last few years. In this talk we will take a closer look at them and show why they harm Free Software manufacturers and the Free Software ecosystem. We will then discuss ways to limit the success of such practices.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Johannes Näder + + 1 + 1 + + + 16:20 + 00:15 + Web Accessibility is actually well-forgotten old + https://www.sfscon.it/talks/web-accessibility-is-actually-well-forgotten-old/ + + <p>Trends are cyclical, even in the tech world. A few years ago, everyone was talking about D&amp;I in the workplace. This season, web accessibility absolutely occupies the first lines of code. How is it shown? Let&#8217;s talk about it &#8211; many do not understand how to implement it in their project.</p> +<p>First, relax. This is a really complex topic that requires not only a well-created website, but also communication with real users who cannot fully use the Internet, for example, without a screen reader.</p> +<p>A checklist that will convince you to try implementing WA into your application:</p> +<p>◦ What can be adapted for WA?<br /> +◦ How is WA testing done?<br /> +◦ How to use AI in WA?</p> +<p>If we haven&#8217;t convinced you, then look at WA from the point of view of strengthening your personal brand in the market.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Sofia Etingof + Juri Solovjov + + 1 + 1 + + + 16:40 + 00:15 + LibreOffice as JavaScript idiomatic WebWidget + Library + https://www.sfscon.it/talks/libreoffice-as-javascript-idiomatic-webwidget-library/ + + Making LibreOffice a native part of the web, using FOSS for highly customizable office document handling in the browser, based on WASM. + Making LibreOffice a native part of the web, using FOSS for highly customizable office document handling in the browser, based on WASM. + <p>LibreOffice can be highly integrated into desktop and server applications and we wanted to make this also possible for web apps. Running fully client side with Web Assembly, LibreOffice can now be used and customized by a JavaScript idiomatic API, becoming an easy usable component for web development. With this Free Software opens the door to a completely different approach for bringing office document handling into the browser, then from what&#8217;s known from Google Docs and Co.. Use cases may be the integration of widgets with rich text documents, including classic desktop macros, into browser based applications or enabling JavaScript to interact live with values in spreadsheets. But LibreOffice can also work as background WASM library, converting documents from and to all supported formats like ODF (ODT, &#8230;), MS formats (DocX, XlsX, Doc, &#8230;), PDF or HTML, while applying custom conversion filters for things like macro sanitization.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Moritz Duge + + 1 + 1 + + + 17:00 + 00:15 + Using software tools and AI to audit e-commerce food regulations + https://www.sfscon.it/talks/using-software-tools-and-ai-to-audit-e-commerce-food-regulations/ + + <p>Selling food products on a website or e-commerce platform in Italy is subject to the Food Information of Consumers (FIC) regulations. These regulations dictate mandatory information that must be communicated on the product page, with fines for non-compliance. In this talk, we will cover the key guidelines and legal requirements, and demonstrate how we can use software tools and artificial intelligence to check large quantities of product listings for discrepancies. Join us to learn how to streamline the process of verifying food information and enhance consumer trust.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Davide Montesin + + 1 + 1 + + + 17:20 + 00:15 + Tag manager + https://www.sfscon.it/talks/tag-manager/ + + <p>Presentation of our tool, which is an free alternative to Google Tag Manager and also helps manage cookie banners.</p> +<p>Features:<br /> +&#8211; code injector<br /> +&#8211; code templating<br /> +&#8211; cookie banner manger</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Sandro Antonucci + + 1 + 1 + + + 17:40 + 00:15 + State of Microsoft Windows Refund (2024) + https://www.sfscon.it/talks/state-of-microsoft-windows-refund-2024/ + + Getting a Refund of your Microsoft Windows License - present and future + Getting a Refund of your Microsoft Windows License - present and future + <p>If you are a lover of the Free Software movement you probably already tried something else than Microsoft Windows on a computer.</p> +<p>What you may not know, is that computer resellers usually charge end-users with the Fee of the Microsoft Windows License, even before you accept the Microsoft Terms of Services, and even if you completely want to uninstall Windows from your computer.</p> +<p>This is a critical Tech Neutrality issue that fuels non-European proprietary software houses. What to do?</p> +<p>&#8211; heritage of Luca Bonissi against Big Tech(s)<br /> +&#8211; current status and problems<br /> +&#8211; opportunities in Europe, and partnership between Free Software Foundation Europe and Italian Linux Society.</p> +<p>Thanksgiving to community members who tried the procedure, and simplifying that procedure.</p> + + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + Ethics, Policy, Legal & Economics + https://www.sfscon.it/tracks/ethics-policy-legal-economycs-track-2024/ + + Valerio Bozzolan + + 1 + 1 + + + + + 10:30 + 00:30 + Ada & Zangemann + + Side Event - School Reading + Side Event - School Reading + Side Event,School Reading + 0 + 0 + + + + + 11:00 + 00:15 + Open Access for Museum Collections and Research + https://www.sfscon.it/talks/open-access-for-museum-collections-and-research/ + + <p>The digital era has revolutionised the way we access information and interact with it. Museums, as custodians of cultural and historical artefacts, can benefit substantially from this transformation. Open Access and FOSS can greatly increase the potential of museums for public outreach: enhance their educational impact and inspire new forms of cultural engagement and knowledge discovery. For example, by digitising collections and enabling Open Access for diverse audiences, accessibility barriers are eliminated and thousands of hidden treasures become available to both researchers and the wider public. Additionally, innovative data visualisations via FOSS platforms can reveal compelling insights into object collections and the research associated with them; Open Access can thus make complex research accessible and engaging to a broader audience. Through such practices, museums can democratise their activities and enrich the visitor experience. The process is not without obstacles; common challenges museums face in adopting Open Access policies are copyright issues, data privacy, and resource limitations.</p> +<p>The presentation will discuss the aforementioned opportunities and issues currently emerging in the museum sector. The talk will be illustrated with examples from the Deutsches Museum in Munich, the world’s largest museum of science and technology.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Artemis Yagou + + 1 + 1 + + + 11:20 + 00:15 + Journeying through Data Spaces – New Path to Interoperability? + https://www.sfscon.it/talks/journeying-through-data-spaces-new-path-to-interoperability/ + + <p>Data spaces play a pivotal role in advancing digitalisation and interoperability within and across different business domains, both on a national level and cross-borders. However, it&#8217;s not a new concept since its roots date back to 2005. The definition has evolved over the years and today it covers all four layers of interoperability defined by the European Interoperability Framework (EIF).</p> +<p>Today, the term data space has several different definitions depending on whom you ask. Also, multiple international initiatives are working on data spaces to create common governance models, specifications, reference implementations, etc. The aim of this talk is to discuss the data space concept, different actors working on data spaces and their roles and responsibilities, and available specifications and building blocks.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Petteri Kivimäki + + 1 + 1 + + + 11:40 + 00:15 + DOOF – an Open Source Orchestration Framework for Decentralized Consent Management + https://www.sfscon.it/talks/doof-an-open-source-orchestration-framework-for-decentralized-consent-management/ + + <p>DOOF stands for Data Ownership Orchestration Framework. It is a framework developed for NGI Trustchain Project within a broader Next Generation Internet scheme of the EU in order to address a lack of decentralization in consent management regarding users’ sharing of their data. The aim of DOOF is to revolutionize personal data governance and normalise the deployment of consent management and privacy enhancing technologies. It uniquely enables individuals to control their rights over data sharing, fostering greater trust and regulatory compliance, essential for building a resilient and transparent data economy.<br /> +DOOF targets the gap in current centralized consent management, where GDPR and Data Act demand seamless data exchange and regulatory compliance. Yet the sharing and consent management regarding users’ data is centralized &#8211; a responsibility of the data intermediary &#8211; which comes with great costs and liabilities.<br /> +With DOOF, Ecosteer aims to separate and decouple the layer of physical data transferring from the layer of consent management. DOOF offers companies a framework that allows them to easily adopt Privacy Enhancing Technologies (PETs) for the actual sharing of data and enforcement of users’ decisions.<br /> +The framework consists of a set of SDKs, libraries and a Smart Contract for decentralised consent management. The main component of the framework is a worker pipeline, consisting of extensible, plug-in processors. This pipeline contributes to the low-code movement, offering a framework that can be easily adapted to different business needs. Companies can easily build verticals on this existing framework by just extending some of its functionalities.<br /> +This talk will focus on the concept of decentralized consent management as well as pipeline-based orchestration framework, outlining the process of creating a novel, re-usable and extensible open-source project.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Georgiana Bud + + 1 + 1 + + + 12:00 + 00:15 + Accelerating territory&#8217;s development through Open Data + https://www.sfscon.it/talks/accelerating-territorys-development-through-open-data/ + + Open Data Hub and south tyrolean examples + Open Data Hub and south tyrolean examples + <p>In recent years, Open Data has revolutionized the way governments, companies and individuals access and use information. The openness of public and private data represents a milestone on the path towards a more transparent, participatory and competitive society.<br /> +Open Data represent a resource for society and businesses and contribute to the development of a territory. This added value manifests itself in various forms, including transparency and democratic participation, technological innovation, economic development and improved services.<br /> +The talk will focus on specific case studies from the Open Data Hub in the Autonomous Province of Bolzano, a region which has shown a strong commitment to the adoption and promotion of Open Data.<br /> +Through the analysis of these cases, the aim is to demonstrate how the initiatives based on Open Data have led to concrete and tangible results, offering useful and applicable insights also in extra-regional contexts.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Luisa Marangon + + 1 + 1 + + + 12:20 + 00:15 + Sensor Things API QGIS core provider + https://www.sfscon.it/talks/sensor-things-api-qgis-core-provider/ + + <p>Sensor Things API (STA, in short), is an OGC specification for storing and retrieving (timeseries of) Sensor Observations.</p> +<p>FROST-Server, developed by Fraunhofer IOSB, is one of the most consolidated implementations of STA with a very detailed documentation and a lot of background information. The implementation includes a REST endpoint to insert, modify and retrieve STA entities with a query language based on OASIS Odata URL patterns and query options.</p> +<p>A QGIS experimental plugin, developed by Deda Next srl in 2022 and implemented in python within the EU project Air-Break, is currently available to connect to STA-compliant endpoints and retrieve sensor data (e.g. European Air Quality data from this endpoint). The plugin has an embedded data provider which is currently designed to retrieve sensors&#8217; locations as geometrical features and then request the time series of observations for specific locations.</p> +<p>However, in order to offer support to a wider range of use cases and more complex queries on STA model entities, Faunalia and DedaNext (funded by BRGM) started to plan for a dedicated STA data provider for GIS: a development group was set up involving the QGIS community, formal acceptance of the proposal was sought within the QGIS community (QEP #257) and possible development options for the provider (ex: python vs C++) were analyzed. As STA is an OGC standard, it seemed appropriate to implement it in C++ as a core element of QGIS.</p> +<p>Development has therefore been carried out in close interaction with the QGIS developer community with the focus on supporting complex STA queries, implementing among other things:</p> +<p>&#8211; expansion of relations among model entities;<br /> +&#8211; independent attribute filtering and sorting on all entities;<br /> +&#8211; efficient data caching to limit unnecessary data transfers;</p> +<p>This new core element is available from QGIS version 3.37 (currently only available as nightly release).</p> +<p>Finally, plans are underway to develop a new version of the QGIS STA plugin (originally developed by Deda Next within project AirBreak) focused on data exploration and analysis that will be able to leverage on the newly released core STA data provider to support a wider range of use cases, such as:</p> +<p>&#8211; Time series analysis: This is the case of the old STA plugin. Fetch Locations, show them on the map. Then, upon selection of one location, fetch all related Things and Datastreams, and finally, fetch the Observations of the desired Datastream to be shown in a table or plot;<br /> +&#8211; Space-time series analysis: Given a selected set of Datastreams from a moving sensor, get all the FeaturesOfInterest of those Datastreams and plot them on the map, so to have a view of the path of the moving sensor and a hold on its values on every part of that path;<br /> +&#8211; Monitoring and inspection: Fetch all the latest observations of all Datastreams (or a selection based on the ObservedProperty) and show these at their Locations, styled by the result of the latest Observation of a given ObservedProperty. Then, in a second phase (eg. if a value is over a threshold), inspect the full timeseries of that one Datastream.<br /> +&#8211; Tracking of moving things: Show all Things with their current Location and their HistoricalLocations with the Temporal Controller (time slider).</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Matteo Ghetta + Luca Giovannini + + 1 + 1 + + + 12:40 + 00:15 + EO4MULTIHAZARDS Web Application + https://www.sfscon.it/talks/eo4multihazards-web-application/ + + <p>The EO4MULTIHA project (https://eo4multihazards.gmv.com/), funded by the European Space Agency, aims at developing an open database gathering and harmonizing event information coming from already existing event databases to support multi-hazard(-risk) research.<br /> +To pursue this aim, this project which has been developed in the EURAC research, Center for Sensing Solutions, presents a comprehensive web application designed to analyze and visualize multi-hazard events, developed using Django and PostgreSQL. Leveraging the strengths of open-source technologies, the application provides a robust platform for researchers, policymakers, and the public to access and understand the complexities of multi-hazard scenarios. The main parts of this web application is explained in the following paragraphs:</p> +<p>(i) The core of the application is built with Django, a high-level Python web framework known for its rapid development capabilities and clean, pragmatic design. PostgreSQL, a powerful and scalable open-source relational database system, ensures efficient data storage and management. Together, these technologies offer a reliable and flexible foundation for handling diverse and large datasets.</p> +<p>(ii) To visualize the events, Leaflet Map which is an open source contributor to the OpenStreet Map has been used.</p> +<p>(iii) To populate the database, the application exploits various RESTful APIs, integrating data from multiple sources, including satellite imagery, climatological records, in-situ measurements, and relevant statistical data. This multi-source approach allows for a comprehensive characterization of risks, exposures, and susceptibilities associated with multi-hazard events benefiting from the Open Data Standards such as OGC Standard.</p> +<p>(iiii)Key features of the application include spatial and temporal filtering of events, cross-linking of data sets for enhanced reusability, and compliance with open standards such as RESTful APIs and OGC standards. The platform is designed to be expandable, with the potential to incorporate additional locations and datasets in the future.</p> +<p>By providing an accessible online platform, this web application aims to support the understanding and analysis of multi-hazard events, facilitating informed decision-making and effective disaster management strategies. The use of open-source technologies and the integration of diverse data sources underscore the project&#8217;s commitment to innovation, scalability, and community-driven development.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Mahtab Niknahad + + 1 + 1 + + + 13:00 + 00:15 + BASIC CORE South Tyrol + https://www.sfscon.it/talks/basic-core-south-tyrol/ + + A project to solve the topographical complexity of the National Spatial Data Catalogue + A project to solve the topographical complexity of the National Spatial Data Catalogue + <p>The project has its roots in a precise and simplified cartographic updating methodology introduced by the Consortium of Municipalities of the Province of Bolzano in the early 2000s. This methodology, which was consolidated over the years, could no longer be applied following the adoption of the Territorial Data Catalogue (Ministerial Decree 10.11.2011 &#8220;Technical rules for defining the content specifications of geotopographic databases&#8221; and subsequent amendments) due to the complexity and articulation of the new national model. The primary objective of the project was to research and define a minimum set of information that could adequately describe the territory within the typical use context of the public administration, ensuring its sustainability in terms of the ability to keep it updated and aligned with the transformations of the territory. Simplifying the definition and understanding of the basic technical layer that every public administration producing geographic data must guarantee within their institutional activities for geotopographic databases is a fundamental step to adequately support territorial management. Lightened of the informational content already managed by the Provincial Administration within archives or sectoral Information Systems, and consequently already included in existing and consolidated maintenance and updating flows, as well as everything that can be considered three-dimensional data nowadays obtainable through faster and more accurate systems, the Basic Core (BC) specification was produced by reorganizing and simplifying the information levels contained in the National Territorial Data Catalogue with reference to the identified minimum subset of required information known as the National Core (NC). To make it practically usable, only the themes considered objectively useful and easily updatable were included in the Basic Core. Our presentation will outline the key points that enabled the design of the Basic Core content specification and illustrates the technological tools developed, as well as the automatic transformation and simplification procedures that led to the significant reduction in the number of object classes provided by the National Core (from 59 to only 23), demonstrating that the Basic Core project is not a merely theoretical exercise, but a practical and concrete application currently tested and successfully used in South Tyrol. The specifically developed Dashboard for managing, correcting and updating the provincial Geotopographic Database, built on the basis of this new simplified specification, will be explained in detail. This dashboard allows effective operation on every management aspect, including the crucial task of sharing maintenance responsibilities between the Provincial and Municipal levels, thus ensuring the full efficiency of this fundamental geographic base. Particular attention will be given to illustrating the guided editing functionality available directly from the online interface, as well as the options for creating and exporting QGIS projects. QGIS projects are designed to perform the most significant and advanced corrections and/or updates. We will conclude the overview of this innovative system with a demonstration of the processes for reimporting and validating the updated data. Finally, practical cases in which the Basic Core has been used will be presented, as well as future developments, already planned and those still under evaluation, that the system will receive in order to refine and make its use more robust.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Edoardo Scepi + + 1 + 1 + + + 13:20 + 00:15 + Sharing Connects People + https://www.sfscon.it/talks/sharing-connects-people/ + + The experience of Think Open at CIMeC + The experience of Think Open at CIMeC + <p>Think Open is an Open Science initiative born within CIMeC in 2018 whose goal is to build a virtual space within which researchers at the Center can share different kinds of outputs from research, integrating and merging information from different sources and stages of the knowledge-building process. A number of achievements have been made over the years, both from the point of view of training (seminars, hands-on, courses for doctoral students, awards, etc.) and implementation of best practices (code and data sharing, adoption of free-software tools, etc.). Here we will describe how sharing open practices in everyday working routines foster connections between people, creating practice-based communities.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Vittorio Iacovella + + 1 + 1 + + + 13:40 + 00:15 + Hacking your (electric) car: the importance of Open Data + https://www.sfscon.it/talks/hacking-your-electric-car-the-importance-of-open-data/ + + Gathering information from the OBD (On Board Diagnostic) port of your car could be challenging + Gathering information from the OBD (On Board Diagnostic) port of your car could be challenging + <p>Any car has a diagnostic connector from which you can gather and/or set data from the various ECU (Engine Control Unit) that are present in your car, such as odometer, temperatures, motor rotation speed, accelerator depression percentage, wheel angle, lights, and – in an electric car – information about battery, remain energy, charging/discharging power, etc.<br /> +The big challenge is that the meaning of fathered data is usually not known and car manufacturers are reluctant to share this information.<br /> +This talk will illustrate how to scan the available data and make reverse engineering in order to try to create a shared database containing (useful) car data and PIDs (Parameter IDs) from ECUs of your car.</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Luca Bonissi + + 1 + 1 + + + 14:00 + 00:15 + The Innovation Paradox + https://www.sfscon.it/talks/the-innovation-paradox/ + + Do you really know how to unleash and manage innovation? + Do you really know how to unleash and manage innovation? + <p>In the era of the Fifth Industrial Revolution, leaders, innovators and pioneers design, generate, and shape future-proof organizations, driven by a meaningful purpose promoting social impacts, combining emerging technologies and new ways of collaborating and conceiving work. While the &#8220;why&#8221; is clear and quite declared by many, the &#8220;what&#8221; to do and the &#8220;how&#8221; to do it remain very nebulous and, in some cases, obscure. Those ones who lead innovation within an organization suffer the innovation paradox: must innovate without knowing what and how. Innovators and pioneers are often alone, without a framework and processes for an open innovation execution. How can we unlock and unleash innovation, ensuring that the actions taken are always driven by what is truly needed to evolve your organization?</p> + + Data Spaces + Data Spaces + Data Spaces + https://www.sfscon.it/tracks/data-spaces-track-2024/ + + Andrea Solimene + + 1 + 1 + + + 14:20 + 00:15 + The FSFE Italy Project from Understanding to Testing + https://www.sfscon.it/talks/the-fsfe-italy-project-from-understanding-to-testing/ + + How I applied design-thinking to re-design the Italian Free Software Community + How I applied design-thinking to re-design the Italian Free Software Community + <p>The role of Deputy Coordinator Italy within the Free Software Foundation Europe (FSFE) was born in 2022 out of the need of re-establishing the presence of the Foundation on the territory. I designed this three years experimental project together with the <a href="https://freesoftwarelab.noi.bz.it/">Free Software Lab</a> of NOI Techpark with the value proposition of (re)designing the FSFE Italian Community.</p> +<p>The project followed a human centric approach, moving along the five core stages of design-thinking. The goal of my talk is to describe the FSFE Italy project and the design-thinking approach adopted.</p> +<p>The first year (Y1) served as the understanding phase: I got involved as an FSFE representative in the main communication channels used by the Free Software (FS) community on the territory. I conducted interviews with volunteers, associations’ heads and enthusiasts, took part into the main FS events organized on the territory, mapped all stakeholders (understanding-observing) and created my own point of view (POV). By the end of 2022 I had already became an established FSFE representative on the territory, having gathered inputs and ideas on how to kick off the community into year two (Y2). The goal of year two was to build on these new ideas (ideation) and put these thoughts into action (prototyping) by finding common goals and activities with the main FS associations active on the territory and signing Memorandum of Understandings, preparing the ground to test it in the third year (Y3). Guess what was the result?</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Marta Andreoli + + 1 + 1 + + + 14:40 + 00:15 + NGI: No more EU funding for Free Software?! + https://www.sfscon.it/talks/ngi-no-more-eu-funding-for-free-software/ + + <p>During the summer the European Commission made the decision to stop funding Free Software projects within the Next Generation Internet initiative (NGI). This decision results in a loss of €27 million for software freedom. Since 2018, the European Commission has supported the Free Software ecosystem through NGI, that provided funding and technical assistance to Free Software projects. This decision unfortunately exposes a larger issue: that software freedom in the EU needs more stable, long-term financial support. The ease with which this funding was excluded underlines this need.<br /> +This talk shows the urgent need for sustainable, long-term financial support for Free Software to ensure Europe&#8217;s technological independence.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Alexander Sander + + 1 + 1 + + + 15:00 + 00:15 + What the open source community means to me + https://www.sfscon.it/talks/what-the-open-source-community-means-to-me/ + + Some very personal thoughts on why contributing can enrich your life + Some very personal thoughts on why contributing can enrich your life + <p>Everytime I tell my friends about my hobby which noawadays has also become my job, I face lots of questions. A worldwide community? Contributors around the globe? An open source community? What is this all about?</p> +<p>In this talk, I&#8217;d like to share my very personal view about what the open source community means to me, how to grow from user into community member, how the credit of trust helps you to discover your own skills, how to make friends around the world and why it&#8217;s not only fun to get active in a community, but also a big benefit for your whole life that can help you to broaden your mind.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Florian Effenberger + + 1 + 1 + + + 15:20 + 00:15 + A Journey of Contribution and Collaboration in Open Source + https://www.sfscon.it/talks/a-journey-of-contribution-and-collaboration-in-open-source/ + + Why Foundations are Essential + Why Foundations are Essential + <p>Have you ever worked on a project that didn&#8217;t use any open source tools, libraries, or products? Didn&#8217;t think so&#8230;Using open source has been such an integral part of our daily work life that we don&#8217;t even think about it. We just expect it to be available, secure, stable, and bug-free. But how many of you are actually contributing back to an open source project?</p> +<p>This session will go through a couple of the aspects to consider when you are embarking on your open source journey. We will look at different kinds of open source projects, and what the open source foundations bring to the table.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Ivar Grimstad + + 1 + 1 + + + 15:40 + 00:15 + Jakarta EE: Why and how to get involved in Open Source Software? + https://www.sfscon.it/talks/jakarta-ee-why-and-how-to-get-involved-in-open-source-software/ + + <p>In this session you will learn how to become part of an open source community, how to get involved and most importantly why you need to do it! You will learn about the Jakarta EE and its plans for the future, so you can start right away! This presentation will also provide you with key insights into the industry-wide, open source collaboration to modernize Java enterprise systems for cloud-centric use cases.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Tanja Obradovic + + 1 + 1 + + + 16:00 + 00:15 + From Concept to Camp: Project Management Strategies for IT Education Events + + + <p>In today’s fast-paced technological landscape, the need for immersive and hands-on educational experiences is more crucial than ever. &#8220;From Concept to Camp: Project Management Strategies for IT Education Events&#8221; delves into the meticulous process of organizing successful IT camps from a project management perspective.</p> +<p>Join us as we explore the comprehensive journey of bringing an IT camp from initial concept to a fully realized event. We will cover essential project management strategies, including planning, scheduling, resource allocation, risk management, and post-event evaluation. Participants will gain insights into: Defining Objectives and Scope; Budgeting and Resource Management; Team Collaboration and Leadership; Marketing and Participant Recruitment; Logistics and Event Planning; Evaluation and Feedback.</p> +<p>Through real-world examples and practical advice based on the Red Hat Summer Camp Brno project, this talk will equip you with the tools and knowledge needed to transform your vision of an IT camp into a reality.</p> +<p>Whether you’re planning your first event or looking to enhance your current approach, this session will provide valuable takeaways to elevate your project management skills and deliver exceptional educational experiences.</p> + + SFSCON + SFSCON + SFSCON + + Juri Solovjov + Yuliia Kliuchnikova + + 1 + 1 + + + 16:20 + 00:15 + Building the Public Interest Desktop + https://www.sfscon.it/talks/building-the-public-interest-desktop/ + + Our experience organizing GNOME's Sovereign Tech Fund project + Our experience organizing GNOME's Sovereign Tech Fund project + <p>The Sovereign Tech Fund is a new funding program for critical free software infrastructure by the German government. As part of this, members of the GNOME community have been working on fixing important issues across the free desktop stack. This includes security, accessibility, maintainability, hardware support, and more.</p> +<p>In this talk Sonny and Tobias will give an overview of how we organized the project, the work done as part of it, and the massive impact a relatively small amount of public money can have on making the free desktop better.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Tobias Bernard + Sonny Piers + + 1 + 1 + + + 16:40 + 00:15 + Let&#8217;s share our love for Free Software + https://www.sfscon.it/talks/lets-share-our-love-for-free-software/ + + I love Free Software Day 2025 + I love Free Software Day 2025 + <p>We often underestimate the power of a simple Thank You. Free Software contributors do important work for our society and the &#8220;I Love Free Software Day&#8221; on 14 February is the perfect opportunity for you to express your special gratitude. Since 2010, we have celebrated this wonderful annual event with an ever-growing and diverse community. ♥</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Ana Galan + + 1 + 1 + + + 17:00 + 00:15 + MoodleXR: A Next-Generation Open-Source Platform for Immersive Learning + https://www.sfscon.it/talks/moodlexr-a-next-generation-open-source-platform-for-immersive-learning/ + + <p>This project aims to develop a state-of-the-art Learning Management System (LMS) based on Moodle, optimized for delivering Virtual Reality (VR) and Augmented Reality (AR) learning modules.</p> +<p>By leveraging the open-source nature of Moodle and integrating advanced immersive technologies, the project seeks to create an innovative educational platform that transforms traditional learning experiences.</p> +<p>The LMS will incorporate open-source VR/AR tools and libraries, such as A-Frame, AR.js, and Blender, enabling educators to seamlessly integrate and manage immersive content. It will support various VR headsets and AR devices, ensuring broad accessibility. The platform will feature interactive learning modules, robust analytics, and scalable infrastructure, all built on open-source technologies like Kubernetes and Matomo.</p> +<p>Additionally, the project will emphasize accessibility and privacy compliance, utilizing tools like WAVE and Let’s Encrypt.</p> +<p>By fostering a community-driven development model, this LMS will offer a flexible, cost-effective solution that revolutionizes education through experiential learning, making it more engaging, interactive, and effective for students and educators alike.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Luca Bagna + + 1 + 1 + + + 17:20 + 00:15 + Implementing digital examinations in free software systems + https://www.sfscon.it/talks/implementing-digital-examinations-in-free-software-systems/ + + <p>In Finnish upper secondary schools course and final exams have been digital for some years now. Ordinary student laptops are routinely booted from USB flash drives to a special operating system, which provides a restricted environment allowing students to take an exam with no distractions or tools to cheat. Up to these days, this was implemented with Debian GNU/Linux, also meaning that student laptops must be Linux-compatible.</p> +<p>This is now changing. Not every modern laptop can simply boot from a USB drive to run Linux, these including chromebooks, Apple laptops and some new Windows laptops. Some schools may want to buy these devices and do not want a separate set of computers only for examinations. The current system is being replaced by an exam application, meant to run on different operating systems, which are to provide guarantees that no cheating can occur. The exam application activates the &#8220;assessment mode&#8221;, provided by operating system vendors, and this mode should provide a safe place where no cheating can occur, even on computers owned by the students.</p> +<p>Does that even make sense? Can that really be done, and with free software? In this presentation we take a peek at some technologies in Linux systems that can be used to secure a computer against an attacker with a physical access to the machine. We will also look at possible ways to implement an &#8220;assessment mode&#8221; in Linux desktops.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Juha Erkkilä + + 1 + 1 + + + 17:40 + 00:15 + Let’s spark children’s interest in coding + https://www.sfscon.it/talks/lets-spark-childrens-interest-in-coding/ + + Our experiences and how you can contribute + Our experiences and how you can contribute + <p>Today it is impossible to imagine daily life without software. The majority of us can&#8217;t spend a single day without using it. People use software in the workplace, on laptops, and on mobile phones. Software is also found in less obvious places however: in trains, cars, televisions, washing-machines, fridges, and many other devices. None of these devices could function without software. Without software we couldn&#8217;t write e-mails, make phone calls, go shopping, or travel as we are accustomed to. Software is our society&#8217;s central tool. How do we ensure that the next generation is motivated and capable of shaping technology for society&#8217;s benefits?</p> +<p>The Free Software Foundation Europe&#8217;s volunteers and staff have interacted with over 1700 children between 6 to 10 years in the past months. Children, especially girls, afterwards were motivated to start experimenting with hardware and software. In the discussions we saw that they realise how crucial technology will be for them. Furthermore with the FSFE&#8217;s coding competition &#8220;Youth Hacking 4 Freedom&#8221; we gathered experiences working with teenagers who program, tinker, and have fun with software.</p> +<p>Learn more about the experiences how the FSFE sparks children&#8217;s and teenagers interest to tinker, experiment and program. Furthermore you will see how fulfilling those activities can be for yourself.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Matthias Kirschner + + 1 + 1 + + + + + 11:00 + 00:15 + Open-source silicon chips + https://www.sfscon.it/talks/open-source-silicon-chips/ + + <p>We have all heard that there is &#8216;Intel inside&#8217;, but what is inside Intel? Almost all integrated circuits today are literally black boxes. They may contain unwanted or malicious features and, most importantly, they do not encourage reuse, nor do they allow it. The two main causes of such secrecy are: 1. standard design tools explicitly forbid the publication of any output, and 2. most foundries disallow disclosing technology details. Designers moreover face additional problems: The licence cost of standard design tools is unaffordable for most SMEs (unless questionable discount policies are applied), and lock-in threats arise at many levels, from IP blocks to foundry details to file formats. Yet exceptional progress has been made in recent years: Hundreds of silicon chips have been designed using free and open-source tools, and three foundries have made details of their processes public: The doors to free silicon are open! Hence how is politics reacting? What are the next steps to be taken? What are the opportunities for users, society and companies?</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Luca Alloatti + + 1 + 1 + + + 11:20 + 00:15 + Opt out? Opt in? Opt Green! Bringing Free Software To Eco-Consumers + https://www.sfscon.it/talks/opt-out-opt-in-opt-green-bringing-free-software-to-eco-consumers/ + + <p>Free Software gives consumers what they want, but many don&#8217;t know it &#8230; yet! We aim to change that by reaching out directly to eco-consumers in the &#8220;Opt Green&#8221; project, a new KDE Eco initiative funded by the German Environmental Agency.</p> +<p>Consumers want sustainable software: in a recent European poll 50% of respondents say the two primary reasons they purchase a new device are non-functioning software and software performance issues. This is as good a time as ever for an &#8220;Opt Green&#8221; message. In the next couple of years Windows 10 end-of-life and the phasing out of Intel-based macOS support will make e-waste out of hundreds of millions of computers. Functioning but vendor-abandoned devices can stay out of the landfill and in use for many years to come. With software designed for users&#8217; needs, not vendors&#8217;, it is possible to run software on the devices one already owns. Lean, efficient Free Software even runs on devices that are decades old. This is good for users, and better for the environment!</p> +<p>In this lightning talk I will provide an overview of the whys and hows of KDE Eco&#8217;s &#8220;Opt Green&#8221; initiative. Through campaigns and workshops over the next 2 years, we will raise awareness about environmental issues driven by software and demonstrate the power of Free Software to drive down resource use and keep devices running smoothly for years beyond official vendor support. This is all possible because Free Software *is* right-to-repair software: it removes vendor dependencies and guarantees transparency and user autonomy, providing full control over software, and thus hardware. I will describe the ways we plan to reach our target audience, including materials designed for eco-consumers and events well outside usual tech circles, such as open-air organic, artisanal, and fair trade markets, cultural centers, and others. These activities give us the opportunity to align our values in the Free Software community with those in allied communities striving for a sustainable modern lifestyle.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Joseph P. De Veaugh-Geiss + + 1 + 1 + + + 11:40 + 00:15 + ClapMetrics: Decoding Users’ Gender and Age Through Smartwatch Gesture Dynamics + https://www.sfscon.it/talks/clapmetrics-decoding-users-gender-and-age-through-smartwatch-gesture-dynamics/ + + <p>In this presentation, we introduce ClapMetrics &#8211; an innovative and seamless method for deducing the gender and age of smartwatch users. This system ingeniously harnesses the capabilities of the smartwatch’s integrated 3D sensors — specifically, the accelerometer and gyroscope—to capture the wearer’s arm movements during a clapping action. ClapMetrics operates on the principle that each clap is a complex interplay of motion, unique to the individual, much like a fingerprint. By analyzing these movements, ClapMetrics can gather rich biometric data without any active input or effort from the user, making it a remarkably non-intrusive technology. We will delve into the specifics of how ClapMetrics processes sensor data to make its estimations. We will explore the Neural Network’s architecture, the training process, and how the model interprets the sensor data to make reliable predictions about the wearer’s gender and age.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Attaullah Buriro + + 1 + 1 + + + 12:00 + 00:15 + Adoption Determinants of Open Hardware Across Industries + https://www.sfscon.it/talks/adoption-determinants-of-open-hardware-across-industries/ + + <p>Open Hardware (OH) is revolutionizing the way we approach technology in several areas, such as agriculture and healthcare. These areas, which are fundamental to food availability and human well-being, are undergoing an important shift as open hardware licensing strategies, inspired by open-source software (OSS), make solutions more accessible, affordable, and customizable. In this talk, we review major factors determining the use and adoption of OH technologies, including economic advantages, opportunities, and challenges.<br /> +Similar to OSS, OH applications are gaining momentum. In agriculture, farmers and researchers are turning to OH for precision farming tools, environmental monitoring, and robotics. These technologies not only reduce development costs but can be easily adapted to specific local needs, enhancing their effectiveness in diverse agricultural environments – crucial for small-scale farmers in developing countries and rural areas who face financial constraints. Likewise, the healthcare industry is benefiting from OH through the development of affordable medical devices, diagnostic tools, and treatment systems. The high costs and regulatory challenges associated with traditional medical devices often limit access to essential healthcare, especially in underdeveloped regions. Examples include open-source ventilators, syringe pumps, and diagnostic devices.<br /> +Applications of OH will be showcased through a comparative analysis of successful projects, particularly those with high engagement on platforms like GitHub, characterized by community engagement, active forums, and regular updates. Finally, we will draw conclusions about the potential of OH for industries beyond agriculture and healthcare, encouraging further innovation and collaboration in the open-source community.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Seckin Celik + Davide Serpico + + 1 + 1 + + + 12:20 + 00:15 + Enabling global interoperability among smart devices is only possible through Open Source + https://www.sfscon.it/talks/enabling-global-interoperability-among-smart-devices-is-only-possible-through-open-source/ + + Oniro and OpenHarmony a cooperation to build a global ecosystem + Oniro and OpenHarmony a cooperation to build a global ecosystem + <p>Global interoperability is probably the biggest problem that smart devices have been studied for more than 10 years. Multiple solutions have been proposed with different results, but none of them has established a reference framework and a global adoption. One of the main reasons for this to stay as a key element for research and investment is the diversity among the whole technology stack and geographical dispersion of device manufacturers. In the last years, there is a solution that is capturing the attention by demonstrating how an open source operating system can enable global interoperability in a huge domestic market like China. This solution is OpenHarmony and through a cooperation with Eclipse Foundation Oniro project, it is intended to use open source to drive interoperability and therefore solve one of the biggest challenges in the IoT and smart device industry. During the talk, it will be presented the approach followed by these two independent initiatives to cooperate while keeping the independence of the open source communities behind them.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Juan Rico + + 1 + 1 + + + 12:40 + 00:15 + Smart Werke Meran &#8211; Lorawan Use Cases + https://www.sfscon.it/talks/smart-werke-meran-lorawan-use-cases/ + + Our Use Cases realized with 100% Open Source + Our Use Cases realized with 100% Open Source + <p>Stadtwerke Meran has had a Chripstack Lorawan server and 19 Lorawan gateways for a year now. Merano has a well-developed Lorawan network.</p> +<p>We have realized the following use cases:</p> +<p>Remote control of public lighting.<br /> +Temperature measurement ( Just Nature project)<br /> +Smart metering for our water customer<br /> +GPS tracking for waste compactors of our major customers</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Stefan Mutschlechner + + 1 + 1 + + + 13:00 + 00:15 + 2025 scenario on OpenISA OpenPower Open Hardware computing + https://www.sfscon.it/talks/2025-scenario-on-openisa-openpower-open-hardware-computing/ + + 2025 Real scenario on Open Hardware based on OpenISA OpenPower CPU + 2025 Real scenario on Open Hardware based on OpenISA OpenPower CPU + <p>We see on 2025 which OpenISA OpenPower low power chip will give life to new Open Hardware computers, we examine in detail which open hardware computers will be ready for 2025 based on these chips. It will be the first time that OpenPower OpenISA low power Chip will be produced, and what is more, it will be produced from other Silicon Companies different from IBM.<br /> +We will see who are the GNU/Linux distros that support PPC64 and PPC64el and PowerPC architecture that runs on these computers and how you can join to experiment with it and push forward these architectures.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Roberto Innocenti + + 1 + 1 + + + 13:20 + 00:15 + The SMART Box of AURA Project + https://www.sfscon.it/talks/the-smart-box-of-aura-project/ + + <p>AURA project centers on the development of &#8220;Green &amp; Smart Urban Furniture,&#8221; a new generation of urban furniture that transcends traditional roles by incorporating eco-friendly and intelligent features. These urban elements are designed with bioabsorbent vegetation capable of mitigating atmospheric pollutants, making them environmentally sustainable. Furthermore, they are outfitted with advanced IoT sensors that monitor a range of environmental parameters, including climate data, urban pollution, and vehicular traffic.</p> +<p>These smart urban furniture units not only establish an extensive urban monitoring network but also actively combat pollution through the sequestration and reduction of harmful substances via the integrated vegetation. The embedded IoT sensors provide innovative capabilities for tracking the impact of these elements on the surrounding urban environment, such as monitoring air pollution levels and assessing the effects of heat islands. Each furniture piece is equipped with a &#8220;smart box,&#8221; a hardware system constructed using low-cost commercial off-the-shelf (COTS) components. This system includes climate and environmental sensors, gas measurement devices, a processing unit, and a data transmission module. The accompanying software, developed from scratch, delivers localized information—such as CO2 sequestration, temperature, and humidity—and contributes to a comprehensive environmental monitoring network aimed at predictive analysis, including weather risks, heat wave alerts, and health risks associated with air pollution. The presentation will delve into the custom-developed software and its ability to meet the field-level requirements of the AURA Architecture, encompassing individual sensors, sensor nodes (smart-boxes within the furniture), and the broader network of these nodes. It will highlight the significant impact and benefits of utilizing free and open-source technologies throughout the development process. Key focus areas include the creation of drivers for individual sensors, with emphasis on the most representative examples, the development of software for sensor nodes—covering features like self-testing, over-the-air (OTA) updates, and MQTT communication—and the design of a dynamic web app for data presentation, leveraging JavaScript, Bootstrap, and a JSON Data Lake. This comprehensive approach underscores the importance of open technologies in accelerating innovation, ensuring flexibility, and delivering robust, scalable solutions for smart urban environments.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Angelo Serino + + 1 + 1 + + + 13:40 + 00:15 + Raspberry Pi and Node-RED: Open Source Tools for Local Automation and Industrial IoT applications + https://www.sfscon.it/talks/raspberry-pi-and-node-red-open-source-tools-for-local-automation-and-industrial-iot-applications/ + + <p>This talk will explore how Raspberry Pi and Node-RED enable robust solutions for automation and control systems in both industrial and local applications. Leveraging open-source technology, these platforms can handle a wide range of tasks, from reading sensor data and managing actuators, to controlling devices through industrial communication protocols such as Modbus, RS485 ascii RTU etc. Node-RED&#8217;s message-driven architecture simplifies the creation of control logic, even for complex operations, while Raspberry Pi serves as a powerful and cost-effective alternative to traditional PLCs and IPCs. The integration of these tools allows for seamless data processing, remote communication, and the development of HMI interfaces both user-friendly or more traditiconal SCADA-like, making these technologies ideal for creating IIoT-native solutions. This presentation will focus on the technical capabilities, showing how these platforms can empower engineers and developers to build flexible and scalable automation solutions.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Federico Boero + Alberto Nicoletti + + 1 + 1 + + + 14:00 + 00:15 + Approaches to Object Detection: Edge-Based and AI-Based + https://www.sfscon.it/talks/approaches-to-object-detection-edge-based-and-ai-based/ + + <p>This presentation explains why we passed to the expert system based on edge-based object detection on traditional image analysis techniques to the AI-based, leveraging advanced machine learning. The first method uses parameters derived from image analysis tools, focusing on attributes such as shape, size, and color of objects, informed by preliminary tests and expert data. The machine learning method employs a sophisticated algorithm that dynamically learns and identifies objects in images. We used both approaches using diverse datasets and measured their accuracy and efficiency under various conditions. The aim of this presentation is to show the improvement obtained by using the AI-based system applied for real-time detection and classification, offering insights into their practical strengths and applications.</p> + + Open Hardware + Open Hardware + Open Hardware + https://www.sfscon.it/tracks/open-hardware-track-2024/ + + Giovanni Giannotta + Orneda Lecini + + 1 + 1 + + + 14:20 + 00:15 + Proxmox Backup Server: Backup for your Datacenter + https://www.sfscon.it/talks/proxmox-backup-server-backup-for-your-datacenter/ + + <p>Backups are an essential component of every IT infrastructure, from small scale businesses up to large datacenters, spanning multiple locations. With the Proxmox Backup Server a fully Free and Open Source backup solution is available, being highly integrated with the Proxmox Virtual Environment.<br /> +This talk will present a short overview of the capabilites provided by Proxmox Backup Server, giving some insights into new and recently added features. Further, by peeking into the inner workings and the software design will show how fast, space efficient and reliable backups are created and how data consistency and integrity are guaranteed. Topics covered will include backups for Virtual Machines and Linux Containers running on top of Proxmox Virtual Environment as well as host level backups.</p> + + DevOps + DevOps + DevOps + https://www.sfscon.it/tracks/devops-track-2024/ + + Christian Ebner + + 1 + 1 + + + 14:40 + 00:15 + Cloud Costs with ClickHouse and OpenCost + https://www.sfscon.it/talks/cloud-costs-with-clickhouse-and-opencost/ + + <p>Managing costs and billing across numerous Cloud-managed Kubernetes clusters presents significant challenges. In this talk, we&#8217;ll explore these challenges and discuss solutions using ClickHouse and OpenCost. Leveraging ClickHouse&#8217;s capabilities, we&#8217;ll demonstrate how it efficiently imports diverse Cloud billing data streams. Additionally, we&#8217;ll delve into how OpenCost addresses the complexities of real-time cost management within a multitenant architecture. Join us to uncover practical insights into optimizing cloud costs effectively.</p> + + DevOps + DevOps + DevOps + https://www.sfscon.it/tracks/devops-track-2024/ + + Denys Kondratenko + + 1 + 1 + + + 15:00 + 00:15 + Ansible + https://www.sfscon.it/talks/ansible/ + + Lazy Engineer's Best Friend! + Lazy Engineer's Best Friend! + <p>For a software engineer DRY is not only a washing machine progam, but it represents a deeply-held mantra: Don&#8217;t Repeat Yourself.</p> +<p>To avoid repetitive manual work, automation tools like Ansible enable engineers to quickly configure infrastructure and easily deploy applications.</p> +<p>In this talk, we will explore the key concepts and benefits of Ansible for configuration management, deployment and orchestration of remote devices. We will start with an overview of Ansible&#8217;s utility, how it works, and common use cases. We will see how YAML files describe configurations and playbooks define automated tasks and processes.</p> +<p>Practical examples will show Ansible automation in action, including a quick introduction to initializing and keeping your operating system up to date by automating the installation and maintenance of system tools. We will also introduce the concept of dotfiles for configuration.</p> +<p>What are you waiting for? Learn how to spend 30 minutes automating 5-second tasks with Ansible! (It&#8217;ll save you time in the long run, I promise!)</p> + + DevOps + DevOps + DevOps + https://www.sfscon.it/tracks/devops-track-2024/ + + Marco Lampis + + 1 + 1 + + + 15:20 + 00:15 + Efficient Log Management in Large-Scale Kubernetes Clusters + + + <p>Large Kubernetes clusters can generate significant volumes of logs, especially when housing thousands of running pods. This may demand substantial CPU, RAM, disk IO, and disk space for storing and querying large log volumes. In this talk, we will look into different strategies of storing those logs in ElasticSearch, Grafana Loki and VictoriaLogs and examine how we can save 10x or more on infrastructure costs.</p> +<p>This talk presents real-world examples of efficient log management in large-scale Kubernetes clusters. It includes setup demonstrations, numerical data, and graphical representations from reproducible benchmarks.</p> + + DevOps + DevOps + DevOps + https://www.sfscon.it/tracks/devops-track-2024/ + + Aliaksandr Valialkin + + 1 + 1 + + + 15:40 + 00:15 + KubeVirt + + + making running virtual machines in a kubernetes cluster a mainstream activity + making running virtual machines in a kubernetes cluster a mainstream activity + <p>KubeVirt is a Kubernetes addon for running virtual machines inside a Kubernetes cluster.</p> +<p>Currently being in CNCF incubating state, it has a wide range of adopters by both vendors and end users, such as NVidia, Suse, ARM and Red Hat to name a few.</p> +<p>This talk gives an overview of what is currently possible with KubeVirt on your cluster and what its future may look like. We will describe some of the features it supports, i.e. VM Import, LiveMigration, Snapshot/Restore and Monitoring.</p> +<p>At the end of the talk attendees will have an idea of how they can use it to better integrate existing virtual machines with containers in their existing application landscape.</p> + + SFSCON + SFSCON + SFSCON + + Daniel Hiller + + 1 + 1 + + + 16:00 + 00:15 + Why free backup software matters + https://www.sfscon.it/talks/why-free-backup-software-matters/ + + <p>It is 2024, we&#8217;re in the middle of the cloud-era.<br /> +Almost every service you desire is available in &#8220;the cloud&#8221;.<br /> +At least some of your company&#8217;s critical data is stored at some cloud provider.<br /> +Does your provider actually keep backups?<br /> +Can you live with their Recovery Time Objective (RTO)?<br /> +Do you believe they will actually meet the RTO?<br /> +Maybe you have another copy of your data?<br /> +In a format that you can actually access and read?</p> + + DevOps + DevOps + DevOps + https://www.sfscon.it/tracks/devops-track-2024/ + + Andreas Rogge + + 1 + 1 + + + 16:20 + 00:15 + Demystifying JWTs + https://www.sfscon.it/talks/demystifying-jwts/ + + <p>JSON Web Tokens (JWTs) have become a popular method for securely transmitting information between two parties. They are widely used in modern web applications for authentication and data exchange. However, their inner workings and security implications can be complex and often misunderstood by the developers.</p> +<p>In this talk, we aim to demystify JWTs by exploring their structure, how they work, and the cryptographic mechanisms that ensure their integrity and confidentiality. We will discuss the components of a JWT, including headers, payloads, and signatures, and illustrate how they combine to form a token.</p> +<p>Furthermore, we will dive into best practices for JWT usage, common pitfalls to avoid, and security considerations such as token expiration, payload size, and the choice of cryptographic algorithms. Finally, we will explore how a WebSocket connection can be secured with JWTs. Security is increasingly an overlooked necessity while utilizing a protocol that does not support authentication by default.</p> +<p>By the end of the session, attendees will have a clear understanding of how JWTs operate, their advantages over traditional session-based authentication, and how to implement them securely in their own applications.</p> + + Cybersecurity + Cybersecurity + Cybersecurity + https://www.sfscon.it/tracks/cybersecurity-track-2024/ + + Dominika Bobik + + 1 + 1 + + + 16:40 + 00:15 + Containerization and micro-services in real life change security and vulnerability management. Let’s Discuss. + https://www.sfscon.it/talks/containerization-and-micro-services-in-real-life-chandge-security-and-vulnerability-management/ + + Security Configuration for Containerization and micro-services applications + Security Configuration for Containerization and micro-services applications + <p>Containerization and micro-services change the way software is deployed and used in production contexts. Re-evaluation of the criteria for secure development and above all for secure configuration of these solutions. It would probably be appropriate to implement security already during the creation of the solution itself.</p> + + Cybersecurity + Cybersecurity + Cybersecurity + https://www.sfscon.it/tracks/cybersecurity-track-2024/ + + Carlo Falciola + + 1 + 1 + + + 17:00 + 00:15 + Cyber Risk Management: let’s try to manage it with open source and free software + https://www.sfscon.it/talks/cyber-risk-management-lets-try-to-manage-it-with-open-source-and-free-software/ + + Open source solutions in the cybersecurity landscape, oriented to manage processes + Open source solutions in the cybersecurity landscape, oriented to manage processes + <p>Cyber Risk Management is what you need to manage to ensure your business can operate being aware of threats, vulnerabilities, and to ensure that your business transactions and data are confidential, intact, available.</p> +<p>Let’s discuss and explore solutions and resources coming from open source and free software that can help organization to manage their cybersecurity programs, with an approach that looks at sharing knowledge, adopt tools and pay attention to the budget.</p> + + Cybersecurity + Cybersecurity + Cybersecurity + https://www.sfscon.it/tracks/cybersecurity-track-2024/ + + Graziano Specchierla + + 1 + 1 + + + 17:20 + 00:15 + IT Security – Don’t let Open Source Software become the next menace + https://www.sfscon.it/talks/it-security-dont-let-open-source-software-become-the-next-menace/ + + Criminals and Govs are levereging Open Source tools, libraries and software to break into organizations. Let's stop 'em. + Criminals and Govs are levereging Open Source tools, libraries and software to break into organizations. Let's stop 'em. + <p>There is a prevalent myth that open source software is inherently secure. However, this is not true. Open source software is susceptible to vulnerabilities just like any other software. Moreover, the fact that anyone can review the code does not guarantee that the right people will do so. Open source software faces two important threats than not everybody are aware of:</p> +<p>Vulnerabilities: Open source developers need to understand and communicate the security posture of their projects to users. They must adopt robust security practices. The Log4j incident in 2021, which led to the Log4Shell vulnerability, triggered a catastrophic wave of attacks due to inadequate support for the logging framework and its critical role in company procedures.</p> +<p>Dev teams infiltration: Criminal organizations and government hacking teams are executing highly sophisticated social engineering operations to infiltrate understaffed open source projects. Their goal is to compromise development teams and insert backdoors into the software. The most recent attack on a significant project was discovered in April 2024.</p> +<p>Objective of the Talk: Inform the community about these two security scenarios and demonstrate how to effectively address them.</p> + + Cybersecurity + Cybersecurity + Cybersecurity + https://www.sfscon.it/tracks/cybersecurity-track-2024/ + + Giancarlo Calzetta + + 1 + 1 + + + 17:40 + 00:15 + Biting the Apple + https://www.sfscon.it/talks/biting-the-apple/ + + MacBook Forensic with Fuji + MacBook Forensic with Fuji + <p>Description: Fuji is a free software, licensed under GPL v3, that leverages Apple Software Restore (ASR) and Rsync to create forensic images of macOS systems. It operates on logged-in computers to efficiently capture disk images while maintaining data integrity.</p> +<p>Bypassing encryption on Apple silicon processors presents significant challenges due to their advanced hardware encryption mechanisms and secure enclave protections. These processors employ complex security protocols that safeguard data at a hardware level, making unauthorized access and decryption extremely difficult. Without proper authentication or specific exploits, forensic imaging on these devices requires substantial technical expertise and often necessitates the cooperation of the device owner.</p> +<p>We&#8217;ll see how to acquire forensically MacBook data with free software</p> + + Cybersecurity + Cybersecurity + Cybersecurity + https://www.sfscon.it/tracks/cybersecurity-track-2024/ + + Alessandro Farina + + 1 + 1 + + + + + 11:00 + 00:15 + Apisense – Easily monitor and track your REST-API data quality + https://www.sfscon.it/talks/apisense-easily-monitor-and-track-your-rest-api-data-quality/ + + An easy and modular solution to faulty REST-API data developed in collaboration with the Open Data Hub + An easy and modular solution to faulty REST-API data developed in collaboration with the Open Data Hub + <p>Ever had the issue of fetching invalid or faulty data from a REST-API and noticing only later, when everything broke down? Not anymore!</p> +<p>Apisense was developed in collaboration with the Open Data Hub to be an easy and modular tool to fit every need possible used to ensure and monitor the availability, quality and correctness of data provided via REST-APIs.</p> +<p>Sounds too good to be true? Tune in to find out how Apisense can help both producers and consumers of data to be aware of the quality and reliability of the data they provide/consume.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Aurelio Buonomo + Christian Zanotti + + 1 + 1 + + + 11:20 + 00:15 + MongoDB Alternatives: Is There A Need For A New Open Standard? + + + <p>This talk takes you on a journey through the history of SQL as an Open Standard, emphasizing its pivotal role in shaping the database industry. It also highlights the pressing need for a similar standard in MongoDB-compatible open databases. The presentation introduces FerretDB as a groundbreaking solution bridging MongoDB and open databases, ensuring seamless transitions without extensive application-level changes. This talk illuminates the importance of open standards and presents a path forward for enhanced compatibility and collaboration within the open-source database community.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Peter Farkas + + 1 + 1 + + + 11:40 + 00:15 + MariaDB Vector: Why your AI data should be in an RDBMS + https://www.sfscon.it/talks/mariadb-vector-why-your-ai-data-should-be-in-an-rdbms/ + + Databases and AI: How to supercharge application development with MariaDB vector + Databases and AI: How to supercharge application development with MariaDB vector + <p>As AI apps become mainstream, conventional IT wisdoms apply. AI apps must be no monoliths, but need to be logged, audited, and overall well integrated into normal IT. This means all AI data – vectors, input, output – is best stored in a normal RDBMS. Better still: In an open source database with performance, stability, and ease of use. Here is an overview of the AI opportunities, possibilities, methodologies, and features in MariaDB Server.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Kaj Arnö + + 1 + 1 + + + 12:00 + 00:15 + 1, 2, 3, Doc Kit! + https://www.sfscon.it/talks/1-2-3-doc-kit/ + + Automate the creation of software documentation + Automate the creation of software documentation + <p>Doc Kit is an open source command line tool that automates the creation of software documentation and release notes.<br /> +It can be used in conjunction with DocBook Authoring and Publishing Suite (DAPS) for quickly preparing the skeleton of professional looking software documentation.</p> +<p>Doc Kit has been designed for initialising SUSE or openSUSE documentation repositories but in a few steps it can be re-used for other projects too.<br /> +The tool consists of two parts:<br /> +1. a command-line tool called doc-kit that can download documentation boilerplate files<br /> +2. a repository of documentation boilerplate files, such as the SUSE/openSUSE book preface and entity files.</p> +<p>The presentation will show how to use Doc Kit and how to customise the provided templates for creating a brand new documentation or release notes projects.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Marina Latini + + 1 + 1 + + + 12:20 + 00:15 + codEEmoji – Making code more informative with emojis + https://www.sfscon.it/talks/codeemoji-making-code-more-informative-with-emojis/ + + <p>This presentation focuses on the open-source project codEEmoji, an IDE plugin that adds additional information to the code through emojis. The talk starts by discussing the benefits of this approach compared to other ways to present information for the developer in IDEs. It follows by presenting the plugin and its main functionalities, which go from pointing out bad practices in method and variable naming to presenting modifiers and method characteristics in their usage. Next, it is presented how the plugin structure was designed to receive new contributions. The talk finishes by presenting some challenges and future features.</p> +<p>https://github.com/codeemoji/codeemoji-plugin</p> +<p>https://plugins.jetbrains.com/plugin/22416-codeemoji</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Eduardo Guerra + + 1 + 1 + + + 12:40 + 00:15 + Can Test Driven Development be speeded up with Generative AI? + https://www.sfscon.it/talks/can-test-driven-development-be-speeded-up-with-generative-ai/ + + <p>Generative AI tools, like ChatGPT, have shown remarkable capabilities in natural language processing. It is logical to explore their potential in programming, yet the quality of generated code raises concerns. Test-Driven Development (TDD) offers a promising approach to address these concerns. In this talk, we will explore how developers can effectively collaborate with generative AI tools to enhance TDD practices, ensuring higher code quality and streamlined development processes. To this aim, we will present two interaction patterns between a human and an AI.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Moritz Mock + Barbara Russo + Jorge Melegati + + 1 + 1 + + + 13:00 + 00:15 + ScrapeGraphAI + https://www.sfscon.it/talks/scrapegraphai/ + + you only scrape once + you only scrape once + <p>ScrapeGraphAI is an innovative Python library designed to revolutionize the field of web scraping and in less than 4 months it collected over than 12k stars on Github and more than 100k downloads on pip. It allows to scrape which website you want with the knowledge of the HTML code and with the LLM models. By seamlessly integrating a natural language model within its architecture, ScrapeGraphAI enables the extraction of valuable information from websites with unparalleled flexibility and accuracy. Unlike traditional scraping tools that rely on rigid patterns or manual configuration, ScrapeGraphAI constructs a dynamic graph of operations to interrogate web pages, ensuring that relevant data is captured even in the face of changing website structures. This library&#8217;s unique fusion of language models and directed graph logic empowers developers to create sophisticated scraping workflows with minimal coding required, thereby streamlining the process of extracting valuable insights from online content. More info at this link: https://github.com/VinciGit00/Scrapegraph-ai</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Marco Vinciguerra + + 1 + 1 + + + 13:20 + 00:15 + Software Engineering Automation: From early tools to Generative AI and beyond + https://www.sfscon.it/talks/software-engineering-automation-from-early-tools-to-generative-ai-and-beyond/ + + <p>The emergence of Generative AI tools, such as ChatGPT and Copilot, promises to disrupt knowledge-based work, including software development. However, these are not the first tools to support the automation of software engineering. From the early days, various tools have been developed to remove repetitive tasks, reduce workload, and consequently increase the abstraction of software development, such as auto-completion and automatic refactoring. In this talk, we present the different levels of the automation of software engineering. We will examine how past and present tools have achieved these levels, the current capabilities of Generative AI tools, and what we can expect for the future.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Jorge Melegati + + 1 + 1 + + + 13:40 + 00:15 + The Crucial Role of Openness in Modern Software Development + https://www.sfscon.it/talks/the-crucial-role-of-openness-in-modern-software-development/ + + <p>Developers and providers of software-based products as well as other new technologies for the global market know that the winning solutions for future-proof projects share one key feature: interoperability with products from other suppliers. Achieving this interoperability means relying on open standards, open-source technologies and establishing key partnerships with other industry players.</p> +<p>In effect, openness principles are increasingly essential to software development. This talk will provide an in-depth analysis of how these concepts underpin interoperability, security and innovation in today&#8217;s technological landscape.</p> +<p>It will discuss the importance of open standards in creating seamless integration between diverse systems and applications, ensuring that technological advancements remain accessible and adaptable. The session will also cover key strategies and best practices for the adoption of open solutions that drive compatibility and competitiveness.</p> +<p>Finally, by examining Jakarta EE and the Payara Community, the talk will illustrate how these frameworks exemplify the power of open source in building innovative, scalable and future-oriented applications.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Chiara Civardi + Dominika Tasarz-Sochacka + + 1 + 1 + + + 14:00 + 00:15 + AI Tools for Jakarta EE + https://www.sfscon.it/talks/ai-tools-for-jakarta-ee/ + + <p>Discover how AI-powered tools for Jakarta EE streamline the entire development lifecycle.</p> +<p>Over the years, there have been many ways of starting a project: archetypes, project generators, visual designers, and so on. What do we get when we add a language model to the mix? A project generator that scaffolds domain-relevant Jakarta EE applications with backend and frontend functionalities in place.</p> +<p>Experience the future of enterprise application development through practical, cutting-edge demonstrations.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Gaurav Gupta + + 1 + 1 + + + 14:20 + 00:15 + How to start contributing and still have fun + https://www.sfscon.it/talks/how-to-start-contributing-and-still-have-fun/ + + <p>Are you new to Open Source and about to create your first commit, but still haven&#8217;t clicked on &#8220;New Pull Request&#8221; button?</p> +<p>There will be always something holding you back.</p> +<p>Or do you want to gain experience that can be applied at your school or work but don&#8217;t know how?</p> +<p>Open Source gives you that opportunity.</p> +<p>Let&#8217;s talk about it because we all go through it: how to find your project; fear of the first commit, the first code review, the first mistakes and everything is public; fight toxic communities &#8211; no one is perfect; when to open your code;</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Juri Solovjov + + 1 + 1 + + + 14:40 + 00:15 + Monolith Splitter + https://www.sfscon.it/talks/monolith-splitter/ + + <p>Migration from monolithic systems to microservices has earned significant interest in recent years. Software architects and developers welcome approaches, techniques, and patterns that can facilitate and automate the migration process. This talk will present Monolith Splitter, a tool that employs various approaches for splitting a monolith into a microservices architecture. This tool could be beneficial for software architects looking to migrate monolithic projects to a more scalable architecture. It uses execution traces to analyze monolithic software and suggests which classes should be grouped together in separate services according to criteria such as cohesion, modularity, and independence of evolvability. We will showcase the application of the tool to a series of open source software projects, discussing the outcomes, the benefits, and the current limitations.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Michal Skipala + Bruno Rossi + + 1 + 1 + + + 15:00 + 00:15 + The Next Level of Metrics in Microservices + https://www.sfscon.it/talks/the-next-level-of-metrics-in-microservices/ + + Going beyond measuring workload and performance + Going beyond measuring workload and performance + <p>In Microservices, measuring workload and performance are old news! They&#8217;re still important, but we can do more. In this talk, we&#8217;re navigating through new ideas on how to use metrics to tell us more than the basics about our microservices. Did you know we can evaluate our microservices in the architectural level? So we&#8217;ll have concrete data to support our decision-making. Between patterns and bad smells, we can use metrics to detect the points where they happen. Let&#8217;s explore these new possibilities to improve our experience when evolving a microservice system, towards a more robust and maintainable direction! Bonus: you&#8217;ll learn about an open-source tool to facilitate this process, of which I&#8217;m a maintainer, and you could be too!</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + João Francisco Lino Daniel + + 1 + 1 + + + 15:20 + 00:15 + What’s New in Notifications + https://www.sfscon.it/talks/whats-new-in-notifications/ + + <p>Over the past 6 months I&#8217;ve been working on improving notifications for the GNU/Linux desktop. This includes a new version of the xdg-desktop-portal notification spec, improved notification UI in GNOME Shell, and various backend components (e.g. GLib and portals).</p> +<p>In this talk I&#8217;ll explain why it was so difficult, how we untangled it, and what&#8217;s in store for the future.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Julian Sparber + + 1 + 1 + + + 15:40 + 00:15 + Sync Your Tunes, Sync Your Screen: Introducing SyncWall + https://www.sfscon.it/talks/sync-your-tunes-sync-your-screen-introducing-syncwall/ + + <p>Ever wished your computer could visually represent your playlist? SyncWall lets you turn every song into a unique visual experience, by dynamically matching your desktop wallpaper to the music currently playing on Spotify!</p> +<p>We&#8217;ll demonstrate SyncWall in action, showcasing its capabilities, and then we&#8217;ll dive deeper into the code and the process of creating the images.</p> +<p>SyncWall relies on two core components: Spotify&#8217;s API, which provides with all the necessary song information, and Python&#8217;s PIL library, which allows to easily manipulate images. Throughout the presentation, we will explore the key concepts and most useful functions of these two technologies, providing you with practical tools to integrate into your own projects.</p> +<p>Even if Syncwall is designed for GNOME, we will dive deep on how to make it work also in different desktop environments. This will cover all the steps and the challenges involved.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Giovanni Enrico Loni + + 1 + 1 + + + 16:00 + 00:15 + Nurturing OpenJDK distribution: Eclipse Temurin Success History and plan + https://www.sfscon.it/talks/nurturing-openjdk-distribution-eclipse-temurin-success-history-and-plan/ + + <p>Join me as we explore the pillars that make Eclipse Temurin one of the most widely adopted, enterprise-ready OpenJDK Runtime (over 20M monthly downloads) and also delve into the future of Adoptium and explore the goals set for 2024.<br /> +As we navigate the landscape of open source Java runtimes, Adoptium is committed to fostering vibrant, healthy projects that thrive with the support of robust communities. In this talk, we will also shine a spotlight on our dedication to delivering top-notch quality and outstanding performance, with a special focus on our AQAvit project and Security Effort.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Carmen Delgado + Ivar Grimstad + + 1 + 1 + + + 16:20 + 00:15 + Designing open source tools for Citizen Coders + https://www.sfscon.it/talks/designing-open-source-tools-for-citizen-coders/ + + Empower non-professional developers to drive innovation! + Empower non-professional developers to drive innovation! + <p>In a world where proprietary no-code platforms with vendor lock-in and opacity dominate, there is a crucial need to enhance the developer experience of open source applications, libraries, and tools.</p> +<p>We will explore how we can make open source software more accessible to citizen developers and non-professional programmers who face significant barriers to entry with modern open source tools. Showing the importance of collaborating with these developers, who are often closer to real-world problems, to improve the quality and usability of open source software.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Luca Rainone + + 1 + 1 + + + 16:40 + 00:15 + Free your Games + https://www.sfscon.it/talks/free-your-games/ + + A Minetest story + A Minetest story + <p>Videogames are part of our daily life. They allow us to unplug, to relax, to compete, simulating a reality that puts us at the centre of a new digital world. However, if we go deeper into the way videogames are made, we&#8217;ll learn that their market can be brutal and the ethics of their business models highly debatable &#8211; if not plain unbearable. Nowadays, playing a videogame usually means renouncing to our privacy and shaking hands with realities that we might not tolerate if we knew what they conceal. It was during the pandemic that a Minetest server called AES was born. Made by volunteers, AES decided to go against that: to build an online space where to play without strings attached. A place where everyone can have fun and nothing is proprietary. Four years later, this is its story.</p> + + Developers + Developers + Developers + https://www.sfscon.it/tracks/developers-track-2024/ + + Marco Amato + + 1 + 1 + + + 17:00 + 00:15 + How to set up an Open Source Program Office? Get insights and use cases from the OSPO Alliance + https://www.sfscon.it/talks/how-to-set-up-an-open-source-program-office-get-insights-and-use-cases-from-the-ospo-alliance/ + + <p>The Good Governance Initiative (GGI) developped by the OSPO Alliance proposes a methodological framework to assess open-source awareness, compliance and governance in any kind of organizations, helping them to structure and improve the use of FOSS towards an OSPO. This presentation will highlight the main progresses and new features achieved since last year&#8217;s introduction at SFScon, such as the translation of the GGI Good Governance in five languages, the recent OSPO testimonies presented in the OnRamp meeting series, and many more.</p> + + OW2 + OW2 + OW2 + https://www.sfscon.it/tracks/ow2-track-2024/ + + Valentina Del Prete + + 1 + 1 + + + 17:20 + 00:15 + Decentralized Search Over Decentralized Storage + https://www.sfscon.it/talks/decentralized-search-over-decentralized-storage/ + + Coupling an AI-powered search engine with a self-hosted personal cloud + Coupling an AI-powered search engine with a self-hosted personal cloud + <p>In this talk, we will explore an innovative decentralized search system developed in collaboration between the teams of On My Disk, a personal cloud storage solution, and PeARS, a self-hosted search engine. This system is designed to enable user-friendly, AI-powered, multilingual search capabilities directly over a decentralized storage environment, empowering individuals to manage and search their data across devices without relying on third-party servers. By combining cutting-edge AI with a robust, local-first approach, this solution allows users to maintain complete control over their data, ensuring secure, fast, and personalized search results in a user-controlled environment. Learn how this technology is setting a new standard for privacy and autonomy in data storage and retrieval.</p> + + OW2 + OW2 + OW2 + https://www.sfscon.it/tracks/ow2-track-2024/ + + Alexey Volkov + + 1 + 1 + + + 17:40 + 00:15 + Optimizing Cloud Compute Resources with Spare Cores + https://www.sfscon.it/talks/optimizing-cloud-compute-resources-with-spare-cores/ + + <p>Spare Cores is a vendor-independent, open-source, Python ecosystem that offers a comprehensive inventory and performance evaluation of compute resources across cloud server providers. We start all server types publicly (GHA) to run hardware inspection tools and benchmarks for different workloads. Our findings are published as open data and open-source tools to help you identify and optionally start the most cost-efficient instance type for your specific use cases (e.g. ML model training or CI/CD pipelines) in your cloud environment. Additionally, Spare Cores provides a seamless SaaS solution built on this open-source ecosystem, managing the entire lifecycle of containerized batch jobs without requiring direct vendor engagement.</p> + + OW2 + OW2 + OW2 + https://www.sfscon.it/tracks/ow2-track-2024/ + + Gergely Daroczi + + 1 + 1 + + + + + 13:00 + 00:30 + NOI Hackathon SFSCON Edition + + Side Event - Hackathon + Side Event - Hackathon + Side Event,Hackathon + 0 + 0 + + + + + 14:00 + 00:40 + Human and environmental Impacts of the actual “Artificial Intelligence” Industry, how to humanize? + + Side Event - Crane Hall BOF meetings + Side Event - Crane Hall BOF meetings + Side Event,Crane Hall BOF meetings + https://www.sfscon.it/tracks/crane-hall-bof-meetings-2024/ + + Roberto Innocenti + + 0 + 0 + + + + + + + 08:30 + 00:30 + Starting of the second day + + SFSCON + SFSCON + SFSCON + 0 + 0 + + + 13:00 + 00:30 + Closing of the SFSCON 2024 + + SFSCON + SFSCON + SFSCON + 0 + 0 + + + + + 08:30 + 00:30 + Welcome Coffee + + SFSCON + SFSCON + SFSCON + 0 + 0 + + + + + 09:20 + 01:00 + Let’s spark more Adas in our tech world! workshop + + Women* in tech + Women* in tech + <p>In this workshop we will dive into the possibilities of encouraging women*, especially girls, to thinker and to code. With tools such as the Free Software Foundation Europe’s (FSFE) illustrated book &#8220;Ada &amp; Zangemann &#8211; A Tale of Software, Skateboards, and Raspberry Ice Cream&#8221;everybody can create ways to spark the participation of women* and girls in tech.The book tells the story of Ada, a girl who loves to experiment with hardware and software. Ada realises how crucial it is to control technology and decides to stand up to the mighty inventor Zangemann.This workshop will also intend to explore ways to promote diversity and gender equity in the Free Software community and beyond. Together we will identify the challenges women* face in participating in such communities and discuss how we can create more inclusive environments, especially for the future generations.We encourage you to join us to share your experiences, ideas and perspectives, and collaborate in creating a more inclusive and diverse future in the Free Software community for all.</p> +<p><b>REGISTRATION NEEDED AT: </b><a href="https://pretix.eu/noi-digital/sfscon24/4260077/">https://pretix.eu/noi-digital/sfscon24/4260077/</a></p> +<p><em>*women, inter, trans and non-binary people.</em></p> +<p>Supported by: <strong><a href="https://fsfe.org/" target="_blank" rel="noopener">FSFE – Free Software Foundation Europe</a> </strong>&amp; <a href="https://shetechitaly.org/"><strong>SheTech</strong></a></p> + + Side Event - Women* in tech + Side Event - Women* in tech + Side Event,Women* in tech + https://www.sfscon.it/tracks/women-in-tech-track-2024/ + + Lina Ceballos + Ana Galan + + 0 + 0 + + + 10:40 + 00:55 + Knitting Our Internet workshop + + An interactive journey through the history of the Internet, and how to save it, together + An interactive journey through the history of the Internet, and how to save it, together + <p>“Knitting Our Internet” (KOI) is a workshop that explores the history of the Internet, and offers a perspective for a collective re-imagination of participatory, decentralized networks.</p> +<p>The workshop aims at questioning the very essence of today’s social media, exposing the critical limits posed by centralization, monopoly, and surveillance capitalism.</p> +<p>KOI was conceived in June 2023 by <a href="https://tommi.space">Tommaso Marmo</a>, who was looking for a simple yet critical and accurate way to introduce the concept of the Fediverse to non-experts.</p> +<p>The content and structure of the workshop matured over time, as it adapted to very diverse audiences of any ages and backgrounds. Furthermore, the experience is based on Tommaso’s academic research, mainly conducted for “<a href="https://tommi.space/csss/">Computer Sciences are Social Sciences</a>”, his bachelor’s thesis.</p> +<p><strong>Content</strong></p> +<p>During the activity, Tommaso will be using a yarn his grandmother gifted him to simulate centralized and decentralized networks, employing concrete metaphors to actively involve the participants. Every individual attending the workshop will be given a quote or an image relevant in the early and contemporary history of the Internet, and they will be asked to share it as the story unfolds.</p> +<p>Allowing them to understand the essential challenges society faces in relation to technological advancement, participants will be empowered to get involved in the Fediverse, especially understanding the importance of decentralization, Free Software, and the political role played by technical tools.</p> +<p><strong>Notes</strong></p> +<p>Given its malleable and open structure, the content of the workshop can be adapted, enriched, and edited to match the key topics of SFSCON 2024 in the best possible way.</p> +<p>The interactive parts of the workshop can be limited and a more theoretical presentation, diving in the thoughts of philosophers and computer sciences, could be added, too.</p> +<p>Supported by: <strong><a href="https://fsfe.org/" target="_blank" rel="noopener">FSFE – Free Software Foundation Europe</a></strong></p> + + Fediverse + Fediverse + Fediverse + https://www.sfscon.it/tracks/fediverse-track-2024/ + + Tommaso Marmo + + 0 + 0 + + + 11:40 + 00:15 + about:Fediverse + https://www.sfscon.it/talks/aboutfediverse/ + + An introduction to the decentralised social network + An introduction to the decentralised social network + <p>The Fediverse is a decentralised social network. But what does that mean?</p> +<p>In this talk I will give a short introduction to the Fediverse of 2024 and how it started to evolve in 2008. I will explain the basic concepts of ActivityPub as the protocol of the Fediverse and how the use of this open protocol has enabled a diverse group of Free Software projects to build a social network of (micro) blogging, video streaming, podcasting and event organising. A network where users can share and interact with each other regardless of the platform they use. What will be possible in the Fediverse of 2024? And how can you get started today?</p> +<p>This talk does not require any technical knowledge of the Fediverse. However, you should know what an email is.</p> + + Fediverse + Fediverse + Fediverse + https://www.sfscon.it/tracks/fediverse-track-2024/ + + Tobias Diekershoff + + 1 + 1 + + + 12:00 + 00:15 + How to build a website for the IndieWeb + https://www.sfscon.it/talks/how-to-build-a-website-for-the-indieweb/ + + <p>Have you ever heard of terms like POSSE, syndication, or webmention?<br /> +What about protocols like Web Sign-In or Micropub?<br /> +These terms are all connected to the IndieWeb, a community of websites built on open standards and open source technologies.</p> +<p>In today&#8217;s digital age, our online content and identities are more important than ever. Relying on random companies and social networks to manage them isn&#8217;t ideal. Instead, we should take control of our online presence by building our own website for the IndieWeb.</p> +<p>In this talk, you&#8217;ll learn how to:</p> +<p>1. Publish content on your website via a Micropub server.<br /> +2. Syndicate that content elsewhere (i.e., republish it on another website).<br /> +3. Gather comments from social networks and display them on your website.</p> +<p>We will achieve all of this using a static website and a few open-source tools.</p> + + Fediverse + Fediverse + Fediverse + https://www.sfscon.it/tracks/fediverse-track-2024/ + + Giacomo Debidda + + 1 + 1 + + + + + 09:20 + 00:15 + ARM Linux Laptops for Developers Status Report + https://www.sfscon.it/talks/arm-linux-laptops-for-developers-status-report/ + + <p>Intrigued by 22+ hours of battery life with comparable performance to current Intel / AMD systems? Starting from June this year a bunch of new ARM based laptops have been launched. All major laptop vendors launched devices, with over 33 to choose from at the time of this writing.</p> +<p>While ARM based laptops have been available for years, they mostly have been targeted as cheap entry level ChromeBooks or MacBooks designed for MacOS only. Luckily with this new wave of ARM based laptops there should be something for everybody.</p> +<p>The core question is how well they behave under Linux. Being designed for<br /> +Windows-on-ARM there is a risk Linux support is rudimentary at best. Stefan set out to test this and is reporting back here. Does a boot with UEFI work out of the box? Are all hardware features supported? Is the firmware for various drivers available? How is the performance?</p> +<p>And the most important question: how does it stack up against an Intel based laptop from the same timeframe as daily driver for software development?</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + Stefan Schmidt + + 1 + 1 + + + 09:40 + 00:35 + Building a no-drama community + https://www.sfscon.it/talks/building-a-no-drama-community/ + + <p>In this talk, we&#8217;ll focus on how the AlmaLinux project has chosen to foster a positive, drama-free community in the Linux ecosystem.</p> +<p>&#8212;</p> +<p>Whether you&#8217;re starting a new community or wrangling an existing one, it can be tempting to fall into the trap of bonding over shared enemies to see short-term, high-numbers growth. But, benny has spent the last 10 years building drama-free communities with a different kind of success.</p> +<p>While many open-source projects rally members through shared frustrations or negativity, AlmaLinux took the more challenging path of uniting people through thoughtful dialogue and focusing on helping each other. By prioritizing respect, collaboration, and inclusivity, the AlmaLinux community grew healthier and stronger without the need for battle cries or infusing drama. Learn how this approach not only built a stable and thriving community around AlmaLinux, but is also setting a new standard for open-source communities &#8211; and proving that progress doesn’t have to be divisive.</p> + + Community Building + Community Building + Community Building + https://www.sfscon.it/tracks/community-building-track-2024/ + + benny Vasquez + + 1 + 1 + + + 10:20 + 02:40 + Voices of Free Software: connect, learn, inspire! + + FSFE Italian Community Meeting + FSFE Italian Community Meeting + <p>You are invited to join the volunteers, supporters, and friends of the FSFE Italian Community!</p> +<p>Join us to learn from one another, find inspiration, and tackle future challenges together in the realm of Free Software. As a volunteer, you have a platform to share your story, discuss the most pressing topics surrounding Free Software, and connect with fellow enthusiasts. We encourage you to collaborate with the community on common initiatives and work together to forge new paths forward.</p> +<p>This is an <strong>hybrid event</strong>. You can join us either online or in person.</p> +<p><b>REGISTRATION NEEDED AT: </b><a href="https://pretix.eu/noi-digital/sfscon24/4259648/">https://pretix.eu/noi-digital/sfscon24/4259648/</a></p> +<p>Please note, the official language of the FSFE Italian Community is Italian, hence the event will be held in <strong>Italian</strong>.</p> +<p>Supported by: <strong><a href="https://fsfe.org/" target="_blank" rel="noopener">FSFE – Free Software Foundation Europe</a></strong></p> + + Side Event - FSFE - Italian community meeting + Side Event - FSFE - Italian community meeting + Side Event,FSFE,Italian community meeting + https://www.sfscon.it/tracks/fsfe-italian-community-meeting-2024/ + + Marta Andreoli + + 0 + 0 + + + + + 09:30 + 02:30 + Scratch Stories with Ada & Zangemann + + Side Event - MiniNOI x SFSCON + Side Event - MiniNOI x SFSCON + Side Event,MiniNOI x SFSCON + 0 + 0 + + + + + 16:30 + 00:30 + Winner proclamation and closing of the NOI Hackathon SFSCON Edition + + Side Event - Hackathon + Side Event - Hackathon + Side Event,Hackathon + 0 + 0 + + + + diff --git a/src/tests/assets/sfscon2024sponsors.yaml b/src/tests/assets/sfscon2024sponsors.yaml new file mode 100644 index 0000000..2c5c822 --- /dev/null +++ b/src/tests/assets/sfscon2024sponsors.yaml @@ -0,0 +1,224 @@ +- id: 44701ce9-af97-4819-8852-30e12fb96066 + name: Gruppo Fos + acronym: gruppo-fos + sponsor_type: main + logo_url: https://m.opencon.dev/static/GRUPPOFOS_BN.png + url: https://www.gruppofos.it/ + width: 282px + height: 102px +- id: 4dad81f6-e1e2-478e-9406-80b5987204dc + acronym: telmekom + name: Telmekom + sponsor_type: main + logo_url: https://m.opencon.dev/static/TELMEKOM_BN.png + url: http://www.telmekom.net/ + width: 284px + height: 86px +- id: bc6fa32c-8560-4dd0-8f42-42706e33e49b + acronym: symphonieprime + name: Symphonie prime + sponsor_type: normal + logo_url: https://m.opencon.dev/static/SYMPHONIE_BN.png + url: https://symphonieprime.com/ + width: 180px + height: 53.43px +- id: 5f1e9ccc-cf71-441e-81e0-c40dc34a677e + acronym: vates + name: Vates + sponsor_type: normal + logo_url: https://m.opencon.dev/static/VATES_BN.png + url: https://vates.fr/ + width: 180px + height: 53.43px +- id: 127d0b97-87fd-454e-822e-77fb7367ce28 + name: Allotropia + acronym: allotropia + logo_url: https://m.opencon.dev/static/ALLOTROPIA_BN.png + url: https://www.allotropia.de/ + sponsor_type: normal + width: 180px + height: 71.16px +- id: e68950c1-eda9-48c8-8fc4-5ef987228ce2 + acronym: madeinchima + name: Made In Chima + logo_url: https://m.opencon.dev/static/MADEINCIMA_BN.png + url: https://www.madeincima.it/ + sponsor_type: normal + width: 128px + height: 70px +- id: 1dc0bdd1-9c10-4508-9343-553f000769fa + acronym: zirkon-zahn + name: Zirkonzahn + logo_url: https://m.opencon.dev/static/ZIRKONZAHN_BN.png + url: https://zirkonzahn.com/ + sponsor_type: normal + width: 128px + height: 70px +- id: 184da88c-f090-4cf9-958c-22b84c0fe8d4 + acronym: '1006' + name: 1006 Org + logo_url: https://m.opencon.dev/static/1006org_logo.png + url: https://www.1006.org/ + sponsor_type: normal + width: 101px + height: 20px +- id: 101c39b0-24ab-474b-a747-459a6a61660d + acronym: catchsolve + name: Catchsolve + logo_url: https://m.opencon.dev/static/CATCHSOLVE_BN.png + url: https://www.catch-solve.tech/ + sponsor_type: normal + width: 128px + height: 32px +- id: d73fd57b-980e-425d-96df-857e245556a2 + acronym: christian-gapp + name: Christian Gapp + logo_url: https://m.opencon.dev/static/CHRISTIAN_GAPP_BN.png + url: https://gappc.net/ + sponsor_type: normal + width: 90px + height: 22.28px +- id: efaf9b4d-f856-4957-9f65-42307bfe7f61 + acronym: ecosteer + name: Ecosteer + logo_url: https://m.opencon.dev/static/ECOSTEER_BN.png + url: https://www.ecosteer.com/ + sponsor_type: normal + width: 90px + height: 22.28px +- id: f542abc0-c94b-4459-82ed-9acf814fefae + acronym: endian + name: Endian + logo_url: https://m.opencon.dev/static/ENDIAN_BN.png + url: https://www.endian.com/ + sponsor_type: normal + width: 90px + height: 22.28px +- id: e9c0d83a-26f5-4ed0-8162-09ab28c2ddda + acronym: peer + name: Peer + logo_url: https://m.opencon.dev/static/Peer_BN.png + url: https://www.peer.biz/de/ + sponsor_type: normal + width: 80px + height: 30.66px +- id: 2244636e-19ad-4edd-b537-da40368a904e + acronym: qbus + name: Qbus + logo_url: https://m.opencon.dev/static/QBUS_BN.png + url: https://www.qbus.it/ + sponsor_type: normal + width: 40px + height: 50.91px +- id: bb73d7b7-3fac-4be6-9bfe-1eea8c0d7856 + acronym: rmbtec + name: Rmbtec + logo_url: https://m.opencon.dev/static/RMB_BN.png + url: https://rmbtec.com/ + sponsor_type: normal + width: 40px + height: 50.91px +- id: d557c64e-33f4-4641-abd2-83ad89524efa + acronym: studiohug + name: Studio Hug + logo_url: https://m.opencon.dev/static/STUDIOHUG_BN.png + url: https://www.studiohug.com/de + sponsor_type: normal + width: 40px + height: 50.91px +- id: 2a944b57-e9e8-456a-9409-ebc215e49245 + acronym: edih-noi + name: EDIH NOI + logo_url: https://m.opencon.dev/static/EDIH_NOI_BN.png + url: https://noi.bz.it/en/about-us/noi-techpark-s-players/dih-edih + sponsor_type: normal + width: 70px + height: 38px +- id: f6e8cf35-60aa-4fc7-aed2-1af091147d3a + acronym: fsfe + name: Fsfe + logo_url: https://m.opencon.dev/static/FSFE_BN.png + url: https://fsfe.org/ + sponsor_type: normal + width: 70px + height: 38px +- id: 05646adf-f9a0-47d8-8030-5a682ca8708b + acronym: linux-magazine + name: Linux + logo_url: https://m.opencon.dev/static/LinuxMagazine_BN.png + url: https://www.linux-magazine.com/ + sponsor_type: normal + width: 60px + height: 27px +- id: 2de671e5-ceaa-4306-a685-24921c3a14f5 + acronym: lugbz + name: Lugbz + logo_url: https://m.opencon.dev/static/LUGBZ_BN.png + url: https://www.lugbz.org/ + sponsor_type: normal + width: 36px + height: 42px +- id: 97c0d563-b9de-4152-a47a-a01085b153c2 + acronym: mini-noi + name: Mini NOI + logo_url: https://m.opencon.dev/static/MNOI_BN.png + url: https://noi.bz.it/en/for-the-public/mini-noi + sponsor_type: normal + width: 60px + height: 27px +- id: db571055-f3a6-4386-8f6c-b224353ee621 + acronym: opensource-job-hub + name: OpenSource Job Hub + logo_url: https://m.opencon.dev/static/OpenSource-JobHub_BN.png + url: https://opensourcejobhub.com/ + sponsor_type: normal + width: 60px + height: 27px +- id: 691dff4f-8b91-4993-acd3-2e73352348c2 + acronym: ow2 + name: Ow2 + logo_url: https://m.opencon.dev/static/OW2_BN.png + url: https://www.ow2.org/ + sponsor_type: normal + width: 50px + height: 13px +- id: ec28824e-349d-42f2-9eef-c29b670ee831 + acronym: shetech + name: SHETECH + logo_url: https://m.opencon.dev/static/SHETECH_BN.png + url: https://shetechitaly.org/ + sponsor_type: normal + width: 60px + height: 27px +- id: 329152e4-bffd-4f9e-b6ca-edc0d11bc7dc + acronym: speckand.tech + name: Speck & Tech + logo_url: https://m.opencon.dev/static/SpeckTech_BN.png + url: https://speckand.tech/ + sponsor_type: normal + width: 36px + height: 46px +- id: de0cd141-12a3-4e8d-90e5-b04f222f5582 + acronym: stickermule + name: Sticker Mule + logo_url: https://m.opencon.dev/static/Stickermule_BN.png + url: https://www.stickermule.com/it/uses/laptop-stickers?utm_source=sponsorship&utm_medium=referral&utm_campaign=SFSCon21 + sponsor_type: normal + width: 64px + height: 39px +- id: 0508427b-41c9-43fb-b209-b3673761ea6f + acronym: unibz + name: Unibz + logo_url: https://m.opencon.dev/static/UNIBZ_BN.png + url: https://www.unibz.it/ + sponsor_type: normal + width: 46px + height: 36px +- id: 2dee2644-8373-4dc2-a397-73ac14c0dbc0 + acronym: wud + name: Wud + logo_url: https://m.opencon.dev/static/WUD_BN.png + url: https://wud-bz.it/ + sponsor_type: normal + width: 46px + height: 36px \ No newline at end of file diff --git a/src/tests/base_test_classes.py b/src/tests/base_test_classes.py new file mode 100644 index 0000000..ce5699d --- /dev/null +++ b/src/tests/base_test_classes.py @@ -0,0 +1,106 @@ +# SPDX-License-Identifier: GPL-3.0-or-later +# SPDX-FileCopyrightText: 2023 Digital CUBE + +import importlib +import logging +import os +from abc import ABC, abstractmethod + +import dotenv +import psycopg2 +import pytest +from tortoise import Tortoise + +from app import get_app, shutdown_event, startup_event + +logging.disable(logging.CRITICAL) +dotenv.load_dotenv() +os.environ["TEST_MODE"] = "true" + + +class BaseAPITest(ABC): + app = None + + def import_modules(self, svcs): + for svc in svcs: + importlib.reload(importlib.import_module(svc)) + + self.app = get_app() + + @abstractmethod + async def setup(self): + ... + + @pytest.fixture(autouse=True, scope="function") + async def setup_fixture(self): + await startup_event() + try: + await self.setup() + except Exception as e: + raise + try: + yield + except Exception as e: + raise + + await shutdown_event() + + +class BaseTest: + + @pytest.fixture(autouse=True) + async def automatic_fixture(self): + await self.async_setup() + yield + await self.async_teardown() + + @staticmethod + async def helper_drop(test_db): + + terminate_sessions_sql = f""" + SELECT pg_terminate_backend(pg_stat_activity.pid) + FROM pg_stat_activity + WHERE pg_stat_activity.datname = '{test_db}' + AND pid <> pg_backend_pid(); + """ + + conn = psycopg2.connect(user=os.getenv('DB_USERNAME'), password=os.getenv('DB_PASSWORD'), database='template1', host='localhost') + conn.autocommit = True + + cur = conn.cursor() + cur.execute(terminate_sessions_sql) + + try: + cur.execute(f"DROP DATABASE IF EXISTS {test_db}") + cur.execute(f"CREATE DATABASE {test_db}") + cur.close() + conn.close() + except Exception as e: + raise + + @staticmethod + async def async_setup(): + test_pfx = 'test_' + test_db_name = f"{test_pfx}{os.getenv('DB_NAME')}" + try: + await BaseTest.helper_drop(test_db_name) + except Exception as e: + pass + try: + await Tortoise.init( + db_url=f"postgres://{os.getenv('DB_USERNAME')}:{os.getenv('DB_PASSWORD')}@{os.getenv('DB_HOST')}:{os.getenv('DB_PORT')}/{test_db_name}", + modules={"models": ["conferences.models"]}, + use_tz=True, + timezone='CET', + ) + except Exception as e: + raise + + try: + await Tortoise.generate_schemas() + except Exception as e: + raise + + @staticmethod + async def async_teardown(): + await Tortoise.close_connections() diff --git a/src/tests/pytest.ini b/src/tests/pytest.ini new file mode 100644 index 0000000..d280de0 --- /dev/null +++ b/src/tests/pytest.ini @@ -0,0 +1,2 @@ +[pytest] +asyncio_mode = auto \ No newline at end of file diff --git a/src/tests/test_api_2024.py b/src/tests/test_api_2024.py new file mode 100644 index 0000000..5bb047e --- /dev/null +++ b/src/tests/test_api_2024.py @@ -0,0 +1,652 @@ +# SPDX-License-Identifier: GPL-3.0-or-later +# SPDX-FileCopyrightText: 2023 Digital CUBE + +import datetime +import json +import logging +import os +import unittest +import unittest.mock + +import dotenv +from base_test_classes import BaseAPITest +from httpx import AsyncClient + +os.environ["TEST_MODE"] = "true" + +dotenv.load_dotenv() + +logging.disable(logging.CRITICAL) + +from unittest.mock import patch + +import fakeredis + +from shared.redis_client import RedisClientHandler + + +def get_local_xml_content(): + try: + with open(f'{os.path.dirname(os.path.realpath(__file__))}/assets/sfscon2024.xml', 'r') as f: + return f.read() + except Exception as e: + raise + + +class TestAPIBasic(BaseAPITest): + + async def setup(self): + self.import_modules(['src.conferences.api']) + + async def test_get_conference_as_non_authorized_user_expect_401(self): + async with AsyncClient(app=self.app, base_url="http://test") as ac: + response = await ac.get("/api/conference") + assert response.status_code == 401 + + async def test_authorize_user_and_get_conference_expect_404(self): + async with AsyncClient(app=self.app, base_url="http://test") as ac: + response = await ac.post("/api/authorize") + assert response.status_code == 200 + token = response.json()['token'] + + response = await ac.get("/api/conference", headers={"Authorization": f"Bearer {token}"}) + assert response.status_code == 404 + + async def test_import_xml(self): + async with AsyncClient(app=self.app, base_url="http://test") as ac: + response = await ac.post("/api/import-xml") # , json={'use_local_xml': False}) + assert response.status_code == 200 + + async def test_import_xml_mockuped_result(self): + async with AsyncClient(app=self.app, base_url="http://test") as ac: + response = await ac.post("/api/import-xml", json={'use_local_xml': True}) + assert response.status_code == 200 + + async def test_add_conference_authorize_user_and_get_conference_expect_200(self): + async with AsyncClient(app=self.app, base_url="http://test") as ac: + response = await ac.post("/api/import-xml", json={'use_local_xml': True}) + assert response.status_code == 200 + + response = await ac.post("/api/authorize") + assert response.status_code == 200 + token = response.json()['token'] + + response = await ac.get("/api/conference", headers={"Authorization": f"Bearer {token}"}) + assert response.status_code == 200 + + +class Test2024(BaseAPITest): + + async def setup(self): + self.import_modules(['src.conferences.api']) + + async with AsyncClient(app=self.app, base_url="http://test") as ac: + response = await ac.post("/api/import-xml", json={'use_local_xml': True}) + assert response.status_code == 200 + + response = await ac.post("/api/authorize") + assert response.status_code == 200 + self.token = response.json()['token'] + + response = await ac.post("/api/authorize") + assert response.status_code == 200 + self.token2 = response.json()['token'] + + response = await ac.post("/api/authorize") + assert response.status_code == 200 + self.token3 = response.json()['token'] + + async with AsyncClient(app=self.app, base_url="http://test") as ac: + response = await ac.get("/api/conference", headers={"Authorization": f"Bearer {self.token}"}) + assert response.status_code == 200 + self.last_updated = response.json()['last_updated'] + + self.sessions = response.json()['conference']['db']['sessions'] + + async def test_get_conference(self): + async with AsyncClient(app=self.app, base_url="http://test") as ac: + response = await ac.get("/api/conference", headers={"Authorization": f"Bearer {self.token}"}) + assert response.status_code == 200 + + r = response.json() + assert 'conference' in r + assert 'acronym' in r['conference'] + assert r['conference']['acronym'] == 'sfscon-2024' + + async def test_get_conference_with_last_updated_time(self): + + async with AsyncClient(app=self.app, base_url="http://test") as ac: + response = await ac.get("/api/conference", headers={"Authorization": f"Bearer {self.token}"}) + assert response.status_code == 200 + + r = response.json() + assert 'conference' in r and r['conference'] + + last_updated = r['last_updated'] + + async with AsyncClient(app=self.app, base_url="http://test") as ac: + response = await ac.get(f"/api/conference?last_updated={last_updated}", + headers={"Authorization": f"Bearer {self.token}"}) + assert response.status_code == 200 + + r = response.json() + + assert 'conference' in r and not r['conference'] + + async def test_bookmarks(self): + async with AsyncClient(app=self.app, base_url="http://test") as ac: + response = await ac.get(f"/api/conference?last_updated={self.last_updated}", + headers={"Authorization": f"Bearer {self.token}"}) + assert response.status_code == 200 + + res = response.json() + + assert 'bookmarks' in res + assert res['bookmarks'] == [] + + id_1st_session = list(self.sessions.keys())[0] + response = await ac.post(f"/api/sessions/{id_1st_session}/bookmarks/toggle", + headers={"Authorization": f"Bearer {self.token}"}) + assert response.status_code == 200 + assert response.json() == {'bookmarked': True} + + response = await ac.get(f"/api/conference?last_updated={self.last_updated}", + headers={"Authorization": f"Bearer {self.token}"}) + assert response.status_code == 200 + + res = response.json() + + assert 'bookmarks' in res + assert res['bookmarks'] == [id_1st_session] + + response = await ac.post(f"/api/sessions/{id_1st_session}/bookmarks/toggle", + headers={"Authorization": f"Bearer {self.token}"}) + assert response.status_code == 200 + + assert response.json() == {'bookmarked': False} + response = await ac.get(f"/api/conference?last_updated={self.last_updated}", + headers={"Authorization": f"Bearer {self.token}"}) + assert response.status_code == 200 + + res = response.json() + + assert 'bookmarks' in res + assert res['bookmarks'] == [] + + async def test_rating(self): + # ... + async with AsyncClient(app=self.app, base_url="http://test") as ac: + response = await ac.get(f"/api/conference?last_updated={self.last_updated}", + headers={"Authorization": f"Bearer {self.token}"}) + assert response.status_code == 200 + + res = response.json() + + assert 'ratings' in res + assert res['ratings'] == {'my_rate_by_session': {}, 'rates_by_session': {}} + + id_1st_session = list(self.sessions.keys())[0] + + with unittest.mock.patch('conferences.controller.conference.now') as mocked_datetime: + mocked_datetime.return_value = datetime.datetime(2024, 11, 1, 11, 0) + + response = await ac.post(f"/api/sessions/{id_1st_session}/rate", json={'rating': 5}, + headers={"Authorization": f"Bearer {self.token}"}) + + assert response.status_code == 406 + assert 'detail' in response.json() and 'code' in response.json()['detail'] + assert response.json()['detail']['code'] == 'SESSION_IS_NOT_RATEABLE' + + id_1st_session = None + for s in self.sessions: + session = self.sessions[s] + if session['title'] == 'Let’s all get over the CRA!': + id_1st_session = s + break + + assert id_1st_session + + with unittest.mock.patch('conferences.controller.conference.now') as mocked_datetime: + mocked_datetime.return_value = datetime.datetime(2024, 11, 1, 11, 0) + response = await ac.post(f"/api/sessions/{id_1st_session}/rate", json={'rating': 5}, headers={"Authorization": f"Bearer {self.token}"}) + + assert response.status_code == 406 + assert 'detail' in response.json() and 'code' in response.json()['detail'] + assert response.json()['detail']['code'] == 'CAN_NOT_RATE_SESSION_IN_FUTURE' + + with unittest.mock.patch('conferences.controller.conference.now') as mocked_datetime: + mocked_datetime.return_value = datetime.datetime(2024, 11, 8, 11, 0) + response = await ac.post(f"/api/sessions/{id_1st_session}/rate", json={'rating': 5}, + headers={"Authorization": f"Bearer {self.token}"}) + assert response.status_code == 406 + assert response.json()['detail']['code'] == 'CAN_NOT_RATE_SESSION_IN_FUTURE' + + with unittest.mock.patch('conferences.controller.conference.now') as mocked_datetime: + mocked_datetime.return_value = datetime.datetime(2024, 11, 8, 11, 1) + response = await ac.post(f"/api/sessions/{id_1st_session}/rate", json={'rating': 5}, + headers={"Authorization": f"Bearer {self.token}"}) + + assert response.status_code == 200 + + + assert response.json() == {'avg_rate': 5, 'total_rates': 1} + + # ako isti korisnik glasa ponovo desice se samo da se azurira ocena + + with unittest.mock.patch('conferences.controller.conference.now') as mocked_datetime: + mocked_datetime.return_value = datetime.datetime(2024, 11, 8, 11, 1) + response = await ac.post(f"/api/sessions/{id_1st_session}/rate", json={'rating': 2}, + headers={"Authorization": f"Bearer {self.token}"}) + + assert response.status_code == 200 + assert response.json() == {'avg_rate': 2, 'total_rates': 1} + + # ocenu takodje mozemo proveriti uzimanjem konferencije + + response = await ac.get(f"/api/conference?last_updated={self.last_updated}", + headers={"Authorization": f"Bearer {self.token}"}) + assert response.status_code == 200 + + res = response.json() + + assert 'ratings' in res + assert res['ratings'] == {'rates_by_session': {id_1st_session: [2.0, 1]}, + 'my_rate_by_session': {id_1st_session: 2}} + + # uvecemo drugog korisnika da glasa + + with unittest.mock.patch('conferences.controller.conference.now') as mocked_datetime: + mocked_datetime.return_value = datetime.datetime(2024, 11, 8, 11, 1) + response = await ac.post(f"/api/sessions/{id_1st_session}/rate", json={'rating': 5}, + headers={"Authorization": f"Bearer {self.token2}"}) + + assert response.status_code == 200 + assert response.json() == {'avg_rate': (2 + 5) / 2, 'total_rates': 2} + + # glasace sada i treci korisnik + + with unittest.mock.patch('conferences.controller.conference.now') as mocked_datetime: + mocked_datetime.return_value = datetime.datetime(2024, 11, 8, 11, 1) + response = await ac.post(f"/api/sessions/{id_1st_session}/rate", json={'rating': 5}, + headers={"Authorization": f"Bearer {self.token3}"}) + + assert response.status_code == 200 + assert response.json() == {'avg_rate': (2 + 5 + 5) / 3, 'total_rates': 3} + + # ocenu takodje mozemo proveriti uzimanjem konferencije + + response = await ac.get(f"/api/conference?last_updated={self.last_updated}", + headers={"Authorization": f"Bearer {self.token}"}) + assert response.status_code == 200 + + res = response.json() + + assert 'ratings' in res + assert res['ratings'] == {'my_rate_by_session': {id_1st_session: 2}, + 'rates_by_session': {id_1st_session: [4.0, + 3]}} + + # dodacemo i glasanje za drugu sesiju + + id_2nd_session = list(self.sessions.keys())[1] + + with unittest.mock.patch('conferences.controller.conference.now') as mocked_datetime: + mocked_datetime.return_value = datetime.datetime(2024, 11, 8, 11, 1) + response = await ac.post(f"/api/sessions/{id_2nd_session}/rate", json={'rating': 1}, + headers={"Authorization": f"Bearer {self.token3}"}) + + assert response.status_code == 200 + assert response.json() == {'avg_rate': 1, 'total_rates': 1} + + response = await ac.get(f"/api/conference?last_updated={self.last_updated}", + headers={"Authorization": f"Bearer {self.token3}"}) + assert response.status_code == 200 + + res = response.json() + + assert 'ratings' in res + assert res['ratings']['rates_by_session'] == {id_1st_session: [4.0, 3], + id_2nd_session: [1.0, 1]} + + assert res['ratings']['my_rate_by_session'] == {id_1st_session: 5, id_2nd_session: 1} + + # ukoliko drugi user zahteva isto dobice iste rate ali my rate ce biti razlicit + + response = await ac.get(f"/api/conference?last_updated={self.last_updated}", + headers={"Authorization": f"Bearer {self.token}"}) + assert response.status_code == 200 + + res = response.json() + assert 'ratings' in res + assert res['ratings']['rates_by_session'] == {id_1st_session: [4.0, 3], + id_2nd_session: [1.0, 1]} + + assert res['ratings']['my_rate_by_session'] == {id_1st_session: 2} + + async def test_abstract(self): + + nr_abstracts = 0 + for id_session in self.sessions: + session = self.sessions[id_session] + assert 'abstract' in session + if session['abstract']: + nr_abstracts += 1 + + assert nr_abstracts > 0 + + async def test_title(self): + + for id_session in self.sessions: + session = self.sessions[id_session] + assert 'title' in session + assert session['title'] + + + async def do_test_push_notification(self, group_notifications_by_user: bool, expected_notifications: int): + async with AsyncClient(app=self.app, base_url="http://test") as ac: + response = await ac.post("/api/authorize") + assert response.status_code == 200 + token = response.json()['token'] + + response = await ac.post('/api/notification-token', + json={'push_notification_token': 'ExponentPushToken[xxxxxxxxxxxxxxxxxxxxx1]'}, + headers={"Authorization": f"Bearer {token}"}) + assert response.status_code == 200 + + response = await ac.post("/api/authorize") + assert response.status_code == 200 + token2 = response.json()['token'] + + response = await ac.post('/api/notification-token', + json={'push_notification_token': 'ExponentPushToken[xxxxxxxxxxxxxxxxxxxxx2]'}, + headers={"Authorization": f"Bearer {token2}"}) + assert response.status_code == 200 + + response = await ac.get("/api/me", headers={"Authorization": f"Bearer {token}"}) + assert response.status_code == 200 + + response = await ac.get("/api/me", headers={"Authorization": f"Bearer {token2}"}) + assert response.status_code == 200 + + id_cra_session = None + for s in self.sessions: + session = self.sessions[s] + if session['title'] == 'Let’s all get over the CRA!': + id_cra_session = s + break + + assert id_cra_session + + id_eti_session = None + for s in self.sessions: + session = self.sessions[s] + if session['title'] == 'On the ethical challenges raised by robots powered by Artificial Intelligence': + id_eti_session = s + break + + assert id_eti_session + + response = await ac.post(f"/api/sessions/{id_cra_session}/bookmarks/toggle", + headers={"Authorization": f"Bearer {token}"}) + assert response.status_code == 200 + assert response.json() == {'bookmarked': True} + + response = await ac.post(f"/api/sessions/{id_eti_session}/bookmarks/toggle", + headers={"Authorization": f"Bearer {token}"}) + assert response.status_code == 200 + assert response.json() == {'bookmarked': True} + + response = await ac.post(f"/api/sessions/{id_cra_session}/bookmarks/toggle", + headers={"Authorization": f"Bearer {token2}"}) + assert response.status_code == 200 + assert response.json() == {'bookmarked': True} + + response = await ac.post("/api/import-xml", json={'use_local_xml': True, + 'local_xml_fname': 'sfscon2024.1st_session_moved_for_5_minutes.xml', + 'group_notifications_by_user': group_notifications_by_user + }) + assert response.status_code == 200 + + redis_client = RedisClientHandler.get_redis_client() + all_messages = redis_client.get_all_messages('opencon_push_notification') + assert len(all_messages) == expected_notifications + ... + + @patch.object(RedisClientHandler, "get_redis_client", + return_value=RedisClientHandler(redis_instance=fakeredis.FakeStrictRedis())) + async def test_push_notification_ungrouped(self, *args, **kwargs): + await self.do_test_push_notification(group_notifications_by_user=False, expected_notifications=3) + + @patch.object(RedisClientHandler, "get_redis_client", + return_value=RedisClientHandler(redis_instance=fakeredis.FakeStrictRedis())) + async def test_push_notification_grouped(self, *args, **kwargs): + await self.do_test_push_notification(group_notifications_by_user=True, expected_notifications=2) + + +class TestUpdateXML(BaseAPITest): + async def setup(self): + + self.import_modules(['src.conferences.api']) + + async with AsyncClient(app=self.app, base_url="http://test") as ac: + response = await ac.post("/api/import-xml", json={'use_local_xml': True, 'local_xml_fname': 'sfscon2024.xml', + }) + assert response.status_code == 200 + + self.token = (await ac.post('/api/authorize')).json()['token'] + + response = await ac.post('/api/notification-token', + json={'push_notification_token': 'ExponentPushToken[xxxxxxxxxxxxxxxxxxxxx2]'}, + headers={"Authorization": f"Bearer {self.token}"}) + assert response.status_code == 200 + + + response = await ac.get('/api/conference', headers={'Authorization': f'Bearer {self.token}'}) + assert response.status_code == 200 + + self.sessions = response.json()['conference']['db']['sessions'] + + + @patch.object(RedisClientHandler, "get_redis_client", + return_value=RedisClientHandler(redis_instance=fakeredis.FakeStrictRedis())) + async def test_removing_session(self, *args, **kwargs): + + async with AsyncClient(app=self.app, base_url="http://test") as ac: + + for session in self.sessions: + if self.sessions[session]['unique_id'] == '2024day1event95': + id_session = self.sessions[session]['id'] + break + + assert id_session + + response = await ac.post(f"/api/sessions/{id_session}/bookmarks/toggle", + headers={"Authorization": f"Bearer {self.token}"}) + + assert response.status_code==200 + + + response = await ac.post("/api/import-xml", json={'use_local_xml': True, 'local_xml_fname': 'sfscon2024.session-removed.xml', + }) + assert response.status_code == 200 + + response = await ac.get('/api/conference', headers={'Authorization': f'Bearer {self.token}'}) + assert response.status_code == 200 + after_update_sessions = response.json()['conference']['db']['sessions'] + + assert len(after_update_sessions) == len(self.sessions) - 1 + + redis_client = RedisClientHandler.get_redis_client() + all_messages = redis_client.get_all_messages('opencon_push_notification') + + ... + assert len(all_messages) == 1 + + + # # return removed ecvent + # + # response = await ac.post("/api/import-xml", json={'use_local_xml': True, 'local_xml_fname': 'sfscon2024.xml', + # }) + # assert response.status_code == 200 + # + # response = await ac.get('/api/conference', headers={'Authorization': f'Bearer {self.token}'}) + # assert response.status_code == 200 + # after_update_sessions = response.json()['conference']['db']['sessions'] + # + # assert len(after_update_sessions) == len(self.sessions) + + +class TestJsonData(BaseAPITest): + async def setup(self): + + current_file_path = os.path.dirname(os.path.realpath(__file__)) + with open(current_file_path + '/assets/sfs2024.10.14.json', 'r') as f: + self.data = json.load(f) + assert self.data + + assert 'day' in self.data + self.sessions = [] + for day in self.data['day']: + assert 'room' in day + assert isinstance(day['room'], list) + for room in day['room']: + assert 'event' in room + assert isinstance(room['event'], list) or isinstance(room['event'], dict) + + if isinstance(room['event'], list): + for event in room['event']: + self.sessions.append(event) + else: + self.sessions.append(room['event']) + + async def test(self): + unique_ids = set() + + for session in self.sessions: + if '@unique_id' not in session: + continue + if session['@unique_id'] in unique_ids: + assert False, f'DUPLICATE: {session["title"]}' + + unique_ids.add(session['@unique_id']) + + +class TestAdmin(BaseAPITest): + + async def setup(self): + self.import_modules(['src.conferences.api']) + + async with AsyncClient(app=self.app, base_url="http://test") as ac: + response = await ac.post("/api/import-xml", json={'use_local_xml': True}) + assert response.status_code == 200 + + self.token1 = (await ac.post('/api/authorize')).json()['token'] + self.token2 = (await ac.post('/api/authorize')).json()['token'] + self.token3 = (await ac.post('/api/authorize')).json()['token'] + + + + response = await ac.get('/api/conference', headers={'Authorization': f'Bearer {self.token1}'}) + assert response.status_code == 200 + + self.sessions = response.json()['conference']['db']['sessions'] + + async def test_login_admin(self): + async with AsyncClient(app=self.app, base_url="http://test") as ac: + ... + response = await ac.post("/api/admin/login", json={"username": "admin", "password": "123"}) + assert response.status_code == 401 + + response = await ac.post("/api/admin/login", json={"username": "admin", "password": "admin"}) + assert response.status_code == 200 + + async def test_get_all_users_with_bookmarks(self): + async with AsyncClient(app=self.app, base_url="http://test") as ac: + + response = await ac.get("/api/admin/users") + assert response.status_code == 401 + + response = await ac.post("/api/admin/login", json={"username": "admin", "password": "admin"}) + assert response.status_code == 200 + + admin_token = response.json()['token'] + + response = await ac.get("/api/admin/users", headers={"Authorization": f"Bearer {self.token1}"}) + assert response.status_code == 401 + + response = await ac.get("/api/admin/users", headers={"Authorization": f"Bearer {admin_token}"}) + assert response.status_code == 200 + + res = response.json() + assert 'data' in res + + assert 3 == len(res['data']) + + for i in range(3): + assert res['data'][i]['bookmarks'] == 0 + + id_1st_session = None + for s in self.sessions: + session = self.sessions[s] + if session['title'] == 'Let’s all get over the CRA!': + id_1st_session = s + break + + assert id_1st_session + + response = await ac.post(f"/api/sessions/{id_1st_session}/bookmarks/toggle", + headers={"Authorization": f"Bearer {self.token1}"}) + + assert response.status_code == 200 + + + response = await ac.get("/api/admin/users", headers={"Authorization": f"Bearer {admin_token}"}) + assert response.status_code == 200 + + res = response.json() + assert 'data' in res + + assert 3 == len(res['data']) + + # for i in range(3): + # assert res['data'][i]['bookmarks'] == [] + + response = await ac.get("/api/admin/users?csv=true", headers={"Authorization": f"Bearer {admin_token}"}) + ... + + + + async def test_get_sessions_by_rate(self): + async with AsyncClient(app=self.app, base_url="http://test") as ac: + + response = await ac.post("/api/admin/login", json={"username": "admin", "password": "admin"}) + + assert response.status_code == 200 + admin_token = response.json()['token'] + + id_1st_session = None + for s in self.sessions: + session = self.sessions[s] + if session['title'] == 'Let’s all get over the CRA!': + id_1st_session = s + break + + assert id_1st_session + + with unittest.mock.patch('conferences.controller.conference.now') as mocked_datetime: + mocked_datetime.return_value = datetime.datetime(2024, 11, 1, 11, 0) + + response = await ac.post(f"/api/sessions/{id_1st_session}/rate", json={'rating': 5}, + headers={"Authorization": f"Bearer {self.token1}"}) + + assert response.status_code == 406 + assert response.json() == {'detail': {"code": "CAN_NOT_RATE_SESSION_IN_FUTURE", + "message": "Rating is only possible after the talk has started."}} + + + response = await ac.get('/api/admin/sessions', headers={'Authorization': f'Bearer {admin_token}'}) + assert response.status_code == 200 + + assert 'data' in response.json() + assert len(response.json()['data']) > 10 + diff --git a/src/workers/push_notifications.py b/src/workers/push_notifications.py new file mode 100644 index 0000000..98f3bdc --- /dev/null +++ b/src/workers/push_notifications.py @@ -0,0 +1,106 @@ +# SPDX-License-Identifier: GPL-3.0-or-later +# SPDX-FileCopyrightText: 2023 Digital CUBE + +import asyncio +import json +import logging +import os + +import dotenv +import httpx +import redis + +dotenv.load_dotenv() + + +def setup_logger(logger_name): + current_file_dir = os.path.dirname(os.path.abspath(__file__)) + + logger = logging.getLogger(logger_name) + logger.setLevel(logging.DEBUG) # Set the log level + + # Create handlers + f_handler = logging.FileHandler(f'var/log/opencon/{logger_name}.log') + f_handler.setLevel(logging.DEBUG) # Set the log level for the file handler + + c_handler = logging.StreamHandler() + c_handler.setLevel(logging.DEBUG) # Set the minimum log level for the console handler + + # Create formatters and add it to handlers + f_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s | %(message)s') + f_handler.setFormatter(f_format) + + c_format = logging.Formatter('%(message)s') + c_handler.setFormatter(c_format) + + # Add handlers to the logger + logger.addHandler(f_handler) + logger.addHandler(c_handler) + + # Now, you can write to the log using the custom logger + logger.debug('Logging Initialized') + + return logging.getLogger(logger_name) + + +async def send_notification(item): + log = logging.getLogger('push_notifications') + + if not item or 'id' not in item or not item['id']: + print("not item or 'id' not in item or not item['id']") + return + + try: + + payload = { + "to": item['id'], + "title": item['subject'], + "body": item['message'] + } + + async with httpx.AsyncClient() as client: + + print("SENDING", payload) + + res = await client.post('https://exp.host/--/api/v2/push/send', json=payload) + + print(res.json()) + + except Exception as e: + + print("ERROR",e) + + log.critical(f"Error sending push notification: {e}") + + +async def read_redis_queue(queue_name): + redis_host = os.getenv('REDIS_SERVER') + redis_client = redis.Redis(host=redis_host, port=6379, db=0) + + log = logging.getLogger('push_notifications') + log.info("Worker started") + + while True: + res = redis_client.blpop(queue_name.encode('utf-8'), 5) # *6 + if not res: + print('.') + continue + + #breakpoint() + + queue, item = res + + item = item.decode('utf-8') + item = json.loads(item) + + try: + await send_notification(item) + except Exception as e: + print("EXCEPTION", e) + continue + + +if __name__ == "__main__": + setup_logger('push_notifications') + queue_name = "opencon_push_notification" + asyncio.run(read_redis_queue(queue_name)) diff --git a/start.sh b/start.sh new file mode 100755 index 0000000..52c0ed2 --- /dev/null +++ b/start.sh @@ -0,0 +1,13 @@ +#!/usr/bin/bash + +service cron start + +sleep 1 + +#echo "*/5 * * * * /app/update-conf.py " # date >> /tmp/updates.log && curl --location --request POST 'http://localhost:8000/api/import-xml' --data '' >> /tmp/updates.log && echo "\n" >> /tmp/updates.log" > /tmp/cron +echo "*/5 * * * * /scripts/update-conf.py " >> /tmp/cron +crontab /tmp/cron + + +python main.py + diff --git a/static/1006.png b/static/1006.png new file mode 100644 index 0000000000000000000000000000000000000000..4f8895ca179eeba878d9318bcc944e34cb270c8f GIT binary patch literal 5166 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 VsN7a_s&@bY002ovPDHLkV1hK8f1m&W literal 0 HcmV?d00001 diff --git a/static/ALLOTROPIA_BN.png b/static/ALLOTROPIA_BN.png new file mode 100644 index 0000000000000000000000000000000000000000..f6ef2506cefe4e2bcaa14039d156c9a1485f1f3a GIT binary patch literal 3784 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 JPDHLkV1m$&qi6sC literal 0 HcmV?d00001 diff --git a/static/ENDIAN_BN.png b/static/ENDIAN_BN.png new file mode 100644 index 0000000000000000000000000000000000000000..07ff196bab3adcb926ae98378ad16421e95d6efc GIT binary patch literal 2617 zcmV-93dZ$`P)AGK~#7F?U@T~ zjB6UlUknC=K`|%>MKPgR(nC@A#t|xUTWdq&NE#$1R<+rr(sFbWhmqlZ<}f_uilP|NNheD(W+m)vH(A zjvP7i(}M>O66L*R%a(;%Sy`QQ`>0W)_CA09{7ZSRTD5ARZr!@=ckbL-qCNq!sLx2Q zUAtzvaN&aW{{8!*_h2w+HMU>9dbQ4@M~_0!HEY(i)~QqHlR4jKrRWbyUB7-^y?y&u)vH%e zb?w?U(7t{9Y?sTGH*nxUpV>q*e){z3j^@pq4=*YzO2W+5n>TMl$cm4TSA5SNI&|oP zXydhHW@g5}di83+ty{Nxv4?7bKtMqOs&nVgsz!|(C#qDbVvRNy4o_j6L!RMh)u&IN z&8!zNwA-MYiFfbb?Z*CWw{PE8uV24bcDr45=+NO6d(3Owwr&38$&<_F^e8i45jxv4XU-fq--3Ef75QiD)~&XK2M=bRIdf*_ojZ4| zD6P!oVvpD|-b#?hlkXK{!av+*cNwP?}8+r4}DzYH2QXw~@f zr!C)6Shcm;U0#i>Oor%G8xBSDYwhEsOd1?bdA*CQSI_ zo;`aOfR3o+1v$mV#W7ExKF#1V1u;Ju+vm-j_iav2PMTOjG%2r5#Hc_sW%A7$P01pn zI235-jDG-`)#;mQMCH_}QxkXW*zwP3K+x;bZuR+mliBavLx&EfVO2p38jrbo^JZAd zpdgr#kgzuCz>qfC^w*u%_ST=jY2g^VGCy(^5G| zDR2+{Mvff0DsqEDElEj9M|2++cs6_X>||*JiBt7=`Oz;Ya=ctda&q!z-3Rk5g$I*$ zd;k9ZGj$smR0_2$!D7l-2bQNe0EkDiM4{DAB(T%BMXFBUUt(xml7JK;I-6JJYP)srVr+Kna&+73i+K=>4n z&DHNb+i*5cc?KCy{ayG8XZl0r_%?0Y_(0Kj`dv_j1F`FOxOcdIu2!v@2Xw4P(Papb zWaOJhjT)){mVodq&Jg0%_r9RDZo|SI=*FqvNr(<$$pyyoj18ch4OpaK&k+|F*G--+ zqeqWUShsFnxHHboZ?*}P(^NlmF#$FaiXPyia37Q;N-Z)Q59N4_@1QsVz67?pk)-NAgj+u7 zAat8X&&w?u;PT1)pRW z9u?Gy;shk1F-SOR>d=knl>QO{nTdQCJ!sKBrOc$cxw-2T6B88|pt^PIrh518t=Lq! zT^!Zm!GkxfTD8ipDj>$ijUsWeMv92UztKeET?sP1cjbb{n92`$v<~yhi_Uzg7z}&fWzedrjvc$MCv)I%ql0<2Vc33lk zD$+?(TzWk$*9*;^fdWF5_Tgj^z+ZW1x#-uLZ3^(zQTj9j);p5Ztr36DG%ME2t{Ttr1-uS&lgBtjpY zUmUTKo}dZSezRuHiYL7eJLYmCiwcVc=aWNh>IF%m%#Ad73QnB zP|7nyY9HIF&MhIW51BV9yMxsKdqI>$Il{}N;9;v1Vb29CR;@^+M=-j@UGt4bF3;KK=xA^i;}HL?d;lRAu4_QFb*i>Kdde91Uf0U_Jm z-M4Sw^-{kPk@+~674SH*=2)YW$q@aNO_ye5WK`P!8iXdtA(im^J&{EUe3{NKQ4Xo& zTZs(?;cURe-z~-os8Rd05;|-700000NkvXXu0mjfsN@Ug literal 0 HcmV?d00001 diff --git a/static/FSFE_BN.png b/static/FSFE_BN.png new file mode 100644 index 0000000000000000000000000000000000000000..30d01e178e57d7fb7d9adc6a122acc3fe211c6d1 GIT binary patch literal 2668 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 literal 0 HcmV?d00001 diff --git a/static/GRUPPOFOS_BN.png b/static/GRUPPOFOS_BN.png new file mode 100644 index 0000000000000000000000000000000000000000..8aa91a1f11c60e8baa02fed6b2e9a141445ba20a GIT binary patch literal 14742 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 literal 0 HcmV?d00001 diff --git a/static/LUGBZ_BN.png b/static/LUGBZ_BN.png new file mode 100644 index 0000000000000000000000000000000000000000..2c3b99e93daaa8c377128582c83c2fab0a2eb646 GIT binary patch literal 2510 zcmV;<2{HDGP)1gavpOke~MtKguJbtR6WU0l$lnXG?!2~66_SZZ4qX$h4P zqt#Tjvni9YMg?Swf>Md#5L9kc5d@XHT;$#7JmDn|sN+)nB~PB`InO!g_dVa=?VQIz zOh7hl*kJzj=~J7>j~_c285vo=c=5t~%9JT40|Nt(`uqDUxVLzFdsiGgcC1B=Qw+!2 z@zkkPhPQ9u-VT7IhK7a%Jv}`E1_lNu8jYr#t3j*PwgF}qS0DhRtE;O&nm&Dcz=8z} z`l6$w?_IrmwSO#n3`XmakdQF-=+UDe0ALR+Tr)E>JJH$MY0=l$XTfJ*lw0wv1(X0_ z2W^djzBY5_%v!){=^M^iyBRZPq^?-8;>(J>C$*fy{)b7pBft*SGBgb z?qJ2!!~{gL2V-9W?#7cRPd+s^Ha=KYRrT?h0WDgzXfL#fVV?L$j~*SuB=%ww1g5Jk zEiLypH#aB2-Zyo1b#bEtTE2Yw0S2zeM4zyVuVBSOOs+gzvSi8cA3l5-2dInn_4V6d z3&_#YaYt8I*9RshCcE*M48Y8N-K@}`3-A=oDn=8XP8Wz{@5J{Mebc5*YePpA<~xLc zB@(^qF9C9Pc3zI3T%SLG{%=5ih)JyV->`puM@PqE+6+`}{`cJ zlfkCiWy_X*3{#)s8V)ya-fWVM8vOvG;1m2NnH=*=H5e)6l6MK)zv|yvVMSC_)I~84 zDJm-Z+Rn}{1_##-Hd&KcLr5jx!BmF6p909$)pae7>%o9x%oL@b2x`w>x^$_?#>VC& zqN75#VX7nKrvWieDJUp7F>BVWp@qpDHGB5#f1=wLwtR;GwY0SS0R|40m6h#-(xC}Z z+)J|CE1%DwKi|q~-lwe}22YC#3c>P67_O7g%p+iD7k+ev=bZ{5KR-V$ju`}?Qjq$n z2V=q$_({3`{qEhnSFNn9!fO#RLCMe0?;s!!>)*S(yS>q!gVP7CS+i!YAxeXKdwXrU z9s_8Tz9Ve(afK6Yt?CJJ!Yc6-g``_Tki^2ul)%|+8l9H0HsZ*y8F;A*l2N^#C$OEU>xRao6@nWj)05gq*f3kRkf^TN&pV9pm0aF8O zHX8iL5&)fan6K}EjT5nTvv`Ao&T#KiVJNN{j) za!N`{kF~Y6Dbe+79Q+G6H#g_Dwl*)y%HJrwQB3r67V{(^ARzJZ;lql*(ccRfcw0Ub zQQf47FZS=>zY)dGDomfRT)EOr|H6E3Sj$3Snlfrj$jB9t40T~)VTu{)W6h=Hpw+8a zZ=E-9-W8&4H&-Q-ZY4)$Qv=gfV|Q)dyjgehiN|Xdia`ah(7d~ z@jcAK!r~(RpR4rkg`95;sKQpzdxKhH&*aXmR4FI0=BMwBvRc|@G^}FMcHT=+*b4o2 z0JX<-U97H%F>+5W_-4(sHR(hKNdYXCFn18a;H00ENY2+kQ_m{P%gbwM^HR1G>=5%n z_c;?KuqszE2?FqPSU3+08>D^~Q;MG34<0<&g&re)KiuIKx-$U$EB5bRnn8paIB6Uo z_lrpq%$mjaVi(LhaxDc!DEqAUU@S%54|Wq^c_$1jTMz}1hlj_vtY{X_Dkya0+ULAZ zSn<4(ZLqYIDDB47{exigXtU)q3Jncab`Z)zv9z?bA39s0_fslvG@<$~jyhfZ1Yv;{ zfq{WZnzH8nLq<9?8p zM1Wi)CMYPmf-<+JrY3>k$c>(0Zu#loFtnVCABm~{48SXQ?%esy&_dLcu*u&|WVjNd ztI5nCvWi|YLBS_`$vXnpg#>l>>{*#>WCC1Ij@rRd=zYv;Oi~@@x5EHsWo0$ubejP3 zTXK*&Wnn!4$6aLcMI9?2APFk(lqQjynktAofw|nsUv{wPft!S!J9qBku(2a2V>NB| z_V(Wq6>%gnPng=y^K|lxix{KKnKS20lt;meG3F5zXt8$fT0t=uXU?240E{*DEQF+4 zH*)MNeT0rRNl8gQ(0hyA@I5RQVoqPu!>AF6uVj+|{YkWDl97!YH!9_WLMu4a3l|p` zX-+5h(g$8O{dln=BDhdk=WdO-a-~vl|02{{AsJ~;Ru%FRpW@bhJ<-N+31^6<#R}uH`s%Py=spC Y0XPx*f@QNg6aWAK07*qoM6N<$f}@GJH~;_u literal 0 HcmV?d00001 diff --git a/static/LinuxMagazine_BN.png b/static/LinuxMagazine_BN.png new file mode 100644 index 0000000000000000000000000000000000000000..643d10cf2c624a4870aea5a8b2a8abb07458fac2 GIT binary patch literal 1559 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 literal 0 HcmV?d00001 diff --git a/static/MNOI_BN.png b/static/MNOI_BN.png new file mode 100644 index 0000000000000000000000000000000000000000..f005fb80cde46f2d6fdb30c28c49dc309323c66d GIT binary patch literal 1663 zcmV-_27vjAP)X1^@s6ef3{pnyts5n8KAZ5yptjWumFRD)=t6>61Jn^vtRt!JZXBVM%% z7Et7{Kx0#F)d=Dd6}dz}EjP&ZIWr66e(Wy$ssHXT`7+ z*x1-2Dk>8H{d)z8hYrKZX&7D=3GwmB%g@E0J^SG7?2NeBSlqsS3!_Gl!sgB2@o~qG zAH&&{6y7&6F~PyaLn2$xpSR-Lwd<&=szO&+7X}U-2p=DBSXo(%#-$KD+qQm>WuGp` ziWMt0J0@sAX=$loZ#S4d!-qKv#l^*1^}~q%@#DurLqh|XB_$mZUI$K24s8C(lP6gJ zqYppeHq+A5__&0GcrK@p%lL6z*V57=WMyRvsi~<#dwaXcetv$wkZ~bHAf$2GvSmw| zjk!T{wECr!B>L>$y-TEzkB?I$i6S{US%{9_B-Gc}3$KHelw=_`HipcvV|`VU0h3o&Rto7VWNJc3M~86w^zTArV{y2LUv)`MA$&XZ1)v7O`4LV7hp-`Zs zy`3dEii;O>X!OCycZ%BB{QNu=6&0bWsfqQkUcHK#=#3zujNIHmv3hj~N=i#$Y+{VU zf*V-5;&YIQ;`8(Ja#^BoZEX?RU9jL|xVpNcwWSrYG0`A9ueNq|bqz+29Lf9p_wOSG zU>BY~eTuPT$09pB8_CIMxPJ6#XQF$CD`ca}%1UvU1j1{R6d3ppYsooggwxRYi4GOT|fUsKKee18WXM$kBA^TGYlGJ19S3G z6r?J0{r|N}l1)_R^uW{86N{HDVH*|oO(dR?C{RUHQ=_PFV{4;k!`FAJ%J?QwPFq`) zQEP2&4QC?#(XvLW$70<SX1 z!L`q|I=iDzrbWL#G72UnpHPBMoH!=ZnVOoh{L+K4u(iZ@@lP8h-MAMnT*TVi?wt+}o~LsTB{3ub*-7Z(>& zAUcsrNa!gTs%U7aM_O7c+z82zj!uvYjlbP!;+*E^$DN{BzWg&ZH8+zZq`Xhi<3z_8 z8TIF+d3t%l&fX4|mX_R>m6atMM~|Iq9^3xo4sur+jGJWVyM!(_$KAsN!$*wZ$H2|q z12O{{Cb)`onU9YzLPNuF>F-MzI@D35^YD3K literal 0 HcmV?d00001 diff --git a/static/OW2_BN.png b/static/OW2_BN.png new file mode 100644 index 0000000000000000000000000000000000000000..e1749b702d5802298e42504dbb4bc2d3d8576b56 GIT binary patch literal 1228 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 aEdB)r^C;pRB7Ic=0000=Y{tjUqqG_*u6 zE6yCbJ&iHdO3IzIxvZ30lxpKR&(nu~U;(vHjAd)EJ`NLz0RS54 zAVst)0HDhD^TO;o1$=is{YWVeDs*Tc+2MS*1a_ZXts{MsY*w#Z=YOc2qnYsUL$WjCbg(!bZ98Tt6dMa zB#}rYq&_X1(JTFky;&fdJ~=*(MziY%-!7qjZKBHt4^+e*f)<|j^;~sg7>c=1pDL0!X9Y89w8^SU_m60 zK3p?~@r@}k63MweJ}>lvev@S={@04&{AVFr)#d#ieUbrg6DgQY8fqsq)I<gitH$$}8MrEHN$3K9) z8`mJHoqeI-(Qkx%M-+_FDK?(_G&spspRyW5Ww3xc&3=N&vTcdL9Or}qZ7~Be*U}ae zmb1qdE~XS@HD!c|%G2vY86zV1H0mM3>kW&6ah2t_XSznBiI;O8PC3P~b*m)&WfnH@ z>4e_&y3m%$#~qz@yNNaF(9~=oyz!z?8v-Ssv7(((kp&;s5ruAoU@i$n5f%)@2_l5@_I75R-aB*hT?agH*uaDk|c~l7>dFdK! zbiV)jkJ10^{ZAN}XSpu)#oU&N?2HK(1M;|?!PD|AWus2Z;=hjg5!N8d5YHOffi)!w zMFry7={G{1*b~7$#Ve=~Yl!d!NA!A~OJv=b`tUxlhQ(xDc`(w`A{>v9$&+&=a(sNVcZAKst=jdL=rBlIqUH`KCoTSq*yOp$ zl<~_87!tDqb{BMI@TujBmd79SJB#(q(B?PhaXGmN`XN(c8hF2hESj>eR8YH6`2B-> zU_^6>t^2(;$RvId#0+RP73p%=9_=~l%)dsL57lmopz0L5ch^F-FJO&As|M;rxCy}{q>lEl5jFFwK-n7zhdnn`KS6R}c$&mMlbhA~x zk)cax3G(=mPYrjdC==h)^d`l!=_baJ0Mv#J{Zg?-WarBYtxl(49*7lv`T!n5hkch( z^2mFeW|{Mum8|XgrZH-*k6xj-C?T=KRaI47*sO`OdrUG10p%Mb@L;#MOKJ82#`~-9 zs}SQwJn5HS^3bys$5PalWNCo)Qk-%fClxOJiShgVHR{!HHtQb!vGW~!U{B%AQ+C#F g_#@?tU=esl1q$*MJqbJ3vG%$FemJ~WE%spM-^&8t9smFU literal 0 HcmV?d00001 diff --git a/static/RMB_BN.png b/static/RMB_BN.png new file mode 100644 index 0000000000000000000000000000000000000000..ec933a23692dd2c6c48774e8deb09ee7a70d1d03 GIT binary patch literal 1534 zcmV>z4{K7Iv=JKG zu|zc@NEoGrYEetKnRdFJ-<)&%?%a9refPched)BFU-FxG_wT)X&pG$pa|am2Abd0l zj~7lZ(5G9tL^xmgxo}}dyU8|o8lDz*ARFfkuga*KEo}GlR|qde9F_{d7S0oXC0yrM zUMAd7lFNisGJf=}oPJLsAMfV$Z4cT$iem3ft`)u_+{F#D9jakh;bX$PQ4FU+r7;b= z3y(u%F+_N!@FiE!95kS~&qVf1!s_-Do-I7U@^=a!M<8k*o`Z@dMfh;xVZwcdi&NSj zB^++)&!DO>R(J_&V+K_8v#=X<5!x(&v2cvAlNnz%o<%(N6#j1g)(ejg>V4HX!OCv) z%C5~A_W`fXMOHQmajJ0(YJ*xZ-RpCcD=dqDkr+Hm#qgZAL+v@kew;WjqwP8NTqFF# z(mSAj;G%Ve?^e}D_$st6r`-^H{v!Or(x(Ww58AZ|kFhjGd{NN9UTE{ufACK;%44MP zbW3k=1J(fBeIy(w+y|;MbG&+Pw{G=)>B+;-!nv0I%PXhuAL!+|XtWWOxXZ1KcI$m6 zVkd%nbfTpxMYIpcLRXMjApAaVs9s}yqovP4--(#yr9VU*+R@)`5VS|Pr<6M>UMaj@ z_zyF&6G1V32I;EQ1N9}=A`YJlR|tneCF(&d=h!D(dJ*!izmGhr$=m%tfjU*2emn+z z`PWj)e}(SH(-9APrQcYZQniPr_eY|;G?M?J8o1J(0e^x@0&x~pr6w>_#8}>IgF8Ga zJXH7w;&j=8ZD(3~CnPFI>2MPIHmc)csQ=+}oIUTi_ZT63f{lwz#Bai>UjAH^H@3e1 zUk&va+}VO>nK@_-sJ>LYN097ZT!@yU+b0i8otEaz-imVg5{c;3g1-axREckqeUPgs zR@jrfRN;yEU-*!hzX$4W7sV>!2N`uAqnN6d0o{COkLX}6DF)yXv zgc{?#XKlidu4Q<6Ae)ME;OdVOo{GfV<<|c<6J^dCbcA{kf9yRoWejd@JEkyg%e%C| zZxvJ&CwEgUEXRP7g;p=$gnoMx3B1qQkgx+gb9v|Ws9pw~JL z)!-(ccJ4c<53vM;7`SM`HjY-|n}|ETZq>K|s=rII8BsMbv(=zVU?v1Zbt6z5tw`P_ zjC=AZ?jm2@op@*(4fQt&N|HOWuSpr3V;*V0(d_kMtd&RbZZrS~Lru^QEpH3nXEfA}@6PDMc*J)Rp9OWtxj0gt9j`=KIa z4AB|Ou#V#~?$~7JRkHFCt4i?MlRUH0B~nYdxiigZL}4=-etWfq7iVBXsXZb8g1R( zigV8X%xOE{&uj@3;dTQ?$Z8$*7TUANo5lY>oX(Z?2%m4rY07*qoM6N<$f^ve_mjD0& literal 0 HcmV?d00001 diff --git a/static/SHETECH_BN.png b/static/SHETECH_BN.png new file mode 100644 index 0000000000000000000000000000000000000000..5304a3904fa8da1632b5a868826722075f55920f GIT binary patch literal 2019 zcmV<92ORi`P) znkb1#A|XKxQIZltBozXoyLNloEv38NwtFev_4|f1n{!Uj?%8lKCT73n?3^?6&&+?D z|DTx^qKG0K!Ns4mXV1Rx^?KjSWHQgWT&_eqot{ORcDvnksEeSSc>MVB-%CqNXi86` z&5!!ol9G~$$K#njeE9H^_>bT^b?Q_@eSQ5*ZEdYBF$540z^aKt-i1(c2)7iE$NySc zSqZWpPYA+?mzS6CoIH7QSv+I7hKGl{S65d@!GLIMYZI`903%rf)`KYlhD0nDli$#~ zY@;w!Q&R@oii!$ZCK3s;xVR`VwqZi_36+(V-GTM4;5j`sG~^c!;7z4c56KXjfu=+t z5D=I^GC`1m`T6-Zj8M?Z%F66Fn34S`EKy!wE+1G!T2A#xT?6_y;I$V@*@3c8IDmV@ zh7BQWj{r>Dozk#w{OEyI3fRxz&!EwX<7dQn|nEd}IQI_!j7 zxrGC`2L}hq{9S&~?5d<|%+1Y-nVA^@D+#~fzos)?jRK@i)>$(N6jD`HB?UEO)22<& z3nv2b2b#Ojvb3~RR+6c3I4ma)P6Q>R!C)}wAaPA_JE*mz2j=P$4j=`9|KDIqU!|E1 z1Ri?})16jrtU#1{ORTDEgaatFFmf;qGE?Uhq@=V&T9E4@7r0KM(Ws1S%AzP+g#%%A;q-S<96}>Rl zZdiCX-B7=dkc()}8|X*xm_>Q7sj2Bclywzz&KU$ibLIlIT~kw&WiA)U z5Ff6qTP+!=2zanzb=L#AK?=WC}A=?Pjn3JK3V65M>XOCq+ z716kkK(~TE2Mz5e`Wqm61&e9lv17+B2pjbG_uoRXOE|>X*jV0nx|WtZKB=p#^XuEp zb`5~&!$O!Rpp7fSA?P0a_wN@r^GG2Ot-dn187u&IxDLWeQ6MnzFLrw*f-b;C$~$nSo^*C%(lC*aiU(sY;B|A)aJqHST5A z2BBU2+lhVDqX{8_>y(RXK0L9;#>O7K0OP_03ZSkWG4Lh*WL;fd&ua`E0bMUNve(r8 zjMbQ!Sk?P5?+|Vvnp7LM+*F?AQVf=44Zrr#-RcaSpJ_-RBd-KtwM+eMf;?(s4`|-hNTfX_d+U4p5hy&)^ zGiW`4!^2hWM&UN4RWvjskCgnTl{gOmlG5*PKLd>q^?f+YX3rg*2X!hiu)bBb;o>*R zG4bkBm%iY^r*7=9F35w2bE3S3wt`QOMHKOW#Xm!zy_}U;%Ao)N002ovPDHLkV1mF& BtQ-IU literal 0 HcmV?d00001 diff --git a/static/STUDIOHUG_BN.png b/static/STUDIOHUG_BN.png new file mode 100644 index 0000000000000000000000000000000000000000..974b4d095b2b7abbc79d62603d4b89134ceb9060 GIT binary patch literal 1156 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 A-v9sr literal 0 HcmV?d00001 diff --git a/static/SpeckTech_BN.png b/static/SpeckTech_BN.png new file mode 100644 index 0000000000000000000000000000000000000000..c2940b60c851152ecb722148e0b09f9bbbe19ebc GIT binary patch literal 1857 zcmV-H2fp};P)R)ZE6+@KFD@nH)Fgl@@}_+W?+TWYD$lmz+^K_MGZwA4_=76c6{RT8Krij-C` zm_ma-R4UY>f<>u@+BTp8L7~cOwP;Y#P^n4{x96LC#+|+H-AY>`g?#XF=g!QTIdlHz z?k16qE6ieMs=O~Vo0yr*I%Wn%(a-E-9xy%3T4vA~|AaXy?ILDa*4<&2Gjl`+sF8Kr znaRv=wU8BuepxKuSdT2&8D}gkWAD4H8FIYWI^LBf@UkmbDw3ziP-sgQYBz+v%sFX) zDdQpO2UcWkn4%u=I21zrcWJkXoSLjB{33!HVd;;^d$B{Ih_r{~U|@jhGv*ahEJDWE z&&K*G=A<^}o-y%jnGiPmwv6_)$VDi=%lr;2xGAJrMR9;&8#N|fp`$Uh#=J*%u$v0? z%G|J6$7{%3N}$j*MJ=RU{eqmPl9|UGFa&)@dx@FE%#uwvrT@TqZVS`oxh`Y%B2y+~ zCYs64KEKR6qOoZSFCC2`C)&t8%c|&jS@xOn9!M4q@v^|2VSdM~FiyD7{E;~xN1^X! z{8y0$N0_V3pO}lx4d$$@F-Uf-CdvD-Jd@@52R+BX1Trn+LKHbabAs%Wpm{}PG5#^x z1#*j`nG}>ZYF@U?{Yv_7>0*S8DkZ!2z^^mX@0CsC0dsM66gc`l^1MZ{^~FokD(*Md z05YV{r1qHV{J3DD= zYKl5KI%r{GfwHr+skpe9Dk>_-@AtN+uPfTO-zA6fQE;MX>oCp(8n=AY;r0qE2GPoFVp?|_v!ZS z+iE4R*N$g5e}BK~-`7D5sGh9`y)z-P~%Rhw>XY$#zY4h3%9xS>vjHlHMB zk-WUT!xKY6Yy``gz#(&Ta?}{CZ341QO-+Xug7e?zQx@O6c@zKX1PTiaRfcJ>ZhA7V7JvoeHa9oJWjaKhR|gbCU3!lhV$FS}rKNQK{CRrt;DJ&K z)d7f|0_f`MLd+=lv4x<6pH4!dy1F`5!BLC&f<@fmSF-tU+cSZ3 zSzBA1`X`RBDT@`dPMa;feFM8l;rm3bOP`*yD1tcm$(pGD=RA& v*Dd{j_laYSKRb|JQ1nC+%LynEH-7#CdPB+Xe;BEK00000NkvXXu0mjf6Ju)2 literal 0 HcmV?d00001 diff --git a/static/Stickermule_BN.png b/static/Stickermule_BN.png new file mode 100644 index 0000000000000000000000000000000000000000..a48a166c7b6c7844b08cfa5a4af7eeb7046ba545 GIT binary patch literal 2228 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 literal 0 HcmV?d00001 diff --git a/static/UNIBZ_BN.png b/static/UNIBZ_BN.png new file mode 100644 index 0000000000000000000000000000000000000000..93f2b531560adf3b03a0d3dd81b1fa674f73d387 GIT binary patch literal 954 zcmV;r14aCaP)PdX(5h5EM`1KOptuS3yrg z5G;xyc+`U=YQz`{O%4eQZaz)2{$AJ#+n9!sZ9)V4gJEaiym|B9n>X*xu7PzCZnt|( zmgPaF5s5@1&bkSs(fC*p1X*L-gD9)OdK3oMMGOxQpXlrB^D+&n2uIvTE59P?s!yZt)K_fPcq!1r-x zX67vC8yFZk&)2DMF!}>ns?Kuon-_!y`D6(6aXJ=QAsX%(SDM}2a2E-vlsquT8#Szv znVg)QRo1!LvD+bphaC>bI=mBr*Na5U=kpg^oe$5wn3$MYg|i;fJF<-}olaj+#@@n^ ztGp>*<_>*DOHscqkAv6Gd7=C>qG9|mr#16943!X~$5cinlyzR#8#q2bJ`1^jl(X?; zd3o7VmBrcwEynxE$=?*kS~_S@FcpnPcU7dM^0cY>V4MrP@EVzE5Xy_#;nSf|sGv!4 zEhv>rl{!+j5F&-{BSPt?P}*ZK7|JMU>&axYmjCxDPI1Qju+YIe1SsO1pPzRrYvR@5 zt|}u4wWN;_yCaI?67`X_0r=a_7#SGhaoG}5N2l>FPzA^4;rK=x!K`Fo}a5( zF9<>9@Td=Bv%}da9m;UnoSLs$I;?8$_xo?{?Cew|NxFosvr}P!@F$3`8#E4!OWACe zvPZs9D2PN;$0=Q!z$3yihVlPs9Ppk5`66Wh#{74Xe;M94LzyUc`X0jJv*MsUXyO4I zCL$Ry9XfRA(9zrI>Q7I64V^;)I?glzMNLYjQbE>D9OnP=j(z1f0bTOY)zYGtT=wBSLD0Gj174W!F=%SP zlkQ1HEOjEMwuM@&US+IJ?FGHR{x@pnck`PQFJReo)uR3GZ%f_z=E%rMj3#eW&+}Xp zpDYdyg7XLy9#FIjBODIj7h6T>)w}QM{%KhC(`&o?E4gXj;Icfg?c4rvsYw8mkqSHR zEv;zQAWz4@v}5B}hd$h17*q=a=d+P?$vJLhWP*;&!o}m=@!ZfL0h5&Y?EJjAzA*+n zvgmbgs!^HoGoFTnik8o(r>Cz2<>bhzCJJ>x$6gIfa$(yM-V&c90xN*TJ)JeEGHRvow9^%6(&O>fkM5)%r!iG7Un7pkTZLd|)HOkXbhkyOh2i#aPEp;ut& zQaVWoY3e|Z8V3g}>8k%zt3G`|QBHC304p*Oi8Q4iM&HZo&>4rC9dxmPwNmps?2XF5 z71DkJ3eXZt$XOJ*mJnL>TM`G)Jg8qwY&kE2C2K7TLr6WhhOe923h``)YXL=}q-n5& zt$(QOZZ|j99QughCH=XuIP-XfIgZ4G2+EGs#PrNr`5y)7P*Et$b<*x_eBqmgj_y|r z0)3J{b$qpxUtnfx$}p~?`{Xz#eMRx1L?jNIiqA5wVGO-|KMcKHd3*4fcFx=_8sAig z-PdE$Su7A5LaD0^yu-;t73 zes9hFctu)YSNF|ZIh=;YqY%Q(hUM0mwwhvP?({q%ef8aCV{X zuCbHh7AG$HKRuA^6>1YkN(Cs(?@8O?C;xn!c{^1=$@6(SB@iWe+BE=7{@ubOC1Y=i zvoLLAmNuddsa`e~uaw=(OQ5JC%z{NJ1;o+W?$8DX+PV%6c6{5Gh-Kjp zh9!Yd}3C0rLy*Yp#{fNBiG7!UQd~b`9<0s%VA-rAD76%?fG7=_1EZCoIVK`w6m>MT(E^=yDs|JP@?0jTJ7DzQwA zS(R)Oq@M@XqNOOvi!>Rmk4t{Y?s)y3k<3qlDK%LW^ zE_ZRtsQh3lw_({=l>?H9e(rubJqVbSQdvE(V(#Q2xAkhpY_P~UaVdu#=^y*)YT2`u zBVw7=6gRdP zryV<){=73Ee2(gj=zFCOe|G1I%CaPIQNfNx@`dGo5QN$f-Z(}R7%S>C`5X$2t#t-( ziYKH0 zl4By_;UK^HbnnCVrw6_f31tt)AT+NO_}R{w=g{cY(V|f%;8gUzAy3~rn&ZJOm%!6M zt*(dAUVIGM8Tnzf;o3B4EfMY}-Sm|(nLTE2s&I~4Q3#Hw(hQj38$^hzA(n1yQYLEQ z)N`LtRX$gL3Gj?X512<1&0}dV4(9l{Z7%m`G#ytu3ygNBBAqG5n-OScHK&0dvr3Zu z&d6GRM4@X)v!=emg}nIhUgog;RNG9p*gkWV8G-{Z2UM$~ z?beaqO}T%NfI*yp$5CoFG0#p^*7$%*6d7v#f+{G#^H9gTqPpd8vr{n#vqb1y2Q=$9 zx6CHgd)EO)i$@+WESmL8q_b%0PQ3z&qxQCuN}{jyi0DOMoL_Io4!LxTRFZ_q6H-~% zI5KKY!Qx$}zSNj~b{l=!*K!ky8OKF(^FbgG#+|uBWa~|baXu9*`*>{{l`>7dKbil9 z1usJTx7zSdK!>8C3bOHIF8XMm=f92Lx@S0FeyzWB+r}vk(BiQho}AQeZEiNDeo2BC zO4i5V24SV)EPV=db7Uj?$fDb{+-51@`F9EL`jW?`Gxqo4)Z`@!COP8bgn>+2Krd@#(5G=FCzp z7L}ZxtJ8Kn#rgbTlfDInlqOd4L^DtzN>);Yw7f@#6K3@p#7?u%%DCsCvi{Y|ON(TMxv-L@#%bdqw-74C2d@v5P$!BZk~w8%FA#vs z%=ROwXlE;}-Y+~sOP2m^_U(9+2vwSIAxJ!jlLewDV8W$d*j74$xTS)*@$)Ju?X_5F z&nv?rRT+r_wnR0O0d6AIMh4=K#^!|4Owvf-wLt9IP8}_NU3{bg;@@v-Ln?E{oPb^T zDEASOxt{BcF~D~y;@Fd+jO60>7YjTUB3l~xB8cmgFvOfPbS2a-N@)qOUg2Zms%Vsg z_#hq2IRaWir2%*IIXJkhawG{m!*3MuPJKTmCb=y6a8QZ!fDqy)XDY=5W4PhhYybpG zDOIVu|Lh_UeL#606&-8qVx0S9AERf8>mTa_WSvv!>hY?}T%!GG8tv|K%ax(m11hPk zRkl_6Zeo->pp=?c>!V?(r>>gsEy*BqH$eW>(89prMYjGP1|rCd3v`l4IO24GebIS5 z+o;mg+s*Cl737nJJM$VSyll&T7v`>^q5v}v_n0_s3bSXVGURb0R(e`$I@Pv$E?pUJ zsTYVFKV>vT>G9Nx4$knKHF1bm$g5ZUhDP*q>ud8ujf2r=mMlF%vX9fRRZV7jd$Qz% zPX#+kDC2MWrz38p7~^69RN%uZ<`&_j;xX+Jd9M7fZ|%p}+4cy%cQ38OGz+r$i$}nh zV^xNaO3$gBmUGm0-8-?!yTb@Kb1(c#TPQnL>JN>UffUV^tdvchNO*TxqhqO~nio75 zLnDwQPqkklBn{|STGL(sbalN4Mt$$YI<_eRj^Y;1Q9eOhJmdTs0OJjo^2heStZl!`{%NL@{SPC3!h-bHnES?r^?J z;yYakA-(9kc_7IHi1B}ayz@O|^J92PVzXa5LXEI;2K|=*xGxCL+ul^ANV&4GTfSN|a9d99msLvKC8Z0&c&6Lo?nPMfGAV|2;I-nP2PGk@$Gj)XI(p7PQPN^w^JOr z9MV3jq?yUMR9r~&0=M+1;DL7&tLgZ zC{yq0NMB4h1Kits2=os3I?)0T4^JnsP=kk?olLl>=Tw1~-8I`bVAIlm_n+9O8$s}5 zdNG&jXVHlD58~%@?T;cqVG}IuG?8yJSYSTs-RluRly>ktZ?89Na531$w&Hsq(8KdX z$U*zLRlfZXfI^umFJ_k9#-wNb?-o}Z55mygI@`w42f;2eUN%C$Z58$ zn2VFMnAxJT^%A)TESg^SdJVl&o%mb;Csmv|X-FUi4dC?rJ|>@c*AG{#R}8-A6Yz#5 z*DqJodOGE|f4*Bu?G{!8eNBVh^Z8FHeih*q(|0z)cE1F*yPQi0)*E%3PmYhR0k~=q zl_2x!WX-X5tkG|yCvp&wwtN2krnhw~Kn4d{E%te?0+R5(hCtYfaytS0LC>(vm=vuw zRrlbJv7GpgfGBS*AL?yrW&5Kyhum_RHV%;Phz!cGo$;U$-(PLDwZaiqR$)G_ zJLtzcvJYFvb&dwRfNxz`Kkn|;cFl8RGkwYeosH2*x|E~@;X=LdB;T>3=Q4+SK8%ftZWHBHE)?h-?gAA4-NymUeoJ}jGbi^EU}JG@yF{; z-^TZ>I7}g?Vh|SnGS?3ioYY*E$}b7YL%<0}Y60G9%p`R&)Z{`@k!In6hE|`}Lz(^9 z`C(y%i!}~oaPhIZX~rL(18%twlq6Vm5qSX7S~D18%6|3hcilj}5S(}D zHH^V+Sip7*M@$>t?VoZFR_%!IMkG7kdGH6pTU2|qaG5F)?zm>?*MlD##N(N88fUD8 zBtf48V9}$I9k|88DUSRDXdH^xn~IEDsRc8^d&sQ_=;8`6E+Os>Q-~&rlUrckR-|y( zVEE91S_k1N4}u#SefDrr}L-nkI^)ll6p-WbaO6Fr)r(3fC|?-?kB>jP=r()_T$k zk*RZ|KZaWo2Hx+6oeZDZH@wCEPj{=)Rpdb0OVf}fAsglvM2RoLH0?hzkX!oJe*cH> zOHz4EXl`;>C- zRuuT5jFxNxCIoh`nc9m|%6*-i@pQi;Nv|REXbOh9h@DX_~PqQL(Y$0-mqQ zif4+#Zud8!qi6-E`c!s6X(N+m$abOQ7@OaOt>slWlhxmoFEvv{~#qsRsJuQ!4NQ&m3thQ!3 zj(z$WG>rXNJ+(VecQ4|{Cd%9WfTnWWW+r!ty%d_z?tO0$L|bmWYZp|rRIr6gkg~Jj z0TJJnFcsfreY@DLJ|Ndpx|9UqvUiQ|IGYG!nUM-o>V?yJXy;h--cHWtom2{yBcJA{AvXH~G*$3g)H2n5`?pMHtjBZmRCa7m-xhTUOQ`zTvrsah!z%0=>&dW- zlpRh^Yds05DDBe-BQ{>(baS%s*VXrJH}Bo-0y@tq@;YUuctpr6|rX6C8Z^|E1uGa9;K-Q z+cYYSC4JgSeGd&YO!1)QUK2xR%B2rfp-+i*p2ItJUa$wB&ex2|3|)%%#W2zfIR@gD zVu^7>(>U_-cL0QOwaG$1SMP^?#mY|ntdGGIr0>9Q=a^iCMr0fnBTQ$3-Row3+Vm<0 zq8}(13c7?_y|!ge?c*`RU^r#&z7;-jX*sIrM`p57Eq;zT4=YY`*s)$@NWI(+)O6Zx_l`8T52fFM z#AyWOtuG9AaEzFLJeOlVWXn5VM9i|Qww2*^a?-2nl9y93{8oBC$jcv zv5TyAsc^uUousmfDwyV9Lps%j1?jRMu8}TSYtea;r&VV z5U*SQ?0d9=Lads6D(!mwp6E9lvzw36_AjSPt(g)0*3**5zl1)^7lngep{I#cWC5$W z-PC0^C)j8_5isx(LPZSD-wJAjFxVNG=l<~h{W@FgB+g1wbJX%U@x2zCuV3XKQro$ma zl|p~hI6zzbdg(O;$x-oM9^_l_)*fx!TI3F&=XYBJKU`4QvU~xoho2uSEAO09kv};k zFBvw^mwYn;7^X1Jt(%WQCM{fKk>F33JoI|pKFQDD+1VMx*R_L^W~R5c5Cel$-#jZQ z8>wa?VMs|y8Rn+yKoC=%V10V-8uj;tX|F{yctT&eenwz6Vc)%gsZdz+ro13yXCvQ> zpdd7uvmR0y_ps(q(x$bToC2A9uF< zG5JXg8P~QgP*b_v60d+C9Fw?ZFWF&SzHfaJ;?5Smt9rszj7;qFB6hLUK;q$obu!+K z3)c~5IaeQ*fvlfI&j@Rs-~j*x99UM#{w`HhpUF{Xl<3bSQma) zm9r+r)l;O4PL&YSFOr=O*5ch&#S>NiwBGbYDZ@7q8el_XdZYR8iJx=$7SXPM34EtR NQCHShs!)Ii{SPzV;=}*| literal 0 HcmV?d00001 diff --git a/static/WUD_BN.png b/static/WUD_BN.png new file mode 100644 index 0000000000000000000000000000000000000000..d35001b37bdb097dc7aed1b6af5b3a9a7a9f6a29 GIT binary patch literal 1079 zcmV-71jze|P)X1^@s6k%(qJ00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yPLyCM-ZpliK4>Z(D5ou)Bn9B!@xfO|; zOD>C=#5QL0{G8|QJ@4t9vstG9uYT`)&Uw!NT%OB0&xsqn;v>u9cgZAGLa4 zVF-;{yASoAG4wv^)H%Fi{?Z#RG21oH)MROftkD>3i6P&|9KqbpJYdM`q#e|iI9J-r zjXrV4_dezu>+)`@*fPLm&!+ZkvLr)xnEc3P9?|Nt)WuEpAV1bv+7?m30XJy($nz|1 zOPMdsW~D=RlsR0=jXw8V?UChCfZ^Iy zPl{Z44Mm=O%P7FWrfe~V4W(&yoRDQ&J)7)zOLxXpr{S{H45NNU7(xtlB?T0&)2~n~ z<3PAi$}%ma?hhb~`N8-uu$IEfHcqRbk$=S0HLbmfl*IxE+olSQdX-i_p_O5|YziQ3 z2gP))+`zo4)hmp?%Z+*<+|PFTCTiu&6q)^gVcup=m3k_<(aikG>}46(1|+cGJaXiB zNei-qP~Px7@C4*qmzj+Cd!H+@K1!v(x_2WsC>BX#GYT;TaGw7wkb05Ctaw~o{+ z_84;_sen(E2{TAp1{uU?=5|t-E;f-%DjtA6GBGai^~`><$T->TJZ68{z$EF1`IDI& zNm(jY)=*5!y^&bMZR2HK=!d*Cba%q~qewkFkgKMkjF@^z>V=C~IVY3F%Yw3GV|a>} z$ijh4<}T(Pa-*7gLnebaAcj^kTbZ*+X?(9J2Y|OAu3*L2vWc@YcgXUH<(XUx+SJ{WNM z;?5Z?ntCGbTSTj0nVU$t&|Bt9nH-9$75NO!f4ep026tnb+U`yw@?B>I!(+udz{3Q1Fx#Wwnv@FtR9OzCvDW=wq*t z6_%@_AqWKphvZ**fs&O&iEMlU(pHd0shy%ZK;EF)N~uYqpfn`nJOI&AP^hMqWTkX{ zUL3EZXYeV^Vw?rZxO(Fx(e+_ry+Eb6!=zWNXS55U{6q+6goJ|fFUlo=NA)ocb&lJ}i{-=7q5|5YjN}3;f zZnwDdZm-*VY4r@P)6RA{gN1(uKR?i5Hpdq4 zxWs6Ex08Xez#Hd#Q%3W3Pbgl~1dqyLTdvnCD=BF_MQslPeo2J}IkAkk;Ak9W7%Q#% zqY;eIxjl9XrpCr*!icX-Jiq;u$h_Nof6}=Ylpp+bH<0C6n`trT8O^ZRm&(%^lC(j~az+$dTv1D})jy;q#&epuAb&01IPXUmp}pOAA4+J5Jp zKOOvZv3T4D+qhNT>rNi6aU>AG)FeYM@pMKUlxg&?`}|4xWR+fP>(X&hdKvI2IPG7G z)p^vYLYCQd{4^bS0$M~4dd>^x2{qLpnyrlmF_@lK2X8z--RNh#^!SpYx10xZW6ya7 z^J!G=pdZx`> z`_LDsgRYz4S9QUG`czs;mF0v+H^X;v3#I?2T`cey8(Vzs-=dGY$TtTeJp#nP^gi-o z?c{k^u-8zourl5FOFJ9e{IH1pklrKGX)B8AJ<_7u=+tjpPTrFB%?PEz1Aq&Bi)8vH zvls1~*zz6)b1)_gJOwVo0v(njo%HYm@VvTc4dOS3))Y^`euQ2eYbrCL7GFp@$}=xPQ8~UoOq0s*UiLUc6@tUr#WjfUWSaO|VDTd4CBEXWHfJ>C zZQ$kXn2FCtHY_Ld$-CzwcT6>Il}8M*52^77{E4(qH)K*vo*f?76<(!I) znH3h*L9`oEG6b`z+|s!-u^$N|xh-TZTAs?R@tWXWYhOA)Io5T1&3%wbpsXDk%Wd`F z&9DTs@yHu@7jYOpBE|Zs686uHi%ofpTtCfnmfK`Ix7PY6yz=w_Q{Iu-hF00VY&(JY zYKUJguwk381vY@zROhCM{y4k%8}n!(0*mrB*S*%9ov&iU%!Uj%1uha|bfUB*c?_WY zHhk+=DQc@H2}EOThyZbgcw7jm?BEgX-33{7YMNXSV>edaYOPc9ER>*mWmhfiJaamrRE6cxQ*#9IXq)3Ef9O|c zj(Y_ZA>IYe@E*XS~j|aWQU+#02 zarO~jTZ!KE$Ma4t8}ugsMyekOUMGU-&S%`QgoEW$+X1h9nWpkPQdDp!&~5wBU!!d1 z@^2LnS5WWFNv`(>Rb(6y)+-E~-p6al`-DG=4v=-KVQfkdp!Vx^Krky zGh}A8U1Sj=9sFJMdNSLKA zgihXb7QxvZG(SbzLE|pS6l&oRc?z+UXcJC4)WCZ0+std{!$ek zZPS7N_i=5GovD-QlL4eB)-zq$Ty|CsnI=QQh=GpTu<_mk)2>QC) zNlLbby9Ad2fNISCVZeMUQ=|wzB7A=dflJZ+-xU`L&c>vEr7cVQ^{S&zv2z5Oo+6Cn z>xT7rQ={=g;o0kqjPG`<)}u^<6^3s={nOdALV`e+c!~^X`Lm80W8xm9W=CxnfcmF? zX^G32(Q0>q6=tk03hK;fQq>wxbTq{I1LaXwWBQoL0E4CGE4fg)ppLqd+TFU1-eedh5Rn4B4k0WhyshA{3k#% zlauD<^516USR38LZne-~6^<5NsI*dP`5k^7-W`3)`_i9Qm=6rQ=p<||x;$*IMw7d| za{sirnRN`;_YIb8*#z|V5;c^bok8#q`Y9Y&bilQhaqkl@y!Kci;zg5hC_1@f44Q1& zOjvMcAmyerh-xKZKFAvD&lD0RfbK)O*%Bk)+}#i&@z|(%KNyMr7Ly&0&-(Z6n=3^- zk)~Xbf8GU1)r%D1_hjv??SG5dLgI!}Q0iZ^JH-somAx4je=jVfB!xh>C_fL3ol6`<8c^c~Yd3ybC& z+>@FSD~Hf`oo2R&$zY}(35fV&L@VJ41Xm_%rp~Hb=svFpACCczeJ^J3PrIKcB(H2f zQ_*8aVCL3;Fv^mY+7rXrX~TFMQ14=TG+Tb(noBfmnJC`sY#4*Me3{brd4ujko22sl z5t;z^vB3?YQL&-9J~CL=PkDhXzQtd?{BlA+{vAY4G0iCVesc z4j0$a;fSbp%UwHsOxO_h0xaG%=*!wVCOj@Qag?>+d}(5nfcSQG9&#nu3NiX2lpaIO zexKyqfDg9y5>$g5G76a(q{a;MY#7f7WhpFFH0=mz?_?-C8C{82mcI&-ZBKU7cCY*g z;MS!n(JI8;SRD@^aB{keQ`oLy!Oy7=hi{*66_DDk@aZ4)|J*1$`SuvL?bx_)|401h zmrjD9m56RWOU|N!#r<)chEh3_NGBZ*O1`U~rdFIq1Hk1y&yS~N?1_NT!7(jhX|a8- z($wbt_9Djf#0Q@dab~bbg%Z9#ryh0>$1f`mPA^CKV#C0 zYr3J0(t+Gzg{lG$4txDag{5{te=F_&=K|*6*#3FW&g( zm^2mC;4{rh<8Y8lJRWG2@k=gI$|a2@vDHv#R< z)&~>#y*q<_@VF04I)?aPTrgOoRu1Y&WNFJBvCuE(jTn#J*E`d!1?faO6dEn#&e$VC zbvf!wPVEZ!EtxUEma4z(?y2ar8^@(x8ol@Hr^MYHgX1HTd+ZScVmpg{$&%Xb@Sn}| zoK&m8hQbcz*h#*{I-aP4D1Iw}j>60*H&fHa6=D+W73}yEJ>k7@FLEm7H#HA8JvZGz zWWcJyRCCYhWK#(h4B>{chseIY8hu}w1__?g*p=$qf8DW3=6sRu%?;?(mc(NaZ!Qf)(nEDRnQMiMZZ#?2B5@pu$96>CCB!^=5^ zFDr^?4n23fD(y~?GiHz*GVoP9UH{T~tbL+)8nsNcSlu+0#n)Io1s`#Gd8faA*ztUE zj_QBhqF+=J(7Vz7I}E4PTd{)kg{M_mDi|hA*1S_$Rh#wG*fN1%8@xb_(+F}6JIt^V@@P?tZJ#c`aYO%)Py-RE~$^IetO)_?R}&LN{@ zePg7xd9m-4+b;(E9PvHUo+&;tRu)TrEIgAPv&6)(k(*B1!H$MVdxx8D%@c{KlwmBvJeR?_?plIQ-XY`vMWBNB`w$DHJ)ReptfqX6a9ifiP zNXeGdq7|7eGcrplEXx0C7?%=v`6_P!^M}0xraGsn)+;xty~^}At9Tg}I}o(7d%W#D zmnq5)wd7P?zyEADNAb0A7Pa_VXaf-mZ&S%3*SB(GCT+g)Z!>cal&Bt*YMiEl5~Fga zcYw?WWJaL33}&wbv(}CJXLAg{OQJLqxIWsRKMCi0TW%4q3w?<%M0fY5u?*r#ZnLWG zOS5Cw^DYb09W=XA3rq?cRW7=aI35ye%%Sd182%SH`z888q^9P;_Ov%44W{Ei$5=JP z=S8_71iPN5mBC^%QgD}Phcd^L7yVnE02CI(%fgRWB(EtGX5N?GdaKbBj&e)8AoO+Tnc1Q0JQM}5?|?m zZl2fK6D0xU>kW~PnHLr1Ca185VeMtw<_&hK>Oe&j)v9FLDdz*5{b>!Gs2i|kCE)DY zyc4-o$(YV8Oo7U4^G8=iZ$P}gMJ}0O^wIv#Ipy~yhr;j!Orf)l2^DxOxv)`sO;kXv zuKJ-1+TSmi#WNYVcKy|r`HE?YRt19wtZGD~^vt(bsGFn9@s=r~%eVR7pWGh)PH}^q zpG%e#wKH;*zzk&>O%6~BW~E_wsL&;iEPnotPdebuBzU{r?MUc4$9gKm+l@`QawA`3 zV)Mw|4;>|o=esM<(1LS)!~01ZT%RZ(Aq7}1mu8;dt|{=v(^d*}PM2#!wqk6@)vQS85j>GZhZ#ESKwS5d4*+VJ2dcf2iz1COvS@ldBN9Wci z&H50XV?*@@CzhP6&z(Dr*`NfSb>W*-Z#;Q)@*-5#Q2ZB!`1O8!;; zb<=(MB&`F|nWNj3fgUdu4$cvT$4T7MRW_Oe#29cs&SXt# zN81?uEN50`#KYf$yJDfG0%G4)Mck0kwHtTqhd3Cg0X?+U?U-T#(hRTDAz%JVTfa)eUVIFfWNS&~(Rs9XBJw3l zZoJY9HfQvR6$qjbU(kBPZXIo27$`2>)B`EDqD)3HYLzDve`_3cC7I>GJ5)w<^Vf&dLp6I=u!uS z>E+DD&o&Ndt?r{HMqXk3d2IEm+J0w;z-p&+#gUQ-R?~H*=5%zjM(VyJ?im)P`qbl+u$a(l0=4-sLGd_oT3D4Ck zsDMhmTBn78=SWwyx+T5&8&jSIEzysi?n0@px)@mm^HrcF*;VPY1r2J<3Mz|LO`-4o z$(kW3%YrqyN+&bq;$nw61kLWfM01$zgNo$|UTCw?mZbHPxdj>BU$VN(3g9c~_8QjE zCJMF`RIYKS)Jb0-*0+}n&#Tcv@H$Rl$SiQCt1o8)1vxj zQ8}(;rkcMUK)R*Z_odqj<)=5xex2HJa5(CDAyhhPUZqY0`f&aRX@NK9!yAvf%wxlv zM&Ffj&7sDPl$-a&7D3Qh^^`TSOFoYW{lxDHW5o`j1hiGN$_qR8$1BT|*-+ug2bryy zA!;Jt1LXTi(Sxec>mHbzPE-S!sP=LyrfCVyso+9g|FdIq&yC#0_#gECzbO3wHP3?M Y^>m82aa{zEJ3S~$a_X|R(&l0R3oU0wo&W#< literal 0 HcmV?d00001 diff --git a/static/catch-solve.png b/static/catch-solve.png new file mode 100644 index 0000000000000000000000000000000000000000..8ca3b945e3487f28541eca669c05a53822d96277 GIT binary patch literal 4756 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 Do|_Rw literal 0 HcmV?d00001 diff --git a/static/endian_logo.png b/static/endian_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ef6ed0997b65fc63063872621f83987efb085c17 GIT binary patch literal 4746 zcmc&&i9ZwWA6FV**H<|rce$^Gp&WBna~oDNv4rJT=1e9^C&`htTsdma$!(5Na>X2T zWR59vY%$k}ZT$BAD}K-G_1v%L^E|KT^ZC3#@8@|AaR3YOO7L=Ua0pmiU3TW+IF`q5 zC;!96F6~5z)Y%o!T`M;v2M3?WUVioL!*za&BpYKUK8)xL{fw6>ni3>PaAxXbhm;5buvazpM`wqB@GvzQ&Yg4 ztlg6o94ZE z=H}CV)*d;qp@bIv`P=CbcV8E4PlZg2jAM`=-l-;t5ZtO#Ml$&kmw=9@rlt}!Z!T_c zcIl8o!^Xfn112im5FHPXaj9?~7aV>#F>!snPdR_Al{_<(gCpF@k6W7H0hGW|``{1i7@3#S9>>5b#>^Zsw^JF7MuZY0?3n}+|9^}z zTY!QtKK>Mw%|Qzr*0?kdG#Lx)A$J-$_ZCNVAJHe_Ar;B8(}f7Nwq3?1HKO?L_Mpe+ zS`4Z+1w_2mGxS;BvLM}D2{pJa75Km-UIT_=tTj?TACP-OO+gbF`N@7PV~-r)D2Wu2 zeP6uCqHi%$X&GiG&TbUgBz+NsKls_5*}5}oi`e}24KZGJEo8okS4LD#LaO<9mOENH z@<*ps^nAk7V_}C2cXIAMX~_u9JU;Mes&=q7W_!Rrw9U8u@E~xT=xEw(@m(yNMAM%R z^4|U7Er=X8=YIFuy9cMO+rAO(vr#g^*k8^coM}c5)((NF1Xsr4W{>P3E`nM%=|i+P z&|}N0pNg3D@W}Y#b|=?YVv|yi#j(2l8Sg{eo16dsdO5pa;^c*;7Lk9KW7~D|Q3s`N zpKmAavsLS%)<ti~3(EYp7q&i^Y*w26TsjV5xhL`Q}jhDZ`*lp~Eg=$0np(jnDJ_ z^%mOA;ca{diaXa4k75mY#;*N71dX*etu;&wg+HvRO~NT@Jqz*@TBWOFTZK}@wa?Wg zJ+e8u7n=9&G%!swyJ(~c3~qpwg*Y#&gJ0m<^R{vSk_WApj;VIx03DGvz?({ghmqzAL5rkJ`kAH%4d+1T_;^tr0E2&F5HTFIce9od94QI-5p4W$o?RGW=D};`swGx2Lk>}P8 zOEP_#gpWT8SOW&;!#>)*bFQ2%VWs$ZQg+|0ha`ZyV z($A-|Rr>?GqS+aA@o%m;BGcLyFJ3cu-AuY8K;-SX#rHsRF(yb(NNk;-bF^2;r8 z%m*RZ0+D^9XuELs`pD(dz+#`{9?HINRj14*ZSZMTZ-q{#i}JC^`UdDv`6!a2OmXw! z0oCKSb(lxIN92^R7;-?nCp&?Y8+RfZqv>YJa}IaiX7sgJ4jpiM>Zv~b*C332wRL*|ImLpu^<9<;M^z@pSppuUtQ4dHvZ(KcB59Tcx6Xa}h zj^7`S_e=yNCN1x*63YQrn3E~-k+ilwT%yX@gB$MnyBq6 zxLTdGJGFFOeSJ2HoDwuBC%)00d`5T*21VpQ{Y0B0-Du>_yQ+HQziaCBuGh=zop5;6 zxlljpX=?(WHD0uKfK|k<>ILa;i zU|wb>>j8Yh^G|LwqcPn(=Xtxqynbe;P3o3@e49WA@Lp-Vj<;M9*XwnTQ+jh;R|^CGD%j1``rENCW;(1d z!mRh}s62R<4z#*HsU9;21DmUc3m3e96t_F2JXt?VH<^FPX@~V}vs;m>3(XWx_*9%8 zb>#Vg>$fq~tklxT^W?rN?Ec>R?0O5DOBpJe#>V6Gli@%RW`%Lqf4RhI_bjjRheYj{ zh>&3nGp|r6+d|o)Uc}xzqnK7=^1?_n!Loju?bLN~iqZ;4|1v=qjH{Pkk6(BGP*H&i zro3y7I@~&-Vp}vy7H1p&v@_QArXBe-&_ZC!+H`!?7gL2`#`i2uK9uX3*eirdv2|YK zfObB;OQKVrr%-TMQ2v{kpGjgfG5!ZqEUvQ7m2PuD+ehGN;edgjz1qsBVBHf%+e|Fh+6-i4%*QyB+>a%v45_nd$ z*>GUV?vunW2ctEg7o+;X(D(7VOby2)u%}bdITyg`!3=%hei5-9<}&?N{mQ1#xbZ@~ zd<KnkST6evvtvz0u$ z2S^Jz9yJ&9X)3sJ*3NM$wXr-vCHIQn0FSUz6Yw4nAgyi*cmNr8ITiidHqU6LvVqh; zp6Ou93MUFHx>S^m43yQ~svxik6?8w+`~B_Z$yQn;Ex!@D(aGJCth)wZ-uWtMnyrOr zj*e%Y)`aGWjXd`m5|l6 z&2;%!tl#!?5xY`hO!?IDoR6dw=QM6XnV?rDyEhCn%^rFSzc){7#ml3nh4rZ4?Ei-wLT4-WOmt``-!)gUOHV zz6p9AHE?atyxAiGrS$k@w2c~&gP0n%NhJN1%eYf~-*L#(S+pwtJ=xP7Ysf~~EMIM5IBl(xk>@ZawAC&RYZ!T8dEst+s?du6RJ zg8b)o0K)wVY@njN+}JLPX_t%L>QnY0!dk7>D__5Kgig&0g1_4?WBSxGSW>9=>a47+ z$mNshlCy_%m5pQXP}Tl%eM)yF=rNa?C?v!eg4 zyYjjQA|`_9>DQO%RaHfKd!(ao4#w&rm+ao2t_;G|X`lPBHqPgKr05%=C|gn>S7Z@K zs`E#%L&ADn#mBSb5+Qh2q;Bl)pGfj%9NeZ3QoW)Q&k9EtY(hTVil&ddwsbwJFfYIF zIQUG$RTM3Hb1=an|1QVG?0dGhx1r)n_Z|6*Y)Ud%Y@HFXTS~3!2@lNg4?)VLkSK6B2k|n-Y@KEJYpiCL%m0U1;sy# zeOx2sU#T2JYEPiJfLXZ6+7TB=6VVd4h9EZ|T8$C&goDX`7@IS8E{yFf$S(iM&uV_K zAGX))d-V7B@PU8oZvqa4`}e6Vswq|^JnL$nS=pziUCOxnc69wp+)4exZL2@Te7^_$WQODns=_wG*zH#SEe zRv5X(eS{^TgMoSAC?Z92GtST{=-?gZX~QzLiOuE)*^EF}x4AI0Jzb+r0JPD;=`rer zT`~`D@wB(ZKh+T$e_N#7R_3osZ5q0?EM;&iXe_C8%uIsqeX3S|PPOUjJii9L-*jC@ zy8&(}URXem%)6|19ed^Eo^IyH=&zChJ!s-1kIgbp>RjV85Qc4E@AD+`MZ#80$@$!~N>MgH(YbS452 z%)gseS_*2f6;3MFwAAosLMGhh0T5VamspkC^q4lqc$tt(J*avC`b(&ju03dR0PXu2 z2$HJ3zJ`f)JM}{^y8&NONP*Z0WW$tF8zn|Wl}Y#T)eb=Cy450@+jEV1iP{al>%G*^Z(_7a~*TM?3pH7jn+Q z#QGYKkc|Q)<2IAvd88)C@J}2o#Xi5JcLON1LJ?i03`|0e-gLAEvJU9B9z*ePw`Yb9 zCC*fX(ZIoi0y6lyjMHry69M43ixv03QhryH#eW_z3Gh4Iw&@lzGMpIp!S>I5w`B}B z`;&1YhbFQ>x@2JvhL#0|E=Rh^mR}$if;a(urhd**475ad;`us419 bF#cHV$UlLC4&dbf&R~7T;c}J5t;GKU*vU1P literal 0 HcmV?d00001 diff --git a/static/fos.png b/static/fos.png new file mode 100644 index 0000000000000000000000000000000000000000..a0911a4f8d513b4e5bb0d16ad8e952126bea693e GIT binary patch literal 10351 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 literal 0 HcmV?d00001 diff --git a/static/fsfe.png b/static/fsfe.png new file mode 100644 index 0000000000000000000000000000000000000000..2078eb939fd0ecf0f4dbc92e74dcf8fb3ebc7235 GIT binary patch literal 6238 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 literal 0 HcmV?d00001 diff --git a/static/huawei.png b/static/huawei.png new file mode 100644 index 0000000000000000000000000000000000000000..4721bfcc379ce6e2a626b1e35adb882aa641492a GIT binary patch literal 10605 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 literal 0 HcmV?d00001 diff --git a/static/iota.png b/static/iota.png new file mode 100644 index 0000000000000000000000000000000000000000..19129e96402996761d79b748e60335fd956611c9 GIT binary patch literal 16198 zcmeHuhf`Bu)NQbUiinCx2Lp&f7Ss(toz zMaSY76&{R^o4VY=Ak;v4E&~AY7<*?Akp7LkxYUGYstpxAs8y@z9%nVmSx$rj01;Yo z5j342ljO>UzTc57_mfq81}ied4DFY!(O(Au((Bl%BChlCJmN}DjO4I=sk^Cj2>{@e zxx@)zNbn!#uzXsZA9VaD0B=tpE>bYbPEE*<2uI{rSMd#j)HU;i=x)4z7VT*Y+zXupDkXLNV!@wNZD-biKbOiy8Nva3w1 zF=YW6zi74;w+7wU}KCpgiEwwV(*C%A!_+NZgIE zlG;y^_p3IKpJ4)^kfXKtR}&91#X)ZmGo)LlS7%MudP-h{3P;t=Ey0L{x;Y3nba$*1 zvwU1KYdb*Y-EMi?T24u%>=Meg1!XfFYUt!vP1#oXs=iUCL0h{#;h7l23+TtbDMlIE}q)= zxNyZr;~u3At%ZeQwOdKNWqJ}{DR1`)tDglx*C7`q_L5=iXuM*upx{95HNCQ&hAj0K zANDJ12_df~_xuF2(_XvXn=a>NqoG-I8pEm#m8?9B$l?lV%wL}Hp#lKppZqr!gVA!X zMfje6;Q$pK(zAwXQ8vd|qNQOYygfYJIx83Xd9rIjzGn`jR_}K|n-6)Oyw#WkjQqtg zmwa;de{RxPOqc#QmR~%h!>-`sLUADIdhRL*r zWgwB0s2jq+RJY79Ev!TAUg~#QXD%K*G!MjcAwrC|_G~6&hf;|7`F4iymEg5wW=h?S zC1o=82iJdpG_|n!MV6b%F;X-&Xo{|u;T4oisTw7igtvL?R^@^$RScGYdeqv211}DL&OF^yOH-Z`j

Y!x&)0Rwekkyqg6O&q&~RWlw&UO(f?tuXwwFaZ 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%0Atinx-l1kK__cWcr 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 literal 0 HcmV?d00001 diff --git a/static/lugbz.png b/static/lugbz.png new file mode 100644 index 0000000000000000000000000000000000000000..edde6e92bfc90e4661cad527b02c1d906f2a88ef GIT binary patch literal 25667 zcmd>l^;eW(*RF_yv>>3wfC8cnB{jfMf=GwJ44u+7beDj1cS%Xk4Bd@@v~)KJ2t#)x zXYl>r^PT_UuojEO{4me`?6~%|_rC6sPYRL*xRkgL9y}nBmJ(Nf@BmZr!2^sJPq5IR zq(F{0(0_1jr8FEKJRpC4|BE55%y5AI5W_)PQtUy=ATPmUz>8GxhSaQ>>W(lQxlKN8WA;Xg|FMmHsrjSz*8sm3SQyaYALzZl9Wn`of zPCT<{q1D*j!@ZO7%3o4DZ@zv&_y74%1KErB;*eEb+`_FjW7g&}lod^YC&t!Yw8OF6 z%YwgL&tyCF-)Wz|P-vt8g;Ch^!} z8Odz%ZRc3GOflsoF#TXuH(N%~B)4>O^#R5@z?M;Ed$t$}{ZnFM*2j0cPn8A?15Aw> zmgPRiKI!I44$psAjNn;a$t4uB*99j@Dx{OQGz8872kd+8WNe_QX!{p&xbL0GoUMQt z7dqq@+MusZpmDd|12D^$AQC~M@t(OImxy>m5Q~Nm;f60L`-UAVm0%}B#PL-|sxtB!C!VLkoV{q15LmtO^)qkRDpE$2HpG5de{}c}0?x#wA@kNo962=8 z&ap=N1_fKtVE+5!3}jrAsT>rB^=1`eAJ-Lq1r(9}D4Aa<{ey$D^kzfMFZeGoTO5F_ zB9|;3D%bJ&Q}u|YK4M;VkqQ13{+$qCq62y-)qDHLWJ$BOA@fg`ikg?^2L&NO$)ah{ zLSM?<)Q=w@#Cf9r^TeUwMtz#4h~;m9Q2qB%TShwRTuwKDeYn~asw3q;CTY)%CVYwz zsU#=rD@q9oU*<}XEcOCnGliBMubfgwToZT%w_M}6n7nk%ougIHMV<|9cE^4aH8Wy_ zw@2Y>lY9^FELF46kDjur6ovZ8xwC%CS&BRZ^MYzGmz^|4!#*#+`kvbTpYxbTe)U`F zec^3qL7F6C*i&dr4~^9>$-1LsxygCS{tcqMMiwul*gO@uhs8^YN%%+*1YpQb`SO({ z4wpZFM&=WWPYv&FLO1(ekv~LNgvPBX#E~#=gG@RVvkj(o~_WcC6X_@7Iy6P%1!v$@{%tmWiwxBun0ms9-{8G_G|w zyMlo@)DMgC8Q69`OoymXvP3WulE+yuxHW!U=iv23YZmi~+infZ!C9l+JeQ?%N{y6Ai0c~A9hY*s zDs@Cd&+7fB4OWHpF-!mPbr6!6JjZV29eotig~hMqIU@&m`VTpl93;3?vb^j!<}Gzi z)s?NS17_+&g*s}J1*;WM$NvrB#a&X@3WN+7N#trB;?K?RwK9CuFoGw2DpR5UK53m# zf^f+PFtGP#KLrgk4jKD<)gvAS%GFHgyNf+eZ8?1FE|KG&qg1a=NiCK24$e_&Py_#A zk)Zi$yZU2*Uq;EFsuV}&Edm53gU&R=6aH~Gl1L-@NV!&I{NS2xzDRhj2O~#Gd$Lt* zDs;$rg+`QQId{TYvKj9jW-XqC>!EOMP3HN+HMsB(#{n9L8UYU#Inz6S$~}~1Q}}J9 z_kt_rR}(Ozq^c0Zr^mX(os6;}_wdV7WHc@z9+Ka_COO3=0zYvY1SuaNH`FLp8Ghj_{Irt}s$y`5RLkm8t@l<-fUjA3oEt)$x1 zG)=DtF}mwjNJ&D>JMJt$Upbs@swhKX>?kz74p$^#CeoC5?&_~+%cqj*I@7t&yqAFK zk(IHr<=i$g6n~#3iK6ka2zdvp?cE^Z;7bHT81F;&&6<n>C7$u>A)07gT5?7kq;yoyiNSId{A%qO&LR9 z9cs7sVrG6PmCAo5@sgfn%6Kqq4mwxNSfm2YY~ii24{mP6`a^z{-qO>n`7 z^jI!>rT|;j9yfa>{rSHpp8jv(TW}ooG^CDU8Z*=HTVKFIdQ2U-cZ@&dG1p3zSuIW$9vzP$Ljf zx@?#u*q0u7p#37FZBuTmLdc)tyq7V5PTdd4LFa_)N!uwwgES-E9B_|*-p{5

6Hz5YC&ph3}1Wh2CitZc?r7A*cBtf_wL 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

LjuPp~+gwKX<+gdsH(5==ioJxXRvLP-0{mz(vg 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 OASbOXRWAAczyAYP6>H!C literal 0 HcmV?d00001 diff --git a/static/old_index.html b/static/old_index.html new file mode 100644 index 0000000..c8629c6 --- /dev/null +++ b/static/old_index.html @@ -0,0 +1 @@ +staic \ No newline at end of file diff --git a/static/ow2.png b/static/ow2.png new file mode 100644 index 0000000000000000000000000000000000000000..21f6a78528c667610223597d7e5e8c95c0490f50 GIT binary patch literal 4779 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 literal 0 HcmV?d00001 diff --git a/static/peer.png b/static/peer.png new file mode 100644 index 0000000000000000000000000000000000000000..8ff27a2764adf3171bd15e739a4333fbd7d70b55 GIT binary patch literal 3745 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%0D?llD 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 z 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≷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

eMl>Gg7HnU#r3U8rx&&1EbD8Nmo#P zDxxnN&L|jcCOVhJ&U^=dZ?Uh5TnScpN6MH}J>th@eTzCCPq8SSa>XtViMgu<2PkHi zLNzn2PY36zQhKrcb6{lD5k;%Z!TBv7M_A8rlMbw1qaV$%-7>73#!5G_jd}R8sQK5T zIMdyCv8a?RLqDKNQZtHoKF%7*7mkVwsvR3mF=mguvXms?n2>5*;o8DlfmAYTAzrs(0w>}3v z2Rr3@<4->8L5b~N83ipY&o~-99?M;~y;FButOOR%$i@7w#DVcmPcm+#=27A9^RX7jOpp7VN_=29wod+NHklfP?y`Ml)T`nsfuL(+M)b&dIm8hzD+d-eP(!$P`z zj%{LbEao{G4&L$z3Gl&Yf@;gw0wfO(aR|Pc+M5|B9Y(=k4zHuKXd8^4d);TLpT2It z#hhQ3bBk@-cAD#rJ)Clz1Vw_DPw~RbBMv5e6&ue_1_u;uOkp{itp^|MiAcUY(3BHl!3zx+H^k*Rr^h_?LvhC8aUXjy9ft zUw4TQ{t!+doWbeu*dmM=rg(4%njIww3?2vhi?7fq{9rL{&)$e`Z=b!JlI_Ess zeT~mG@B1bu_>Y#r7GpI$)kVPGvRAkqNW*^mJ!&{cH>I5UVP*Gef(@4>c2>SPan3B# zSXzUnQS}70q!e{6FH~ag&;%P`uBbB&N)2+8jR6!XpE>(yqA8flzk6k_Wy(B6p8e?) zfGhjU*#!@1#GkYk1>)K4zvoom72*}dYc9Udw(6je8IS$|hiD|{QG^OVD#ybQQC?V8 z$IiLX$a}>QJ)7-TtvpkvmX*#YFxz9Iiu-1HYWyoIEQ0eK^H^u4D9Cs9lsj+n;qfij zpueIUk2Vfnm;Nu55TbmSPpM_cA76S!$x-j=vWmAc-yxTgroe7kX**S3tWaSTH&)`0 zEBvWx-I5k0`I(X}HuE^K@pn+f+M{NCb{UgzS2!`((YK~1_aXak7 zAnzHtw(vlhY327e9Ji(b;Ac%WRmF)^qs?;*OnX@sMR_p0OZ1;Ptpd!s^|l zG$e9Q5%z)9vkM^9#A4LdIu$!9sti*mUNy)#SK(x^B|cE1 zkhZje$khI6aIeHj1d+*WT4t9lQFrGOFoe_ld)rgA1WUmx?8q%CY)f##M*hkTpT!?s z4kIF!mh{A-#T8HGlKPrclZutdTw>ch@UdZLU+UDK$5oc|qNc_e{Ci{h_@pZ%bnN3_ z{aF#hE}`8jpJ>d~sO4^5_*dl)n?9Kx4W<#?uVto*=xBZ4(cpfp8SRb2X8l%Jx$K>E ztpX0_z0Mml(sEe41&8$o`RtGpLY&nk5|wEFJnXDYL z9cppa#ebn;b5I;qjj>rWmiJrT4z<0sKE0UvnV~5u=liFQ>wQo=u)gJwW*RPTv1NF7 z%Uls8u?Z01>_+R{<&0smw34m4hRFtD^SHx)l?8Wcg3m9Nw!Z;CJszC5fe1RCYw?gB zPB^`A(GPWv1Si%3ow-Od1Up1RcL5`MdNM;}NCCwdJ)O#K(w@G_&(1<#?fEr(ecC#Q?au&!f&T!ImH)ZX zSO#ULp z`GR$8(ge#amG6Sqc@Og*03bfcs$Ok@%{t$d)MUK-<@3eLAW1f>*IBfO@_MyJPCiZ> z*bOo3)Zu}3;f4n3B*iU*4z&$~b)g=jW7>61B&@5id~{!YT#HtwesFt>TM&K7#D04Ud|;TR+3Yk4B_~+*xw-*zu(1 ziz_nSYx;=uLu2*BtZ68$M6?T;9M(J$Sk}di%9>HRPI7KAIQm^t|4haGS5rXKp+A8+ zax1(w?W63lJQ}gRwbVGXWH;e#yC;@)fsAPEax7EW&yohAUth@gacut2vvNON&qEAfLCu#@bf2}WSqVb=L-x6DH{)oO8(Y=OFl9oh zQcv0|KZmtXS8v-V32weU=WtpULXz|M{tEZW^iDH%;mSSVw{uqoE~it=n<(wR|L&ll zCa)D49ypKlt=fr;3b-n(f8V;iNa)F(R-!ImyQgaYLnDJO*H0V|>U8ONK!X@}eAin* zx2|s`Vs`OekU-!q=MB2BwtXeEq|CdqE@eIxAMV>L3CN{p?)$yQ=fC z%(#ntg#pzeWF@KJuVul`r@!# zGW7F7(t=2raQ95!4b1QK3*3DzSD4^4y3MQm$$gX*_uQ;gl85HiSg1B`@mkS&J1v^# z-$`2+6Q*8IW>?yl3$kCgZ`>R>=jr$Crf3>Bs@aI$)Og3;Q{&%D?(xc^W)6u1B~jz8 z{;rvwkvxO?_Q5EZu1D^zWzIJO+|ew^2Gqyf>-_Pd@Yef3I;8l)zoZO^ZTVECgQ*@y zqcI*jRMn-~IVnhVa-8W{Cz!xxBJma%MUId?J%PPg%C^6yg~p@?(&Puo+>}+3VH4%j zXLWdL#NA4ntoce@z;@P6%zm_lhQ^I0v5p|j?wqkTooQU(37El)*Z${nJhT&WA0b!F zGG>zduOh32%0iJ}?K%F6qwOs+K8<=TsK9A#The}BrO*?F3d06U1J{ zmChw7(xC;Cp$AJVx*iex#&sct>1pCzhgQb z7iWc|wnx*9UoIa-i;bDNrTp~z8TVG$Dj(fxh~`-ajYqt8rcYFy^I;BfBa4x8?~D}C zFkO;h910MN)jfAuR=rYwb$Mwc{j0>npi9yzW(cO(^&=0$$wwIsaM3rS;X`kt)GWit zz(Xsd3xNTqhHG({KQjCS@QcQCXT}e(2U7Pve}pSKWvLzcn>|SQRAqH4A|vzWeyj*zr}Rm z5$!hh?)e|xH_7(w@Q1`e2#u-_ALGghg0p_+tmcms+B;SjEoq@q6qN_jJHn^uX_~wY z6H?E!PhLf9o1vAH$pohsHPBcJke*?0LcQ~le!{35S6Ck##AiIEe!l+ZR`=dH5kJK< zQ=SZ%t(Kksy89Ee^+jT2ckFeIKI>S~F3JM4e=LY|*36REj^yR+6U0DX@4K!p;@7lq zUK;R#$3IV`P8PT5!>$n;h@zk__y^<5OV7-%PK`H-(}dkD+mUMJ9do-ðMkxUG`G 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 RV_yx1lAM}sg^XF?{{dOWz$X9z literal 0 HcmV?d00001 diff --git a/static/simedia.png b/static/simedia.png new file mode 100644 index 0000000000000000000000000000000000000000..a90b23922f18c2ad9b08a12d3ba1d261b822848c GIT binary patch literal 6705 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 Dx9iDc literal 0 HcmV?d00001 diff --git a/static/sticker-mule.png b/static/sticker-mule.png new file mode 100644 index 0000000000000000000000000000000000000000..164cf80259e5cd68f28efa4f5545af444b3dbbbd GIT binary patch literal 46931 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 UOf`)=D+KabN&P{Ig8A$J0eA>;bN~PV literal 0 HcmV?d00001 diff --git a/static/telmekom.png b/static/telmekom.png new file mode 100644 index 0000000000000000000000000000000000000000..770b20bfd8d2c2814a52c81e380fde4e214e14d3 GIT binary patch literal 21149 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 xZ Date: Wed, 30 Oct 2024 22:56:34 +0000 Subject: [PATCH 3/4] Fixing start script --- docker-compose.yaml | 2 +- start.sh | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index fa20b2e..6be436d 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -12,7 +12,7 @@ services: - push_notifications ports: - - 8080:80 + - 8001:80 conferences: diff --git a/start.sh b/start.sh index 52c0ed2..644c1b1 100755 --- a/start.sh +++ b/start.sh @@ -4,8 +4,7 @@ service cron start sleep 1 -#echo "*/5 * * * * /app/update-conf.py " # date >> /tmp/updates.log && curl --location --request POST 'http://localhost:8000/api/import-xml' --data '' >> /tmp/updates.log && echo "\n" >> /tmp/updates.log" > /tmp/cron -echo "*/5 * * * * /scripts/update-conf.py " >> /tmp/cron +echo "*/5 * * * * /scripts/update-conf.py " > /tmp/cron crontab /tmp/cron From 29a12ac7d62c11f7c5af15ba2e17c81d14d69852 Mon Sep 17 00:00:00 2001 From: igor Date: Wed, 30 Oct 2024 22:59:18 +0000 Subject: [PATCH 4/4] udpate reuse.toml --- REUSE.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/REUSE.toml b/REUSE.toml index 2a648ce..049c6ad 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -4,7 +4,7 @@ SPDX-PackageSupplier = "DigitalCUBE " SPDX-PackageDownloadLocation = "https://m.opencon.dev/" [[annotations]] -path = [".env.docker.example", "start.sh", "src/tests/**", "src/shared/**", "config/**", "REUSE.toml", "static/**", ".gitignore", "**.sample", ".env.sample", "docker-compose.yaml", "src/**.yaml", "src/**.xml", "src/docker/**", "README.md", "requirements.txt", "src/pyproject.toml", "src/tests/assets/fake_attendees.json", "src/tests/pytest.ini", "src/migrations/models/**"] +path = ["src/scripts/update-conf.py", "aws.credentials.example",".env.docker.example", "start.sh", "src/tests/**", "src/shared/**", "config/**", "REUSE.toml", "static/**", ".gitignore", "**.sample", ".env.sample", "docker-compose.yaml", "src/**.yaml", "src/**.xml", "src/docker/**", "README.md", "requirements.txt", "src/pyproject.toml", "src/tests/assets/fake_attendees.json", "src/tests/pytest.ini", "src/migrations/models/**"] precedence = "aggregate" SPDX-FileCopyrightText = "2023 DigitalCUBE " SPDX-License-Identifier = "GPL-3.0-or-later"