Giter Club home page Giter Club logo

qwiklabs-completed-labs-tracker's Introduction

Qwiklabs Lab Completion Tracker

πŸ’‘ Label completed quests and labs on Qwiklabs webpages

Qwiklabs is a great online self-paced learning platform for getting hands-on experience of the Google Cloud Platform. It has over 400 hands-on labs and quests for learn and practice.

As a Qwiklabs user, I figure out it is messy and damp to look up unenrolled quests or incompleted labs from the Qwiklabs Catalog page or Search Results. I desired to make a straight-forward way to identify the catalog items, by adding a green check-circle next to those completed.

GitHub release (latest by date) License: GPL v3 GitHub Release Date GitHub issues

🎯 Objectives of this project

  • To develop a handy way to implement the enhancement to Qwiklabs website in a web browser.
  • To indicate completed labs and quests in Qwiklabs Catalog pages, thereby easier to inspect the self-learning progress and look for unenrolled quests or incompleted labs.
  • To design a location to store and update the name list of the completed items.

For more information, please read this post on my GitHub Pages.

chriskyfung.github.io

πŸ›΄ How to Use

This script requires an userscript manager to run it in your browser, such as Tampermonkey for Google Chrome. Click on the following button to download and install the script via your userscript manager.

Install Script with Tampermonkey

🎠Features

🌈 on Home pages

Retrieve the local records and annotate each card in β€œMy Favorites”, β€œFeatured Learning”, and β€œWhat’s Hots” sections with badges.

  • Screenshot:

    badges added to What's Hot cards

🌈 on Catalog pages

Retrieve the local records and annotate each lab and quest item as the following:

  • Label the completed labs and quests with a green check-circle.

  • Highlight any new labs and quests that you have not yet explored in yellow color.

    Screenshot of a Catalog page

🌈 on Quest pages

  • Automatically add a record for the quest or update the info to the local database
  • Add a green check-circle at the end of the page title if the quest is completed.

🌈 on Lab pages

  • Automatically add a record for the lab or update the info to the local database.

  • Add a green check-circle at the end of the lab title if the lab is completed.

    Screenshot of a Lab header

🌈 on Profile page

  • Annotate each table row in Activities tab with colors.

  • Offer pagination links for you to view all previous activities.

  • One-click update the labs and quests status from the activity table to your browser database.

  • Show πŸ” quick links to search activities that are ⚠ mismatched with database records.

    Batch Update Activities to Your Database

    Look Up Your Older Activities With Pagination Links

    Investigate Conflicting Records with Quick Search


πŸ‘€ Future Plans

