diff --git a/talks-public/2018-10-06-lille-pycon/2018-10-06-lille-pycon.org b/common/modules/pypi-loader.org
similarity index 58%
copy from talks-public/2018-10-06-lille-pycon/2018-10-06-lille-pycon.org
copy to common/modules/pypi-loader.org
index 365a053..94ac3e0 100644
--- a/talks-public/2018-10-06-lille-pycon/2018-10-06-lille-pycon.org
+++ b/common/modules/pypi-loader.org
@@ -1,374 +1,261 @@
#+COLUMNS: %40ITEM %10BEAMER_env(Env) %9BEAMER_envargs(Env Args) %10BEAMER_act(Act) %4BEAMER_col(Col) %10BEAMER_extra(Extra) %8BEAMER_opt(Opt)
-#+TITLE: Software Heritage
-#+SUBTITLE: The Great Library of (Python) Source Code
-#+BEAMER_HEADER: \date[06/10/2018, PyConFr]{6 Oct 2018\\PyConFr - Lille, France}
-#+DATE: 6 October 2018
-
-#+INCLUDE: "../../common/modules/prelude-toc.org" :minlevel 1
-#+INCLUDE: "../../common/modules/169.org"
-#+BEAMER_HEADER: \institute[Software Heritage]{Software Heritage --- {\tt \{olasd,zack\}@softwareheritage.org}}
-#+BEAMER_HEADER: \author{Nicolas Dandrimont, Stefano Zacchiroli}
-
-#+LATEX_HEADER_EXTRA: \usepackage{bbding}
-#+LATEX_HEADER_EXTRA: \DeclareUnicodeCharacter{66D}{\FiveStar}
-#+LATEX_HEADER_EXTRA: \usepackage{tikz}
-#+LATEX_HEADER_EXTRA: \usetikzlibrary{arrows,shapes}
-#+LATEX_HEADER_EXTRA: \definecolor{swh-orange}{RGB}{254,205,27}
-#+LATEX_HEADER_EXTRA: \definecolor{swh-red}{RGB}{226,0,38}
-#+LATEX_HEADER_EXTRA: \definecolor{swh-green}{RGB}{77,181,174}
-
-# Syntax highlighting setup
-
-#+LATEX_HEADER_EXTRA: \usepackage{minted}
-#+LaTeX_HEADER_EXTRA: \usemintedstyle{tango}
-#+LaTeX_HEADER_EXTRA: \newminted{python}{fontsize=\scriptsize}
-#+LaTeX_HEADER_EXTRA: \newminted{html}{fontsize=\scriptsize}
-
-#+name: setup-minted
-#+begin_src emacs-lisp :exports results :results silent
- (setq org-latex-listings 'minted)
- (setq org-latex-minted-options
- '(("fontsize" "\\scriptsize")
- ("linenos" "")))
- (setq org-latex-to-pdf-process
- '("pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
- "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
- "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"))
-#+end_src
-# End syntax highlighting setup
-
-* The Software Commons
-** (Free) Software is everywhere
- #+latex: \begin{center}
- #+ATTR_LATEX: :width .75\linewidth
- file:software-center.pdf
- #+latex: \end{center}
- #+INCLUDE: "../../common/modules/source-code-different-short.org::#softwareisdifferent" :minlevel 2
-
-** Our Software Commons
- #+INCLUDE: "../../common/modules/foss-commons.org::#commonsdef" :only-contents t
- #+BEAMER: \pause
-*** Source code is /a precious part/ of our commons
- \hfill are we taking care of it?
- #+INCLUDE: "../../common/modules/swh-motivations-foss.org::#main" :only-contents t :minlevel 2
-
-* Software Heritage
- #+INCLUDE: "../../common/modules/swh-overview-sourcecode.org::#mission" :minlevel 2
-** Core principles
- #+latex: \begin{center}
- #+ATTR_LATEX: :width .9\linewidth
- file:SWH-as-foundation-slim.png
- #+latex: \end{center}
- #+BEAMER: \pause
-*** Open approach :B_block:BMCOL:
- :PROPERTIES:
- :BEAMER_col: 0.4
- :BEAMER_env: block
- :END:
- - 100% Free Software
- - transparency
-*** In for the long haul :B_block:BMCOL:
- :PROPERTIES:
- :BEAMER_col: 0.4
- :BEAMER_env: block
- :END:
- - replication
- - non profit
- #+INCLUDE: "../../common/modules/status-extended.org::#archivinggoals" :minlevel 2
- #+INCLUDE: "../../common/modules/status-extended.org::#architecture" :minlevel 2 :only-contents t
- #+INCLUDE: "../../common/modules/status-extended.org::#dagdetail" :minlevel 2 :only-contents t
- #+INCLUDE: "../../common/modules/status-extended.org::#archive" :minlevel 2
-
-# * Accessing the archive
- # #+INCLUDE: "../../common/modules/status-extended.org::#api" :only-contents t
- #+INCLUDE: "../../common/modules/status-extended.org::#apiintro" :minlevel 2
- #+INCLUDE: "../../common/modules/vault.org::#overview" :minlevel 2
- #+INCLUDE: "../../common/modules/webui.org::#intro" :minlevel 2
-
-* The Great Library of Python source code
-** Data flow redux
+# Tech details about archive Python packages from PyPI
+
+#+INCLUDE: "prelude.org" :minlevel 1
+* PyPI loader
+ :PROPERTIES:
+ :CUSTOM_ID: main
+ :END:
+** Data flow redux
+
#+BEAMER: \begin{center}\includegraphics[width=\extblockscale{1.2\textwidth}]{swh-dataflow.pdf}\end{center}
** Our focus
#+BEAMER: \begin{center}\includegraphics[width=\extblockscale{1.2\textwidth}]{swh-dataflow-pypi.pdf}\end{center}
** Listing all Python modules (1/3)
***
#+BEAMER: \footnotesize \centering
https://forge.softwareheritage.org/source/swh-lister/
*** What does a Software Heritage lister do?
- crawls and parses upstream list of project APIs
- generates origins (records that the project has been detected) and loading tasks
#+beamer: \pause
***
Credits go to Avi Kelman for the lister scaffolding, and to Antoine Dumont for the PyPI implementation
#+beamer: \pause
*** A visit of the Cheese Shop
- A little bit more efficiently than [[https://www.youtube.com/watch?v=B3KBuQHHKx0][John Cleese]]
- Uses https://pypi.org/simple/ (according to the warehouse docs, the only "package listing" API that's not on the way to deprecation)
** Listing all Python modules (2/3)
*** GET https://pypi.org/simple/
#+begin_src html
Simple index
0
0-._.-._.-._.-._.-._.-._.-0
[...]
Django
[...]
#+end_src
-
** Listing all Python modules (3/3)
***
#+begin_src python
# Origin specification
origin = {
'type': 'pypi',
'url': 'https://pypi.org/packages/Django/', # Canonical project URL
}
#+end_src
#+beamer: \pause
#+begin_src python
# Scheduler task specification
update_task = {
'type': 'origin-update-pypi',
'policy': 'recurring',
'next_run': datetime.now(tz=timezone.utc),
'arguments': {
'args': [
'Django', # Project name
'https://pypi.org/packages/Django/', # Origin URL
'https://pypi.org/pypi/Django/json', # Metadata URL
],
'kwargs': {},
},
'priority': None,
}
#+end_src
** Task scheduling (1/2)
***
#+BEAMER: \footnotesize \centering
https://forge.softwareheritage.org/source/swh-scheduler/
*** What does the Software Heritage scheduler do?
- Record **recurrent** and **one-shot** jobs in a database
- Schedules runs of these jobs, records their results
- Manages retries for transient job failures (remote service unavailable, ...)
- Manages adaptive intervals for recurrent jobs
** Task scheduling (2/2)
*** Builds upon trusted Python tools
- Celery is used as a task queuing middleware, and for its worker management framework
- Workers send task results through the Celery events mechanism
#+beamer: \pause
*** And makes them more useful to us
- The database is the single source of truth
- ~swh.scheduler.celery_backend.runner~ pulls tasks from the database into
Celery, limiting the RabbitMQ queue depth (allows task prioritization)
- ~swh.scheduler.celery_backend.listener~ fetches task results from Celery
events and updates the database
- Archival of elapsed tasks/runs/logs in elasticsearch to keep the database
snappy
** Loading Python packages (1/4)
*** What's a Python package anyway?
- Source distributions (~sdists~, currently tarballs or zips)
- Binary distributions (~bdists~, which are mostly wheels these days)
As we're interested in source code, Software Heritage looks at ~sdists~ exclusively
#+beamer: \pause
- The current sdist format is unspecified: you probably get a tarball, which
maybe contains a ~setup.py~ somewhere
- When building a sdist, distutils generates a machine-readable ~PKG-INFO~ file
is generated and puts in the tarball
#+beamer: \pause
*** The long wait for PEP 517 ("A build-system independent format for source trees")
- One uniform transport format: a gzipped tarball with one toplevel directory
- Machine parsable data about the project by default (~pyproject.toml~)
Hopefully soon in your nearest Cheese Shop (go help the folks in PyPA!)
** Loading Python packages (2/4)
***
#+BEAMER: \footnotesize \centering
https://forge.softwareheritage.org/source/swh-loader-pypi/
*** Common loading process
:PROPERTIES:
:BEAMER_col: 0.5
:BEAMER_env: block
:BEAMER_act: +-
:END:
Implemented in ~swh.loader.core~
- Fetch metadata about current versions
- Compare to latest loaded versions
- Download and process versions we had never seen
- Load new data
*** PyPI specifics
:PROPERTIES:
:BEAMER_col: 0.5
:BEAMER_env: block
:BEAMER_act: +-
:END:
Implemented in ~swh.loader.pypi~
- Comparison done using the ~sdist~ digests
- PKG-INFO metadata parsed and saved
- versions with multiple sdists imported separately
** Loading Python packages (3/4)
*** PyPI snapshots
#+begin_src python
pifpaf_snapshot = {
'id': b'\xc6_\xfe#\x94\xba\x81\xc3\x94\x9b\xeb[\x06\xf5JC\x0f\x19n\xa6',
'branches': {
b'releases/0.0.1': {
b'releases/0.0.2': {
...
b'releases/2.1.2': {
'target': b'\x8a\xcd\xf3l\xee\xe50\xe2\x81]\x08:5\xd9_\xd6\xeff\xc9\xa3',
'target_type': 'revision',
},
b'releases/2.1.2.dev7': {
'target': b'hGh\x15h|\xf3\xd2v\xf8\xec-\xa7\xfeuB\xda3\x83x',
'target_type': 'revision',
},
b'HEAD': {
'target': b'releases/2.1.2',
'target_type': 'alias',
},
},
}
#+end_src
** Loading Python packages (4/4)
*** PyPI revisions
#+begin_src python -i
pifpaf_revision = {
'id': b'\x8a\xcd\xf3l\xee\xe50\xe2\x81]\x08:5\xd9_\xd6\xeff\xc9\xa3',
'author': {
'name': b'Julien Danjou',
...
},
'date': {
'timestamp': {'seconds': 1538577319, 'microseconds': 0},
},
...
'type': 'tar',
'directory': b'\xa4\xf2\xad\xb1\xef\r\xcf\x894::@=\xf9R\x86=\x19"\\',
'message': b'2.1.2',
#+end_src
#+beamer: \pause
#+begin_src python -i
'metadata': {
'project': { # Metadata parsed from PKG-INFO
'name': 'pifpaf',
'author': 'Julien Danjou',
'license': None,
'summary': 'Suite of tools and fixtures to manage daemons for testing',
'version': '2.1.2',
...
#+end_src
**
***
#+begin_src python -i
'classifiers': [
'Intended Audience :: Information Technology',
...
],
...
},
#+end_src
#+beamer: \pause
#+begin_src python -i
'original_artifact': { # The original tarball we downloaded
'url': 'https://files.pythonhosted.org/packages/cc/ce/2599[...]',
'date': '2018-10-03T14:35:19',
'sha1': '00c4efc47580b5c4ad1dcdb5118159f9b057b0fd',
'size': 192940,
'sha256': 'a6eef2ae56ac90d02df5f45885973e108c960a2ea113cc76[...]',
'filename': 'pifpaf-2.1.2.tar.gz',
'sha1_git': '8ce7e3ddda336dd9edff26ae8efaf4b81439c42c',
'blake2s256': 'c4f7fcd4324715f4bfb54f8eefb10fde803efb7a02e2[...]',
'archive_type': 'tar',
},
},
'synthetic': True,
'parents': [],
}
#+end_src
-
-* Getting involved
- #+INCLUDE: "../../common/modules/status-extended.org::#features" :minlevel 2
-** You can help!
- #+BEAMER: \vspace{-2mm}
-*** Coding
- | ٭٭ | Web UI improvements |
- | ٭٭٭ | loaders for unsupported VCS/package formats |
- | ٭٭٭ | listers for unsupported forges/package managers |
- #+BEAMER: \vspace{-2mm} \footnotesize \centering
- \url{https://forge.softwareheritage.org/} \\
- \url{https://docs.softwareheritage.org/devel/}
- #+BEAMER: \pause
-*** Community
- | ٭٭٭ | spread the world, help us with sustainability |
- | ٭٭ | document endangered source code |
- #+BEAMER: \vspace{-2mm} \footnotesize \centering
- \url{wiki.softwareheritage.org/Suggestion_box}
- #+BEAMER: \pause
-*** Join us
- #+BEAMER: \footnotesize \centering
- - \url{www.softwareheritage.org/jobs} --- *job openings*
- - \url{wiki.softwareheritage.org/Internship} --- *internships*
-** Conclusion
-*** Software Heritage is
- - a reference archive of *all Free Software* ever written
- - an international, open, nonprofit, *mutualized infrastructure*
- - *now accessible* to developers, users, vendors
- - at the service of our community, *at the service of society*
-*** Come in, we're open!
- \url{www.softwareheritage.org} --- general information \\
- \url{wiki.softwareheritage.org} --- internships, leads \\
- \url{forge.softwareheritage.org} --- our own code
diff --git a/talks-public/2018-10-06-lille-pycon/2018-10-06-lille-pycon.org b/talks-public/2018-10-06-lille-pycon/2018-10-06-lille-pycon.org
index 365a053..43a3e32 100644
--- a/talks-public/2018-10-06-lille-pycon/2018-10-06-lille-pycon.org
+++ b/talks-public/2018-10-06-lille-pycon/2018-10-06-lille-pycon.org
@@ -1,374 +1,123 @@
#+COLUMNS: %40ITEM %10BEAMER_env(Env) %9BEAMER_envargs(Env Args) %10BEAMER_act(Act) %4BEAMER_col(Col) %10BEAMER_extra(Extra) %8BEAMER_opt(Opt)
#+TITLE: Software Heritage
#+SUBTITLE: The Great Library of (Python) Source Code
#+BEAMER_HEADER: \date[06/10/2018, PyConFr]{6 Oct 2018\\PyConFr - Lille, France}
#+DATE: 6 October 2018
#+INCLUDE: "../../common/modules/prelude-toc.org" :minlevel 1
#+INCLUDE: "../../common/modules/169.org"
#+BEAMER_HEADER: \institute[Software Heritage]{Software Heritage --- {\tt \{olasd,zack\}@softwareheritage.org}}
#+BEAMER_HEADER: \author{Nicolas Dandrimont, Stefano Zacchiroli}
#+LATEX_HEADER_EXTRA: \usepackage{bbding}
#+LATEX_HEADER_EXTRA: \DeclareUnicodeCharacter{66D}{\FiveStar}
#+LATEX_HEADER_EXTRA: \usepackage{tikz}
#+LATEX_HEADER_EXTRA: \usetikzlibrary{arrows,shapes}
#+LATEX_HEADER_EXTRA: \definecolor{swh-orange}{RGB}{254,205,27}
#+LATEX_HEADER_EXTRA: \definecolor{swh-red}{RGB}{226,0,38}
#+LATEX_HEADER_EXTRA: \definecolor{swh-green}{RGB}{77,181,174}
# Syntax highlighting setup
#+LATEX_HEADER_EXTRA: \usepackage{minted}
#+LaTeX_HEADER_EXTRA: \usemintedstyle{tango}
#+LaTeX_HEADER_EXTRA: \newminted{python}{fontsize=\scriptsize}
#+LaTeX_HEADER_EXTRA: \newminted{html}{fontsize=\scriptsize}
#+name: setup-minted
#+begin_src emacs-lisp :exports results :results silent
(setq org-latex-listings 'minted)
(setq org-latex-minted-options
'(("fontsize" "\\scriptsize")
("linenos" "")))
(setq org-latex-to-pdf-process
'("pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
"pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
"pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"))
#+end_src
# End syntax highlighting setup
* The Software Commons
** (Free) Software is everywhere
#+latex: \begin{center}
#+ATTR_LATEX: :width .75\linewidth
file:software-center.pdf
#+latex: \end{center}
#+INCLUDE: "../../common/modules/source-code-different-short.org::#softwareisdifferent" :minlevel 2
** Our Software Commons
#+INCLUDE: "../../common/modules/foss-commons.org::#commonsdef" :only-contents t
#+BEAMER: \pause
*** Source code is /a precious part/ of our commons
\hfill are we taking care of it?
#+INCLUDE: "../../common/modules/swh-motivations-foss.org::#main" :only-contents t :minlevel 2
* Software Heritage
#+INCLUDE: "../../common/modules/swh-overview-sourcecode.org::#mission" :minlevel 2
** Core principles
#+latex: \begin{center}
#+ATTR_LATEX: :width .9\linewidth
file:SWH-as-foundation-slim.png
#+latex: \end{center}
#+BEAMER: \pause
*** Open approach :B_block:BMCOL:
:PROPERTIES:
:BEAMER_col: 0.4
:BEAMER_env: block
:END:
- 100% Free Software
- transparency
*** In for the long haul :B_block:BMCOL:
:PROPERTIES:
:BEAMER_col: 0.4
:BEAMER_env: block
:END:
- replication
- non profit
#+INCLUDE: "../../common/modules/status-extended.org::#archivinggoals" :minlevel 2
#+INCLUDE: "../../common/modules/status-extended.org::#architecture" :minlevel 2 :only-contents t
#+INCLUDE: "../../common/modules/status-extended.org::#dagdetail" :minlevel 2 :only-contents t
#+INCLUDE: "../../common/modules/status-extended.org::#archive" :minlevel 2
# * Accessing the archive
# #+INCLUDE: "../../common/modules/status-extended.org::#api" :only-contents t
#+INCLUDE: "../../common/modules/status-extended.org::#apiintro" :minlevel 2
#+INCLUDE: "../../common/modules/vault.org::#overview" :minlevel 2
#+INCLUDE: "../../common/modules/webui.org::#intro" :minlevel 2
* The Great Library of Python source code
-** Data flow redux
- #+BEAMER: \begin{center}\includegraphics[width=\extblockscale{1.2\textwidth}]{swh-dataflow.pdf}\end{center}
-** Our focus
- #+BEAMER: \begin{center}\includegraphics[width=\extblockscale{1.2\textwidth}]{swh-dataflow-pypi.pdf}\end{center}
-
-** Listing all Python modules (1/3)
-***
-#+BEAMER: \footnotesize \centering
-https://forge.softwareheritage.org/source/swh-lister/
-
-
-*** What does a Software Heritage lister do?
-- crawls and parses upstream list of project APIs
-- generates origins (records that the project has been detected) and loading tasks
-
-
-#+beamer: \pause
-***
-Credits go to Avi Kelman for the lister scaffolding, and to Antoine Dumont for the PyPI implementation
-
-#+beamer: \pause
-
-
-*** A visit of the Cheese Shop
-
-- A little bit more efficiently than [[https://www.youtube.com/watch?v=B3KBuQHHKx0][John Cleese]]
-- Uses https://pypi.org/simple/ (according to the warehouse docs, the only "package listing" API that's not on the way to deprecation)
-
-** Listing all Python modules (2/3)
-
-*** GET https://pypi.org/simple/
-#+begin_src html
-
-
-
- Simple index
-
-
- 0
- 0-._.-._.-._.-._.-._.-._.-0
- [...]
- Django
- [...]
-
-
-#+end_src
-
-
-** Listing all Python modules (3/3)
-
-***
-
-#+begin_src python
-
- # Origin specification
- origin = {
- 'type': 'pypi',
- 'url': 'https://pypi.org/packages/Django/', # Canonical project URL
- }
-#+end_src
-
-#+beamer: \pause
-
-#+begin_src python
- # Scheduler task specification
- update_task = {
- 'type': 'origin-update-pypi',
- 'policy': 'recurring',
- 'next_run': datetime.now(tz=timezone.utc),
- 'arguments': {
- 'args': [
- 'Django', # Project name
- 'https://pypi.org/packages/Django/', # Origin URL
- 'https://pypi.org/pypi/Django/json', # Metadata URL
- ],
- 'kwargs': {},
- },
- 'priority': None,
- }
-
-#+end_src
-
-** Task scheduling (1/2)
-***
-#+BEAMER: \footnotesize \centering
-https://forge.softwareheritage.org/source/swh-scheduler/
-
-*** What does the Software Heritage scheduler do?
-- Record **recurrent** and **one-shot** jobs in a database
-- Schedules runs of these jobs, records their results
-- Manages retries for transient job failures (remote service unavailable, ...)
-- Manages adaptive intervals for recurrent jobs
-
-** Task scheduling (2/2)
-
-*** Builds upon trusted Python tools
-- Celery is used as a task queuing middleware, and for its worker management framework
-- Workers send task results through the Celery events mechanism
-
-#+beamer: \pause
-
-*** And makes them more useful to us
-- The database is the single source of truth
-- ~swh.scheduler.celery_backend.runner~ pulls tasks from the database into
- Celery, limiting the RabbitMQ queue depth (allows task prioritization)
-- ~swh.scheduler.celery_backend.listener~ fetches task results from Celery
- events and updates the database
-- Archival of elapsed tasks/runs/logs in elasticsearch to keep the database
- snappy
-
-** Loading Python packages (1/4)
-
-*** What's a Python package anyway?
-
-- Source distributions (~sdists~, currently tarballs or zips)
-- Binary distributions (~bdists~, which are mostly wheels these days)
-
-As we're interested in source code, Software Heritage looks at ~sdists~ exclusively
-
-#+beamer: \pause
-
-- The current sdist format is unspecified: you probably get a tarball, which
- maybe contains a ~setup.py~ somewhere
-- When building a sdist, distutils generates a machine-readable ~PKG-INFO~ file
- is generated and puts in the tarball
-
-#+beamer: \pause
-
-*** The long wait for PEP 517 ("A build-system independent format for source trees")
-
-- One uniform transport format: a gzipped tarball with one toplevel directory
-- Machine parsable data about the project by default (~pyproject.toml~)
-Hopefully soon in your nearest Cheese Shop (go help the folks in PyPA!)
-
-** Loading Python packages (2/4)
-
-***
-#+BEAMER: \footnotesize \centering
- https://forge.softwareheritage.org/source/swh-loader-pypi/
-
-*** Common loading process
- :PROPERTIES:
- :BEAMER_col: 0.5
- :BEAMER_env: block
- :BEAMER_act: +-
- :END:
-
-Implemented in ~swh.loader.core~
-
-- Fetch metadata about current versions
-- Compare to latest loaded versions
-- Download and process versions we had never seen
-- Load new data
-
-*** PyPI specifics
- :PROPERTIES:
- :BEAMER_col: 0.5
- :BEAMER_env: block
- :BEAMER_act: +-
- :END:
-
-Implemented in ~swh.loader.pypi~
-
-- Comparison done using the ~sdist~ digests
-- PKG-INFO metadata parsed and saved
-- versions with multiple sdists imported separately
-
-** Loading Python packages (3/4)
-
-*** PyPI snapshots
-
-#+begin_src python
- pifpaf_snapshot = {
- 'id': b'\xc6_\xfe#\x94\xba\x81\xc3\x94\x9b\xeb[\x06\xf5JC\x0f\x19n\xa6',
- 'branches': {
- b'releases/0.0.1': {
- b'releases/0.0.2': {
- ...
- b'releases/2.1.2': {
- 'target': b'\x8a\xcd\xf3l\xee\xe50\xe2\x81]\x08:5\xd9_\xd6\xeff\xc9\xa3',
- 'target_type': 'revision',
- },
- b'releases/2.1.2.dev7': {
- 'target': b'hGh\x15h|\xf3\xd2v\xf8\xec-\xa7\xfeuB\xda3\x83x',
- 'target_type': 'revision',
- },
- b'HEAD': {
- 'target': b'releases/2.1.2',
- 'target_type': 'alias',
- },
- },
- }
-#+end_src
-
-** Loading Python packages (4/4)
-*** PyPI revisions
-
-#+begin_src python -i
-pifpaf_revision = {
- 'id': b'\x8a\xcd\xf3l\xee\xe50\xe2\x81]\x08:5\xd9_\xd6\xeff\xc9\xa3',
- 'author': {
- 'name': b'Julien Danjou',
- ...
- },
- 'date': {
- 'timestamp': {'seconds': 1538577319, 'microseconds': 0},
- },
- ...
- 'type': 'tar',
- 'directory': b'\xa4\xf2\xad\xb1\xef\r\xcf\x894::@=\xf9R\x86=\x19"\\',
- 'message': b'2.1.2',
-#+end_src
-#+beamer: \pause
-#+begin_src python -i
- 'metadata': {
- 'project': { # Metadata parsed from PKG-INFO
- 'name': 'pifpaf',
- 'author': 'Julien Danjou',
- 'license': None,
- 'summary': 'Suite of tools and fixtures to manage daemons for testing',
- 'version': '2.1.2',
- ...
-#+end_src
-**
-***
-#+begin_src python -i
- 'classifiers': [
- 'Intended Audience :: Information Technology',
- ...
- ],
- ...
- },
-#+end_src
-#+beamer: \pause
-#+begin_src python -i
- 'original_artifact': { # The original tarball we downloaded
- 'url': 'https://files.pythonhosted.org/packages/cc/ce/2599[...]',
- 'date': '2018-10-03T14:35:19',
- 'sha1': '00c4efc47580b5c4ad1dcdb5118159f9b057b0fd',
- 'size': 192940,
- 'sha256': 'a6eef2ae56ac90d02df5f45885973e108c960a2ea113cc76[...]',
- 'filename': 'pifpaf-2.1.2.tar.gz',
- 'sha1_git': '8ce7e3ddda336dd9edff26ae8efaf4b81439c42c',
- 'blake2s256': 'c4f7fcd4324715f4bfb54f8eefb10fde803efb7a02e2[...]',
- 'archive_type': 'tar',
- },
- },
- 'synthetic': True,
- 'parents': [],
-}
-#+end_src
-
+ #+INCLUDE: "../../common/modules/pypi-loader.org::#main" :only-contents t :minlevel 2
* Getting involved
#+INCLUDE: "../../common/modules/status-extended.org::#features" :minlevel 2
** You can help!
#+BEAMER: \vspace{-2mm}
*** Coding
| ٭٭ | Web UI improvements |
| ٭٭٭ | loaders for unsupported VCS/package formats |
| ٭٭٭ | listers for unsupported forges/package managers |
#+BEAMER: \vspace{-2mm} \footnotesize \centering
\url{https://forge.softwareheritage.org/} \\
\url{https://docs.softwareheritage.org/devel/}
#+BEAMER: \pause
*** Community
| ٭٭٭ | spread the world, help us with sustainability |
| ٭٭ | document endangered source code |
#+BEAMER: \vspace{-2mm} \footnotesize \centering
\url{wiki.softwareheritage.org/Suggestion_box}
#+BEAMER: \pause
*** Join us
#+BEAMER: \footnotesize \centering
- \url{www.softwareheritage.org/jobs} --- *job openings*
- \url{wiki.softwareheritage.org/Internship} --- *internships*
** Conclusion
*** Software Heritage is
- a reference archive of *all Free Software* ever written
- an international, open, nonprofit, *mutualized infrastructure*
- *now accessible* to developers, users, vendors
- at the service of our community, *at the service of society*
*** Come in, we're open!
\url{www.softwareheritage.org} --- general information \\
\url{wiki.softwareheritage.org} --- internships, leads \\
\url{forge.softwareheritage.org} --- our own code