This document provides an overview and timeline of SWAD/OpenSWAD, an open-source learning management system developed at the University of Granada since 1999. It discusses the history and keys to success of the SWAD platform used widely at UGR, as well as efforts to internationalize the software as OpenSWAD beginning in 2012. OpenSWAD is now used in over 150 countries with over 34,000 users across various institutions. The document also presents statistics on usage and provides details on implementation, advertising campaigns, and the transition to free and open-source software status in 2010.
This document provides an overview and timeline of SWAD, an open source learning management system developed at the University of Granada since 1999. It discusses the history and features of SWAD, the process of releasing it as free and open source software in 2010, usage statistics from its deployment at the University of Granada, and efforts to promote its international adoption through openswad.org since 2012. The success of SWAD at the university is attributed to it being open to the entire institution, training for teachers, user support, development driven by user requests, and its functionality, usability, simplicity and reliability.
This document provides an overview and timeline of the development of SWAD, an open-source learning management system created at the University of Granada in 1999. It discusses the initial creation of SWAD to manage courses and students, its release as free and open-source software in 2010, and the subsequent creation of openswad.org to offer the platform for free worldwide. The summary also notes that SWAD has been used by over 150,000 users at the University of Granada and details some of the keys to its success there, such as being open to the entire university.
This document summarizes the history, features, implementation, and release of the open-source learning management system called SWAD. It began as an internal project at the University of Granada in 1999. Key points include:
- SWAD's core was written in C for speed and stability and can run on low-power devices like Raspberry Pi.
- It has been continuously developed over 20 years with features for online courses, groups, assignments and more.
- In 2010, SWAD was released as free and open-source software to encourage collaborative development and improve code quality.
The Google Developer Student Clubs program overview document summarizes the program as follows:
Google Developer Student Clubs are university-based communities for students interested in Google developer technologies where students can learn technologies in a peer-to-peer environment. There are now over 1,900 clubs across 113 countries that train thousands of student developers on Google technologies and empower them to solve real-world problems in their local communities. The goal of the clubs is to help students grow as developers and impact their communities through technology.
This document provides information about the Google Developer Student Club (GDSC) at the University of Southeastern Philippines Obrero. It discusses that GDSCs help students learn about technology from Google. The GDSC USeP Obrero chapter has over 200 members and aims to teach computing skills through collaborative projects. The chapter has hosted various events teaching skills like Android development, Flutter, and Google Cloud. Upcoming events are proposed on topics such as web development, APIs, Git, and machine learning with TensorFlow. The document promotes an upcoming Solutions Challenge competition for students to solve UN sustainability goals using Google technologies.
Intro to free and open source software for geospatialLluís Vicens
This document provides information about an Open Web Services and Web Mapping Applications Summer School. It includes details about the schedule, topics to be covered like introductions to free and open source software and OSGeo projects. It also summarizes OSGeo as a nonprofit that supports open geospatial technologies through financial, organizational and technical support. OSGeo aims to promote sharing of resources, data, standards and encourage cooperation across communities.
This document provides an overview and timeline of SWAD, an open source learning management system developed at the University of Granada since 1999. It discusses the history and features of SWAD, the process of releasing it as free and open source software in 2010, usage statistics from its deployment at the University of Granada, and efforts to promote its international adoption through openswad.org since 2012. The success of SWAD at the university is attributed to it being open to the entire institution, training for teachers, user support, development driven by user requests, and its functionality, usability, simplicity and reliability.
This document provides an overview and timeline of the development of SWAD, an open-source learning management system created at the University of Granada in 1999. It discusses the initial creation of SWAD to manage courses and students, its release as free and open-source software in 2010, and the subsequent creation of openswad.org to offer the platform for free worldwide. The summary also notes that SWAD has been used by over 150,000 users at the University of Granada and details some of the keys to its success there, such as being open to the entire university.
This document summarizes the history, features, implementation, and release of the open-source learning management system called SWAD. It began as an internal project at the University of Granada in 1999. Key points include:
- SWAD's core was written in C for speed and stability and can run on low-power devices like Raspberry Pi.
- It has been continuously developed over 20 years with features for online courses, groups, assignments and more.
- In 2010, SWAD was released as free and open-source software to encourage collaborative development and improve code quality.
The Google Developer Student Clubs program overview document summarizes the program as follows:
Google Developer Student Clubs are university-based communities for students interested in Google developer technologies where students can learn technologies in a peer-to-peer environment. There are now over 1,900 clubs across 113 countries that train thousands of student developers on Google technologies and empower them to solve real-world problems in their local communities. The goal of the clubs is to help students grow as developers and impact their communities through technology.
This document provides information about the Google Developer Student Club (GDSC) at the University of Southeastern Philippines Obrero. It discusses that GDSCs help students learn about technology from Google. The GDSC USeP Obrero chapter has over 200 members and aims to teach computing skills through collaborative projects. The chapter has hosted various events teaching skills like Android development, Flutter, and Google Cloud. Upcoming events are proposed on topics such as web development, APIs, Git, and machine learning with TensorFlow. The document promotes an upcoming Solutions Challenge competition for students to solve UN sustainability goals using Google technologies.
Intro to free and open source software for geospatialLluís Vicens
This document provides information about an Open Web Services and Web Mapping Applications Summer School. It includes details about the schedule, topics to be covered like introductions to free and open source software and OSGeo projects. It also summarizes OSGeo as a nonprofit that supports open geospatial technologies through financial, organizational and technical support. OSGeo aims to promote sharing of resources, data, standards and encourage cooperation across communities.
Hello, When all tech-savvy's come together, they revolutionize the world! With this belief, Introducing, Developer Student Clubs for the very first time at Government College of Engineering!
We are delighted to announce our first event under DSC GCOEN chapter - " The Intro Session"
This is an introductory event ,where you'll get to know about DSC, our DSC chapter, activities involved, future events planned, and how you can benefit from it
This document discusses the development of a mobile learning diary application for a MOOC (Massive Open Online Course) platform called iMooX. The goal was to create Android and iOS apps to help students keep track of courses, events, and learning progress. A prototype app was designed and then working apps were developed for both platforms. The apps were tested through surveys, with most students reporting that the app helped increase their learning progress and keep organized. While the apps showed promise, limitations around offline usage, gamification, and login functionality need further work. Overall, the project demonstrated how a mobile learning diary app can support students on a MOOC platform.
This document provides information about Google Summer of Code (GSoC) and how Drupal participates in the program. GSoC is a program that pairs university students with open source organizations to work on software projects over the summer. Students earn a stipend for their work. The document discusses Drupal's involvement in past GSoC programs, including the number of projects and students. It provides timelines and eligibility requirements for GSoC. It also gives tips for how students can get involved with Drupal, such as participating in IRC chats or answering questions on Drupal Answers.
GDSC VU have organized an in person intro session on "Google Solution Challenge 2023".
During the event, the purpose of the challenge was introduced and the United Nations' 17 Sustainable Development Goals were briefly discussed. Participants, mostly members from GDSC VU Chapter, talked about the problems they are personally facing related to the SDGs and shared examples of real-world problems that need solutions. For ideas we have arranged panel talk with GDSC VU Lead Zainab Sehar and GDSC VU Core Team members Mustabshira Zahoor,Muhammad Abubaker and Haseeb Ahmed , to solve students queries and helped them how they can implement their ideas that global/local communities facing.
This led to excitement among the students to participate in the Google Solution Challenge 2023.
At the end we have played game based on quizzes related to GDSC and Google Solution challenge,top three winner got datacamp subscription.
Maandag 9 november
Sessieronde 1
Titel: Dashboards voor learning analytics
Spreker(s): Renée Filius (Elevate), Alan Berg (Universiteit van Amsterdam)
Zaal: Rotterdam Hall
This document provides information about an information session on Google Developer Student Clubs (GDSC) held at Gayatri Vidya Parishad College of Engineering for Women in Visakhapatnam. The session welcomed students and introduced Shweta Evangeline as the GDSC Lead for 2023-24. It defined GDSC as university-based community groups for students interested in Google developer technologies. The session discussed the benefits of GDSC including workshops, networking events, hackathons and competitions. It noted that GDSC is open to all students regardless of department and does not require any fees. The session provided an overview of activities planned for the 2023-24 year and introduced the GDS
This document provides information about an information session on Google Developer Student Clubs (GDSC) held at Gayatri Vidya Parishad College of Engineering for Women in Visakhapatnam. The session welcomed students and introduced Shweta Evangeline as the GDSC Lead for 2023-24. It defined GDSC as university-based community groups for students interested in Google developer technologies. The session discussed the benefits of GDSC including workshops, networking events, hackathons and competitions. It clarified that students of any branch can join and that there is no registration fee. The session provided an overview of GDSC's activities for 2023-24 and introduced the core team coordinating
This document provides information about the Google Developer Student Club (GDSC) at TU/e. It introduces the core team and leadership roles. It describes GDSC as a program by Google Developers to bridge theory and practice. It outlines upcoming tech and non-tech events, including hackathons, coding contests, and social events. It also discusses projects from the previous year, internship opportunities, the annual Solution Challenge, and how to stay connected through their Discord channel, Instagram, and email.
It’s time to start a new journey filled with suprises and quests. We at Google Developer Student Clubs, IIT Patna congratulates Freshers Batch’22 for making this far.
We had our Introductory session on 15/11/22 from 8:30 PM to 9:30 PM in room number 107, Block 9, IIT Patna.
Regardless of one’s technical knowledge, they can participate in our club activities and learn various domains like Blockchain, Web Development, Android Development, and more. Remember, there are no branch barriers and no prerequisites required so all can learn together.
Fostering pre-university student participation in OSGeo through the Google Co...Jeff McKenna
The document discusses OSGeo's participation in the 2017 Google Code-in competition. Some key points:
- OSGeo had 20 volunteers who mentored over 600 students on tasks for 11 OSGeo projects.
- The majority of students were from India and the US and completed tasks in areas like outreach, documentation, and coding.
- Mentors provided feedback that it was a learning experience for OSGeo's first time participating and that some students struggled without sufficient guidance.
- Lessons included preventing plagiarism, clarifying task requirements, and managing the large time commitment required from mentors.
The document discusses an info session for a Developer Student Club (DSC) program hosted by Ahmed Hany. The DSC program, run through Google Developers, aims to teach students mobile and web development, design thinking, and leadership skills. It bridges the gap between theory and practice for students. The session outlines the types of online and in-person events DSC hosts, including meetups, workshops, talks, and showcases. It also promotes several technical tracks like Android development, web development, cloud computing and machine learning. Finally, it announces the #GCPCrashCourse program, a hands-on learning event on Google Cloud Platform through Qwiklabs where students can earn badges by completing quests in different tracks
Open Source Portal and Mobile SolutionsAaron Grant
In this session we will show our student portal system and mobile app, MySAIL, and how we integrate it with Banner data. In our portal we display to students their class schedules, mid-term and final grades, financial aid information, progress to degree/capp, and other general student information. Additionally we use CAS, an open source project, to allow for single sign-on between MySAIL, Moodle, Banner Self Service and more.
Academic Innovation Data Showcase 2-14-19umichiganai
On Thursday, February 14 from 9:30 a.m. to 12:00 p.m. the Office of Academic Innovation hosted our first Data Showcase - an event for all University of Michigan (U-M) community members to come take a tour through the data that power our work.
🚀 GDSC Orientation Program 2023-24
Are you ready to ignite your passion for technology and innovation? 🌟
Join us at the prestigious Sipna College of Engineering and Technology for a thrilling journey into the world of tech, learning, and skill development! 🚀
🏫 Venue: Seminar Hall
📅 Date: Friday, August 25th, 2023
🕒 Time: 3 PM Onwards
🌐 Event Highlights 🌐
✨ Tech Exploration: Discover the latest trends and advancements in the tech industry.
🧑🏫 Expert Insights: Interact with industry experts and gain invaluable knowledge.
🤝 Networking: Build connections with like-minded tech enthusiasts and professionals.
👨💻 Hands-On Workshops: Get your hands on cutting-edge technologies through interactive workshops.
💼 Career Opportunities: Learn about exciting career prospects in the tech world.
📈 Skill Development: Enhance your skills and stay ahead in the competitive tech landscape.
🎉 Why Attend? 🎉
The GDSC Orientation Program 2023-24 is your gateway to a future filled with endless possibilities. Whether you're a seasoned techie or just beginning your tech journey, this event promises to enrich your knowledge and broaden your horizons.
Don't miss out on this incredible opportunity to shape your future in the tech industry. Mark your calendar for August 25th, 2023, at 3 PM, and join us at the Seminar Hall of Sipna College of Engineering and Technology.
👉 RSVP Today! Your tech adventure begins here! 🚀
This document provides an overview and introduction to the Google Developer Student Club (GDSC) at IIIT Vadodara. It describes what GDSC is, its goals of connecting, learning and growing students' skills, and the roles and events of its various domains including Web Development, App Development, UI/UX, Open Source, Management, and others. The document encourages students to get involved as volunteers or leads and learn new skills through GDSC's workshops and events.
VII Jornadas eMadrid "Education in exponential times". "Open Analytics in an ...eMadrid network
VII Jornadas eMadrid "Education in exponential times". "Open Analytics in an Open Source ecosystem". Miguel Pellicer. Entornos de Formación. Fundación APEREO. 05/07/2017.
Artificia Intellicence and XPath Extension FunctionsOctavian Nadolu
The purpose of this presentation is to provide an overview of how you can use AI from XSLT, XQuery, Schematron, or XML Refactoring operations, the potential benefits of using AI, and some of the challenges we face.
OpenMetadata Community Meeting - 5th June 2024OpenMetadata
The OpenMetadata Community Meeting was held on June 5th, 2024. In this meeting, we discussed about the data quality capabilities that are integrated with the Incident Manager, providing a complete solution to handle your data observability needs. Watch the end-to-end demo of the data quality features.
* How to run your own data quality framework
* What is the performance impact of running data quality frameworks
* How to run the test cases in your own ETL pipelines
* How the Incident Manager is integrated
* Get notified with alerts when test cases fail
Watch the meeting recording here - https://www.youtube.com/watch?v=UbNOje0kf6E
Hello, When all tech-savvy's come together, they revolutionize the world! With this belief, Introducing, Developer Student Clubs for the very first time at Government College of Engineering!
We are delighted to announce our first event under DSC GCOEN chapter - " The Intro Session"
This is an introductory event ,where you'll get to know about DSC, our DSC chapter, activities involved, future events planned, and how you can benefit from it
This document discusses the development of a mobile learning diary application for a MOOC (Massive Open Online Course) platform called iMooX. The goal was to create Android and iOS apps to help students keep track of courses, events, and learning progress. A prototype app was designed and then working apps were developed for both platforms. The apps were tested through surveys, with most students reporting that the app helped increase their learning progress and keep organized. While the apps showed promise, limitations around offline usage, gamification, and login functionality need further work. Overall, the project demonstrated how a mobile learning diary app can support students on a MOOC platform.
This document provides information about Google Summer of Code (GSoC) and how Drupal participates in the program. GSoC is a program that pairs university students with open source organizations to work on software projects over the summer. Students earn a stipend for their work. The document discusses Drupal's involvement in past GSoC programs, including the number of projects and students. It provides timelines and eligibility requirements for GSoC. It also gives tips for how students can get involved with Drupal, such as participating in IRC chats or answering questions on Drupal Answers.
GDSC VU have organized an in person intro session on "Google Solution Challenge 2023".
During the event, the purpose of the challenge was introduced and the United Nations' 17 Sustainable Development Goals were briefly discussed. Participants, mostly members from GDSC VU Chapter, talked about the problems they are personally facing related to the SDGs and shared examples of real-world problems that need solutions. For ideas we have arranged panel talk with GDSC VU Lead Zainab Sehar and GDSC VU Core Team members Mustabshira Zahoor,Muhammad Abubaker and Haseeb Ahmed , to solve students queries and helped them how they can implement their ideas that global/local communities facing.
This led to excitement among the students to participate in the Google Solution Challenge 2023.
At the end we have played game based on quizzes related to GDSC and Google Solution challenge,top three winner got datacamp subscription.
Maandag 9 november
Sessieronde 1
Titel: Dashboards voor learning analytics
Spreker(s): Renée Filius (Elevate), Alan Berg (Universiteit van Amsterdam)
Zaal: Rotterdam Hall
This document provides information about an information session on Google Developer Student Clubs (GDSC) held at Gayatri Vidya Parishad College of Engineering for Women in Visakhapatnam. The session welcomed students and introduced Shweta Evangeline as the GDSC Lead for 2023-24. It defined GDSC as university-based community groups for students interested in Google developer technologies. The session discussed the benefits of GDSC including workshops, networking events, hackathons and competitions. It noted that GDSC is open to all students regardless of department and does not require any fees. The session provided an overview of activities planned for the 2023-24 year and introduced the GDS
This document provides information about an information session on Google Developer Student Clubs (GDSC) held at Gayatri Vidya Parishad College of Engineering for Women in Visakhapatnam. The session welcomed students and introduced Shweta Evangeline as the GDSC Lead for 2023-24. It defined GDSC as university-based community groups for students interested in Google developer technologies. The session discussed the benefits of GDSC including workshops, networking events, hackathons and competitions. It clarified that students of any branch can join and that there is no registration fee. The session provided an overview of GDSC's activities for 2023-24 and introduced the core team coordinating
This document provides information about the Google Developer Student Club (GDSC) at TU/e. It introduces the core team and leadership roles. It describes GDSC as a program by Google Developers to bridge theory and practice. It outlines upcoming tech and non-tech events, including hackathons, coding contests, and social events. It also discusses projects from the previous year, internship opportunities, the annual Solution Challenge, and how to stay connected through their Discord channel, Instagram, and email.
It’s time to start a new journey filled with suprises and quests. We at Google Developer Student Clubs, IIT Patna congratulates Freshers Batch’22 for making this far.
We had our Introductory session on 15/11/22 from 8:30 PM to 9:30 PM in room number 107, Block 9, IIT Patna.
Regardless of one’s technical knowledge, they can participate in our club activities and learn various domains like Blockchain, Web Development, Android Development, and more. Remember, there are no branch barriers and no prerequisites required so all can learn together.
Fostering pre-university student participation in OSGeo through the Google Co...Jeff McKenna
The document discusses OSGeo's participation in the 2017 Google Code-in competition. Some key points:
- OSGeo had 20 volunteers who mentored over 600 students on tasks for 11 OSGeo projects.
- The majority of students were from India and the US and completed tasks in areas like outreach, documentation, and coding.
- Mentors provided feedback that it was a learning experience for OSGeo's first time participating and that some students struggled without sufficient guidance.
- Lessons included preventing plagiarism, clarifying task requirements, and managing the large time commitment required from mentors.
The document discusses an info session for a Developer Student Club (DSC) program hosted by Ahmed Hany. The DSC program, run through Google Developers, aims to teach students mobile and web development, design thinking, and leadership skills. It bridges the gap between theory and practice for students. The session outlines the types of online and in-person events DSC hosts, including meetups, workshops, talks, and showcases. It also promotes several technical tracks like Android development, web development, cloud computing and machine learning. Finally, it announces the #GCPCrashCourse program, a hands-on learning event on Google Cloud Platform through Qwiklabs where students can earn badges by completing quests in different tracks
Open Source Portal and Mobile SolutionsAaron Grant
In this session we will show our student portal system and mobile app, MySAIL, and how we integrate it with Banner data. In our portal we display to students their class schedules, mid-term and final grades, financial aid information, progress to degree/capp, and other general student information. Additionally we use CAS, an open source project, to allow for single sign-on between MySAIL, Moodle, Banner Self Service and more.
Academic Innovation Data Showcase 2-14-19umichiganai
On Thursday, February 14 from 9:30 a.m. to 12:00 p.m. the Office of Academic Innovation hosted our first Data Showcase - an event for all University of Michigan (U-M) community members to come take a tour through the data that power our work.
🚀 GDSC Orientation Program 2023-24
Are you ready to ignite your passion for technology and innovation? 🌟
Join us at the prestigious Sipna College of Engineering and Technology for a thrilling journey into the world of tech, learning, and skill development! 🚀
🏫 Venue: Seminar Hall
📅 Date: Friday, August 25th, 2023
🕒 Time: 3 PM Onwards
🌐 Event Highlights 🌐
✨ Tech Exploration: Discover the latest trends and advancements in the tech industry.
🧑🏫 Expert Insights: Interact with industry experts and gain invaluable knowledge.
🤝 Networking: Build connections with like-minded tech enthusiasts and professionals.
👨💻 Hands-On Workshops: Get your hands on cutting-edge technologies through interactive workshops.
💼 Career Opportunities: Learn about exciting career prospects in the tech world.
📈 Skill Development: Enhance your skills and stay ahead in the competitive tech landscape.
🎉 Why Attend? 🎉
The GDSC Orientation Program 2023-24 is your gateway to a future filled with endless possibilities. Whether you're a seasoned techie or just beginning your tech journey, this event promises to enrich your knowledge and broaden your horizons.
Don't miss out on this incredible opportunity to shape your future in the tech industry. Mark your calendar for August 25th, 2023, at 3 PM, and join us at the Seminar Hall of Sipna College of Engineering and Technology.
👉 RSVP Today! Your tech adventure begins here! 🚀
This document provides an overview and introduction to the Google Developer Student Club (GDSC) at IIIT Vadodara. It describes what GDSC is, its goals of connecting, learning and growing students' skills, and the roles and events of its various domains including Web Development, App Development, UI/UX, Open Source, Management, and others. The document encourages students to get involved as volunteers or leads and learn new skills through GDSC's workshops and events.
VII Jornadas eMadrid "Education in exponential times". "Open Analytics in an ...eMadrid network
VII Jornadas eMadrid "Education in exponential times". "Open Analytics in an Open Source ecosystem". Miguel Pellicer. Entornos de Formación. Fundación APEREO. 05/07/2017.
Artificia Intellicence and XPath Extension FunctionsOctavian Nadolu
The purpose of this presentation is to provide an overview of how you can use AI from XSLT, XQuery, Schematron, or XML Refactoring operations, the potential benefits of using AI, and some of the challenges we face.
OpenMetadata Community Meeting - 5th June 2024OpenMetadata
The OpenMetadata Community Meeting was held on June 5th, 2024. In this meeting, we discussed about the data quality capabilities that are integrated with the Incident Manager, providing a complete solution to handle your data observability needs. Watch the end-to-end demo of the data quality features.
* How to run your own data quality framework
* What is the performance impact of running data quality frameworks
* How to run the test cases in your own ETL pipelines
* How the Incident Manager is integrated
* Get notified with alerts when test cases fail
Watch the meeting recording here - https://www.youtube.com/watch?v=UbNOje0kf6E
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Crescat
Crescat is industry-trusted event management software, built by event professionals for event professionals. Founded in 2017, we have three key products tailored for the live event industry.
Crescat Event for concert promoters and event agencies. Crescat Venue for music venues, conference centers, wedding venues, concert halls and more. And Crescat Festival for festivals, conferences and complex events.
With a wide range of popular features such as event scheduling, shift management, volunteer and crew coordination, artist booking and much more, Crescat is designed for customisation and ease-of-use.
Over 125,000 events have been planned in Crescat and with hundreds of customers of all shapes and sizes, from boutique event agencies through to international concert promoters, Crescat is rigged for success. What's more, we highly value feedback from our users and we are constantly improving our software with updates, new features and improvements.
If you plan events, run a venue or produce festivals and you're looking for ways to make your life easier, then we have a solution for you. Try our software for free or schedule a no-obligation demo with one of our product specialists today at crescat.io
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Łukasz Chruściel
No one wants their application to drag like a car stuck in the slow lane! Yet it’s all too common to encounter bumpy, pothole-filled solutions that slow the speed of any application. Symfony apps are not an exception.
In this talk, I will take you for a spin around the performance racetrack. We’ll explore common pitfalls - those hidden potholes on your application that can cause unexpected slowdowns. Learn how to spot these performance bumps early, and more importantly, how to navigate around them to keep your application running at top speed.
We will focus in particular on tuning your engine at the application level, making the right adjustments to ensure that your system responds like a well-oiled, high-performance race car.
Microservice Teams - How the cloud changes the way we workSven Peters
A lot of technical challenges and complexity come with building a cloud-native and distributed architecture. The way we develop backend software has fundamentally changed in the last ten years. Managing a microservices architecture demands a lot of us to ensure observability and operational resiliency. But did you also change the way you run your development teams?
Sven will talk about Atlassian’s journey from a monolith to a multi-tenanted architecture and how it affected the way the engineering teams work. You will learn how we shifted to service ownership, moved to more autonomous teams (and its challenges), and established platform and enablement teams.
Graspan: A Big Data System for Big Code AnalysisAftab Hussain
We built a disk-based parallel graph system, Graspan, that uses a novel edge-pair centric computation model to compute dynamic transitive closures on very large program graphs.
We implement context-sensitive pointer/alias and dataflow analyses on Graspan. An evaluation of these analyses on large codebases such as Linux shows that their Graspan implementations scale to millions of lines of code and are much simpler than their original implementations.
These analyses were used to augment the existing checkers; these augmented checkers found 132 new NULL pointer bugs and 1308 unnecessary NULL tests in Linux 4.4.0-rc5, PostgreSQL 8.3.9, and Apache httpd 2.2.18.
- Accepted in ASPLOS ‘17, Xi’an, China.
- Featured in the tutorial, Systemized Program Analyses: A Big Data Perspective on Static Analysis Scalability, ASPLOS ‘17.
- Invited for presentation at SoCal PLS ‘16.
- Invited for poster presentation at PLDI SRC ‘16.
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppGoogle
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
👉👉 Click Here To Get More Info 👇👇
https://sumonreview.com/ai-fusion-buddy-review
AI Fusion Buddy Review: Key Features
✅Create Stunning AI App Suite Fully Powered By Google's Latest AI technology, Gemini
✅Use Gemini to Build high-converting Converting Sales Video Scripts, ad copies, Trending Articles, blogs, etc.100% unique!
✅Create Ultra-HD graphics with a single keyword or phrase that commands 10x eyeballs!
✅Fully automated AI articles bulk generation!
✅Auto-post or schedule stunning AI content across all your accounts at once—WordPress, Facebook, LinkedIn, Blogger, and more.
✅With one keyword or URL, generate complete websites, landing pages, and more…
✅Automatically create & sell AI content, graphics, websites, landing pages, & all that gets you paid non-stop 24*7.
✅Pre-built High-Converting 100+ website Templates and 2000+ graphic templates logos, banners, and thumbnail images in Trending Niches.
✅Say goodbye to wasting time logging into multiple Chat GPT & AI Apps once & for all!
✅Save over $5000 per year and kick out dependency on third parties completely!
✅Brand New App: Not available anywhere else!
✅ Beginner-friendly!
✅ZERO upfront cost or any extra expenses
✅Risk-Free: 30-Day Money-Back Guarantee!
✅Commercial License included!
See My Other Reviews Article:
(1) AI Genie Review: https://sumonreview.com/ai-genie-review
(2) SocioWave Review: https://sumonreview.com/sociowave-review
(3) AI Partner & Profit Review: https://sumonreview.com/ai-partner-profit-review
(4) AI Ebook Suite Review: https://sumonreview.com/ai-ebook-suite-review
#AIFusionBuddyReview,
#AIFusionBuddyFeatures,
#AIFusionBuddyPricing,
#AIFusionBuddyProsandCons,
#AIFusionBuddyTutorial,
#AIFusionBuddyUserExperience
#AIFusionBuddyforBeginners,
#AIFusionBuddyBenefits,
#AIFusionBuddyComparison,
#AIFusionBuddyInstallation,
#AIFusionBuddyRefundPolicy,
#AIFusionBuddyDemo,
#AIFusionBuddyMaintenanceFees,
#AIFusionBuddyNewbieFriendly,
#WhatIsAIFusionBuddy?,
#HowDoesAIFusionBuddyWorks
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j
Dr. Jesús Barrasa, Head of Solutions Architecture for EMEA, Neo4j
Découvrez les dernières innovations de Neo4j, et notamment les dernières intégrations cloud et les améliorations produits qui font de Neo4j un choix essentiel pour les développeurs qui créent des applications avec des données interconnectées et de l’IA générative.
8 Best Automated Android App Testing Tool and Framework in 2024.pdfkalichargn70th171
Regarding mobile operating systems, two major players dominate our thoughts: Android and iPhone. With Android leading the market, software development companies are focused on delivering apps compatible with this OS. Ensuring an app's functionality across various Android devices, OS versions, and hardware specifications is critical, making Android app testing essential.
Using Query Store in Azure PostgreSQL to Understand Query PerformanceGrant Fritchey
Microsoft has added an excellent new extension in PostgreSQL on their Azure Platform. This session, presented at Posette 2024, covers what Query Store is and the types of information you can get out of it.
SOCRadar's Aviation Industry Q1 Incident Report is out now!
The aviation industry has always been a prime target for cybercriminals due to its critical infrastructure and high stakes. In the first quarter of 2024, the sector faced an alarming surge in cybersecurity threats, revealing its vulnerabilities and the relentless sophistication of cyber attackers.
SOCRadar’s Aviation Industry, Quarterly Incident Report, provides an in-depth analysis of these threats, detected and examined through our extensive monitoring of hacker forums, Telegram channels, and dark web platforms.
SMS API Integration in Saudi Arabia| Best SMS API ServiceYara Milbes
Discover the benefits and implementation of SMS API integration in the UAE and Middle East. This comprehensive guide covers the importance of SMS messaging APIs, the advantages of bulk SMS APIs, and real-world case studies. Learn how CEQUENS, a leader in communication solutions, can help your business enhance customer engagement and streamline operations with innovative CPaaS, reliable SMS APIs, and omnichannel solutions, including WhatsApp Business. Perfect for businesses seeking to optimize their communication strategies in the digital age.
Transform Your Communication with Cloud-Based IVR SolutionsTheSMSPoint
Discover the power of Cloud-Based IVR Solutions to streamline communication processes. Embrace scalability and cost-efficiency while enhancing customer experiences with features like automated call routing and voice recognition. Accessible from anywhere, these solutions integrate seamlessly with existing systems, providing real-time analytics for continuous improvement. Revolutionize your communication strategy today with Cloud-Based IVR Solutions. Learn more at: https://thesmspoint.com/channel/cloud-telephony
Software Engineering, Software Consulting, Tech Lead, Spring Boot, Spring Cloud, Spring Core, Spring JDBC, Spring Transaction, Spring MVC, OpenShift Cloud Platform, Kafka, REST, SOAP, LLD & HLD.
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemPeter Muessig
Learn about the latest innovations in and around OpenUI5/SAPUI5: UI5 Tooling, UI5 linter, UI5 Web Components, Web Components Integration, UI5 2.x, UI5 GenAI.
Recording:
https://www.youtube.com/live/MSdGLG2zLy8?si=INxBHTqkwHhxV5Ta&t=0
Revolutionizing Visual Effects Mastering AI Face Swaps.pdfUndress Baby
The quest for the best AI face swap solution is marked by an amalgamation of technological prowess and artistic finesse, where cutting-edge algorithms seamlessly replace faces in images or videos with striking realism. Leveraging advanced deep learning techniques, the best AI face swap tools meticulously analyze facial features, lighting conditions, and expressions to execute flawless transformations, ensuring natural-looking results that blur the line between reality and illusion, captivating users with their ingenuity and sophistication.
Web:- https://undressbaby.com/
DDS Security Version 1.2 was adopted in 2024. This revision strengthens support for long runnings systems adding new cryptographic algorithms, certificate revocation, and hardness against DoS attacks.
DDS-Security 1.2 - What's New? Stronger security for long-running systems
SWAD timeline
1. SWAD, an Open
Learning Management System
Including timeline implementation
Antonio Cañas
University of Granada (UGR)
@acanasvargas acanas@ugr.es acanas@openswad.org
https://openswad.org/ @openswad
SWAD, an Open
Learning Management System
Including timeline implementation
Antonio Cañas
University of Granada (UGR)
@acanasvargas acanas@ugr.es acanas@openswad.org
https://openswad.org/ @openswad
1
1
Antonio Cañas et al.
May 27, 2022, Granada, Spain
May 27, 2022, Granada, Spain
2. Contents
●
History
●
Summary of features
●
swad.ugr.es
●
Figures
●
Keys to success
●
OpenSWAD
●
Project
●
Advertising
●
Figures
●
Free software
●
Implementation
●
Timeline
●
Notes & publications
●
Database
●
Getting publications
●
Showing publications
●
Layout
●
Inserting links
●
Future goals and tasks
●
Conclusions
●
About us
3. History
“The best time to plant a tree was 20 years ago.
The second best time is now.”
Chinese proverb
History
“The best time to plant a tree was 20 years ago.
The second best time is now.”
Chinese proverb
4. History
●
LMS in 2022: a very broad offer
●
Hundreds of LMS
●
proprietary / free software
●
expensive / free of charge
●
installable on the client's servers / accessible in the cloud
7. ...but in 1999 not so many available → we started to develop our own system:
Sistema Web de Apoyo a la Docencia
(Web System for Teaching Support)
⬇
Social Workspace At a Distance
https://swad.ugr.es/ https://openswad.org/
A web platform to manage courses, students and teachers,
with functions to support teaching and learning.
History
8. Dpt.ATC: 1999-2003
1º TIP: 2003-2004
2º TIP: 2005-2006
3º TIP: 2006-2008
V.L.Center:2008-2016
Free Software: 2010...
UNA.py: 2012-2014
OpenSWAD: 2012…
Dpt.ATC: 2016...
History
openswad.org
2012...
ugr.es CEVUG
2008-2016
ugr.es TIPs
2003-2008
ugr.es ATC
1999-2003
una.py
2012-2015
ugr.es ATC
2016...
23 years of development and use
free software
2010...
9. Summary of features
“swad: a bunch, a grouping
of a number of similar things”
.
https://www.thefreedictionary.com/swad
Summary of features
“swad: a bunch, a grouping
of a number of similar things”
.
https://www.thefreedictionary.com/swad
10. Summary of features
This is how it looks.
Some parts of its appearance,
such as colors or icons, are customizable
11. Summary of features
Free software · 9 languages · Responsive design · Android app
· Face-to-face or blended learning
Hierarchical organization: System · Countries · Institutions
(universities, companies) · Centers (faculties, schools) ·
Degrees · Courses · Group types · Groups
10 available roles: Unknown · Guest · User · Student · Non-
editing teacher · Teacher · Degree admin · Center admin ·
Institution admin · System admin
12. Summary of features
Social network · Calendar · Notifications · Course
information · Syllabus · Documents · Shared files ·
Portfolio · Grades · Assignments · Projects · Exam
announcements · Quizzes · Exams · Games · Surveys ·
Groups · Lists of students and teachers · Attendance
control using QR codes · Forums · Notices · Messaging
system · Statistics · Agenda · Preferences
All features in https://github.com/acanas/swad-core/wiki/UserGuide.en
13. swad.ugr.es: Figures
“What goes up,
must come down”
“What goes up”, The Alan Parsons Project - British rock band
swad.ugr.es: Figures
“What goes up,
must come down”
“What goes up”, The Alan Parsons Project - British rock band
14. 485 million
clicks (page views)
389
million
(80%)
students
26
million
(5%)
teachers
69
million
(14%)
others
1
million
(<1%)
admin.
swad.ugr.es: Figures (Jan 2005 May
→ 2022)
15. 199,794
users have used the platform
174,879
(88%)
as students
3933
(2%)
as teachers
36,479
(18%)
as guests
133
(<1%)
as admin.
swad.ugr.es: Figures (Jan 2005 May
→ 2022)
26. swad.ugr.es:
keys to success
“Want your users to fall in love with your designs?
Fall in love with your users.”
Dana Chisnell - Designer and usability researcher
swad.ugr.es:
keys to success
“Want your users to fall in love with your designs?
Fall in love with your users.”
Dana Chisnell - Designer and usability researcher
27. swad.ugr.es: Keys to success
●
#1: Platform open to the entire University since 2004
I Meeting of SWAD Users
29. swad.ugr.es: Keys to success
●
#3: User support: thousands of queries answered
Thank you for your help and efficiency...
and for having designed a computer invention that really works,
which reconciles me with the new technologies...
30. ●
#4: Developed according to the users’ requests
swad.ugr.es: Keys to success
A user wants the platform
to congratulate him
on his birthday...
Days later a new feature
congratulates users
for their birthdays.
31. swad.ugr.es: Keys to success
●
#5: Strengths of the tool
●
Functionality and usability
●
Simplicity
●
It has what most teachers asked
●
Reliability and safety
●
It consumes few resources
●
It works 24 hours, fast and almost without failures
32. OpenSWAD: Project
“A planet is the cradle of mind,
but one cannot live in a cradle forever.”
Konstantin Tsiolkovski - Russian physicist
OpenSWAD: Project
“A planet is the cradle of mind,
but one cannot live in a cradle forever.”
Konstantin Tsiolkovski - Russian physicist
33. OpenSWAD: Project
●
SWAD outside the UGR after release
●
Little diffusion
●
Difficult to reach the target audience (need for advertising)
●
Absence of simple installation
●
Many competitors
●
Many LMS, some of them very widespread
●
Released as free software too late (2010)
●
A lot of work, small team
●
Conclusion
●
Very few (two or three) installations
34. OpenSWAD: Project
●
OpenSWAD.org is an installation in the cloud of the SWAD educational
platform, offered free of charge for any country by the OpenSWAD
Association (non-profit organization, independent of the UGR)
●
OpenSWAD.org is available since 2012, but it did not start growing until
2015, when we decided to carry out advertising campaigns
35. OpenSWAD: Project
●
Why “Open”?
●
Free software
●
So open source
●
Open and free for everyone
●
Open design and interaction
●
You can access many features (hierarchy, courses, teachers, statistics) even if you are not logged in
●
Open content allowed
●
Upload, mark as public and choose license
●
Anyone could access, even without log in
36. OpenSWAD: Project
Steps for internationalization:
1. Code independent from the institution (100%)
2. Translation to 9 languages (90%)
3. ISO 8601 format for date-times (100%)
4. Dates-hours independent of location (100%)
5. Calendars independent of location (100%)
6. Weeks starting on Monday or Sunday (100%)
7. Floating point / comma format (10%)
37. OpenSWAD: Advertising
“Doing business without advertising is like winking at
a girl in the dark. You know what you are doing, but
nobody else does.”
Steuart Henderson Britt - American professor of marketing
OpenSWAD: Advertising
“Doing business without advertising is like winking at
a girl in the dark. You know what you are doing, but
nobody else does.”
Steuart Henderson Britt - American professor of marketing
38. OpenSWAD.org: Advertising
2,600,000 ad impressions on Twitter and Facebook
2,600,000 ad impressions on Twitter and Facebook
2600 filled in their data (50%)
2600 filled in their data (50%)
260 created center, degree, course (10%)
260 created center, degree, course (10%)
130,000 clicked link (5%)
130,000 clicked link (5%)
5200 created account (
5200 created account (4%
4%)
)
130 enrolled in course (50%)
130 enrolled in course (50%)
65 created course content (50%)
65 created course content (50%)
13 used with students (20%, 5 per million)
13 used with students (20%, 5 per million)
Example: Feb. 2015 March 2016
→
Conversion funnel
39. OpenSWAD.org: Advertising
Cost Dates Days Cost/day Impressions Clicks Cost/click
Twitter 4650.29€ Feb 12, 2015
Sep 25, 2017
956 4.86 € 14,042,284 50,119 €0.108
Facebook 2400.84€ Sep 26, 2015
Sep 25, 2017
730 3.29 € 12,858,591 192,833 €0.012
AdWords 1255.93€ Feb 16, 2017
Sep 25, 2017
221 5.68 € 392,298 15,046 €0.083
Total 8307.06€ Feb 12, 2015
Sep 25, 2017
956 8.69 € 27,293,173 257,998 €0.032
Courses Teachers Students Total users
Courses or users with real use 528 385 1657 18 411
Cost per course or user €15,73 €21,58 €5,01 €0,45
Cost of advertising (2015 2017)
→
40. OpenSWAD.org: Advertising
Cost Dates Days Impresiones Clicks Page views Users New
accounts
New
courses
Twitter €66.20 Sep 6 -
Sep 24,
2017
7
€9.46 /
day
271,072
€0.00024 /
impression
734
€0.09 /
click
14 632
€0.0045 /
page view
342
€0.19 /
user
186
€0.36 / new
account
10
€6.62 / new
course
Facebook €109.66 Sep 7 -
Sep 25,
2017
7
€15.66 /
day
148,206
€0.00074 /
impression
3780
€0.03 /
click
33 087
€0.0033 /
page view
274
€0.40 /
user
114
€0.96 / new
account
12
€9.14 / new
course
AdWords €65.83 Sep 5 -
Sep 23,
2017
7
€9.40 /
day
13,210
€0.00498 /
impression
808
€0.08 /
click
11 169
€0.0060 /
page view
243
€0.27 /
user
94
€0.70 / new
account
7
€9.40 / new
course
Total €241.69 Sep 5 -
Sep 25,
2017
21
€11.51 /
day
432,488
€0.00056 /
impression
5322
€0.05 /
click
58 888
€0.0041 /
page view
859
€0.28 /
user
394
€0.61 / new
account
29
€8.33 / new
course
Conversion comparison (2017)
41. OpenSWAD: Figures
“Y si no me quieres ver, ya sabes que
seguro que hay alguien que querrá.”
“Volverás”, Niños Mutantes – Spanish indie rock band
OpenSWAD: Figures
“Y si no me quieres ver, ya sabes que
seguro que hay alguien que querrá.”
“Volverás”, Niños Mutantes – Spanish indie rock band
45. First countries in OpenSWAD according to number of users
First countries in OpenSWAD according to number of users
OpenSWAD: Users / country
34,803 users
from 152 countries
46. OpenSWAD: Users / country
●
A report on OpenSWAD was even broadcast on a Latin American TV channel
OpenSWAD in Atomun, Telesur TV (Venezuela), July 2017
51. Free software
“You're frozen
When your heart's not open”
“Frozen”, Madonna - American singer-songwriter
Free software
“You're frozen
When your heart's not open”
“Frozen”, Madonna - American singer-songwriter
53. Free software
●
Steps to release the core:
1. Code (names, comments) in English (100%)
2. Code independent from the UGR (100%)
3. Translation to 9 languages (90%)
4. Add AGPL headers to files (100%)
5. Publish the source code (100%) https://openswad.org/source/
6. Publish the installation procedure (100%) https://openswad.org/install/
7. Use git version control system (100%)
8. Upload to GitHub (100%) https://github.com/acanas/swad-core
9. Desirable: automate installation (20%)
54. Free software
●
Because it facilitates collaborative development
Fourth Hackathon of free software projects of the UGR, 2012. Photo: A. Cañas
55. Free software
●
Because it encourages better programming
@psicobyte_ explains the benefits of free software. Photo: A. Cañas
56. Free software
●
Because it improves the code quality
Hackathon of SWADroid and SWAD, 2013. Photo: A. Cañas
58. Implementation
“Every step that you take
Could be your biggest mistake
It could bend or it could break
That's the risk that you take”
“What If”, Coldplay - British rock band
Implementation
“Every step that you take
Could be your biggest mistake
It could bend or it could break
That's the risk that you take”
“What If”, Coldplay - British rock band
59. How much work is behind?
swad-core SWADroid
Affero GPL v3 license
https://github.com/acanas/swad-core
GPL v3 license
https://github.com/Amab/SWADroid
364,503
C code lines
144
MySQL tables
60,761
Java code lines
17K
downloads
95 person-years
estimated effort*
14 person-years
estimated effort*
$5,239,555
estimated cost*
$793,894
estimated cost*
Other modules and more info: https://openswad.org/source
* According to the COCOMO model in Open Hub
60. The core
●
Written from scratch in C
(compiled, not interpreted)
✔Advantages:
●
+ speed
●
- memory
●
Functional even in a Raspberry Pi
●
+ stability of source code over time
✘Disadvantages:
●
absence of specialized library functions for the web
61. 2nd: 2004-2006
Pentium 4 HT
RAM 2 GiB
2 HD 160 GB
Fedora 3
3rd: 2007-2008
Core 2 Duo
RAM 4 GiB
2 HD 500 GB
Fedora 6
4th: 2009-2010
Core 2 Quad
RAM 4 GiB
2 HD 146 GB
2 HD 1 TB
Fedora 10
5th: 2011-2016
2 Xeon Quad
RAM 24 GiB
4 HD 146 GB
4 HD 500 GB
CentOS 5.7
1st: 1999-2003
Shared server
Former servers at the UGR
62. Current server at the UGR (6th: 2016-2022)
●
HP Proliant DL160 G9, 2 Xeon with 6 cores, RAM 32 GiB
4 HD 146 GB
SAS 15000 rpm
RAID 1+0 (292 GB)
SO CentOS 7.2
MySQL database
4 HD 1 TB
SAS 7200 rpm
RAID 5 (3 TB)
Web files
( /var/www )
63. Plugins
●
It is possible to develop add-ons (plugins) that run on:
●
other servers
●
mobile devices. Example: SWADroid
●
The plugins interact with the swad core through an API:
https://openswad.org/api/
64. Photographs of users
●
Our own automatic system for detecting faces and
improving the quality of photos, trained with 90K photos
65. Up to 400K times per day
Up to 2000 times / minute (30 times / second)
Log
“click”
logged access
HTML5
server
database
swad-core
67. Log table
●
It allows analyzing a lot of information:
●
By role
●
By user
●
By action performed
●
By qualification
●
By subject
●
By dates
●
...
UGR: 485 million registered hits since 2005
68. Log table
Pages per minute
(averaged during an academic year)
teachers
students
69. Log table
Matches of the Soccer World Cup 2010
You can even see the rest in the match
71. Log table
●
What if we convert every click into a sound?
●
At 1 am:
http://swad.ugr.es/stat/clicks/clicks_1am.wav
●
At 1 pm:
http://swad.ugr.es/stat/clicks/clicks_1pm.wav
●
Peak (students choosing groups):
http://swad.ugr.es/stat/clicks/clicks_grupos.wav
72. Timeline:
Notes & Publications
“You think you know when you learn, are more sure
when you can write, even more when you can teach,
but certain when you can program.”
Alan Perlis - Computer scientist and professor
Timeline:
Notes & Publications
“You think you know when you learn, are more sure
when you can write, even more when you can teach,
but certain when you can program.”
Alan Perlis - Computer scientist and professor
73. Timeline: Notes & Publications
●
Timeline: set of publications
●
from a user
●
global
●
Only me
●
Followed users
●
All users
typedef enum
{
Tml_Usr_TIMELINE_USR,
Tml_Usr_TIMELINE_GBL,
} Tml_Usr_UsrOrGbl_t;
typedef enum
{
Usr_WHO_UNKNOWN,
Usr_WHO_ME,
Usr_WHO_SELECTED, // Not applicable to timeline
Usr_WHO_FOLLOWED,
Usr_WHO_ALL,
} Usr_Who_t;
74. Timeline: Notes & Publications
●
Publication: · original note (25393, 76% of 33504)
· shared note ( 1425, 4% of 33504)
· comment to a note ( 6686, 20% of 33504)
typedef enum
{
Tml_Pub_UNKNOWN = 0,
Tml_Pub_ORIGINAL_NOTE = 1,
Tml_Pub_SHARED_NOTE = 2,
Tml_Pub_COMMENT_TO_NOTE = 3,
} TmlPub_Type_t;
struct TmlPub_Publication
{
long PubCod; // Publication code
long NotCod; // Note code
long PublisherCod; // Sharer or writer of the publication
TmlPub_Type_t Type; // Original note, shared note, comment
struct TmlPub_Publication *Next; // Used for chained list
};
*swad.ugr.es, may 2022
75. Timeline: Notes & Publications
●
Note: timeline post ( 4755, 19% of 25393)
public file ( 66, <1% of 25393)
call for exam ( 2807, 11% of 25393)
notice (17480, 69% of 25393)
forum post ( 285, 1% of 25393)
*swad.ugr.es, may 2022
76. Timeline: Notes & Publications
typedef enum
{
TmlNot_UNKNOWN = 0,
/* Start tab */
TmlNot_POST = 10, // Post written directly in timeline
/* Institution tab */
TmlNot_INS_DOC_PUB_FILE = 1, // Public file in documents of institution
TmlNot_INS_SHA_PUB_FILE = 2, // Public file in shared files of institution
/* Center tab */
TmlNot_CTR_DOC_PUB_FILE = 3, // Public file in documents of center
TmlNot_CTR_SHA_PUB_FILE = 4, // Public file in shared files of center
/* Degree tab */
TmlNot_DEG_DOC_PUB_FILE = 5, // Public file in documents of degree
TmlNot_DEG_SHA_PUB_FILE = 6, // Public file in shared files of degree
/* Course tab */
TmlNot_CRS_DOC_PUB_FILE = 7, // Public file in documents of course
TmlNot_CRS_SHA_PUB_FILE = 8, // Public file in shared files of course
/* Assessment tab */
TmlNot_CALL_FOR_EXAM = 9, // Call for exam in a course
/* Users tab */
/* Messages tab */
TmlNot_NOTICE = 12, // A public notice in a course
TmlNot_FORUM_POST = 11, // Post in global/swad forums
/* Analytics tab */
/* Profile tab */
} TmlNot_Type_t;
77. Timeline: Notes & Publications
struct TmlNot_Note
{
long NotCod; // Unique code/identifier for each note
TmlNot_Type_t Type; // Timeline post, public file,
// call for exam, notice, forum post...
long UsrCod; // Publisher
long HieCod; // Hierarchy code
// (institution/center/degree/course)
long Cod; // Code of file, forum post,
// notice, timeline post...
bool Unavailable; // File, forum post, notice...
// unavailable (removed)
time_t DateTimeUTC; // Date-time of publication in UTC time
unsigned NumShared; // Number of times (users)
// this note has been shared
unsigned NumFavs; // Number of times (users)
// this note has been favourited
};
78. Timeline: Notes & Publications
__________________
|@author |
| Note |
|__________________|
|@author |
| Comment 1 |
|______________|
|@author |
| Comment 2 |
|______________|
| |
| ... |
|______________|
|@author |
| Comment n |
|______________|
●
A note can have comments attached to it:
80. Timeline: Database
“Don't forget to put the WHERE
in the DELETE FROM.”
Jorge Rubira Santos - Entrepreneur and Youtuber
Timeline: Database
“Don't forget to put the WHERE
in the DELETE FROM.”
Jorge Rubira Santos - Entrepreneur and Youtuber
83. Timeline: Database
mysql> DESCRIBE tml_pubs;
+--------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+----------+------+-----+---------+----------------+
| PubCod | bigint | NO | PRI | NULL | auto_increment |
| NotCod | bigint | NO | MUL | NULL | |
| PublisherCod | int | NO | MUL | NULL | |
| PubType | tinyint | NO | MUL | NULL | |
| TimePublish | datetime | NO | MUL | NULL | |
+--------------+----------+------+-----+---------+----------------+
84. Timeline: Database
mysql> DESCRIBE tml_notes;
+-------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+----------------+
| NotCod | bigint | NO | PRI | NULL | auto_increment |
| NoteType | tinyint | NO | MUL | NULL | |
| Cod | int | NO | | -1 | |
| UsrCod | int | NO | MUL | NULL | |
| HieCod | int | NO | | -1 | |
| Unavailable | enum('N','Y') | NO | | N | |
| TimeNote | datetime | NO | MUL | NULL | |
+-------------+---------------+------+-----+---------+----------------+
mysql> DESCRIBE tml_notes_fav;
+---------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+----------------+
| FavCod | bigint | NO | PRI | NULL | auto_increment |
| NotCod | bigint | NO | MUL | NULL | |
| UsrCod | int | NO | MUL | NULL | |
| TimeFav | datetime | NO | | NULL | |
+---------+----------+------+-----+---------+----------------+
85. Timeline: Database
mysql> DESCRIBE tml_comments;
+--------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| PubCod | bigint | NO | PRI | NULL | |
| Txt | longtext | NO | MUL | NULL | |
| MedCod | int | NO | MUL | -1 | |
+--------+----------+------+-----+---------+-------+
mysql> DESCRIBE tml_comments_fav;
+---------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+----------------+
| FavCod | bigint | NO | PRI | NULL | auto_increment |
| PubCod | bigint | NO | MUL | NULL | |
| UsrCod | int | NO | MUL | NULL | |
| TimeFav | datetime | NO | | NULL | |
+---------+----------+------+-----+---------+----------------+
86. Timeline: Database
mysql> DESCRIBE tml_posts;
+--------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+----------------+
| PstCod | int | NO | PRI | NULL | auto_increment |
| Txt | longtext | NO | MUL | NULL | |
| MedCod | int | NO | MUL | -1 | |
+--------+----------+------+-----+---------+----------------+
mysql> DESCRIBE cfe_exams;
+-------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+----------------+
| ExaCod | int | NO | PRI | NULL | auto_increment |
| ... | ... | ... | ... | ... | ... |
mysql> DESCRIBE brw_files;
+-----------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+---------------+------+-----+---------+----------------+
| FilCod | int | NO | PRI | NULL | auto_increment |
| ... | ... | ... | ... | ... | ... |
mysql> DESCRIBE not_notices;
+-----------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+----------------+
| NotCod | int | NO | PRI | NULL | auto_increment |
| ... | ... | ... | ... | ... | ... |
mysql> DESCRIBE for_posts;
+-----------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+----------------+
| PstCod | int | NO | PRI | NULL | auto_increment |
| ... | ... | ... | ... | ... | ... |
87. Timeline: Database
mysql> DESCRIBE tml_timelines;
+-----------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| SessionId | char(43) | NO | PRI | NULL | |
| NotCod | bigint | NO | PRI | NULL | |
+-----------+----------+------+-----+---------+-------+
mysql> DESCRIBE tml_tmp_timeline;
+--------+--------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------+------+-----+---------+-------+
| NotCod | bigint | NO | PRI | NULL | NULL |
+--------+--------+------+-----+---------+-------+
What is being displayed on the screens of each of the users
What is being displayed on the current user's screen
88. Timeline:
Getting publications
“When I wrote this code, only God and I understood
what I did. Now only God knows.”
Unknown source
Timeline:
Getting publications
“When I wrote this code, only God and I understood
what I did. Now only God knows.”
Unknown source
89. Timeline: Getting publications
●
Our algorithm:
●
Select publications one by one in a loop
●
In each iteration:
●
Get the most recent publication (original, shared or comment)
checking that its note is not already retrieved
●
After getting a publication, save its note code to not get it again.
SELECT PubCod
FROM tml_pubs
WHERE NotCod NOT IN
(SELECT NotCod
FROM tml_tmp_timeline)
ORDER BY PubCod DESC
LIMIT 1;
90. Timeline: Getting publications
●
Slower alternative (may need seconds for large tables):
●
Get the maximum PubCod, i.e more recent publication (original, shared or commment),
of every set of publications corresponding to the same note:
SELECT MAX(PubCod) AS NewestPubCod
FROM tml_pubs
GROUP BY NotCod
ORDER BY NewestPubCod DESC
LIMIT 10;
91. Timeline: Getting publications
●
Restricting publications to mine and those I follow:
CREATE TEMPORARY TABLE fol_tmp_me_and_followed
(UsrCod INT NOT NULL,
UNIQUE INDEX(UsrCod)) ENGINE=MEMORY
SELECT my_usr_cod AS UsrCod
UNION
SELECT FollowedCod AS UsrCod
FROM usr_follow
WHERE FollowerCod=my_usr_cod;
------------------------------
SELECT tml_pubs.PubCod,
tml_pubs.NotCod,
tml_pubs.PublisherCod,
tml_pubs.PubType
FROM tml_pubs,
fol_tmp_me_and_followed
WHERE tml_pubs.PublisherCod=fol_tmp_me_and_followed.UsrCod
AND tml_pubs.NotCod NOT IN
(SELECT NotCod
FROM tml_tmp_timeline)
ORDER BY PubCod DESC
LIMIT 1;
mysql> DESCRIBE usr_follow;
+-------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+-------+
| FollowerCod | int | NO | PRI | NULL | |
| FollowedCod | int | NO | PRI | NULL | |
| FollowTime | datetime | NO | MUL | NULL | |
+-------------+----------+------+-----+---------+-------+
92. Timeline: Getting publications
●
Three types of timeline updates
_ ______________________
/ |______________________|
New < |______________________|
_|______________________|
_|_See_new_activity_(3)_|
/ |______________________|
| |______________________|
Recent < |______________________|
| |______________________|
_|______________________|
_|_______See_more_______|
/ |______________________|
| |______________________|
Old < |______________________|
| |______________________|
_|______________________|
typedef enum
{
Tml_GET_NEW_PUBS, // automatically
// from time
// to time (AJAX)
Tml_GET_REC_PUBS, // user clicks
// on menu
// or after
// editing
// timeline
Tml_GET_OLD_PUBS, // user clicks
// on bottom
// link (AJAX)
} Tml_WhatToGet_t;
94. Timeline: Getting publications
case Tml_GET_REC_PUBS: // Get some limited recent publications
/* First query to get initial timeline shown
==> no notes yet in current timeline table */
RangePubsToGet->Top = 0;
/* _ _____ 0 <-- RangePubsToGet.Top = +infinite
/ |_____| 8
Get | |_____| 7
pubs < |_____| 6
from | |_____| 5
all | |_____| 4
range . |_____| 3
. |_____| 2
. |_____| 1
0 <-- RangePubsToGet.Bottom = -infinite */
RangePubsToGet->Bottom = 0;
95. Timeline: Getting publications
case Tml_GET_NEW_PUBS: // Get the publications (without limit)
// newer than last pub. code
/* Via AJAX automatically from time to time */
RangePubsToGet->Top = 0;
/* _ _____ 0 <-- RangePubsToGet.Top = +infinite
Get / |_____|11
these < |_____|10
pubs _|_____| 9
/ |_____| 8 <-- RangePubsToGet.Bottom = last pub. code
Pubs | |_____| 7
already < |_____| 6
shown | |_____| 5
| |_____| 4
. |_____| .
. |_____| .
. |_____| .
*/
RangePubsToGet->Bottom = Tml_DB_GetPubCodFromSession (Tml_Pub_LAST);
96. Timeline: Getting publications
case Tml_GET_OLD_PUBS: // Get some limited publications
// older than first pub. code
/* Via AJAX when I click in link to get old publications */
RangePubsToGet->Top = Tml_DB_GetPubCodFromSession (Tml_Pub_FIRST);
/* _____
. |_____| .
. |_____| .
. |_____| .
Pubs | |_____| 8
already < |_____| 7
shown | |_____| 6
| |_____| 5
Get _|_____| 4 <-- RangePubsToGet.Top = first pub. code
pubs / |_____| 3
from < |_____| 2
this _|_____| 1
rage 0 <-- RangePubsToGet.Bottom = -infinite */
RangePubsToGet->Bottom = 0;
97. Timeline: Getting publications
●
Restricting publications to range:
SELECT tml_pubs.PubCod,
tml_pubs.NotCod,
tml_pubs.PublisherCod,
tml_pubs.PubType
FROM tml_pubs,
fol_tmp_me_and_followed
WHERE tml_pubs.PublisherCod=fol_tmp_me_and_followed.UsrCod
AND tml_pubs.PubCod>bottom // if type == Tml_GET_REC_PUBS
AND tml_pubs.PubCod<top // updated every iteration
// to last pub. code got
AND tml_pubs.NotCod NOT IN
(SELECT NotCod
FROM tml_tmp_timeline)
ORDER BY PubCod DESC
LIMIT 1;
98. Timeline: Getting publications
Timeline->Pubs.Top Pub #0
______ ______ Pub #1
|______|------>|______| ______ Pub #2
|______| -> |______| ______ Pub #3
|______| / |______| ->|______| ______
|______| / |______| / |______| ->|______|
|_Next_|-- |______| / |______| // |______|
more recent |_Next_|-- |______| // |______|
______ |_Next_|--/ |______|
|______|---------------------------------------------- |_NULL_|
older
Timeline->Pubs.Bottom
●
After getting the publications, the result is a chained list:
99. Timeline:
Showing publications
“There is beauty when something works
and works intuitively.”
Jonathan Paul Ive - Designer
Timeline:
Showing publications
“There is beauty when something works
and works intuitively.”
Jonathan Paul Ive - Designer
100. Timeline: Showing publications
_____
/ |_____| just_now_timeline_list (Posts retrieved automatically
| |_____| via AJAX from time to time.
| |_____| They are transferred inmediately
| | to new_timeline_list.)
Hidden < __v__
| |_____| new_timeline_list (Posts retrieved but hidden.
| |_____| When user clicks to view them,
| |_____| the most recent of each note is
|_____| is transferred
| to visible timeline_list.)
See new activity (0)
__v__
/ |_____| timeline_list (Posts visible on page)
| |_____|
Visible | |_____|
on < |_____|
page | |_____|
| |_____|
|_____|
^
See more
__|__
/ |_____| old_timeline_list (Posts just retrieved via AJAX
| |_____| when user clicks "see more".
| |_____| They are transferred inmediately
Hidden < |_____| to timeline_list.)
| |_____|
| |_____|
|_____|
<ul id="just_now_timeline_list" ...>
</ul>
<ul id="new_timeline_list" ...>
</ul>
<div id="view_new_container" ...
style="display:none;">
<a href="" ...
onclick="moveNewTimelineToTimeline();
return false;">
See new activity
(<span id="view_new_count">
0
</span>)
</a>
</div>
<ul id="timeline_list" ...>
visible timeline
</ul>
<div id="view_old_container" ...>
<a href="" ...
onclick="...
refreshOldTimeline();
return false;">
...
See more
</a>
</div>
<ul id="old_timeline_list" ...>
</ul>
101. Timeline: Showing publications
<head>
...
<script type="text/javascript" ...>
var delayNewTml = Cfg_TIME_TO_REFRESH_TIMELINE; // 2000 ms
function init() {
ActionAJAX = "SWAD_URL";
...
setTimeout('refreshNewTimeline()',delayNewTL);
...
}
</script>
<script type="text/javascript" ...>
var refreshParamIdSes = "ses=...";
var refreshParamNxtActNewPub = "act=...";
var refreshParamWho = "Who=...";
</script>
...
</head>
<body onload="init();">
...
</body>
●
Automatic refresh via AJAX every 2 s → 3 s → 4 s...
_____
/ |_____| just_now_timeline_list
| |_____|
| |_____|
| |
Hidden < __v__
| |_____| new_timeline_list
| |_____|
| |_____|
|_____|
|
See new activity (0)
__v__
/ |_____| timeline_list
| |_____|
Visible | |_____|
on < |_____|
page | |_____|
| |_____|
|_____|
^
See more
__|__
/ |_____| old_timeline_list
| |_____|
| |_____|
Hidden < |_____|
| |_____|
| |_____|
|_____|
103. Timeline: Showing publications
function readNewTimelineData () {
if (objXMLHttpReqNewTml.readyState == 4) // Check if data have been received
if (objXMLHttpReqNewTml.status == 200) {
// Access to UL for just now timeline
var justNowTimeline = document.getElementById('just_now_timeline_list');
if (justNowTimeline) {
// Update list of publications in just now timeline
justNowTimeline.innerHTML = objXMLHttpReqNewTml.responseText;
var numNotesJustGot = justNowTimeline.childNodes.length;
if (numNotesJustGot) {// New notes received
// Scripts in timeline got via AJAX not executed ==> execute them
evalScriptsInElem (justNowTimeline);
// Process maths
MathJax.typeset();
...
_____
/ |_____| just_now_timeline_list
| |_____|
| |_____|
| |
Hidden < __v__
| |_____| new_timeline_list
| |_____|
| |_____|
|_____|
|
See new activity (0)
__v__
/ |_____| timeline_list
| |_____|
Visible | |_____|
on < |_____|
page | |_____|
| |_____|
|_____|
^
See more
__|__
/ |_____| old_timeline_list
| |_____|
| |_____|
Hidden < |_____|
| |_____|
| |_____|
|_____|
104. Timeline: Showing publications
...
// Move all the LI elements (notes) in UL 'just_now_timeline_list'
// ...to the top of UL 'new_timeline_list'
var newTimeline = document.getElementById('new_timeline_list');
for (var i=0; i<numNotesJustGot; i++) {
// Move node from just now timeline to new timeline
newTimeline.insertBefore(justNowTimeline.lastChild,
newTimeline.firstChild);
newTimeline.firstChild.className += " Tml_NEW_PUB";
}
// Update number of notes in new timeline
var viewNewCount = document.getElementById('view_new_count');
viewNewCount.innerHTML = newTimeline.childNodes.length;
// Unhide message with number of notes if hidden
var viewNewContainer = document.getElementById('view_new_container');
viewNewContainer.style.display = '';
}
}
// Global delay variable is set initially in swad-core
delayNewTml += 1000; // Increase one second on each call
setTimeout('refreshNewTimeline()',delayNewTml);
}
}
_____
/ |_____| just_now_timeline_list
| |_____|
| |_____|
| |
Hidden < __v__
| |_____| new_timeline_list
| |_____|
| |_____|
|_____|
|
See new activity (0)
__v__
/ |_____| timeline_list
| |_____|
Visible | |_____|
on < |_____|
page | |_____|
| |_____|
|_____|
^
See more
__|__
/ |_____| old_timeline_list
| |_____|
| |_____|
Hidden < |_____|
| |_____|
| |_____|
|_____|
105. _____
/ |_____| just_now_timeline_list
| |_____|
| |_____|
| |
Hidden < __v__
| |_____| new_timeline_list
| |_____|
| |_____|
|_____|
|
See new activity (0)
__v__
/ |_____| timeline_list
| |_____|
Visible | |_____|
on < |_____|
page | |_____|
| |_____|
|_____|
^
See more
__|__
/ |_____| old_timeline_list
| |_____|
| |_____|
Hidden < |_____|
| |_____|
| |_____|
|_____|
Timeline: Showing publications
function moveNewTimelineToTimeline () {
// Move the LI elements (notes) in UL 'new_timeline_list'...
// ...to the top of UL 'timeline_list', only if not repeated before
var newTimeline = document.getElementById('new_timeline_list');
var numNewNotes = newTimeline.childNodes.length;
if (numNewNotes) {
var timeline = document.getElementById("timeline_list");
for (var i=1; i<=numNewNotes; i++) {
// Check if the last child (the oldest) in the new timeline...
// ...is the last ocurrence of the note
var mostRecentOcurrenceOfNote = true;
var lastChildIndex = numNewNotes - i;
var noteCode = newTimeline.lastChild.dataset.noteCode;
for (var j=0; j<lastChildIndex; j++)
if (newTimeline.childNodes[j].dataset.noteCode == noteCode) {
mostRecentOcurrenceOfNote = false;
break;
}
...
●
User clicks "See new activity" → View new pubs.
106. Timeline: Showing publications
...
// Move or remove node from new timeline
if (mostRecentOcurrenceOfNote) {
// Move node from new timeline to timeline
timeline.insertBefore(newTimeline.lastChild,timeline.firstChild);
timeline.firstChild.className += " Tml_NEW_PUB";
}
else
// Remove last child (because is repeated in more recent pubs)
newTimeline.removeChild(newTimeline.lastChild);
}
}
// Reset number of new publications after moving
var viewNewCount = document.getElementById('view_new_count');
viewNewCount.innerHTML = 0;
// Hide link to view new publications after moving
var viewNewContainer = document.getElementById('view_new_container');
viewNewContainer.style.display = 'none';
}
_____
/ |_____| just_now_timeline_list
| |_____|
| |_____|
| |
Hidden < __v__
| |_____| new_timeline_list
| |_____|
| |_____|
|_____|
|
See new activity (0)
__v__
/ |_____| timeline_list
| |_____|
Visible | |_____|
on < |_____|
page | |_____|
| |_____|
|_____|
^
See more
__|__
/ |_____| old_timeline_list
| |_____|
| |_____|
Hidden < |_____|
| |_____|
| |_____|
|_____|
107. _____
/ |_____| just_now_timeline_list
| |_____|
| |_____|
| |
Hidden < __v__
| |_____| new_timeline_list
| |_____|
| |_____|
|_____|
|
See new activity (0)
__v__
/ |_____| timeline_list
| |_____|
Visible | |_____|
on < |_____|
page | |_____|
| |_____|
|_____|
^
See more
__|__
/ |_____| old_timeline_list
| |_____|
| |_____|
Hidden < |_____|
| |_____|
| |_____|
|_____|
Timeline: Showing publications
var objXMLHttpReqOldTml = false;
function refreshOldTimeline () {
objXMLHttpReqOldTml = AJAXCreateObject (); // new XMLHttpRequest()
if (objXMLHttpReqOldTml) {
var refreshParams = refreshParamNxtActOldPub + '&' +
refreshParamIdSes;
if (typeof refreshParamUsr !== 'undefined') {
if (refreshParamUsr.length)
refreshParams += '&' + refreshParamUsr;
}
if (typeof refreshParamWho !== 'undefined') {
if (refreshParamWho.length)
refreshParams += '&' + refreshParamWho;
}
objXMLHttpReqOldTml.onreadystatechange = readOldTimelineData;
objXMLHttpReqOldTml.open('POST',actionAJAX,true);
objXMLHttpReqOldTml.setRequestHeader('Content-Type',
'application/x-www-form-urlencoded');
objXMLHttpReqOldTml.send(refreshParams);
}
}
●
User clicks "See more..." → View old pubs.
108. Timeline: Showing publications
function readOldTimelineData () {
if (objXMLHttpReqOldTml.readyState == 4) // Check if data have been received
if (objXMLHttpReqOldTml.status == 200) {
// Access to UL with the old timeline
var oldTimeline = document.getElementById('old_timeline_list');
if (oldTimeline) {
// Fill list of publications in old timeline
oldTimeline.innerHTML = objXMLHttpReqOldTml.responseText;
var countOldTimeline = oldTimeline.childNodes.length;
if (countOldTimeline) {
// Scripts in timeline got via AJAX not executed ==> execute them
evalScriptsInElem (oldTimeline);
// Process maths
MathJax.typeset();
// Move all the LI elements in UL 'old_timeline_list'
// to the bottom of UL 'timeline_list'
var timeline = document.getElementById("timeline_list");
for (var i=0; i<countOldTimeline; i++)
timeline.appendChild(oldTimeline.firstChild);
...
_____
/ |_____| just_now_timeline_list
| |_____|
| |_____|
| |
Hidden < __v__
| |_____| new_timeline_list
| |_____|
| |_____|
|_____|
|
See new activity (0)
__v__
/ |_____| timeline_list
| |_____|
Visible | |_____|
on < |_____|
page | |_____|
| |_____|
|_____|
^
See more
__|__
/ |_____| old_timeline_list
| |_____|
| |_____|
Hidden < |_____|
| |_____|
| |_____|
|_____|
109. Timeline: Showing publications
...
// There may be more publications
// Unhide icon to be hidden on click
document.getElementById('get_old_timeline').style.display = '';
// Hide icon to be shown on click
document.getElementById('getting_old_timeline').style.display = 'none';
}
else // No old publications retrieved, so we have reached the oldest pub.
// Hide container with link to get old publications
document.getElementById("view_old_pubs_container").style.display = 'none';
}
}
}
_____
/ |_____| just_now_timeline_list
| |_____|
| |_____|
| |
Hidden < __v__
| |_____| new_timeline_list
| |_____|
| |_____|
|_____|
|
See new activity (0)
__v__
/ |_____| timeline_list
| |_____|
Visible | |_____|
on < |_____|
page | |_____|
| |_____|
|_____|
^
See more
__|__
/ |_____| old_timeline_list
| |_____|
| |_____|
Hidden < |_____|
| |_____|
| |_____|
|_____|
110. Timeline: Layout
“Don't make me think.”
Steve Krug - User Experience professional
Timeline: Layout
“Don't make me think.”
Steve Krug - User Experience professional
123. Timeline: Layout
function updateDivFaversSharers (form,Params) {
var id = form.parentNode.parentNode.id;
var objXMLHttp = AJAXCreateObject ();
if (objXMLHttp) {
/* Send request to server */
objXMLHttp.onreadystatechange = function () {
if (objXMLHttp.readyState == 4) // Check if data have been received
if (objXMLHttp.status == 200)
if (id) {
var div = document.getElementById (id); // Access to DIV
if (div)
div.innerHTML = objXMLHttp.responseText; // Update DIV content
}
};
objXMLHttp.open ('POST',actionAJAX,true);
objXMLHttp.setRequestHeader ('Content-Type','application/x-www-form-urlencoded');
objXMLHttp.send (Params);
}
}
141. Timeline: Inserting links
“The C language combines
all the power of assembly language
with all the ease-of-use of assembly language.”
Mark Pearce - Freelance consultant and developer
Timeline: Inserting links
“The C language combines
all the power of assembly language
with all the ease-of-use of assembly language.”
Mark Pearce - Freelance consultant and developer
142. Timeline: Inserting links
●
1. Parse string creating a list of links (URLs or nicknames)
●
Hi @admin, can I use https://openswad.org for free?
______ ______ ______ ______
|______|<-- -->|______|<-- -->|______|<-- -->|______|<--- LastLink
|______| / |______| / |______| / |______|
|______| / |______| / |______| / |______|
|_NULL_| / ---|_Prev_| / ---|_Prev_| / ---|_Prev_|
|_Next_|-- |_Next_|-- |_Next_|-- |_NULL_|
struct ALn_Link
{
ALn_LinkType_t Type; // URL or nickname?
struct ALn_Substring URLorNick; // Link text
struct ALn_Substring NickAnchor[3]; // Pointer to anchors if nick
size_t LengthAddedUpToHere; // Total length of extra HTML code...
// ...added up to this link (included)
struct ALn_Link *Prev; // Pointer to previous link
struct ALn_Link *Next; // Pointer to next link
};
struct ALn_Substring
{
// Pointer to
// the first
// char of
// substring
char *Str;
// Length of
// the substring
size_t Len;
};
143. Timeline: Inserting links
●
2. For each link in the list, going back from last to first:
●
1 Move forward the text after the link
●
2 Copy the 3rd part of the anchor
●
3 Move forward the link
_______________________________
|H|i|_|@|a|d|m|i|n|,|_|c|a|n|...|
| | | | | | | | | | | | | | |
| | | | | | | | | ___________________________________________1____
| | |
| | | ______________________________3____ | | | | | |
| | | | | | | | |
| | | ______5____ | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | 6 | | | | | | 4 | | | | | | 2 | | | | | |
v v v anchor#1 v v v v v v anchor#2 v v v v v v anchor#3 v v v v v v
___________________________________________________________________________
|H|i|_|<|_|_|_|_|@|a|d|m|i|n|_|_|_|_|>|@|a|d|m|i|n|<|_|_|_|_|>|,|_|c|a|n|...|
●
4 Copy the 2nd part of the anchor
●
5 Copy the link into the anchor
●
6 Copy the 1st part of the anchor
144. Future goals and tasks
“The dream of yesterday is the hope of today
and the reality of tomorrow.”
Robert H. Goddard - Engineer, professor, physicist and inventor
Future goals and tasks
“The dream of yesterday is the hope of today
and the reality of tomorrow.”
Robert H. Goddard - Engineer, professor, physicist and inventor
145. Future goals and tasks
●
Objective 1: Incorporate new functionalities in the platform and improve some
of the existing ones for its integration with gamification, geolocation and EDM
Objective 1 tasks
T1.1 Instructional design + planning T1.5 Improved test exams
T1.2 Monitoring + activity reports T1.6 Scanning homework with the mobile
T1.3 Collaborative edition (wiki) T1.7 Integrated grades
T1.4 Improved schedule + calendar T1.8 Enhanced forums + chat + messages
146. Future goals and tasks
●
Objective 2: Integration of gamification based on typical game elements in the
functionalities of the web platform and the mobile app
Objective 2 tasks
T2.1 ARS integrated (interactive games with remote control)
T2.2 Scores + badges in global and course functionalities
T2.3 Karma in timeline, forums and files
T2.4 Progress bars in user profiles and courses
147. Future goals and tasks
●
Objective 3: Integration of indoor geolocation to improve the location of users
in institutional dependencies and attendance control
Objective 3 tasks
T3.1 Database + location prototype T3.5 Possible improvements
•
Alerts about friends that are close
•
Display location on map
•
QR to check-in
•
Store history for activity reports and
recommendations
T3.2 SWAD API functions
T3.3 Integration in SWADroid
T3.4 Add gamification
148. Future goals and tasks
●
Objective 4: Integrate Educational Data Mining techniques to improve student
assessment, identify study tips, and offer alerts to students and teachers
Objective 4 tasks
T4.1 Study state of the art of EDM (lines of research, articles)
T4.2 Study algorithms + software tools
T4.3 Off-platform experiments (predict + recommend + alert)
T4.4 Select algorithms and integrate them into the platform
149. Future goals and tasks
●
Objective 5: Analyze educational changes in motivation and
participation, results, and degree of use and satisfaction
after the improvements
Objective 5 tasks
T5.1 Interviews with users prior to the improvement
T5.2 Acquire reference data prior to improvement
T5.3 Measure indicators after improvement: performance, use, motivation ...
T5.4 Disseminate partial and final results
150. Conclusions
“We are free, we can be wide open"
“Analyse”, The Cranberries - Irish rock band
Conclusions
“We are free, we can be wide open"
“Analyse”, The Cranberries - Irish rock band
151. Conclusions
●
We have developed and used an educational platform for 23 years at UGR
(Spain)
●
It’s a fast tool that consumes very few computing resources, making it
suitable for low-cost installations
152. Conclusions
●
It had a great growth between 2005 and 2015
●
In 2015 it was almost used by the entire UGR (≈60K students)
●
In total, it has been used by 200,000 users at UGR
153. Conclusions
●
Since 2010 it’s free software, so anyone can install it (and improve it)
●
Since 2012 it is freely available in the cloud for everyone, in the portal
OpenSWAD.org
●
Of course, you can try it at https://openswad.org/
154. Conclusions
●
Since 2016 its use at UGR has decreased due to institutional support to
another official platform
●
However, we have continued working on the improvement of the platform
●
We will continue its upgrade with gamification, geolocation and data
mining, among other features
155. About us
“When they ask me when a program will be ready,
I answer: it depends on how much you work on it.”
Richard M. Stallman - Free software activist and programmer
About us
“When they ask me when a program will be ready,
I answer: it depends on how much you work on it.”
Richard M. Stallman - Free software activist and programmer
156. About us
●
Recent programmers:
●
Antonio Cañas Vargas (swad-core, servers, management, courses)
●
Daniel J. Calandria Hernández (photo processing, chat)
●
Juan Miguel Boyero Corral (SWADroid)
●
Bate Ye (iSWAD)
●
Javier Bueno López (SWADroid)
●
Adrián Lara Roldán (iSWAD)
●
Jesús Mesa González (photo processing)
●
Sergio Díaz Rueda (SWADroid)
(green = free software)
157. About us
●
Former programmers (I):
●
Jesús Álvarez Martín (photo processing)
●
Alberto E. Rodrigo Gámiz (photo processing)
●
Ana Belén Cara Carmona (chat & whiteboard)
●
Carlos Moreno Muñoz (chat & whiteboard)
158. About us
●
Former programmers (II):
●
Antonio Manuel Aguilera Malagón (SWADroid)
●
Helena Rodríguez Gijón (SWADroid)
●
José Antonio Guerrero Avilés (SWADroid)
●
Alejandro Alcalde Barros (SWADroid)
●
Rubén Martín Hidalgo (SWADroid)
●
Miguel Ángel Cerrailo Valle (Triswados, app Android)
●
Raúl Álvarez Hinojosa (iSWAD)
159. About us
●
Programmers of modules that were not used:
●
Andrés Ramón Masegosa Aredondo (photo processing)
●
Raúl Jiménez Benítez (chat)
●
María Beatriz Medina Yáñez (whiteboard)
●
Raquel Cazalilla Sáez (chat & whiteboard)
●
Emiliano Luis Rincón Vallejos (rich text editor)
●
Diego Montesinos Hervás (iSWAD)
●
Lucas Ortiz Velasco (SWADMyPage)
●
David Medina Godoy (SWADE, rich text editor)
●
Marta Muñoz López (SWAD2Moodle)
160. About us
●
Translators:
●
Antonio Cañas Vargas (CA,DE,EN,ES,FR,GN,IT,PL,PT)
●
Joan Lluís Díaz Rodríguez (CA)
●
Rafael Barranco Droege (DE)
●
Giuseppe Antonio Pagin, Antonella Grande, Francisco Manuel Herrero Pérez, Nicola
Comunale Rizzo (IT)
●
Wojtek Kieca, Tomasz Olechowski, Mateusz Stanko (PL)
161. About us
●
Contributors (I):
●
Javier Fernández Baldomero (forums, papers)
●
Antonio F. Díaz García (servers)
●
Eva Martínez Ortigosa (administration, papers)
●
Francisco Illeras García (servers)
●
Alberto Prieto Espinosa (papers)
●
Mancia Anguita López (papers)
●
Eduardo Ros Vidal (papers)
162. About us
●
Contributors (II):
●
Francisco A. Ocaña Lara (FAQ, papers)
●
Adrián Gómez Anaya (WikiSwad)
●
Paloma Marín Arraiza (video tutorials)
●
technicians and scholars from the Virtual Learning Center
●
150 degree administrators
●
...and many more