[ ] Sync IndexedDB across computers (#7)

πŸ’— Support Me

Would you like to buy me a coffee? I would really appreciate it if you could support me for this projects.

Buy Me A Coffee

🀝 Contributing

Pull requests for new features, bug fixes, and suggestions are welcome!

βš– License

Distributed under the GNU General Public License v3.0

qwiklabs-completed-labs-tracker's People

Contributors

chriskyfung avatar dependabot[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

qwiklabs-completed-labs-tracker's Issues

Export Profile as Files

[ ] Scrape the data from the Completed Courses and Completed Labs pages under the My Learning section.
[ ] Export the extracted data to a CSV or JSON file.

Sync data accross Qwiklasb subdomains (www., aws., google., and run.qwiklabs.com)

The lab and quest completion data is currently stored using IndexedDB.

Like most web storage solutions, IndexedDB follows a same-origin policy. So while you can access stored data within a domain, you cannot access data across different domains. - MDN

This means that different Qwiklabs subdomains, e.g. www.qwiklabs.com, aws.qwiklabs.com, google.qwiklabs.com, and run.qwiklabs.comm, do not share the same IndexedDB.

The issue becomes critical after Qwiklabs made a web design update in April 2021. Before that, it was easy to work around by using our one-click update to parse all lab and quest completion status from the /my_learning/labs and /my_learning/courses pages.

The new Qwiklabs web design no longer contains labs' identifier or permalink in the My Learning Activity section. This change makes difficult to associate each activity records with the database data without any unique identitier.

The lab title is temporarily used as the key to look up the database in the the latest version (v0.5.4). It is, however, not an ideal method because the Qwiklabs team changes the lab title from time to time. This will give a poor track of the learning activities.

We do need a better solution for the issue to make all tracking records being correct as well as syncing accross those subdomains. I wish someone could provide me a help.

If you have any ideas on improving this area, please share your thoughts below. Thanks πŸ™

Not working for me

Your tool is great as it is a real mess to follow what you have done in Qwiklabs. Unfortunately, I followed your instructions but it is not working for me. No checkmark next to my labs.

Qwiklabs

Update to db Button

A local database has implemented in v0.5.0 ( #8 ), which improved data-keeping with Browser's IndexedDB. The next step will design a button on the front-end for updating the record of a lab or a quest status.

  • Add an update button to each row of the table in the My Learning section for update individual lab/quest.
  • Add a One-Click Update Button above/below for update all on the table

Import Downloaded Profile

Blocked by (predecessor tasks): #6

User Data can be downloaded from the user profile page.
Update local database by Import the data file.

Cross check between the local user record and my learning page on Qwiklabs

In version 0.4.5, the userscript now parses the items on the pages of Completed Courses and Completed Labs. It adds the following to the DOM:

  • Light purple background to Speedrun Game items on the Completed Courses page
  • Light green background and a green round checkmark to the items that marked finished in the local user record.

No longer works

The userscript doesn't work now, please let me know if something is broken or I am doing it wrong

The scripts are not working

I installed the 2 scripts in tampermonkey. But it is not working for me. It is showing new quest but not marking any as complete.

Here are the errrors I am getting in console.

DevTools failed to load SourceMap: Could not load content for chrome-extension://dhdgffkkebhmkfjojejmpbldmpobfkfo/dexie.js.map: HTTP error: status code 404, net::ERR_UNKNOWN_URL_SCHEME userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4455 qdb - set open loadDB @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4455 async function (async) loadDB @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4446 main @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4581 eval @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4804 tms_713a3581_2fd2_4880_aece_e24d878d7d00 @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4811 (anonymous) @ VM295:3 eval @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:1 eval @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:1 eval @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4812 eval @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4814 (anonymous) @ VM295:3 c @ VM295:2 (anonymous) @ VM295:3 la @ VM303:60 create @ VM303:71 d @ VM303:13 setTimeout (async) (anonymous) @ VM295:3 d.<computed> @ VM295:9 eval @ VM303:12 runListeners @ VM303:13 eval @ VM303:72 R @ VM295:11 send @ content.js:7 (anonymous) @ content.js:27 processQueue @ content.js:3 a @ content.js:9 userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4458 Found database: qwiklabs-db-test-1 userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4459 Database version: 1 userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4585 Tracking - start userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4713 Under My Learning section userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4538 TypeError: Cannot read property 'status' of undefined When handling quest id: 128 getQuestStatus @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4538 async function (async) getQuestStatus @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4534 main @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4732 async function (async) main @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4581 eval @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4804 tms_713a3581_2fd2_4880_aece_e24d878d7d00 @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4811 (anonymous) @ VM295:3 eval @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:1 eval @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:1 eval @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4812 eval @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4814 (anonymous) @ VM295:3 c @ VM295:2 (anonymous) @ VM295:3 la @ VM303:60 create @ VM303:71 d @ VM303:13 setTimeout (async) (anonymous) @ VM295:3 d.<computed> @ VM295:9 eval @ VM303:12 runListeners @ VM303:13 eval @ VM303:72 R @ VM295:11 send @ content.js:7 (anonymous) @ content.js:27 processQueue @ content.js:3 a @ content.js:9 userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4539 DB does not contain id: 128 in the quests table getQuestStatus @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4539 async function (async) getQuestStatus @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4534 main @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4732 async function (async) main @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4581 eval @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4804 tms_713a3581_2fd2_4880_aece_e24d878d7d00 @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4811 (anonymous) @ VM295:3 eval @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:1 eval @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:1 eval @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4812 eval @ userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4814 (anonymous) @ VM295:3 c @ VM295:2 (anonymous) @ VM295:3 la @ VM303:60 create @ VM303:71 d @ VM303:13 setTimeout (async) (anonymous) @ VM295:3 d.<computed> @ VM295:9 eval @ VM303:12 runListeners @ VM303:13 eval @ VM303:72 R @ VM295:11 send @ content.js:7 (anonymous) @ content.js:27 processQueue @ content.js:3 a @ content.js:9 userscript.html?name=Qwiklabs%20Completed%20Labs%20Tracker.user.js&id=713a3581-2fd2-4880-aece-e24d878d7d00:4747 [ status = null ] for quest 128: Build and Secure Networks in

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.