diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 53ddadb..3e23a3e 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -33,7 +33,8 @@ Key directories and files: - `Gemfile` - Ruby dependencies specification - `_layouts/` - Jekyll layout templates (home.html, default.html, post.html, etc.) - `_includes/` - Jekyll include templates (quantecon-menubar.html) -- `_posts/` - Blog posts and news articles (sorted chronologically) +- `_posts/` - News posts, written by people (sorted chronologically) +- `_data/activity/` - Activity feed data (library releases, lecture updates), written by the reporter bot — see "News and Activity" in README.md - `_lectures/` - Collection of lecture series pages - `_projects/` - Collection of project pages - `_team-members/` - Collection of team member profiles @@ -48,7 +49,7 @@ Key directories and files: ### Common Operations **Adding new content:** -- Blog posts: Add markdown files to `_posts/` with format `YYYY-MM-DD-title.md` +- News posts: Add markdown files to `_posts/` with format `YYYY-MM-DD-title.md` — only for announcements (new projects, grants, people, workshops); releases and lecture updates belong in Activity (see "News and Activity" in README.md) - Team members: Add markdown files to `_team-members/` — `role` picks the section on the team page and `tag` the badge; the Translators section instead lists anyone with a `translator` field (e.g. `translator: "Chinese Editor"`), so a member can appear there as well as in their own section - Lectures: Add markdown files to `_lectures/` - Workshops: Add to `pages/workshops.md` **and** update the hardcoded "Recent Workshops" list in `_layouts/home.html` (see #197 for planned automation) @@ -69,13 +70,14 @@ Key directories and files: 4. Navigate through the main sections: - Home page - verify layout and content load - Lectures page - verify lecture series are listed - - News page - verify blog posts display + - News page - verify news posts display + - Activity page - verify entries from `_data/activity/` display, grouped by month - About page - verify team information - Navigation menu - verify all links work 5. Test responsive design by resizing browser window 6. Verify images and styling load correctly -**No formal testing infrastructure exists** - validation is done through manual browser testing. +**No formal testing infrastructure exists** - validation is done through manual browser testing. The one automated check is `ruby .github/scripts/check-activity-data.rb`, which CI runs to validate the Activity data files. **No linting or formatting commands** - the repository has minimal tooling beyond Jekyll itself. @@ -154,6 +156,7 @@ bundle exec jekyll build ├── Gemfile ├── README.md ├── _config.yml +├── _data/activity/ ├── _includes/ ├── _layouts/ ├── _lectures/ diff --git a/.github/scripts/check-activity-data.rb b/.github/scripts/check-activity-data.rb new file mode 100644 index 0000000..3439748 --- /dev/null +++ b/.github/scripts/check-activity-data.rb @@ -0,0 +1,82 @@ +# Check the Activity feed data in _data/activity/*.yml against the schema in +# README.md ("News and Activity"). The reporter bot writes these files, so a bad +# file should fail its PR with a message that names the file, rather than break +# the Jekyll build or render silently. +require "date" +require "yaml" + +DATA_DIR = File.expand_path("../../_data/activity", __dir__) +TYPES = %w[release lectures translation].freeze +REQUIRED = %w[date type project url].freeze +PULL_URL = %r{\Ahttps://github\.com/[^/]+/[^/]+/pull/\d+\z} + +def blank?(value) + value.nil? || value.to_s.strip.empty? +end + +paths = Dir.glob(File.join(DATA_DIR, "*.{yml,yaml}")).sort +if paths.empty? + puts "::error::No Activity data files found in #{DATA_DIR}" + exit 1 +end + +errors = [] +paths.each do |full_path| + path = full_path.delete_prefix("#{File.expand_path('../..', __dir__)}/") + begin + entries = YAML.safe_load(File.read(full_path), permitted_classes: [Date]) + rescue Psych::Exception => e + errors << "#{path}: invalid YAML (#{e.message})" + next + end + unless entries.is_a?(Array) && !entries.empty? + errors << "#{path}: must be a non-empty list of entries" + next + end + + entries.each_with_index do |entry, i| + where = "#{path}, entry #{i + 1}" + unless entry.is_a?(Hash) + errors << "#{where}: must be a mapping" + next + end + missing = REQUIRED.select { |key| blank?(entry[key]) } + errors << "#{where}: missing #{missing.join(', ')}" unless missing.empty? + errors << "#{where}: date must be an unquoted YYYY-MM-DD date" if entry["date"] && !entry["date"].is_a?(Date) + errors << "#{where}: type must be one of #{TYPES.join(', ')}" if entry["type"] && !TYPES.include?(entry["type"]) + errors << "#{where}: url must start with https://" unless blank?(entry["url"]) || entry["url"].to_s.start_with?("https://") + if entry["type"] == "translation" && !entry["project"].to_s.match?(/\A.+ \([^)]+\)\z/) + errors << "#{where}: a translation's project must be \" ()\"" + end + if entry["type"] == "release" && !(entry["version"].is_a?(String) && !blank?(entry["version"])) + errors << "#{where}: release entries need a version, written as a string (quote numeric-looking versions)" + end + if entry.key?("summary") + summary = entry["summary"] + if !summary.is_a?(String) || blank?(summary) + errors << "#{where}: summary must be a non-empty string (omit the key instead)" + elsif summary.count("`").odd? || summary.include?("``") + errors << "#{where}: summary has an unmatched or doubled backtick" + end + end + + changes = entry["changes"] || [] + unless changes.is_a?(Array) + errors << "#{where}: changes must be a list" + next + end + errors << "#{where}: changes must not be an empty list (omit the key instead)" if entry.key?("changes") && changes.empty? + changes.each_with_index do |change, j| + next if change.is_a?(Hash) && change["title"].is_a?(String) && !blank?(change["title"]) && + change["url"].to_s.match?(PULL_URL) + errors << "#{where}, change #{j + 1}: needs a string title and a GitHub pull-request url" + end + end +end + +if errors.empty? + puts "Activity data OK (#{paths.size} files)" +else + errors.each { |error| puts "::error::#{error}" } + exit 1 +end diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ce075cd..91a579b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,6 +16,9 @@ jobs: ruby-version: '3.4' bundler-cache: true + - name: Check Activity data + run: ruby .github/scripts/check-activity-data.rb + - name: Build Jekyll site run: bundle exec jekyll build env: diff --git a/README.md b/README.md index e061e6d..140c16d 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,63 @@ Website for QuantEcon Organisation bundle exec jekyll serve ``` +## News and Activity + +The site has two streams of updates. The rule of thumb: **people write News, the reporter bot writes Activity.** The bot never publishes to News. + +| | News | Activity | +|---|---|---| +| **What goes in** | New projects (a new lecture series, book, a library's first public release, or a new language edition of a lecture series), grants and funding, people (RAs, team changes, open positions), workshops, tutorials and talks, partnerships, and changes that affect users | Every library release; changes to existing lecture series (new lectures, new sections and exercises, substantive revisions, fixes a reader would notice); updates to translated editions | +| **Written by** | A person | The reporter bot (maintained in the private `QuantEcon/reports-activity` repository) | +| **Review** | Normal PR review of the wording | None day to day: the reporter's daily PR merges itself once the data check passes (planned; until then, a light check of each PR) | + +**Excluded from both:** dependency and action version bumps, CI, build, deploy and publishing-workflow changes, analytics, editor-of-record and other metadata changes, translation-sync tooling, and website changes. Releases of tooling (GitHub Actions, themes, plugins) are not library releases, and a GitHub release published later for an old version is not a new release. + +**Promotion is a human decision.** When a release or a batch of lecture changes deserves wider attention, someone writes a News post that links to it. + +These definitions decide which stream an item belongs to, not where it is shown. News posts are stored in `_posts/` and Activity entries in `_data/activity/` (schema below). Which pages display each stream is a design choice: today News appears on `/news/`, the home page and `feed.xml`, and Activity on `/activity/`. + +### Activity data + +Each reporter run adds one file per stream, `_data/activity/-.yml`, holding a list of entries. `` is `software` for releases and `lectures` for lecture and translation updates, and a run writes no file for a stream with nothing to report. Entry dates can be earlier than the file's run date. The Activity page merges every file, orders the entries by date (newest first, and in file order within a day), and groups them by month. CI checks every file against this schema (`.github/scripts/check-activity-data.rb`). + +| Field | Required | Description | +|---|---|---| +| `date` | yes | Unquoted `YYYY-MM-DD`, in UTC. For a `release`, the day it was published. For `lectures` and `translation`, the day of the first `publish-*` release that included every listed change, i.e. when it went live. | +| `type` | yes | `release`, `lectures` or `translation` | +| `project` | yes | Human-readable name, e.g. `QuantEcon.py` or `Intermediate Quantitative Economics with Python`. A translated edition is ` ()`, e.g. `Python Programming for Economics and Finance (French)`. | +| `url` | yes | The release notes (`release`) or the live site (`lectures`, `translation`) | +| `version` | `release` only | The released version tag, as a string, e.g. `v0.12.0` (quote numeric-looking versions such as `"1.10"`) | +| `summary` | no | One factual sentence describing what changed. Plain text, except that text in single backticks renders as inline code. | +| `changes` | no | List of `{title, url}` links to the pull requests behind the entry (GitHub pull-request URLs), merged into the default branch. Titles are plain text, lightly tidied: prefixes such as `[slug]`, `FIX:` or `chore:`, and internal notes, may be dropped. | + +For example, `_data/activity/2026-09-27-lectures.yml`: + +```yaml +- date: 2026-09-27 + type: lectures + project: Intermediate Quantitative Economics with Python + url: https://python.quantecon.org/ + summary: Added three new lectures (Linear Quadratic Mean Field Games, Investment Under Uncertainty, and Optimal Growth Under Uncertainty and Tobin's q), and added exercises to the two auction lectures. + changes: + - title: Two sequels to rational_expectations + url: https://github.com/QuantEcon/lecture-python.myst/pull/1070 + - title: Add exercises and further reading + url: https://github.com/QuantEcon/lecture-python.myst/pull/1069 + - title: Add VCG comparison section and exercises + url: https://github.com/QuantEcon/lecture-python.myst/pull/1068 +``` + +and `_data/activity/2026-09-24-software.yml`: + +```yaml +- date: 2026-09-24 + type: release + project: QuantEcon.py + version: v0.12.0 + url: https://github.com/QuantEcon/QuantEcon.py/releases/tag/v0.12.0 +``` + ## News Post Tags Posts in `_posts/` use a `tag` frontmatter field with coloured pill badges on the News page. diff --git a/_data/activity/2026-06-14-lectures.yml b/_data/activity/2026-06-14-lectures.yml new file mode 100644 index 0000000..344b7bb --- /dev/null +++ b/_data/activity/2026-06-14-lectures.yml @@ -0,0 +1,11 @@ +# Activity data: see "News and Activity" in README.md for the schema. +# Migrated from the reporter's post _posts/2026-06-14-lectures.md (removed); excluded items removed. + +- date: 2026-06-12 + type: lectures + project: Advanced Quantitative Economics with Python + url: https://python-advanced.quantecon.org/ + summary: Added three lectures on contract theory under moral hazard and a lecture, Survey Data and Subjective Beliefs in Business Cycle Models. + changes: + - title: Add three lectures on contract theory and one lecture on survey data and robustness + url: https://github.com/QuantEcon/lecture-python-advanced.myst/pull/343 diff --git a/_data/activity/2026-06-21-lectures.yml b/_data/activity/2026-06-21-lectures.yml new file mode 100644 index 0000000..0f8dbac --- /dev/null +++ b/_data/activity/2026-06-21-lectures.yml @@ -0,0 +1,15 @@ +# Activity data: see "News and Activity" in README.md for the schema. +# Migrated from the reporter's post _posts/2026-06-21-lectures.md (removed); excluded items removed. + +- date: 2026-06-19 + type: lectures + project: Intermediate Quantitative Economics with Python + url: https://python.quantecon.org/ + summary: Rewrote the Non-Conjugate Priors lecture, adding notes on NUTS and variational inference, and revised the exposition and notation of Another Look at the Kalman Filter. + changes: + - title: 'Add explanatory notes to bayes_nonconj: NUTS and variational inference' + url: https://github.com/QuantEcon/lecture-python.myst/pull/918 + - title: Rewrite the Non-Conjugate Priors lecture + url: https://github.com/QuantEcon/lecture-python.myst/pull/913 + - title: Update exposition of first three sections + url: https://github.com/QuantEcon/lecture-python.myst/pull/903 diff --git a/_data/activity/2026-06-28-lectures.yml b/_data/activity/2026-06-28-lectures.yml new file mode 100644 index 0000000..959637c --- /dev/null +++ b/_data/activity/2026-06-28-lectures.yml @@ -0,0 +1,11 @@ +# Activity data: see "News and Activity" in README.md for the schema. +# Migrated from the reporter's post _posts/2026-06-28-lectures.md (removed); excluded items removed. + +- date: 2026-06-22 + type: lectures + project: Intermediate Quantitative Economics with Python + url: https://python.quantecon.org/ + summary: Added three new lectures, including The Kalman Filter and Vector Autoregressions and Robust Permanent Income and Pricing. + changes: + - title: Adding Tom's new lectures on Kalman Filter and Robust Income + url: https://github.com/QuantEcon/lecture-python.myst/pull/931 diff --git a/_data/activity/2026-07-05-lectures.yml b/_data/activity/2026-07-05-lectures.yml new file mode 100644 index 0000000..661bd88 --- /dev/null +++ b/_data/activity/2026-07-05-lectures.yml @@ -0,0 +1,13 @@ +# Activity data: see "News and Activity" in README.md for the schema. +# Migrated from the reporter's post _posts/2026-07-05-lectures.md (removed); excluded items removed. + +- date: 2026-07-02 + type: lectures + project: Intermediate Quantitative Economics with Python + url: https://python.quantecon.org/ + summary: Replaced the LQ Consumption Smoothing lecture with a trilogy of lectures on the LQ permanent income model, and added two lectures on unemployment dynamics, A Linear Model of Unemployment and Unemployment Dynamics with Asymmetric Shocks. + changes: + - title: Add Tom's LQ permanent income trilogy of lectures + url: https://github.com/QuantEcon/lecture-python.myst/pull/943 + - title: Add unemployment dynamics lectures (linear + nonlinear) + url: https://github.com/QuantEcon/lecture-python.myst/pull/928 diff --git a/_data/activity/2026-07-06-software.yml b/_data/activity/2026-07-06-software.yml new file mode 100644 index 0000000..3c86dc1 --- /dev/null +++ b/_data/activity/2026-07-06-software.yml @@ -0,0 +1,8 @@ +# Activity data: see "News and Activity" in README.md for the schema. +# Migrated from the reporter's post _posts/2026-07-06-software.md (removed); excluded items removed. + +- date: 2026-07-06 + type: release + project: ContinuousDPs.jl + version: v0.2.0 + url: https://github.com/QuantEcon/ContinuousDPs.jl/releases/tag/v0.2.0 diff --git a/_data/activity/2026-07-08-software.yml b/_data/activity/2026-07-08-software.yml new file mode 100644 index 0000000..3cbf6fe --- /dev/null +++ b/_data/activity/2026-07-08-software.yml @@ -0,0 +1,8 @@ +# Activity data: see "News and Activity" in README.md for the schema. +# Migrated from the reporter's post _posts/2026-07-08-software.md (removed); excluded items removed. + +- date: 2026-07-08 + type: release + project: QuantEcon.py + version: v0.11.3 + url: https://github.com/QuantEcon/QuantEcon.py/releases/tag/v0.11.3 diff --git a/_data/activity/2026-07-12-lectures.yml b/_data/activity/2026-07-12-lectures.yml new file mode 100644 index 0000000..4bcb961 --- /dev/null +++ b/_data/activity/2026-07-12-lectures.yml @@ -0,0 +1,19 @@ +# Activity data: see "News and Activity" in README.md for the schema. +# Migrated from the reporter's post _posts/2026-07-12-lectures.md (removed); excluded items removed. + +- date: 2026-07-07 + type: lectures + project: Advanced Quantitative Economics with Python + url: https://python-advanced.quantecon.org/ + summary: Added a new lecture, Dynamic Supply and Demand Curves. + changes: + - title: Adding Tom's lecture on dynamic supply and demand curves + url: https://github.com/QuantEcon/lecture-python-advanced.myst/pull/352 +- date: 2026-07-07 + type: lectures + project: Intermediate Quantitative Economics with Python + url: https://python.quantecon.org/ + summary: Added missing `pip install` cells to four lectures. + changes: + - title: Add missing pip dependencies + url: https://github.com/QuantEcon/lecture-python.myst/pull/951 diff --git a/_data/activity/2026-07-13-software.yml b/_data/activity/2026-07-13-software.yml new file mode 100644 index 0000000..3fa23d9 --- /dev/null +++ b/_data/activity/2026-07-13-software.yml @@ -0,0 +1,8 @@ +# Activity data: see "News and Activity" in README.md for the schema. +# Migrated from the reporter's post _posts/2026-07-13-software.md (removed); excluded items removed. + +- date: 2026-07-13 + type: release + project: QuantEcon.jl + version: v0.18.0 + url: https://github.com/QuantEcon/QuantEcon.jl/releases/tag/v0.18.0 diff --git a/_data/activity/2026-07-15-software.yml b/_data/activity/2026-07-15-software.yml new file mode 100644 index 0000000..7649092 --- /dev/null +++ b/_data/activity/2026-07-15-software.yml @@ -0,0 +1,28 @@ +# Activity data: see "News and Activity" in README.md for the schema. +# Migrated from the reporter's post _posts/2026-07-15-software.md (removed); excluded items removed. + +- date: 2026-07-15 + type: release + project: QuantEcon.py + version: v0.11.4 + url: https://github.com/QuantEcon/QuantEcon.py/releases/tag/v0.11.4 +- date: 2026-07-15 + type: release + project: GameTheory.jl + version: v0.7.0 + url: https://github.com/QuantEcon/GameTheory.jl/releases/tag/v0.7.0 +- date: 2026-07-15 + type: release + project: BasisMatrices.jl + version: v0.8.1 + url: https://github.com/QuantEcon/BasisMatrices.jl/releases/tag/v0.8.1 +- date: 2026-07-15 + type: release + project: ContinuousDPs.jl + version: v0.2.1 + url: https://github.com/QuantEcon/ContinuousDPs.jl/releases/tag/v0.2.1 +- date: 2026-07-15 + type: release + project: GameTracer.jl + version: v0.1.2 + url: https://github.com/QuantEcon/GameTracer.jl/releases/tag/v0.1.2 diff --git a/_data/activity/2026-07-20-software.yml b/_data/activity/2026-07-20-software.yml new file mode 100644 index 0000000..ca74900 --- /dev/null +++ b/_data/activity/2026-07-20-software.yml @@ -0,0 +1,8 @@ +# Activity data: see "News and Activity" in README.md for the schema. +# Migrated from the reporter's draft PR QuantEcon/website#241; excluded items removed. + +- date: 2026-07-20 + type: release + project: ContinuousDPs.jl + version: v0.3.0 + url: https://github.com/QuantEcon/ContinuousDPs.jl/releases/tag/v0.3.0 diff --git a/_data/activity/2026-07-26-lectures.yml b/_data/activity/2026-07-26-lectures.yml new file mode 100644 index 0000000..7db8dc3 --- /dev/null +++ b/_data/activity/2026-07-26-lectures.yml @@ -0,0 +1,13 @@ +# Activity data: see "News and Activity" in README.md for the schema. +# Migrated from the reporter's draft PR QuantEcon/website#242; excluded items removed. + +- date: 2026-07-23 + type: lectures + project: Intermediate Quantitative Economics with Python + url: https://python.quantecon.org/ + summary: Added a new section of ten lectures on Phillips Curve Tradeoffs, and added figure captions and standardized CDF notation in the Incorrect Models lecture. + changes: + - title: Adding Tom's new section on Phillips Curve Tradeoffs + url: https://github.com/QuantEcon/lecture-python.myst/pull/992 + - title: Add figure captions and use CDF + url: https://github.com/QuantEcon/lecture-python.myst/pull/982 diff --git a/_data/activity/2026-07-26-software.yml b/_data/activity/2026-07-26-software.yml new file mode 100644 index 0000000..77badd8 --- /dev/null +++ b/_data/activity/2026-07-26-software.yml @@ -0,0 +1,8 @@ +# Activity data: see "News and Activity" in README.md for the schema. +# Migrated from the reporter's draft PR QuantEcon/website#243; excluded items removed. + +- date: 2026-07-26 + type: release + project: ContinuousDPs.jl + version: v0.3.1 + url: https://github.com/QuantEcon/ContinuousDPs.jl/releases/tag/v0.3.1 diff --git a/_data/activity/2026-08-02-lectures.yml b/_data/activity/2026-08-02-lectures.yml new file mode 100644 index 0000000..cd6792a --- /dev/null +++ b/_data/activity/2026-08-02-lectures.yml @@ -0,0 +1,11 @@ +# Activity data: see "News and Activity" in README.md for the schema. +# Migrated from the reporter's draft PR QuantEcon/website#246; excluded items removed. + +- date: 2026-07-26 + type: lectures + project: Intermediate Quantitative Economics with Python + url: https://python.quantecon.org/ + summary: Added missing `quantecon` and `jax` installs to nine lectures. + changes: + - title: Add pip install cells for quantecon and jax in lectures that were missing them + url: https://github.com/QuantEcon/lecture-python.myst/pull/1006 diff --git a/_data/activity/2026-08-02-software.yml b/_data/activity/2026-08-02-software.yml new file mode 100644 index 0000000..b8f4322 --- /dev/null +++ b/_data/activity/2026-08-02-software.yml @@ -0,0 +1,23 @@ +# Activity data: see "News and Activity" in README.md for the schema. +# Migrated from the reporter's draft PR QuantEcon/website#247; excluded items removed. + +- date: 2026-08-02 + type: release + project: QuantEcon.jl + version: v0.19.0 + url: https://github.com/QuantEcon/QuantEcon.jl/releases/tag/v0.19.0 +- date: 2026-08-02 + type: release + project: GameTheory.jl + version: v0.7.1 + url: https://github.com/QuantEcon/GameTheory.jl/releases/tag/v0.7.1 +- date: 2026-08-02 + type: release + project: BasisMatrices.jl + version: v0.8.2 + url: https://github.com/QuantEcon/BasisMatrices.jl/releases/tag/v0.8.2 +- date: 2026-08-02 + type: release + project: ContinuousDPs.jl + version: v0.3.2 + url: https://github.com/QuantEcon/ContinuousDPs.jl/releases/tag/v0.3.2 diff --git a/_data/activity/2026-08-09-lectures.yml b/_data/activity/2026-08-09-lectures.yml new file mode 100644 index 0000000..31a13fc --- /dev/null +++ b/_data/activity/2026-08-09-lectures.yml @@ -0,0 +1,43 @@ +# Activity data: see "News and Activity" in README.md for the schema. +# Migrated from the reporter's draft PR QuantEcon/website#251; excluded items removed. + +- date: 2026-08-06 + type: lectures + project: A First Course in Quantitative Economics with Python + url: https://intro.quantecon.org/ + summary: Added a new lecture, Fitting Distributions to Data. + changes: + - title: 'New lecture: Fitting Distributions to Data' + url: https://github.com/QuantEcon/lecture-python-intro/pull/814 +- date: 2026-08-03 + type: lectures + project: Python Programming for Economics and Finance + url: https://python-programming.quantecon.org/ + summary: Added a language switcher linking to the Persian, French and Simplified Chinese editions. + changes: + - title: Add language switcher support for fa, fr and zh-cn editions + url: https://github.com/QuantEcon/lecture-python-programming/pull/490 +- date: 2026-08-03 + type: translation + project: Python Programming for Economics and Finance (Persian) + url: https://quantecon.github.io/lecture-python-programming.fa/ + summary: Enabled the language switcher between the English, Persian, French and Simplified Chinese editions. + changes: + - title: Enable the language switcher and fix this edition's site URLs + url: https://github.com/QuantEcon/lecture-python-programming.fa/pull/145 +- date: 2026-08-03 + type: translation + project: Python Programming for Economics and Finance (French) + url: https://quantecon.github.io/lecture-python-programming.fr/ + summary: Enabled the language switcher between the English, Persian, French and Simplified Chinese editions. + changes: + - title: Enable the language switcher for the French edition + url: https://github.com/QuantEcon/lecture-python-programming.fr/pull/21 +- date: 2026-08-03 + type: translation + project: Python Programming for Economics and Finance (Simplified Chinese) + url: https://quantecon.github.io/lecture-python-programming.zh-cn/ + summary: Enabled the language switcher between the English, Persian, French and Simplified Chinese editions. + changes: + - title: Enable the language switcher and fix URLs copied from the English config + url: https://github.com/QuantEcon/lecture-python-programming.zh-cn/pull/80 diff --git a/_data/activity/2026-08-12-software.yml b/_data/activity/2026-08-12-software.yml new file mode 100644 index 0000000..f2a2d03 --- /dev/null +++ b/_data/activity/2026-08-12-software.yml @@ -0,0 +1,8 @@ +# Activity data: see "News and Activity" in README.md for the schema. +# Migrated from the reporter's draft PR QuantEcon/website#252; excluded items removed. + +- date: 2026-08-12 + type: release + project: Expectations.jl + version: v1.9.3 + url: https://github.com/QuantEcon/Expectations.jl/releases/tag/v1.9.3 diff --git a/_data/activity/2026-08-23-lectures.yml b/_data/activity/2026-08-23-lectures.yml new file mode 100644 index 0000000..9047385 --- /dev/null +++ b/_data/activity/2026-08-23-lectures.yml @@ -0,0 +1,21 @@ +# Activity data: see "News and Activity" in README.md for the schema. +# Migrated from the reporter's draft PR QuantEcon/website#255; excluded items removed. + +- date: 2026-08-19 + type: lectures + project: A First Course in Quantitative Economics with Python + url: https://intro.quantecon.org/ + summary: Added two new lectures, Measuring Mobility and Bivariate Distributions. + changes: + - title: Add Measuring Mobility lecture + url: https://github.com/QuantEcon/lecture-python-intro/pull/839 + - title: Add Bivariate Distributions lecture + url: https://github.com/QuantEcon/lecture-python-intro/pull/837 +- date: 2026-08-20 + type: translation + project: A First Course in Quantitative Economics with Python (Simplified Chinese) + url: https://quantecon.github.io/lecture-intro.zh-cn/ + summary: Added the Simplified Chinese translation of the Measuring Mobility lecture. + changes: + - title: Add the Measuring Mobility lecture + url: https://github.com/QuantEcon/lecture-intro.zh-cn/pull/299 diff --git a/_data/activity/2026-09-14-software.yml b/_data/activity/2026-09-14-software.yml new file mode 100644 index 0000000..437013f --- /dev/null +++ b/_data/activity/2026-09-14-software.yml @@ -0,0 +1,8 @@ +# Activity data: see "News and Activity" in README.md for the schema. +# Migrated from the reporter's draft PR QuantEcon/website#258; excluded items removed. + +- date: 2026-09-14 + type: release + project: gametracer + version: 0.2.2 + url: https://github.com/QuantEcon/gametracer/releases/tag/0.2.2 diff --git a/_data/activity/2026-09-16-software.yml b/_data/activity/2026-09-16-software.yml new file mode 100644 index 0000000..be91e99 --- /dev/null +++ b/_data/activity/2026-09-16-software.yml @@ -0,0 +1,8 @@ +# Activity data: see "News and Activity" in README.md for the schema. +# Migrated from the reporter's draft PR QuantEcon/website#259; excluded items removed. + +- date: 2026-09-16 + type: release + project: GameTracer.jl + version: v0.2.0 + url: https://github.com/QuantEcon/GameTracer.jl/releases/tag/v0.2.0 diff --git a/_data/activity/2026-09-23-software.yml b/_data/activity/2026-09-23-software.yml new file mode 100644 index 0000000..0063a75 --- /dev/null +++ b/_data/activity/2026-09-23-software.yml @@ -0,0 +1,8 @@ +# Activity data: see "News and Activity" in README.md for the schema. +# Migrated from the reporter's draft PR QuantEcon/website#261; excluded items removed. + +- date: 2026-09-23 + type: release + project: GameTheory.jl + version: v0.7.2 + url: https://github.com/QuantEcon/GameTheory.jl/releases/tag/v0.7.2 diff --git a/_data/activity/2026-09-24-software.yml b/_data/activity/2026-09-24-software.yml new file mode 100644 index 0000000..3cf8b4c --- /dev/null +++ b/_data/activity/2026-09-24-software.yml @@ -0,0 +1,8 @@ +# Activity data: see "News and Activity" in README.md for the schema. +# Migrated from the reporter's draft PR QuantEcon/website#262; excluded items removed. + +- date: 2026-09-24 + type: release + project: QuantEcon.py + version: v0.12.0 + url: https://github.com/QuantEcon/QuantEcon.py/releases/tag/v0.12.0 diff --git a/_data/activity/2026-09-27-lectures.yml b/_data/activity/2026-09-27-lectures.yml new file mode 100644 index 0000000..ba484ec --- /dev/null +++ b/_data/activity/2026-09-27-lectures.yml @@ -0,0 +1,15 @@ +# Activity data: see "News and Activity" in README.md for the schema. +# Migrated from the reporter's draft PR QuantEcon/website#263; excluded items removed. + +- date: 2026-09-27 + type: lectures + project: Intermediate Quantitative Economics with Python + url: https://python.quantecon.org/ + summary: Added three new lectures (Linear Quadratic Mean Field Games, Investment Under Uncertainty, and Optimal Growth Under Uncertainty and Tobin's q), and added exercises to the two auction lectures. + changes: + - title: Two sequels to rational_expectations + url: https://github.com/QuantEcon/lecture-python.myst/pull/1070 + - title: Add exercises and further reading + url: https://github.com/QuantEcon/lecture-python.myst/pull/1069 + - title: Add VCG comparison section and exercises + url: https://github.com/QuantEcon/lecture-python.myst/pull/1068 diff --git a/_data/activity/2026-09-28-software.yml b/_data/activity/2026-09-28-software.yml new file mode 100644 index 0000000..fcd20d8 --- /dev/null +++ b/_data/activity/2026-09-28-software.yml @@ -0,0 +1,28 @@ +# Activity data: see "News and Activity" in README.md for the schema. +# Library releases the reporter missed, added by hand when Activity was introduced. + +- date: 2026-06-14 + type: release + project: GameTheory.jl + version: v0.6.0 + url: https://github.com/QuantEcon/GameTheory.jl/releases/tag/v0.6.0 +- date: 2026-06-14 + type: release + project: GameTracer.jl + version: v0.1.1 + url: https://github.com/QuantEcon/GameTracer.jl/releases/tag/v0.1.1 +- date: 2026-06-20 + type: release + project: jlgametheory + version: v0.1.2 + url: https://github.com/QuantEcon/jlgametheory/releases/tag/v0.1.2 +- date: 2026-08-16 + type: release + project: jlgametheory + version: v0.2.0 + url: https://github.com/QuantEcon/jlgametheory/releases/tag/v0.2.0 +- date: 2026-09-19 + type: release + project: jlgametheory + version: v0.3.0 + url: https://github.com/QuantEcon/jlgametheory/releases/tag/v0.3.0 diff --git a/_layouts/activity.html b/_layouts/activity.html new file mode 100644 index 0000000..138ab99 --- /dev/null +++ b/_layouts/activity.html @@ -0,0 +1,61 @@ +--- +layout: default +--- + +{{ content }} + +{% comment %} + Activity entries live in _data/activity/-.yml, one file per + reporter run and stream (see "News and Activity" in README.md). Flatten every file into one + list in filename order, group it by day (group_by_exp keeps that order within a day), + sort the days newest first, then group the days by month. Sorting whole days rather + than entries keeps the order stable, since Liquid's sort is not a stable sort. +{% endcomment %} +{% assign files = "" | split: "" %} +{% for file in site.data.activity %} + {% assign files = files | push: file[0] %} +{% endfor %} +{% assign files = files | sort %} +{% assign entries = "" | split: "" %} +{% for file in files %} + {% assign entries = entries | concat: site.data.activity[file] %} +{% endfor %} +{% assign days = entries | group_by_exp: "entry", "entry.date | date: '%Y-%m-%d'" | sort: "name" | reverse %} +{% assign months = days | group_by_exp: "day", "day.name | slice: 0, 7" %} + +
+ {% for month in months %} +
+

