<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Jack Luar | UCSC OSPO</title><link>https://deploy-preview-1007--ucsc-ospo.netlify.app/author/jack-luar/</link><atom:link href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/jack-luar/index.xml" rel="self" type="application/rss+xml"/><description>Jack Luar</description><generator>Wowchemy (https://wowchemy.com)</generator><language>en-us</language><image><url>https://deploy-preview-1007--ucsc-ospo.netlify.app/author/jack-luar/avatar_hu50cb9d0d57e7b686fd357ae48d2c33fa_9988_270x270_fill_q75_lanczos_center.jpg</url><title>Jack Luar</title><link>https://deploy-preview-1007--ucsc-ospo.netlify.app/author/jack-luar/</link></image><item><title>OpenROAD - An Open-Source, Autonomous RTL-GDSII Flow for Chip Design</title><link>https://deploy-preview-1007--ucsc-ospo.netlify.app/project/osre25/openroad/openroad/</link><pubDate>Sun, 19 Jan 2025 00:00:00 +0000</pubDate><guid>https://deploy-preview-1007--ucsc-ospo.netlify.app/project/osre25/openroad/openroad/</guid><description>&lt;p>The &lt;a href="https://theopenroadproject.org" target="_blank" rel="noopener">OpenROAD&lt;/a> project is a non-profit project, originally funded by DARPA with the aim of creating open-source EDA tools; an Autonomous flow from RTL-GDSII that completes &amp;lt; 24 hrs, to lower cost and boost innovation in IC design. This project is now supported by &lt;a href="precisioninno.com">Precision Innovations&lt;/a>.&lt;/p>
&lt;p>OpenROAD massively scales and supports EWD (Education and Workforce Development) and supports a broad ecosystem making it a vital tool that supports a rapidly growing Semiconductor Industry.&lt;/p>
&lt;p>OpenROAD is the fastest onramp to gain knowledge, skills and create pathways for great career opportunities in chip design. You will develop important software and hardware design skills by contributing to these interesting projects. You will also have the opportunity to work with mentors from the OpenROAD project and other industry experts.&lt;/p>
&lt;p>We welcome a diverse community of designers, researchers, enthusiasts, software engineers and entrepreneurs to use and contribute to OpenROAD and make a far-reaching impact in the rapidly growing, global Semiconductor Industry.&lt;/p>
&lt;h3 id="improving-code-quality-in-openroad">Improving Code Quality in OpenROAD&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Topics&lt;/strong>: &lt;code>Coding Best Practices in C++&lt;/code>, &lt;code>Code Quality Tooling&lt;/code>, &lt;code>Continuous Integration&lt;/code>&lt;/li>
&lt;li>&lt;strong>Skills&lt;/strong>: C++&lt;/li>
&lt;li>&lt;strong>Difficulty&lt;/strong>: Medium&lt;/li>
&lt;li>&lt;strong>Size&lt;/strong>: Medium (175 hours)&lt;/li>
&lt;li>&lt;strong>Mentors&lt;/strong>: &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/matt-liberty/">Matt Liberty&lt;/a> &amp;amp; &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/arthur-koucher/">Arthur Koucher&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>OpenROAD is a large and complex program. This project is to improve the code quality through resolving issues flagged by tools like Coverity and clang-tidy. New tools like the clang sanitizers ASAN/TSAN/UBSAN should also be set up and integrated with the Jenkins CI.&lt;/p>
&lt;h3 id="gui-testing-in-openroad">GUI Testing in OpenROAD&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Topics&lt;/strong>: &lt;code>Testing&lt;/code>, &lt;code>Continuous Integration&lt;/code>&lt;/li>
&lt;li>&lt;strong>Skills&lt;/strong>: C++, Qt&lt;/li>
&lt;li>&lt;strong>Difficulty&lt;/strong>: Medium&lt;/li>
&lt;li>&lt;strong>Size&lt;/strong>: Large (350 hours)&lt;/li>
&lt;li>&lt;strong>Mentors&lt;/strong>: &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/matt-liberty/">Matt Liberty&lt;/a> &amp;amp; &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/peter-gadfort/">Peter Gadfort&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>The OpenROAD GUI is a crucial set of functionality for users to see and investigate their design. GUI testing is specialized and rather different from standard unit testing. The GUI therefore needs improvements to its testing to cover both interaction and rendering. The GUI uses the Qt framework. An open-source testing tool like &lt;a href="https://github.com/faaxm/spix" target="_blank" rel="noopener">https://github.com/faaxm/spix&lt;/a> will be set up and key tests developed. This will provide the framework for all future testing.&lt;/p>
&lt;h3 id="rectilinear-floorplans-in-openroad">Rectilinear Floorplans in OpenROAD&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Topics&lt;/strong>: &lt;code>Electronic Design Automation&lt;/code>, &lt;code>Algorithms&lt;/code>&lt;/li>
&lt;li>&lt;strong>Skills&lt;/strong>: C++, data structures and algorithms&lt;/li>
&lt;li>&lt;strong>Difficulty&lt;/strong>: Medium&lt;/li>
&lt;li>&lt;strong>Size&lt;/strong>: Large (350 hours)&lt;/li>
&lt;li>&lt;strong>Mentors&lt;/strong>: &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/eder-monteiro/">Eder Monteiro&lt;/a> &amp;amp; &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/augusto-berndt/">Augusto Berndt&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>OpenROAD supports block floorplans that are rectangular in shape. Some designs may require more complex shapes to fit. This project extends the tool to support rectilinear polygon shapes as floorplans. This will require upgrading data structures and algorithms in various parts of OpenROAD including floor plan generation, pin placement, and global placement.&lt;/p>
&lt;h3 id="lef-reader-and-database-enhancements-in-openroad">LEF Reader and Database Enhancements in OpenROAD&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Topics&lt;/strong>: &lt;code>Electronic Design Automation&lt;/code>, &lt;code>Database&lt;/code>, &lt;code>Parsing&lt;/code>&lt;/li>
&lt;li>&lt;strong>Skills&lt;/strong>: Boost Spirit parsers, Database, C++&lt;/li>
&lt;li>&lt;strong>Difficulty&lt;/strong>: Medium&lt;/li>
&lt;li>&lt;strong>Size&lt;/strong>: Medium (175 hours)&lt;/li>
&lt;li>&lt;strong>Mentors&lt;/strong>: &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/osama-hammad/">Osama Hammad&lt;/a> &amp;amp; &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/ethan-mahintorabi/">Ethan Mahintorabi&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>LEF (Library Exchange Format) is a standard format for describing physical design rules for integrated circuits. OpenROAD has support for many constructs but some newer ones for advanced process nodes are not supported. This project is to support parsing such information and storing in the OpenDB for use by the rest of the tool.&lt;/p>
&lt;h3 id="orassistant---llm-data-engineering-and-testing">ORAssistant - LLM Data Engineering and Testing&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Topics&lt;/strong>: &lt;code>Large Language Model&lt;/code>, &lt;code>Machine Learning&lt;/code>, &lt;code>Data Engineering&lt;/code>, &lt;code>Model Deployment&lt;/code>, &lt;code>Testing&lt;/code>, &lt;code>Full-Stack Development&lt;/code>&lt;/li>
&lt;li>&lt;strong>Skills&lt;/strong>: large language model engineering, database, evaluation, CI/CD, open-source or related software development, full-stack&lt;/li>
&lt;li>&lt;strong>Difficulty&lt;/strong>: Medium&lt;/li>
&lt;li>&lt;strong>Size&lt;/strong>: Medium (175 hours)&lt;/li>
&lt;li>&lt;strong>Mentor&lt;/strong>: &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/jack-luar/">Jack Luar&lt;/a> &amp;amp; &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/palaniappan-r/">Palaniappan R&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>This project is aimed at enhancing robustness and accuracy for &lt;a href="https://woset-workshop.github.io/PDFs/2024/11_ORAssistant_A_Custom_RAG_ba.pdf" target="_blank" rel="noopener">OR Assistant&lt;/a>, the &lt;a href="https://github.com/The-OpenROAD-Project/ORAssistant" target="_blank" rel="noopener">conversational assistant for OpenROAD&lt;/a> through comprehensive testing and evaluation. You will work with members of the OpenROAD team and other researchers to enhance the existing dataset to cover a wide range of use cases to deliver accurate responses more efficiently. This project will focus on data engineering and benchmarking and you will collaborate on a project on the LLM model engineering. Tasks include: creating evaluation pipelines, building databases to gather feedback, improving CI/CD, writing documentation, and improving the backend and frontend services as needed (non-exhaustive). You will gain valuable experience and skills in understanding chip design flows and applications. Open to proposals from all levels of ML practitioners.&lt;/p>
&lt;h3 id="orassistant---llm-model-engineering">ORAssistant - LLM Model Engineering&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Topics&lt;/strong>: &lt;code>Large Language Model&lt;/code>, &lt;code>Machine Learning&lt;/code>, &lt;code>Model Architecture&lt;/code>, &lt;code>Model Deployment&lt;/code>&lt;/li>
&lt;li>&lt;strong>Skills&lt;/strong>: large language model engineering, prompt engineering, fine-tuning&lt;/li>
&lt;li>&lt;strong>Difficulty&lt;/strong>: Medium&lt;/li>
&lt;li>&lt;strong>Size&lt;/strong>: Medium (175 hours)&lt;/li>
&lt;li>&lt;strong>Mentor&lt;/strong>: &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/jack-luar/">Jack Luar&lt;/a> &amp;amp; &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/palaniappan-r/">Palaniappan R&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>This project is aimed at enhancing robustness and accuracy for &lt;a href="https://woset-workshop.github.io/PDFs/2024/11_ORAssistant_A_Custom_RAG_ba.pdf" target="_blank" rel="noopener">OR Assistant&lt;/a>, the &lt;a href="https://github.com/The-OpenROAD-Project/ORAssistant" target="_blank" rel="noopener">conversational assistant for OpenROAD&lt;/a> through enhanced model architectures. You will work with members of the OpenROAD team and other researchers to explore alternate architectures beyond the existing RAG-based implementation. This project will focus on improving reliability and accuracy of the existing model architecture. You will collaborate on a tandem project on data engineering for OR assistant. Tasks include: reviewing and understanding the state-of-the-art in retrieval augmented generation, implementing best practices, caching prompts, improving relevance and accuracy metrics, writing documentation and improving the backend and frontend services as needed (non-exhaustive). You will gain valuable experience and skills in understanding chip design flows and applications. Open to proposals from all levels of ML practitioners.&lt;/p></description></item><item><title>OpenROAD - An Open-Source, Autonomous RTL-GDSII Flow for Chip Design</title><link>https://deploy-preview-1007--ucsc-ospo.netlify.app/project/osre24/openroad/openroad/</link><pubDate>Mon, 22 Jan 2024 00:00:00 +0000</pubDate><guid>https://deploy-preview-1007--ucsc-ospo.netlify.app/project/osre24/openroad/openroad/</guid><description>&lt;p>The &lt;a href="https://theopenroadproject.org" target="_blank" rel="noopener">OpenROAD&lt;/a> project is a non-profit project, originally funded by DARPA with the aim of creating open-source EDA tools; an Autonomous flow from RTL-GDSII that completes &amp;lt; 24 hrs, to lower cost and boost innovation in IC design. This project is now supported by &lt;a href="precisioninno.com">Precision Innovations&lt;/a>.&lt;/p>
&lt;p>OpenROAD massively scales and supports EWD (Education and Workforce Development) and supports a broad ecosystem making it a vital tool that supports a rapidly growing Semiconductor Industry.&lt;/p>
&lt;p>OpenROAD is the fastest onramp to gain knowledge, skills and create pathways for great career opportunities in chip design. You will develop important software and hardware design skills by contributing to these interesting projects. You will also have the opportunity to work with mentors from the OpenROAD project and other industry experts.&lt;/p>
&lt;p>We welcome a diverse community of designers, researchers, enthusiasts, software engineers and entrepreneurs to use and contribute to OpenROAD and make a far-reaching impact in the rapidly growing, global Semiconductor Industry.&lt;/p>
&lt;h3 id="create-openroad-tutorials-and-videos">Create OpenROAD Tutorials and Videos&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Topics&lt;/strong>: &lt;code>Documentation&lt;/code>, &lt;code>Tutorials&lt;/code>, &lt;code>Videos&lt;/code>, &lt;code>VLSI design basics&lt;/code>&lt;/li>
&lt;li>&lt;strong>Skills&lt;/strong>: Video/audio recording and editing, training and education&lt;/li>
&lt;li>&lt;strong>Difficulty&lt;/strong>: Medium&lt;/li>
&lt;li>&lt;strong>Size&lt;/strong>: Large (350 hours)&lt;/li>
&lt;li>&lt;strong>Mentor&lt;/strong>: &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/indira-iyer/">Indira Iyer&lt;/a>, &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/vitor-bandeira/">Vitor Bandeira&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Create short videos for training and course curriculum highlighting key features and flows in &lt;a href="https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts" target="_blank" rel="noopener">OpenROAD-flow-scripts&lt;/a>.&lt;/p>
&lt;h3 id="improve-the-openroad-autotuner-flow-and-documentation">Improve the OpenROAD AutoTuner Flow and documentation&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Topics&lt;/strong>: &lt;code>OpenROAD-flow-scripts&lt;/code>, &lt;code>AutoTuner&lt;/code>, &lt;code>Design Exploration&lt;/code>&lt;/li>
&lt;li>&lt;strong>Skills&lt;/strong>: Knowledge of ML for hyperparameter tuning, Cloud-based computation, Basic VLSI design and tools knowledge, python, C/C++&lt;/li>
&lt;li>&lt;strong>Difficulty&lt;/strong>: Medium&lt;/li>
&lt;li>&lt;strong>Size&lt;/strong>: Large (350 hours)&lt;/li>
&lt;li>&lt;strong>Mentor&lt;/strong>: &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/vitor-bandeira/">Vitor Bandeira&lt;/a>, &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/indira-iyer/">Indira Iyer&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Test, analyze and enhance the &lt;a href="https://openroad-flow-scripts.readthedocs.io/en/latest/user/InstructionsForAutoTuner.html" target="_blank" rel="noopener">AutoTuner&lt;/a> to improve usability, documentation and QoR. The Autotuner is an important tool in the OpenROAD flow - &lt;a href="https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts" target="_blank" rel="noopener">OpenROAD-flow-scripts&lt;/a> for Chip design exploration that significantly reduces design time. You will use state-of-the-art ML tools to test the current tool exhaustively for good PPA (performance, power, area) results. You will also update existing documentation to reflect any changes to the tool and flow.&lt;/p>
&lt;h3 id="implement-a-memory-compiler-in-the-openroad-flow">Implement a memory compiler in the OpenROAD Flow&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Topics&lt;/strong>: &lt;code>OpenROAD-flow-scripts&lt;/code>, &lt;code>Memory Compiler&lt;/code>,&lt;/li>
&lt;li>&lt;strong>Skills&lt;/strong>: Basic VLSI design and tools knowledge, python, tcl, C/C++, memory design a plus&lt;/li>
&lt;li>&lt;strong>Difficulty&lt;/strong>: Medium&lt;/li>
&lt;li>&lt;strong>Size&lt;/strong>: Medium (175 hours)&lt;/li>
&lt;li>&lt;strong>Mentor&lt;/strong>: &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/matt-liberty/">Matt Liberty&lt;/a>, &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/austin-rovinski/">Austin Rovinski&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Implement a memory compiler as part of the OpenROAD flow to improve the placement and layout efficiency of large, memory-intensive designs. You will start with an existing code base to develop this feature: &lt;a href="https://github.com/The-OpenROAD-Project-staging/OpenROAD/tree/dffram" target="_blank" rel="noopener">https://github.com/The-OpenROAD-Project-staging/OpenROAD/tree/dffram&lt;/a>
This is another option: &lt;a href="https://github.com/AUCOHL/DFFRAM" target="_blank" rel="noopener">https://github.com/AUCOHL/DFFRAM&lt;/a>
Enhance code to support DFFRAM support for the OpenROAD native flow, &lt;a href="https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts" target="_blank" rel="noopener">OpenROAD-flow-scripts&lt;/a>.&lt;/p>
&lt;h3 id="integrate-a-tcl-and-python-linter">Integrate a tcl and python linter&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Topics&lt;/strong>: &lt;code>Linting&lt;/code>, &lt;code>Workflow&lt;/code>&lt;/li>
&lt;li>&lt;strong>Skills&lt;/strong>: tcl, python, linting&lt;/li>
&lt;li>&lt;strong>Difficulty&lt;/strong>: Easy&lt;/li>
&lt;li>&lt;strong>Size&lt;/strong>: Small (90 hours)&lt;/li>
&lt;li>&lt;strong>Mentor&lt;/strong>: &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/vitor-bandeira/">Vitor Bandeira&lt;/a>, &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/austin-rovinski/">Austin Rovinski&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Integrate a tcl and python linter for tools in OpenROAD and &lt;a href="https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts" target="_blank" rel="noopener">OpenROAD-flow-scripts&lt;/a> to enforce error checking, style and best practices.&lt;/p>
&lt;h3 id="llm-assistant-for-openroad---create-model-architecture-and-prototype">LLM assistant for OpenROAD - Create Model Architecture and Prototype&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Topics&lt;/strong>: &lt;code>Large Language Model&lt;/code>, &lt;code>Machine Learning&lt;/code>, &lt;code>Model Architecture&lt;/code>, &lt;code>Model Deployment&lt;/code>&lt;/li>
&lt;li>&lt;strong>Skills&lt;/strong>: large language model engineering, prompt engineering, fine-tuning&lt;/li>
&lt;li>&lt;strong>Difficulty&lt;/strong>: Medium&lt;/li>
&lt;li>&lt;strong>Size&lt;/strong>: Medium (175 hours)&lt;/li>
&lt;li>&lt;strong>Mentor&lt;/strong>: &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/indira-iyer/">Indira Iyer&lt;/a>, &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/jack-luar/">Jack Luar&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>This project involves the creation of a conversational assistant designed around &lt;a href="https://github.com/The-OpenROAD-Project/OpenROAD" target="_blank" rel="noopener">OpenROAD&lt;/a> to answer user queries. You will be working in tandem with members of the OpenROAD team and other researchers to deliver a final deployable prototype. You will focus on the design and implementation of modular LLM architectures. You will be experimenting through different architectures and justifying which approach works the best on our domain-specific data. Open to proposals from all levels of ML practitioners.&lt;/p>
&lt;h3 id="llm-assistant-for-openroad---data-engineering-and-testing">LLM assistant for OpenROAD - Data Engineering and testing&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Topics&lt;/strong>: &lt;code>Large Language Model&lt;/code>, &lt;code>Machine Learning&lt;/code>, &lt;code>Data Engineering&lt;/code>, &lt;code>Model Deployment&lt;/code>, &lt;code>Testing&lt;/code>&lt;/li>
&lt;li>&lt;strong>Skills&lt;/strong>: large language model engineering, prompt engineering, fine-tuning&lt;/li>
&lt;li>&lt;strong>Difficulty&lt;/strong>: Medium&lt;/li>
&lt;li>&lt;strong>Size&lt;/strong>: Medium (175 hours)&lt;/li>
&lt;li>&lt;strong>Mentor&lt;/strong>: &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/indira-iyer/">Indira Iyer&lt;/a>, &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/jack-luar/">Jack Luar&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>This project involves the creation of a conversational assistant designed around &lt;a href="https://github.com/The-OpenROAD-Project/OpenROAD" target="_blank" rel="noopener">OpenROAD&lt;/a> to answer user queries. You will be working in tandem with members of the OpenROAD team and other researchers to deliver a final deployable prototype. This project will focus on the data engineering portion of the project. This may include: training pipelines specifically tailored for fine-tuning LLM models, data annotation, preprocessing and augmentation. Open to proposals from all levels of ML practitioners.&lt;/p>
&lt;h3 id="create-unit-tests-for-openroad-tools">Create Unit tests for OpenROAD tools&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Topics&lt;/strong>: &lt;code>OpenROAD-flow-scripts&lt;/code>, &lt;code>unit testing&lt;/code>&lt;/li>
&lt;li>&lt;strong>Skills&lt;/strong>: Basic VLSI design and tools knowledge, python, tcl, C/C++, Github&lt;/li>
&lt;li>&lt;strong>Difficulty&lt;/strong>: Medium&lt;/li>
&lt;li>&lt;strong>Size&lt;/strong>: Medium ( 175 hours)&lt;/li>
&lt;li>&lt;strong>Mentor&lt;/strong>: &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/vitor-bandeira/">Vitor Bandeira&lt;/a>, &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/indira-iyer/">Indira Iyer&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>You will build unit tests to test specific features of the OpenROAD tool which will become part of the regression test. Here is an example of a test for UPF support: &lt;a href="https://github.com/The-OpenROAD-Project/OpenROAD/blob/master/test/upf/mpd_aes.upf" target="_blank" rel="noopener">https://github.com/The-OpenROAD-Project/OpenROAD/blob/master/test/upf/mpd_aes.upf&lt;/a>.
This is a great way to learn VLSI flow basics and the art of testing them for practical applications.&lt;/p></description></item><item><title>These 4 new features will change the way you use OpenROAD</title><link>https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre23/ucsd/openroad/20231029-luarss/</link><pubDate>Sun, 29 Oct 2023 00:00:00 +0000</pubDate><guid>https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre23/ucsd/openroad/20231029-luarss/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>Welcome to the final blog post for my GSoC’23! Once again, my name is
Jack and I am working under the open-source electronic design automation
project - OpenROAD. We are a fast growing leading open-source
foundational application for semiconductor digital design, as evidenced
from our consistent star growth since inception. You may check us out
at this &lt;a href="https://github.com/The-OpenROAD-Project/OpenROAD/" target="_blank" rel="noopener">link&lt;/a>.
Allow me to share the four significant contributions I made in this GSoC
project.&lt;/p>
&lt;p>&lt;a href="https://star-history.com/#The-OpenROAD-Project/OpenROAD&amp;amp;Date" target="_blank" rel="noopener">
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="https://api.star-history.com/svg?repos=The-OpenROAD-Project/OpenROAD&amp;amp;type=Date" alt="Star History Chart" loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/a>&lt;/p>
&lt;h2 id="1-improving-ease-of-installation">1) Improving Ease of Installation&lt;/h2>
&lt;p>Firstly, OpenROAD is now able to support multiple operating systems.
This is essential as one of our primary goals is to democratise chip
implementation. And installation is often one of the hardest steps
to get right, so that was one of our priorities. Today, we have
provided options for different types of installation:&lt;/p>
&lt;ul>
&lt;li>&lt;em>Prebuilt binaries&lt;/em>: Local installations can often be riddled
with incompatibilities or unexpected bugs, as well as taking a long
compilation time. We sidestepped this by providing semi-regular
updates to OpenROAD binary, reducing the time to installation.&lt;/li>
&lt;li>&lt;em>Docker&lt;/em>: Echoing previous concerns, we also enabled Docker installation
for 9 major operating systems. Docker is extremely flexible and runs
on many operating systems (as long as it is supported by Docker).&lt;/li>
&lt;/ul>
&lt;p>With these changes, we have observed 10% reduction of installation related Github issues posted on a weekly basis.&lt;/p>
&lt;p>
&lt;figure id="figure-figure-1-supported-os-matrix">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Pic1" srcset="
/report/osre23/ucsd/openroad/20231029-luarss/pic1_hu40f387e99db4aa81085a02b3bc75ebae_22326_5ec6a03672875da1d114ed8b24e54d81.webp 400w,
/report/osre23/ucsd/openroad/20231029-luarss/pic1_hu40f387e99db4aa81085a02b3bc75ebae_22326_256594bafdfffa842322c55b991f1ae1.webp 760w,
/report/osre23/ucsd/openroad/20231029-luarss/pic1_hu40f387e99db4aa81085a02b3bc75ebae_22326_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre23/ucsd/openroad/20231029-luarss/pic1_hu40f387e99db4aa81085a02b3bc75ebae_22326_5ec6a03672875da1d114ed8b24e54d81.webp"
width="650"
height="608"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Figure 1: Supported OS matrix
&lt;/figcaption>&lt;/figure>
&lt;/p>
&lt;h2 id="2-filling-missing-documentation">2) Filling Missing Documentation&lt;/h2>
&lt;p>Next, we have made considerable improvements to over 20 tool-specific
documentations, introducing consistent formatting styles for each page.
We introduce default values and datatypes to allow users to use the
tools with greater ease.&lt;/p>
&lt;p>
&lt;figure id="figure-figure-2-helpful-documentation-defaults-and-datatype">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Pic2" srcset="
/report/osre23/ucsd/openroad/20231029-luarss/pic2_hu909e40a774da931354132b6c4f3b2165_22459_f20854090d02e2c8c4eab994e275b52a.webp 400w,
/report/osre23/ucsd/openroad/20231029-luarss/pic2_hu909e40a774da931354132b6c4f3b2165_22459_2d201fd5ada34b46714b076a84194e28.webp 760w,
/report/osre23/ucsd/openroad/20231029-luarss/pic2_hu909e40a774da931354132b6c4f3b2165_22459_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre23/ucsd/openroad/20231029-luarss/pic2_hu909e40a774da931354132b6c4f3b2165_22459_f20854090d02e2c8c4eab994e275b52a.webp"
width="691"
height="368"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Figure 2: Helpful documentation defaults and datatype
&lt;/figcaption>&lt;/figure>
&lt;/p>
&lt;p>Rather than having all arguments for a function under a common table,
we separated out into developer arguments and developer commands.
This is to further make our documentation more beginner-friendly to read,
while not alienating our technical userbase. We have also added sections
for example scripts and regression test, so as to help onboard
newcomers to each tool of the flow.&lt;/p>
&lt;p>
&lt;figure id="figure-figure-3-useful-developer-commands-example-scripts-and-regression-test-instructions">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Pic3" srcset="
/report/osre23/ucsd/openroad/20231029-luarss/pic3_huf8b2e6da7ee6998c3390f4691d0458af_30285_e3fcd088f5df4574a67cf6d097c9e73a.webp 400w,
/report/osre23/ucsd/openroad/20231029-luarss/pic3_huf8b2e6da7ee6998c3390f4691d0458af_30285_1ceeb7f590547f00904c173b5a084798.webp 760w,
/report/osre23/ucsd/openroad/20231029-luarss/pic3_huf8b2e6da7ee6998c3390f4691d0458af_30285_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre23/ucsd/openroad/20231029-luarss/pic3_huf8b2e6da7ee6998c3390f4691d0458af_30285_e3fcd088f5df4574a67cf6d097c9e73a.webp"
width="690"
height="670"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Figure 3: Useful developer commands, example scripts, and regression test instructions
&lt;/figcaption>&lt;/figure>
&lt;/p>
&lt;h2 id="3-extensible-documentation-framework">3) Extensible Documentation Framework&lt;/h2>
&lt;p>Thirdly, we have introduced extensible documentation frameworks.
Now, what do we mean by &lt;em>extensible&lt;/em>? It means we have created an
infrastructure which is easy to use for developers, and allows for
greater maintanability. Our goal is to create something that
requires minimal changes to add content for documentation.&lt;/p>
&lt;p>So, how did we do this?&lt;/p>
&lt;p>We introduced 4 initiatives, namely: the warning/error messages glossary.
We noticed that people were searching for error and warning messages,
but our documentation did not have them. So we added a page where all
the error/warning messages along with relevant code line number can
be generated automatically. On top of that, developers can add useful
debug information to help the end user.&lt;/p>
&lt;p>
&lt;figure id="figure-figure-4-warningerror-messages-glossary">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Pic4" srcset="
/report/osre23/ucsd/openroad/20231029-luarss/pic4_hu4de9242319e92c4f80050403ede9a5eb_17089_aa069c4f5f2d1682fc92525139f6d57c.webp 400w,
/report/osre23/ucsd/openroad/20231029-luarss/pic4_hu4de9242319e92c4f80050403ede9a5eb_17089_881f56c79ec21ee86b422f9eb12ef3c8.webp 760w,
/report/osre23/ucsd/openroad/20231029-luarss/pic4_hu4de9242319e92c4f80050403ede9a5eb_17089_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre23/ucsd/openroad/20231029-luarss/pic4_hu4de9242319e92c4f80050403ede9a5eb_17089_aa069c4f5f2d1682fc92525139f6d57c.webp"
width="687"
height="348"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Figure 4: Warning/Error messages glossary.
&lt;/figcaption>&lt;/figure>
&lt;/p>
&lt;p>Next, we also introduced automatically generated Doxygen pages, which
integrates nicely into our C++/Tcl source code framework. This automatic
generation will make it much more convenient for developers to just
insert comments into their source code, and allow Doxygen to generate
documentation automatically.&lt;/p>
&lt;p>
&lt;figure id="figure-figure-5-doxygen-pages">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Pic5" srcset="
/report/osre23/ucsd/openroad/20231029-luarss/pic5_hu5bbe3008d2202e9240368dd966dc7b39_37072_567ad1b2725278073bfe8cdf4d2dad6a.webp 400w,
/report/osre23/ucsd/openroad/20231029-luarss/pic5_hu5bbe3008d2202e9240368dd966dc7b39_37072_35b25ed8006816a0cd300dba6aedb4a3.webp 760w,
/report/osre23/ucsd/openroad/20231029-luarss/pic5_hu5bbe3008d2202e9240368dd966dc7b39_37072_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre23/ucsd/openroad/20231029-luarss/pic5_hu5bbe3008d2202e9240368dd966dc7b39_37072_567ad1b2725278073bfe8cdf4d2dad6a.webp"
width="760"
height="578"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Figure 5: Doxygen pages.
&lt;/figcaption>&lt;/figure>
&lt;/p>
&lt;p>Next, we introduced cloud-based packaging. It is important that our
framework is able to runnable on cloud, and the ever-popular notebook
format. Our Colab based notebook was created with this in mind, and
allows for easy transfer to other notebook providers with some
modifications. Check out the notebooks here!&lt;/p>
&lt;p>
&lt;figure id="figure-figure-6-google-colab-can-now-run-openroad-scripts">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Pic6" srcset="
/report/osre23/ucsd/openroad/20231029-luarss/pic6_hu84acc4eba83f1de30ea399aa678d63ae_48463_0f20b3a36a05036a4602868c18f0da9b.webp 400w,
/report/osre23/ucsd/openroad/20231029-luarss/pic6_hu84acc4eba83f1de30ea399aa678d63ae_48463_125685c82e5be8372c2ae4b937fdd412.webp 760w,
/report/osre23/ucsd/openroad/20231029-luarss/pic6_hu84acc4eba83f1de30ea399aa678d63ae_48463_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre23/ucsd/openroad/20231029-luarss/pic6_hu84acc4eba83f1de30ea399aa678d63ae_48463_0f20b3a36a05036a4602868c18f0da9b.webp"
width="760"
height="321"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Figure 6: Google Colab can now run OpenROAD scripts.
&lt;/figcaption>&lt;/figure>
&lt;/p>
&lt;p>Lastly, we have the changelog workflow which can be triggered manually.
For our open-source project, we have chosen not to do software releases.
This means it can be difficult to track the changes between commit
numbers. Adding this workflow can help newcomers track the changes
easier, by month.&lt;/p>
&lt;p>
&lt;figure id="figure-figure-7-sample-output-of-github-changelog">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Pic7" srcset="
/report/osre23/ucsd/openroad/20231029-luarss/pic7_hu4e7dae0ef8916646279c834f2bbbed59_40244_a13d29d9b1d8fe53307365f5dfd84d86.webp 400w,
/report/osre23/ucsd/openroad/20231029-luarss/pic7_hu4e7dae0ef8916646279c834f2bbbed59_40244_9baeb333eb95f59c9ac1004e0e9fd54c.webp 760w,
/report/osre23/ucsd/openroad/20231029-luarss/pic7_hu4e7dae0ef8916646279c834f2bbbed59_40244_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre23/ucsd/openroad/20231029-luarss/pic7_hu4e7dae0ef8916646279c834f2bbbed59_40244_a13d29d9b1d8fe53307365f5dfd84d86.webp"
width="760"
height="400"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Figure 7: Sample output of github changelog
&lt;/figcaption>&lt;/figure>
&lt;/p>
&lt;h2 id="4-openroad-chatbot">4) OpenROAD Chatbot&lt;/h2>
&lt;p>Finally, we are also discussing the potential of creating a chatbot whose
purpose is to answer user queries. We were thinking, there are lots of
domain knowledge in Slack Channels, Github repos, and so on, so why
not create a LLM-based chatbot. Stay tuned for updates!&lt;/p>
&lt;h2 id="personal-reflections">Personal Reflections&lt;/h2>
&lt;p>To me, my most valuable takeaway is with regards to code quality. Often
times, we as coders tend to opt for the best solution and “hack” something
out quickly. Hacking is fine, as a proof of concept - but not for
long term code development. Working in open-source projects like this,
I have learnt to avoid creating unnecessary files, shortening the code
and optimising runtime. In doing our job, we also wish to make life
easier, not harder for future developers&lt;/p>
&lt;h2 id="final-words">Final Words&lt;/h2>
&lt;p>I would like to express my gratitude to my mentors Indira and Vitor for
their guidance and insight throughout the project, as well as the
OpenROAD dev team for their assistance. Would also like to thank the
Google Summer of Code organising committee, and UCSC for creating such a
wonderful program. Being able to contribute to actual real open-source
projects with real needs, is truly the best of both worlds for aspiring
programmers.&lt;/p></description></item><item><title>Uncovering Actionable Insights using ReadTheDocs Analytics</title><link>https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre23/ucsd/openroad/20230727-luarss/</link><pubDate>Thu, 27 Jul 2023 00:00:00 +0000</pubDate><guid>https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre23/ucsd/openroad/20230727-luarss/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>Hello again! This is Jack, a GSoC contributor for the OpenROAD Project.
My task is to update and optimise the documentation to encourage user
adoption and engagement.&lt;/p>
&lt;p>For open-source repo maintainers, &lt;a href="https://readthedocs.org/" target="_blank" rel="noopener">readthedocs&lt;/a>
is a godsend. One of its more underrated features are in providing
search and traffic analytics of up to &lt;strong>90 days&lt;/strong> for the &lt;code>Community&lt;/code> tier
users. This is awesome, because ReadTheDocs is &amp;ldquo;always free for open source
and community projects&amp;rdquo;.&lt;/p>
&lt;h2 id="motivation">Motivation&lt;/h2>
&lt;p>Why are analytics important?&lt;/p>
&lt;p>Analytics are great as a &lt;em>proxy&lt;/em> indicator for documentation engagement.
For instance, traffic to a page, could highlight how popular the tool is,
or it could also mean the tool is unclear and therefore people might need
more visits to the page to further understand usage. But overall,
it still indicates that the page needs to be taken care of due to the
increased visits.&lt;/p>
&lt;p>In what follows we aim to provide a quick tutorial as well as
list out some of the actionable insights we uncovered in the
OpenROAD/OpenROAD-flow-scripts documentation project.&lt;/p>
&lt;h2 id="preamble">Preamble&lt;/h2>
&lt;p>To download the analytics raw &lt;code>csv&lt;/code> files, refer to this
&lt;a href="https://docs.readthedocs.io/en/stable/analytics.html" target="_blank" rel="noopener">website&lt;/a>.&lt;/p>
&lt;p>You should also have the following packages installed: &lt;code>pandas&lt;/code>, &lt;code>numpy&lt;/code>, &lt;code>matplotlib&lt;/code>, &lt;code>scipy&lt;/code>.&lt;/p>
&lt;h2 id="traffic-analytics">Traffic Analytics&lt;/h2>
&lt;p>Traffic analytics are easy to understand.
It comes in the format &lt;code>Date&lt;/code>, &lt;code>Version&lt;/code>, &lt;code>Path&lt;/code>, &lt;code>DailyViews&lt;/code> as follows:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">df&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pd&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">read_csv&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;ta_or.csv&amp;#39;&lt;/span>&lt;span class="p">)[::&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">reset_index&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">drop&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">df&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Date&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">df&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Date&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">apply&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">lambda&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">split&lt;/span>&lt;span class="p">()[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">df&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">head&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>
&lt;figure id="figure-figure-1-loading-traffic-analytics-dataframe">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Load traffic analytics DF" srcset="
/report/osre23/ucsd/openroad/20230727-luarss/pic1_hu3ae39bf6bc653845cdf52f284f9914c8_18120_0fe44b789026339d8a488b67e455af49.webp 400w,
/report/osre23/ucsd/openroad/20230727-luarss/pic1_hu3ae39bf6bc653845cdf52f284f9914c8_18120_c34649440686784f502a8fa245519fe8.webp 760w,
/report/osre23/ucsd/openroad/20230727-luarss/pic1_hu3ae39bf6bc653845cdf52f284f9914c8_18120_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre23/ucsd/openroad/20230727-luarss/pic1_hu3ae39bf6bc653845cdf52f284f9914c8_18120_0fe44b789026339d8a488b67e455af49.webp"
width="420"
height="345"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Figure 1: Loading traffic analytics dataframe
&lt;/figcaption>&lt;/figure>
&lt;/p>
&lt;p>The raw data is not all that informative.
Let us aggregate the data to obtain the weekly views.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">weeklydf&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">df&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">copy&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">weeklydf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Date&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pd&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">to_datetime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">weeklydf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Date&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">pd&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">to_timedelta&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">7&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">unit&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;d&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">weeklydf&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">weeklydf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">groupby&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="s1">&amp;#39;Path&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">pd&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Grouper&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">key&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;Date&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">freq&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;W&amp;#39;&lt;/span>&lt;span class="p">)])[&lt;/span>&lt;span class="s1">&amp;#39;Views&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>\
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">.&lt;/span>&lt;span class="n">sum&lt;/span>&lt;span class="p">()&lt;/span>\
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">.&lt;/span>&lt;span class="n">reset_index&lt;/span>&lt;span class="p">()&lt;/span>\
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">.&lt;/span>&lt;span class="n">sort_values&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Date&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">weeklydf&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">weeklydf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Path&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;/index.html&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>
&lt;figure id="figure-figure-2-aggregated-weekly-traffic">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Aggregated weekly traffic" srcset="
/report/osre23/ucsd/openroad/20230727-luarss/pic2_hu4e5090e8319a278be3c23daaec31a810_14831_2356d16291dbea694b0bc9c05693ffe8.webp 400w,
/report/osre23/ucsd/openroad/20230727-luarss/pic2_hu4e5090e8319a278be3c23daaec31a810_14831_cf13de62f49742cd0e76c661feea93ed.webp 760w,
/report/osre23/ucsd/openroad/20230727-luarss/pic2_hu4e5090e8319a278be3c23daaec31a810_14831_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre23/ucsd/openroad/20230727-luarss/pic2_hu4e5090e8319a278be3c23daaec31a810_14831_2356d16291dbea694b0bc9c05693ffe8.webp"
width="243"
height="393"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Figure 2: Aggregated weekly traffic
&lt;/figcaption>&lt;/figure>
&lt;/p>
&lt;p>Note that we can replace the page path with any interesting page path
we desire. A useful command to obtain all possible page paths in this
dataset is to use:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">weeklydf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">unique&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>
&lt;figure id="figure-figure-3-unique-paths-in-dataset">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Unique paths" srcset="
/report/osre23/ucsd/openroad/20230727-luarss/pic3_hub46945e77dd8a933670e33e4fea7dea8_54129_94dd6b47fa834b3c36ea619deffd3a6a.webp 400w,
/report/osre23/ucsd/openroad/20230727-luarss/pic3_hub46945e77dd8a933670e33e4fea7dea8_54129_f50b03560ab266073e2dee2fa7a04e51.webp 760w,
/report/osre23/ucsd/openroad/20230727-luarss/pic3_hub46945e77dd8a933670e33e4fea7dea8_54129_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre23/ucsd/openroad/20230727-luarss/pic3_hub46945e77dd8a933670e33e4fea7dea8_54129_94dd6b47fa834b3c36ea619deffd3a6a.webp"
width="591"
height="538"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Figure 3: Unique paths in dataset
&lt;/figcaption>&lt;/figure>
&lt;/p>
&lt;p>With these neat data in our arsenal, let us do some plotting!
For the visualisation, we have chosen to use the traffic aggregated
on a daily scale. On top of this, we also plot a linear
best-fit line of all the points to track the trendline over time.&lt;/p>
&lt;p>The code below shows how to plot the top 20 pages.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">plot_views&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">df&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">numPages&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">20&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Groupby Path, sum views&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">pathResults&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">df&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">groupby&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Path&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Views&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sum&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sort_values&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ascending&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">False&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fig&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ax&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">subplots&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">numPages&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">figsize&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">15&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">30&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fig&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">tight_layout&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">numPages&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pathResults&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">index&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">temp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">df&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">df&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Path&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="n">key&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ax&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">scatter&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">temp&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Date&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">temp&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Views&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ax&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">set_xticks&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">arange&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">90&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">7&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="c1"># this line is to not clutter the x-axis too much.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ax&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">set_ylabel&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Views&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ax&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">set_title&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">key&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># linear regression&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">temp&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Date&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">temp&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Views&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">bestfit&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">stats&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">linregress&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">y&lt;/span>&lt;span class="p">)),&lt;/span>&lt;span class="n">y&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bestfit&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">equation&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">str&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">round&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bestfit&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">],&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34;x + &amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nb">str&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">round&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bestfit&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ax&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">plot&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">y&lt;/span>&lt;span class="p">)),&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">poly1d&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">polyfit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">y&lt;/span>&lt;span class="p">)),&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">))(&lt;/span>&lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">y&lt;/span>&lt;span class="p">))),&lt;/span> &lt;span class="s1">&amp;#39;--&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">label&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">equation&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ax&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">legend&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">loc&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;upper right&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>
&lt;figure id="figure-figure-4-top-20-pages-by-daily-view-counts-in-descending-order">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Top 20 plots" srcset="
/report/osre23/ucsd/openroad/20230727-luarss/pic4_hu0544053b26ff363bea669ad03cb25a33_298754_208fbbf3fe9f3d6b7b48a8f44d65e70b.webp 400w,
/report/osre23/ucsd/openroad/20230727-luarss/pic4_hu0544053b26ff363bea669ad03cb25a33_298754_523ed86a22800eb3addad7738facd6cc.webp 760w,
/report/osre23/ucsd/openroad/20230727-luarss/pic4_hu0544053b26ff363bea669ad03cb25a33_298754_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre23/ucsd/openroad/20230727-luarss/pic4_hu0544053b26ff363bea669ad03cb25a33_298754_208fbbf3fe9f3d6b7b48a8f44d65e70b.webp"
width="379"
height="760"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Figure 4: Top 20 pages by daily view counts (in descending order)
&lt;/figcaption>&lt;/figure>
&lt;/p>
&lt;p>Also, we can aggregate the total views by day to plot daily traffic:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">plot_daily_traffic&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">df&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Groupby Date, sum views&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fig&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">figure&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">figsize&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">15&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">dateResults&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">df&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">groupby&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Date&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Views&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sum&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">dateResults&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">index&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">dateResults&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">values&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">scatter&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">xticks&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">arange&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">90&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">7&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ylabel&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Views&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">title&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Traffic by Day&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># linear regression&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">bestfit&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">stats&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">linregress&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">y&lt;/span>&lt;span class="p">)),&lt;/span>&lt;span class="n">y&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bestfit&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">equation&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">str&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">round&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bestfit&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">],&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34;x + &amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nb">str&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">round&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bestfit&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">plot&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">y&lt;/span>&lt;span class="p">)),&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">poly1d&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">polyfit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">y&lt;/span>&lt;span class="p">)),&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">))(&lt;/span>&lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">y&lt;/span>&lt;span class="p">))),&lt;/span> &lt;span class="s1">&amp;#39;--&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">label&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">equation&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">legend&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">loc&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;upper right&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>
&lt;figure id="figure-figure-5-daily-aggregated-traffic">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Daily aggregated traffic" srcset="
/report/osre23/ucsd/openroad/20230727-luarss/pic5_hu284f436d507b391ad27b39b31846aa7d_24195_f1cfe4f85a6f52b10851153e3759601f.webp 400w,
/report/osre23/ucsd/openroad/20230727-luarss/pic5_hu284f436d507b391ad27b39b31846aa7d_24195_be83d71fe2635b895829f733ef678a4f.webp 760w,
/report/osre23/ucsd/openroad/20230727-luarss/pic5_hu284f436d507b391ad27b39b31846aa7d_24195_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre23/ucsd/openroad/20230727-luarss/pic5_hu284f436d507b391ad27b39b31846aa7d_24195_f1cfe4f85a6f52b10851153e3759601f.webp"
width="760"
height="503"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Figure 5: Daily aggregated traffic
&lt;/figcaption>&lt;/figure>
&lt;/p>
&lt;h3 id="key-trends">Key Trends:&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>Notice how there seems to be a cyclical pattern every week - rise
in average view counts during Mon-Fri, then a falloff on weekends.
This is most evident in the pages &lt;code>/index.html&lt;/code>, &lt;code>/main/README.html&lt;/code>.
This could be attributed to the standard work or study week of Mon-Fri.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>According to the gradient of the best-fit line for Figure 2,
there seems to be a slow decline of traffic for the OpenROAD docs.
For a gradient of -0.77, it translates roughly to decline of 22 views
per month. The small decline could be attributed to the higher traffic
from 19-29 March 2023, the dates for the
&lt;a href="https://openroaddesigncontest.org/" target="_blank" rel="noopener">OpenROAD 7nm design contest&lt;/a>.
Contest are always good for driving traffic.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="actionable-insights">Actionable insights:&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>Top pages are usually landing pages: &lt;code>index.html&lt;/code>, &lt;code>main/README.html&lt;/code>, &lt;code>main/src/README.html&lt;/code>. We thus prioritised making these pages more readable and concise.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>This is followed by tutorial &lt;code>/tutorials/index.html&lt;/code> and &lt;code>/search.html&lt;/code>. The prominence of the tutorials page made us shift the tutorials link to a higher position on the left navigation sidebar. Search tips were also included to obtain better search results. More about search in the next section.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Next, as OpenROAD consists of 20 tools: traffic analytics helps us come up with an order to update: &lt;code>ifp&lt;/code>, &lt;code>gui&lt;/code>, &lt;code>odb&lt;/code>, &lt;code>ppl&lt;/code>, &lt;code>sta&lt;/code>, &lt;code>grt&lt;/code>, &lt;code>mpl&lt;/code>, &lt;code>gpl&lt;/code>, &lt;code>rsz&lt;/code>, &lt;code>rcx&lt;/code>. &lt;code>pdn&lt;/code>, &lt;code>cts&lt;/code>, &lt;code>psm&lt;/code>&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="search-analytics">Search Analytics&lt;/h2>
&lt;p>Search analytics come in the form of: &lt;code>Date&lt;/code>, &lt;code>Query&lt;/code>, &lt;code>TotalResults&lt;/code>.
Contrary to traffic analytics, &lt;code>TotalResults&lt;/code> do not refer to search count
for the query that day, but rather it corresponds to the total results
returned by that query on that day. Separate aggregation still needs to
be done to obtain the final count.&lt;/p>
&lt;p>Firstly, let us load the dataset and perform a groupby on the column &lt;code>Date&lt;/code>
to obtain the daily count aggregates.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">df&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pd&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">read_csv&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;sa_or.csv&amp;#39;&lt;/span>&lt;span class="p">)[::&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">reset_index&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">drop&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">df&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">df&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">rename&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">columns&lt;/span> &lt;span class="o">=&lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="s1">&amp;#39;Created Date&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;Date&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;Total Results&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;TotalResults&amp;#39;&lt;/span>&lt;span class="p">})&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">df&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Date&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">df&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Date&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">apply&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">lambda&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">split&lt;/span>&lt;span class="p">()[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">dateResults&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">df&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">groupby&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Date&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">TotalResults&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">count&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">dateResults&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>
&lt;figure id="figure-figure-6-code-output-for-daily-aggregated-search-counts">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Daily count code" srcset="
/report/osre23/ucsd/openroad/20230727-luarss/pic6_hufe284b2003be927a09036a17b0f147ed_7438_303764681c719b59422e8ac4adff87d5.webp 400w,
/report/osre23/ucsd/openroad/20230727-luarss/pic6_hufe284b2003be927a09036a17b0f147ed_7438_ae0b89dd9a05f1d083e0a5caf434a1c6.webp 760w,
/report/osre23/ucsd/openroad/20230727-luarss/pic6_hufe284b2003be927a09036a17b0f147ed_7438_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre23/ucsd/openroad/20230727-luarss/pic6_hufe284b2003be927a09036a17b0f147ed_7438_303764681c719b59422e8ac4adff87d5.webp"
width="390"
height="231"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Figure 6: Code output for daily aggregated search counts.
&lt;/figcaption>&lt;/figure>
&lt;/p>
&lt;p>Now we are ready to plot the daily aggregated searches. This represents
the number of times a search was performed on the documentation website.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">plot_daily_searches&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">df&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">dateResults&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">df&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">groupby&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Date&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">TotalResults&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">count&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">dateResults&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">index&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">dateResults&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">values&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">scatter&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">xticks&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">arange&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">90&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">7&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ylabel&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;# Times Searched&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">title&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Search count by day&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># linear regression&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">bestfit&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">stats&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">linregress&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">y&lt;/span>&lt;span class="p">)),&lt;/span>&lt;span class="n">y&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bestfit&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">equation&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">str&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">round&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bestfit&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">],&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34;x + &amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nb">str&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">round&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bestfit&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">plot&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">y&lt;/span>&lt;span class="p">)),&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">poly1d&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">polyfit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">y&lt;/span>&lt;span class="p">)),&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">))(&lt;/span>&lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">y&lt;/span>&lt;span class="p">))),&lt;/span> &lt;span class="s1">&amp;#39;--&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">label&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">equation&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">legend&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">loc&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;upper right&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>
&lt;figure id="figure-figure-7-daily-aggregated-search-counts">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Final search analytics graph" srcset="
/report/osre23/ucsd/openroad/20230727-luarss/pic7_huaf6e8114aa38a4f77afbcf6239df4596_24960_dfcee10fa9be516c148eb11ac3598591.webp 400w,
/report/osre23/ucsd/openroad/20230727-luarss/pic7_huaf6e8114aa38a4f77afbcf6239df4596_24960_2bfda1034e5a343c34c529e62f8279ba.webp 760w,
/report/osre23/ucsd/openroad/20230727-luarss/pic7_huaf6e8114aa38a4f77afbcf6239df4596_24960_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre23/ucsd/openroad/20230727-luarss/pic7_huaf6e8114aa38a4f77afbcf6239df4596_24960_dfcee10fa9be516c148eb11ac3598591.webp"
width="760"
height="507"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Figure 7: Daily aggregated search counts
&lt;/figcaption>&lt;/figure>
&lt;/p>
&lt;p>We can also do an additional plot for queries that return zero results.
In other words, we are interested in the terms people are curious about;
but is not covered by our documentation currently.
Think of it as an on-site search engine optimisation.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">zeroResults&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">df&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">df&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">TotalResults&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">zeroResults&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">zeroResults&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">groupby&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Query&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Date&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">count&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sort_values&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ascending&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">False&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">All 0 results queries (desc)&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">zeroResults&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">index&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">tolist&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Example output as follows:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">[&amp;#39;autotuner&amp;#39;, &amp;#39;tdms&amp;#39;, &amp;#39;*macro*&amp;#39;, &amp;#39;rtlmp_max_inst&amp;#39;, &amp;#39;get_property&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;check_setup&amp;#39;, &amp;#39;centos&amp;#39;, &amp;#39;initialize_padring&amp;#39;, &amp;#39;core_utilization&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;pin_access&amp;#39;, &amp;#39;read_libraries&amp;#39;, &amp;#39;config&amp;#39;, &amp;#39;eco&amp;#39;, &amp;#39;rpt&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;improve_placement&amp;#39;, &amp;#39;define_process_corner&amp;#39;, &amp;#39;global_place&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;report_worst_slack&amp;#39;, &amp;#39;max_phi_cof&amp;#39;, &amp;#39;report_power&amp;#39;, &amp;#39;get_pins&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;registerfile&amp;#39;, &amp;#39;set_global_routing&amp;#39;, &amp;#39;prebuilt&amp;#39;, &amp;#39;env&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;repair_clock_inverters&amp;#39;, &amp;#39;set_thread_count&amp;#39;, &amp;#39;report_&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;partition_design&amp;#39;, &amp;#39;place_cell&amp;#39;, &amp;#39;blockage&amp;#39;, &amp;#39;partitionmgr&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;nmos&amp;#39;, &amp;#39;tuner&amp;#39;, &amp;#39;write_sdf&amp;#39;, &amp;#39;place_density&amp;#39;, &amp;#39;place_pins_args&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;size_cell&amp;#39;, &amp;#39;*macor*&amp;#39;, &amp;#39;repair_clock_inverter&amp;#39;, &amp;#39;misk&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;readhaty&amp;#39;, &amp;#39;readhat&amp;#39;, &amp;#39;obstruct&amp;#39;, &amp;#39;odbpy&amp;#39;, &amp;#39;openpdn&amp;#39;, &amp;#39;openram&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;placement_cfg&amp;#39;, &amp;#39;read_macro_placement&amp;#39;, &amp;#39;output_drc&amp;#39;, &amp;#39;positon&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;pct&amp;#39;, &amp;#39;qrctechtable&amp;#39;, &amp;#39;qrctechfile&amp;#39;, &amp;#39;qrctech&amp;#39;, &amp;#39;qrc&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;properly covered&amp;#39;, &amp;#39;precision innovations&amp;#39;, &amp;#39;repeater&amp;#39;, &amp;#39;&amp;#34;rcx-0487&amp;#34;&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;report_worst&amp;#39;, &amp;#39;report_area&amp;#39;, &amp;#39;report_clock_properties&amp;#39;, &amp;#39;skywater&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;study&amp;#39;, &amp;#39;sv&amp;#39;, &amp;#39;synth&amp;#39;, &amp;#39;synth_hierarchical&amp;#39;, &amp;#39;systemverilog&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;tdm&amp;#39;, &amp;#39;tdms_place&amp;#39;, &amp;#39;triton&amp;#39;, &amp;#39;ungroup&amp;#39;, &amp;#39;verilog_files&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;wrc&amp;#39;, &amp;#39;write_lef&amp;#39;, &amp;#39;write_partition_verilog&amp;#39;, &amp;#39;שואם&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;si2&amp;#39;, &amp;#39;sever&amp;#39;, &amp;#39;setrc&amp;#39;, &amp;#39;rtl_macro&amp;#39;, &amp;#39;report_dcalc&amp;#39;, &amp;#39;report_design&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;report_design_info&amp;#39;, &amp;#39;report_instance&amp;#39;, &amp;#39;report_slews&amp;#39;, &amp;#39;resize&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;rtlmp&amp;#39;, &amp;#39;set_power_activity&amp;#39;, &amp;#39;rtree&amp;#39;, &amp;#39;run_all&amp;#39;, &amp;#39;run_all.tcl&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;sc&amp;#39;, &amp;#39;set_all_input_output_delays&amp;#39;, &amp;#39;set_io_pin_constraints&amp;#39;, &amp;#39;metis&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;lefdef&amp;#39;, &amp;#39;make_result_file&amp;#39;, &amp;#39;macro_placement_cfg&amp;#39;, &amp;#39;clock__details&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;clocks__details&amp;#39;, &amp;#39;combinational&amp;#39;, &amp;#39;config.mk&amp;#39;, &amp;#39;coord&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;core_margin&amp;#39;, &amp;#39;db_process_node&amp;#39;, &amp;#39;dbblocjs&amp;#39;, &amp;#39;dbdatabase&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;dbr&amp;#39;, &amp;#39;dbrt&amp;#39;, &amp;#39;dbrttree&amp;#39;, &amp;#39;debian&amp;#39;, &amp;#39;define_pin_shape&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;densiy&amp;#39;, &amp;#39;desgin&amp;#39;, &amp;#39;diff_file&amp;#39;, &amp;#39;clk_period&amp;#39;, &amp;#39;clk_io_ptc&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;cdl&amp;#39;, &amp;#39;analog&amp;#39;, &amp;#39;./env.sh&amp;#39;, &amp;#39;178&amp;#39;, &amp;#39;6_final&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;6_final.odb&amp;#39;, &amp;#39;_placement&amp;#39;, &amp;#39;abat&amp;#39;, &amp;#39;add_stripe&amp;#39;, &amp;#39;arch&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;ccs&amp;#39;, &amp;#39;binaries&amp;#39;, &amp;#39;bookshelf&amp;#39;, &amp;#39;buff_cell&amp;#39;, &amp;#39;buildwithdocker&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;busbitchars&amp;#39;, &amp;#39;buschar&amp;#39;, &amp;#39;captable&amp;#39;, &amp;#39;directoryobject&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;disallow_one_site_gaps&amp;#39;, &amp;#39;distribute&amp;#39;, &amp;#39;is_port&amp;#39;, &amp;#39;hierarch&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;hop&amp;#39;, &amp;#39;hyper&amp;#39;, &amp;#39;initialie_flooorplan&amp;#39;, &amp;#39;initialize_flooorplan&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;instance_count&amp;#39;, &amp;#39;is_chip&amp;#39;, &amp;#39;lean&amp;#39;, &amp;#39;gui_final&amp;#39;, &amp;#39;lec&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;*def*&amp;#39;, &amp;#39;limitation&amp;#39;, &amp;#39;lyp&amp;#39;, &amp;#39;maco&amp;#39;, &amp;#39;macro_pin&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;macro_place&amp;#39;, &amp;#39;harness&amp;#39;, &amp;#39;gui.py&amp;#39;, &amp;#39;dont&amp;#39;, &amp;#39;fill_cell&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;dreamplace&amp;#39;, &amp;#39;em&amp;#39;, &amp;#39;enable_dpo&amp;#39;, &amp;#39;energy&amp;#39;, &amp;#39;env.sh&amp;#39;, &amp;#39;erc&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;export&amp;#39;, &amp;#39;findmaste&amp;#39;, &amp;#39;grt_layer_adjustments&amp;#39;, &amp;#39;findmaster&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;freepdk45&amp;#39;, &amp;#39;gdt&amp;#39;, &amp;#39;global_&amp;#39;, &amp;#39;global_place_db&amp;#39;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#39;global_placementy&amp;#39;, &amp;#39;graph&amp;#39;, &amp;#39;갲&amp;#39;]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For our case we can roughly the problem with these zero-result queries fall
under one of these categories:&lt;/p>
&lt;ul>
&lt;li>Missing documentation: Either the parameter of functionality&lt;/li>
&lt;li>Typo: User has the right keyword, but did not type it correctly. We will therefore provide them with search &lt;a href="https://openroad-flow-scripts.readthedocs.io/en/latest/user/FAQS.html#how-do-i-get-better-search-results" target="_blank" rel="noopener">tips&lt;/a> such as using fuzziness &lt;code>~N&lt;/code> operator for better matches.&lt;/li>
&lt;/ul>
&lt;h2 id="future-work">Future Work&lt;/h2>
&lt;p>ReadTheDocs could also be linked with
&lt;a href="https://analytics.google.com/analytics/web/provision/#/provision" target="_blank" rel="noopener">Google Analytics&lt;/a>,
but this remains for more advanced users.&lt;/p>
&lt;p>Another rich source of information helpful to open-source maintainers
are GitHub issues. These are the direct platform where users discuss
their problems. Another great way to track documentation engagement
is to use metrics such as: installation issues per unit week,
or user-issue retention rate, which tracks the number of users
that continue to file issues after their first.&lt;/p>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;p>This post showcases the amount of insight one can gather from parsing
traffic and search analytics. It also provides useful Python functions
that can be applied to the analytics dataset for fast prototyping
and experimentation. If you are a contributor to open-source projects,
try uncovering some insights for your doc pages today!&lt;/p></description></item><item><title>Update OpenROAD Documentation and Tutorials</title><link>https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre23/ucsd/openroad/20230526-luarss/</link><pubDate>Fri, 26 May 2023 00:00:00 +0000</pubDate><guid>https://deploy-preview-1007--ucsc-ospo.netlify.app/report/osre23/ucsd/openroad/20230526-luarss/</guid><description>&lt;p>Hi! I am Jack, a Masters student at the National University of Singapore. In GSoC 2023, I will be undertaking the project entitled &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/project/osre23/ucsd/openroad">Update OpenROAD Documentation and Tutorials&lt;/a> to improve the user experience and documentation of this exciting open-source RTL-to-GDSII framework, jointly mentored by &lt;strong>Indira Iyer Almeida&lt;/strong> and &lt;strong>Vitor Bandeira&lt;/strong>. Check out my proposal &lt;a href="https://drive.google.com/file/d/1_R4zDe2N05LtAsvDKa3w6C98GvIZ8HAI/view?usp=sharing" target="_blank" rel="noopener">here!&lt;/a>&lt;/p>
&lt;p>This project aims to review and update missing documentation and tutorials in OpenROAD-flow-scripts. A key focus will be on increasing ease-of-setup by updating documentation, setup scripts and docker-based commands. Next, we will also update documentation for the following OpenROAD components: Makefile flow variable, distributed detailed routing, Hier-RTLMP, Autotuner. If time permits, cloud enablement will be implemented, alongside notebook-based packaging to further increase ease of adoption.&lt;/p></description></item></channel></rss>