{{ month.items[0].items[0].date | date: "%B %Y" }}

+
    + {% for day in month.items %} + {% for entry in day.items %} +
  • + +
    +

    + {{ entry.type }} + {{ entry.project | escape }}{% if entry.version %} {{ entry.version | escape }}{% endif %} +

    + {% if entry.summary %} + {% comment %} Plain text, except that `backtick` spans become inline code. {% endcomment %} + {% assign parts = entry.summary | escape | split: "`" %} +

    {% for part in parts %}{% assign odd = forloop.index0 | modulo: 2 %}{% if odd == 1 %}{{ part }}{% else %}{{ part }}{% endif %}{% endfor %}

    + {% endif %} + {% if entry.changes %} + + {% endif %} +
    +
  • + {% endfor %} + {% endfor %} +
+
+ {% else %} +

No activity has been recorded yet.

+ {% endfor %} +
diff --git a/_layouts/default.html b/_layouts/default.html index 2b57845..25cd390 100755 --- a/_layouts/default.html +++ b/_layouts/default.html @@ -97,7 +97,7 @@

QuantEcon

  • Donate
  • - News + News @@ -153,6 +153,7 @@

    Resources

  • Code Libraries
  • Workshops
  • News
  • +
  • Activity
  • Cheatsheets
  • diff --git a/_posts/2026-06-14-lectures.md b/_posts/2026-06-14-lectures.md deleted file mode 100644 index d3a0838..0000000 --- a/_posts/2026-06-14-lectures.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -layout: post -title: "Lecture updates — June 8–14, 2026" -author: QuantEcon -excerpt: "Updates to the QuantEcon lectures." -tag: [lectures] ---- - -- 📚 **[Advanced Quantitative Economics with Python](https://python-advanced.quantecon.org/)** — New lectures on contract theory (principal-agent problems) and survey data robustness expanded the course's coverage of applied microeconomic theory and empirical methods. - - [Add three lectures on contract theory and one lecture on survey data and robustness](https://github.com/QuantEcon/lecture-python-advanced.myst/pull/343) diff --git a/_posts/2026-06-14-website.md b/_posts/2026-06-14-website.md deleted file mode 100644 index 9a7025a..0000000 --- a/_posts/2026-06-14-website.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -layout: post -title: "Website update — June 8–14, 2026" -author: QuantEcon -excerpt: "Updates to the QuantEcon website." -tag: [website] ---- - -- 🏠 **[quantecon.org](https://quantecon.org/)** — Converted workshops to a Jekyll collection and added redirects for removed developer pages to their new locations on quantecon.org. - - [convert workshops to a Jekyll collection](https://github.com/QuantEcon/website/pull/204) - - [redirect removed developer pages to their new homes](https://github.com/QuantEcon/website/pull/209) diff --git a/_posts/2026-06-21-lectures.md b/_posts/2026-06-21-lectures.md deleted file mode 100644 index b53ff4c..0000000 --- a/_posts/2026-06-21-lectures.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -layout: post -title: "Lecture updates — June 14–21, 2026" -author: QuantEcon -excerpt: "Updates to the QuantEcon lectures." -tag: [lectures] ---- - -- 📚 **[Quantitative Economics with Python](https://python.quantecon.org/)** — Rewrote the non-conjugate priors lecture with improved NUTS and variational inference explanations, and enhanced the Kalman filter lecture's opening exposition. - - [Add explanatory notes to bayes_nonconj: NUTS and variational inference](https://github.com/QuantEcon/lecture-python.myst/pull/918) - - [Rewrite the Non-Conjugate Priors lecture](https://github.com/QuantEcon/lecture-python.myst/pull/913) - - [update exposition of first three sections](https://github.com/QuantEcon/lecture-python.myst/pull/903) diff --git a/_posts/2026-06-21-website.md b/_posts/2026-06-21-website.md deleted file mode 100644 index e192e25..0000000 --- a/_posts/2026-06-21-website.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -layout: post -title: "Website update — June 14–21, 2026" -author: QuantEcon -excerpt: "Updates to the QuantEcon website." -tag: [website] ---- - -- 🏠 **[quantecon.org](https://quantecon.org/)** — Added inline news tags for website and software content to improve categorization and visual organization on quantecon.org. - - [news tags for website/software, placed inline with title](https://github.com/QuantEcon/website/pull/220) diff --git a/_posts/2026-06-28-lectures.md b/_posts/2026-06-28-lectures.md deleted file mode 100644 index e89039f..0000000 --- a/_posts/2026-06-28-lectures.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -layout: post -title: "Lecture updates — June 21–28, 2026" -author: QuantEcon -excerpt: "Updates to the QuantEcon lectures." -tag: [lectures] ---- - -- 📚 **[Quantitative Economics with Python](https://python.quantecon.org/)** — New lectures on the Kalman Filter and Robust Income were integrated into the Quantitative Economics with Python curriculum. - - [Adding Tom's new lectures on Kalman Filter and Robust Income](https://github.com/QuantEcon/lecture-python.myst/pull/931) diff --git a/_posts/2026-07-05-lectures.md b/_posts/2026-07-05-lectures.md deleted file mode 100644 index 99635f7..0000000 --- a/_posts/2026-07-05-lectures.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -layout: post -title: "Lecture updates — June 28 – July 5, 2026" -author: QuantEcon -excerpt: "Updates to the QuantEcon lectures." -tag: [lectures] ---- - -- 📚 **[Quantitative Economics with Python](https://python.quantecon.org/)** — Added lectures covering LQ permanent income theory and unemployment dynamics (both linear and nonlinear models) to the Quantitative Economics with Python curriculum. - - [Add Tom's LQ permanent income trilogy of lectures](https://github.com/QuantEcon/lecture-python.myst/pull/943) - - [Add unemployment dynamics lectures (linear + nonlinear)](https://github.com/QuantEcon/lecture-python.myst/pull/928) diff --git a/_posts/2026-07-06-software.md b/_posts/2026-07-06-software.md deleted file mode 100644 index f0c8521..0000000 --- a/_posts/2026-07-06-software.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: post -title: "Software releases — July 6, 2026" -author: QuantEcon -excerpt: "New QuantEcon software and library releases." -tag: [software] ---- - -- 📦 **[ContinuousDPs.jl v0.2.0 released](https://github.com/QuantEcon/ContinuousDPs.jl/releases/tag/v0.2.0)** diff --git a/_posts/2026-07-08-software.md b/_posts/2026-07-08-software.md deleted file mode 100644 index 1ae5879..0000000 --- a/_posts/2026-07-08-software.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: post -title: "Software releases — July 8, 2026" -author: QuantEcon -excerpt: "New QuantEcon software and library releases." -tag: [software] ---- - -- 📦 **[QuantEcon.py v0.11.3 released](https://github.com/QuantEcon/QuantEcon.py/releases/tag/v0.11.3)** diff --git a/_posts/2026-07-12-lectures.md b/_posts/2026-07-12-lectures.md deleted file mode 100644 index fcfa02a..0000000 --- a/_posts/2026-07-12-lectures.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: post -title: "Lecture updates — July 5–12, 2026" -author: QuantEcon -excerpt: "Updates to the QuantEcon lectures." -tag: [lectures] ---- - -- 📚 **[Quantitative Economics with Python](https://python.quantecon.org/)** — Fixed missing `pip` dependencies to ensure reliable environment setup for quantitative economics Python workflows. - - [Add missing `pip` dependencies](https://github.com/QuantEcon/lecture-python.myst/pull/951) - -- 📚 **[Advanced Quantitative Economics with Python](https://python-advanced.quantecon.org/)** — Added a new lecture on dynamic supply and demand curves using vector autoregression, expanding the quantitative economics curriculum with advanced time-series modeling of market dynamics. - - [Adding Tom's lecture on dynamic supply and demand curves](https://github.com/QuantEcon/lecture-python-advanced.myst/pull/352) - -- 📚 **[A First Course in Quantitative Economics with Python](https://intro.quantecon.org/)** — Migrated GitHub Pages deployment to artifact-based deployment, modernizing the publishing infrastructure for the quantitative economics Python course. - - [Migrate GH Pages deploy to artifact-based deployment](https://github.com/QuantEcon/lecture-python-intro/pull/783) diff --git a/_posts/2026-07-13-software.md b/_posts/2026-07-13-software.md deleted file mode 100644 index 8434036..0000000 --- a/_posts/2026-07-13-software.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: post -title: "Software releases — July 13, 2026" -author: QuantEcon -excerpt: "New QuantEcon software and library releases." -tag: [software] ---- - -- 📦 **[QuantEcon.jl v0.18.0 released](https://github.com/QuantEcon/QuantEcon.jl/releases/tag/v0.18.0)** diff --git a/_posts/2026-07-15-software.md b/_posts/2026-07-15-software.md deleted file mode 100644 index dab507d..0000000 --- a/_posts/2026-07-15-software.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -layout: post -title: "Software releases — July 15, 2026" -author: QuantEcon -excerpt: "New QuantEcon software and library releases." -tag: [software] ---- - -- 📦 **[GameTracer.jl v0.1.2 released](https://github.com/QuantEcon/GameTracer.jl/releases/tag/v0.1.2)** -- 📦 **[ContinuousDPs.jl v0.2.1 released](https://github.com/QuantEcon/ContinuousDPs.jl/releases/tag/v0.2.1)** -- 📦 **[BasisMatrices.jl v0.7.1 released](https://github.com/QuantEcon/BasisMatrices.jl/releases/tag/v0.7.1)** -- 📦 **[BasisMatrices.jl v0.8.1 released](https://github.com/QuantEcon/BasisMatrices.jl/releases/tag/v0.8.1)** -- 📦 **[GameTheory.jl v0.7.0 released](https://github.com/QuantEcon/GameTheory.jl/releases/tag/v0.7.0)** -- 📦 **[QuantEcon.py v0.11.4 released](https://github.com/QuantEcon/QuantEcon.py/releases/tag/v0.11.4)** diff --git a/assets/main.scss b/assets/main.scss index 647b5af..d5d7450 100755 --- a/assets/main.scss +++ b/assets/main.scss @@ -645,12 +645,13 @@ img { background: #b83d4b; // darker than $qe-red (#D25663) to pass WCAG AA (5.52:1) with white text color: #fff; } - &--website { - background: #2a9d8f; + // Activity entry types + &--release { + background: #9558b2; color: #fff; } - &--software { - background: #9558b2; + &--translation { + background: #1f7a70; // teal darkened from #2a9d8f to pass WCAG AA with white text color: #fff; } &--tools { @@ -1554,6 +1555,95 @@ section { } } +/*-------------------------------------------------------------- +# Activity +--------------------------------------------------------------*/ + +.activity-month { + // Reset the global `section` padding and overflow. + padding: 0; + overflow: visible; + margin-bottom: 2.5rem; +} + +.activity-feed { + margin-top: 2.5rem; +} + +.activity-month-title { + font-family: $font-brand; + font-weight: 400; + font-size: 1.4rem; + color: $color-dark; + padding-bottom: 0.5rem; + margin-bottom: 0; + border-bottom: 1px solid $color-border; +} + +.activity-list { + list-style: none; + padding: 0; + margin: 0; +} + +.activity-item { + display: flex; + gap: 1rem; + padding: 0.9rem 0; + border-bottom: 1px solid #edf0f5; + &:last-child { border-bottom: 0; } +} + +.activity-date { + flex: 0 0 4rem; + font-size: 0.8rem; + color: #666; // not the site's #888 meta grey, which fails WCAG AA at this size + padding-top: 0.15rem; +} + +.activity-main { + flex: 1; + min-width: 0; +} + +.activity-title { + margin: 0; + font-weight: 600; + font-size: 0.95rem; + color: $color-dark; + .qe-badge { + display: inline-block; + margin: 0 0.5rem 0 0; + vertical-align: middle; + } +} + +.activity-summary { + font-size: 0.9rem; + color: #555; + line-height: 1.5; + margin: 0.3rem 0 0 0; +} + +.activity-changes { + font-size: 0.85rem; + line-height: 1.5; + margin: 0.3rem 0 0 0; + padding-left: 1.1rem; + color: #666; +} + +@media (max-width: 576px) { + .activity-item { + flex-direction: column; + gap: 0.25rem; + } + .activity-date { + flex-basis: auto; + padding-top: 0; + } +} + /* Individual post article */ .post-article { max-width: 760px; diff --git a/pages/activity.md b/pages/activity.md new file mode 100644 index 0000000..bc868cc --- /dev/null +++ b/pages/activity.md @@ -0,0 +1,25 @@ +--- +title: Activity +layout: activity +permalink: /activity/ +menu_item: false +# The reporter's posts lived in _posts/ until the News/Activity split; keep their URLs working. +redirect_from: + - /2026/06/14/lectures.html + - /2026/06/14/website.html + - /2026/06/21/lectures.html + - /2026/06/21/website.html + - /2026/06/28/lectures.html + - /2026/07/05/lectures.html + - /2026/07/06/software.html + - /2026/07/08/software.html + - /2026/07/12/lectures.html + - /2026/07/13/software.html + - /2026/07/15/software.html +--- + +# Activity + +A running log of what is changing across QuantEcon: library releases, updates to the lecture series, and updates to their translated editions. It is compiled from public activity on [GitHub](https://github.com/QuantEcon). + +For announcements such as new projects, grants, people and workshops, see [News](/news/). diff --git a/pages/archives.md b/pages/archives.md index 9b2adf0..f36cedb 100755 --- a/pages/archives.md +++ b/pages/archives.md @@ -6,3 +6,5 @@ menu_item: true --- # News + +Announcements from QuantEcon: new projects, grants, people and workshops. For library releases and lecture updates, see [Activity](/activity/). diff --git a/sitemap.xml b/sitemap.xml index c1f3f03..2500615 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -7,12 +7,14 @@ search: exclude {% for page in site.pages %} + {% unless page.sitemap == false %} {{ page.url | absolute_url }} {{site.time | date: '%Y-%m-%d' }} daily 0.5 + {% endunless %} {% endfor %} {% for post in site.posts %}